From 3a7fc4618e48e7bce959a241e483e200d144b085 Mon Sep 17 00:00:00 2001 From: "Ming.Hu" Date: Thu, 6 Jan 2022 04:43:41 +0000 Subject: [PATCH 1/3] Update the regional workflow to handle subdomain restart files. --- fix/gsi/gsiparm.anl.sh | 1 + scripts/exregional_run_analysis.sh | 27 ++++- scripts/exregional_run_fcst.sh | 31 +++-- scripts/exregional_run_post.sh | 34 +++++- scripts/exregional_run_prepstart.sh | 173 +++++++++++++++++++++------- ush/config_defaults.sh | 7 ++ ush/generate_FV3LAM_wflow.sh | 1 + 7 files changed, 222 insertions(+), 52 deletions(-) diff --git a/fix/gsi/gsiparm.anl.sh b/fix/gsi/gsiparm.anl.sh index e60be23f4..ffc37b8a0 100755 --- a/fix/gsi/gsiparm.anl.sh +++ b/fix/gsi/gsiparm.anl.sh @@ -18,6 +18,7 @@ gsi_namelist=" / &GRIDOPTS fv3_regional=.true.,grid_ratio_fv3_regional=${grid_ratio_fv3},nvege_type=20, + fv3_io_layout_y=${n_iolayouty}, / &BKGERR vs=${bkgerr_vs}, diff --git a/scripts/exregional_run_analysis.sh b/scripts/exregional_run_analysis.sh index 8233589b0..d44bf86a7 100755 --- a/scripts/exregional_run_analysis.sh +++ b/scripts/exregional_run_analysis.sh @@ -185,7 +185,7 @@ else fi fi # decide background type -if [ -r "${bkpath}/phy_data.nc" ]; then +if [ -r "${bkpath}/coupler.res" ]; then BKTYPE=0 # warm start else BKTYPE=1 # cold start @@ -318,6 +318,9 @@ fi # radar_tten converting code. #----------------------------------------------------------------------- +n_iolayouty=$(($IO_LAYOUT_Y-1)) +list_iolayout=$(seq 0 $n_iolayouty) + ln_vrfy -snf ${fixgriddir}/fv3_akbk fv3_akbk ln_vrfy -snf ${fixgriddir}/fv3_grid_spec fv3_grid_spec @@ -331,9 +334,20 @@ if [ ${BKTYPE} -eq 1 ]; then # cold start uses background from INPUT fv3lam_bg_type=1 else # cycle uses background from restart - ln_vrfy -snf ${bkpath}/fv_core.res.tile1.nc fv3_dynvars - ln_vrfy -snf ${bkpath}/fv_tracer.res.tile1.nc fv3_tracer - ln_vrfy -snf ${bkpath}/sfc_data.nc fv3_sfcdata + if [ "${IO_LAYOUT_Y}" == "1" ]; then + ln_vrfy -snf ${bkpath}/fv_core.res.tile1.nc fv3_dynvars + ln_vrfy -snf ${bkpath}/fv_tracer.res.tile1.nc fv3_tracer + ln_vrfy -snf ${bkpath}/sfc_data.nc fv3_sfcdata + else + for ii in ${list_iolayout} + do + iii=`printf %4.4i $ii` + ln_vrfy -snf ${bkpath}/fv_core.res.tile1.nc.${iii} fv3_dynvars.${iii} + ln_vrfy -snf ${bkpath}/fv_tracer.res.tile1.nc.${iii} fv3_tracer.${iii} + ln_vrfy -snf ${bkpath}/sfc_data.nc.${iii} fv3_sfcdata.${iii} + ln_vrfy -snf ${fixgriddir}/fv3_grid_spec.${iii} fv3_grid_spec.${iii} + done + fi fv3lam_bg_type=0 fi @@ -558,6 +572,11 @@ if [ ${gsi_type} == "OBSERVER" ]; then ln -s ../../ensmean/observer_gsi/obs_input.* . fi fi +if [ ${BKTYPE} -eq 1 ]; then + n_iolayouty=1 +else + n_iolayouty=$(($IO_LAYOUT_Y)) +fi . ${FIX_GSI}/gsiparm.anl.sh cat << EOF > gsiparm.anl diff --git a/scripts/exregional_run_fcst.sh b/scripts/exregional_run_fcst.sh index fb39b13cc..d8fba5694 100755 --- a/scripts/exregional_run_fcst.sh +++ b/scripts/exregional_run_fcst.sh @@ -341,7 +341,7 @@ of the current run directory (run_dir), where ..." BKTYPE=1 # cold start using INPUT -if [ -r ${run_dir}/INPUT/fv_tracer.res.tile1.nc ]; then +if [ -r ${run_dir}/INPUT/coupler.res ] ; then BKTYPE=0 # cycling using RESTART fi print_info_msg "$VERBOSE" " @@ -353,18 +353,35 @@ cd_vrfy ${run_dir}/INPUT relative_or_null="" +n_iolayouty=$(($IO_LAYOUT_Y-1)) +list_iolayout=$(seq 0 $n_iolayouty) + if [ ${BKTYPE} -eq 1 ]; then target="gfs_data.tile${TILE_RGNL}.halo${NH0}.nc" else target="fv_core.res.tile1.nc" fi symlink="gfs_data.nc" -if [ -f "${target}" ]; then - ln_vrfy -sf ${relative_or_null} $target $symlink +if [ -f "${target}.0000" ]; then + for ii in ${list_iolayout} + do + iii=`printf %4.4i $ii` + if [ -f "${target}.${iii}" ]; then + ln_vrfy -sf ${relative_or_null} $target.${iii} $symlink.${iii} + else + print_err_msg_exit "\ + Cannot create symlink because target does not exist: + target = \"$target.$iii\"" + fi + done else - print_err_msg_exit "\ - Cannot create symlink because target does not exist: - target = \"$target\"" + if [ -f "${target}" ]; then + ln_vrfy -sf ${relative_or_null} $target $symlink + else + print_err_msg_exit "\ + Cannot create symlink because target does not exist: + target = \"$target\"" + fi fi if [ ${BKTYPE} -eq 1 ]; then @@ -378,7 +395,7 @@ if [ ${BKTYPE} -eq 1 ]; then target = \"$target\"" fi else - if [ -f "sfc_data.nc" ]; then + if [ -f "sfc_data.nc.0000" ] || [ -f "sfc_data.nc" ]; then print_info_msg "$VERBOSE" " sfc_data.nc is available at INPUT directory" else diff --git a/scripts/exregional_run_post.sh b/scripts/exregional_run_post.sh index da4626357..105a31def 100755 --- a/scripts/exregional_run_post.sh +++ b/scripts/exregional_run_post.sh @@ -212,7 +212,11 @@ EOF # stage the restart files for a long time. #----------------------------------------------------------------------- # -filelist="fv_core.res.nc fv_core.res.tile1.nc fv_srf_wnd.res.tile1.nc fv_tracer.res.tile1.nc phy_data.nc sfc_data.nc coupler.res" +filelist="fv_core.res.nc coupler.res" +filelistn="fv_core.res.tile1.nc fv_srf_wnd.res.tile1.nc fv_tracer.res.tile1.nc phy_data.nc sfc_data.nc" +n_iolayouty=$(($IO_LAYOUT_Y-1)) +list_iolayout=$(seq 0 $n_iolayouty) + restart_prefix=${post_yyyy}${post_mm}${post_dd}.${post_hh}0000 if [ ! -r ${nwges_dir}/INPUT/gfs_ctrl.nc ]; then cp_vrfy $run_dir/INPUT/gfs_ctrl.nc ${nwges_dir}/INPUT/gfs_ctrl.nc @@ -221,6 +225,19 @@ if [ -r "$run_dir/RESTART/${restart_prefix}.coupler.res" ]; then for file in ${filelist}; do mv_vrfy $run_dir/RESTART/${restart_prefix}.${file} ${nwges_dir}/RESTART/${restart_prefix}.${file} done + if [ "${IO_LAYOUT_Y}" == "1" ]; then + for file in ${filelistn}; do + mv_vrfy $run_dir/RESTART/${restart_prefix}.${file} ${nwges_dir}/RESTART/${restart_prefix}.${file} + done + else + for file in ${filelistn}; do + for ii in ${list_iolayout} + do + iii=`printf %4.4i $ii` + mv_vrfy $run_dir/RESTART/${restart_prefix}.${file}.${iii} ${nwges_dir}/RESTART/${restart_prefix}.${file}.${iii} + done + done + fi echo " ${fhr} forecast from ${yyyymmdd}${hh} is ready " #> ${nwges_dir}/RESTART/restart_done_f${fhr} else @@ -239,8 +256,21 @@ else if [ -r "$run_dir/RESTART/coupler.res" ] && [ ${fhr} -eq ${FCST_LEN_HRS_thiscycle} ] ; then for file in ${filelist}; do - mv_vrfy $run_dir/RESTART/${file} ${nwges_dir}/RESTART/${restart_prefix}.${file} + mv_vrfy $run_dir/RESTART/${file} ${nwges_dir}/RESTART/${restart_prefix}.${file} done + if [ "${IO_LAYOUT_Y}" == "1" ]; then + for file in ${filelistn}; do + mv_vrfy $run_dir/RESTART/${file} ${nwges_dir}/RESTART/${restart_prefix}.${file} + done + else + for file in ${filelistn}; do + for ii in ${list_iolayout} + do + iii=`printf %4.4i $ii` + mv_vrfy $run_dir/RESTART/${file}.${iii} ${nwges_dir}/RESTART/${restart_prefix}.${file}.${iii} + done + done + fi echo " ${fhr} forecast from ${yyyymmdd}${hh} is ready " #> ${nwges_dir}/RESTART/restart_done_f${fhr} else echo "This forecast hour does not need to save restart: ${yyyymmdd}${hh}f${fhr}" diff --git a/scripts/exregional_run_prepstart.sh b/scripts/exregional_run_prepstart.sh index 0742df440..4a93dff8e 100755 --- a/scripts/exregional_run_prepstart.sh +++ b/scripts/exregional_run_prepstart.sh @@ -241,15 +241,26 @@ else done fi # + filelistn="fv_core.res.tile1.nc fv_srf_wnd.res.tile1.nc fv_tracer.res.tile1.nc phy_data.nc sfc_data.nc" checkfile=${bkpath}/${restart_prefix}coupler.res + n_iolayouty=$(($IO_LAYOUT_Y-1)) + list_iolayout=$(seq 0 $n_iolayouty) if [ -r "${checkfile}" ] ; then - cp_vrfy ${bkpath}/${restart_prefix}fv_core.res.tile1.nc fv_core.res.tile1.nc - cp_vrfy ${bkpath}/${restart_prefix}fv_tracer.res.tile1.nc fv_tracer.res.tile1.nc - cp_vrfy ${bkpath}/${restart_prefix}sfc_data.nc sfc_data.nc cp_vrfy ${bkpath}/${restart_prefix}coupler.res coupler.res cp_vrfy ${bkpath}/${restart_prefix}fv_core.res.nc fv_core.res.nc - cp_vrfy ${bkpath}/${restart_prefix}fv_srf_wnd.res.tile1.nc fv_srf_wnd.res.tile1.nc - cp_vrfy ${bkpath}/${restart_prefix}phy_data.nc phy_data.nc + if [ "${IO_LAYOUT_Y}" == "1" ]; then + for file in ${filelistn}; do + cp_vrfy ${bkpath}/${restart_prefix}${file} ${file} + done + else + for file in ${filelistn}; do + for ii in $list_iolayout + do + iii=`printf %4.4i $ii` + cp_vrfy ${bkpath}/${restart_prefix}${file}.${iii} ${file}.${iii} + done + done + fi cp_vrfy ${fg_root}/${YYYYMMDDHHmInterv}${SLASH_ENSMEM_SUBDIR}/${fg_restart_dirname}/INPUT/gfs_ctrl.nc gfs_ctrl.nc if [ ${SAVE_CYCLE_LOG} == "TRUE" ] ; then echo "${YYYYMMDDHH}(${cycle_type}): warm start at ${current_time} from ${checkfile} " >> ${EXPTDIR}/log.cycles @@ -257,12 +268,20 @@ else # # remove checksum from restart files. Checksum will cause trouble if model initializes from analysis # - ncatted -a checksum,,d,, fv_core.res.tile1.nc - ncatted -a checksum,,d,, fv_tracer.res.tile1.nc - ncatted -a checksum,,d,, sfc_data.nc + if [ "${IO_LAYOUT_Y}" == "1" ]; then + for file in ${filelistn}; do + ncatted -a checksum,,d,, ${file} + done + else + for file in ${filelistn}; do + for ii in $list_iolayout + do + iii=`printf %4.4i $ii` + ncatted -a checksum,,d,, ${file}.${iii} + done + done + fi ncatted -a checksum,,d,, fv_core.res.nc - ncatted -a checksum,,d,, fv_srf_wnd.res.tile1.nc - ncatted -a checksum,,d,, phy_data.nc else print_err_msg_exit "Error: cannot find background: ${checkfile}" fi @@ -285,8 +304,7 @@ if [ ${HH} -eq ${SST_update_hour} ] && [ ${cycle_type} == "prod" ] ; then fi if [ -r "latest.SST" ]; then cp_vrfy ${FIXgsm}/RTG_SST_landmask.dat RTG_SST_landmask.dat - ln_vrfy ./latest.SST SSTRTG - cp_vrfy ${FIX_GSI}/${PREDEF_GRID_NAME}/fv3_grid_spec fv3_grid_spec + ln_vrfy -sf ./latest.SST SSTRTG cp_vrfy ${FIX_GSI}/${PREDEF_GRID_NAME}/fv3_akbk fv3_akbk cat << EOF > sst.namelist @@ -298,7 +316,21 @@ cat << EOF > sst.namelist ihr=${HH} / EOF - ${EXECDIR}/process_updatesst > stdout_sstupdate 2>&1 + if [ "${IO_LAYOUT_Y}" == "1" ]; then + ln_vrfy -sf ${FIX_GSI}/${PREDEF_GRID_NAME}/fv3_grid_spec fv3_grid_spec + ${EXECDIR}/process_updatesst > stdout_sstupdate 2>&1 + else + for ii in ${list_iolayout} + do + iii=`printf %4.4i $ii` + ln_vrfy -sf ${FIX_GSI}/${PREDEF_GRID_NAME}/fv3_grid_spec.${iii} fv3_grid_spec + ln_vrfy -sf sfc_data.nc.${iii} sfc_data.nc + ${EXECDIR}/process_updatesst > stdout_sstupdate.${iii} 2>&1 + ls -l > list_sstupdate.${iii} + done + rm -f sfc_data.nc + fi + sst_reference_time=$(wgrib2 -t latest.SST) if [ ${SAVE_CYCLE_LOG} == "TRUE" ] ; then echo "${YYYYMMDDHH}(${cycle_type}): update SST using ${sst_reference_time}" >> ${EXPTDIR}/log.cycles @@ -332,7 +364,11 @@ if [ ${SFC_CYC} -eq 1 ] || [ ${SFC_CYC} -eq 2 ] ; then # cycle surface fields n=${DA_CYCLE_INTERV} while [[ $n -le 6 ]] ; do - checkfile=${bkpath}/${restart_prefix}sfc_data.nc + if [ "${IO_LAYOUT_Y}" == "1" ]; then + checkfile=${bkpath}/${restart_prefix}sfc_data.nc + else + checkfile=${bkpath}/${restart_prefix}sfc_data.nc.0000 + fi if [ -r "${checkfile}" ] && [ "${bkpath_find}" == "missing" ]; then bkpath_find=${bkpath} restart_prefix_find=${restart_prefix} @@ -354,19 +390,50 @@ if [ ${SFC_CYC} -eq 1 ] || [ ${SFC_CYC} -eq 2 ] ; then # cycle surface fields if [ "${bkpath_find}" == "missing" ]; then print_info_msg "Warning: cannot find surface from previous cycle" else - checkfile=${bkpath_find}/${restart_prefix_find}sfc_data.nc + if [ "${IO_LAYOUT_Y}" == "1" ]; then + checkfile=${bkpath_find}/${restart_prefix_find}sfc_data.nc + else + checkfile=${bkpath_find}/${restart_prefix_find}sfc_data.nc.0000 + fi if [ -r "${checkfile}" ]; then - cp_vrfy ${checkfile} ${restart_prefix_find}sfc_data.nc if [ ${SFC_CYC} -eq 1 ]; then # cycle surface at cold start cycle - mv sfc_data.tile7.halo0.nc cold.sfc_data.tile7.halo0.nc - ncks -v geolon,geolat cold.sfc_data.tile7.halo0.nc geolonlat.nc - ln_vrfy -sf ${restart_prefix_find}sfc_data.nc sfc_data.tile7.halo0.nc - ncks --append geolonlat.nc sfc_data.tile7.halo0.nc - ncrename -v tslb,stc -v smois,smc -v sh2o,slc sfc_data.tile7.halo0.nc + if [ "${IO_LAYOUT_Y}" == "1" ]; then + cp_vrfy ${checkfile} ${restart_prefix_find}sfc_data.nc + mv sfc_data.tile7.halo0.nc cold.sfc_data.tile7.halo0.nc + ncks -v geolon,geolat cold.sfc_data.tile7.halo0.nc geolonlat.nc + ln_vrfy -sf ${restart_prefix_find}sfc_data.nc sfc_data.tile7.halo0.nc + ncks --append geolonlat.nc sfc_data.tile7.halo0.nc + ncrename -v tslb,stc -v smois,smc -v sh2o,slc sfc_data.tile7.halo0.nc + else + print_info_msg "Warning: cannot do surface cycle in cold start with sudomain restart files" + fi else - mv sfc_data.nc gfsice.sfc_data.nc - mv ${restart_prefix_find}sfc_data.nc sfc_data.nc - ${EXECDIR}/cycle_ice.exe > stdout_cycleICE 2>&1 + if [ "${IO_LAYOUT_Y}" == "1" ]; then + cp_vrfy ${checkfile} ${restart_prefix_find}sfc_data.nc + mv sfc_data.nc gfsice.sfc_data.nc + mv ${restart_prefix_find}sfc_data.nc sfc_data.nc + ncatted -a checksum,,d,, sfc_data.nc + ${EXECDIR}/cycle_ice.exe > stdout_cycleICE 2>&1 + else + checkfile=${bkpath_find}/${restart_prefix_find}sfc_data.nc + for ii in ${list_iolayout} + do + iii=`printf %4.4i $ii` + cp_vrfy ${checkfile}.${iii} ${restart_prefix_find}sfc_data.nc.${iii} + mv sfc_data.nc.${iii} gfsice.sfc_data.nc.${iii} + mv ${restart_prefix_find}sfc_data.nc.${iii} sfc_data.nc.${iii} + ncatted -a checksum,,d,, sfc_data.nc.${iii} + done + ls -l > list_cycle_sfc + for ii in ${list_iolayout} + do + iii=`printf %4.4i $ii` + ln_vrfy -sf sfc_data.nc.${iii} sfc_data.nc + ln_vrfy -sf gfsice.sfc_data.nc.${iii} gfsice.sfc_data.nc + ${EXECDIR}/cycle_ice.exe > stdout_cycleICE.${iii} 2>&1 + done + rm -f sfc_data.nc gfsice.sfc_data.nc + fi fi echo "cycle surface with ${checkfile}" > cycle_surface.done if [ ${SAVE_CYCLE_LOG} == "TRUE" ] ; then @@ -396,10 +463,24 @@ if [ ${HH} -eq ${GVF_update_hour} ] && [ ${cycle_type} == "spinup" ]; then if [ -r "${latestGVF}" ]; then cp_vrfy ${latestGVF} ./GVF-WKL-GLB.grib2 - cp_vrfy ${FIX_GSI}/${PREDEF_GRID_NAME}/fv3_grid_spec fv3_grid_spec ln_vrfy -sf ${FIX_GSI}/gvf_VIIRS_4KM.MAX.1gd4r.new gvf_VIIRS_4KM.MAX.1gd4r.new ln_vrfy -sf ${FIX_GSI}/gvf_VIIRS_4KM.MIN.1gd4r.new gvf_VIIRS_4KM.MIN.1gd4r.new - ${EXECDIR}/update_GVF.exe > stdout_updateGVF 2>&1 + + if [ "${IO_LAYOUT_Y}" == "1" ]; then + ln_vrfy -sf ${FIX_GSI}/${PREDEF_GRID_NAME}/fv3_grid_spec fv3_grid_spec + ${EXECDIR}/update_GVF.exe > stdout_updateGVF 2>&1 + else + for ii in ${list_iolayout} + do + iii=`printf %4.4i $ii` + ln_vrfy -sf ${FIX_GSI}/${PREDEF_GRID_NAME}/fv3_grid_spec.${iii} fv3_grid_spec + ln_vrfy -sf sfc_data.nc.${iii} sfc_data.nc + ${EXECDIR}/update_GVF.exe > stdout_updateGVF.${iii} 2>&1 + ls -l > list_updateGVF.${iii} + done + rm -f sfc_data.nc + fi + if [ ${SAVE_CYCLE_LOG} == "TRUE" ] ; then echo "${YYYYMMDDHH}(${cycle_type}): update GVF with ${latestGVF} " >> ${EXPTDIR}/log.cycles fi @@ -498,7 +579,6 @@ if [ ${YYYYMMDDHH} -eq 9999999999 ] ; then #if [ ${HH} -eq 06 ] || [ ${HH} -eq 18 ]; then if [ ${cycle_type} == "spinup" ]; then raphrrr_com=/mnt/lfs4/BMC/rtwbl/mhu/wcoss/nco/com/ - ln_vrfy -sf ${FIX_GSI}/${PREDEF_GRID_NAME}/fv3_grid_spec fv3_grid_spec ln -s ${raphrrr_com}/rap/prod/rap.${YYYYMMDD}/rap.t${HH}z.wrf_inout_smoke sfc_rap ln -s ${raphrrr_com}/hrrr/prod/hrrr.${YYYYMMDD}/conus/hrrr.t${HH}z.wrf_inout sfc_hrrr ln -s ${raphrrr_com}/hrrr/prod/hrrr.${YYYYMMDD}/alaska/hrrrak.t${HH}z.wrf_inout sfc_hrrrak @@ -514,20 +594,35 @@ EOF exect="use_raphrrr_sfc.exe" if [ -f ${EXECDIR}/$exect ]; then - print_info_msg "$VERBOSE" " - Copying the surface surgery executable to the run directory..." - cp_vrfy ${EXECDIR}/${exect} ${exect} + print_info_msg "$VERBOSE" " + Copying the surface surgery executable to the run directory..." + cp_vrfy ${EXECDIR}/${exect} ${exect} + + if [ "${IO_LAYOUT_Y}" == "1" ]; then + ln_vrfy -sf ${FIX_GSI}/${PREDEF_GRID_NAME}/fv3_grid_spec fv3_grid_spec + ./${exect} > sfc_sugery_stdout 2>&1 || print_info_msg "\ + Call to executable to run surface surgery returned with nonzero exit code." + else + for ii in ${list_iolayout} + do + iii=`printf %4.4i $ii` + ln_vrfy -sf ${FIX_GSI}/${PREDEF_GRID_NAME}/fv3_grid_spec.${iii} fv3_grid_spec + ln_vrfy -sf sfc_data.nc.${iii} sfc_data.nc + ./${exect} > sfc_sugery_stdout.${iii} 2>&1 || print_info_msg "\ + Call to executable to run surface surgery returned with nonzero exit code." + ls -l > list_sfc_sugery.${iii} + done + rm -f sfc_data.nc + fi - ./${exect} > stdout 2>&1 || print_info_msg "\ - Call to executable to run surface surgery returned with nonzero exit code." - if [ ${SAVE_CYCLE_LOG} == "TRUE" ] ; then - echo "${YYYYMMDDHH}(${cycle_type}): run surface surgery" >> ${EXPTDIR}/log.cycles - fi + if [ ${SAVE_CYCLE_LOG} == "TRUE" ] ; then + echo "${YYYYMMDDHH}(${cycle_type}): run surface surgery" >> ${EXPTDIR}/log.cycles + fi else - print_info_msg "\ - The executable specified in exect does not exist: - exect = \"${EXECDIR}/$exect\" - Build executable and rerun." + print_info_msg "\ + The executable specified in exect does not exist: + exect = \"${EXECDIR}/$exect\" + Build executable and rerun." fi fi fi diff --git a/ush/config_defaults.sh b/ush/config_defaults.sh index 197774221..36f71c514 100644 --- a/ush/config_defaults.sh +++ b/ush/config_defaults.sh @@ -1054,6 +1054,11 @@ ESGgrid_WIDE_HALO_WIDTH="" # BLOCKSIZE: # The amount of data that is passed into the cache at a time. # +# IO_LAYOUT_X,IO_LAYOUT_Y: +# When wrtie out restrat files, how many subdomain files will be write in +# x and y directory. Right now, please always set IO_LAYOUT_X=1. +# LAYOUT_Y/IO_LAYOUT_Y needs to be a integer number. +# # FH_DFI_RADAR: # the forecast hour to use radar tten, this is used to set the fh_dfi_radar # parameter in input.nml, e.g. FH_DFI_RADAR="0.0,0.25,0.5,0.75,1.0" @@ -1084,6 +1089,8 @@ ESGgrid_WIDE_HALO_WIDTH="" DT_ATMOS="" LAYOUT_X="" LAYOUT_Y="" +IO_LAYOUT_X="1" +IO_LAYOUT_Y="1" BLOCKSIZE="" FH_DFI_RADAR="-20000000000" # diff --git a/ush/generate_FV3LAM_wflow.sh b/ush/generate_FV3LAM_wflow.sh index 52e9b0773..e33d6334b 100755 --- a/ush/generate_FV3LAM_wflow.sh +++ b/ush/generate_FV3LAM_wflow.sh @@ -741,6 +741,7 @@ settings="\ 'stretch_fac': ${STRETCH_FAC}, 'npx': $npx, 'npy': $npy, + 'io_layout': [${IO_LAYOUT_X}, ${IO_LAYOUT_Y}], 'layout': [${LAYOUT_X}, ${LAYOUT_Y}], 'bc_update_interval': ${LBC_SPEC_INTVL_HRS}, } From 784f668ab6dc10693f8b325c818f737378a72e6b Mon Sep 17 00:00:00 2001 From: "Ming.Hu" Date: Thu, 6 Jan 2022 04:48:24 +0000 Subject: [PATCH 2/3] Update configure file for NA 3km to use io_layout_y=10 --- ush/config.sh.RRFS_NA_3km | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/ush/config.sh.RRFS_NA_3km b/ush/config.sh.RRFS_NA_3km index 5f2219aa3..9113e93e5 100644 --- a/ush/config.sh.RRFS_NA_3km +++ b/ush/config.sh.RRFS_NA_3km @@ -45,13 +45,13 @@ LBC_SPEC_INTVL_HRS="1" EXTRN_MDL_LBCS_OFFSET_HRS="6" EXTRN_MDL_LBCS_SEARCH_OFFSET_HRS="0" -DATE_FIRST_CYCL="20211021" -DATE_LAST_CYCL="20211023" +DATE_FIRST_CYCL="20220104" +DATE_LAST_CYCL="20220223" CYCL_HRS=( "00" ) CYCL_HRS_SPINSTART=("03" "15") CYCL_HRS_PRODSTART=("09" "21") -CYCLEMONTH="10" -CYCLEDAY="21-23" +CYCLEMONTH="1" +CYCLEDAY="04-31" # PREEXISTING_DIR_METHOD="upgrade" INITIAL_CYCLEDEF="${DATE_FIRST_CYCL}1500 ${DATE_LAST_CYCL}2300 12:00:00" @@ -64,15 +64,15 @@ if [[ $DO_SPINUP == "TRUE" ]] ; then SPINUP_CYCLEDEF="00 03-08,15-20 ${CYCLEDAY} ${CYCLEMONTH} 2021 *" fi -FCST_LEN_HRS="2" +FCST_LEN_HRS="3" FCST_LEN_HRS_SPINUP="1" -POSTPROC_LEN_HRS="2" +POSTPROC_LEN_HRS="3" POSTPROC_LONG_LEN_HRS="24" #FCST_LEN_HRS_CYCLES=(30 03 03 03 03 03 03 03 03 03 03 03 30 03 03 03 03 03 03 03 03 03 03 03) -for i in {0..23}; do FCST_LEN_HRS_CYCLES[$i]=2; done +for i in {0..23}; do FCST_LEN_HRS_CYCLES[$i]=3; done for i in {3..23..6}; do FCST_LEN_HRS_CYCLES[$i]=24; done DA_CYCLE_INTERV="1" -RESTART_INTERVAL="1 2" +RESTART_INTERVAL="1 2 3" SST_update_hour=01 GVF_update_hour=04 @@ -95,6 +95,7 @@ MEMO_RUN_NONVARCLDANL=80G WTIME_RUN_FCST="04:00:00" LAYOUT_X=35 LAYOUT_Y=20 +IO_LAYOUT_Y=10 NATIVE_RUN_FCST="--cpus-per-task 4 --exclusive" NATIVE_RUN_ANAL="--cpus-per-task 4 --exclusive" From 9d5654853c653697dc3f024320373db182728c5b Mon Sep 17 00:00:00 2001 From: "Ming.Hu" Date: Thu, 6 Jan 2022 17:41:38 +0000 Subject: [PATCH 3/3] Add gsi fix files (subdomain grid spec files) for NA 3km when io_layout(2)=10 Add gsi fix files for CONUS 25km grid --- fix/gsi/RRFS_CONUS_25km/fv3_akbk | 1 + fix/gsi/RRFS_CONUS_25km/fv3_coupler.res | 1 + fix/gsi/RRFS_CONUS_25km/fv3_grid_spec | 1 + fix/gsi/RRFS_CONUS_25km/geo_em.d01.nc | 1 + fix/gsi/RRFS_CONUS_25km/phis.nc | 1 + fix/gsi/RRFS_NA_3km/fv3_grid_spec.0000 | 1 + fix/gsi/RRFS_NA_3km/fv3_grid_spec.0001 | 1 + fix/gsi/RRFS_NA_3km/fv3_grid_spec.0002 | 1 + fix/gsi/RRFS_NA_3km/fv3_grid_spec.0003 | 1 + fix/gsi/RRFS_NA_3km/fv3_grid_spec.0004 | 1 + fix/gsi/RRFS_NA_3km/fv3_grid_spec.0005 | 1 + fix/gsi/RRFS_NA_3km/fv3_grid_spec.0006 | 1 + fix/gsi/RRFS_NA_3km/fv3_grid_spec.0007 | 1 + fix/gsi/RRFS_NA_3km/fv3_grid_spec.0008 | 1 + fix/gsi/RRFS_NA_3km/fv3_grid_spec.0009 | 1 + 15 files changed, 15 insertions(+) create mode 120000 fix/gsi/RRFS_CONUS_25km/fv3_akbk create mode 120000 fix/gsi/RRFS_CONUS_25km/fv3_coupler.res create mode 120000 fix/gsi/RRFS_CONUS_25km/fv3_grid_spec create mode 120000 fix/gsi/RRFS_CONUS_25km/geo_em.d01.nc create mode 120000 fix/gsi/RRFS_CONUS_25km/phis.nc create mode 120000 fix/gsi/RRFS_NA_3km/fv3_grid_spec.0000 create mode 120000 fix/gsi/RRFS_NA_3km/fv3_grid_spec.0001 create mode 120000 fix/gsi/RRFS_NA_3km/fv3_grid_spec.0002 create mode 120000 fix/gsi/RRFS_NA_3km/fv3_grid_spec.0003 create mode 120000 fix/gsi/RRFS_NA_3km/fv3_grid_spec.0004 create mode 120000 fix/gsi/RRFS_NA_3km/fv3_grid_spec.0005 create mode 120000 fix/gsi/RRFS_NA_3km/fv3_grid_spec.0006 create mode 120000 fix/gsi/RRFS_NA_3km/fv3_grid_spec.0007 create mode 120000 fix/gsi/RRFS_NA_3km/fv3_grid_spec.0008 create mode 120000 fix/gsi/RRFS_NA_3km/fv3_grid_spec.0009 diff --git a/fix/gsi/RRFS_CONUS_25km/fv3_akbk b/fix/gsi/RRFS_CONUS_25km/fv3_akbk new file mode 120000 index 000000000..8debd3926 --- /dev/null +++ b/fix/gsi/RRFS_CONUS_25km/fv3_akbk @@ -0,0 +1 @@ +../../.agent/gsi/RRFS_CONUS_25km/fv3_akbk \ No newline at end of file diff --git a/fix/gsi/RRFS_CONUS_25km/fv3_coupler.res b/fix/gsi/RRFS_CONUS_25km/fv3_coupler.res new file mode 120000 index 000000000..aa46539db --- /dev/null +++ b/fix/gsi/RRFS_CONUS_25km/fv3_coupler.res @@ -0,0 +1 @@ +../../.agent/gsi/RRFS_CONUS_25km/fv3_coupler.res \ No newline at end of file diff --git a/fix/gsi/RRFS_CONUS_25km/fv3_grid_spec b/fix/gsi/RRFS_CONUS_25km/fv3_grid_spec new file mode 120000 index 000000000..ddae23b45 --- /dev/null +++ b/fix/gsi/RRFS_CONUS_25km/fv3_grid_spec @@ -0,0 +1 @@ +../../.agent/gsi/RRFS_CONUS_25km/fv3_grid_spec \ No newline at end of file diff --git a/fix/gsi/RRFS_CONUS_25km/geo_em.d01.nc b/fix/gsi/RRFS_CONUS_25km/geo_em.d01.nc new file mode 120000 index 000000000..95fe6989c --- /dev/null +++ b/fix/gsi/RRFS_CONUS_25km/geo_em.d01.nc @@ -0,0 +1 @@ +../../.agent/gsi/RRFS_CONUS_25km/geo_em.d01.nc \ No newline at end of file diff --git a/fix/gsi/RRFS_CONUS_25km/phis.nc b/fix/gsi/RRFS_CONUS_25km/phis.nc new file mode 120000 index 000000000..654d7a7ca --- /dev/null +++ b/fix/gsi/RRFS_CONUS_25km/phis.nc @@ -0,0 +1 @@ +../../.agent/gsi/RRFS_CONUS_25km/phis.nc \ No newline at end of file diff --git a/fix/gsi/RRFS_NA_3km/fv3_grid_spec.0000 b/fix/gsi/RRFS_NA_3km/fv3_grid_spec.0000 new file mode 120000 index 000000000..c25c5a0e6 --- /dev/null +++ b/fix/gsi/RRFS_NA_3km/fv3_grid_spec.0000 @@ -0,0 +1 @@ +../../.agent/gsi/RRFS_NA_3km/grid_spec.nc.0000 \ No newline at end of file diff --git a/fix/gsi/RRFS_NA_3km/fv3_grid_spec.0001 b/fix/gsi/RRFS_NA_3km/fv3_grid_spec.0001 new file mode 120000 index 000000000..815bfd84b --- /dev/null +++ b/fix/gsi/RRFS_NA_3km/fv3_grid_spec.0001 @@ -0,0 +1 @@ +../../.agent/gsi/RRFS_NA_3km/grid_spec.nc.0001 \ No newline at end of file diff --git a/fix/gsi/RRFS_NA_3km/fv3_grid_spec.0002 b/fix/gsi/RRFS_NA_3km/fv3_grid_spec.0002 new file mode 120000 index 000000000..771edd731 --- /dev/null +++ b/fix/gsi/RRFS_NA_3km/fv3_grid_spec.0002 @@ -0,0 +1 @@ +../../.agent/gsi/RRFS_NA_3km/grid_spec.nc.0002 \ No newline at end of file diff --git a/fix/gsi/RRFS_NA_3km/fv3_grid_spec.0003 b/fix/gsi/RRFS_NA_3km/fv3_grid_spec.0003 new file mode 120000 index 000000000..37cfeeb34 --- /dev/null +++ b/fix/gsi/RRFS_NA_3km/fv3_grid_spec.0003 @@ -0,0 +1 @@ +../../.agent/gsi/RRFS_NA_3km/grid_spec.nc.0003 \ No newline at end of file diff --git a/fix/gsi/RRFS_NA_3km/fv3_grid_spec.0004 b/fix/gsi/RRFS_NA_3km/fv3_grid_spec.0004 new file mode 120000 index 000000000..cdf966f83 --- /dev/null +++ b/fix/gsi/RRFS_NA_3km/fv3_grid_spec.0004 @@ -0,0 +1 @@ +../../.agent/gsi/RRFS_NA_3km/grid_spec.nc.0004 \ No newline at end of file diff --git a/fix/gsi/RRFS_NA_3km/fv3_grid_spec.0005 b/fix/gsi/RRFS_NA_3km/fv3_grid_spec.0005 new file mode 120000 index 000000000..7f9229163 --- /dev/null +++ b/fix/gsi/RRFS_NA_3km/fv3_grid_spec.0005 @@ -0,0 +1 @@ +../../.agent/gsi/RRFS_NA_3km/grid_spec.nc.0005 \ No newline at end of file diff --git a/fix/gsi/RRFS_NA_3km/fv3_grid_spec.0006 b/fix/gsi/RRFS_NA_3km/fv3_grid_spec.0006 new file mode 120000 index 000000000..114c32510 --- /dev/null +++ b/fix/gsi/RRFS_NA_3km/fv3_grid_spec.0006 @@ -0,0 +1 @@ +../../.agent/gsi/RRFS_NA_3km/grid_spec.nc.0006 \ No newline at end of file diff --git a/fix/gsi/RRFS_NA_3km/fv3_grid_spec.0007 b/fix/gsi/RRFS_NA_3km/fv3_grid_spec.0007 new file mode 120000 index 000000000..2de776e00 --- /dev/null +++ b/fix/gsi/RRFS_NA_3km/fv3_grid_spec.0007 @@ -0,0 +1 @@ +../../.agent/gsi/RRFS_NA_3km/grid_spec.nc.0007 \ No newline at end of file diff --git a/fix/gsi/RRFS_NA_3km/fv3_grid_spec.0008 b/fix/gsi/RRFS_NA_3km/fv3_grid_spec.0008 new file mode 120000 index 000000000..b0059a796 --- /dev/null +++ b/fix/gsi/RRFS_NA_3km/fv3_grid_spec.0008 @@ -0,0 +1 @@ +../../.agent/gsi/RRFS_NA_3km/grid_spec.nc.0008 \ No newline at end of file diff --git a/fix/gsi/RRFS_NA_3km/fv3_grid_spec.0009 b/fix/gsi/RRFS_NA_3km/fv3_grid_spec.0009 new file mode 120000 index 000000000..0741e6a6d --- /dev/null +++ b/fix/gsi/RRFS_NA_3km/fv3_grid_spec.0009 @@ -0,0 +1 @@ +../../.agent/gsi/RRFS_NA_3km/grid_spec.nc.0009 \ No newline at end of file