Changeset 10806 for NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/trabbl.F90
- Timestamp:
- 2019-03-27T17:55:22+01:00 (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/trabbl.F90
r10425 r10806 89 89 90 90 91 SUBROUTINE tra_bbl( kt )91 SUBROUTINE tra_bbl( kt, ktlev1, ktlev2, kt2lev, pts_rhs ) 92 92 !!---------------------------------------------------------------------- 93 93 !! *** ROUTINE bbl *** … … 101 101 !! is added to the general tracer trend 102 102 !!---------------------------------------------------------------------- 103 INTEGER, INTENT( in ) :: kt ! ocean time-step 103 INTEGER, INTENT( in ) :: kt ! ocean time-step 104 INTEGER, INTENT( in ) :: ktlev1, ktlev2 ! time level indices for 3-time-level source terms 105 INTEGER, INTENT( in ) :: kt2lev ! time level index for 2-time-level source terms 106 REAL(wp), INTENT( inout), DIMENSION(jpi,jpj,jpk,jpts) :: pts_rhs ! temperature and salinity trends 104 107 ! 105 108 REAL(wp), ALLOCATABLE, DIMENSION(:,:,:) :: ztrdt, ztrds … … 110 113 IF( l_trdtra ) THEN !* Save the T-S input trends 111 114 ALLOCATE( ztrdt(jpi,jpj,jpk) , ztrds(jpi,jpj,jpk) ) 112 ztrdt(:,:,:) = tsa(:,:,:,jp_tem)113 ztrds(:,:,:) = tsa(:,:,:,jp_sal)114 ENDIF 115 116 IF( l_bbl ) CALL bbl( kt, nit000, 'TRA' ) !* bbl coef. and transport (only if not already done in trcbbl)115 ztrdt(:,:,:) = pts_rhs(:,:,:,jp_tem) 116 ztrds(:,:,:) = pts_rhs(:,:,:,jp_sal) 117 ENDIF 118 119 IF( l_bbl ) CALL bbl( kt, nit000, ktlev1, ktlev2, kt2lev, 'TRA' ) !* bbl coef. and transport (only if not already done in trcbbl) 117 120 118 121 IF( nn_bbl_ldf == 1 ) THEN !* Diffusive bbl 119 122 ! 120 CALL tra_bbl_dif( ts b, tsa, jpts )123 CALL tra_bbl_dif( ts(:,:,:,:,ktlev1), e3t(:,:,:,ktlev2), pts_rhs, jpts ) 121 124 IF( ln_ctl ) & 122 125 CALL prt_ctl( tab3d_1=tsa(:,:,:,jp_tem), clinfo1=' bbl_ldf - Ta: ', mask1=tmask, & … … 131 134 IF( nn_bbl_adv /= 0 ) THEN !* Advective bbl 132 135 ! 133 CALL tra_bbl_adv( ts b, tsa, jpts )136 CALL tra_bbl_adv( ts(:,:,:,:,ktlev1), e3t(:,:,:,ktlev2), pts_rhs, jpts ) 134 137 IF(ln_ctl) & 135 138 CALL prt_ctl( tab3d_1=tsa(:,:,:,jp_tem), clinfo1=' bbl_adv - Ta: ', mask1=tmask, & … … 143 146 144 147 IF( l_trdtra ) THEN ! send the trends for further diagnostics 145 ztrdt(:,:,:) = tsa(:,:,:,jp_tem) - ztrdt(:,:,:)146 ztrds(:,:,:) = tsa(:,:,:,jp_sal) - ztrds(:,:,:)148 ztrdt(:,:,:) = pts_rhs(:,:,:,jp_tem) - ztrdt(:,:,:) 149 ztrds(:,:,:) = pts_rhs(:,:,:,jp_sal) - ztrds(:,:,:) 147 150 CALL trd_tra( kt, 'TRA', jp_tem, jptra_bbl, ztrdt ) 148 151 CALL trd_tra( kt, 'TRA', jp_sal, jptra_bbl, ztrds ) … … 155 158 156 159 157 SUBROUTINE tra_bbl_dif( pt b, pta, kjpt )160 SUBROUTINE tra_bbl_dif( pt, pe3t, pt_rhs, kjpt ) 158 161 !!---------------------------------------------------------------------- 159 162 !! *** ROUTINE tra_bbl_dif *** … … 171 174 !! convection is satified) 172 175 !! 173 !! ** Action : pt aincreased by the bbl diffusive trend176 !! ** Action : pt_rhs increased by the bbl diffusive trend 174 177 !! 175 178 !! References : Beckmann, A., and R. Doscher, 1997, J. Phys.Oceanogr., 581-591. … … 177 180 !!---------------------------------------------------------------------- 178 181 INTEGER , INTENT(in ) :: kjpt ! number of tracers 179 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: ptb ! before and now tracer fields 180 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pta ! tracer trend 182 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: pt ! tracer fields 183 REAL(wp), DIMENSION(jpi,jpj,jpk) , INTENT(in ) :: pe3t ! thickness fields 184 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pt_rhs ! tracer trend 181 185 ! 182 186 INTEGER :: ji, jj, jn ! dummy loop indices … … 191 195 DO ji = 1, jpi 192 196 ik = mbkt(ji,jj) ! bottom T-level index 193 zptb(ji,jj) = pt b(ji,jj,ik,jn) ! bottom before T and S197 zptb(ji,jj) = pt(ji,jj,ik,jn) ! bottom before T and S 194 198 END DO 195 199 END DO … … 198 202 DO ji = 2, jpim1 199 203 ik = mbkt(ji,jj) ! bottom T-level index 200 pt a(ji,jj,ik,jn) = pta(ji,jj,ik,jn) &204 pt_rhs(ji,jj,ik,jn) = pt_rhs(ji,jj,ik,jn) & 201 205 & + ( ahu_bbl(ji ,jj ) * ( zptb(ji+1,jj ) - zptb(ji ,jj ) ) & 202 206 & - ahu_bbl(ji-1,jj ) * ( zptb(ji ,jj ) - zptb(ji-1,jj ) ) & 203 207 & + ahv_bbl(ji ,jj ) * ( zptb(ji ,jj+1) - zptb(ji ,jj ) ) & 204 208 & - ahv_bbl(ji ,jj-1) * ( zptb(ji ,jj ) - zptb(ji ,jj-1) ) ) & 205 & * r1_e1e2t(ji,jj) / e3t_n(ji,jj,ik)209 & * r1_e1e2t(ji,jj) / pe3t(ji,jj,ik) 206 210 END DO 207 211 END DO … … 212 216 213 217 214 SUBROUTINE tra_bbl_adv( pt b, pta, kjpt )218 SUBROUTINE tra_bbl_adv( pt, pe3t, pt_rhs, kjpt ) 215 219 !!---------------------------------------------------------------------- 216 220 !! *** ROUTINE trc_bbl *** … … 228 232 !!---------------------------------------------------------------------- 229 233 INTEGER , INTENT(in ) :: kjpt ! number of tracers 230 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: ptb ! before and now tracer fields 231 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pta ! tracer trend 234 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(in ) :: pt ! before and now tracer fields 235 REAL(wp), DIMENSION(jpi,jpj,jpk) , INTENT(in ) :: pe3t ! thickness fields 236 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt), INTENT(inout) :: pt_rhs ! tracer trend 232 237 ! 233 238 INTEGER :: ji, jj, jk, jn ! dummy loop indices … … 250 255 ! 251 256 ! ! up -slope T-point (shelf bottom point) 252 zbtr = r1_e1e2t(iis,jj) / e3t_n(iis,jj,ikus)253 ztra = zu_bbl * ( pt b(iid,jj,ikus,jn) - ptb(iis,jj,ikus,jn) ) * zbtr254 pt a(iis,jj,ikus,jn) = pta(iis,jj,ikus,jn) + ztra257 zbtr = r1_e1e2t(iis,jj) / pe3t(iis,jj,ikus) 258 ztra = zu_bbl * ( pt(iid,jj,ikus,jn) - pt(iis,jj,ikus,jn) ) * zbtr 259 pt_rhs(iis,jj,ikus,jn) = pt_rhs(iis,jj,ikus,jn) + ztra 255 260 ! 256 261 DO jk = ikus, ikud-1 ! down-slope upper to down T-point (deep column) 257 zbtr = r1_e1e2t(iid,jj) / e3t_n(iid,jj,jk)258 ztra = zu_bbl * ( pt b(iid,jj,jk+1,jn) - ptb(iid,jj,jk,jn) ) * zbtr259 pt a(iid,jj,jk,jn) = pta(iid,jj,jk,jn) + ztra262 zbtr = r1_e1e2t(iid,jj) / pe3t(iid,jj,jk) 263 ztra = zu_bbl * ( pt(iid,jj,jk+1,jn) - pt(iid,jj,jk,jn) ) * zbtr 264 pt_rhs(iid,jj,jk,jn) = pt_rhs(iid,jj,jk,jn) + ztra 260 265 END DO 261 266 ! 262 zbtr = r1_e1e2t(iid,jj) / e3t_n(iid,jj,ikud)263 ztra = zu_bbl * ( pt b(iis,jj,ikus,jn) - ptb(iid,jj,ikud,jn) ) * zbtr264 pt a(iid,jj,ikud,jn) = pta(iid,jj,ikud,jn) + ztra267 zbtr = r1_e1e2t(iid,jj) / pe3t(iid,jj,ikud) 268 ztra = zu_bbl * ( pt(iis,jj,ikus,jn) - pt(iid,jj,ikud,jn) ) * zbtr 269 pt_rhs(iid,jj,ikud,jn) = pt_rhs(iid,jj,ikud,jn) + ztra 265 270 ENDIF 266 271 ! … … 272 277 ! 273 278 ! up -slope T-point (shelf bottom point) 274 zbtr = r1_e1e2t(ji,ijs) / e3t_n(ji,ijs,ikvs)275 ztra = zv_bbl * ( pt b(ji,ijd,ikvs,jn) - ptb(ji,ijs,ikvs,jn) ) * zbtr276 pt a(ji,ijs,ikvs,jn) = pta(ji,ijs,ikvs,jn) + ztra279 zbtr = r1_e1e2t(ji,ijs) / pe3t(ji,ijs,ikvs) 280 ztra = zv_bbl * ( pt(ji,ijd,ikvs,jn) - pt(ji,ijs,ikvs,jn) ) * zbtr 281 pt_rhs(ji,ijs,ikvs,jn) = pt_rhs(ji,ijs,ikvs,jn) + ztra 277 282 ! 278 283 DO jk = ikvs, ikvd-1 ! down-slope upper to down T-point (deep column) 279 zbtr = r1_e1e2t(ji,ijd) / e3t_n(ji,ijd,jk)280 ztra = zv_bbl * ( pt b(ji,ijd,jk+1,jn) - ptb(ji,ijd,jk,jn) ) * zbtr281 pt a(ji,ijd,jk,jn) = pta(ji,ijd,jk,jn) + ztra284 zbtr = r1_e1e2t(ji,ijd) / pe3t(ji,ijd,jk) 285 ztra = zv_bbl * ( pt(ji,ijd,jk+1,jn) - pt(ji,ijd,jk,jn) ) * zbtr 286 pt_rhs(ji,ijd,jk,jn) = pt_rhs(ji,ijd,jk,jn) + ztra 282 287 END DO 283 288 ! ! down-slope T-point (deep bottom point) 284 zbtr = r1_e1e2t(ji,ijd) / e3t_n(ji,ijd,ikvd)285 ztra = zv_bbl * ( pt b(ji,ijs,ikvs,jn) - ptb(ji,ijd,ikvd,jn) ) * zbtr286 pt a(ji,ijd,ikvd,jn) = pta(ji,ijd,ikvd,jn) + ztra289 zbtr = r1_e1e2t(ji,ijd) / pe3t(ji,ijd,ikvd) 290 ztra = zv_bbl * ( pt(ji,ijs,ikvs,jn) - pt(ji,ijd,ikvd,jn) ) * zbtr 291 pt_rhs(ji,ijd,ikvd,jn) = pt_rhs(ji,ijd,ikvd,jn) + ztra 287 292 ENDIF 288 293 END DO … … 295 300 296 301 297 SUBROUTINE bbl( kt, kit000, cdtype )302 SUBROUTINE bbl( kt, kit000, ktlev1, ktlev2, kt2lev, cdtype ) 298 303 !!---------------------------------------------------------------------- 299 304 !! *** ROUTINE bbl *** … … 323 328 INTEGER , INTENT(in ) :: kt ! ocean time-step index 324 329 INTEGER , INTENT(in ) :: kit000 ! first time step index 330 INTEGER , INTENT(in ) :: ktlev1, ktlev2 ! time level indices for 3-time-levelsource terms 331 INTEGER , INTENT(in ) :: kt2lev ! time level index for 2-time-level source terms 325 332 CHARACTER(len=3), INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) 326 333 ! … … 344 351 DO ji = 1, jpi 345 352 ik = mbkt(ji,jj) ! bottom T-level index 346 zts (ji,jj,jp_tem) = ts b(ji,jj,ik,jp_tem) ! bottom before T and S347 zts (ji,jj,jp_sal) = ts b(ji,jj,ik,jp_sal)353 zts (ji,jj,jp_tem) = ts(ji,jj,ik,jp_tem,ktlev1) ! bottom before T and S 354 zts (ji,jj,jp_sal) = ts(ji,jj,ik,jp_sal,ktlev1) 348 355 ! 349 zdep(ji,jj) = gdept _n(ji,jj,ik) ! bottom T-level reference depth350 zub (ji,jj) = u n(ji,jj,mbku(ji,jj)) ! bottom velocity351 zvb (ji,jj) = v n(ji,jj,mbkv(ji,jj))356 zdep(ji,jj) = gdept(ji,jj,ik,kt2lev) ! bottom T-level reference depth 357 zub (ji,jj) = uu(ji,jj,mbku(ji,jj),ktlev2) ! bottom velocity 358 zvb (ji,jj) = vv(ji,jj,mbkv(ji,jj),ktlev2) 352 359 END DO 353 360 END DO
Note: See TracChangeset
for help on using the changeset viewer.