From 2f088cdbcb6e1185a79dc373f1a37745f0d62c23 Mon Sep 17 00:00:00 2001 From: shoyokota <103961291+shoyokota@users.noreply.github.com> Date: Wed, 22 Feb 2023 03:20:29 +0900 Subject: [PATCH] Add options for Mixed Ensemble and Scale/Variable-Dependent Localization (#451) * Add options for Scale/Variable/Time-Dependent Localization * Add options for Variable-Dependent Localization of OU/MAP * rename 'all' to 'conv_dbz' and separate configuration files to set_rrfs_config_SDL_VDL_MixEn.sh * remove change for preventing from crashing restart files for now --------- Co-authored-by: Sho Yokota --- fix/gsi/anavinfo.rrfs_conv_dbz | 81 ++++++++++++++++++++++++++++ fix/gsi/gsiparm.anl.sh | 14 ++++- scripts/exregional_nonvarcldanl.sh | 2 +- scripts/exregional_run_analysis.sh | 73 +++++++++++++++++++------ scripts/exregional_run_enkf.sh | 6 +-- ush/config.sh.RRFS_CONUS_13km | 1 + ush/config.sh.RRFS_CONUS_3km | 1 + ush/config.sh.RRFS_CONUS_3km.2022HWT | 1 + ush/config.sh.RRFS_NA_13km | 1 + ush/config.sh.RRFS_NA_3km | 1 + ush/config.sh.rrfs_a_c13 | 1 + ush/config.sh.rrfs_a_c3 | 1 + ush/config_defaults.sh | 23 +++++++- ush/generate_FV3LAM_wflow.sh | 1 + ush/get_extrn_mdl_file_dir_info.sh | 9 ++++ ush/set_rrfs_config.sh | 17 +++++- ush/set_rrfs_config_SDL_VDL_MixEn.sh | 35 ++++++++++++ ush/set_rrfs_config_general.sh | 1 + ush/templates/FV3LAM_wflow.xml | 44 ++++++++++----- 19 files changed, 274 insertions(+), 39 deletions(-) create mode 100644 fix/gsi/anavinfo.rrfs_conv_dbz create mode 100644 ush/set_rrfs_config_SDL_VDL_MixEn.sh diff --git a/fix/gsi/anavinfo.rrfs_conv_dbz b/fix/gsi/anavinfo.rrfs_conv_dbz new file mode 100644 index 000000000..574a7a79c --- /dev/null +++ b/fix/gsi/anavinfo.rrfs_conv_dbz @@ -0,0 +1,81 @@ +met_guess:: +!var level crtm_use desc orig_name + ps 1 -1 surface_pressure ps + z 1 -1 geopotential_height phis + u 65 2 zonal_wind u + v 65 2 meridional_wind v + w 65 2 vertical velocity w + tv 65 2 virtual_temperature tv + q 65 2 specific_humidity sphu + oz 65 2 ozone ozone + delp 65 -1 fv3 del pressure delp + t2m 1 -1 2-m_T t2m + q2m 1 -1 2-m_Q q2m + ql 65 10 cloud_condensate QCLOUD + qr 65 10 rain QRAIN + qs 65 10 snow QSNOW + qi 65 10 ice QICE + qg 65 10 graupel QGRAUP + dbz 65 10 reflectivity REFL_10CM +:: + +state_derivatives:: +!var level src + ps 1 met_guess + u 65 met_guess + v 65 met_guess + tv 65 met_guess + q 65 met_guess + oz 65 met_guess + cw 65 met_guess + prse 66 met_guess +:: + +state_tendencies:: +!var levels source + u 65 met_guess + v 65 met_guess + tv 65 met_guess + q 65 met_guess + oz 65 met_guess + prse 66 met_guess +:: + +state_vector:: +!var level itracer source funcof + u 65 0 met_guess u + v 65 0 met_guess v + w 65 0 met_guess w + tv 65 0 met_guess tv + tsen 65 0 met_guess tv,q + q 65 1 met_guess q + oz 65 1 met_guess oz + prse 66 0 met_guess prse + ps 1 0 met_guess prse + sst 1 0 met_guess sst + qr 65 1 met_guess qr + ql 65 1 met_guess qc + qs 65 1 met_guess qs + qi 65 1 met_guess qi + qg 65 1 met_guess qg + dbz 65 1 met_guess dbz +:: + +control_vector:: +!var level itracer as/tsfc_sdv an_amp0 source funcof + sf 65 0 0.90 -1.0 state u,v + vp 65 0 0.90 -1.0 state u,v + ps 1 0 1.00 -1.0 state prse + t 65 0 1.40 -1.0 state tv + q 65 1 0.80 -1.0 state q + sst 1 0 1.00 -1.0 state sst + stl 1 0 1.00 -1.0 motley sst + sti 1 0 1.00 -1.0 motley sst + w 65 11 1.00 -1.0 state w + qr 65 11 1.00 -1.0 state qr + qs 65 11 1.00 -1.0 state qs + qi 65 11 1.00 -1.0 state qi + qg 65 11 1.00 -1.0 state qg + ql 65 11 1.00 -1.0 state qc + dbz 65 11 1.00 -1.0 state dbz +:: diff --git a/fix/gsi/gsiparm.anl.sh b/fix/gsi/gsiparm.anl.sh index e5418bbcd..9417cd3df 100755 --- a/fix/gsi/gsiparm.anl.sh +++ b/fix/gsi/gsiparm.anl.sh @@ -149,6 +149,7 @@ OBS_INPUT:: q_hyb_ens=${q_hyb_ens}, aniso_a_en=.false.,generate_ens=.false., n_ens=${nummem}, + l_both_fv3sar_gfs_ens=${l_both_fv3sar_gfs_ens},n_ens_gfs=${nummem_gfs},n_ens_fv3sar=${nummem_fv3sar}, beta_s0=${beta1_inv},s_ens_h=${ens_h},s_ens_v=${ens_v}, regional_ensemble_option=${regional_ensemble_option}, pseudo_hybens = .false., @@ -159,7 +160,18 @@ OBS_INPUT:: jcap_ens=574, fv3sar_bg_opt=${fv3lam_bg_type}, readin_localization=${readin_localization}, - ens_fast_read=${ens_fast_read}, + parallelization_over_ensmembers=${ens_fast_read}, + nsclgrp=${nsclgrp},l_timloc_opt=.false.,ngvarloc=${ngvarloc},naensloc=${naensloc}, + i_ensloccov4tim=${i_ensloccov4tim},i_ensloccov4var=${i_ensloccov4var},i_ensloccov4scl=${i_ensloccov4scl}, + global_spectral_filter_sd=.false.,assign_vdl_nml=${assign_vdl_nml},vdl_scale=${vdl_scale}, + vloc_varlist(1,1)='sf ',vloc_varlist(2,1)='w ',vloc_varlist(3,1)='sf ',vloc_varlist(4,1)='w ', + vloc_varlist(1,2)='vp ',vloc_varlist(2,2)='qr ',vloc_varlist(3,2)='vp ',vloc_varlist(4,2)='qr ', + vloc_varlist(1,3)='ps ',vloc_varlist(2,3)='qs ',vloc_varlist(3,3)='ps ',vloc_varlist(4,3)='qs ', + vloc_varlist(1,4)='t ',vloc_varlist(2,4)='qi ',vloc_varlist(3,4)='t ',vloc_varlist(4,4)='qi ', + vloc_varlist(1,5)='q ',vloc_varlist(2,5)='qg ',vloc_varlist(3,5)='q ',vloc_varlist(4,5)='qg ', + vloc_varlist(1,6)='sst',vloc_varlist(2,6)='ql ',vloc_varlist(3,6)='sst',vloc_varlist(4,6)='ql ', + vloc_varlist(1,7)='stl',vloc_varlist(2,7)='dbz',vloc_varlist(3,7)='stl',vloc_varlist(4,7)='dbz', + vloc_varlist(1,8)='sti',vloc_varlist(2,8)='aaa',vloc_varlist(3,8)='sti',vloc_varlist(4,8)='aaa', / &RAPIDREFRESH_CLDSURF dfi_radar_latent_heat_time_period=20.0, diff --git a/scripts/exregional_nonvarcldanl.sh b/scripts/exregional_nonvarcldanl.sh index a225f5255..61c57d0cc 100755 --- a/scripts/exregional_nonvarcldanl.sh +++ b/scripts/exregional_nonvarcldanl.sh @@ -269,7 +269,7 @@ fi if [ ${DO_ENKF_RADAR_REF} == "TRUE" ]; then l_qnr_from_qr=".true." fi -if [ -r "${cycle_dir}/anal_radardbz_gsi${cycle_tag}/stdout" ]; then +if [ -r "${cycle_dir}/anal_radardbz_gsi${cycle_tag}/gsi_complete_radar.txt" ] || [ -r "${cycle_dir}/anal_conv_dbz_gsi${cycle_tag}/gsi_complete_radar.txt" ]; then l_precip_clear_only=".true." l_qnr_from_qr=".true." fi diff --git a/scripts/exregional_run_analysis.sh b/scripts/exregional_run_analysis.sh index 0362ed956..deec28131 100755 --- a/scripts/exregional_run_analysis.sh +++ b/scripts/exregional_run_analysis.sh @@ -188,6 +188,10 @@ else regional_ensemble_option=1 fi +if [ ${ob_type} != "conv" ] || [ ${BKTYPE} -eq 1 ]; then #not using GDAS + l_both_fv3sar_gfs_ens=.false. +fi + #--------------------------------------------------------------------- # # decide regional_ensemble_option: global ensemble (1) or FV3LAM ensemble (5) @@ -246,10 +250,11 @@ if [[ ${regional_ensemble_option:-1} -eq 5 ]]; then if [[ $ifound -ne ${NUM_ENS_MEMBERS} ]] || [[ ${BKTYPE} -eq 1 ]]; then print_info_msg "Not enough FV3_LAM ensembles, will fall to GDAS" regional_ensemble_option=1 + l_both_fv3sar_gfs_ens=.false. fi fi # -if [[ ${regional_ensemble_option:-1} -eq 1 ]]; then #using GDAS +if [[ ${regional_ensemble_option:-1} -eq 1 || ${l_both_fv3sar_gfs_ens} = ".true." ]]; then #using GDAS #----------------------------------------------------------------------- # Make a list of the latest GFS EnKF ensemble #----------------------------------------------------------------------- @@ -349,6 +354,9 @@ niter2=50 lread_obs_save=.false. lread_obs_skip=.false. if_model_dbz=.false. +nummem_gfs=0 +nummem_fv3sar=0 +anav_type=${ob_type} i_use_2mQ4B=2 i_use_2mT4B=1 @@ -356,7 +364,12 @@ i_use_2mT4B=1 memname='atmf009' if [ ${regional_ensemble_option:-1} -eq 5 ] && [ ${BKTYPE} != 1 ]; then - nummem=$NUM_ENS_MEMBERS + if [ ${l_both_fv3sar_gfs_ens} = ".true." ]; then + nummem_gfs=$(more filelist03 | wc -l) + nummem_gfs=$((nummem_gfs - 3 )) + fi + nummem_fv3sar=$NUM_ENS_MEMBERS + nummem=`expr ${nummem_gfs} + ${nummem_fv3sar}` print_info_msg "$VERBOSE" "Do hybrid with FV3LAM ensemble" ifhyb=.true. print_info_msg "$VERBOSE" " Cycle ${YYYYMMDDHH}: GSI hybrid uses FV3LAM ensemble with n_ens=${nummem}" @@ -364,8 +377,9 @@ if [ ${regional_ensemble_option:-1} -eq 5 ] && [ ${BKTYPE} != 1 ]; then grid_ratio_ens="1" ens_fast_read=.true. else - nummem=$(more filelist03 | wc -l) - nummem=$((nummem - 3 )) + nummem_gfs=$(more filelist03 | wc -l) + nummem_gfs=$((nummem_gfs - 3 )) + nummem=${nummem_gfs} if [[ ${nummem} -ge ${HYBENSMEM_NMIN} ]]; then print_info_msg "$VERBOSE" "Do hybrid with ${memname}" ifhyb=.true. @@ -376,6 +390,9 @@ else print_info_msg "$VERBOSE" " Hybrid needs at least ${HYBENSMEM_NMIN} ${memname} ensembles, only ${nummem} available" echo " ${YYYYMMDDHH}(${cycle_type}): GSI dose pure 3DVAR" >> ${EXPTDIR}/log.cycles fi + if [[ ${anav_type} == "conv_dbz" ]]; then + anav_type="conv" + fi fi # @@ -473,7 +490,7 @@ else esac fi -if [[ ${gsi_type} == "OBSERVER" || ${ob_type} == "conv" ]]; then +if [[ ${gsi_type} == "OBSERVER" || ${anav_type} == "conv" || ${anav_type} == "conv_dbz" ]]; then obs_files_source[0]=${obspath_tmp}/${obsfileprefix}.t${HH}${SUBH}z.prepbufr.tm00 obs_files_target[0]=prepbufr @@ -486,15 +503,19 @@ if [[ ${gsi_type} == "OBSERVER" || ${ob_type} == "conv" ]]; then obs_files_source[${obs_number}]=${obspath_tmp}/${obsfileprefix}.t${HH}${SUBH}z.nexrad.tm00.bufr_d obs_files_target[${obs_number}]=l2rwbufr - if [ ${DO_ENKF_RADAR_REF} == "TRUE" ]; then + if [[ ${DO_ENKF_RADAR_REF} == "TRUE" || ${anav_type} == "conv_dbz" ]]; then obs_number=${#obs_files_source[@]} - obs_files_source[${obs_number}]=${cycle_dir}/process_radarref/00/Gridded_ref.nc + if [ ${cycle_type} == "spinup" ]; then + obs_files_source[${obs_number}]=${cycle_dir}/process_radarref_spinup/00/Gridded_ref.nc + else + obs_files_source[${obs_number}]=${cycle_dir}/process_radarref/00/Gridded_ref.nc + fi obs_files_target[${obs_number}]=dbzobs.nc fi else - if [ ${ob_type} == "radardbz" ]; then + if [ ${anav_type} == "radardbz" ]; then if [ ${cycle_type} == "spinup" ]; then obs_files_source[0]=${cycle_dir}/process_radarref_spinup/00/Gridded_ref.nc @@ -506,7 +527,7 @@ else fi - if [ ${ob_type} == "AERO" ]; then + if [ ${anav_type} == "AERO" ]; then obs_files_source[0]=${OBSPATH_PM}/${YYYYMMDD}/pm25.airnow.${YYYYMMDD}${HH}.bufr obs_files_target[0]=pm25bufr fi @@ -624,7 +645,7 @@ if [ ${DO_ENKF_RADAR_REF} == "TRUE" ]; then beta1_inv=0.0 if_model_dbz=.true. fi -if [[ ${gsi_type} == "ANALYSIS" && ${ob_type} == "radardbz" ]]; then +if [[ ${gsi_type} == "ANALYSIS" && ${anav_type} == "radardbz" ]]; then ANAVINFO=${FIX_GSI}/${ENKF_ANAVINFO_DBZ_FN} miter=1 niter1=100 @@ -632,19 +653,34 @@ if [[ ${gsi_type} == "ANALYSIS" && ${ob_type} == "radardbz" ]]; then bkgerr_vs=0.1 bkgerr_hzscl="0.4,0.5,0.6" beta1_inv=0.0 - ens_h=4.10790 - ens_v=-0.30125 readin_localization=.false. + ens_h=${ens_h_radardbz} + ens_v=${ens_v_radardbz} + nsclgrp=1 + ngvarloc=1 + i_ensloccov4tim=0 + i_ensloccov4var=0 + i_ensloccov4scl=0 q_hyb_ens=.true. if_model_dbz=.true. fi +if [[ ${gsi_type} == "ANALYSIS" && ${anav_type} == "conv_dbz" ]]; then + ANAVINFO=${FIX_GSI}/${ANAVINFO_CONV_DBZ_FN} + beta1_inv=0.0 + if_model_dbz=.true. +fi +naensloc=`expr ${nsclgrp} \* ${ngvarloc} + ${nsclgrp} - 1` +if [ ${assign_vdl_nml} = ".true." ]; then + nsclgrp=`expr ${nsclgrp} \* ${ngvarloc}` + ngvarloc=1 +fi CONVINFO=${FIX_GSI}/${CONVINFO_FN} HYBENSINFO=${FIX_GSI}/${HYBENSINFO_FN} OBERROR=${FIX_GSI}/${OBERROR_FN} BERROR=${FIX_GSI}/${BERROR_FN} -if [[ ${gsi_type} == "ANALYSIS" && ${ob_type} == "AERO" ]]; then +if [[ ${gsi_type} == "ANALYSIS" && ${anav_type} == "AERO" ]]; then if [ ${BKTYPE} -eq 1 ]; then echo "cold start, skip GSI SD DA" exit 0 @@ -833,7 +869,7 @@ fi # skip radar reflectivity analysis if no RRFSE ensemble #----------------------------------------------------------------------- -if [[ ${gsi_type} == "ANALYSIS" && ${ob_type} == "radardbz" ]]; then +if [[ ${gsi_type} == "ANALYSIS" && ${anav_type} == "radardbz" ]]; then if [[ ${regional_ensemble_option:-1} -eq 1 ]]; then echo "No RRFSE ensemble available, cannot do radar reflectivity analysis" exit 0 @@ -879,7 +915,7 @@ EOF # gsi_exec="${EXECDIR}/gsi.x" -if [[ ${gsi_type} == "ANALYSIS" && ${ob_type} == "AERO" ]]; then +if [[ ${gsi_type} == "ANALYSIS" && ${anav_type} == "AERO" ]]; then gsi_exec="${EXECDIR}/gsi.x.sd" fi @@ -916,7 +952,7 @@ fi $APRUN ./gsi.x < gsiparm.anl > stdout 2>&1 || print_err_msg_exit "\ Call to executable to run GSI returned with nonzero exit code." -if [ ${ob_type} == "radardbz" ]; then +if [ ${anav_type} == "radardbz" ]; then cat fort.238 > $comout/rrfs_a.t${HH}z.fits3.tm00 else mv fort.207 fit_rad1 @@ -935,7 +971,7 @@ else fi -cp stdout $comout/stdout_${ob_type} +cp stdout $comout/stdout_${anav_type} # #----------------------------------------------------------------------- # @@ -945,6 +981,9 @@ cp stdout $comout/stdout_${ob_type} #----------------------------------------------------------------------- # touch gsi_complete.txt +if [[ ${anav_type} == "radardbz" || ${anav_type} == "conv_dbz" ]]; then + touch gsi_complete_radar.txt # for nonvarcldanl +fi # #----------------------------------------------------------------------- # diff --git a/scripts/exregional_run_enkf.sh b/scripts/exregional_run_enkf.sh index 8dd97f98e..9f4819ad0 100755 --- a/scripts/exregional_run_enkf.sh +++ b/scripts/exregional_run_enkf.sh @@ -238,14 +238,12 @@ CONVINFO=${FIX_GSI}/convinfo.rrfs if [ ${ob_type} == "conv" ]; then ANAVINFO=${FIX_GSI}/${ENKF_ANAVINFO_FN} - CORRLENGTH=400 - LNSIGCUTOFF=0.5 found_ob_type=1 fi if [ ${ob_type} == "radardbz" ]; then ANAVINFO=${FIX_GSI}/${ENKF_ANAVINFO_DBZ_FN} - CORRLENGTH=18 - LNSIGCUTOFF=0.5 + CORRLENGTH=${CORRLENGTH_radardbz} + LNSIGCUTOFF=${LNSIGCUTOFF_radardbz} found_ob_type=1 fi if [ ${found_ob_type} == 0 ]; then diff --git a/ush/config.sh.RRFS_CONUS_13km b/ush/config.sh.RRFS_CONUS_13km index 2885ef4e0..4fac3c24c 100644 --- a/ush/config.sh.RRFS_CONUS_13km +++ b/ush/config.sh.RRFS_CONUS_13km @@ -8,6 +8,7 @@ EXPT_SUBDIR="rrfs_conus_13km" PREDEF_GRID_NAME=RRFS_CONUS_13km . set_rrfs_config_general.sh +. set_rrfs_config_SDL_VDL_MixEn.sh DO_DACYCLE="TRUE" DO_SURFACE_CYCLE="TRUE" diff --git a/ush/config.sh.RRFS_CONUS_3km b/ush/config.sh.RRFS_CONUS_3km index 899ec13cd..2a5529441 100644 --- a/ush/config.sh.RRFS_CONUS_3km +++ b/ush/config.sh.RRFS_CONUS_3km @@ -8,6 +8,7 @@ EXPT_SUBDIR="RRFS_CONUS_3km" PREDEF_GRID_NAME=RRFS_CONUS_3km . set_rrfs_config_general.sh +. set_rrfs_config_SDL_VDL_MixEn.sh DO_DACYCLE="TRUE" DO_SURFACE_CYCLE="TRUE" diff --git a/ush/config.sh.RRFS_CONUS_3km.2022HWT b/ush/config.sh.RRFS_CONUS_3km.2022HWT index e02a79bc5..954ae1f62 100644 --- a/ush/config.sh.RRFS_CONUS_3km.2022HWT +++ b/ush/config.sh.RRFS_CONUS_3km.2022HWT @@ -7,6 +7,7 @@ EXPT_SUBDIR="RRFS_CONUS_3km" PREDEF_GRID_NAME=RRFS_CONUS_3km . set_rrfs_config_general.sh +. set_rrfs_config_SDL_VDL_MixEn.sh DO_DACYCLE="TRUE" DO_SURFACE_CYCLE="TRUE" diff --git a/ush/config.sh.RRFS_NA_13km b/ush/config.sh.RRFS_NA_13km index c5437dfcb..ec2056122 100644 --- a/ush/config.sh.RRFS_NA_13km +++ b/ush/config.sh.RRFS_NA_13km @@ -6,6 +6,7 @@ EXPT_SUBDIR="RRFS_NA_13km_dev1" PREDEF_GRID_NAME=GSD_RAP13km . set_rrfs_config_general.sh +. set_rrfs_config_SDL_VDL_MixEn.sh ADDNL_OUTPUT_GRIDS=( "130" "242" ) diff --git a/ush/config.sh.RRFS_NA_3km b/ush/config.sh.RRFS_NA_3km index 5a1f495a9..f5a80a79c 100644 --- a/ush/config.sh.RRFS_NA_3km +++ b/ush/config.sh.RRFS_NA_3km @@ -7,6 +7,7 @@ EXPT_SUBDIR="RRFS_NA_3km" PREDEF_GRID_NAME="RRFS_NA_3km" . set_rrfs_config_general.sh +. set_rrfs_config_SDL_VDL_MixEn.sh DO_DACYCLE="TRUE" DO_SURFACE_CYCLE="TRUE" diff --git a/ush/config.sh.rrfs_a_c13 b/ush/config.sh.rrfs_a_c13 index 1e7ce8a33..bdf98cd2e 100644 --- a/ush/config.sh.rrfs_a_c13 +++ b/ush/config.sh.rrfs_a_c13 @@ -9,6 +9,7 @@ EXPT_SUBDIR="rrfs_conus_13km" PREDEF_GRID_NAME=RRFS_CONUS_13km . set_rrfs_config_general.sh +. set_rrfs_config_SDL_VDL_MixEn.sh DO_DACYCLE="TRUE" DO_SURFACE_CYCLE="TRUE" diff --git a/ush/config.sh.rrfs_a_c3 b/ush/config.sh.rrfs_a_c3 index 7aa0e7052..e7393d596 100644 --- a/ush/config.sh.rrfs_a_c3 +++ b/ush/config.sh.rrfs_a_c3 @@ -8,6 +8,7 @@ EXPT_SUBDIR="rrfs_conus" PREDEF_GRID_NAME=RRFS_CONUS_3km . set_rrfs_config_general.sh +. set_rrfs_config_SDL_VDL_MixEn.sh #DO_ENSEMBLE="TRUE" #DO_ENSFCST="TRUE" diff --git a/ush/config_defaults.sh b/ush/config_defaults.sh index 8b8f629ee..0ca9125d3 100644 --- a/ush/config_defaults.sh +++ b/ush/config_defaults.sh @@ -682,16 +682,30 @@ netcdf_diag=.false. binary_diag=.true. # &HYBRID_ENSEMBLE +l_both_fv3sar_gfs_ens=.false. readin_localization=.true. #if true, it overwrites the "beta1_inv/ens_h/ens_v" setting beta1_inv=0.15 #beata_inv is 1-ensemble_wgt -ens_h=110 -ens_v=3 +ens_h=110 #horizontal localization scale of "Gaussian function=exp(-0.5)" for EnVar (km) +ens_v=3 #vertical localization scale of "Gaussian function=exp(-0.5)" for EnVar (positive:grids, negative:lnp) +ens_h_radardbz=4.10790 #horizontal localization scale of "Gaussian function=exp(-0.5)" for radardbz EnVar (km) +ens_v_radardbz=-0.30125 #vertical localization scale of "Gaussian function=exp(-0.5)" for radardbz EnVar (positive:grids, negative:lnp) +nsclgrp=1 +ngvarloc=1 +i_ensloccov4tim=0 +i_ensloccov4var=0 +i_ensloccov4scl=0 regional_ensemble_option=1 #1 for GDAS ; 5 for FV3LAM ensemble grid_ratio_fv3=2.0 #fv3 resolution 3km, so analysis=3*2=6km grid_ratio_ens=3 #if analysis is 3km, then ensemble=3*3=9km. GDAS ensemble is 20km i_en_perts_io=1 #0 or 1: original file 3: pre-processed ensembles q_hyb_ens=.false. ens_fast_read=.false. +CORRLENGTH=400 #horizontal localization scale of "Gaspari-Cohn function=0" for EnKF (km) +LNSIGCUTOFF=0.5 #vertical localization scale of "Gaspari-Cohn function=0" for EnKF (lnp) +CORRLENGTH_radardbz=18 #horizontal localization scale of "Gaspari-Cohn function=0" for radardbz EnKF (km) +LNSIGCUTOFF_radardbz=0.5 #vertical localization scale of "Gaspari-Cohn function=0" for radardbz EnKF (lnp) +assign_vdl_nml=.false. +vdl_scale=0 # &RAPIDREFRESH_CLDSURF l_PBL_pseudo_SurfobsT=.false. @@ -712,6 +726,7 @@ HYBENSMEM_NMIN=80 ANAVINFO_FN="anavinfo.rrfs" ANAVINFO_SD_FN="anavinfo.rrfs_sd" ANAVINFO_DBZ_FN="anavinfo.rrfs_dbz" +ANAVINFO_CONV_DBZ_FN="anavinfo.rrfs_conv_dbz" ENKF_ANAVINFO_FN="anavinfo.rrfs" ENKF_ANAVINFO_DBZ_FN="anavinfo.enkf.rrfs_dbz" CONVINFO_FN="convinfo.rrfs" @@ -1989,6 +2004,9 @@ TILE_SETS="full" # DO_ENVAR_RADAR_REF: # Decide whether or not to run Radar Reflectivity hybrid analysis # +# DO_ENVAR_RADAR_REF_ONCE: +# Decide whether or not to run Radar Reflectivity hybrid analysis simultaneously with other observations +# # DO_RECENTER: # Decide whether or not to run recenter for the ensemble members # @@ -2036,6 +2054,7 @@ DO_GSIOBSERVER="FALSE" DO_ENKFUPDATE="FALSE" DO_ENKF_RADAR_REF="FALSE" DO_ENVAR_RADAR_REF="FALSE" +DO_ENVAR_RADAR_REF_ONCE="FALSE" DO_RECENTER="FALSE" DO_ENS_GRAPHICS="FALSE" DO_ENSPOST="FALSE" diff --git a/ush/generate_FV3LAM_wflow.sh b/ush/generate_FV3LAM_wflow.sh index 68038b27f..d9f2db11d 100755 --- a/ush/generate_FV3LAM_wflow.sh +++ b/ush/generate_FV3LAM_wflow.sh @@ -487,6 +487,7 @@ settings="\ 'do_enkfupdate': ${DO_ENKFUPDATE} 'do_enkf_radar_ref': ${DO_ENKF_RADAR_REF} 'do_envar_radar_ref': ${DO_ENVAR_RADAR_REF} + 'do_envar_radar_ref_once': ${DO_ENVAR_RADAR_REF_ONCE} 'do_recenter': ${DO_RECENTER} 'do_bufrsnd': ${DO_BUFRSND} 'do_ens_graphics': ${DO_ENS_GRAPHICS} diff --git a/ush/get_extrn_mdl_file_dir_info.sh b/ush/get_extrn_mdl_file_dir_info.sh index 37ce16038..705d59228 100755 --- a/ush/get_extrn_mdl_file_dir_info.sh +++ b/ush/get_extrn_mdl_file_dir_info.sh @@ -414,6 +414,9 @@ fi elif [ "${MACHINE}" = "JET" ] ; then fns_on_disk=( "${yy}${ddd}${hh}${mn}.gdas.t${hh}z.atmf0${fcst_hh}.${GDAS_MEM_NAME}.nc" "${yy}${ddd}${hh}${mn}.gdas.t${hh}z.sfcf0${fcst_hh}.${GDAS_MEM_NAME}.nc") # use netcdf fns_in_arcv=( "gdas.t${hh}z.atmf0${fcst_hh}.nc" "gdas.t${hh}z.sfcf0${fcst_hh}.nc") # use netcdf + elif [ "${MACHINE}" = "ORION" ] ; then + fns_on_disk=( "${yy}${ddd}${hh}${mn}.gdas.t${hh}z.atmf0${fcst_hh}.${GDAS_MEM_NAME}.nc" "${yy}${ddd}${hh}${mn}.gdas.t${hh}z.sfcf0${fcst_hh}.${GDAS_MEM_NAME}.nc") # use netcdf + fns_in_arcv=( "gdas.t${hh}z.atmf0${fcst_hh}.nc" "gdas.t${hh}z.sfcf0${fcst_hh}.nc") # use netcdf fi ;; @@ -535,6 +538,9 @@ and analysis or forecast (anl_or_fcst): elif [ "${MACHINE}" = "JET" ]; then fns_on_disk=( "${yy}${ddd}${hh}${mn}.gdas.t${hh}z.atmf0${fcst_hh}.${GDAS_MEM_NAME}.nc" "${yy}${ddd}${hh}${mn}.gdas.t${hh}z.sfcf0${fcst_hh}.${GDAS_MEM_NAME}.nc") # use netcdf fns_in_arcv=( "gdas.t${hh}z.atmf${fcst_hhh}.nc" "gdas.t${hh}z.sfcf${fcst_hhh}.nc" ) # for now. + elif [ "${MACHINE}" = "ORION" ]; then + fns_on_disk=( "${yy}${ddd}${hh}${mn}.gdas.t${hh}z.atmf0${fcst_hh}.${GDAS_MEM_NAME}.nc" "${yy}${ddd}${hh}${mn}.gdas.t${hh}z.sfcf0${fcst_hh}.${GDAS_MEM_NAME}.nc") # use netcdf + fns_in_arcv=( "gdas.t${hh}z.atmf${fcst_hhh}.nc" "gdas.t${hh}z.sfcf${fcst_hhh}.nc" ) # for now. fi ;; @@ -707,6 +713,9 @@ has not been specified for this external model and machine combination: "JET") sysdir="$sysbasedir" ;; + "ORION") + sysdir="$sysbasedir" + ;; *) print_err_msg_exit "\ The system directory in which to look for external model output files diff --git a/ush/set_rrfs_config.sh b/ush/set_rrfs_config.sh index 2f23f0d5e..72aa6e673 100644 --- a/ush/set_rrfs_config.sh +++ b/ush/set_rrfs_config.sh @@ -108,8 +108,21 @@ if [[ $DO_RETRO == "TRUE" ]] ; then RAPHRR_SOIL_ROOT="/scratch2/BMC/zrtrr/rli/data/rap_hrrr_soil" fi if [[ $MACHINE == "orion" ]] ; then - EXTRN_MDL_SOURCE_BASEDIR_ICS=/work/noaa/wrfruc/mhu/rrfs/data/gfs/0p25deg/grib2 - EXTRN_MDL_SOURCE_BASEDIR_LBCS=/work/noaa/wrfruc/mhu/rrfs/data/gfs/0p25deg/grib2 + if [[ ${DO_ENSEMBLE} == "TRUE" ]]; then + if [[ ${EXTRN_MDL_NAME_ICS} == "GDASENKF" ]]; then + EXTRN_MDL_SOURCE_BASEDIR_ICS="/work/noaa/wrfruc/mhu/rrfs/data/enkf/atm" + elif [[ ${EXTRN_MDL_NAME_ICS} == "FV3GFS" ]]; then + EXTRN_MDL_SOURCE_BASEDIR_ICS="/work/noaa/wrfruc/mhu/rrfs/data/gfs/0p25deg/grib2" + fi + if [[ ${EXTRN_MDL_NAME_LBCS} == "GDASENKF" ]]; then + EXTRN_MDL_SOURCE_BASEDIR_LBCS="/work/noaa/wrfruc/mhu/rrfs/data/enkf/atm" + elif [[ ${EXTRN_MDL_NAME_LBCS} == "FV3GFS" ]]; then + EXTRN_MDL_SOURCE_BASEDIR_LBCS="/work/noaa/wrfruc/mhu/rrfs/data/gfs/0p25deg/grib2" + fi + else + EXTRN_MDL_SOURCE_BASEDIR_ICS=/work/noaa/wrfruc/mhu/rrfs/data/gfs/0p25deg/grib2 + EXTRN_MDL_SOURCE_BASEDIR_LBCS=/work/noaa/wrfruc/mhu/rrfs/data/gfs/0p25deg/grib2 + fi OBSPATH=/work/noaa/wrfruc/mhu/rrfs/data/obs_rap OBSPATH_NSSLMOSIAC=/work/noaa/wrfruc/mhu/rrfs/data/reflectivity LIGHTNING_ROOT=/work/noaa/wrfruc/mhu/rrfs/data/lightning diff --git a/ush/set_rrfs_config_SDL_VDL_MixEn.sh b/ush/set_rrfs_config_SDL_VDL_MixEn.sh new file mode 100644 index 000000000..6d8deb457 --- /dev/null +++ b/ush/set_rrfs_config_SDL_VDL_MixEn.sh @@ -0,0 +1,35 @@ + +l_both_fv3sar_gfs_ens=.false. #if true, ensemble size is increased with GDAS ensemble (MixEn) +nsclgrp=1 #number of scales for scale-dependent localization (SDL) +ngvarloc=1 #number of scales for variable-dependent localization (VDL) +assign_vdl_nml=.false. #if true, vdl_scale and vloc_varlist are used to set VDL + +if [[ ${ngvarloc} == "1" ]] && [[ ${nsclgrp} == "2" ]]; then + readin_localization=.false. + ens_h="328.632,82.1580,82.1580" + ens_v="-0.30125,-0.30125,0.0" + ens_h_radardbz="4.10790" + ens_v_radardbz="-0.30125" +elif [[ ${ngvarloc} == "2" ]] && [[ ${nsclgrp} == "1" ]]; then + DO_ENVAR_RADAR_REF_ONCE="TRUE" + readin_localization=.false. + ens_h="82.1580,4.10790" + ens_v="-0.30125,-0.30125" + if [ ${assign_vdl_nml} = ".true." ]; then + vdl_scale="2,2" + else + i_ensloccov4var=1 + fi +elif [[ ${ngvarloc} == "2" ]] && [[ ${nsclgrp} == "2" ]]; then + DO_ENVAR_RADAR_REF_ONCE="TRUE" + readin_localization=.false. + if [ ${assign_vdl_nml} = ".true." ]; then + ens_h="82.1580,16.4316,8.21580,4.10790,2.73860" + ens_v="-0.30125,-0.30125,-0.30125,-0.30125,0.0" + vdl_scale="2,2,2,2" + else + ens_h="328.632,82.1580,4.10790,4.10790,82.1580" + ens_v="-0.30125,-0.30125,-0.30125,-0.30125,0.0" + i_ensloccov4var=1 + fi +fi diff --git a/ush/set_rrfs_config_general.sh b/ush/set_rrfs_config_general.sh index a82c7162a..c6a9fd239 100644 --- a/ush/set_rrfs_config_general.sh +++ b/ush/set_rrfs_config_general.sh @@ -39,6 +39,7 @@ fi if [[ $MACHINE == "orion" ]] ; then ACCOUNT=wrfruc + PARTITION_ANALYSIS=orion QUEUE_ANALYSIS="batch" QUEUE_PRDGEN="batch" QUEUE_GRAPHICS="batch" diff --git a/ush/templates/FV3LAM_wflow.xml b/ush/templates/FV3LAM_wflow.xml index 0f0c35708..afb785efd 100644 --- a/ush/templates/FV3LAM_wflow.xml +++ b/ush/templates/FV3LAM_wflow.xml @@ -703,8 +703,6 @@ MODULES_RUN_TASK_FP script. {{ extrn_mdl_sysbasedir_ics }}/gfs.@Y@m@d/@H/atmos/gfs.t@Hz.pgrb2.0p25.f{{ "%03d" % extrn_mdl_ics_offset_hrs }} {%- endif %} {%- endif %} - {%- elif machine in ["ORION"] %} - {{ extrn_mdl_sysbasedir_ics }}/@y@j@H000{{ "%03d" % extrn_mdl_ics_offset_hrs }} {% else %} {%- if extrn_mdl_name_ics in ["GEFS"] %} {{ extrn_mdl_sysbasedir_ics }}/#subdirGE#/@y@j@H000{{ "%03d" % extrn_mdl_ics_offset_hrs }} @@ -716,6 +714,9 @@ MODULES_RUN_TASK_FP script. {%- elif machine in ["JET"] %} {{ extrn_mdl_sysbasedir_ics }}/@y@j@H00.gdas.t@Hz.atmf00{{ extrn_mdl_ics_offset_hrs }}.#memNameGDAS#.nc {{ extrn_mdl_sysbasedir_ics }}/@y@j@H00.gdas.t@Hz.sfcf00{{ extrn_mdl_ics_offset_hrs }}.#memNameGDAS#.nc + {%- elif machine in ["ORION"] %} + {{ extrn_mdl_sysbasedir_ics }}/@y@j@H00.gdas.t@Hz.atmf00{{ extrn_mdl_ics_offset_hrs }}.#memNameGDAS#.nc + {{ extrn_mdl_sysbasedir_ics }}/@y@j@H00.gdas.t@Hz.sfcf00{{ extrn_mdl_ics_offset_hrs }}.#memNameGDAS#.nc {%- endif %} {%- elif extrn_mdl_name_ics in ["HRRRDAS"] %} @@ -725,6 +726,8 @@ MODULES_RUN_TASK_FP script. {{ extrn_mdl_sysbasedir_ics }}/@y@j@H000{{ "%03d" % extrn_mdl_ics_offset_hrs }} {%- elif machine in ["HERA"] %} {{ extrn_mdl_sysbasedir_ics }}/@y@j@H000{{ "%03d" % extrn_mdl_ics_offset_hrs }} + {%- elif machine in ["ORION"] %} + {{ extrn_mdl_sysbasedir_ics }}/@y@j@H000{{ "%03d" % extrn_mdl_ics_offset_hrs }} {%- endif %} {%- endif %} {%- endif %} @@ -767,8 +770,6 @@ MODULES_RUN_TASK_FP script. {%- else %} {{ extrn_mdl_sysbasedir_lbcs }}/gfs.@Y@m@d/@H/atmos/gfs.t@Hz.pgrb2.0p25.f{{ "%03d" % h }} {%- endif %} - {%- elif machine in ["ORION"] %} - {{ extrn_mdl_sysbasedir_lbcs }}/@y@j@H000{{ "%03d" % h }} {%- else %} {%- if extrn_mdl_name_lbcs in ["GEFS"] %} {{ extrn_mdl_sysbasedir_lbcs }}/#subdirGE#/@y@j@H000{{ "%03d" % h }} @@ -779,12 +780,17 @@ MODULES_RUN_TASK_FP script. {%- elif machine in ["JET"] %} {{ extrn_mdl_sysbasedir_lbcs }}/@y@j@H00.gdas.t@Hz.atmf{{ "%03d" % h }}.#memNameGDAS#.nc {{ extrn_mdl_sysbasedir_lbcs }}/@y@j@H00.gdas.t@Hz.sfcf{{ "%03d" % h }}.#memNameGDAS#.nc + {%- elif machine in ["ORION"] %} + {{ extrn_mdl_sysbasedir_lbcs }}/@y@j@H00.gdas.t@Hz.atmf{{ "%03d" % h }}.#memNameGDAS#.nc + {{ extrn_mdl_sysbasedir_lbcs }}/@y@j@H00.gdas.t@Hz.sfcf{{ "%03d" % h }}.#memNameGDAS#.nc {%- endif %} {%- else %} {%- if machine in ["JET"] %} {{ extrn_mdl_sysbasedir_lbcs }}/@y@j@H000{{ "%03d" % h }} {%- elif machine in ["HERA"] %} {{ extrn_mdl_sysbasedir_lbcs }}/@y@j@H000{{ "%03d" % h }} + {%- elif machine in ["ORION"] %} + {{ extrn_mdl_sysbasedir_lbcs }}/@y@j@H000{{ "%03d" % h }} {%- endif %} {%- endif %} {%- endif %} @@ -1279,6 +1285,9 @@ MODULES_RUN_TASK_FP script. SLASH_ENSMEM_SUBDIR{{ slash_ensmem_subdir }} SATBIAS_DIR&NWGES_BASEDIR;/satbias nens{{ num_ens_members }} + {%- if do_envar_radar_ref and do_envar_radar_ref_once %} + OB_TYPEconv_dbz + {%- endif %} @@ -1291,6 +1300,9 @@ MODULES_RUN_TASK_FP script. {%- if do_retro %} + {%- if do_envar_radar_ref and do_envar_radar_ref_once %} + + {%- endif %} {%- for h in cycl_hrs_hyb_fv3lam_ens %} {{ h }}@H @@ -1368,7 +1380,7 @@ MODULES_RUN_TASK_FP script. -{%- if do_envar_radar_ref %} +{%- if do_envar_radar_ref and not do_envar_radar_ref_once %}