diff --git a/parm/soca/letkf/letkf.yaml.j2 b/parm/soca/letkf/letkf.yaml.j2 index 3cf0284df..9cb7821ca 100644 --- a/parm/soca/letkf/letkf.yaml.j2 +++ b/parm/soca/letkf/letkf.yaml.j2 @@ -4,15 +4,15 @@ geometry: fields metadata: fields_metadata.yaml time window: - begin: &date '{{ ATM_WINDOW_BEGIN }}' + begin: &date '{{ WINDOW_BEGIN | to_isotime }}' length: PT6H background: members from template: template: - date: '{{ ATM_WINDOW_MIDDLE }}' - ocn_filename: enkfgdas.ocean.t06z.inst.f009.nc - ice_filename: enkfgdas.ice.t06z.inst.f009.nc + date: '{{ WINDOW_MIDDLE | to_isotime }}' + ocn_filename: "{{ GDUMP_ENS }}.ocean.t{{ gcyc }}z.inst.f006.nc" + ice_filename: "{{ GDUMP_ENS }}.ice.t{{ gcyc }}z.inst.f006.nc" read_from_file: 1 basename: ./ens/mem%mem% state variables: [socn, tocn, ssh, uocn, vocn, cicen] diff --git a/parm/soca/letkf/letkf_stage.yaml.j2 b/parm/soca/letkf/letkf_stage.yaml.j2 new file mode 100644 index 000000000..58db4ef50 --- /dev/null +++ b/parm/soca/letkf/letkf_stage.yaml.j2 @@ -0,0 +1,49 @@ +###################################### +# set some variables +###################################### +{% set gPDY = previous_cycle | to_YMD %} +{% set gcyc = previous_cycle | strftime("%H") %} +{% set PDY = current_cycle | to_YMD %} +{% set cyc = current_cycle | strftime("%H") %} +###################################### +# create working directories +###################################### +mkdir: +- "{{ DATA }}/Data" +- "{{ DATA }}/obs" +- "{{ DATA }}/INPUT" +{% for mem in range(1, NMEM_ENS + 1) %} +- "{{ DATA }}/ens/mem{{ '%03d' % mem }}" +{% endfor %} +copy: +###################################### +# copy mom input template +###################################### +- ["{{ PARMgfs }}/gdas/soca/fms/input.nml", "{{ DATA }}/mom_input.nml.tmpl"] +###################################### +# copy ensemble background files +###################################### +{% for mem in range(1, NMEM_ENS + 1) %} +# define variables +# Declare a dict of search and replace terms to GDUMP on each template +{% set tmpl_dict = {'ROTDIR':ROTDIR, + 'RUN': GDUMP_ENS, + 'YMD':gPDY, + 'HH':gcyc, + 'MEMDIR':"mem" + '%03d' % mem} %} + +# Replace template variables with tmpl_dict, one key at a time +# This must be done in a namespace to overcome jinja scoping +# Variables set inside of a for loop are lost at the end of the loop +# unless they are part of a namespace +{% set com_prev_ocn = namespace(COM_OCEAN_HISTORY_MEM = COM_OCEAN_HISTORY_TMPL) %} +{% set com_prev_ice = namespace(COM_ICE_HISTORY_MEM = COM_ICE_HISTORY_TMPL) %} +{% for key in tmpl_dict.keys() %} +{% set search_term = '${' + key + '}' %} +{% set replace_term = tmpl_dict[key] %} +{% set com_prev_ocn.COM_OCEAN_HISTORY_MEM = com_prev_ocn.COM_OCEAN_HISTORY_MEM.replace(search_term, replace_term) %} +{% set com_prev_ice.COM_ICE_HISTORY_MEM = com_prev_ice.COM_ICE_HISTORY_MEM.replace(search_term, replace_term) %} +{% endfor %} +- ["{{ com_prev_ocn.COM_OCEAN_HISTORY_MEM }}/{{ GDUMP_ENS }}.ocean.t{{ gcyc }}z.inst.f006.nc", "{{ DATA }}/ens/mem{{ '%03d' % mem }}/{{ GDUMP_ENS }}.ocean.t{{ gcyc }}z.inst.f006.nc"] +- ["{{ com_prev_ice.COM_ICE_HISTORY_MEM }}/{{ GDUMP_ENS }}.ice.t{{ gcyc }}z.inst.f006.nc", "{{ DATA }}/ens/mem{{ '%03d' % mem }}/{{ GDUMP_ENS }}.ice.t{{ gcyc }}z.inst.f006.nc"] +{% endfor %} diff --git a/parm/soca/letkf/soca_fix_stage.yaml.j2 b/parm/soca/letkf/soca_fix_stage.yaml.j2 new file mode 100644 index 000000000..50a61133a --- /dev/null +++ b/parm/soca/letkf/soca_fix_stage.yaml.j2 @@ -0,0 +1,16 @@ +###################################### +# fix files to copy +###################################### +copy: +- ["{{ SOCA_INPUT_FIX_DIR }}/rossrad.nc", "{{ DATA }}/rossrad.nc"] +- ["{{ SOCA_INPUT_FIX_DIR }}/field_table", "{{ DATA }}/field_table"] +- ["{{ SOCA_INPUT_FIX_DIR }}/diag_table", "{{ DATA }}/diag_table"] +- ["{{ SOCA_INPUT_FIX_DIR }}/MOM_input", "{{ DATA }}/MOM_input"] +- ["{{ SOCA_INPUT_FIX_DIR }}/fields_metadata.yaml", "{{ DATA }}/fields_metadata.yaml"] +- ["{{ SOCA_INPUT_FIX_DIR }}/obsop_name_map.yaml", "{{ DATA }}/obsop_name_map.yaml"] +- ["{{ SOCA_INPUT_FIX_DIR }}/INPUT/grid_spec.nc", "{{ DATA }}/INPUT/grid_spec.nc"] +- ["{{ SOCA_INPUT_FIX_DIR }}/INPUT/hycom1_25.nc", "{{ DATA }}/INPUT/hycom1_25.nc"] +- ["{{ SOCA_INPUT_FIX_DIR }}/INPUT/layer_coord25.nc", "{{ DATA }}/INPUT/layer_coord25.nc"] +- ["{{ SOCA_INPUT_FIX_DIR }}/INPUT/ocean_hgrid.nc", "{{ DATA }}/INPUT/ocean_hgrid.nc"] +- ["{{ SOCA_INPUT_FIX_DIR }}/INPUT/ocean_mosaic.nc", "{{ DATA }}/INPUT/ocean_mosaic.nc"] +- ["{{ SOCA_INPUT_FIX_DIR }}/INPUT/ocean_topog.nc", "{{ DATA }}/INPUT/ocean_topog.nc"] diff --git a/test/soca/gw/CMakeLists.txt b/test/soca/gw/CMakeLists.txt index f96a3aec5..da85a58b4 100644 --- a/test/soca/gw/CMakeLists.txt +++ b/test/soca/gw/CMakeLists.txt @@ -50,7 +50,7 @@ set(jjob_list "JGLOBAL_PREP_OCEAN_OBS" "JGDAS_GLOBAL_OCEAN_ANALYSIS_BMAT" "JGDAS_GLOBAL_OCEAN_ANALYSIS_RUN" "JGDAS_GLOBAL_OCEAN_ANALYSIS_ECEN" -# "JGDAS_GLOBAL_OCEAN_ANALYSIS_LETKF" +# "JGDAS_GLOBAL_OCEAN_ANALYSIS_LETKF" "JGDAS_GLOBAL_OCEAN_ANALYSIS_CHKPT" "JGDAS_GLOBAL_OCEAN_ANALYSIS_POST" "JGDAS_GLOBAL_OCEAN_ANALYSIS_VRFY") diff --git a/test/soca/gw/prep.sh b/test/soca/gw/prep.sh index 447ca7846..2cefdc39d 100755 --- a/test/soca/gw/prep.sh +++ b/test/soca/gw/prep.sh @@ -68,9 +68,11 @@ do oceandir=${COMENS}/06/mem00${mem}/model_data/ocean/history mkdir -p $oceandir cp ${clim_ens_dir}/ocean.${mem}.nc $oceandir/enkfgdas.ocean.t06z.inst.f009.nc + cp ${clim_ens_dir}/ocean.${mem}.nc $oceandir/enkfgdas.ocean.t06z.inst.f006.nc # ice member icedir=${COMENS}/06/mem00${mem}/model_data/ice/history mkdir -p $icedir cp ${clim_ens_dir}/ice.${mem}.nc $icedir/enkfgdas.ice.t06z.inst.f009.nc + cp ${clim_ens_dir}/ice.${mem}.nc $icedir/enkfgdas.ice.t06z.inst.f006.nc done