Changeset 10893 for NEMO/branches/2019/dev_r10721_KERNEL-02_Storkey_Coward_IMMERSE_first_steps/src/OCE/TRA/traadv_qck.F90
- Timestamp:
- 2019-04-25T12:05:42+02: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/traadv_qck.F90
r10880 r10893 47 47 CONTAINS 48 48 49 SUBROUTINE tra_adv_qck ( kt, kit000, cdtype, p2dt, p u_mm, pv_mm, pww, Kbb, Kmm, pt, kjpt, Krhs )49 SUBROUTINE tra_adv_qck ( kt, kit000, cdtype, p2dt, pU, pV, pW, Kbb, Kmm, pt, kjpt, Krhs ) 50 50 !!---------------------------------------------------------------------- 51 51 !! *** ROUTINE tra_adv_qck *** … … 89 89 INTEGER , INTENT(in ) :: kjpt ! number of tracers 90 90 REAL(wp) , INTENT(in ) :: p2dt ! tracer time-step 91 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ) :: p u_mm, pv_mm, pww ! 3 ocean velocitycomponents92 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt,jpt), INTENT(inout) :: pt ! activetracers and RHS of tracer equation91 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ) :: pU, pV, pW ! 3 ocean volume transport components 92 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt,jpt), INTENT(inout) :: pt ! tracers and RHS of tracer equation 93 93 !!---------------------------------------------------------------------- 94 94 ! … … 107 107 ! 108 108 ! ! horizontal fluxes are computed with the QUICKEST + ULTIMATE scheme 109 CALL tra_adv_qck_i( kt, cdtype, p2dt, p u_mm, Kbb, Kmm, pt, kjpt, Krhs )110 CALL tra_adv_qck_j( kt, cdtype, p2dt, p v_mm, Kbb, Kmm, pt, kjpt, Krhs )109 CALL tra_adv_qck_i( kt, cdtype, p2dt, pU, Kbb, Kmm, pt, kjpt, Krhs ) 110 CALL tra_adv_qck_j( kt, cdtype, p2dt, pV, Kbb, Kmm, pt, kjpt, Krhs ) 111 111 112 112 ! ! vertical fluxes are computed with the 2nd order centered scheme 113 CALL tra_adv_cen2_k( kt, cdtype, p ww, Kmm, pt, kjpt, Krhs )113 CALL tra_adv_cen2_k( kt, cdtype, pW, Kmm, pt, kjpt, Krhs ) 114 114 ! 115 115 END SUBROUTINE tra_adv_qck 116 116 117 117 118 SUBROUTINE tra_adv_qck_i( kt, cdtype, p2dt, p u_mm, Kbb, Kmm, pt, kjpt, Krhs )118 SUBROUTINE tra_adv_qck_i( kt, cdtype, p2dt, pU, Kbb, Kmm, pt, kjpt, Krhs ) 119 119 !!---------------------------------------------------------------------- 120 120 !! … … 125 125 INTEGER , INTENT(in ) :: kjpt ! number of tracers 126 126 REAL(wp) , INTENT(in ) :: p2dt ! tracer time-step 127 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ) :: p u_mm! i-velocity components127 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ) :: pU ! i-velocity components 128 128 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt,jpt), INTENT(inout) :: pt ! active tracers and RHS of tracer equation 129 129 !! … … 156 156 DO jj = 2, jpjm1 157 157 DO ji = fs_2, fs_jpim1 ! vector opt. 158 zdir = 0.5 + SIGN( 0.5, p u_mm(ji,jj,jk) ) ! if pu_mm> 0 : zdir = 1 otherwise zdir = 0158 zdir = 0.5 + SIGN( 0.5, pU(ji,jj,jk) ) ! if pU > 0 : zdir = 1 otherwise zdir = 0 159 159 zfu(ji,jj,jk) = zdir * zfc(ji,jj,jk ) + ( 1. - zdir ) * zfd(ji+1,jj,jk) ! FU in the x-direction for T 160 160 END DO … … 165 165 DO jj = 2, jpjm1 166 166 DO ji = fs_2, fs_jpim1 ! vector opt. 167 zdir = 0.5 + SIGN( 0.5, p u_mm(ji,jj,jk) ) ! if pu_mm> 0 : zdir = 1 otherwise zdir = 0167 zdir = 0.5 + SIGN( 0.5, pU(ji,jj,jk) ) ! if pU > 0 : zdir = 1 otherwise zdir = 0 168 168 zdx = ( zdir * e1t(ji,jj) + ( 1. - zdir ) * e1t(ji+1,jj) ) * e2u(ji,jj) * e3u(ji,jj,jk,Kmm) 169 zwx(ji,jj,jk) = ABS( p u_mm(ji,jj,jk) ) * p2dt / zdx ! (0<zc_cfl<1 : Courant number on x-direction)169 zwx(ji,jj,jk) = ABS( pU(ji,jj,jk) ) * p2dt / zdx ! (0<zc_cfl<1 : Courant number on x-direction) 170 170 zfc(ji,jj,jk) = zdir * pt(ji ,jj,jk,jn,Kbb) + ( 1. - zdir ) * pt(ji+1,jj,jk,jn,Kbb) ! FC in the x-direction for T 171 171 zfd(ji,jj,jk) = zdir * pt(ji+1,jj,jk,jn,Kbb) + ( 1. - zdir ) * pt(ji ,jj,jk,jn,Kbb) ! FD in the x-direction for T … … 195 195 DO jj = 2, jpjm1 196 196 DO ji = fs_2, fs_jpim1 ! vector opt. 197 zdir = 0.5 + SIGN( 0.5, p u_mm(ji,jj,jk) ) ! if pu_mm> 0 : zdir = 1 otherwise zdir = 0197 zdir = 0.5 + SIGN( 0.5, pU(ji,jj,jk) ) ! if pU > 0 : zdir = 1 otherwise zdir = 0 198 198 !--- If the second ustream point is a land point 199 199 !--- the flux is computed by the 1st order UPWIND scheme 200 200 zmsk = zdir * zfu(ji,jj,jk) + ( 1. - zdir ) * zfu(ji+1,jj,jk) 201 201 zwx(ji,jj,jk) = zmsk * zwx(ji,jj,jk) + ( 1. - zmsk ) * zfc(ji,jj,jk) 202 zwx(ji,jj,jk) = zwx(ji,jj,jk) * p u_mm(ji,jj,jk)202 zwx(ji,jj,jk) = zwx(ji,jj,jk) * pU(ji,jj,jk) 203 203 END DO 204 204 END DO … … 220 220 END DO 221 221 ! ! trend diagnostics 222 IF( l_trd ) CALL trd_tra( kt, cdtype, jn, jptra_xad, zwx, p u_mm, pt(:,:,:,jn,Kmm) )222 IF( l_trd ) CALL trd_tra( kt, cdtype, jn, jptra_xad, zwx, pU, pt(:,:,:,jn,Kmm) ) 223 223 ! 224 224 END DO … … 227 227 228 228 229 SUBROUTINE tra_adv_qck_j( kt, cdtype, p2dt, p v_mm, Kbb, Kmm, pt, kjpt, Krhs )229 SUBROUTINE tra_adv_qck_j( kt, cdtype, p2dt, pV, Kbb, Kmm, pt, kjpt, Krhs ) 230 230 !!---------------------------------------------------------------------- 231 231 !! … … 236 236 INTEGER , INTENT(in ) :: kjpt ! number of tracers 237 237 REAL(wp) , INTENT(in ) :: p2dt ! tracer time-step 238 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ) :: p v_mm! j-velocity components238 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ) :: pV ! j-velocity components 239 239 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt,jpt), INTENT(inout) :: pt ! active tracers and RHS of tracer equation 240 240 !! … … 272 272 DO jj = 2, jpjm1 273 273 DO ji = fs_2, fs_jpim1 ! vector opt. 274 zdir = 0.5 + SIGN( 0.5, p v_mm(ji,jj,jk) ) ! if pu_mm> 0 : zdir = 1 otherwise zdir = 0274 zdir = 0.5 + SIGN( 0.5, pV(ji,jj,jk) ) ! if pU > 0 : zdir = 1 otherwise zdir = 0 275 275 zfu(ji,jj,jk) = zdir * zfc(ji,jj,jk ) + ( 1. - zdir ) * zfd(ji,jj+1,jk) ! FU in the x-direction for T 276 276 END DO … … 281 281 DO jj = 2, jpjm1 282 282 DO ji = fs_2, fs_jpim1 ! vector opt. 283 zdir = 0.5 + SIGN( 0.5, p v_mm(ji,jj,jk) ) ! if pu_mm> 0 : zdir = 1 otherwise zdir = 0283 zdir = 0.5 + SIGN( 0.5, pV(ji,jj,jk) ) ! if pU > 0 : zdir = 1 otherwise zdir = 0 284 284 zdx = ( zdir * e2t(ji,jj) + ( 1. - zdir ) * e2t(ji,jj+1) ) * e1v(ji,jj) * e3v(ji,jj,jk,Kmm) 285 zwy(ji,jj,jk) = ABS( p v_mm(ji,jj,jk) ) * p2dt / zdx ! (0<zc_cfl<1 : Courant number on x-direction)285 zwy(ji,jj,jk) = ABS( pV(ji,jj,jk) ) * p2dt / zdx ! (0<zc_cfl<1 : Courant number on x-direction) 286 286 zfc(ji,jj,jk) = zdir * pt(ji,jj ,jk,jn,Kbb) + ( 1. - zdir ) * pt(ji,jj+1,jk,jn,Kbb) ! FC in the x-direction for T 287 287 zfd(ji,jj,jk) = zdir * pt(ji,jj+1,jk,jn,Kbb) + ( 1. - zdir ) * pt(ji,jj ,jk,jn,Kbb) ! FD in the x-direction for T … … 311 311 DO jj = 2, jpjm1 312 312 DO ji = fs_2, fs_jpim1 ! vector opt. 313 zdir = 0.5 + SIGN( 0.5, p v_mm(ji,jj,jk) ) ! if pu_mm> 0 : zdir = 1 otherwise zdir = 0313 zdir = 0.5 + SIGN( 0.5, pV(ji,jj,jk) ) ! if pU > 0 : zdir = 1 otherwise zdir = 0 314 314 !--- If the second ustream point is a land point 315 315 !--- the flux is computed by the 1st order UPWIND scheme 316 316 zmsk = zdir * zfu(ji,jj,jk) + ( 1. - zdir ) * zfu(ji,jj+1,jk) 317 317 zwy(ji,jj,jk) = zmsk * zwy(ji,jj,jk) + ( 1. - zmsk ) * zfc(ji,jj,jk) 318 zwy(ji,jj,jk) = zwy(ji,jj,jk) * p v_mm(ji,jj,jk)318 zwy(ji,jj,jk) = zwy(ji,jj,jk) * pV(ji,jj,jk) 319 319 END DO 320 320 END DO … … 336 336 END DO 337 337 ! ! trend diagnostics 338 IF( l_trd ) CALL trd_tra( kt, cdtype, jn, jptra_yad, zwy, p v_mm, pt(:,:,:,jn,Kmm) )338 IF( l_trd ) CALL trd_tra( kt, cdtype, jn, jptra_yad, zwy, pV, pt(:,:,:,jn,Kmm) ) 339 339 ! ! "Poleward" heat and salt transports (contribution of upstream fluxes) 340 340 IF( l_ptr ) CALL dia_ptr_hst( jn, 'adv', zwy(:,:,:) ) … … 345 345 346 346 347 SUBROUTINE tra_adv_cen2_k( kt, cdtype, p ww, Kmm, pt, kjpt, Krhs )347 SUBROUTINE tra_adv_cen2_k( kt, cdtype, pW, Kmm, pt, kjpt, Krhs ) 348 348 !!---------------------------------------------------------------------- 349 349 !! … … 353 353 CHARACTER(len=3) , INTENT(in ) :: cdtype ! =TRA or TRC (tracer indicator) 354 354 INTEGER , INTENT(in ) :: kjpt ! number of tracers 355 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ) :: p ww! vertical velocity355 REAL(wp), DIMENSION(jpi,jpj,jpk ), INTENT(in ) :: pW ! vertical velocity 356 356 REAL(wp), DIMENSION(jpi,jpj,jpk,kjpt,jpt), INTENT(inout) :: pt ! active tracers and RHS of tracer equation 357 357 ! … … 370 370 DO jj = 2, jpjm1 371 371 DO ji = fs_2, fs_jpim1 ! vector opt. 372 zwz(ji,jj,jk) = 0.5 * p ww(ji,jj,jk) * ( pt(ji,jj,jk-1,jn,Kmm) + pt(ji,jj,jk,jn,Kmm) ) * wmask(ji,jj,jk)372 zwz(ji,jj,jk) = 0.5 * pW(ji,jj,jk) * ( pt(ji,jj,jk-1,jn,Kmm) + pt(ji,jj,jk,jn,Kmm) ) * wmask(ji,jj,jk) 373 373 END DO 374 374 END DO … … 378 378 DO jj = 1, jpj 379 379 DO ji = 1, jpi 380 zwz(ji,jj, mikt(ji,jj) ) = p ww(ji,jj,mikt(ji,jj)) * pt(ji,jj,mikt(ji,jj),jn,Kmm) ! linear free surface380 zwz(ji,jj, mikt(ji,jj) ) = pW(ji,jj,mikt(ji,jj)) * pt(ji,jj,mikt(ji,jj),jn,Kmm) ! linear free surface 381 381 END DO 382 382 END DO 383 383 ELSE ! no ocean cavities (only ocean surface) 384 zwz(:,:,1) = p ww(:,:,1) * pt(:,:,1,jn,Kmm)384 zwz(:,:,1) = pW(:,:,1) * pt(:,:,1,jn,Kmm) 385 385 ENDIF 386 386 ENDIF … … 395 395 END DO 396 396 ! ! Send trends for diagnostic 397 IF( l_trd ) CALL trd_tra( kt, cdtype, jn, jptra_zad, zwz, p ww, pt(:,:,:,jn,Kmm) )397 IF( l_trd ) CALL trd_tra( kt, cdtype, jn, jptra_zad, zwz, pW, pt(:,:,:,jn,Kmm) ) 398 398 ! 399 399 END DO
Note: See TracChangeset
for help on using the changeset viewer.