-
Notifications
You must be signed in to change notification settings - Fork 168
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add snow DA update and recentering for the EnKF forecasts (#2690)
This PR adds the capability to update the ensemble of snow states by recentering the ensemble mean to the deterministic snow analysis and applying increments as appropriate. Resolves #2585 --------- Co-authored-by: David Huber <[email protected]> Co-authored-by: Rahul Mahajan <[email protected]> Co-authored-by: Guillaume Vernieres <[email protected]> Co-authored-by: AntonMFernando-NOAA <[email protected]> Co-authored-by: Anil Kumar <[email protected]> Co-authored-by: TerrenceMcGuinness-NOAA <[email protected]>
- Loading branch information
1 parent
1b18f2f
commit 2ce2116
Showing
29 changed files
with
911 additions
and
42 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -22,4 +22,5 @@ skip_ci_on_hosts: | |
- gaea | ||
- orion | ||
- hercules | ||
- wcoss2 | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,59 @@ | ||
#! /usr/bin/env bash | ||
|
||
source "${HOMEgfs}/ush/preamble.sh" | ||
source "${HOMEgfs}/ush/jjob_header.sh" -e "esnowrecen" -c "base esnowrecen" | ||
|
||
############################################## | ||
# Set variables used in the script | ||
############################################## | ||
# Ignore possible spelling error (nothing is misspelled) | ||
# shellcheck disable=SC2153 | ||
GDUMP="gdas" | ||
export GDUMP | ||
|
||
############################################## | ||
# Begin JOB SPECIFIC work | ||
############################################## | ||
# Generate COM variables from templates | ||
YMD=${PDY} HH=${cyc} declare_from_tmpl -rx \ | ||
COMIN_OBS:COM_OBS_TMPL \ | ||
COMOUT_ATMOS_ANALYSIS:COM_ATMOS_ANALYSIS_TMPL \ | ||
COMOUT_CONF:COM_CONF_TMPL | ||
MEMDIR="ensstat" YMD=${PDY} HH=${cyc} declare_from_tmpl \ | ||
COMOUT_SNOW_ANALYSIS:COM_SNOW_ANALYSIS_TMPL | ||
|
||
mkdir -p "${COMOUT_SNOW_ANALYSIS}" "${COMOUT_CONF}" | ||
|
||
for imem in $(seq 1 "${NMEM_ENS}"); do | ||
memchar="mem$(printf %03i "${imem}")" | ||
MEMDIR=${memchar} YMD=${PDY} HH=${cyc} declare_from_tmpl \ | ||
COMOUT_SNOW_ANALYSIS:COM_SNOW_ANALYSIS_TMPL | ||
mkdir -p "${COMOUT_SNOW_ANALYSIS}" | ||
done | ||
|
||
############################################################### | ||
# Run relevant script | ||
|
||
EXSCRIPT=${SNOWANLPY:-${SCRgfs}/exgdas_enkf_snow_recenter.py} | ||
${EXSCRIPT} | ||
status=$? | ||
(( status != 0 )) && exit "${status}" | ||
|
||
############################################## | ||
# End JOB SPECIFIC work | ||
############################################## | ||
|
||
############################################## | ||
# Final processing | ||
############################################## | ||
if [[ -e "${pgmout}" ]] ; then | ||
cat "${pgmout}" | ||
fi | ||
|
||
########################################## | ||
# Remove the Temporary working directory | ||
########################################## | ||
cd "${DATAROOT}" || exit 1 | ||
[[ "${KEEPDATA}" = "NO" ]] && rm -rf "${DATA}" | ||
|
||
exit 0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
#! /usr/bin/env bash | ||
|
||
source "${HOMEgfs}/ush/preamble.sh" | ||
|
||
############################################################### | ||
# Source UFSDA workflow modules | ||
. "${HOMEgfs}/ush/load_ufsda_modules.sh" | ||
status=$? | ||
[[ ${status} -ne 0 ]] && exit "${status}" | ||
|
||
export job="esnowrecen" | ||
export jobid="${job}.$$" | ||
|
||
############################################################### | ||
# Execute the JJOB | ||
"${HOMEgfs}/jobs/JGDAS_ENKF_SNOW_RECENTER" | ||
status=$? | ||
exit "${status}" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,29 @@ | ||
#! /usr/bin/env bash | ||
|
||
########## config.esnowrecen ########## | ||
# configuration common to snow ensemble analysis tasks | ||
|
||
echo "BEGIN: config.esnowrecen" | ||
|
||
# Get task specific resources | ||
source "${EXPDIR}/config.resources" esnowrecen | ||
|
||
export JCB_BASE_YAML="${PARMgfs}/gdas/snow/jcb-base.yaml.j2" | ||
export JCB_ALGO_YAML="${PARMgfs}/gdas/snow/jcb-fv3jedi_land_ensrecenter.yaml.j2" | ||
|
||
export JEDI_FIX_YAML="${PARMgfs}/gdas/atm_jedi_fix.yaml.j2" | ||
export SNOW_ENS_STAGE_TMPL="${PARMgfs}/gdas/snow_stage_ens_update.yaml.j2" | ||
export SNOW_OROG_STAGE_TMPL="${PARMgfs}/gdas/snow_stage_orog.yaml.j2" | ||
export SNOW_ENS_FINALIZE_TMPL="${PARMgfs}/gdas/snow_finalize_ens_update.yaml.j2" | ||
|
||
# Name of the executable that applies increment to bkg and its namelist template | ||
export APPLY_INCR_EXE="${EXECgfs}/apply_incr.exe" | ||
export ENS_APPLY_INCR_NML_TMPL="${PARMgfs}/gdas/snow/letkfoi/ens_apply_incr_nml.j2" | ||
|
||
export io_layout_x=@IO_LAYOUT_X@ | ||
export io_layout_y=@IO_LAYOUT_Y@ | ||
|
||
export JEDIEXE=${EXECgfs}/gdasapp_land_ensrecenter.x | ||
export FREGRID=${EXECgfs}/fregrid.x | ||
|
||
echo "END: config.esnowrecen" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
copy: | ||
###################################### | ||
# copy analyses to directories | ||
###################################### | ||
{% for mem in range(1, NMEM_ENS + 1) %} | ||
# define variables | ||
# Declare a dict of search and replace terms to run on each template | ||
{% set tmpl_dict = {'${ROTDIR}':ROTDIR, | ||
'${RUN}':RUN, | ||
'${YMD}':current_cycle | to_YMD , | ||
'${HH}':current_cycle | strftime("%H"), | ||
'${MEMDIR}':"mem" + '%03d' % mem} %} | ||
|
||
{% for tile in range(1, ntiles+1) %} | ||
- ["{{ DATA }}/anl/mem{{ '%03d' % mem }}/{{ current_cycle | to_fv3time }}.sfc_data.tile{{ tile }}.nc", "{{ COM_SNOW_ANALYSIS_TMPL | replace_tmpl(tmpl_dict) }}/{{ current_cycle | to_fv3time }}.sfc_data.tile{{ tile }}.nc"] | ||
{% endfor %} | ||
{% if DOIAU == True %} | ||
# if using IAU, also need analyses copied at the beginning of the window | ||
{% for tile in range(1, ntiles+1) %} | ||
- ["{{ DATA }}/anl/mem{{ '%03d' % mem }}/{{ SNOW_WINDOW_BEGIN | to_fv3time }}.sfc_data.tile{{ tile }}.nc", "{{ COM_SNOW_ANALYSIS_TMPL | replace_tmpl(tmpl_dict) }}/{{ SNOW_WINDOW_BEGIN | to_fv3time }}.sfc_data.tile{{ tile }}.nc"] | ||
{% endfor %} | ||
{% endif %} | ||
{% endfor %} | ||
###################################### | ||
# copy ensemble mean increment to COM | ||
###################################### | ||
# define variables | ||
# Declare a dict of search and replace terms to run on each template | ||
{% set tmpl_dict = {'${ROTDIR}':ROTDIR, | ||
'${RUN}':RUN, | ||
'${YMD}':current_cycle | to_YMD , | ||
'${HH}':current_cycle | strftime("%H"), | ||
'${MEMDIR}':"ensstat"} %} | ||
|
||
{% for tile in range(1, ntiles+1) %} | ||
- ["{{ DATA }}/inc/ensmean/snowinc.{{ current_cycle | to_fv3time }}.sfc_data.tile{{ tile }}.nc", "{{ COM_SNOW_ANALYSIS_TMPL | replace_tmpl(tmpl_dict) }}/snowinc.{{ current_cycle | to_fv3time }}.sfc_data.tile{{ tile }}.nc"] | ||
{% endfor %} | ||
{% if DOIAU == True %} | ||
# if using IAU, also need increment copied at the beginning of the window | ||
{% for tile in range(1, ntiles+1) %} | ||
- ["{{ DATA }}/inc/ensmean/snowinc.{{ SNOW_WINDOW_BEGIN | to_fv3time }}.sfc_data.tile{{ tile }}.nc", "{{ COM_SNOW_ANALYSIS_TMPL | replace_tmpl(tmpl_dict) }}/snowinc.{{ SNOW_WINDOW_BEGIN | to_fv3time }}.sfc_data.tile{{ tile }}.nc"] | ||
{% endfor %} | ||
{% endif %} |
Oops, something went wrong.