Changeset 14215 for NEMO/trunk/src/OCE/TRA
- Timestamp:
- 2020-12-18T14:49:22+01:00 (3 years ago)
- Location:
- NEMO/trunk/src/OCE/TRA
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/trunk/src/OCE/TRA/traadv_qck.F90
r14189 r14215 145 145 ! 146 146 !!gm why not using a SHIFT instruction... 147 DO_3D( 0, 0, nn_hls-1, nn_hls-1, 1, jpkm1 ) !--- Computation of the ustream and downstream value of the tracer and the mask147 DO_3D( nn_hls-1, nn_hls-1, 0, 0, 1, jpkm1 ) !--- Computation of the ustream and downstream value of the tracer and the mask 148 148 zfc(ji,jj,jk) = pt(ji-1,jj,jk,jn,Kbb) ! Upstream in the x-direction for the tracer 149 149 zfd(ji,jj,jk) = pt(ji+1,jj,jk,jn,Kbb) ! Downstream in the x-direction for the tracer … … 154 154 ! Horizontal advective fluxes 155 155 ! --------------------------- 156 DO_3D( 0, 0, nn_hls-1, 0, 1, jpkm1 )156 DO_3D( nn_hls-1, 0, 0, 0, 1, jpkm1 ) 157 157 zdir = 0.5 + SIGN( 0.5_wp, pU(ji,jj,jk) ) ! if pU > 0 : zdir = 1 otherwise zdir = 0 158 158 zfu(ji,jj,jk) = zdir * zfc(ji,jj,jk ) + ( 1. - zdir ) * zfd(ji+1,jj,jk) ! FU in the x-direction for T 159 159 END_3D 160 160 ! 161 DO_3D( 0, 0, nn_hls-1, 0, 1, jpkm1 )161 DO_3D( nn_hls-1, 0, 0, 0, 1, jpkm1 ) 162 162 zdir = 0.5 + SIGN( 0.5_wp, pU(ji,jj,jk) ) ! if pU > 0 : zdir = 1 otherwise zdir = 0 163 163 zdx = ( zdir * e1t(ji,jj) + ( 1. - zdir ) * e1t(ji+1,jj) ) * e2u(ji,jj) * e3u(ji,jj,jk,Kmm) … … 173 173 ! 174 174 ! Mask at the T-points in the x-direction (mask=0 or mask=1) 175 DO_3D( 0, 0, nn_hls-1, nn_hls-1, 1, jpkm1 )175 DO_3D( nn_hls-1, nn_hls-1, 0, 0, 1, jpkm1 ) 176 176 zfu(ji,jj,jk) = tmask(ji-1,jj,jk) + tmask(ji,jj,jk) + tmask(ji+1,jj,jk) - 2. 177 177 END_3D … … 180 180 ! 181 181 ! Tracer flux on the x-direction 182 DO_3D( 0, 0, 1, 0, 1, jpkm1 )182 DO_3D( 1, 0, 0, 0, 1, jpkm1 ) 183 183 zdir = 0.5 + SIGN( 0.5_wp, pU(ji,jj,jk) ) ! if pU > 0 : zdir = 1 otherwise zdir = 0 184 184 !--- If the second ustream point is a land point … … 232 232 ! 233 233 !--- Computation of the ustream and downstream value of the tracer and the mask 234 DO_2D( nn_hls-1, nn_hls-1, 0, 0)234 DO_2D( 0, 0, nn_hls-1, nn_hls-1 ) 235 235 ! Upstream in the x-direction for the tracer 236 236 zfc(ji,jj,jk) = pt(ji,jj-1,jk,jn,Kbb) … … 245 245 ! --------------------------- 246 246 ! 247 DO_3D( nn_hls-1, 0, 0, 0, 1, jpkm1 )247 DO_3D( 0, 0, nn_hls-1, 0, 1, jpkm1 ) 248 248 zdir = 0.5 + SIGN( 0.5_wp, pV(ji,jj,jk) ) ! if pU > 0 : zdir = 1 otherwise zdir = 0 249 249 zfu(ji,jj,jk) = zdir * zfc(ji,jj,jk ) + ( 1. - zdir ) * zfd(ji,jj+1,jk) ! FU in the x-direction for T 250 250 END_3D 251 251 ! 252 DO_3D( nn_hls-1, 0, 0, 0, 1, jpkm1 )252 DO_3D( 0, 0, nn_hls-1, 0, 1, jpkm1 ) 253 253 zdir = 0.5 + SIGN( 0.5_wp, pV(ji,jj,jk) ) ! if pU > 0 : zdir = 1 otherwise zdir = 0 254 254 zdx = ( zdir * e2t(ji,jj) + ( 1. - zdir ) * e2t(ji,jj+1) ) * e1v(ji,jj) * e3v(ji,jj,jk,Kmm) … … 265 265 ! 266 266 ! Mask at the T-points in the x-direction (mask=0 or mask=1) 267 DO_3D( nn_hls-1, nn_hls-1, 0, 0, 1, jpkm1 )267 DO_3D( 0, 0, nn_hls-1, nn_hls-1, 1, jpkm1 ) 268 268 zfu(ji,jj,jk) = tmask(ji,jj-1,jk) + tmask(ji,jj,jk) + tmask(ji,jj+1,jk) - 2. 269 269 END_3D … … 271 271 ! 272 272 ! Tracer flux on the x-direction 273 DO_3D( 1, 0, 0, 0, 1, jpkm1 )273 DO_3D( 0, 0, 1, 0, 1, jpkm1 ) 274 274 zdir = 0.5 + SIGN( 0.5_wp, pV(ji,jj,jk) ) ! if pU > 0 : zdir = 1 otherwise zdir = 0 275 275 !--- If the second ustream point is a land point -
NEMO/trunk/src/OCE/TRA/trabbl.F90
r14189 r14215 248 248 DO jn = 1, kjpt ! tracer loop 249 249 ! ! =========== 250 DO_2D( is j, 0, isi, 0 ) ! CAUTION start from i=1 to update i=2 when cyclic east-west250 DO_2D( isi, 0, isj, 0 ) ! CAUTION start from i=1 to update i=2 when cyclic east-west 251 251 IF( utr_bbl(ji,jj) /= 0.e0 ) THEN ! non-zero i-direction bbl advection 252 252 ! down-slope i/k-indices (deep) & up-slope i/k indices (shelf) -
NEMO/trunk/src/OCE/TRA/traldf_lap_blp.F90
r14189 r14215 158 158 ENDIF 159 159 ! 160 DO_3D( is j, iej, isi, iei, 1, jpkm1 ) !== Second derivative (divergence) added to the general tracer trends ==!160 DO_3D( isi, iei, isj, iej, 1, jpkm1 ) !== Second derivative (divergence) added to the general tracer trends ==! 161 161 pt_rhs(ji,jj,jk,jn) = pt_rhs(ji,jj,jk,jn) + ( ztu(ji,jj,jk) - ztu(ji-1,jj,jk) & 162 162 & + ztv(ji,jj,jk) - ztv(ji,jj-1,jk) ) & -
NEMO/trunk/src/OCE/TRA/traldf_triad.F90
r14090 r14215 387 387 ! !== add the vertical 33 flux ==! 388 388 IF( ln_traldf_lap ) THEN ! laplacian case: eddy coef = ah_wslp2 - akz 389 DO_3D( 1, 0, 0, 0, 2, jpkm1 )389 DO_3D( 0, 0, 1, 0, 2, jpkm1 ) 390 390 ztfw(ji,jj,jk) = ztfw(ji,jj,jk) - e1e2t(ji,jj) / e3w(ji,jj,jk,Kmm) * tmask(ji,jj,jk) & 391 391 & * ( ah_wslp2(ji,jj,jk) - akz(ji,jj,jk) ) & … … 395 395 SELECT CASE( kpass ) 396 396 CASE( 1 ) ! 1st pass : eddy coef = ah_wslp2 397 DO_3D( 1, 0, 0, 0, 2, jpkm1 )397 DO_3D( 0, 0, 1, 0, 2, jpkm1 ) 398 398 ztfw(ji,jj,jk) = ztfw(ji,jj,jk) - e1e2t(ji,jj) / e3w(ji,jj,jk,Kmm) * tmask(ji,jj,jk) & 399 399 & * ah_wslp2(ji,jj,jk) * ( pt(ji,jj,jk-1,jn) - pt(ji,jj,jk,jn) ) 400 400 END_3D 401 401 CASE( 2 ) ! 2nd pass : eddy flux = ah_wslp2 and akz applied on pt and pt2 gradients, resp. 402 DO_3D( 1, 0, 0, 0, 2, jpkm1 )402 DO_3D( 0, 0, 1, 0, 2, jpkm1 ) 403 403 ztfw(ji,jj,jk) = ztfw(ji,jj,jk) - e1e2t(ji,jj) / e3w(ji,jj,jk,Kmm) * tmask(ji,jj,jk) & 404 404 & * ( ah_wslp2(ji,jj,jk) * ( pt (ji,jj,jk-1,jn) - pt (ji,jj,jk,jn) ) & -
NEMO/trunk/src/OCE/TRA/tranpc.F90
r14189 r14215 112 112 IF( ntej == Nje0 ) THEN ; iej = nn_hls ; ELSE ; iej = 0 ; ENDIF 113 113 ! 114 DO_2D( is j, iej, isi, iei) ! interior column only114 DO_2D( isi, iei, isj, iej ) ! interior column only 115 115 ! 116 116 IF( tmask(ji,jj,2) == 1 ) THEN ! At least 2 ocean points -
NEMO/trunk/src/OCE/TRA/traqsr.F90
r14189 r14215 151 151 ELSE ! No restart or Euler forward at 1st time step 152 152 z1_2 = 1._wp 153 DO_3D( is j, iej, isi, iei, 1, jpk )153 DO_3D( isi, iei, isj, iej, 1, jpk ) 154 154 qsr_hc_b(ji,jj,jk) = 0._wp 155 155 END_3D … … 157 157 ELSE !== Swap of qsr heat content ==! 158 158 z1_2 = 0.5_wp 159 DO_3D( is j, iej, isi, iei, 1, jpk )159 DO_3D( isi, iei, isj, iej, 1, jpk ) 160 160 qsr_hc_b(ji,jj,jk) = qsr_hc(ji,jj,jk) 161 161 END_3D … … 168 168 CASE( np_BIO ) !== bio-model fluxes ==! 169 169 ! 170 DO_3D( is j, iej, isi, iei, 1, nksr )170 DO_3D( isi, iei, isj, iej, 1, nksr ) 171 171 qsr_hc(ji,jj,jk) = r1_rho0_rcp * ( etot3(ji,jj,jk) - etot3(ji,jj,jk+1) ) 172 172 END_3D … … 190 190 ! most expensive calculations) 191 191 ! 192 DO_2D( is j, iej, isi, iei)192 DO_2D( isi, iei, isj, iej ) 193 193 ! zlogc = log(zchl) 194 194 zlogc = LOG ( MIN( 10. , MAX( 0.03, sf_chl(1)%fnow(ji,jj,1) ) ) ) … … 209 209 210 210 ! 211 DO_3D( is j, iej, isi, iei, 1, nksr + 1 )211 DO_3D( isi, iei, isj, iej, 1, nksr + 1 ) 212 212 ! zchl = ALOG( ze0(ji,jj) ) 213 213 zlogc = ze0(ji,jj) … … 239 239 ! 240 240 zcoef = ( 1. - rn_abs ) / 3._wp !* surface equi-partition in R-G-B 241 DO_2D( is j, iej, isi, iei)241 DO_2D( isi, iei, isj, iej ) 242 242 ze0(ji,jj) = rn_abs * qsr(ji,jj) 243 243 ze1(ji,jj) = zcoef * qsr(ji,jj) … … 250 250 ! 251 251 ! !* interior equi-partition in R-G-B depending on vertical profile of Chl 252 DO_3D( is j, iej, isi, iei, 2, nksr + 1 )252 DO_3D( isi, iei, isj, iej, 2, nksr + 1 ) 253 253 ze3t = e3t(ji,jj,jk-1,Kmm) 254 254 irgb = NINT( ztmp3d(ji,jj,jk) ) … … 264 264 END_3D 265 265 ! 266 DO_3D( is j, iej, isi, iei, 1, nksr ) !* now qsr induced heat content266 DO_3D( isi, iei, isj, iej, 1, nksr ) !* now qsr induced heat content 267 267 qsr_hc(ji,jj,jk) = r1_rho0_rcp * ( ztmp3d(ji,jj,jk) - ztmp3d(ji,jj,jk+1) ) 268 268 END_3D … … 274 274 zz0 = rn_abs * r1_rho0_rcp ! surface equi-partition in 2-bands 275 275 zz1 = ( 1. - rn_abs ) * r1_rho0_rcp 276 DO_3D( is j, iej, isi, iei, 1, nksr ) !* now qsr induced heat content276 DO_3D( isi, iei, isj, iej, 1, nksr ) !* now qsr induced heat content 277 277 zc0 = zz0 * EXP( -gdepw(ji,jj,jk ,Kmm)*xsi0r ) + zz1 * EXP( -gdepw(ji,jj,jk ,Kmm)*xsi1r ) 278 278 zc1 = zz0 * EXP( -gdepw(ji,jj,jk+1,Kmm)*xsi0r ) + zz1 * EXP( -gdepw(ji,jj,jk+1,Kmm)*xsi1r ) … … 292 292 ! 293 293 ! sea-ice: store the 1st ocean level attenuation coefficient 294 DO_2D( is j, iej, isi, iei)294 DO_2D( isi, iei, isj, iej ) 295 295 IF( qsr(ji,jj) /= 0._wp ) THEN ; fraqsr_1lev(ji,jj) = qsr_hc(ji,jj,1) / ( r1_rho0_rcp * qsr(ji,jj) ) 296 296 ELSE ; fraqsr_1lev(ji,jj) = 1._wp -
NEMO/trunk/src/OCE/TRA/trasbc.F90
r14189 r14215 105 105 !!gm This should be moved into sbcmod.F90 module ? (especially now that ln_traqsr is read in namsbc namelist) 106 106 IF( .NOT.ln_traqsr ) THEN ! no solar radiation penetration 107 DO_2D( is j, iej, isi, iei)107 DO_2D( isi, iei, isj, iej ) 108 108 qns(ji,jj) = qns(ji,jj) + qsr(ji,jj) ! total heat flux in qns 109 109 qsr(ji,jj) = 0._wp ! qsr set to zero … … 126 126 ELSE ! No restart or restart not found: Euler forward time stepping 127 127 zfact = 1._wp 128 DO_2D( is j, iej, isi, iei)128 DO_2D( isi, iei, isj, iej ) 129 129 sbc_tsc(ji,jj,:) = 0._wp 130 130 sbc_tsc_b(ji,jj,:) = 0._wp … … 133 133 ELSE !* other time-steps: swap of forcing fields 134 134 zfact = 0.5_wp 135 DO_2D( is j, iej, isi, iei)135 DO_2D( isi, iei, isj, iej ) 136 136 sbc_tsc_b(ji,jj,:) = sbc_tsc(ji,jj,:) 137 137 END_2D 138 138 ENDIF 139 139 ! !== Now sbc tracer content fields ==! 140 DO_2D( is j, iej, isi, iei)140 DO_2D( isi, iei, isj, iej ) 141 141 sbc_tsc(ji,jj,jp_tem) = r1_rho0_rcp * qns(ji,jj) ! non solar heat flux 142 142 sbc_tsc(ji,jj,jp_sal) = r1_rho0 * sfx(ji,jj) ! salt flux due to freezing/melting 143 143 END_2D 144 144 IF( ln_linssh ) THEN !* linear free surface 145 DO_2D( is j, iej, isi, iei) !==>> add concentration/dilution effect due to constant volume cell145 DO_2D( isi, iei, isj, iej ) !==>> add concentration/dilution effect due to constant volume cell 146 146 sbc_tsc(ji,jj,jp_tem) = sbc_tsc(ji,jj,jp_tem) + r1_rho0 * emp(ji,jj) * pts(ji,jj,1,jp_tem,Kmm) 147 147 sbc_tsc(ji,jj,jp_sal) = sbc_tsc(ji,jj,jp_sal) + r1_rho0 * emp(ji,jj) * pts(ji,jj,1,jp_sal,Kmm)
Note: See TracChangeset
for help on using the changeset viewer.