Changeset 12511 for NEMO/branches/2020/r12377_ticket2386/src/ABL/ablmod.F90
- Timestamp:
- 2020-03-05T12:21:05+01:00 (4 years ago)
- Location:
- NEMO/branches/2020/r12377_ticket2386
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2020/r12377_ticket2386
- Property svn:externals
-
old new 3 3 ^/utils/build/mk@HEAD mk 4 4 ^/utils/tools@HEAD tools 5 ^/vendors/AGRIF/dev _r11615_ENHANCE-04_namelists_as_internalfiles_agrif@HEAD ext/AGRIF5 ^/vendors/AGRIF/dev@HEAD ext/AGRIF 6 6 ^/vendors/FCM@HEAD ext/FCM 7 7 ^/vendors/IOIPSL@HEAD ext/IOIPSL 8 9 # SETTE 10 ^/utils/CI/sette@HEAD sette
-
- Property svn:externals
-
NEMO/branches/2020/r12377_ticket2386/src/ABL/ablmod.F90
r12353 r12511 152 152 DO jk = 3, jpkam1 153 153 DO ji = 1, jpi ! vector opt. 154 z_elem_a( ji, jk ) = - r dt_abl * Avt_abl( ji, jj, jk-1 ) / e3w_abl( jk-1 ) ! lower-diagonal155 z_elem_c( ji, jk ) = - r dt_abl * Avt_abl( ji, jj, jk ) / e3w_abl( jk ) ! upper-diagonal154 z_elem_a( ji, jk ) = - rDt_abl * Avt_abl( ji, jj, jk-1 ) / e3w_abl( jk-1 ) ! lower-diagonal 155 z_elem_c( ji, jk ) = - rDt_abl * Avt_abl( ji, jj, jk ) / e3w_abl( jk ) ! upper-diagonal 156 156 z_elem_b( ji, jk ) = e3t_abl(jk) - z_elem_a( ji, jk ) - z_elem_c( ji, jk ) ! diagonal 157 157 END DO … … 161 161 ! Neumann at the bottom 162 162 z_elem_a( ji, 2 ) = 0._wp 163 z_elem_c( ji, 2 ) = - r dt_abl * Avt_abl( ji, jj, 2 ) / e3w_abl( 2 )163 z_elem_c( ji, 2 ) = - rDt_abl * Avt_abl( ji, jj, 2 ) / e3w_abl( 2 ) 164 164 ! Homogeneous Neumann at the top 165 z_elem_a( ji, jpka ) = - r dt_abl * Avt_abl( ji, jj, jpka ) / e3w_abl( jpka )165 z_elem_a( ji, jpka ) = - rDt_abl * Avt_abl( ji, jj, jpka ) / e3w_abl( jpka ) 166 166 z_elem_c( ji, jpka ) = 0._wp 167 167 z_elem_b( ji, jpka ) = e3t_abl( jpka ) - z_elem_a( ji, jpka ) … … 184 184 zztmp2 = zztmp2 * pfrac_oce(ji,jj) + (1._wp - pfrac_oce(ji,jj)) * psen_ice(ji,jj) * ptm_su(ji,jj) 185 185 #endif 186 z_elem_b( ji, 2 ) = e3t_abl( 2 ) - z_elem_c( ji, 2 ) + r dt_abl * zztmp1187 tq_abl ( ji, jj, 2 , nt_a, jtra ) = e3t_abl( 2 ) * tq_abl ( ji, jj, 2 , nt_n, jtra ) + r dt_abl * zztmp2186 z_elem_b( ji, 2 ) = e3t_abl( 2 ) - z_elem_c( ji, 2 ) + rDt_abl * zztmp1 187 tq_abl ( ji, jj, 2 , nt_a, jtra ) = e3t_abl( 2 ) * tq_abl ( ji, jj, 2 , nt_n, jtra ) + rDt_abl * zztmp2 188 188 tq_abl ( ji, jj, jpka, nt_a, jtra ) = e3t_abl( jpka ) * tq_abl ( ji, jj, jpka, nt_n, jtra ) 189 189 END DO … … 196 196 zztmp2 = zztmp2 * pfrac_oce(ji,jj) + (1._wp - pfrac_oce(ji,jj)) * pevp_ice(ji, jj) * pssq_ice(ji, jj) 197 197 #endif 198 z_elem_b( ji, 2 ) = e3t_abl( 2 ) - z_elem_c( ji, 2 ) + r dt_abl * zztmp1199 tq_abl ( ji, jj, 2 , nt_a, jtra ) = e3t_abl( 2 ) * tq_abl ( ji, jj, 2 , nt_n, jtra ) + r dt_abl * zztmp2198 z_elem_b( ji, 2 ) = e3t_abl( 2 ) - z_elem_c( ji, 2 ) + rDt_abl * zztmp1 199 tq_abl ( ji, jj, 2 , nt_a, jtra ) = e3t_abl( 2 ) * tq_abl ( ji, jj, 2 , nt_n, jtra ) + rDt_abl * zztmp2 200 200 tq_abl ( ji, jj, jpka, nt_a, jtra ) = e3t_abl( jpka ) * tq_abl ( ji, jj, jpka, nt_n, jtra ) 201 201 END DO … … 242 242 ! Advance u_abl & v_abl to time n+1 243 243 DO_2D_11_11 244 zcff = ( fft_abl(ji,jj) * r dt_abl )*( fft_abl(ji,jj) * rdt_abl ) ! (f dt)**2244 zcff = ( fft_abl(ji,jj) * rDt_abl )*( fft_abl(ji,jj) * rDt_abl ) ! (f dt)**2 245 245 246 246 u_abl( ji, jj, jk, nt_a ) = e3t_abl(jk) *( & 247 247 & (1._wp-gamma_Cor*(1._wp-gamma_Cor)*zcff)*u_abl( ji, jj, jk, nt_n ) & 248 & + r dt_abl * fft_abl(ji, jj) * v_abl ( ji , jj , jk, nt_n ) ) &248 & + rDt_abl * fft_abl(ji, jj) * v_abl ( ji , jj , jk, nt_n ) ) & 249 249 & / (1._wp + gamma_Cor*gamma_Cor*zcff) 250 250 251 251 v_abl( ji, jj, jk, nt_a ) = e3t_abl(jk) *( & 252 252 & (1._wp-gamma_Cor*(1._wp-gamma_Cor)*zcff)*v_abl( ji, jj, jk, nt_n ) & 253 & - r dt_abl * fft_abl(ji, jj) * u_abl ( ji , jj, jk, nt_n ) ) &253 & - rDt_abl * fft_abl(ji, jj) * u_abl ( ji , jj, jk, nt_n ) ) & 254 254 & / (1._wp + gamma_Cor*gamma_Cor*zcff) 255 255 END_2D … … 264 264 DO ji = 1, jpi 265 265 u_abl( ji, jj, jk, nt_a ) = u_abl( ji, jj, jk, nt_a ) & 266 & - r dt_abl * e3t_abl(jk) * fft_abl(ji , jj) * pgv_dta(ji ,jj ,jk)266 & - rDt_abl * e3t_abl(jk) * fft_abl(ji , jj) * pgv_dta(ji ,jj ,jk) 267 267 v_abl( ji, jj, jk, nt_a ) = v_abl( ji, jj, jk, nt_a ) & 268 & + r dt_abl * e3t_abl(jk) * fft_abl(ji, jj ) * pgu_dta(ji ,jj ,jk)268 & + rDt_abl * e3t_abl(jk) * fft_abl(ji, jj ) * pgu_dta(ji ,jj ,jk) 269 269 END DO 270 270 END DO … … 277 277 DO jk = 1, jpka 278 278 DO ji = 1, jpi 279 u_abl( ji, jj, jk, nt_a ) = u_abl( ji, jj, jk, nt_a ) - r dt_abl * e3t_abl(jk) * pgu_dta(ji,jj,jk)280 v_abl( ji, jj, jk, nt_a ) = v_abl( ji, jj, jk, nt_a ) - r dt_abl * e3t_abl(jk) * pgv_dta(ji,jj,jk)279 u_abl( ji, jj, jk, nt_a ) = u_abl( ji, jj, jk, nt_a ) - rDt_abl * e3t_abl(jk) * pgu_dta(ji,jj,jk) 280 v_abl( ji, jj, jk, nt_a ) = v_abl( ji, jj, jk, nt_a ) - rDt_abl * e3t_abl(jk) * pgv_dta(ji,jj,jk) 281 281 ENDDO 282 282 ENDDO … … 295 295 DO jk = 3, jpkam1 296 296 DO ji = 1, jpi 297 z_elem_a( ji, jk ) = - r dt_abl * Avm_abl( ji, jj, jk-1 ) / e3w_abl( jk-1 ) ! lower-diagonal298 z_elem_c( ji, jk ) = - r dt_abl * Avm_abl( ji, jj, jk ) / e3w_abl( jk ) ! upper-diagonal297 z_elem_a( ji, jk ) = - rDt_abl * Avm_abl( ji, jj, jk-1 ) / e3w_abl( jk-1 ) ! lower-diagonal 298 z_elem_c( ji, jk ) = - rDt_abl * Avm_abl( ji, jj, jk ) / e3w_abl( jk ) ! upper-diagonal 299 299 z_elem_b( ji, jk ) = e3t_abl(jk) - z_elem_a( ji, jk ) - z_elem_c( ji, jk ) ! diagonal 300 300 END DO … … 304 304 !++ Surface boundary condition 305 305 z_elem_a( ji, 2 ) = 0._wp 306 z_elem_c( ji, 2 ) = - r dt_abl * Avm_abl( ji, jj, 2 ) / e3w_abl( 2 )306 z_elem_c( ji, 2 ) = - rDt_abl * Avm_abl( ji, jj, 2 ) / e3w_abl( 2 ) 307 307 ! 308 308 zztmp1 = pcd_du(ji, jj) … … 313 313 zztmp2 = zztmp2 * pfrac_oce(ji,jj) + (1._wp - pfrac_oce(ji,jj)) * pcd_du_ice(ji, jj) * zzice 314 314 #endif 315 z_elem_b( ji, 2 ) = e3t_abl( 2 ) - z_elem_c( ji, 2 ) + r dt_abl * zztmp1316 u_abl( ji, jj, 2, nt_a ) = u_abl( ji, jj, 2, nt_a ) + r dt_abl * zztmp2315 z_elem_b( ji, 2 ) = e3t_abl( 2 ) - z_elem_c( ji, 2 ) + rDt_abl * zztmp1 316 u_abl( ji, jj, 2, nt_a ) = u_abl( ji, jj, 2, nt_a ) + rDt_abl * zztmp2 317 317 318 318 !++ Top Neumann B.C. 319 !z_elem_a( ji, jpka ) = - 0.5_wp * r dt_abl * ( Avm_abl( ji, jj, jpka )+ Avm_abl( ji+1, jj, jpka ) ) / e3w_abl( jpka )319 !z_elem_a( ji, jpka ) = - 0.5_wp * rDt_abl * ( Avm_abl( ji, jj, jpka )+ Avm_abl( ji+1, jj, jpka ) ) / e3w_abl( jpka ) 320 320 !z_elem_c( ji, jpka ) = 0._wp 321 321 !z_elem_b( ji, jpka ) = e3t_abl( jpka ) - z_elem_a( ji, jpka ) … … 362 362 DO jk = 3, jpkam1 363 363 DO ji = 1, jpi 364 z_elem_a( ji, jk ) = -r dt_abl * Avm_abl( ji, jj, jk-1 ) / e3w_abl( jk-1 ) ! lower-diagonal365 z_elem_c( ji, jk ) = -r dt_abl * Avm_abl( ji, jj, jk ) / e3w_abl( jk ) ! upper-diagonal364 z_elem_a( ji, jk ) = -rDt_abl * Avm_abl( ji, jj, jk-1 ) / e3w_abl( jk-1 ) ! lower-diagonal 365 z_elem_c( ji, jk ) = -rDt_abl * Avm_abl( ji, jj, jk ) / e3w_abl( jk ) ! upper-diagonal 366 366 z_elem_b( ji, jk ) = e3t_abl(jk) - z_elem_a( ji, jk ) - z_elem_c( ji, jk ) ! diagonal 367 367 END DO … … 371 371 !++ Surface boundary condition 372 372 z_elem_a( ji, 2 ) = 0._wp 373 z_elem_c( ji, 2 ) = - r dt_abl * Avm_abl( ji, jj, 2 ) / e3w_abl( 2 )373 z_elem_c( ji, 2 ) = - rDt_abl * Avm_abl( ji, jj, 2 ) / e3w_abl( 2 ) 374 374 ! 375 375 zztmp1 = pcd_du(ji, jj) … … 380 380 zztmp2 = zztmp2 * pfrac_oce(ji,jj) + (1._wp - pfrac_oce(ji,jj)) * pcd_du_ice(ji, jj) * zzice 381 381 #endif 382 z_elem_b( ji, 2 ) = e3t_abl( 2 ) - z_elem_c( ji, 2 ) + r dt_abl * zztmp1383 v_abl( ji, jj, 2, nt_a ) = v_abl( ji, jj, 2, nt_a ) + r dt_abl * zztmp2382 z_elem_b( ji, 2 ) = e3t_abl( 2 ) - z_elem_c( ji, 2 ) + rDt_abl * zztmp1 383 v_abl( ji, jj, 2, nt_a ) = v_abl( ji, jj, 2, nt_a ) + rDt_abl * zztmp2 384 384 !++ Top Neumann B.C. 385 !z_elem_a( ji, jpka ) = -r dt_abl * Avm_abl( ji, jj, jpka ) / e3w_abl( jpka )385 !z_elem_a( ji, jpka ) = -rDt_abl * Avm_abl( ji, jj, jpka ) / e3w_abl( jpka ) 386 386 !z_elem_c( ji, jpka ) = 0._wp 387 387 !z_elem_b( ji, jpka ) = e3t_abl( jpka ) - z_elem_a( ji, jpka ) … … 436 436 zcff2 = jp_alp3_dyn * zsig**3 + jp_alp2_dyn * zsig**2 & 437 437 & + jp_alp1_dyn * zsig + jp_alp0_dyn 438 zcff = (1._wp-zmsk) + zmsk * zcff2 * r dt ! zcff = 1 for masked points439 ! rdt = rdt_abl / nn_fsbc438 zcff = (1._wp-zmsk) + zmsk * zcff2 * rn_Dt ! zcff = 1 for masked points 439 ! rn_Dt = rDt_abl / nn_fsbc 440 440 zcff = zcff * rest_eq(ji,jj) 441 441 z_cft( ji, jj, jk ) = zcff … … 460 460 zcff2 = jp_alp3_tra * zsig**3 + jp_alp2_tra * zsig**2 & 461 461 & + jp_alp1_tra * zsig + jp_alp0_tra 462 zcff = (1._wp-zmsk) + zmsk * zcff2 * r dt ! zcff = 1 for masked points463 ! rdt = rdt_abl / nn_fsbc462 zcff = (1._wp-zmsk) + zmsk * zcff2 * rn_Dt ! zcff = 1 for masked points 463 ! rn_Dt = rDt_abl / nn_fsbc 464 464 !z_cft( ji, jj, jk ) = zcff 465 465 tq_abl( ji, jj, jk, nt_a, jp_ta ) = (1._wp - zcff ) * tq_abl( ji, jj, jk, nt_a, jp_ta ) & … … 688 688 zbuoy = - Avt_abl( ji, jj, jk ) * zbn2( ji, jj, jk ) 689 689 690 z_elem_a( ji, jk ) = - 0.5_wp * r dt_abl * rn_Sch * ( Avm_abl( ji, jj, jk )+Avm_abl( ji, jj, jk-1 ) ) / e3t_abl( jk ) ! lower-diagonal691 z_elem_c( ji, jk ) = - 0.5_wp * r dt_abl * rn_Sch * ( Avm_abl( ji, jj, jk )+Avm_abl( ji, jj, jk+1 ) ) / e3t_abl( jk+1 ) ! upper-diagonal690 z_elem_a( ji, jk ) = - 0.5_wp * rDt_abl * rn_Sch * ( Avm_abl( ji, jj, jk )+Avm_abl( ji, jj, jk-1 ) ) / e3t_abl( jk ) ! lower-diagonal 691 z_elem_c( ji, jk ) = - 0.5_wp * rDt_abl * rn_Sch * ( Avm_abl( ji, jj, jk )+Avm_abl( ji, jj, jk+1 ) ) / e3t_abl( jk+1 ) ! upper-diagonal 692 692 IF( (zbuoy + zshear) .gt. 0.) THEN ! Patankar trick to avoid negative values of TKE 693 693 z_elem_b( ji, jk ) = e3w_abl(jk) - z_elem_a( ji, jk ) - z_elem_c( ji, jk ) & 694 & + e3w_abl(jk) * r dt_abl * rn_Ceps * sqrt(tke_abl( ji, jj, jk, nt_n )) / mxl_abl(ji,jj,jk) ! diagonal695 tke_abl( ji, jj, jk, nt_a ) = e3w_abl(jk) * ( tke_abl( ji, jj, jk, nt_n ) + r dt_abl * ( zbuoy + zshear ) ) ! right-hand-side694 & + e3w_abl(jk) * rDt_abl * rn_Ceps * sqrt(tke_abl( ji, jj, jk, nt_n )) / mxl_abl(ji,jj,jk) ! diagonal 695 tke_abl( ji, jj, jk, nt_a ) = e3w_abl(jk) * ( tke_abl( ji, jj, jk, nt_n ) + rDt_abl * ( zbuoy + zshear ) ) ! right-hand-side 696 696 ELSE 697 697 z_elem_b( ji, jk ) = e3w_abl(jk) - z_elem_a( ji, jk ) - z_elem_c( ji, jk ) & 698 & + e3w_abl(jk) * r dt_abl * rn_Ceps * sqrt(tke_abl( ji, jj, jk, nt_n )) / mxl_abl(ji,jj,jk) & ! diagonal699 & - e3w_abl(jk) * r dt_abl * zbuoy700 tke_abl( ji, jj, jk, nt_a ) = e3w_abl(jk) * ( tke_abl( ji, jj, jk, nt_n ) + r dt_abl * zshear ) ! right-hand-side698 & + e3w_abl(jk) * rDt_abl * rn_Ceps * sqrt(tke_abl( ji, jj, jk, nt_n )) / mxl_abl(ji,jj,jk) & ! diagonal 699 & - e3w_abl(jk) * rDt_abl * zbuoy 700 tke_abl( ji, jj, jk, nt_a ) = e3w_abl(jk) * ( tke_abl( ji, jj, jk, nt_n ) + rDt_abl * zshear ) ! right-hand-side 701 701 END IF 702 702 END DO
Note: See TracChangeset
for help on using the changeset viewer.