Skip to content

Commit

Permalink
Add the mean EnKF soil increment to the deterministic member (#3295)
Browse files Browse the repository at this point in the history
Add mean EnKF soil increment to the deterministic member. Includes new
regriding script and executable (in GDASApp) to perform masked bi-linear
interpolation of the soil increments.

Resolves [2773](#2773)

---------

Co-authored-by: Cory Martin <cory.r.martin@noaa.gov>
Co-authored-by: Rahul Mahajan <aerorahul@users.noreply.github.com>
  • Loading branch information
3 people authored Feb 27, 2025
1 parent 8245df7 commit 25778ff
Show file tree
Hide file tree
Showing 28 changed files with 350 additions and 37 deletions.
1 change: 1 addition & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
Expand Up @@ -180,6 +180,7 @@ syndat_qctropcy.sh @JiayiPeng-NOAA
tropcy_relocate.sh @JiayiPeng-NOAA
tropcy_relocate_extrkr.sh @JiayiPeng-NOAA
wave_*.sh @JessicaMeixner-NOAA @sbanihash
regrid_gsiSfcIncr_to_tile.sh @ClaraDraper-NOAA

# ush/python
ush/python/pygfs/jedi/__init__.py @aerorahul @DavidNew-NOAA
Expand Down
6 changes: 6 additions & 0 deletions ci/cases/yamls/atmsoilDA_defaults_ci.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
defaults:
!INC {{ HOMEgfs }}/parm/config/gfs/yaml/defaults.yaml
base:
DO_GSISOILDA: "YES"
ACCOUNT: {{ 'HPC_ACCOUNT' | getenv }}
DO_TEST_MODE: "NO"
9 changes: 9 additions & 0 deletions env/GAEAC5.env
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,15 @@ case ${step} in
export NTHREADS_CYCLE=${threads_per_task:-14}
[[ ${NTHREADS_CYCLE} -gt ${max_tasks_per_node} ]] && export NTHREADS_CYCLE=${max_tasks_per_node}
export APRUN_CYCLE="${APRUN_default} --cpus-per-task=${NTHREADS_CYCLE}"

# REGRID requires multiple of 6 tasks
ntdiv6=$((ntasks/6))
ntasks_regrid=$((ntdiv6*6))
if [[ ${ntasks_regrid} -gt 36 ]]; then
ntasks_regrid=36
fi
export APRUN_REGRID="${launcher} -n ${ntasks_regrid} "

;;
"eobs")

Expand Down
9 changes: 9 additions & 0 deletions env/GAEAC6.env
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,15 @@ case ${step} in
export NTHREADS_CYCLE=${threads_per_task:-14}
[[ ${NTHREADS_CYCLE} -gt ${max_tasks_per_node} ]] && export NTHREADS_CYCLE=${max_tasks_per_node}
export APRUN_CYCLE="${APRUN_default} --cpus-per-task=${NTHREADS_CYCLE}"

# REGRID requires multiple of 6 tasks
ntdiv6=$((ntasks/6))
ntasks_regrid=$((ntdiv6*6))
if [[ ${ntasks_regrid} -gt 36 ]]; then
ntasks_regrid=36
fi
export APRUN_REGRID="${launcher} -n ${ntasks_regrid} "

;;
"eobs")

Expand Down
15 changes: 15 additions & 0 deletions env/HERA.env
Original file line number Diff line number Diff line change
Expand Up @@ -183,6 +183,14 @@ elif [[ "${step}" = "sfcanl" ]]; then
export NTHREADS_CYCLE=${threads_per_task:-14}
export APRUN_CYCLE="${APRUN_default} --cpus-per-task=${NTHREADS_CYCLE}"

# REGRID requires multiple of 6 tasks
ntdiv6=$((ntasks/6))
ntasks_regrid=$((ntdiv6*6))
if [[ ${ntasks_regrid} -gt 36 ]]; then
ntasks_regrid=36
fi
export APRUN_REGRID="${launcher} -n ${ntasks_regrid} "

elif [[ "${step}" = "eobs" ]]; then

export MKL_NUM_THREADS=4
Expand Down Expand Up @@ -248,6 +256,13 @@ elif [[ "${step}" = "esfc" ]]; then
[[ ${NTHREADS_CYCLE} -gt ${max_tasks_per_node} ]] && export NTHREADS_CYCLE=${max_tasks_per_node}
export APRUN_CYCLE="${APRUN_default} --cpus-per-task=${NTHREADS_CYCLE}"

ntdiv6=$((ntasks/6))
ntasks_regrid=$((ntdiv6*6))
if [[ ${ntasks_regrid} -gt 36 ]]; then
ntasks_regrid=36
fi
export APRUN_REGRID="${launcher} -n ${ntasks_regrid} "

elif [[ "${step}" = "epos" ]]; then

export NTHREADS_EPOS=${NTHREADSmax}
Expand Down
15 changes: 15 additions & 0 deletions env/HERCULES.env
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,14 @@ case ${step} in
export NTHREADS_CYCLE=${threads_per_task:-14}
[[ ${NTHREADS_CYCLE} -gt ${max_tasks_per_node} ]] && export NTHREADS_CYCLE=${max_tasks_per_node}
export APRUN_CYCLE="${APRUN_default} --cpus-per-task=${NTHREADS_CYCLE}"

# REGRID requires multiple of 6 tasks
ntdiv6=$((ntasks/6))
ntasks_regrid=$((ntdiv6*6))
if [[ ${ntasks_regrid} -gt 36 ]]; then
ntasks_regrid=36
fi
export APRUN_REGRID="${launcher} -n ${ntasks_regrid} "
;;
"eobs")

Expand Down Expand Up @@ -263,6 +271,13 @@ case ${step} in
[[ ${NTHREADS_CYCLE} -gt ${max_tasks_per_node} ]] && export NTHREADS_CYCLE=${max_tasks_per_node}
export APRUN_CYCLE="${APRUN_default} --cpus-per-task=${NTHREADS_CYCLE}"

ntdiv6=$((ntasks/6))
ntasks_regrid=$((ntdiv6*6))
if [[ ${ntasks_regrid} -gt 36 ]]; then
ntasks_regrid=36
fi
export APRUN_REGRID="${launcher} -n ${ntasks_regrid} "

;;
"epos")

Expand Down
15 changes: 15 additions & 0 deletions env/JET.env
Original file line number Diff line number Diff line change
Expand Up @@ -156,6 +156,14 @@ elif [[ "${step}" = "sfcanl" ]]; then
[[ ${NTHREADS_CYCLE} -gt ${max_tasks_per_node} ]] && export NTHREADS_CYCLE=${max_tasks_per_node}
export APRUN_CYCLE="${APRUN_default}"

# REGRID requires multiple of 6 tasks
ntdiv6=$((ntasks/6))
ntasks_regrid=$((ntdiv6*6))
if [[ ${ntasks_regrid} -gt 36 ]]; then
ntasks_regrid=36
fi
export APRUN_REGRID="${launcher} -n ${ntasks_regrid} "

elif [[ "${step}" = "eobs" ]]; then

export MKL_NUM_THREADS=4
Expand Down Expand Up @@ -221,6 +229,13 @@ elif [[ "${step}" = "esfc" ]]; then
[[ ${NTHREADS_CYCLE} -gt ${max_tasks_per_node} ]] && export NTHREADS_CYCLE=${max_tasks_per_node}
export APRUN_CYCLE="${APRUN_default}"

ntdiv6=$((ntasks/6))
ntasks_regrid=$((ntdiv6*6))
if [[ ${ntasks_regrid} -gt 36 ]]; then
ntasks_regrid=36
fi
export APRUN_REGRID="${launcher} -n ${ntasks_regrid} "

elif [[ "${step}" = "epos" ]]; then

export NTHREADS_EPOS=${NTHREADSmax}
Expand Down
15 changes: 15 additions & 0 deletions env/ORION.env
Original file line number Diff line number Diff line change
Expand Up @@ -184,6 +184,14 @@ elif [[ "${step}" = "sfcanl" ]]; then
[[ ${NTHREADS_CYCLE} -gt ${max_tasks_per_node} ]] && export NTHREADS_CYCLE=${max_tasks_per_node}
export APRUN_CYCLE="${APRUN_default} --cpus-per-task=${NTHREADS_CYCLE}"

# REGRID requires multiple of 6 tasks
ntdiv6=$((ntasks/6))
ntasks_regrid=$((ntdiv6*6))
if [[ ${ntasks_regrid} -gt 36 ]]; then
ntasks_regrid=36
fi
export APRUN_REGRID="${launcher} -n ${ntasks_regrid} "

elif [[ "${step}" = "eobs" ]]; then

export MKL_NUM_THREADS=4
Expand Down Expand Up @@ -252,6 +260,13 @@ elif [[ "${step}" = "esfc" ]]; then
[[ ${NTHREADS_CYCLE} -gt ${max_tasks_per_node} ]] && export NTHREADS_CYCLE=${max_tasks_per_node}
export APRUN_CYCLE="${APRUN_default} --cpus-per-task=${NTHREADS_CYCLE}"

ntdiv6=$((ntasks/6))
ntasks_regrid=$((ntdiv6*6))
if [[ ${ntasks_regrid} -gt 36 ]]; then
ntasks_regrid=36
fi
export APRUN_REGRID="${launcher} -n ${ntasks_regrid} "

elif [[ "${step}" = "epos" ]]; then

export NTHREADS_EPOS=${NTHREADSmax}
Expand Down
15 changes: 15 additions & 0 deletions env/WCOSS2.env
Original file line number Diff line number Diff line change
Expand Up @@ -175,6 +175,14 @@ elif [[ "${step}" = "sfcanl" ]]; then
[[ ${NTHREADS_CYCLE} -gt ${max_tasks_per_node} ]] && export NTHREADS_CYCLE=${max_tasks_per_node}
export APRUN_CYCLE="${APRUN_default}"

# REGRID requires multiple of 6 tasks
ntdiv6=$((ntasks/6))
ntasks_regrid=$((ntdiv6*6))
if [[ ${ntasks_regrid} -gt 36 ]]; then
ntasks_regrid=36
fi
export APRUN_REGRID="${launcher} -n ${ntasks_regrid} "

elif [[ "${step}" = "eobs" ]]; then

export OMP_PLACES=cores
Expand Down Expand Up @@ -260,6 +268,13 @@ elif [[ "${step}" = "esfc" ]]; then
[[ ${NTHREADS_CYCLE} -gt ${max_tasks_per_node} ]] && export NTHREADS_CYCLE=${max_tasks_per_node}
export APRUN_CYCLE="${APRUN_default} -ppn ${tasks_per_node_cycle} --cpu-bind depth --depth ${NTHREADS_CYCLE}"

ntdiv6=$((ntasks/6))
ntasks_regrid=$((ntdiv6*6))
if [[ ${ntasks_regrid} -gt 36 ]]; then
ntasks_regrid=36
fi
export APRUN_REGRID="${launcher} -n ${ntasks_regrid} "

elif [[ "${step}" = "epos" ]]; then

export NTHREADS_EPOS=${NTHREADSmax}
Expand Down
3 changes: 3 additions & 0 deletions jobs/JGLOBAL_ATMOS_SFCANL
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@ YMD=${PDY} HH=${cyc} declare_from_tmpl -rx \
YMD=${PDY} HH=${cyc} declare_from_tmpl -rx \
COMOUT_ATMOS_RESTART:COM_ATMOS_RESTART_TMPL

RUN="enkfgdas" MEMDIR="ensstat" YMD=${PDY} HH=${cyc} declare_from_tmpl -rx \
COMIN_ATMOS_ENKF_ANALYSIS_STAT:COM_ATMOS_ANALYSIS_TMPL

mkdir -p "${COMOUT_ATMOS_RESTART}"


Expand Down
3 changes: 3 additions & 0 deletions jobs/rocoto/esfc.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,10 @@ source "${HOMEgfs}/ush/preamble.sh"

###############################################################
# Source FV3GFS workflow modules
# For DO_GSISOILDA=YES need to switch to ufsda modules
# until g-w issue 3390 is resolved.
. ${HOMEgfs}/ush/load_fv3gfs_modules.sh
#. ${HOMEgfs}/ush/load_ufsda_modules.sh
status=$?
[[ ${status} -ne 0 ]] && exit ${status}

Expand Down
3 changes: 3 additions & 0 deletions jobs/rocoto/sfcanl.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,10 @@ source "${HOMEgfs}/ush/preamble.sh"

###############################################################
# Source FV3GFS workflow modules
# For DO_GSISOILDA=YES need to switch to ufsda modules
# until g-w issue 3390 is resolved.
. ${HOMEgfs}/ush/load_fv3gfs_modules.sh
#. ${HOMEgfs}/ush/load_ufsda_modules.sh
status=$?
[[ ${status} -ne 0 ]] && exit ${status}

Expand Down
6 changes: 5 additions & 1 deletion parm/config/gfs/config.aeroanlgenb
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,11 @@ export aero_diagb_weight=0.9
export aero_staticb_rescaling_factor=2.0
export aero_diagb_n_halo=4
export aero_diagb_n_neighbors=16
export aero_diagb_smooth_horiz_iter=200
aero_diagb_smooth_horiz_iter=0
export aero_diagb_smooth_vert_iter=0
if [[ "${CASE_ANL}" == "C384" ]]; then
aero_diagb_smooth_horiz_iter=200
fi
export aero_diagb_smooth_horiz_iter

echo "END: config.aeroanlgenb"
4 changes: 2 additions & 2 deletions parm/config/gfs/config.anal
Original file line number Diff line number Diff line change
Expand Up @@ -48,10 +48,10 @@ export OZINFO=${FIXgfs}/gsi/global_ozinfo.txt
export SATINFO=${FIXgfs}/gsi/global_satinfo.txt
export OBERROR=${FIXgfs}/gsi/prepobs_errtable.global

if [[ ${GSI_SOILANAL} = "YES" ]]; then
if [[ ${DO_GSISOILDA} = "YES" ]]; then
export hofx_2m_sfcfile=".true."
export reducedgrid=".false." # not possible for sfc analysis, Jeff Whitaker says it's not useful anyway
export paranc=".false." # temporary until sfc io coded for parance (PR being prepared by T. Gichamo)
# NOTE: convinfo here will be over-written by date-specific files below.
export CONVINFO=${FIXgfs}/gsi/global_convinfo_2mObs.txt
export ANAVINFO=${FIXgfs}/gsi/global_anavinfo_soilanal.l127.txt
fi
Expand Down
2 changes: 1 addition & 1 deletion parm/config/gfs/config.base
Original file line number Diff line number Diff line change
Expand Up @@ -435,7 +435,7 @@ else
export restart_interval_gdas="6"
fi

export GSI_SOILANAL=@GSI_SOILANAL@
export DO_GSISOILDA=@DO_GSISOILDA@

# turned on nsst in anal and/or fcst steps, and turn off rtgsst
export DONST="YES"
Expand Down
13 changes: 10 additions & 3 deletions parm/config/gfs/config.esfc
Original file line number Diff line number Diff line change
Expand Up @@ -21,10 +21,17 @@ if [[ "${DO_JEDIATMENS}" == "YES" ]]; then
export DONST="NO"
fi

if [[ "${RUN/enkf}" == "gfs" ]]; then
echo "turning off gsi soilda for gfs run"
DO_GSISOILDA="NO"
fi

# set up soil analysis
if [[ ${GSI_SOILANAL} = "YES" ]]; then
export DO_LNDINC=".true."
export LND_SOI_FILE="lnd_incr"
if [[ ${DO_GSISOILDA} == "YES" ]]; then
export GCYCLE_DO_SOILINCR=".true."
export GCYCLE_INTERP_LANDINCR=".false."
export LSOIL_INCR=2
export REGRID_EXEC="${HOMEgfs}/sorc/gdas.cd/build/bin/regridStates.x"
fi

echo "END: config.esfc"
6 changes: 3 additions & 3 deletions parm/config/gfs/config.resources
Original file line number Diff line number Diff line change
Expand Up @@ -718,12 +718,12 @@ case ${step} in
ntasks_gfs=825
threads_per_task=5
;;
"C384")
"C384" | "C192")
ntasks_gdas=160
ntasks_gfs=160
threads_per_task=10
;;
"C192" | "C96" | "C48")
"C96" | "C48")
ntasks_gdas=84
ntasks_gfs=84
threads_per_task=5
Expand Down Expand Up @@ -1274,7 +1274,7 @@ case ${step} in
;;

"esfc")
walltime="00:25:00"
walltime="01:00:00"
ntasks=80
threads_per_task=1
tasks_per_node=$(( max_tasks_per_node / threads_per_task ))
Expand Down
12 changes: 12 additions & 0 deletions parm/config/gfs/config.sfcanl
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,16 @@ if [[ "${DO_JEDIATMVAR}" == "YES" ]]; then
export DONST="NO"
fi

if [[ "${RUN/enkf}" == "gfs" ]]; then
echo "turning off gsi soilda for gfs run"
DO_GSISOILDA="NO"
fi

if [[ "${DO_GSISOILDA}" == "YES" ]]; then
export GCYCLE_DO_SOILINCR=".true."
export GCYCLE_INTERP_LANDINCR=".false."
export LSOIL_INCR=2
export REGRID_EXEC=${REGRID_EXEC:-"${HOMEgfs}/sorc/gdas.cd/build/bin/regridStates.x"}
fi

echo "END: config.sfcanl"
2 changes: 1 addition & 1 deletion parm/config/gfs/yaml/defaults.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ base:
FHMAX_GFS: 120
FHMAX_HF_GFS: 0
FCST_BREAKPOINTS: ""
GSI_SOILANAL: "NO"
DO_GSISOILDA: "NO"
EUPD_CYC: "gdas"
FHMAX_ENKF_GFS: 12
DOHYBVAR_OCN: "NO"
Expand Down
Loading

0 comments on commit 25778ff

Please sign in to comment.