Changeset 14716 for NEMO/branches
- Timestamp:
- 2021-04-16T09:01:35+02:00 (3 years ago)
- Location:
- NEMO/branches/2021/ENHANCE-01_davestorkey_fix_3D_momentum_trends/src/OCE
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2021/ENHANCE-01_davestorkey_fix_3D_momentum_trends/src/OCE/DYN/dynhpg.F90
r14433 r14716 126 126 ztrdu(:,:,:) = puu(:,:,:,Krhs) - ztrdu(:,:,:) 127 127 ztrdv(:,:,:) = pvv(:,:,:,Krhs) - ztrdv(:,:,:) 128 CALL trd_dyn( ztrdu, ztrdv, jpdyn_hpg , kt, Kmm )128 CALL trd_dyn( ztrdu, ztrdv, jpdyn_hpg_save, kt, Kmm ) 129 129 DEALLOCATE( ztrdu , ztrdv ) 130 130 ENDIF -
NEMO/branches/2021/ENHANCE-01_davestorkey_fix_3D_momentum_trends/src/OCE/DYN/dynspg_ts.F90
r14701 r14716 204 204 zv_spg(:,:) = 0._wp 205 205 ! 206 zmdi=1.e+20 ! missing data indicator for masking207 !208 206 zwdramp = r_rn_wdmin1 ! simplest ramp 209 207 ! zwdramp = 1._wp / (rn_wdmin2 - rn_wdmin1) ! more general ramp … … 898 896 ! 899 897 IF( l_trddyn ) THEN 900 CALL trd_dyn( zspgtrdu, zspgtrdv, jpdyn_spg, kt )901 CALL trd_dyn( zpvotrdu, zpvotrdv, jpdyn_pvo, kt )902 CALL trd_dyn( ztautrdu, ztautrdv, jpdyn_tau, kt )903 CALL trd_dyn( zbfrtrdu, zbfrtrdv, jpdyn_bfr, kt )898 CALL trd_dyn( zspgtrdu, zspgtrdv, jpdyn_spg, kt, Kmm ) 899 CALL trd_dyn( zpvotrdu, zpvotrdv, jpdyn_pvo, kt, Kmm ) 900 CALL trd_dyn( ztautrdu, ztautrdv, jpdyn_tau, kt, Kmm ) 901 CALL trd_dyn( zbfrtrdu, zbfrtrdv, jpdyn_bfr, kt, Kmm ) 904 902 DEALLOCATE( zspgtrdu, zspgtrdv, zpvotrdu, zpvotrdv, ztautrdu, ztautrdv, zbfrtrdu, zbfrtrdv ) 905 903 ENDIF -
NEMO/branches/2021/ENHANCE-01_davestorkey_fix_3D_momentum_trends/src/OCE/DYN/dynzdf.F90
r14701 r14716 95 95 ENDIF 96 96 ! !* explicit top/bottom drag case 97 IF( .NOT.ln_drgimp ) CALL zdf_drg_exp( kt, Kmm, puu(:,:,:,Kbb), pvv(:,:,:,Kbb), puu(:,:,:,Krhs), pvv(:,:,:,Krhs) ) ! add top/bottom friction trend to (puu(Kaa),pvv(Kaa))97 IF( .NOT.ln_drgimp ) CALL zdf_drg_exp( kt, Kmm, Kaa, puu(:,:,:,Kbb), pvv(:,:,:,Kbb), puu(:,:,:,Krhs), pvv(:,:,:,Krhs) ) ! add top/bottom friction trend to (puu(Kaa),pvv(Kaa)) 98 98 ! 99 99 ! !== RHS: Leap-Frog time stepping on all trends but the vertical mixing ==! (put in puu(:,:,:,Kaa),pvv(:,:,:,Kaa)) … … 448 448 IF( ln_drgimp ) THEN 449 449 ztrdu(:,:,:) = 0._wp ; ztrdv(:,:,:) = 0._wp 450 DO_2D( 2, jpim1, 2, jpjm1)450 DO_2D( 0, 0, 0, 0 ) 451 451 ikbu = mbku(ji,jj) ! deepest ocean u- & v-levels 452 452 ikbv = mbkv(ji,jj) -
NEMO/branches/2021/ENHANCE-01_davestorkey_fix_3D_momentum_trends/src/OCE/TRD/trddyn.F90
r14701 r14716 53 53 CONTAINS 54 54 55 SUBROUTINE trd_dyn_3d( putrd, pvtrd, ktrd, kt, Kmm )55 SUBROUTINE trd_dyn_3d( putrd, pvtrd, ktrd, kt, Kmm, Kaa ) 56 56 !!--------------------------------------------------------------------- 57 57 !! *** ROUTINE trd_dyn_3d *** … … 65 65 INTEGER , INTENT(in ) :: kt ! time step 66 66 INTEGER , INTENT(in ) :: Kmm ! time level index 67 INTEGER , INTENT(in ), OPTIONAL :: Kaa ! " " " 67 68 REAL(wp), ALLOCATABLE, DIMENSION(:,:) :: zue, zve ! temporary 2D arrays 68 69 INTEGER :: jk … … 76 77 77 78 SELECT CASE( ktrd ) 79 CASE( jpdyn_hpg_save ) 80 ! 81 ! save 3D HPG trends to have SPG added later. 82 ALLOCATE( zutrd_hpg(jpi,jpj,jpk), zvtrd_hpg(jpi,jpj,jpk) ) 83 zutrd_hpg(:,:,:) = putrd(:,:,:) 84 zvtrd_hpg(:,:,:) = pvtrd(:,:,:) 85 78 86 CASE( jpdyn_pvo_save ) 79 87 ! … … 86 94 ! For explicit scheme SPG trends come here as 3D fields 87 95 ! Add SPG trend to 3D HPG trend and also output as 2D diagnostic in own right. 88 CALL trd_dyn_iom_2d( putrd(:,:,1), pvtrd(:,:,1), jpdyn_spg, kt , Kmm)96 CALL trd_dyn_iom_2d( putrd(:,:,1), pvtrd(:,:,1), jpdyn_spg, kt ) 89 97 putrd(:,:,:) = putrd(:,:,:) + zutrd_hpg(:,:,:) 90 98 pvtrd(:,:,:) = pvtrd(:,:,:) + zvtrd_hpg(:,:,:) … … 95 103 ! Add 3D part of BFR trend minus its depth-mean part to depth-mean trend already saved. 96 104 ALLOCATE( zue(jpi,jpj), zve(jpi,jpj) ) 97 zue(:,:) = e3u _a(:,:,1) * putrd(:,:,1) * umask(:,:,1)98 zve(:,:) = e3v _a(:,:,1) * pvtrd(:,:,1) * vmask(:,:,1)105 zue(:,:) = e3u(:,:,1,Kaa) * putrd(:,:,1) * umask(:,:,1) 106 zve(:,:) = e3v(:,:,1,Kaa) * pvtrd(:,:,1) * vmask(:,:,1) 99 107 DO jk = 2, jpkm1 100 zue(:,:) = zue(:,:) + e3u _a(:,:,jk) * putrd(:,:,jk) * umask(:,:,jk)101 zve(:,:) = zve(:,:) + e3v _a(:,:,jk) * pvtrd(:,:,jk) * vmask(:,:,jk)108 zue(:,:) = zue(:,:) + e3u(:,:,jk,Kaa) * putrd(:,:,jk) * umask(:,:,jk) 109 zve(:,:) = zve(:,:) + e3v(:,:,jk,Kaa) * pvtrd(:,:,jk) * vmask(:,:,jk) 102 110 END DO 103 111 DO jk = 1, jpkm1 104 putrd(:,:,jk) = zutrd_bfr(:,:,jk) + putrd(:,:,jk) - zue(:,:) * r1_hu _a(:,:)105 pvtrd(:,:,jk) = zvtrd_bfr(:,:,jk) + pvtrd(:,:,jk) - zve(:,:) * r1_hv _a(:,:)112 putrd(:,:,jk) = zutrd_bfr(:,:,jk) + putrd(:,:,jk) - zue(:,:) * r1_hu(:,:,Kaa) 113 pvtrd(:,:,jk) = zvtrd_bfr(:,:,jk) + pvtrd(:,:,jk) - zve(:,:) * r1_hv(:,:,Kaa) 106 114 END DO 107 115 ! Update locally saved BFR trends to add to ZDF trend. … … 114 122 ! baroclinic solution in the case of explicit bottom friction. 115 123 ALLOCATE( zue(jpi,jpj), zve(jpi,jpj) ) 116 zue(:,:) = e3u _a(:,:,1) * putrd(:,:,1) * umask(:,:,1)117 zve(:,:) = e3v _a(:,:,1) * pvtrd(:,:,1) * vmask(:,:,1)124 zue(:,:) = e3u(:,:,1,Kaa) * putrd(:,:,1) * umask(:,:,1) 125 zve(:,:) = e3v(:,:,1,Kaa) * pvtrd(:,:,1) * vmask(:,:,1) 118 126 DO jk = 2, jpkm1 119 zue(:,:) = zue(:,:) + e3u _a(:,:,jk) * putrd(:,:,jk) * umask(:,:,jk)120 zve(:,:) = zve(:,:) + e3v _a(:,:,jk) * pvtrd(:,:,jk) * vmask(:,:,jk)127 zue(:,:) = zue(:,:) + e3u(:,:,jk,Kaa) * putrd(:,:,jk) * umask(:,:,jk) 128 zve(:,:) = zve(:,:) + e3v(:,:,jk,Kaa) * pvtrd(:,:,jk) * vmask(:,:,jk) 121 129 END DO 122 130 DO jk = 1, jpkm1 123 putrd(:,:,jk) = zutrd_tau(:,:) + zutrd_bfr(:,:,jk) + putrd(:,:,jk) - zue(:,:) * r1_hu _a(:,:)124 pvtrd(:,:,jk) = zvtrd_tau(:,:) + zvtrd_bfr(:,:,jk) + pvtrd(:,:,jk) - zve(:,:) * r1_hv _a(:,:)131 putrd(:,:,jk) = zutrd_tau(:,:) + zutrd_bfr(:,:,jk) + putrd(:,:,jk) - zue(:,:) * r1_hu(:,:,Kaa) 132 pvtrd(:,:,jk) = zvtrd_tau(:,:) + zvtrd_bfr(:,:,jk) + pvtrd(:,:,jk) - zve(:,:) * r1_hv(:,:,Kaa) 125 133 END DO 126 134 DEALLOCATE( zue, zve, zutrd_tau, zvtrd_tau, zutrd_bfr, zvtrd_bfr ) … … 160 168 161 169 162 SUBROUTINE trd_dyn_2d( putrd, pvtrd, ktrd, kt, Kmm )170 SUBROUTINE trd_dyn_2d( putrd, pvtrd, ktrd, kt, Kmm, Kaa ) 163 171 !!--------------------------------------------------------------------- 164 172 !! *** ROUTINE trd_mod *** … … 172 180 INTEGER , INTENT(in ) :: kt ! time step 173 181 INTEGER , INTENT(in ) :: Kmm ! time level index 182 INTEGER , INTENT(in ), OPTIONAL :: Kaa ! " " " 174 183 INTEGER :: jk 175 184 !!---------------------------------------------------------------------- … … 199 208 zvtrd_hpg(:,:,jk) = zvtrd_hpg(:,:,jk) + pvtrd(:,:) 200 209 ENDDO 201 CALL trd_dyn_3d( zutrd_hpg, zvtrd_hpg, jpdyn_hpg, kt )210 CALL trd_dyn_3d( zutrd_hpg, zvtrd_hpg, jpdyn_hpg, kt, Kmm ) 202 211 DEALLOCATE( zutrd_hpg, zvtrd_hpg ) 203 212 … … 209 218 zvtrd_pvo(:,:,jk) = zvtrd_pvo(:,:,jk) + pvtrd(:,:) 210 219 ENDDO 211 CALL trd_dyn_3d( zutrd_pvo, zvtrd_pvo, jpdyn_pvo, kt )220 CALL trd_dyn_3d( zutrd_pvo, zvtrd_pvo, jpdyn_pvo, kt, Kmm ) 212 221 DEALLOCATE( zutrd_pvo, zvtrd_pvo ) 213 222 … … 236 245 ! 2D output of momentum and/or tracers trends using IOM interface 237 246 !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 238 IF( ln_dyn_trd ) CALL trd_dyn_iom_2d( putrd, pvtrd, ktrd, kt , Kmm)247 IF( ln_dyn_trd ) CALL trd_dyn_iom_2d( putrd, pvtrd, ktrd, kt ) 239 248 240 249 … … 296 305 z3dy(ji,jj,jk) = vv(ji,jj,jk,Kmm) * ( vv(ji,jj+1,jk,Kmm) - vv(ji,jj-1,jk,Kmm) ) / ( 2._wp * e2v(ji,jj) ) 297 306 END_3D 298 CALL lbc_lnk _multi( 'trddyn', z3dx, 'U', -1., z3dy, 'V', -1. )307 CALL lbc_lnk( 'trddyn', z3dx, 'U', -1., z3dy, 'V', -1. ) 299 308 CALL iom_put( "utrd_udx", z3dx ) 300 309 CALL iom_put( "vtrd_vdy", z3dy ) … … 309 318 ! ! wind stress trends 310 319 ALLOCATE( z2dx(jpi,jpj) , z2dy(jpi,jpj) ) 311 z2dx(:,:) = ( utau_b(:,:) + utau(:,:) ) / ( e3u _n(:,:,1) * rau0 )312 z2dy(:,:) = ( vtau_b(:,:) + vtau(:,:) ) / ( e3v _n(:,:,1) * rau0 )320 z2dx(:,:) = ( utau_b(:,:) + utau(:,:) ) / ( e3u(:,:,1,Kmm) * rho0 ) 321 z2dy(:,:) = ( vtau_b(:,:) + vtau(:,:) ) / ( e3v(:,:,1,Kmm) * rho0 ) 313 322 CALL iom_put( "utrd_tau", z2dx ) 314 323 CALL iom_put( "vtrd_tau", z2dy ) … … 325 334 326 335 327 SUBROUTINE trd_dyn_iom_2d( putrd, pvtrd, ktrd, kt , Kmm)336 SUBROUTINE trd_dyn_iom_2d( putrd, pvtrd, ktrd, kt ) 328 337 !!--------------------------------------------------------------------- 329 338 !! *** ROUTINE trd_dyn_iom *** … … 334 343 INTEGER , INTENT(in ) :: ktrd ! trend index 335 344 INTEGER , INTENT(in ) :: kt ! time step 336 INTEGER , INTENT(in ) :: Kmm ! time level index337 345 ! 338 346 INTEGER :: ji, jj, jk ! dummy loop indices -
NEMO/branches/2021/ENHANCE-01_davestorkey_fix_3D_momentum_trends/src/OCE/ZDF/zdfdrg.F90
r13558 r14716 143 143 144 144 145 SUBROUTINE zdf_drg_exp( kt, Kmm, pub, pvb, pua, pva )145 SUBROUTINE zdf_drg_exp( kt, Kmm, Kaa, pub, pvb, pua, pva ) 146 146 !!---------------------------------------------------------------------- 147 147 !! *** ROUTINE zdf_drg_exp *** … … 156 156 !!--------------------------------------------------------------------- 157 157 INTEGER , INTENT(in ) :: kt ! ocean time-step index 158 INTEGER , INTENT(in ) :: Kmm 158 INTEGER , INTENT(in ) :: Kmm, Kaa ! time level indices 159 159 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pub, pvb ! the two components of the before velocity 160 160 REAL(wp), DIMENSION(jpi,jpj,jpk), INTENT(inout) :: pua, pva ! the two components of the velocity tendency … … 205 205 ztrdu(:,:,:) = pua(:,:,:) - ztrdu(:,:,:) 206 206 ztrdv(:,:,:) = pva(:,:,:) - ztrdv(:,:,:) 207 CALL trd_dyn( ztrdu(:,:,:), ztrdv(:,:,:), jpdyn_bfr, kt, Kmm )207 CALL trd_dyn( ztrdu(:,:,:), ztrdv(:,:,:), jpdyn_bfr, kt, Kmm, Kaa ) 208 208 DEALLOCATE( ztrdu, ztrdv ) 209 209 ENDIF
Note: See TracChangeset
for help on using the changeset viewer.