Changeset 11322
- Timestamp:
- 2019-07-22T17:00:21+02:00 (5 years ago)
- Location:
- NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D/cfgs/ORCA2_ICE_ABL/EXPREF/namelist_cfg
r11306 r11322 112 112 ! ! file name ! frequency (hours) ! variable ! time interp.! clim ! 'yearly'/ ! weights filename ! rotation ! land/sea mask ! 113 113 ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! ! pairing ! filename ! 114 sn_wndi = ' abl_erai_1d' , 6. , 'uwnd' , .false. , .true. , 'yearly' , 'weight_erai_3d_bicubic' , 'Uwind'115 sn_wndj = ' abl_erai_1d' , 6. , 'vwnd' , .false. , .true. , 'yearly' , 'weight_erai_3d_bicubic' , 'Vwind'116 sn_qsr = 'ncar_rad.15JUNE2009_fill' , 24. , 'SWDN_MOD', .false. , .true. , 'yearly' , 'weights_core_orca2_bilinear_noc.nc' , '' , ''117 sn_qlw = 'ncar_rad.15JUNE2009_fill' , 24. , 'LWDN_MOD', .false. , .true. , 'yearly' , 'weights_core_orca2_bilinear_noc.nc' , '' , ''118 sn_tair = 'abl_erai_1d' , 6. , 'tair' , .false. , .true. , 'yearly' , 'weight_erai_3d_bilin' , ''119 sn_humi = ' abl_erai_1d' , 6. , 'humi' , .false. , .true. , 'yearly' , 'weight_erai_3d_bilin' , ''120 sn_prec = 'ncar_precip.15JUNE2009_fill', -1. , 'PRC_MOD1', .false. , .true. , 'yearly' , 'weights_core_orca2_bilinear_noc.nc' , '' , ''114 sn_wndi = 'ABLdta_erai_1d' , 6. , 'uwnd' , .false. , .true. , 'yearly' , 'weight_ERAI_GLOBALF128_2_ORCA2_bicubic.nc' , 'Uwind' 115 sn_wndj = 'ABLdta_erai_1d' , 6. , 'vwnd' , .false. , .true. , 'yearly' , 'weight_ERAI_GLOBALF128_2_ORCA2_bicubic.nc' , 'Vwind' 116 sn_qsr = 'ncar_rad.15JUNE2009_fill' , 24. , 'SWDN_MOD', .false. , .true. , 'yearly' , 'weights_core_orca2_bilinear_noc.nc' , '' , '' 117 sn_qlw = 'ncar_rad.15JUNE2009_fill' , 24. , 'LWDN_MOD', .false. , .true. , 'yearly' , 'weights_core_orca2_bilinear_noc.nc' , '' , '' 118 sn_tair = 'ABLdta_erai_1d' , 6. , 'tair' , .false. , .true. , 'yearly' , 'weight_ERAI_GLOBALF128_2_ORCA2_bilinear.nc' , '' 119 sn_humi = 'ABLdta_erai_1d' , 6. , 'humi' , .false. , .true. , 'yearly' , 'weight_ERAI_GLOBALF128_2_ORCA2_bilinear.nc' , '' 120 sn_prec = 'ncar_precip.15JUNE2009_fill', -1. , 'PRC_MOD1', .false. , .true. , 'yearly' , 'weights_core_orca2_bilinear_noc.nc' , '' , '' 121 121 sn_snow = 'ncar_precip.15JUNE2009_fill', -1. , 'SNOW' , .false. , .true. , 'yearly' , 'weights_core_orca2_bilinear_noc.nc' , '' , '' 122 sn_slp = 'slp.15JUNE2009_fill' , 6. , 'SLP' , .false. , .true. , 'yearly' , 'weights_core_orca2_bilinear_noc.nc' , '' , ''123 ! sn_hpgi = 'abl_erai_1d' , 6. , 'uhpg' , .false. , .true. , 'yearly' , 'weight_erai_3d_bicubic' , 'Uhpg' , ''124 ! sn_hpgj = 'abl_erai_1d' , 6. , 'vhpg' , .false. , .true. , 'yearly' , 'weight_erai_3d_bicubic' , 'Vhpg' , ''122 sn_slp = 'slp.15JUNE2009_fill' , 6. , 'SLP' , .false. , .true. , 'yearly' , 'weights_core_orca2_bilinear_noc.nc' , '' , '' 123 sn_hpgi = 'ABLdta_erai_1d' , 6. , 'uhpg' , .false. , .true. , 'yearly' , 'weight_ERAI_GLOBALF128_2_ORCA2_bicubic.nc' , 'Uhpg' , '' 124 sn_hpgj = 'ABLdta_erai_1d' , 6. , 'vhpg' , .false. , .true. , 'yearly' , 'weight_ERAI_GLOBALF128_2_ORCA2_bicubic.nc' , 'Vhpg' , '' 125 125 / 126 126 … … 130 130 cn_dir = './' ! root directory for the location of the ABL grid file 131 131 cn_dom = 'dom_cfg_abl_L50Z10.nc' 132 ln_hpgls_frc = . false.132 ln_hpgls_frc = .true. 133 133 ln_geos_winds = .false. 134 nn_dyn_restore = 2135 rn_ldyn_min = 16.! magnitude of the nudging on ABL dynamics at the bottom of the ABL [hour]136 rn_ldyn_max = 1. 6! magnitude of the nudging on ABL dynamics at the top of the ABL [hour]137 rn_ltra_min = 16.! magnitude of the nudging on ABL tracers at the bottom of the ABL [hour]138 rn_ltra_max = 1. 6! magnitude of the nudging on ABL tracers at the top of the ABL [hour]134 nn_dyn_restore = 1 135 rn_ldyn_min = 7.5 ! magnitude of the nudging on ABL dynamics at the bottom of the ABL [hour] 136 rn_ldyn_max = 1.5 ! magnitude of the nudging on ABL dynamics at the top of the ABL [hour] 137 rn_ltra_min = 7.5 ! magnitude of the nudging on ABL tracers at the bottom of the ABL [hour] 138 rn_ltra_max = 1.5 ! magnitude of the nudging on ABL tracers at the top of the ABL [hour] 139 139 / 140 140 !----------------------------------------------------------------------- -
NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D/cfgs/SHARED/namelist_ref
r11306 r11322 301 301 rn_Rod = 0.15 ! c0 in RMCA17 mixing length formulation (not yet implemented) 302 302 rn_Ric = 0.139 ! Critical Richardson number (to compute PBL height and diffusivities) 303 ln_smth_pblh = .false. ! Smoothing of PBL height with a 2d Hanning filter 303 304 / 304 305 !----------------------------------------------------------------------- -
NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D/src/ABL/ablmod.F90
r11305 r11322 81 81 ! 82 82 REAL(wp), DIMENSION(1:jpi,1:jpj ) :: zrhoa, zwnd_i, zwnd_j 83 REAL(wp), DIMENSION(1:jpi,1:jpka ) :: zFC83 ! REAL(wp), DIMENSION(1:jpi,1:jpka ) :: zFC 84 84 REAL(wp), DIMENSION(1:jpi,2:jpka ) :: zCF 85 REAL(wp), DIMENSION(1:jpi, jptq ) :: zBC 85 ! REAL(wp), DIMENSION(1:jpi, jptq ) :: zBC 86 REAL(wp), DIMENSION(1:jpi,1:jpj,1:jpka) :: z_cft !--FL--to be removed after the test phase 86 87 ! 87 88 REAL(wp), DIMENSION(1:jpi,1:jpka ) :: z_elem_a … … 89 90 REAL(wp), DIMENSION(1:jpi,1:jpka ) :: z_elem_c 90 91 ! 91 REAL(wp), DIMENSION(1:jpi,1:jpj,1:jpka ) :: z_cft !--FL--to be removed after the test phase92 !93 92 INTEGER :: ji, jj, jk, jtra, jbak ! dummy loop indices 94 93 REAL(wp) :: zztmp, zcff, ztemp, zhumi, zcff1 95 94 REAL(wp) :: zcff2, zfcor, zmsk, zsig, zcffu, zcffv 96 LOGICAL :: ln_old_coriolis = .FALSE. ! possibility to switch off Coriolis term97 95 ! 98 96 !!--------------------------------------------------------------------- … … 211 209 DO jj = 1, jpj 212 210 DO ji = 1, jpi 213 zcff = ( ff _t(ji,jj) * rdt )*( ff_t(ji,jj) * rdt ) ! (f dt)**2211 zcff = ( fft_abl(ji,jj) * rdt )*( fft_abl(ji,jj) * rdt ) ! (f dt)**2 214 212 215 213 u_abl( ji, jj, jk, nt_a ) = e3t_abl(jk) *( & 216 214 & (1._wp-gamma_Cor*(1._wp-gamma_Cor)*zcff)*u_abl( ji, jj, jk, nt_n ) & 217 & + rdt * ff _t(ji, jj) * v_abl ( ji , jj , jk, nt_n ) ) &215 & + rdt * fft_abl(ji, jj) * v_abl ( ji , jj , jk, nt_n ) ) & 218 216 & / (1._wp + gamma_Cor*gamma_Cor*zcff) 219 217 220 218 v_abl( ji, jj, jk, nt_a ) = e3t_abl(jk) *( & 221 219 & (1._wp-gamma_Cor*(1._wp-gamma_Cor)*zcff)*v_abl( ji, jj, jk, nt_n ) & 222 & - rdt * ff _t(ji, jj) * u_abl ( ji , jj, jk, nt_n ) ) &220 & - rdt * fft_abl(ji, jj) * u_abl ( ji , jj, jk, nt_n ) ) & 223 221 & / (1._wp + gamma_Cor*gamma_Cor*zcff) 224 222 END DO … … 234 232 DO ji = 1, jpi 235 233 u_abl( ji, jj, jk, nt_a ) = u_abl( ji, jj, jk, nt_a ) & 236 & - rdt * e3t_abl(jk) * ff _t(ji , jj) * pgv_dta(ji ,jj ,jk)234 & - rdt * e3t_abl(jk) * fft_abl(ji , jj) * pgv_dta(ji ,jj ,jk) 237 235 v_abl( ji, jj, jk, nt_a ) = v_abl( ji, jj, jk, nt_a ) & 238 & + rdt * e3t_abl(jk) * ff _t(ji, jj ) * pgu_dta(ji ,jj ,jk)236 & + rdt * e3t_abl(jk) * fft_abl(ji, jj ) * pgu_dta(ji ,jj ,jk) 239 237 END DO 240 238 END DO … … 394 392 zcff = (1._wp-zmsk) + zmsk * rdt * zcff2 ! zcff = 1 for masked points 395 393 394 zcff = zcff * rest_eq(ji,jj) ; z_cft( ji, jj, jk ) = zcff 395 396 396 u_abl( ji, jj, jk, nt_a ) = (1._wp - zcff ) * u_abl( ji, jj, jk, nt_a ) & 397 397 & + zcff * pu_dta( ji, jj, jk ) … … 423 423 & + zcff * pq_dta( ji, jj, jk ) 424 424 425 z_cft( ji, jj, jk ) = zcff425 ! z_cft( ji, jj, jk ) = zcff 426 426 END DO 427 427 END DO … … 472 472 DO ji = 1, jpi 473 473 zcff = SQRT( zwnd_i(ji,jj) * zwnd_i(ji,jj) & 474 & + zwnd_j(ji,jj) * zwnd_j(ji,jj) ) * msk_abl(ji,jj)474 & + zwnd_j(ji,jj) * zwnd_j(ji,jj) ) ! * msk_abl(ji,jj) 475 475 zztmp = zrhoa(ji,jj) * pcd_du(ji,jj) 476 476 … … 504 504 CALL prt_ctl( tab2d_2=ptauj , clinfo2= 'vtau : ' ) 505 505 ENDIF 506 506 507 ! !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 507 508 ! ! 8 *** Swap time indices for the next timestep … … 509 510 nt_n = 1 + MOD( kt , 2) 510 511 nt_a = 1 + MOD( kt+1, 2) 511 ! 512 ! 512 513 !--------------------------------------------------------------------------------------------------- 513 514 END SUBROUTINE abl_stp … … 673 674 zcff1 = zcff / ( zcff + rn_epssfc * pblh ( ji, jj ) ) 674 675 zcff = ghw_abl( jk ) 676 zcff2 = zcff / ( zcff + rn_epssfc * pblh ( ji, jj ) ) 675 677 zFC( ji, jk ) = zFC( ji, jk-1) + 0.5_wp * e3t_abl( jk )*( & 676 678 zcff2 * ( zsh2( ji, jk ) - ziRic * zbn2( ji, jj, jk ) & 677 - rn_Cek * ( ff _t( ji, jj ) * ff_t( ji, jj ) ) ) &679 - rn_Cek * ( fft_abl( ji, jj ) * fft_abl( ji, jj ) ) ) & 678 680 + zcff1 * ( zsh2( ji, jk-1) - ziRic * zbn2( ji, jj, jk-1 ) & 679 - rn_Cek * ( ff _t( ji, jj ) * ff_t( ji, jj ) ) ) &681 - rn_Cek * ( fft_abl( ji, jj ) * fft_abl( ji, jj ) ) ) & 680 682 & ) 681 683 IF( ikbl(ji) == 0 .and. zFC( ji, jk ).lt.0._wp ) ikbl(ji)=jk … … 700 702 !------------- 701 703 END DO 702 !------------- 704 !------------- 705 IF(ln_smth_pblh) THEN 706 CALL lbc_lnk( 'ablmod', pblh, 'T', 1.) 707 CALL smooth_pblh( pblh, msk_abl ) 708 CALL lbc_lnk( 'ablmod', pblh, 'T', 1.) 709 ENDIF 703 710 ! !<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 704 711 ! ! Diagnostic mixing length computation … … 886 893 887 894 895 !=================================================================================================== 896 SUBROUTINE smooth_pblh( pvar2d, msk ) 897 !--------------------------------------------------------------------------------------------------- 898 899 !!---------------------------------------------------------------------- 900 !! *** ROUTINE smooth_pblh *** 901 !! 902 !! ** Purpose : 2D Hanning filter on atmospheric PBL height 903 !! 904 !! --------------------------------------------------------------------- 905 REAL(wp), DIMENSION(jpi,jpj), INTENT(in ) :: msk 906 REAL(wp), DIMENSION(jpi,jpj), INTENT(inout) :: pvar2d 907 INTEGER :: ji,jj 908 REAL(wp) :: smth_a, smth_b 909 REAL(wp), DIMENSION(jpi,jpj) :: zdX,zdY,zFX,zFY 910 REAL(wp) :: zumsk,zvmsk 911 !! 912 !!========================================================= 913 !! 914 !! Hanning filter 915 smth_a = 1._wp / 8._wp 916 smth_b = 1._wp / 4._wp 917 ! 918 DO jj=1,jpj 919 DO ji=1,jpi-1 920 zumsk = msk(ji,jj) * msk(ji+1,jj) 921 zdX ( ji, jj ) = ( pvar2d( ji+1,jj ) - pvar2d( ji ,jj ) ) * zumsk 922 END DO 923 END DO 924 925 DO jj=1,jpj-1 926 DO ji=1,jpi 927 zvmsk = msk(ji,jj) * msk(ji,jj+1) 928 zdY ( ji, jj ) = ( pvar2d( ji, jj+1 ) - pvar2d( ji ,jj ) ) * zvmsk 929 END DO 930 END DO 931 932 DO jj=1,jpj-1 933 DO ji=2,jpi-1 934 zFY ( ji, jj ) = zdY ( ji, jj ) & 935 & + smth_a* ( (zdX ( ji, jj+1 ) - zdX( ji-1, jj+1 )) & 936 & - (zdX ( ji, jj ) - zdX( ji-1, jj )) ) 937 END DO 938 END DO 939 940 DO jj=2,jpj-1 941 DO ji=1,jpi-1 942 zFX( ji, jj ) = zdX( ji, jj ) & 943 & + smth_a*( (zdY( ji+1, jj ) - zdY( ji+1, jj-1)) & 944 & - (zdY( ji , jj ) - zdY( ji , jj-1)) ) 945 END DO 946 END DO 947 948 DO jj = 2, jpj-1 949 DO ji = 2,jpi-1 950 pvar2d( ji ,jj ) = pvar2d( ji ,jj ) & 951 & + msk(ji,jj) * smth_b * ( & 952 & zFX( ji, jj ) - zFX( ji-1, jj ) & 953 & +zFY( ji, jj ) - zFY( ji, jj-1 ) ) 954 END DO 955 END DO 956 !! 957 !--------------------------------------------------------------------------------------------------- 958 END SUBROUTINE smooth_pblh 959 !=================================================================================================== 960 888 961 !!====================================================================== 889 962 END MODULE ablmod -
NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D/src/ABL/par_abl.F90
r11305 r11322 26 26 LOGICAL , PUBLIC :: ln_geos_winds !: large-scale restoring of ABL winds toward geostrophic winds 27 27 LOGICAL , PUBLIC :: ln_hpgls_frc !: forcing of ABL winds by large-scale pressure gradient 28 LOGICAL , PUBLIC :: ln_smth_pblh !: smoothing of atmospheric PBL height 28 29 29 30 !!--------------------------------------------------------------------- -
NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D/src/ABL/sbcabl.F90
r11305 r11322 64 64 & nn_dyn_restore, & 65 65 & rn_ldyn_min , rn_ldyn_max, rn_ltra_min, rn_ltra_max, & 66 & nn_amxl, rn_cm, rn_ct, rn_ce, rn_ceps, rn_Rod, rn_Ric 66 & nn_amxl, rn_cm, rn_ct, rn_ce, rn_ceps, rn_Rod, rn_Ric, & 67 & ln_smth_pblh 67 68 !!--------------------------------------------------------------------- 68 69 … … 113 114 END SELECT 114 115 ! 116 IF( ln_smth_pblh ) WRITE(numout,*) ' ABL -- Smoothing of PBL height is activated' 117 ! 115 118 ENDIF 116 119 … … 271 274 !ENDIF 272 275 !!GS restart case not supported 273 276 274 277 END SUBROUTINE sbc_abl_init 275 278 … … 339 342 END SUBROUTINE sbc_abl 340 343 341 342 344 !!====================================================================== 343 345 END MODULE sbcabl -
NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D/src/ICE/icesbc.F90
r11304 r11322 74 74 & sf(jp_tair)%fnow(:,:,1), sf(jp_humi)%fnow(:,:,1), sf(jp_slp)%fnow(:,:,1), & 75 75 & u_ice, v_ice, & ! inputs 76 & putaui = utau_ice, pvtaui = vtau_ice ) ! outputs ! Bulk formulation 76 & putaui = utau_ice, pvtaui = vtau_ice ) ! outputs 77 CASE( jp_abl ) ; CALL blk_ice_1( sf(jp_wndi)%fnow(:,:,1), sf(jp_wndj)%fnow(:,:,1), & 78 & sf(jp_tair)%fnow(:,:,1), sf(jp_humi)%fnow(:,:,1), sf(jp_slp)%fnow(:,:,1), & 79 & u_ice, v_ice, & ! inputs 80 & putaui = utau_ice, pvtaui = vtau_ice ) ! outputs 77 81 CASE( jp_purecpl ) ; CALL sbc_cpl_ice_tau( utau_ice , vtau_ice ) ! Coupled formulation 78 82 END SELECT … … 142 146 CASE( jp_usr ) !--- user defined formulation 143 147 CALL usrdef_sbc_ice_flx( kt, h_s, h_i ) 144 CASE( jp_blk ) !--- bulk formulation148 CASE( jp_blk, jp_abl ) !--- bulk formulation (temporary version for ABL option) 145 149 CALL blk_ice_2 ( t_su, h_s, h_i, alb_ice, sf(jp_tair)%fnow(:,:,1), sf(jp_humi)%fnow(:,:,1), & 146 150 & sf(jp_slp)%fnow(:,:,1), sf(jp_qlw)%fnow(:,:,1), sf(jp_prec)%fnow(:,:,1), sf(jp_snow)%fnow(:,:,1) ) ! -
NEMO/branches/2019/dev_r11265_ASINTER-01_Guillaume_ABL1D/src/OCE/SBC/sbcblk.F90
r11309 r11322 477 477 DO jj = 1, jpj 478 478 DO ji = 1, jpi 479 zztmp = zU_zu(ji,jj) * tmask(ji,jj,1)479 zztmp = zU_zu(ji,jj) !* tmask(ji,jj,1) 480 480 wndm(ji,jj) = zztmp ! Store zU_zu in wndm to compute ustar2 in ablmod 481 481 pcd_du(ji,jj) = zztmp * Cd_atm(ji,jj) … … 639 639 CALL prt_ctl(tab2d_1=zqla , clinfo1=' blk_oce_2: zqla : ', tab2d_2=qsr , clinfo2=' qsr : ') 640 640 CALL prt_ctl(tab2d_1=emp , clinfo1=' blk_oce_2: emp : ') 641 ENDIF 642 641 ENDIF 642 ! 643 643 END SUBROUTINE blk_oce_2 644 644 … … 855 855 zcd_dui(:,:) = wndm_ice(:,:) * Cd_atm(:,:) 856 856 857 IF( ln_blk ) THEN857 ! IF( ln_blk ) THEN 858 858 ! ------------------------------------------------------------ ! 859 859 ! Wind stress relative to the moving ice ( U10m - U_ice ) ! … … 874 874 IF(ln_ctl) CALL prt_ctl( tab2d_1=putaui , clinfo1=' blk_ice: putaui : ' & 875 875 & , tab2d_2=pvtaui , clinfo2=' pvtaui : ' ) 876 ELSE877 DO jj = 1, jpj878 DO ji = 1, jpi879 pcd_dui(ji,jj) = zcd_dui(ji,jj)880 pseni (ji,jj) = wndm_ice(ji,jj) * Ch_atm(ji,jj)881 pevpi (ji,jj) = wndm_ice(ji,jj) * Ce_atm(ji,jj)882 pssqi (ji,jj) = 11637800.0_wp * EXP( -5897.8_wp / (ptsui(ji,jj)+rt0) ) / zrhoa(ji,jj)883 END DO884 END DO885 ENDIF876 ! ELSE 877 ! DO jj = 1, jpj 878 ! DO ji = 1, jpi 879 ! pcd_dui(ji,jj) = zcd_dui(ji,jj) 880 ! pseni (ji,jj) = wndm_ice(ji,jj) * Ch_atm(ji,jj) 881 ! pevpi (ji,jj) = wndm_ice(ji,jj) * Ce_atm(ji,jj) 882 ! pssqi (ji,jj) = 11637800.0_wp * EXP( -5897.8_wp / (ptsui(ji,jj)+rt0) ) / zrhoa(ji,jj) 883 ! END DO 884 ! END DO 885 ! ENDIF 886 886 ! 887 887 IF(ln_ctl) CALL prt_ctl(tab2d_1=wndm_ice , clinfo1=' blk_ice: wndm_ice : ')
Note: See TracChangeset
for help on using the changeset viewer.