Skip to content

Commit

Permalink
Implement IAU Cycling Type with Marine Data Assimilation Enabled (NOA…
Browse files Browse the repository at this point in the history
…A-EMC#1944)

Allows cycling in IAU mode with the S2S UFS model, soca and the GSI.

Most of the work related to making IAU work was done by @JessicaMeixner-NOAA . Thanks @JessicaMeixner-NOAA !

Resolves NOAA-EMC#1943 
Refs NOAA-EMC#1776
  • Loading branch information
guillaumevernieres authored Nov 3, 2023
1 parent 2563806 commit 8d55126
Show file tree
Hide file tree
Showing 7 changed files with 55 additions and 39 deletions.
12 changes: 9 additions & 3 deletions parm/config/gfs/config.resources
Original file line number Diff line number Diff line change
Expand Up @@ -394,13 +394,14 @@ elif [[ "${step}" = "ocnanalrun" ]]; then
case ${CASE} in
C384)
npes=480
export memory_ocnanalchkpt="2.8TB"
memory_ocnanalrun="128GB"
;;
C96)
npes=16
;;
C48)
npes=16
memory_ocnanalrun="64GB"
;;
*)
echo "FATAL: Resolution not supported'"
Expand All @@ -409,10 +410,11 @@ elif [[ "${step}" = "ocnanalrun" ]]; then

export wtime_ocnanalrun="00:15:00"
export npe_ocnanalrun=${npes}
export nth_ocnanalrun=1
export nth_ocnanalrun=2
export is_exclusive=True
npe_node_ocnanalrun=$(echo "${npe_node_max} / ${nth_ocnanalrun}" | bc)
export npe_node_ocnanalrun
export memory_ocnanalrun

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

Expand Down Expand Up @@ -648,7 +650,11 @@ elif [[ "${step}" = "fcst" || "${step}" = "efcs" ]]; then
declare -x "wtime_${step}"="00:30:00"
declare -x "wtime_${step}_gfs"="03:00:00"
;;
"C384" | "C768" | "C1152")
"C384")
declare -x "wtime_${step}"="00:20:00"
declare -x "wtime_${step}_gfs"="06:00:00"
;;
"C768" | "C1152")
declare -x "wtime_${step}"="01:00:00"
declare -x "wtime_${step}_gfs"="06:00:00"
;;
Expand Down
18 changes: 9 additions & 9 deletions parm/ufs/fv3/diag_table_da
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@
"fv3_history2d", 0, "hours", 1, "hours", "time"
"ocn_da%4yr%2mo%2dy%2hr", 1, "hours", 1, "hours", "time", 1, "hours"

"ocean_model", "geolon", "geolon", "ocn_da%4yr%2mo%2dy%2hr", "all", "none", "none", 2
"ocean_model", "geolat", "geolat", "ocn_da%4yr%2mo%2dy%2hr", "all", "none", "none", 2
"ocean_model", "SSH", "ave_ssh", "ocn_da%4yr%2mo%2dy%2hr", "all", "none", "none", 2
"ocean_model", "MLD_0125", "MLD", "ocn_da%4yr%2mo%2dy%2hr", "all", "none", "none", 2
"ocean_model", "u", "u", "ocn_da%4yr%2mo%2dy%2hr", "all", "none", "none", 2
"ocean_model", "v", "v", "ocn_da%4yr%2mo%2dy%2hr", "all", "none", "none", 2
"ocean_model", "h", "h", "ocn_da%4yr%2mo%2dy%2hr", "all", "none", "none", 2
"ocean_model", "salt", "Salt", "ocn_da%4yr%2mo%2dy%2hr", "all", "none", "none", 2
"ocean_model", "temp", "Temp", "ocn_da%4yr%2mo%2dy%2hr", "all", "none", "none", 2
"ocean_model", "geolon", "geolon", "ocn_da%4yr%2mo%2dy%2hr", "all", .false., "none", 2
"ocean_model", "geolat", "geolat", "ocn_da%4yr%2mo%2dy%2hr", "all", .false., "none", 2
"ocean_model", "SSH", "ave_ssh", "ocn_da%4yr%2mo%2dy%2hr", "all", .false., "none", 2
"ocean_model", "MLD_0125", "MLD", "ocn_da%4yr%2mo%2dy%2hr", "all", .false., "none", 2
"ocean_model_z", "u", "u", "ocn_da%4yr%2mo%2dy%2hr", "all", .false., "none", 2
"ocean_model_z", "v", "v", "ocn_da%4yr%2mo%2dy%2hr", "all", .false., "none", 2
"ocean_model_z", "h", "h", "ocn_da%4yr%2mo%2dy%2hr", "all", .false., "none", 2
"ocean_model_z", "salt", "Salt", "ocn_da%4yr%2mo%2dy%2hr", "all", .false., "none", 2
"ocean_model_z", "temp", "Temp", "ocn_da%4yr%2mo%2dy%2hr", "all", .false., "none", 2

"gfs_dyn", "ucomp", "ugrd", "fv3_history", "all", .false., "none", 2
"gfs_dyn", "vcomp", "vgrd", "fv3_history", "all", .false., "none", 2
Expand Down
4 changes: 2 additions & 2 deletions parm/ufs/mom6/MOM_input_template_025
Original file line number Diff line number Diff line change
Expand Up @@ -341,8 +341,8 @@ DIAG_COORDS = "z Z ZSTAR"
! A list of string tuples associating diag_table modules to
! a coordinate definition used for diagnostics. Each string
! is of the form "MODULE_SUFFIX,PARAMETER_SUFFIX,COORDINATE_NAME".
DIAG_COORD_DEF_Z="FILE:interpolate_zgrid_40L.nc,interfaces=zw"
DIAG_MISVAL = -1e34
DIAG_COORD_DEF_Z="FILE:@[MOM6_DIAG_COORD_DEF_Z_FILE],interfaces=zw"
DIAG_MISVAL = @[MOM6_DIAG_MISVAL]
!DIAG_COORD_DEF_RHO2 = "FILE:diag_rho2.nc,interfaces=rho2" ! default = "WOA09"
! Determines how to specify the coordinate resolution. Valid options are:
! PARAM - use the vector-parameter DIAG_COORD_RES_RHO2
Expand Down
2 changes: 1 addition & 1 deletion parm/ufs/mom6/MOM_input_template_100
Original file line number Diff line number Diff line change
Expand Up @@ -322,7 +322,7 @@ DIAG_COORDS = "z Z ZSTAR"
! a coordinate definition used for diagnostics. Each string
! is of the form "MODULE_SUFFIX,PARAMETER_SUFFIX,COORDINATE_NAME".
DIAG_COORD_DEF_Z="FILE:@[MOM6_DIAG_COORD_DEF_Z_FILE],interfaces=zw"
DIAG_MISVAL = -1e34
DIAG_MISVAL = @[MOM6_DIAG_MISVAL]
!AVAILABLE_DIAGS_FILE = "available_diags.002160" ! default = "available_diags.000000"
! A file into which to write a list of all available ocean diagnostics that can
! be included in a diag_table.
Expand Down
9 changes: 9 additions & 0 deletions parm/ufs/mom6/MOM_input_template_500
Original file line number Diff line number Diff line change
Expand Up @@ -258,6 +258,15 @@ Z_INIT_ALE_REMAPPING = True ! [Boolean] default = False
! If True, then remap straight to model coordinate from file.

! === module MOM_diag_mediator ===
NUM_DIAG_COORDS = 1
! The number of diagnostic vertical coordinates to use.
! For each coordinate, an entry in DIAG_COORDS must be provided.
DIAG_COORDS = "z Z ZSTAR"
! A list of string tuples associating diag_table modules to
! a coordinate definition used for diagnostics. Each string
! is of the form "MODULE_SUFFIX,PARAMETER_SUFFIX,COORDINATE_NAME".
DIAG_COORD_DEF_Z="FILE:@[MOM6_DIAG_COORD_DEF_Z_FILE],interfaces=zw"
DIAG_MISVAL = @[MOM6_DIAG_MISVAL]

! === module MOM_MEKE ===
USE_MEKE = True ! [Boolean] default = False
Expand Down
15 changes: 7 additions & 8 deletions ush/forecast_postdet.sh
Original file line number Diff line number Diff line change
Expand Up @@ -678,12 +678,12 @@ MOM6_postdet() {
echo "SUB ${FUNCNAME[0]}: MOM6 after run type determination"

# Copy MOM6 ICs
${NLN} "${COM_OCEAN_RESTART_PREV}/${PDY}.${cyc}0000.MOM.res.nc" "${DATA}/INPUT/MOM.res.nc"
${NLN} "${COM_OCEAN_RESTART_PREV}/${sPDY}.${scyc}0000.MOM.res.nc" "${DATA}/INPUT/MOM.res.nc"
case ${OCNRES} in
"025")
for nn in $(seq 1 4); do
if [[ -f "${COM_OCEAN_RESTART_PREV}/${PDY}.${cyc}0000.MOM.res_${nn}.nc" ]]; then
${NLN} "${COM_OCEAN_RESTART_PREV}/${PDY}.${cyc}0000.MOM.res_${nn}.nc" "${DATA}/INPUT/MOM.res_${nn}.nc"
if [[ -f "${COM_OCEAN_RESTART_PREV}/${sPDY}.${scyc}0000.MOM.res_${nn}.nc" ]]; then
${NLN} "${COM_OCEAN_RESTART_PREV}/${sPDY}.${scyc}0000.MOM.res_${nn}.nc" "${DATA}/INPUT/MOM.res_${nn}.nc"
fi
done
;;
Expand Down Expand Up @@ -904,7 +904,7 @@ CICE_postdet() {

# Copy CICE ICs
echo "Link CICE ICs"
cice_restart_file="${COM_ICE_RESTART_PREV}/${PDY}.${cyc}0000.cice_model.res.nc"
cice_restart_file="${COM_ICE_RESTART_PREV}/${sPDY}.${scyc}0000.cice_model.res.nc"
if [[ ! -f "${cice_restart_file}" ]]; then
echo "FATAL ERROR: CICE restart file not found at '${cice_restart_file}', ABORT!"
exit 112
Expand Down Expand Up @@ -1038,7 +1038,7 @@ GOCART_postdet() {
rm -f "${COM_CHEM_HISTORY}/gocart.inst_aod.${vdate:0:8}_${vdate:8:2}00z.nc4"
fi

#To Do: Temporarily removing this as this will crash gocart, adding copy statement at the end
#To Do: Temporarily removing this as this will crash gocart, adding copy statement at the end
#${NLN} "${COM_CHEM_HISTORY}/gocart.inst_aod.${vdate:0:8}_${vdate:8:2}00z.nc4" \
# "${DATA}/gocart.inst_aod.${vdate:0:8}_${vdate:8:2}00z.nc4"
done
Expand All @@ -1049,8 +1049,8 @@ GOCART_out() {

# Copy gocart.inst_aod after the forecast is run (and successfull)
# TO DO: this should be linked but there were issues where gocart was crashing if it was linked
local fhr
local vdate
local fhr
local vdate
for fhr in ${FV3_OUTPUT_FH}; do
if (( fhr == 0 )); then continue; fi
vdate=$(date --utc -d "${current_cycle:0:8} ${current_cycle:8:2} + ${fhr} hours" +%Y%m%d%H)
Expand All @@ -1060,4 +1060,3 @@ GOCART_out() {


}

34 changes: 18 additions & 16 deletions ush/forecast_predet.sh
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,24 @@ common_predet(){
next_cycle=$(date --utc -d "${current_cycle:0:8} ${current_cycle:8:2} + ${assim_freq} hours" +%Y%m%d%H)
forecast_end_cycle=$(date --utc -d "${current_cycle:0:8} ${current_cycle:8:2} + ${FHMAX} hours" +%Y%m%d%H)

# IAU options
IAU_OFFSET=${IAU_OFFSET:-0}
DOIAU=${DOIAU:-"NO"}
if [[ "${DOIAU}" = "YES" ]]; then
sCDATE=$(date --utc -d "${current_cycle:0:8} ${current_cycle:8:2} - 3 hours" +%Y%m%d%H)
sPDY="${sCDATE:0:8}"
scyc="${sCDATE:8:2}"
tPDY=${previous_cycle:0:8}
tcyc=${previous_cycle:8:2}
else
sCDATE=${current_cycle}
sPDY=${current_cycle:0:8}
scyc=${current_cycle:8:2}
tPDY=${sPDY}
tcyc=${scyc}
fi


cd "${DATA}" || ( echo "FATAL ERROR: Unable to 'cd ${DATA}', ABORT!"; exit 8 )
}

Expand Down Expand Up @@ -121,10 +139,8 @@ FV3_predet(){
PREFIX_ATMINC=${PREFIX_ATMINC:-""} # allow ensemble to use recentered increment

# IAU options
DOIAU=${DOIAU:-"NO"}
IAUFHRS=${IAUFHRS:-0}
IAU_DELTHRS=${IAU_DELTHRS:-0}
IAU_OFFSET=${IAU_OFFSET:-0}

# Model config options
ntiles=6
Expand Down Expand Up @@ -216,20 +232,6 @@ FV3_predet(){
mkdir -p "${DATA}/RESTART"
fi

if [[ "${DOIAU}" = "YES" ]]; then
sCDATE=$(date --utc -d "${current_cycle:0:8} ${current_cycle:8:2} - 3 hours" +%Y%m%d%H)
sPDY="${sCDATE:0:8}"
scyc="${sCDATE:8:2}"
tPDY=${previous_cycle:0:8}
tcyc=${previous_cycle:8:2}
else
sCDATE=${current_cycle}
sPDY=${current_cycle:0:8}
scyc=${current_cycle:8:2}
tPDY=${sPDY}
tcyc=${scyc}
fi

echo "SUB ${FUNCNAME[0]}: pre-determination variables set"
}

Expand Down

0 comments on commit 8d55126

Please sign in to comment.