gsi
Structured YAML to run GSI is validated by JSON Schema and requires the gsi: block, described below. If gsi is to be run via a batch system, the platform: block, described here, is also required.
This driver receives a
cycleargument, which it makes available as a Pythondatetimeobject to Jinja2 when realizing its input config. This supports specification of cycle-specific values. For example, the key-value pairgfs.t{{ cycle.strftime('%H') }}z.atmanl.nc: /some/path/{{ cycle.strftime('%Y%m%d%H') }}/gfs.t{{ cycle.strftime('%H') }}z.atmanl.nc
would be rendered as
gfs.t18z.atmanl.nc: /some/path/2024021218/gfs.t18z.atmanl.nc
for cycle
2024-02-12T18.
Here is a prototype UW YAML gsi: block, explained in detail below:
gsi:
execution:
batchargs:
walltime: "00:50:00"
cores: 120
exclusive: true
envcmds:
- module use /some/path/to/modulefiles
- module load some_module
- ulimit -s unlimited
executable: /path/to/gsi.x
mpicmd: srun
stacksize: 300M
threads: 1
coupler.res:
template_file: '/path/to/template/for/fv3_coupler.res'
template_values:
yyyy: "{{ cycle.year }}"
mm: "{{ cycle.month }}"
dd: "{{ cycle.day }}"
hh: "{{ cycle.hour }}"
filelist:
- /path/to/ens_mem001.nc
- /path/to/ens_mem002.nc
files_to_copy:
anavinfo: "{{ user.gsi_fixdir }}/anavinfo.rrfs_conv_dbz"
berror_stats: "{{ user.gsi_fixdir }}/rrfs_glb_berror.l127y770.f77"
satinfo: "{{ user.gsi_fixdir }}/global_satinfo.txt"
convinfo: "{{ user.gsi_fixdir }}/convinfo.rrfs"
ozinfo: "{{ user.gsi_fixdir }}/global_ozinfo.txt"
pcpinfo: "{{ user.gsi_fixdir }}/global_pcpinfo.txt"
errtable: "{{ user.gsi_fixdir }}/errtable.rrfs"
atms_beamwidth.txt: "{{ user.gsi_fixdir }}/atms_beamwidth.txt"
files_to_link:
fv3_akbk: "{{ user.gsi_fixdir }}/RRFS_CONUS_13km/fv3_akbk"
fv3_grid_spec: "{{ user.gsi_fixdir }}/RRFS_CONUS_13km/fv3_grid_spec"
fv3_dynvars: "/path/to/previous/fv3/RESTART/fv_core.res.tile1.nc"
fv3_tracer: "/path/to/previous/fv3/RESTART/fv_tracer.res.tile1.nc"
fv3_sfcdata: "/path/to/previous/fv3/RESTART/sfc_data.nc"
fv3_phyvars: "/path/to/previous/fv3/RESTART/phy_data.nc"
crtm_coeffs/Nalli.IRwater.EmisCoeff.bin: "{{ user.crtm_fixdir }}/Nalli.IRwater.EmisCoeff.bin"
crtm_coeffs/NPOESS.IRice.EmisCoeff.bin: "{{ user.crtm_fixdir }}/NPOESS.IRice.EmisCoeff.bin"
crtm_coeffs/NPOESS.IRsnow.EmisCoeff.bin: "{{ user.crtm_fixdir }}/NPOESS.IRsnow.EmisCoeff.bin"
crtm_coeffs/NPOESS.IRland.EmisCoeff.bin: "{{ user.crtm_fixdir }}/NPOESS.IRland.EmisCoeff.bin"
crtm_coeffs/NPOESS.VISice.EmisCoeff.bin: "{{ user.crtm_fixdir }}/NPOESS.VISice.EmisCoeff.bin"
crtm_coeffs/NPOESS.VISland.EmisCoeff.bin: "{{ user.crtm_fixdir }}/NPOESS.VISland.EmisCoeff.bin"
crtm_coeffs/NPOESS.VISsnow.EmisCoeff.bin: "{{ user.crtm_fixdir }}/NPOESS.VISsnow.EmisCoeff.bin"
crtm_coeffs/NPOESS.VISwater.EmisCoeff.bin: "{{ user.crtm_fixdir }}/NPOESS.VISwater.EmisCoeff.bin"
crtm_coeffs/FASTEM6.MWwater.EmisCoeff.bin: "{{ user.crtm_fixdir }}/FASTEM6.MWwater.EmisCoeff.bin"
crtm_coeffs/AerosolCoeff.bin: "{{ user.crtm_fixdir }}/AerosolCoeff.bin"
crtm_coeffs/CloudCoeff.bin: "{{ user.crtm_fixdir }}/CloudCoeff.bin"
crtm_coeffs/<tau>: !glob "{{ user.crtm_fixdir }}/*TauCoeff.bin"
crtm_coeffs/<spc>: !glob "{{ user.crtm_fixdir }}/*SpcCoeff.bin"
prepbufr: "{{ platform.obspath }}/{{ timevars.yyyymmddhh }}.rap.t{{ timevars.hh }}z.prepbufr.tm00"
satwndbufr: "{{ platform.obspath }}/{{ timevars.yyyymmddhh }}.rap.t{{ timevars.hh }}z.satwnd.tm00.bufr_d"
l2rwbufr: "{{ platform.obspath }}/{{ timevars.yyyymmddhh }}.rap.t{{ timevars.hh }}z.nexrad.tm00.bufr_d"
amsuabufr: "{{ platform.obspath }}/{{ timevars.yyyymmddhh }}.rap.t{{ timevars.hh }}z.1bamua.tm00.bufr_d"
amsuabufrears: "{{ platform.obspath }}/{{ timevars.yyyymmddhh }}.rap.t{{ timevars.hh }}z.esamua.tm00.bufr_d"
mhsbufr: "{{ platform.obspath }}/{{ timevars.yyyymmddhh }}.rap.t{{ timevars.hh }}z.1bmhs.tm00.bufr_d"
mhsbufrears: "{{ platform.obspath }}/{{ timevars.yyyymmddhh }}.rap.t{{ timevars.hh }}z.esmhs.tm00.bufr_d"
atmsbufr: "{{ platform.obspath }}/{{ timevars.yyyymmddhh }}.rap.t{{ timevars.hh }}z.atms.tm00.bufr_d"
atmsbufrears: "{{ platform.obspath }}/{{ timevars.yyyymmddhh }}.rap.t{{ timevars.hh }}z.esatms.tm00.bufr_d"
atmsbufr_db: "{{ platform.obspath }}/{{ timevars.yyyymmddhh }}.rap.t{{ timevars.hh }}z.atmsdb.tm00.bufr_d"
crisfsbufr: "{{ platform.obspath }}/{{ timevars.yyyymmddhh }}.rap.t{{ timevars.hh }}z.crisf4.tm00.bufr_d"
crisfsbufr_db: "{{ platform.obspath }}/{{ timevars.yyyymmddhh }}.rap.t{{ timevars.hh }}z.crsfdb.tm00.bufr_d"
iasibufr: "{{ platform.obspath }}/{{ timevars.yyyymmddhh }}.rap.t{{ timevars.hh }}z.mtiasi.tm00.bufr_d"
iasibufrears: "{{ platform.obspath }}/{{ timevars.yyyymmddhh }}.rap.t{{ timevars.hh }}z.esiasi.tm00.bufr_d"
iasibufr_db: "{{ platform.obspath }}/{{ timevars.yyyymmddhh }}.rap.t{{ timevars.hh }}z.iasidb.tm00.bufr_d"
abibufr: "{{ platform.obspath }}/{{ timevars.yyyymmddhh }}.rap.t{{ timevars.hh }}z.gsrcsr.tm00.bufr_d"
ssmisbufr: "{{ platform.obspath }}/{{ timevars.yyyymmddhh }}.rap.t{{ timevars.hh }}z.ssmisu.tm00.bufr_d"
namelist:
base_file: /path/to/a/run-ready/gsiparm.anl
obs_input_file: /path/to/OBS_INPUT/text_block/obs_input.txt"
rundir: /path/to/run/dir
platform:
scheduler: slurm
account: wrfruc
timevars:
yyyymmddhh: '{{ cycle.strftime("%Y%m%d%H") }}'
hh: '{{ cycle.strftime("%H") }}'
user:
crtm_fixdir: /path/to/crtm/fix/files
gsi_fixdir: /path/to/gsi/fix/files
UW YAML for the gsi: Block
coupler.res:
template_file:
The path to a Jinja2 template file to be rendered, using the values from the
template_values:block for thecoupler.resfile.template_values:
The key/value pairs that are required by the
template_file.
execution:
See this page for details.
files_to_copy:
See this page for details.
files_to_hardlink:
Identical to files_to_copy: except that hard links will be created in the run directory instead of copies, when possible. Otherwise a copy will be created.
files_to_link:
Identical to files_to_copy: except that symbolic links will be created in the run directory instead of copies.
filelist:
An optional list of files to be included in the filelist03 text file required by GSI when
running with regional_ensemble_option = 1 for global ensembles.
namelist:
Supports base_file: and update_values: blocks (see Updating Values for details).
Before the namelist file is written, its proposed content will be validated against the appropriate schema. This can be suppressed by setting validate: false in the UW YAML configuration block for the namelist.
obs_input_file:
Path to a file that contains only the OBS_INPUT:: text block needed for the GSI namelist.
rundir:
The path to the run directory.