- Timestamp:
- 2018-10-29T15:20:26+01:00 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/UKMO/dev_r5518_AMM15_package/NEMOGCM/NEMO/NST_SRC/agrif_opa_update.F90
r10248 r10251 1 #define TWO_WAY /* TWO WAY NESTING */ 2 #undef DECAL_FEEDBACK /* SEPARATION of INTERFACES*/ 3 1 #define TWO_WAY 2 4 3 MODULE agrif_opa_update 5 4 #if defined key_agrif && ! defined key_offline … … 12 11 USE wrk_nemo 13 12 USE dynspg_oce 14 USE zdf_oce ! vertical physics: ocean variables15 13 16 14 IMPLICIT NONE 17 15 PRIVATE 18 16 19 PUBLIC Agrif_Update_Tra, Agrif_Update_Dyn ,Update_Scales20 # if defined key_zdftke 21 PUBLIC Agrif_Update_Tke22 # endif 17 PUBLIC Agrif_Update_Tra, Agrif_Update_Dyn 18 19 INTEGER, PUBLIC :: nbcline = 0 20 23 21 !!---------------------------------------------------------------------- 24 !! NEMO/NST 3. 6, NEMO Consortium (2010)22 !! NEMO/NST 3.3 , NEMO Consortium (2010) 25 23 !! $Id$ 26 24 !! Software governed by the CeCILL licence (NEMOGCM/NEMO_CeCILL.txt) … … 29 27 CONTAINS 30 28 31 RECURSIVE SUBROUTINE Agrif_Update_Tra()29 SUBROUTINE Agrif_Update_Tra( kt ) 32 30 !!--------------------------------------------- 33 31 !! *** ROUTINE Agrif_Update_Tra *** 34 32 !!--------------------------------------------- 35 ! 36 IF (Agrif_Root()) RETURN 37 ! 38 #if defined TWO_WAY 39 IF (lwp.AND.lk_agrif_debug) Write(*,*) 'Update tracers from grid Number',Agrif_Fixed(), 'nbcline', nbcline 33 !! 34 INTEGER, INTENT(in) :: kt 35 REAL(wp), POINTER, DIMENSION(:,:,:,:) :: ztab 36 37 38 IF((Agrif_NbStepint() .NE. (Agrif_irhot()-1)).AND.(kt /= 0)) RETURN 39 #if defined TWO_WAY 40 CALL wrk_alloc( jpi, jpj, jpk, jpts, ztab ) 40 41 41 42 Agrif_UseSpecialValueInUpdate = .TRUE. 42 43 Agrif_SpecialValueFineGrid = 0. 43 ! 44 44 45 IF (MOD(nbcline,nbclineupdate) == 0) THEN 45 # if ! defined DECAL_FEEDBACK 46 CALL Agrif_Update_Variable(tsn_id, procname=updateTS) 47 # else 48 CALL Agrif_Update_Variable(tsn_id, locupdate=(/1,0/),procname=updateTS) 49 # endif 50 ELSE 51 # if ! defined DECAL_FEEDBACK 52 CALL Agrif_Update_Variable(tsn_id,locupdate=(/0,2/), procname=updateTS) 53 # else 54 CALL Agrif_Update_Variable(tsn_id,locupdate=(/1,2/), procname=updateTS) 55 # endif 56 ENDIF 57 ! 46 CALL Agrif_Update_Variable(ztab,tsn_id, procname=updateTS) 47 ELSE 48 CALL Agrif_Update_Variable(ztab,tsn_id,locupdate=(/0,2/), procname=updateTS) 49 ENDIF 50 58 51 Agrif_UseSpecialValueInUpdate = .FALSE. 59 ! 60 IF ( lk_agrif_doupd ) THEN ! Initialisation: do recursive update: 61 CALL Agrif_ChildGrid_To_ParentGrid() 62 CALL Agrif_Update_Tra() 63 CALL Agrif_ParentGrid_To_ChildGrid() 64 ENDIF 65 ! 52 53 CALL wrk_dealloc( jpi, jpj, jpk, jpts, ztab ) 66 54 #endif 67 ! 55 68 56 END SUBROUTINE Agrif_Update_Tra 69 57 70 RECURSIVE SUBROUTINE Agrif_Update_Dyn()58 SUBROUTINE Agrif_Update_Dyn( kt ) 71 59 !!--------------------------------------------- 72 60 !! *** ROUTINE Agrif_Update_Dyn *** 73 61 !!--------------------------------------------- 74 ! 75 IF (Agrif_Root()) RETURN 76 ! 62 !! 63 INTEGER, INTENT(in) :: kt 64 REAL(wp), POINTER, DIMENSION(:,:) :: ztab2d 65 REAL(wp), POINTER, DIMENSION(:,:,:) :: ztab 66 67 68 IF ((Agrif_NbStepint() .NE. (Agrif_irhot()-1)).AND.(kt /= 0)) Return 77 69 #if defined TWO_WAY 78 IF (lwp.AND.lk_agrif_debug) Write(*,*) 'Update momentum from grid Number',Agrif_Fixed(), 'nbcline', nbcline 79 80 Agrif_UseSpecialValueInUpdate = .FALSE. 81 Agrif_SpecialValueFineGrid = 0. 82 ! 70 CALL wrk_alloc( jpi, jpj, ztab2d ) 71 CALL wrk_alloc( jpi, jpj, jpk, ztab ) 72 83 73 IF (mod(nbcline,nbclineupdate) == 0) THEN 84 # if ! defined DECAL_FEEDBACK 85 CALL Agrif_Update_Variable(un_update_id,procname = updateU) 86 CALL Agrif_Update_Variable(vn_update_id,procname = updateV) 87 # else 88 CALL Agrif_Update_Variable(un_update_id,locupdate1=(/0,-1/),locupdate2=(/1,-2/),procname = updateU) 89 CALL Agrif_Update_Variable(vn_update_id,locupdate1=(/1,-2/),locupdate2=(/0,-1/),procname = updateV) 90 # endif 91 ELSE 92 # if ! defined DECAL_FEEDBACK 93 CALL Agrif_Update_Variable(un_update_id,locupdate=(/0,1/),procname = updateU) 94 CALL Agrif_Update_Variable(vn_update_id,locupdate=(/0,1/),procname = updateV) 95 # else 96 CALL Agrif_Update_Variable(un_update_id,locupdate1=(/0,1/),locupdate2=(/1,1/),procname = updateU) 97 CALL Agrif_Update_Variable(vn_update_id,locupdate1=(/1,1/),locupdate2=(/0,1/),procname = updateV) 98 # endif 99 ENDIF 100 101 # if ! defined DECAL_FEEDBACK 102 CALL Agrif_Update_Variable(e1u_id,procname = updateU2d) 103 CALL Agrif_Update_Variable(e2v_id,procname = updateV2d) 104 # else 105 CALL Agrif_Update_Variable(e1u_id,locupdate1=(/0,-1/),locupdate2=(/1,-2/),procname = updateU2d) 106 CALL Agrif_Update_Variable(e2v_id,locupdate1=(/1,-2/),locupdate2=(/0,-1/),procname = updateV2d) 107 # endif 108 109 # if defined key_dynspg_ts 74 CALL Agrif_Update_Variable(ztab,un_id,procname = updateU) 75 CALL Agrif_Update_Variable(ztab,vn_id,procname = updateV) 76 ELSE 77 CALL Agrif_Update_Variable(ztab,un_id,locupdate=(/0,1/),procname = updateU) 78 CALL Agrif_Update_Variable(ztab,vn_id,locupdate=(/0,1/),procname = updateV) 79 ENDIF 80 81 CALL Agrif_Update_Variable(ztab2d,e1u_id,procname = updateU2d) 82 CALL Agrif_Update_Variable(ztab2d,e2v_id,procname = updateV2d) 83 84 #if defined key_dynspg_ts 110 85 IF (ln_bt_fw) THEN 111 86 ! Update time integrated transports 112 87 IF (mod(nbcline,nbclineupdate) == 0) THEN 113 # if ! defined DECAL_FEEDBACK 114 CALL Agrif_Update_Variable(ub2b_update_id,procname = updateub2b) 115 CALL Agrif_Update_Variable(vb2b_update_id,procname = updatevb2b) 116 # else 117 CALL Agrif_Update_Variable(ub2b_update_id,locupdate1=(/0,-1/),locupdate2=(/1,-2/),procname = updateub2b) 118 CALL Agrif_Update_Variable(vb2b_update_id,locupdate1=(/1,-2/),locupdate2=(/0,-1/),procname = updatevb2b) 119 # endif 88 CALL Agrif_Update_Variable(ztab2d,ub2b_id,procname = updateub2b) 89 CALL Agrif_Update_Variable(ztab2d,vb2b_id,procname = updatevb2b) 120 90 ELSE 121 # if ! defined DECAL_FEEDBACK 122 CALL Agrif_Update_Variable(ub2b_update_id,locupdate=(/0,1/),procname = updateub2b) 123 CALL Agrif_Update_Variable(vb2b_update_id,locupdate=(/0,1/),procname = updatevb2b) 124 # else 125 CALL Agrif_Update_Variable(ub2b_update_id,locupdate1=(/0,1/),locupdate2=(/1,1/),procname = updateub2b) 126 CALL Agrif_Update_Variable(vb2b_update_id,locupdate1=(/1,1/),locupdate2=(/0,1/),procname = updatevb2b) 127 # endif 91 CALL Agrif_Update_Variable(ztab2d,ub2b_id,locupdate=(/0,1/),procname = updateub2b) 92 CALL Agrif_Update_Variable(ztab2d,vb2b_id,locupdate=(/0,1/),procname = updatevb2b) 128 93 ENDIF 129 END IF 130 # 131 ! 94 END IF 95 #endif 96 132 97 nbcline = nbcline + 1 133 ! 134 Agrif_UseSpecialValueInUpdate = .TRUE. 98 99 Agrif_UseSpecialValueInUpdate = .TRUE. 135 100 Agrif_SpecialValueFineGrid = 0. 136 # if ! defined DECAL_FEEDBACK 137 CALL Agrif_Update_Variable(sshn_id,procname = updateSSH) 138 # else 139 CALL Agrif_Update_Variable(sshn_id,locupdate=(/1,0/),procname = updateSSH) 140 # endif 101 CALL Agrif_Update_Variable(ztab2d,sshn_id,procname = updateSSH) 141 102 Agrif_UseSpecialValueInUpdate = .FALSE. 142 ! 103 104 CALL wrk_dealloc( jpi, jpj, ztab2d ) 105 CALL wrk_dealloc( jpi, jpj, jpk, ztab ) 106 107 !Done in step 108 ! CALL Agrif_ChildGrid_To_ParentGrid() 109 ! CALL recompute_diags( kt ) 110 ! CALL Agrif_ParentGrid_To_ChildGrid() 111 143 112 #endif 144 ! 145 ! Do recursive update: 146 IF ( lk_agrif_doupd ) THEN ! Initialisation: do recursive update: 147 CALL Agrif_ChildGrid_To_ParentGrid() 148 CALL Agrif_Update_Dyn() 149 CALL Agrif_ParentGrid_To_ChildGrid() 150 ENDIF 151 ! 113 152 114 END SUBROUTINE Agrif_Update_Dyn 153 115 154 # if defined key_zdftke 155 SUBROUTINE Agrif_Update_Tke( kt ) 156 !!--------------------------------------------- 157 !! *** ROUTINE Agrif_Update_Tke *** 158 !!--------------------------------------------- 159 !! 116 SUBROUTINE recompute_diags( kt ) 117 !!--------------------------------------------- 118 !! *** ROUTINE recompute_diags *** 119 !!--------------------------------------------- 160 120 INTEGER, INTENT(in) :: kt 161 ! 162 IF( ( Agrif_NbStepint() .NE. 0 ) .AND. (kt /= 0) ) RETURN 163 # if defined TWO_WAY 164 165 Agrif_UseSpecialValueInUpdate = .TRUE. 166 Agrif_SpecialValueFineGrid = 0. 167 168 CALL Agrif_Update_Variable( en_id, locupdate=(/0,0/), procname=updateEN ) 169 CALL Agrif_Update_Variable(avt_id, locupdate=(/0,0/), procname=updateAVT ) 170 CALL Agrif_Update_Variable(avm_id, locupdate=(/0,0/), procname=updateAVM ) 171 172 Agrif_UseSpecialValueInUpdate = .FALSE. 173 174 # endif 175 176 END SUBROUTINE Agrif_Update_Tke 177 # endif /* key_zdftke */ 121 122 END SUBROUTINE recompute_diags 178 123 179 124 SUBROUTINE updateTS( tabres, i1, i2, j1, j2, k1, k2, n1, n2, before ) … … 182 127 !!--------------------------------------------- 183 128 # include "domzgr_substitute.h90" 129 184 130 INTEGER, INTENT(in) :: i1,i2,j1,j2,k1,k2,n1,n2 185 131 REAL(wp),DIMENSION(i1:i2,j1:j2,k1:k2,n1:n2), INTENT(inout) :: tabres 186 LOGICAL, INTENT(in) :: before187 !! 132 LOGICAL, iNTENT(in) :: before 133 188 134 INTEGER :: ji,jj,jk,jn 189 !!--------------------------------------------- 190 ! 135 191 136 IF (before) THEN 192 137 DO jn = n1,n2 … … 201 146 ELSE 202 147 IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) THEN 203 148 ! Add asselin part 204 149 DO jn = n1,n2 205 150 DO jk=k1,k2 … … 208 153 IF( tabres(ji,jj,jk,jn) .NE. 0. ) THEN 209 154 tsb(ji,jj,jk,jn) = tsb(ji,jj,jk,jn) & 210 211 155 & + atfp * ( tabres(ji,jj,jk,jn) & 156 & - tsn(ji,jj,jk,jn) ) * tmask(ji,jj,jk) 212 157 ENDIF 213 158 ENDDO … … 216 161 ENDDO 217 162 ENDIF 163 218 164 DO jn = n1,n2 219 165 DO jk=k1,k2 … … 228 174 END DO 229 175 ENDIF 230 ! 176 231 177 END SUBROUTINE updateTS 232 178 … … 236 182 !!--------------------------------------------- 237 183 # include "domzgr_substitute.h90" 238 !! 184 239 185 INTEGER, INTENT(in) :: i1, i2, j1, j2, k1, k2 240 186 REAL(wp), DIMENSION(i1:i2,j1:j2,k1:k2), INTENT(inout) :: tabres 241 187 LOGICAL, INTENT(in) :: before 242 !! 188 243 189 INTEGER :: ji, jj, jk 244 190 REAL(wp) :: zrhoy 245 !!--------------------------------------------- 246 ! 191 247 192 IF (before) THEN 248 193 zrhoy = Agrif_Rhoy() … … 264 209 IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) THEN ! Add asselin part 265 210 ub(ji,jj,jk) = ub(ji,jj,jk) & 266 211 & + atfp * ( tabres(ji,jj,jk) - un(ji,jj,jk) ) * umask(ji,jj,jk) 267 212 ENDIF 268 213 ! … … 272 217 END DO 273 218 ENDIF 274 ! 219 275 220 END SUBROUTINE updateu 276 221 … … 280 225 !!--------------------------------------------- 281 226 # include "domzgr_substitute.h90" 282 !! 227 283 228 INTEGER :: i1,i2,j1,j2,k1,k2 284 229 INTEGER :: ji,jj,jk 285 230 REAL(wp), DIMENSION(i1:i2,j1:j2,k1:k2) :: tabres 286 231 LOGICAL :: before 287 !! 232 288 233 REAL(wp) :: zrhox 289 !!--------------------------------------------- 290 ! 234 291 235 IF (before) THEN 292 236 zrhox = Agrif_Rhox() … … 308 252 IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) THEN ! Add asselin part 309 253 vb(ji,jj,jk) = vb(ji,jj,jk) & 310 254 & + atfp * ( tabres(ji,jj,jk) - vn(ji,jj,jk) ) * vmask(ji,jj,jk) 311 255 ENDIF 312 256 ! … … 316 260 END DO 317 261 ENDIF 318 ! 262 319 263 END SUBROUTINE updatev 320 264 … … 324 268 !!--------------------------------------------- 325 269 # include "domzgr_substitute.h90" 326 !! 270 327 271 INTEGER, INTENT(in) :: i1, i2, j1, j2 328 272 REAL(wp), DIMENSION(i1:i2,j1:j2), INTENT(inout) :: tabres 329 273 LOGICAL, INTENT(in) :: before 330 !! 274 331 275 INTEGER :: ji, jj, jk 332 276 REAL(wp) :: zrhoy 333 277 REAL(wp) :: zcorr 334 !!--------------------------------------------- 335 ! 278 336 279 IF (before) THEN 337 280 zrhoy = Agrif_Rhoy() … … 383 326 END DO 384 327 ENDIF 385 ! 328 386 329 END SUBROUTINE updateu2d 387 330 … … 390 333 !! *** ROUTINE updatev2d *** 391 334 !!--------------------------------------------- 335 392 336 INTEGER, INTENT(in) :: i1, i2, j1, j2 393 337 REAL(wp), DIMENSION(i1:i2,j1:j2), INTENT(inout) :: tabres 394 338 LOGICAL, INTENT(in) :: before 395 !! 339 396 340 INTEGER :: ji, jj, jk 397 341 REAL(wp) :: zrhox 398 342 REAL(wp) :: zcorr 399 !!--------------------------------------------- 400 ! 343 401 344 IF (before) THEN 402 345 zrhox = Agrif_Rhox() … … 448 391 END DO 449 392 ENDIF 450 ! 393 451 394 END SUBROUTINE updatev2d 452 395 453 454 396 SUBROUTINE updateSSH( tabres, i1, i2, j1, j2, before ) 455 397 !!--------------------------------------------- 456 398 !! *** ROUTINE updateSSH *** 457 399 !!--------------------------------------------- 400 # include "domzgr_substitute.h90" 401 458 402 INTEGER, INTENT(in) :: i1, i2, j1, j2 459 403 REAL(wp), DIMENSION(i1:i2,j1:j2), INTENT(inout) :: tabres 460 404 LOGICAL, INTENT(in) :: before 461 !! 405 462 406 INTEGER :: ji, jj 463 !!--------------------------------------------- 464 ! 407 465 408 IF (before) THEN 466 409 DO jj=j1,j2 … … 470 413 END DO 471 414 ELSE 415 472 416 #if ! defined key_dynspg_ts 473 417 IF (.NOT.(lk_agrif_fstep.AND.(neuler==0))) THEN 474 418 DO jj=j1,j2 475 419 DO ji=i1,i2 476 477 420 sshb(ji,jj) = sshb(ji,jj) & 421 & + atfp * ( tabres(ji,jj) - sshn(ji,jj) ) * tmask(ji,jj,1) 478 422 END DO 479 423 END DO … … 486 430 END DO 487 431 ENDIF 488 ! 432 489 433 END SUBROUTINE updateSSH 490 434 … … 493 437 !! *** ROUTINE updateub2b *** 494 438 !!--------------------------------------------- 439 495 440 INTEGER, INTENT(in) :: i1, i2, j1, j2 496 441 REAL(wp), DIMENSION(i1:i2,j1:j2), INTENT(inout) :: tabres 497 442 LOGICAL, INTENT(in) :: before 498 !! 443 499 444 INTEGER :: ji, jj 500 445 REAL(wp) :: zrhoy 501 !!--------------------------------------------- 502 ! 446 503 447 IF (before) THEN 504 448 zrhoy = Agrif_Rhoy() … … 516 460 END DO 517 461 ENDIF 518 ! 462 519 463 END SUBROUTINE updateub2b 520 464 … … 523 467 !! *** ROUTINE updatevb2b *** 524 468 !!--------------------------------------------- 469 525 470 INTEGER, INTENT(in) :: i1, i2, j1, j2 526 471 REAL(wp), DIMENSION(i1:i2,j1:j2), INTENT(inout) :: tabres 527 472 LOGICAL, INTENT(in) :: before 528 !! 473 529 474 INTEGER :: ji, jj 530 475 REAL(wp) :: zrhox 531 !!--------------------------------------------- 532 ! 476 533 477 IF (before) THEN 534 478 zrhox = Agrif_Rhox() … … 546 490 END DO 547 491 ENDIF 548 ! 492 549 493 END SUBROUTINE updatevb2b 550 551 552 SUBROUTINE update_scales( tabres, i1, i2, j1, j2, k1, k2, n1,n2, before )553 ! currently not used554 !!---------------------------------------------555 !! *** ROUTINE updateT ***556 !!---------------------------------------------557 # include "domzgr_substitute.h90"558 559 INTEGER, INTENT(in) :: i1,i2,j1,j2,k1,k2,n1,n2560 REAL(wp),DIMENSION(i1:i2,j1:j2,k1:k2,n1:n2), INTENT(inout) :: tabres561 LOGICAL, iNTENT(in) :: before562 563 INTEGER :: ji,jj,jk564 REAL(wp) :: ztemp565 566 IF (before) THEN567 DO jk=k1,k2568 DO jj=j1,j2569 DO ji=i1,i2570 tabres(ji,jj,jk,1) = e1t(ji,jj)*e2t(ji,jj)*tmask(ji,jj,jk)571 tabres(ji,jj,jk,2) = e1t(ji,jj)*tmask(ji,jj,jk)572 tabres(ji,jj,jk,3) = e2t(ji,jj)*tmask(ji,jj,jk)573 END DO574 END DO575 END DO576 tabres(:,:,:,1)=tabres(:,:,:,1)*Agrif_Rhox()*Agrif_Rhoy()577 tabres(:,:,:,2)=tabres(:,:,:,2)*Agrif_Rhox()578 tabres(:,:,:,3)=tabres(:,:,:,3)*Agrif_Rhoy()579 ELSE580 DO jk=k1,k2581 DO jj=j1,j2582 DO ji=i1,i2583 IF( tabres(ji,jj,jk,1) .NE. 0. ) THEN584 print *,'VAL = ',ji,jj,jk,tabres(ji,jj,jk,1),e1t(ji,jj)*e2t(ji,jj)*tmask(ji,jj,jk)585 print *,'VAL2 = ',ji,jj,jk,tabres(ji,jj,jk,2),e1t(ji,jj)*tmask(ji,jj,jk)586 print *,'VAL3 = ',ji,jj,jk,tabres(ji,jj,jk,3),e2t(ji,jj)*tmask(ji,jj,jk)587 ztemp = sqrt(tabres(ji,jj,jk,1)/(tabres(ji,jj,jk,2)*tabres(ji,jj,jk,3)))588 print *,'CORR = ',ztemp-1.589 print *,'NEW VALS = ',tabres(ji,jj,jk,2)*ztemp,tabres(ji,jj,jk,3)*ztemp, &590 tabres(ji,jj,jk,2)*ztemp*tabres(ji,jj,jk,3)*ztemp591 e1t(ji,jj) = tabres(ji,jj,jk,2)*ztemp592 e2t(ji,jj) = tabres(ji,jj,jk,3)*ztemp593 END IF594 END DO595 END DO596 END DO597 ENDIF598 !599 END SUBROUTINE update_scales600 601 # if defined key_zdftke602 SUBROUTINE updateEN( ptab, i1, i2, j1, j2, k1, k2, before )603 !!---------------------------------------------604 !! *** ROUTINE updateen ***605 !!---------------------------------------------606 INTEGER, INTENT(in) :: i1, i2, j1, j2, k1, k2607 REAL(wp), DIMENSION(i1:i2,j1:j2,k1:k2), INTENT(inout) :: ptab608 LOGICAL, INTENT(in) :: before609 !!---------------------------------------------610 !611 IF (before) THEN612 ptab (i1:i2,j1:j2,k1:k2) = en(i1:i2,j1:j2,k1:k2)613 ELSE614 en(i1:i2,j1:j2,k1:k2) = ptab (i1:i2,j1:j2,k1:k2)615 ENDIF616 !617 END SUBROUTINE updateEN618 619 620 SUBROUTINE updateAVT( ptab, i1, i2, j1, j2, k1, k2, before )621 !!---------------------------------------------622 !! *** ROUTINE updateavt ***623 !!---------------------------------------------624 INTEGER, INTENT(in) :: i1, i2, j1, j2, k1, k2625 REAL(wp), DIMENSION(i1:i2,j1:j2,k1:k2), INTENT(inout) :: ptab626 LOGICAL, INTENT(in) :: before627 !!---------------------------------------------628 !629 IF (before) THEN630 ptab (i1:i2,j1:j2,k1:k2) = avt_k(i1:i2,j1:j2,k1:k2)631 ELSE632 avt_k(i1:i2,j1:j2,k1:k2) = ptab (i1:i2,j1:j2,k1:k2)633 ENDIF634 !635 END SUBROUTINE updateAVT636 637 638 SUBROUTINE updateAVM( ptab, i1, i2, j1, j2, k1, k2, before )639 !!---------------------------------------------640 !! *** ROUTINE updateavm ***641 !!---------------------------------------------642 INTEGER, INTENT(in) :: i1, i2, j1, j2, k1, k2643 REAL(wp), DIMENSION(i1:i2,j1:j2,k1:k2), INTENT(inout) :: ptab644 LOGICAL, INTENT(in) :: before645 !!---------------------------------------------646 !647 IF (before) THEN648 ptab (i1:i2,j1:j2,k1:k2) = avm_k(i1:i2,j1:j2,k1:k2)649 ELSE650 avm_k(i1:i2,j1:j2,k1:k2) = ptab (i1:i2,j1:j2,k1:k2)651 ENDIF652 !653 END SUBROUTINE updateAVM654 655 # endif /* key_zdftke */656 494 657 495 #else
Note: See TracChangeset
for help on using the changeset viewer.