Changeset 10980
- Timestamp:
- 2019-05-15T13:34:04+02:00 (5 years ago)
- Location:
- NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/traldf.F90
r10954 r10980 47 47 CONTAINS 48 48 49 SUBROUTINE tra_ldf( kt, Kbb, Kmm, Krhs )49 SUBROUTINE tra_ldf( kt, Kbb, Kmm, pts, Krhs ) 50 50 !!---------------------------------------------------------------------- 51 51 !! *** ROUTINE tra_ldf *** … … 53 53 !! ** Purpose : compute the lateral ocean tracer physics. 54 54 !!---------------------------------------------------------------------- 55 INTEGER, INTENT( in ) :: kt ! ocean time-step index 56 INTEGER, INTENT( in ) :: Kbb, Kmm, Krhs ! ocean time level indices 55 INTEGER, INTENT(in ) :: kt ! ocean time-step index 56 INTEGER, INTENT(in ) :: Kbb, Kmm, Krhs ! ocean time level indices 57 REAL(wp), DIMENSION(jpi,jpj,jpk,jpts,jpt), INTENT(inout) :: pts ! active tracers and RHS of tracer equation 57 58 !! 58 59 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: ztrdt, ztrds … … 63 64 IF( l_trdtra ) THEN !* Save ta and sa trends 64 65 ALLOCATE( ztrdt(jpi,jpj,jpk) , ztrds(jpi,jpj,jpk) ) 65 ztrdt(:,:,:) = ts(:,:,:,jp_tem,Krhs)66 ztrds(:,:,:) = ts(:,:,:,jp_sal,Krhs)66 ztrdt(:,:,:) = pts(:,:,:,jp_tem,Krhs) 67 ztrds(:,:,:) = pts(:,:,:,jp_sal,Krhs) 67 68 ENDIF 68 69 ! 69 70 SELECT CASE ( nldf_tra ) !* compute lateral mixing trend and add it to the general trend 70 71 CASE ( np_lap ) ! laplacian: iso-level operator 71 CALL tra_ldf_lap ( kt, nit000,'TRA', ahtu, ahtv, gtsu, gtsv, gtui, gtvi, ts(:,:,:,:,Kbb), ts(:,:,:,:,Krhs), jpts, 1, Kmm)72 CALL tra_ldf_lap ( kt, Kmm, nit000,'TRA', ahtu, ahtv, gtsu, gtsv, gtui, gtvi, pts(:,:,:,:,Kbb), pts(:,:,:,:,Krhs), jpts, 1 ) 72 73 CASE ( np_lap_i ) ! laplacian: standard iso-neutral operator (Madec) 73 CALL tra_ldf_iso ( kt, nit000,'TRA', ahtu, ahtv, gtsu, gtsv, gtui, gtvi, ts(:,:,:,:,Kbb), ts(:,:,:,:,Kbb), ts(:,:,:,:,Krhs), jpts, 1, Kmm)74 CALL tra_ldf_iso ( kt, Kmm, nit000,'TRA', ahtu, ahtv, gtsu, gtsv, gtui, gtvi, pts(:,:,:,:,Kbb), pts(:,:,:,:,Kbb), pts(:,:,:,:,Krhs), jpts, 1 ) 74 75 CASE ( np_lap_it ) ! laplacian: triad iso-neutral operator (griffies) 75 CALL tra_ldf_triad( kt, nit000,'TRA', ahtu, ahtv, gtsu, gtsv, gtui, gtvi, ts(:,:,:,:,Kbb), ts(:,:,:,:,Kbb), ts(:,:,:,:,Krhs), jpts, 1, Kmm)76 CALL tra_ldf_triad( kt, Kmm, nit000,'TRA', ahtu, ahtv, gtsu, gtsv, gtui, gtvi, pts(:,:,:,:,Kbb), pts(:,:,:,:,Kbb), pts(:,:,:,:,Krhs), jpts, 1 ) 76 77 CASE ( np_blp , np_blp_i , np_blp_it ) ! bilaplacian: iso-level & iso-neutral operators 77 CALL tra_ldf_blp ( kt, nit000,'TRA', ahtu, ahtv, gtsu, gtsv, gtui, gtvi, ts(:,:,:,:,Kbb), ts(:,:,:,:,Krhs), jpts, nldf_tra, Kmm)78 CALL tra_ldf_blp ( kt, Kmm, nit000,'TRA', ahtu, ahtv, gtsu, gtsv, gtui, gtvi, pts(:,:,:,:,Kbb), pts(:,:,:,:,Krhs), jpts, nldf_tra ) 78 79 END SELECT 79 80 ! 80 81 IF( l_trdtra ) THEN !* save the horizontal diffusive trends for further diagnostics 81 ztrdt(:,:,:) = ts(:,:,:,jp_tem,Krhs) - ztrdt(:,:,:)82 ztrds(:,:,:) = ts(:,:,:,jp_sal,Krhs) - ztrds(:,:,:)82 ztrdt(:,:,:) = pts(:,:,:,jp_tem,Krhs) - ztrdt(:,:,:) 83 ztrds(:,:,:) = pts(:,:,:,jp_sal,Krhs) - ztrds(:,:,:) 83 84 CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_tem, jptra_ldf, ztrdt ) 84 85 CALL trd_tra( kt, Kmm, Krhs, 'TRA', jp_sal, jptra_ldf, ztrds ) … … 86 87 ENDIF 87 88 ! !* print mean trends (used for debugging) 88 IF(ln_ctl) CALL prt_ctl( tab3d_1= ts(:,:,:,jp_tem,Krhs), clinfo1=' ldf - Ta: ', mask1=tmask, &89 & tab3d_2= ts(:,:,:,jp_sal,Krhs), clinfo2= ' Sa: ', mask2=tmask, clinfo3='tra' )89 IF(ln_ctl) CALL prt_ctl( tab3d_1=pts(:,:,:,jp_tem,Krhs), clinfo1=' ldf - Ta: ', mask1=tmask, & 90 & tab3d_2=pts(:,:,:,jp_sal,Krhs), clinfo2= ' Sa: ', mask2=tmask, clinfo3='tra' ) 90 91 ! 91 92 IF( ln_timing ) CALL timing_stop('tra_ldf') -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/traldf_iso.F90
r10954 r10980 48 48 CONTAINS 49 49 50 SUBROUTINE tra_ldf_iso( kt, kit000, cdtype, pahu, pahv, pgu , pgv ,&51 & 52 & pt b , ptbb, pta , kjpt, kpass, Kmm)50 SUBROUTINE tra_ldf_iso( kt, Kmm, kit000, cdtype, pahu, pahv, & 51 & pgu , pgv , pgui, pgvi, & 52 & pt , pt2 , pt_rhs , kjpt , kpass ) 53 53 !!---------------------------------------------------------------------- 54 54 !! *** ROUTINE tra_ldf_iso *** … … 87 87 !! difft = 1/(e1e2t*e3t) dk[ zftw ] 88 88 !! Add this trend to the general trend (ta,sa): 89 !! pt a = pta+ difft90 !! 91 !! ** Action : Update pt aarrays with the before rotated diffusion89 !! pt_rhs = pt_rhs + difft 90 !! 91 !! ** Action : Update pt_rhs arrays with the before rotated diffusion 92 92 !!---------------------------------------------------------------------- 93 93 INTEGER , INTENT(in ) :: kt ! ocean time-step index … … 100 100 REAL(wp), DIMENSION(jpi,jpj ,kjpt), INTENT(in ) :: pgu, pgv ! tracer gradient at pstep levels 101 101 REAL(wp), DIMENSION(jpi,jpj, kjpt), INTENT(in ) :: pgui, pgvi ! tracer gradient at top levels 102 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: pt b! tracer (kpass=1) or laplacian of tracer (kpass=2)103 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: pt bb! tracer (only used in kpass=2)104 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pt a! tracer trend102 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: pt ! tracer (kpass=1) or laplacian of tracer (kpass=2) 103 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: pt2 ! tracer (only used in kpass=2) 104 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pt_rhs ! tracer trend 105 105 ! 106 106 INTEGER :: ji, jj, jk, jn ! dummy loop indices … … 220 220 DO jj = 1, jpjm1 221 221 DO ji = 1, fs_jpim1 ! vector opt. 222 zdit(ji,jj,jk) = ( pt b(ji+1,jj ,jk,jn) - ptb(ji,jj,jk,jn) ) * umask(ji,jj,jk)223 zdjt(ji,jj,jk) = ( pt b(ji ,jj+1,jk,jn) - ptb(ji,jj,jk,jn) ) * vmask(ji,jj,jk)222 zdit(ji,jj,jk) = ( pt(ji+1,jj ,jk,jn) - pt(ji,jj,jk,jn) ) * umask(ji,jj,jk) 223 zdjt(ji,jj,jk) = ( pt(ji ,jj+1,jk,jn) - pt(ji,jj,jk,jn) ) * vmask(ji,jj,jk) 224 224 END DO 225 225 END DO … … 249 249 ! 250 250 ! !== Vertical tracer gradient 251 zdk1t(:,:) = ( pt b(:,:,jk,jn) - ptb(:,:,jk+1,jn) ) * wmask(:,:,jk+1) ! level jk+1251 zdk1t(:,:) = ( pt(:,:,jk,jn) - pt(:,:,jk+1,jn) ) * wmask(:,:,jk+1) ! level jk+1 252 252 ! 253 253 IF( jk == 1 ) THEN ; zdkt(:,:) = zdk1t(:,:) ! surface: zdkt(jk=1)=zdkt(jk=2) 254 ELSE ; zdkt(:,:) = ( pt b(:,:,jk-1,jn) - ptb(:,:,jk,jn) ) * wmask(:,:,jk)254 ELSE ; zdkt(:,:) = ( pt(:,:,jk-1,jn) - pt(:,:,jk,jn) ) * wmask(:,:,jk) 255 255 ENDIF 256 256 DO jj = 1 , jpjm1 !== Horizontal fluxes … … 277 277 END DO 278 278 ! 279 DO jj = 2 , jpjm1 !== horizontal divergence and add to pt a279 DO jj = 2 , jpjm1 !== horizontal divergence and add to pt_rhs 280 280 DO ji = fs_2, fs_jpim1 ! vector opt. 281 pt a(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + zsign * ( zftu(ji,jj,jk) - zftu(ji-1,jj,jk) &282 & + zftv(ji,jj,jk) - zftv(ji,jj-1,jk) ) &283 & * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm)281 pt_rhs(ji,jj,jk,jn) = pt_rhs(ji,jj,jk,jn) + zsign * ( zftu(ji,jj,jk) - zftu(ji-1,jj,jk) & 282 & + zftv(ji,jj,jk) - zftv(ji,jj-1,jk) ) & 283 & * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm) 284 284 END DO 285 285 END DO … … 327 327 DO ji = fs_2, fs_jpim1 328 328 ztfw(ji,jj,jk) = ztfw(ji,jj,jk) + e1e2t(ji,jj) / e3w(ji,jj,jk,Kmm) * wmask(ji,jj,jk) & 329 & * ( ah_wslp2(ji,jj,jk) - akz(ji,jj,jk) ) &330 & * ( ptb(ji,jj,jk-1,jn) - ptb(ji,jj,jk,jn) )329 & * ( ah_wslp2(ji,jj,jk) - akz(ji,jj,jk) ) & 330 & * ( pt(ji,jj,jk-1,jn) - pt(ji,jj,jk,jn) ) 331 331 END DO 332 332 END DO … … 339 339 DO jj = 1, jpjm1 340 340 DO ji = fs_2, fs_jpim1 341 ztfw(ji,jj,jk) = ztfw(ji,jj,jk) &342 & + ah_wslp2(ji,jj,jk) * e1e2t(ji,jj) &343 & * ( pt b(ji,jj,jk-1,jn) - ptb(ji,jj,jk,jn) ) / e3w(ji,jj,jk,Kmm) * wmask(ji,jj,jk)341 ztfw(ji,jj,jk) = ztfw(ji,jj,jk) & 342 & + ah_wslp2(ji,jj,jk) * e1e2t(ji,jj) & 343 & * ( pt(ji,jj,jk-1,jn) - pt(ji,jj,jk,jn) ) / e3w(ji,jj,jk,Kmm) * wmask(ji,jj,jk) 344 344 END DO 345 345 END DO 346 346 END DO 347 CASE( 2 ) ! 2nd pass : eddy flux = ah_wslp2 and akz applied on pt b and ptbbgradients, resp.347 CASE( 2 ) ! 2nd pass : eddy flux = ah_wslp2 and akz applied on pt and pt2 gradients, resp. 348 348 DO jk = 2, jpkm1 349 349 DO jj = 1, jpjm1 350 350 DO ji = fs_2, fs_jpim1 351 ztfw(ji,jj,jk) = ztfw(ji,jj,jk) + e1e2t(ji,jj) / e3w(ji,jj,jk,Kmm) * wmask(ji,jj,jk) 352 & * ( ah_wslp2(ji,jj,jk) * ( pt b (ji,jj,jk-1,jn) - ptb(ji,jj,jk,jn) ) &353 & + akz (ji,jj,jk) * ( ptbb(ji,jj,jk-1,jn) - ptbb(ji,jj,jk,jn) ) )351 ztfw(ji,jj,jk) = ztfw(ji,jj,jk) + e1e2t(ji,jj) / e3w(ji,jj,jk,Kmm) * wmask(ji,jj,jk) & 352 & * ( ah_wslp2(ji,jj,jk) * ( pt (ji,jj,jk-1,jn) - pt (ji,jj,jk,jn) ) & 353 & + akz(ji,jj,jk) * ( pt2(ji,jj,jk-1,jn) - pt2(ji,jj,jk,jn) ) ) 354 354 END DO 355 355 END DO … … 358 358 ENDIF 359 359 ! 360 DO jk = 1, jpkm1 !== Divergence of vertical fluxes added to pt a==!360 DO jk = 1, jpkm1 !== Divergence of vertical fluxes added to pt_rhs ==! 361 361 DO jj = 2, jpjm1 362 362 DO ji = fs_2, fs_jpim1 ! vector opt. 363 pt a(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + zsign * ( ztfw (ji,jj,jk) - ztfw(ji,jj,jk+1) ) &364 & * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm)363 pt_rhs(ji,jj,jk,jn) = pt_rhs(ji,jj,jk,jn) + zsign * ( ztfw (ji,jj,jk) - ztfw(ji,jj,jk+1) ) & 364 & * r1_e1e2t(ji,jj) / e3t(ji,jj,jk,Kmm) 365 365 END DO 366 366 END DO -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/traldf_lap_blp.F90
r10954 r10980 45 45 CONTAINS 46 46 47 SUBROUTINE tra_ldf_lap( kt, kit000, cdtype, pahu, pahv, pgu , pgv ,&48 & 49 & ptb , pta , kjpt, kpass, Kmm)47 SUBROUTINE tra_ldf_lap( kt, Kmm, kit000, cdtype, pahu, pahv , & 48 & pgu , pgv , pgui, pgvi, & 49 & pt , pt_rhs, kjpt, kpass ) 50 50 !!---------------------------------------------------------------------- 51 51 !! *** ROUTINE tra_ldf_lap *** … … 59 59 !! difft = 1/(e1e2t*e3t) { di-1[ pahu e2u*e3u/e1u di(tb) ] 60 60 !! + dj-1[ pahv e1v*e3v/e2v dj(tb) ] } 61 !! Add this trend to the general tracer trend pt a:62 !! pt a = pta+ difft63 !! 64 !! ** Action : - Update pt aarrays with the before iso-level61 !! Add this trend to the general tracer trend pt_rhs : 62 !! pt_rhs = pt_rhs + difft 63 !! 64 !! ** Action : - Update pt_rhs arrays with the before iso-level 65 65 !! harmonic mixing trend. 66 66 !!---------------------------------------------------------------------- … … 74 74 REAL(wp), DIMENSION(jpi,jpj ,kjpt), INTENT(in ) :: pgu, pgv ! tracer gradient at pstep levels 75 75 REAL(wp), DIMENSION(jpi,jpj, kjpt), INTENT(in ) :: pgui, pgvi ! tracer gradient at top levels 76 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: pt b ! before and nowtracer fields77 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pt a! tracer trend76 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: pt ! before tracer fields 77 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pt_rhs ! tracer trend 78 78 ! 79 79 INTEGER :: ji, jj, jk, jn ! dummy loop indices … … 114 114 DO jj = 1, jpjm1 115 115 DO ji = 1, fs_jpim1 116 ztu(ji,jj,jk) = zaheeu(ji,jj,jk) * ( pt b(ji+1,jj ,jk,jn) - ptb(ji,jj,jk,jn) )117 ztv(ji,jj,jk) = zaheev(ji,jj,jk) * ( pt b(ji ,jj+1,jk,jn) - ptb(ji,jj,jk,jn) )116 ztu(ji,jj,jk) = zaheeu(ji,jj,jk) * ( pt(ji+1,jj ,jk,jn) - pt(ji,jj,jk,jn) ) 117 ztv(ji,jj,jk) = zaheev(ji,jj,jk) * ( pt(ji ,jj+1,jk,jn) - pt(ji,jj,jk,jn) ) 118 118 END DO 119 119 END DO … … 139 139 DO jj = 2, jpjm1 140 140 DO ji = fs_2, fs_jpim1 141 pt a(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + ( ztu(ji,jj,jk) - ztu(ji-1,jj,jk) &142 & +ztv(ji,jj,jk) - ztv(ji,jj-1,jk) ) &143 & / ( e1e2t(ji,jj) * e3t(ji,jj,jk,Kmm) )141 pt_rhs(ji,jj,jk,jn) = pt_rhs(ji,jj,jk,jn) + ( ztu(ji,jj,jk) - ztu(ji-1,jj,jk) & 142 & + ztv(ji,jj,jk) - ztv(ji,jj-1,jk) ) & 143 & / ( e1e2t(ji,jj) * e3t(ji,jj,jk,Kmm) ) 144 144 END DO 145 145 END DO … … 160 160 161 161 162 SUBROUTINE tra_ldf_blp( kt, kit000, cdtype, pahu, pahv, pgu , pgv ,&163 & pgui, pgvi,&164 & ptb , pta , kjpt, kldf, Kmm)162 SUBROUTINE tra_ldf_blp( kt, Kmm, kit000, cdtype, pahu, pahv , & 163 & pgu , pgv , pgui, pgvi, & 164 & pt , pt_rhs, kjpt, kldf ) 165 165 !!---------------------------------------------------------------------- 166 166 !! *** ROUTINE tra_ldf_blp *** … … 184 184 REAL(wp), DIMENSION(jpi,jpj ,kjpt), INTENT(in ) :: pgu, pgv ! tracer gradient at pstep levels 185 185 REAL(wp), DIMENSION(jpi,jpj, kjpt), INTENT(in ) :: pgui, pgvi ! tracer gradient at top levels 186 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: pt b! before and now tracer fields187 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pt a! tracer trend186 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: pt ! before and now tracer fields 187 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pt_rhs ! tracer trend 188 188 ! 189 189 INTEGER :: ji, jj, jk, jn ! dummy loop indices … … 205 205 zlap(:,:,:,:) = 0._wp 206 206 ! 207 SELECT CASE ( kldf ) !== 1st laplacian applied to pt b(output in zlap) ==!207 SELECT CASE ( kldf ) !== 1st laplacian applied to pt (output in zlap) ==! 208 208 ! 209 209 CASE ( np_blp ) ! iso-level bilaplacian 210 CALL tra_ldf_lap ( kt, kit000, cdtype, pahu, pahv, pgu, pgv, pgui, pgvi, ptb, zlap, kjpt, 1, Kmm)210 CALL tra_ldf_lap ( kt, Kmm, kit000, cdtype, pahu, pahv, pgu, pgv, pgui, pgvi, pt, zlap, kjpt, 1 ) 211 211 CASE ( np_blp_i ) ! rotated bilaplacian : standard operator (Madec) 212 CALL tra_ldf_iso ( kt, kit000, cdtype, pahu, pahv, pgu, pgv, pgui, pgvi, ptb, ptb, zlap, kjpt, 1, Kmm)212 CALL tra_ldf_iso ( kt, Kmm, kit000, cdtype, pahu, pahv, pgu, pgv, pgui, pgvi, pt, pt, zlap, kjpt, 1 ) 213 213 CASE ( np_blp_it ) ! rotated bilaplacian : triad operator (griffies) 214 CALL tra_ldf_triad( kt, kit000, cdtype, pahu, pahv, pgu, pgv, pgui, pgvi, ptb, ptb, zlap, kjpt, 1, Kmm)214 CALL tra_ldf_triad( kt, Kmm, kit000, cdtype, pahu, pahv, pgu, pgv, pgui, pgvi, pt, pt, zlap, kjpt, 1 ) 215 215 END SELECT 216 216 ! … … 221 221 ENDIF 222 222 ! 223 SELECT CASE ( kldf ) !== 2nd laplacian applied to zlap (output in pt a) ==!223 SELECT CASE ( kldf ) !== 2nd laplacian applied to zlap (output in pt_rhs) ==! 224 224 ! 225 225 CASE ( np_blp ) ! iso-level bilaplacian 226 CALL tra_ldf_lap ( kt, kit000, cdtype, pahu, pahv, zglu, zglv, zgui, zgvi, zlap, pta, kjpt, 2, Kmm)226 CALL tra_ldf_lap ( kt, Kmm, kit000, cdtype, pahu, pahv, zglu, zglv, zgui, zgvi, zlap, pt_rhs, kjpt, 2 ) 227 227 CASE ( np_blp_i ) ! rotated bilaplacian : standard operator (Madec) 228 CALL tra_ldf_iso ( kt, kit000, cdtype, pahu, pahv, zglu, zglv, zgui, zgvi, zlap, ptb, pta, kjpt, 2, Kmm)228 CALL tra_ldf_iso ( kt, Kmm, kit000, cdtype, pahu, pahv, zglu, zglv, zgui, zgvi, zlap, pt , pt_rhs, kjpt, 2 ) 229 229 CASE ( np_blp_it ) ! rotated bilaplacian : triad operator (griffies) 230 CALL tra_ldf_triad( kt, kit000, cdtype, pahu, pahv, zglu, zglv, zgui, zgvi, zlap, ptb, pta, kjpt, 2, Kmm)230 CALL tra_ldf_triad( kt, Kmm, kit000, cdtype, pahu, pahv, zglu, zglv, zgui, zgvi, zlap, pt , pt_rhs, kjpt, 2 ) 231 231 END SELECT 232 232 ! -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/traldf_triad.F90
r10954 r10980 48 48 CONTAINS 49 49 50 SUBROUTINE tra_ldf_triad( kt, kit000, cdtype, pahu, pahv, pgu , pgv ,&51 & pgui, pgvi,&52 & pt b , ptbb, pta , kjpt, kpass, Kmm)50 SUBROUTINE tra_ldf_triad( kt, Kmm, kit000, cdtype, pahu, pahv, & 51 & pgu , pgv , pgui, pgvi , & 52 & pt , pt2, pt_rhs, kjpt, kpass ) 53 53 !!---------------------------------------------------------------------- 54 54 !! *** ROUTINE tra_ldf_triad *** … … 66 66 !! see documentation for the desciption 67 67 !! 68 !! ** Action : pt aupdated with the before rotated diffusion68 !! ** Action : pt_rhs updated with the before rotated diffusion 69 69 !! ah_wslp2 .... 70 70 !! akz stabilizing vertical diffusivity coefficient (used in trazdf_imp) … … 79 79 REAL(wp), DIMENSION(jpi,jpj ,kjpt), INTENT(in ) :: pgu , pgv ! tracer gradient at pstep levels 80 80 REAL(wp), DIMENSION(jpi,jpj, kjpt), INTENT(in ) :: pgui, pgvi ! tracer gradient at top levels 81 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: pt b! tracer (kpass=1) or laplacian of tracer (kpass=2)82 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: pt bb! tracer (only used in kpass=2)83 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pt a! tracer trend81 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: pt ! tracer (kpass=1) or laplacian of tracer (kpass=2) 82 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: pt2 ! tracer (only used in kpass=2) 83 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pt_rhs ! tracer trend 84 84 ! 85 85 INTEGER :: ji, jj, jk, jn ! dummy loop indices … … 230 230 DO jj = 1, jpjm1 231 231 DO ji = 1, fs_jpim1 ! vector opt. 232 zdit(ji,jj,jk) = ( pt b(ji+1,jj ,jk,jn) - ptb(ji,jj,jk,jn) ) * umask(ji,jj,jk)233 zdjt(ji,jj,jk) = ( pt b(ji ,jj+1,jk,jn) - ptb(ji,jj,jk,jn) ) * vmask(ji,jj,jk)232 zdit(ji,jj,jk) = ( pt(ji+1,jj ,jk,jn) - pt(ji,jj,jk,jn) ) * umask(ji,jj,jk) 233 zdjt(ji,jj,jk) = ( pt(ji ,jj+1,jk,jn) - pt(ji,jj,jk,jn) ) * vmask(ji,jj,jk) 234 234 END DO 235 235 END DO … … 258 258 DO jk = 1, jpkm1 259 259 ! !== Vertical tracer gradient at level jk and jk+1 260 zdkt3d(:,:,1) = ( pt b(:,:,jk,jn) - ptb(:,:,jk+1,jn) ) * tmask(:,:,jk+1)260 zdkt3d(:,:,1) = ( pt(:,:,jk,jn) - pt(:,:,jk+1,jn) ) * tmask(:,:,jk+1) 261 261 ! 262 262 ! ! surface boundary condition: zdkt3d(jk=0)=zdkt3d(jk=1) 263 263 IF( jk == 1 ) THEN ; zdkt3d(:,:,0) = zdkt3d(:,:,1) 264 ELSE ; zdkt3d(:,:,0) = ( pt b(:,:,jk-1,jn) - ptb(:,:,jk,jn) ) * tmask(:,:,jk)264 ELSE ; zdkt3d(:,:,0) = ( pt(:,:,jk-1,jn) - pt(:,:,jk,jn) ) * tmask(:,:,jk) 265 265 ENDIF 266 266 ! … … 363 363 DO jj = 2 , jpjm1 364 364 DO ji = fs_2, fs_jpim1 ! vector opt. 365 pt a(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + zsign * ( zftu(ji-1,jj,jk) - zftu(ji,jj,jk) &365 pt_rhs(ji,jj,jk,jn) = pt_rhs(ji,jj,jk,jn) + zsign * ( zftu(ji-1,jj,jk) - zftu(ji,jj,jk) & 366 366 & + zftv(ji,jj-1,jk) - zftv(ji,jj,jk) ) & 367 367 & / ( e1e2t(ji,jj) * e3t(ji,jj,jk,Kmm) ) … … 378 378 ztfw(ji,jj,jk) = ztfw(ji,jj,jk) - e1e2t(ji,jj) / e3w(ji,jj,jk,Kmm) * tmask(ji,jj,jk) & 379 379 & * ( ah_wslp2(ji,jj,jk) - akz(ji,jj,jk) ) & 380 & * ( ptb(ji,jj,jk-1,jn) - ptb(ji,jj,jk,jn) )380 & * ( pt(ji,jj,jk-1,jn) - pt(ji,jj,jk,jn) ) 381 381 END DO 382 382 END DO … … 389 389 DO ji = fs_2, fs_jpim1 390 390 ztfw(ji,jj,jk) = ztfw(ji,jj,jk) - e1e2t(ji,jj) / e3w(ji,jj,jk,Kmm) * tmask(ji,jj,jk) & 391 & * ah_wslp2(ji,jj,jk) * ( pt b(ji,jj,jk-1,jn) - ptb(ji,jj,jk,jn) )391 & * ah_wslp2(ji,jj,jk) * ( pt(ji,jj,jk-1,jn) - pt(ji,jj,jk,jn) ) 392 392 END DO 393 393 END DO 394 394 END DO 395 CASE( 2 ) ! 2nd pass : eddy flux = ah_wslp2 and akz applied on pt b and ptbbgradients, resp.395 CASE( 2 ) ! 2nd pass : eddy flux = ah_wslp2 and akz applied on pt and pt2 gradients, resp. 396 396 DO jk = 2, jpkm1 397 397 DO jj = 1, jpjm1 398 398 DO ji = fs_2, fs_jpim1 399 399 ztfw(ji,jj,jk) = ztfw(ji,jj,jk) - e1e2t(ji,jj) / e3w(ji,jj,jk,Kmm) * tmask(ji,jj,jk) & 400 & * ( ah_wslp2(ji,jj,jk) * ( pt b (ji,jj,jk-1,jn) - ptb(ji,jj,jk,jn) ) &401 & + akz (ji,jj,jk) * ( pt bb(ji,jj,jk-1,jn) - ptbb(ji,jj,jk,jn) ) )400 & * ( ah_wslp2(ji,jj,jk) * ( pt (ji,jj,jk-1,jn) - pt (ji,jj,jk,jn) ) & 401 & + akz (ji,jj,jk) * ( pt2(ji,jj,jk-1,jn) - pt2(ji,jj,jk,jn) ) ) 402 402 END DO 403 403 END DO … … 406 406 ENDIF 407 407 ! 408 DO jk = 1, jpkm1 !== Divergence of vertical fluxes added to pt a==!408 DO jk = 1, jpkm1 !== Divergence of vertical fluxes added to pt_rhs ==! 409 409 DO jj = 2, jpjm1 410 410 DO ji = fs_2, fs_jpim1 ! vector opt. 411 pt a(ji,jj,jk,jn) = pta(ji,jj,jk,jn) + zsign * ( ztfw(ji,jj,jk+1) - ztfw(ji,jj,jk) ) &412 & / ( e1e2t(ji,jj) * e3t(ji,jj,jk,Kmm) )411 pt_rhs(ji,jj,jk,jn) = pt_rhs(ji,jj,jk,jn) + zsign * ( ztfw(ji,jj,jk+1) - ztfw(ji,jj,jk) ) & 412 & / ( e1e2t(ji,jj) * e3t(ji,jj,jk,Kmm) ) 413 413 END DO 414 414 END DO -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/step.F90
r10978 r10980 256 256 IF( lrst_oce .AND. ln_zdfosm ) & 257 257 & CALL osm_rst( kstp, Nnn, 'WRITE' ) ! write OSMOSIS outputs + wn (so must do here) to restarts 258 CALL tra_ldf( kstp, Nbb, Nnn , Nrhs )! lateral mixing258 CALL tra_ldf( kstp, Nbb, Nnn , ts, Nrhs ) ! lateral mixing 259 259 260 260 !!gm : why CALL to dia_ptr has been moved here??? (use trends info?) -
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/TOP/TRP/trcldf.F90
r10966 r10980 94 94 ! 95 95 CASE ( np_lap ) ! iso-level laplacian 96 CALL tra_ldf_lap ( kt, nittrc000,'TRC', zahu, zahv, gtru, gtrv, gtrui, gtrvi,&97 & tr(:,:,:,:,Kbb), tr(:,:,:,:,Krhs), jptra, 1 , Kmm)96 CALL tra_ldf_lap ( kt, Kmm, nittrc000,'TRC', zahu, zahv, gtru, gtrv, gtrui, gtrvi, & 97 & tr(:,:,:,:,Kbb), tr(:,:,:,:,Krhs), jptra, 1 ) 98 98 CASE ( np_lap_i ) ! laplacian : standard iso-neutral operator (Madec) 99 CALL tra_ldf_iso ( kt, nittrc000,'TRC', zahu, zahv, gtru, gtrv, gtrui, gtrvi,&100 & tr(:,:,:,:,Kbb), tr(:,:,:,:,Kbb), tr(:,:,:,:,Krhs), jptra, 1 , Kmm)99 CALL tra_ldf_iso ( kt, Kmm, nittrc000,'TRC', zahu, zahv, gtru, gtrv, gtrui, gtrvi, & 100 & tr(:,:,:,:,Kbb), tr(:,:,:,:,Kbb), tr(:,:,:,:,Krhs), jptra, 1 ) 101 101 CASE ( np_lap_it ) ! laplacian : triad iso-neutral operator (griffies) 102 CALL tra_ldf_triad( kt, nittrc000,'TRC', zahu, zahv, gtru, gtrv, gtrui, gtrvi,&103 & tr(:,:,:,:,Kbb), tr(:,:,:,:,Kbb), tr(:,:,:,:,Krhs), jptra, 1 , Kmm)102 CALL tra_ldf_triad( kt, Kmm, nittrc000,'TRC', zahu, zahv, gtru, gtrv, gtrui, gtrvi, & 103 & tr(:,:,:,:,Kbb), tr(:,:,:,:,Kbb), tr(:,:,:,:,Krhs), jptra, 1 ) 104 104 CASE ( np_blp , np_blp_i , np_blp_it ) ! bilaplacian: all operator (iso-level, -neutral) 105 CALL tra_ldf_blp ( kt, nittrc000,'TRC', zahu, zahv, gtru, gtrv, gtrui, gtrvi,&106 & tr(:,:,:,:,Kbb) , tr(:,:,:,:,Krhs), jptra, nldf_trc , Kmm)105 CALL tra_ldf_blp ( kt, Kmm, nittrc000,'TRC', zahu, zahv, gtru, gtrv, gtrui, gtrvi, & 106 & tr(:,:,:,:,Kbb) , tr(:,:,:,:,Krhs), jptra, nldf_trc ) 107 107 END SELECT 108 108 !
Note: See TracChangeset
for help on using the changeset viewer.