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 cycle argument, which it makes available as a Python datetime object to Jinja2 when realizing its input config. This supports specification of cycle-specific values. For example, the key-value pair

    gfs.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 the coupler.res file.

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.

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.