Changeset 14037 for NEMO/branches/2020/dev_r13333_KERNEL-08_techene_gm_HPG_SPG/src/OCE/TRA/trazdf.F90
- Timestamp:
- 2020-12-03T12:20:38+01:00 (3 years ago)
- Location:
- NEMO/branches/2020/dev_r13333_KERNEL-08_techene_gm_HPG_SPG
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2020/dev_r13333_KERNEL-08_techene_gm_HPG_SPG
- Property svn:externals
-
old new 8 8 9 9 # SETTE 10 ^/utils/CI/sette @13292sette10 ^/utils/CI/sette_wave@13990 sette
-
- Property svn:externals
-
NEMO/branches/2020/dev_r13333_KERNEL-08_techene_gm_HPG_SPG/src/OCE/TRA/trazdf.F90
r13295 r14037 13 13 !!---------------------------------------------------------------------- 14 14 USE oce ! ocean dynamics and tracers variables 15 USE dom_oce ! ocean space and time domain variables 15 USE dom_oce ! ocean space and time domain variables 16 16 USE domvvl ! variable volume 17 17 USE phycst ! physical constant 18 18 USE zdf_oce ! ocean vertical physics variables 19 USE zdfmfc ! Mass FLux Convection 19 20 USE sbc_oce ! surface boundary condition: ocean 20 21 USE ldftra ! lateral diffusion: eddy diffusivity … … 55 56 REAL(wp), DIMENSION(jpi,jpj,jpk,jpts,jpt), INTENT(inout) :: pts ! active tracers and RHS of tracer equation 56 57 ! 57 INTEGER :: j k ! Dummy loop indices58 INTEGER :: ji, jj, jk ! Dummy loop indices 58 59 REAL(wp), DIMENSION(:,:,:), ALLOCATABLE :: ztrdt, ztrds ! 3D workspace 59 60 !!--------------------------------------------------------------------- … … 62 63 ! 63 64 IF( kt == nit000 ) THEN 64 IF(lwp)WRITE(numout,*) 65 IF(lwp)WRITE(numout,*) 'tra_zdf : implicit vertical mixing on T & S' 66 IF(lwp)WRITE(numout,*) '~~~~~~~ ' 65 IF( ntile == 0 .OR. ntile == 1 ) THEN ! Do only on the first tile 66 IF(lwp)WRITE(numout,*) 67 IF(lwp)WRITE(numout,*) 'tra_zdf : implicit vertical mixing on T & S' 68 IF(lwp)WRITE(numout,*) '~~~~~~~ ' 69 ENDIF 67 70 ENDIF 68 71 ! 69 72 IF( l_trdtra ) THEN !* Save ta and sa trends 70 ALLOCATE( ztrdt(jpi,jpj,jpk) 73 ALLOCATE( ztrdt(jpi,jpj,jpk), ztrds(jpi,jpj,jpk) ) 71 74 ztrdt(:,:,:) = pts(:,:,:,jp_tem,Kaa) 72 75 ztrds(:,:,:) = pts(:,:,:,jp_sal,Kaa) … … 80 83 ! JMM avoid negative salinities near river outlet ! Ugly fix 81 84 ! JMM : restore negative salinities to small salinities: 82 WHERE( pts( :,:,:,jp_sal,Kaa) < 0._wp ) pts(:,:,:,jp_sal,Kaa) = 0.1_wp85 WHERE( pts(A2D(0),:,jp_sal,Kaa) < 0._wp ) pts(A2D(0),:,jp_sal,Kaa) = 0.1_wp 83 86 !!gm 84 87 85 88 IF( l_trdtra ) THEN ! save the vertical diffusive trends for further diagnostics 86 DO jk = 1, jpk m189 DO jk = 1, jpk 87 90 ztrdt(:,:,jk) = ( ( pts(:,:,jk,jp_tem,Kaa)*e3t(:,:,jk,Kaa) & 88 91 & - pts(:,:,jk,jp_tem,Kbb)*e3t(:,:,jk,Kbb) ) & … … 94 97 & - ztrds(:,:,jk) 95 98 END DO 99 ! NOTE: [tiling-comms-merge] The diagnostic results change along the north fold if this is removed 96 100 !!gm this should be moved in trdtra.F90 and done on all trends 97 101 CALL lbc_lnk_multi( 'trazdf', ztrdt, 'T', 1.0_wp , ztrds, 'T', 1.0_wp ) … … 140 144 INTEGER :: ji, jj, jk, jn ! dummy loop indices 141 145 REAL(wp) :: zrhs, zzwi, zzws ! local scalars 142 REAL(wp), DIMENSION( jpi,jpj,jpk) :: zwi, zwt, zwd, zws146 REAL(wp), DIMENSION(A2D(nn_hls),jpk) :: zwi, zwt, zwd, zws 143 147 !!--------------------------------------------------------------------- 144 148 ! … … 154 158 ! 155 159 ! vertical mixing coef.: avt for temperature, avs for salinity and passive tracers 156 IF( cdtype == 'TRA' .AND. jn == jp_tem ) THEN ; zwt(:,:,2:jpk) = avt(:,:,2:jpk) 157 ELSE ; zwt(:,:,2:jpk) = avs(:,:,2:jpk) 160 IF( cdtype == 'TRA' .AND. jn == jp_tem ) THEN 161 DO_3D( 1, 1, 1, 1, 2, jpk ) 162 zwt(ji,jj,jk) = avt(ji,jj,jk) 163 END_3D 164 ELSE 165 DO_3D( 1, 1, 1, 1, 2, jpk ) 166 zwt(ji,jj,jk) = avs(ji,jj,jk) 167 END_3D 158 168 ENDIF 159 169 zwt(:,:,1) = 0._wp … … 189 199 ENDIF 190 200 ! 201 ! Modification of diagonal to add MF scheme 202 IF ( ln_zdfmfc ) THEN 203 CALL diag_mfc( zwi, zwd, zws, p2dt, Kaa ) 204 END IF 205 ! 191 206 !! Matrix inversion from the first level 192 207 !!---------------------------------------------------------------------- … … 208 223 ! used as a work space array: its value is modified. 209 224 ! 210 DO_2D( 0, 0, 0, 0 ) 225 DO_2D( 0, 0, 0, 0 ) !* 1st recurrence: Tk = Dk - Ik Sk-1 / Tk-1 (increasing k) ! done one for all passive tracers (so included in the IF instruction) 211 226 zwt(ji,jj,1) = zwd(ji,jj,1) 212 227 END_2D … … 217 232 ENDIF 218 233 ! 219 DO_2D( 0, 0, 0, 0 ) 234 ! Modification of rhs to add MF scheme 235 IF ( ln_zdfmfc ) THEN 236 CALL rhs_mfc( pt(:,:,:,jn,Krhs), jn ) 237 END IF 238 ! 239 DO_2D( 0, 0, 0, 0 ) !* 2nd recurrence: Zk = Yk - Ik / Tk-1 Zk-1 220 240 pt(ji,jj,1,jn,Kaa) = e3t(ji,jj,1,Kbb) * pt(ji,jj,1,jn,Kbb) & 221 & + p2dt * e3t(ji,jj,1,Kmm) * pt(ji,jj,1,jn,Krhs) 241 & + p2dt * e3t(ji,jj,1,Kmm) * pt(ji,jj,1,jn,Krhs) 222 242 END_2D 223 243 DO_3D( 0, 0, 0, 0, 2, jpkm1 ) 224 zrhs = e3t(ji,jj,jk,Kbb) * pt(ji,jj,jk,jn,Kbb) & 244 zrhs = e3t(ji,jj,jk,Kbb) * pt(ji,jj,jk,jn,Kbb) & 225 245 & + p2dt * e3t(ji,jj,jk,Kmm) * pt(ji,jj,jk,jn,Krhs) ! zrhs=right hand side 226 246 pt(ji,jj,jk,jn,Kaa) = zrhs - zwi(ji,jj,jk) / zwt(ji,jj,jk-1) * pt(ji,jj,jk-1,jn,Kaa) 227 247 END_3D 228 248 ! 229 DO_2D( 0, 0, 0, 0 ) 249 DO_2D( 0, 0, 0, 0 ) !* 3d recurrence: Xk = (Zk - Sk Xk+1 ) / Tk (result is the after tracer) 230 250 pt(ji,jj,jpkm1,jn,Kaa) = pt(ji,jj,jpkm1,jn,Kaa) / zwt(ji,jj,jpkm1) * tmask(ji,jj,jpkm1) 231 251 END_2D
Note: See TracChangeset
for help on using the changeset viewer.