diff --git a/src/common/turb/mode_compute_bl89_ml.F90 b/src/common/turb/mode_compute_bl89_ml.F90 index 78fce621f169d4d6d32bbf976d28c99f346232fb..16a202a3cc38802683b26801910346a705bff8a0 100644 --- a/src/common/turb/mode_compute_bl89_ml.F90 +++ b/src/common/turb/mode_compute_bl89_ml.F90 @@ -23,6 +23,7 @@ CONTAINS !! R.Honnert Oct 2016 : Update with AROME !! Q.Rodier 01/2019 : support RM17 mixing length as in bl89.f90 ! P. Wautelet 10/04/2019: replace ABORT and STOP calls by Print_msg +! P. Wautelet 17/12/2021: bugfix: KK instead of JKK !! !------------------------------------------------------------------------------- ! diff --git a/src/common/turb/turb.F90 b/src/common/turb/turb.F90 index 1603c35e20573eb1d8490d7da9558ae7c9b95902..51cb03b5a202d0bb279453fbb4ff62f3f47919cc 100644 --- a/src/common/turb/turb.F90 +++ b/src/common/turb/turb.F90 @@ -527,7 +527,7 @@ ZEXPL = 1.- PIMPL ZRVORD= CST%XRV / CST%XRD ! !Copy data into ZTHLM and ZRM only if needed -IF (HTURBLEN=='BL89' .OR. HTURBLEN=='RM17' .OR. ORMC01) THEN +IF (HTURBLEN=='BL89' .OR. HTURBLEN=='RM17' .OR. HTURBLEN=='ADAP' .OR. ORMC01) THEN ZTHLM(IIB:IIE,IJB:IJE,1:D%NKT) = PTHLT(IIB:IIE,IJB:IJE,1:D%NKT) ZRM(IIB:IIE,IJB:IJE,1:D%NKT,:) = PRT(IIB:IIE,IJB:IJE,1:D%NKT,:) END IF diff --git a/src/mesonh/ext/phys_paramn.f90 b/src/mesonh/ext/phys_paramn.f90 index bb5cb44670e2be26f2048b13b2bb66459ad2f18b..6d6035e5b38e28d67cc9134fc1197052647550ac 100644 --- a/src/mesonh/ext/phys_paramn.f90 +++ b/src/mesonh/ext/phys_paramn.f90 @@ -695,6 +695,7 @@ IF (.NOT. OCLOUD_ONLY .AND. KTCOUNT /= 1) THEN NDLON,NFLEV,CAER,NAER,NSTATM, & XSINDEL,XCOSDEL,XTSIDER,XCORSOL, & XSTATM,XOZON, XAER) + XAER_CLIM = XAER END IF END IF ! diff --git a/src/mesonh/micro/lima_adjust.f90 b/src/mesonh/micro/lima_adjust.f90 index 949fabf42b62e7240d2806dc6eaada110ff037f0..31ea1fefa3f64de70ef37019f48128354ae84871 100644 --- a/src/mesonh/micro/lima_adjust.f90 +++ b/src/mesonh/micro/lima_adjust.f90 @@ -137,6 +137,7 @@ END MODULE MODI_LIMA_ADJUST ! P. Wautelet 28/05/2020: bugfix: correct array start for PSVT and PSVS ! P. Wautelet 01/02/2021: bugfix: add missing CEDS source terms for SV budgets ! B. Vie 06/2020: fix PSRCS +! P. Wautelet 23/07/2021: replace non-standard FLOAT function by REAL function !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -694,9 +695,9 @@ IF( IMICRO >= 1 ) THEN ALLOCATE(ZZW2(IMICRO)) ALLOCATE(ZVEC1(IMICRO)) ALLOCATE(IVEC1(IMICRO)) - ZVEC1(:) = MAX( 1.0001, MIN( FLOAT(NAHEN)-0.0001, XAHENINTP1 * ZZT(:) + XAHENINTP2 ) ) + ZVEC1(:) = MAX( 1.0001, MIN( REAL(NAHEN)-0.0001, XAHENINTP1 * ZZT(:) + XAHENINTP2 ) ) IVEC1(:) = INT( ZVEC1(:) ) - ZVEC1(:) = ZVEC1(:) - FLOAT( IVEC1(:) ) + ZVEC1(:) = ZVEC1(:) - REAL( IVEC1(:) ) ZS(:) = ZRVS(:)*PTSTEP / ZRVSATW(:) - 1. ZZW(:) = ZCCS(:)*PTSTEP/(XLBC*ZCCS(:)/ZRCS(:))**XLBEXC ZZW2(:) = XAHENG3(IVEC1(:)+1)*ZVEC1(:)-XAHENG3(IVEC1(:))*(ZVEC1(:)-1.) diff --git a/src/mesonh/micro/lima_adjust_split.f90 b/src/mesonh/micro/lima_adjust_split.f90 index 985c6654706550f4c499bf0089205af98ddca72b..1b31b825dcb5bd6b95178e34661906f737723c1d 100644 --- a/src/mesonh/micro/lima_adjust_split.f90 +++ b/src/mesonh/micro/lima_adjust_split.f90 @@ -141,6 +141,7 @@ END MODULE MODI_LIMA_ADJUST_SPLIT !! MODIFICATIONS !! ------------- !! Original 06/2021 forked from lima_adjust.f90 +! P. Wautelet 23/07/2021: replace non-standard FLOAT function by REAL function !------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -599,9 +600,9 @@ DO JITER =1,ITERMAX ALLOCATE(ZZW2(IMICRO)) ALLOCATE(ZVEC1(IMICRO)) ALLOCATE(IVEC1(IMICRO)) - ZVEC1(:) = MAX( 1.0001, MIN( FLOAT(NAHEN)-0.0001, XAHENINTP1 * ZZT(:) + XAHENINTP2 ) ) + ZVEC1(:) = MAX( 1.0001, MIN( REAL(NAHEN)-0.0001, XAHENINTP1 * ZZT(:) + XAHENINTP2 ) ) IVEC1(:) = INT( ZVEC1(:) ) - ZVEC1(:) = ZVEC1(:) - FLOAT( IVEC1(:) ) + ZVEC1(:) = ZVEC1(:) - REAL( IVEC1(:) ) ZS(:) = ZRVS(:)*PTSTEP / ZRVSATW(:) - 1. ZZW(:) = ZCCS(:)*PTSTEP/(XLBC*ZCCS(:)/ZRCS(:))**XLBEXC ZZW2(:) = XAHENG3(IVEC1(:)+1)*ZVEC1(:)-XAHENG3(IVEC1(:))*(ZVEC1(:)-1.) diff --git a/src/mesonh/micro/rain_ice_elec.f90 b/src/mesonh/micro/rain_ice_elec.f90 index 69721492d16057037ea4d126ce6ce6801f23f372..b82bed489109f0474b87bf53e43671787df81599 100644 --- a/src/mesonh/micro/rain_ice_elec.f90 +++ b/src/mesonh/micro/rain_ice_elec.f90 @@ -3227,7 +3227,7 @@ IMPLICIT NONE if ( lbudget_rs ) call Budget_store_add( tbudgets(NBUDGET_RS), 'CMEL', & Unpack( -zzw(:) * zrhodj(:), mask = gmicro(:, :, :), field = 0. ) ) - if ( lbudget_rg ) call Budget_store_end( tbudgets(NBUDGET_RG), 'CMEL', & + if ( lbudget_rg ) call Budget_store_add( tbudgets(NBUDGET_RG), 'CMEL', & Unpack( zzw(:) * zrhodj(:), mask = gmicro(:, :, :), field = 0. ) ) if ( lbudget_sv ) then call Budget_store_end( tbudgets(NBUDGET_SV1 - 1 + nsv_elecbeg + 4 ), 'CMEL', & diff --git a/src/mesonh/turb/ini_cturb.f90 b/src/mesonh/turb/ini_cturb.f90 index 9fc3c4a94329738f2d1d03744d297dab6ba7fe0b..ea3f0c70d937df63992fde48dba3347e5f6b5fd4 100644 --- a/src/mesonh/turb/ini_cturb.f90 +++ b/src/mesonh/turb/ini_cturb.f90 @@ -225,7 +225,7 @@ XCPR5= XCPR2 ! 3. MINIMUM VALUES ! -------------- ! -XTKEMIN=0.01 +XTKEMIN=0.01 ! This value is replaced by XKEMIN in &NAM_TURBn ! !XLINI=10. ! BL mixing length XLINI=0.1 ! BL mixing length diff --git a/tools/check_commit_mesonh.sh b/tools/check_commit_mesonh.sh index ff13abe7b90a12abec8472ee8b8e914d4d585851..dcd9ef33f0bc9014942ac59c17e8eb4f3945c71f 100755 --- a/tools/check_commit_mesonh.sh +++ b/tools/check_commit_mesonh.sh @@ -8,7 +8,7 @@ set -e # Repertoire où MNH-V5-5-0_PHYEX.tar.gz modifie pour accueillir PHYEX se trouve #TARGZDIR=$HOME -availTests="007_16janvier/008_run2, 007_16janvier/008_run2_turb3D, COLD_BUBBLE/002_mesonh" +availTests="007_16janvier/008_run2, 007_16janvier/008_run2_turb3D, COLD_BUBBLE/002_mesonh, ARMLES/RUN, COLD_BUBBLE_3D/002_mesonh," defaultTest="007_16janvier/008_run2" separator='_' #- be carrefull, gmkpack (at least on belenos) has multiple allergies (':', '.', '@') #- seprator must be in sync with prep_code.sh separator @@ -220,6 +220,10 @@ if [ $compilation -eq 1 ]; then # Supress some files if they are not used anymore ! grep -i MODI_COMPUTE_ENTR_DETR $(ls MNH/*compute_updraft* PHYEX/turb/*compute_updraft* 2>/dev/null) && rm -f MNH/compute_entr_detr.f90 ! grep -i MODI_TH_R_FROM_THL_RT_ $(ls MNH/compute_entr_detr.f90 MNH/compute_entr_detr.f90 PHYEX/turb/mode_compute_updraft*.f90 MNH/ice_adjust_bis.f90 MNH/prep_ideal_case.f90 MNH/set_rsou.f90 2>/dev/null) > /dev/null && rm -f MNH/th_r_from_thl_rt_1d.f90 MNH/th_r_from_thl_rt_2d.f90 MNH/th_r_from_thl_rt_3d.f90 + # Routine that changed names (if mode_budget.f90 is present) + set +e + mv -f PHYEX/aux/mode_budget.f90 MNH/budget.f90 + set -e #Configure and compilation command -v module && modulelist=$(module -t list 2>&1 | tail -n +2) #save loaded modules @@ -284,6 +288,12 @@ if [ $check -eq 1 ]; then elif [ $t == COLD_BUBBLE/002_mesonh ]; then path_user=$path_user_beg/MY_RUN/KTEST/COLD_BUBBLE/002_mesonh$path_user_end path_ref=$path_ref_beg/MY_RUN/KTEST/COLD_BUBBLE/002_mesonh$path_ref_end + elif [ $t == COLD_BUBBLE_3D/002_mesonh ]; then + path_user=$path_user_beg/MY_RUN/KTEST/COLD_BUBBLE_3D/002_mesonh$path_user_end + path_ref=$path_ref_beg/MY_RUN/KTEST/COLD_BUBBLE_3D/002_mesonh$path_ref_end + elif [ $t == ARMLES/RUN ]; then + path_user=$path_user_beg/MY_RUN/KTEST/ARMLES/RUN$path_user_end + path_ref=$path_ref_beg/MY_RUN/KTEST/ARMLES/RUN$path_ref_end else echo "cas $t non reconnu" fi @@ -340,7 +350,63 @@ if [ $check -eq 1 ]; then echo "Compare with ncdump..." if [ -f $file1 -a -f $file2 ]; then set +e - diff <(ncdump $file1 | head -c 27350) <(ncdump $file2 | head -c 27350) + diff <(ncdump $file1 | head -c 27300) <(ncdump $file2 | head -c 27300) + t=$? + set -e + allt=$(($allt+$t)) + else + [ ! -f $file1 ] && echo " $file1 is missing" + [ ! -f $file2 ] && echo " $file2 is missing" + allt=$(($allt+1)) + fi + fi + + if [ $case == COLD_BUBBLE_3D ]; then + echo "Compare with python..." + # Compare variable of both Synchronous and Diachronic files with printing difference + file1=$path_user/BUBBL.1.CEN4T.001.nc + file2=$path_ref/BUBBL.1.CEN4T.001.nc + file3=$path_user/BUBBL.1.CEN4T.000.nc + file4=$path_ref/BUBBL.1.CEN4T.000.nc + set +e + $PHYEXTOOLSDIR/compare.py --f1 $file1 --f2 $file2 --f3 $file3 --f4 $file4 + t=$? + set -e + allt=$(($allt+$t)) + + #Check bit-repro before date of creation of Synchronous file from ncdump of all values (pb with direct .nc file checks) + echo "Compare with ncdump..." + if [ -f $file1 -a -f $file2 ]; then + set +e + diff <(ncdump $file1 | head -c 27300) <(ncdump $file2 | head -c 27300) + t=$? + set -e + allt=$(($allt+$t)) + else + [ ! -f $file1 ] && echo " $file1 is missing" + [ ! -f $file2 ] && echo " $file2 is missing" + allt=$(($allt+1)) + fi + fi + + if [ $case == ARMLES ]; then + echo "Compare with python..." + # Compare variable of both Synchronous and Diachronic files with printing difference + file1=$path_user/ARM__.1.CEN4T.001.nc + file2=$path_ref/ARM__.1.CEN4T.001.nc + file3=$path_user/ARM__.1.CEN4T.000.nc + file4=$path_ref/ARM__.1.CEN4T.000.nc + set +e + $PHYEXTOOLSDIR/compare.py --f1 $file1 --f2 $file2 --f3 $file3 --f4 $file4 + t=$? + set -e + allt=$(($allt+$t)) + + #Check bit-repro before date of creation of Synchronous file from ncdump of all values (pb with direct .nc file checks) + echo "Compare with ncdump..." + if [ -f $file1 -a -f $file2 ]; then + set +e + diff <(ncdump $file1 | head -c 62889) <(ncdump $file2 | head -c 62889) t=$? set -e allt=$(($allt+$t)) diff --git a/tools/compare.py b/tools/compare.py index 55176ed1e3bfcb6ae159fd5548b71f406f8a266d..7d335da9545d0e9ab2a11e5b061346e218683e9f 100755 --- a/tools/compare.py +++ b/tools/compare.py @@ -2,6 +2,32 @@ import xarray as xr +avail_groups=['Stations/sta1', +'LES_budgets/Miscellaneous/Cartesian/Not_time_averaged/Not_normalized/cart/', +'LES_budgets/Miscellaneous/Cartesian/Time_averaged/Not_normalized/cart/', +'LES_budgets/Mean/Cartesian/Not_time_averaged/Not_normalized/cart/', +'LES_budgets/Mean/Cartesian/Time_averaged/Not_normalized/cart/', +'LES_budgets/Resolved/Cartesian/Not_time_averaged/Not_normalized/cart/', +'LES_budgets/Resolved/Cartesian/Time_averaged/Not_normalized/cart/', +'LES_budgets/Subgrid/Cartesian/Not_time_averaged/Not_normalized/cart/', +'LES_budgets/Subgrid/Cartesian/Time_averaged/Not_normalized/cart/', +'LES_budgets/Surface/Cartesian/Not_time_averaged/Not_normalized/cart/', +'LES_budgets/Surface/Cartesian/Time_averaged/Not_normalized/cart/', +'LES_budgets/BU_KE/Cartesian/Not_time_averaged/Not_normalized/cart/', +'LES_budgets/BU_KE/Cartesian/Time_averaged/Not_normalized/cart/', +'LES_budgets/BU_THL2/Cartesian/Not_time_averaged/Not_normalized/cart/', +'LES_budgets/BU_THL2/Cartesian/Time_averaged/Not_normalized/cart/', +'LES_budgets/BU_WTHL/Cartesian/Not_time_averaged/Not_normalized/cart/', +'LES_budgets/BU_WTHL/Cartesian/Time_averaged/Not_normalized/cart/', +'LES_budgets/BU_RT2/Cartesian/Not_time_averaged/Not_normalized/cart/', +'LES_budgets/BU_RT2/Cartesian/Time_averaged/Not_normalized/cart/', +'LES_budgets/BU_WRT/Cartesian/Not_time_averaged/Not_normalized/cart/', +'LES_budgets/BU_WRT/Cartesian/Time_averaged/Not_normalized/cart/', +'LES_budgets/BU_THLR/Cartesian/Not_time_averaged/Not_normalized/cart/', +'LES_budgets/BU_THLR/Cartesian/Time_averaged/Not_normalized/cart/'] + + + def compareBACKUPFiles(file_user, file_ref): status = 0 da = xr.open_dataset(file_user) @@ -56,6 +82,26 @@ def compareTSERIESFiles(file_user, file_ref): print(var, ecart_min, ecart_moy, ecart_max) except: pass + # Groups comparison + for grp in avail_groups: + try: + nk=len(da['level_les']) + da = xr.open_dataset(file_user, group=grp) + da2 = xr.open_dataset(file_ref, group=grp) + variables = list(da.keys()) + print(grp) + for var in variables: + try: + ecart_min = float(da2[var][:,:nk-JPVEXT].min())-float(da[var][:,:nk-JPVEXT].min()) + ecart_moy = float(da2[var][:,:nk-JPVEXT].mean())-float(da[var][:,:nk-JPVEXT].mean()) + ecart_max = float(da2[var][:,:nk-JPVEXT].max())-float(da[var][:,:nk-JPVEXT].max()) + if (ecart_min !=0 or ecart_moy !=0 or ecart_max !=0): + status += 1 + print(var, ecart_min, ecart_moy, ecart_max) + except: + pass + except: + pass return status if __name__ == "__main__":