Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add configuration for empirically-corrected ozone parameters #3386

Open
wants to merge 3 commits into
base: develop
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion parm/config/sfs/config.efcs

This file was deleted.

75 changes: 75 additions & 0 deletions parm/config/sfs/config.efcs
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
#! /usr/bin/env bash

########## config.efcs ##########
# Ensemble forecast specific, dependency: config.fcst

echo "BEGIN: config.efcs"

# Turn off components in ensemble
# export DO_AERO_FCST="NO"
# export DO_OCN="NO"
# export DO_ICE="NO"
# export DO_WAVE="NO"

export CASE="${CASE_ENS}"

# Source model specific information that is resolution dependent
string="--fv3 ${CASE}"
# Ocean/Ice/Waves ensemble configurations are identical to deterministic member
[[ "${DO_OCN}" == "YES" ]] && string="${string} --mom6 ${OCNRES}"
[[ "${DO_ICE}" == "YES" ]] && string="${string} --cice6 ${ICERES}"
[[ "${DO_WAVE}" == "YES" ]] && string="${string} --ww3 ${waveGRD// /;}"
[[ "${DO_AERO_FCST}" == "YES" ]] && string="${string} --gocart"
# shellcheck disable=SC2086
source "${EXPDIR}/config.ufs" ${string}

# Get task specific resources
source "${EXPDIR}/config.resources" efcs

# Stochastic physics parameters (only for ensemble forecasts)
if [[ "${CASE}" == "C96" ]] ; then
export DO_SKEB="NO" # SKEB turned off for C96
else
export DO_SKEB="YES" # SKEB turned on for all other resolutions
fi
export SKEB="0.8,-999,-999,-999,-999"
export SKEB_TAU="2.16E4,2.592E5,2.592E6,7.776E6,3.1536E7"
export SKEB_LSCALE="500.E3,1000.E3,2000.E3,2000.E3,2000.E3"
export SKEBNORM=1
export SKEB_NPASS=30
export SKEB_VDOF=5
export DO_SPPT="YES"
export SPPT="0.56,0.28,0.14,0.056,0.028"
export SPPT_TAU="2.16E4,2.592E5,2.592E6,7.776E6,3.1536E7"
export SPPT_LSCALE="500.E3,1000.E3,2000.E3,2000.E3,2000.E3"
export SPPT_LOGIT=".true."
export SPPT_SFCLIMIT=".true."
# OCN options
if (( OCNRES <= 100 )); then
# Ocean stochastic options not supported at 5p00
export DO_OCN_SPPT="YES"
export OCNSPPT="0.8,0.4,0.2,0.08,0.04"
export OCNSPPT_TAU="2.16E4,2.592E5,2.592E6,7.776E6,3.1536E7"
export OCNSPPT_LSCALE="500.E3,1000.E3,2000.E3,2000.E3,2000.E3"
export DO_OCN_PERT_EPBL="YES"
export EPBL="0.8,0.4,0.2,0.08,0.04"
export EPBL_TAU="2.16E4,2.592E5,2.592E6,7.776E6,3.1536E7"
export EPBL_LSCALE="500.E3,1000.E3,2000.E3,2000.E3,2000.E3"
fi

if [[ "${USE_OCN_ENS_PERTURB_FILES:-NO}" == "YES" ]]; then
export ODA_INCUPD="True"
export ODA_TEMPINC_VAR='t_pert'
export ODA_SALTINC_VAR='s_pert'
export ODA_THK_VAR='h_anl'
export ODA_UINC_VAR='u_pert'
export ODA_VINC_VAR='v_pert'
export ODA_INCUPD_NHOURS=0.0
else
export ODA_INCUPD="False"
fi
export restart_interval="${restart_interval_gfs:-12}"

export o3forc_params="McCormack-empirical-sh-ozh"

echo "END: config.efcs"
1 change: 0 additions & 1 deletion parm/config/sfs/config.fcst

This file was deleted.

281 changes: 281 additions & 0 deletions parm/config/sfs/config.fcst
Original file line number Diff line number Diff line change
@@ -0,0 +1,281 @@
#! /usr/bin/env bash

########## config.fcst ##########
# Forecast specific

echo "BEGIN: config.fcst"

export USE_ESMF_THREADING="YES" # Toggle to use ESMF-managed threading or traditional threading in UFSWM
export COPY_FINAL_RESTARTS="NO" # Toggle to copy restarts from the end of GFS/GEFS Run (GDAS is handled seperately)

# Source model specific information that is resolution dependent
string="--fv3 ${CASE}"
[[ "${DO_OCN}" == "YES" ]] && string="${string} --mom6 ${OCNRES}"
[[ "${DO_ICE}" == "YES" ]] && string="${string} --cice6 ${ICERES}"
[[ "${DO_WAVE}" == "YES" ]] && string="${string} --ww3 ${waveGRD// /;}"
[[ "${DO_AERO_FCST}" == "YES" ]] && string="${string} --gocart"
# We are counting on $string being multiple arguments
# shellcheck disable=SC2086
source "${EXPDIR}/config.ufs" ${string}

# Convert comma-separated string into bash array
IFS=', ' read -ra segments <<< "${FCST_SEGMENTS}"
# Determine MIN and MAX based on the forecast segment
export FHMIN=${segments[${FCST_SEGMENT}]}
export FHMAX=${segments[${FCST_SEGMENT}+1]}
# Cap other FH variables at FHMAX for the segment
export FHMIN_WAV=$(( FHMIN > FHMIN_WAV ? FHMIN : FHMIN_WAV ))
export FHMAX_HF=$(( FHMAX_HF_GFS > FHMAX ? FHMAX : FHMAX_HF_GFS ))
export FHMAX_WAV=$(( FHMAX_WAV > FHMAX ? FHMAX : FHMAX_WAV ))
# shellcheck disable=SC2153
export FHOUT=${FHOUT_GFS}
export FHOUT_HF=${FHOUT_HF_GFS}
export FHOUT_OCN=${FHOUT_OCN_GFS}
export FHOUT_ICE=${FHOUT_ICE_GFS}
export FHZER=@FHZER@

# Get task specific resources
source "${EXPDIR}/config.resources" fcst
export domains_stack_size="16000000"


if [[ "${DONST}" == "YES" ]]; then
source "${EXPDIR}/config.nsst"
fi

export esmf_profile=".false."
export esmf_logkind="ESMF_LOGKIND_MULTI_ON_ERROR" #Options: ESMF_LOGKIND_MULTI_ON_ERROR, ESMF_LOGKIND_MULTI, ESMF_LOGKIND_NONE


#######################################################################

export FORECASTSH="${SCRgfs}/exglobal_forecast.sh"
#export FORECASTSH="${SCRgfs}/exglobal_forecast.py" # Temp. while this is worked on
export FCSTEXEC="${NET}_model.x"

#######################################################################
# Model configuration
export TYPE=@TYPE@
export MONO=@MONO@

# Use stratosphere h2o physics
export h2o_phys=".true."

# Options of stratosphere O3 physics reaction coefficients
export new_o3forc="YES"

export gwd_opt=2

# --GFS.v16 uGWD.v0, used for suite FV3_GFS_v16 and UFS p6 etc
# do_ugwp=T: use unified CGWD and OGWD, and turbulent orographic form drag (TOFD)
# do_ugwp=F: use unified CGWD but old OGWD, TOFD is not uded.
if (( gwd_opt == 1 )); then
export knob_ugwp_version=0
export do_ugwp=".false."
export do_tofd=".false."
launch_level=$(echo "${LEVS}/2.35" |bc)
export launch_level
fi


# -- uGWD.v1, for suite FV3_GFS_v17 and FV3_GFS_v17p8b etc
if (( gwd_opt == 2 )); then

#--used for UFS p7 and p8a
#export knob_ugwp_version=1
#export do_ugwp=".false."
#export do_tofd=".false."
#export do_ugwp_v0=".false."
#export do_ugwp_v1=".true."
#export do_ugwp_v0_orog_only=".false."
#export do_ugwp_v0_nst_only=".false."
#export do_gsl_drag_ls_bl=".true."
#export do_gsl_drag_ss=".true."
#export do_gsl_drag_tofd=".true."
#export do_ugwp_v1_orog_only=".false."

#--used for UFS p8
export knob_ugwp_version=1
export do_ugwp=".false."
export do_tofd=".false."
export do_ugwp_v0=".false."
export do_ugwp_v1=".true."
export do_ugwp_v0_orog_only=".false."
export do_ugwp_v0_nst_only=".false."
export do_gsl_drag_ls_bl=".true."
export do_gsl_drag_ss=".false."
export do_gsl_drag_tofd=".true."
export do_gwd_opt_psl=".true."
export do_ugwp_v1_orog_only=".false."
launch_level=$(echo "${LEVS}/2.35" |bc)
export launch_level
fi

# Sponge layer settings
export d2_bg_k1=0.20
export d2_bg_k2=0.04
export dz_min=6
export n_sponge=42

# PBL/turbulance schemes
export hybedmf=".false."
export satmedmf=".true."
export isatmedmf=1
tbf=""
if [[ "${satmedmf}" == ".true." ]]; then tbf="_satmedmf" ; fi

#Convection schemes
export progsigma=".true."
tbp=""
if [[ "${progsigma}" == ".true." ]]; then tbp="_progsigma" ; fi

# Radiation options
if [[ "${DO_AERO_FCST}" == "YES" ]]; then
export IAER=2011 # spectral band mapping method for aerosol optical properties
else
export IAER=1011
fi
export iovr_lw=3 ; #de-correlation length cloud overlap method (Barker, 2008)
export iovr_sw=3 ; #de-correlation length cloud overlap method (Barker, 2008)
export iovr=3 ; #de-correlation length cloud overlap method (Barker, 2008)
export icliq_sw=2 ; #cloud optical coeffs from AER's newer version v3.9-v4.0 for hu and stamnes
export isubc_sw=2
export isubc_lw=2

# RRTMGP radiation scheme
export do_RRTMGP=.false.
export doGP_cldoptics_LUT=.false.
export doGP_lwscat=.false.

# LSM configuration
# NoahMP only
export iopt_sfc="3"
export iopt_trs="2"

# Microphysics configuration
export dnats=0
export cal_pre=".true."
export do_sat_adj=".false."
export random_clds=".true."

case ${imp_physics} in
99) # ZhaoCarr
export ncld=1
export FIELD_TABLE="${PARMgfs}/ufs/fv3/field_table_zhaocarr${tbf}${tbp}"
export nwat=2
;;
6) # WSM6
export ncld=2
export FIELD_TABLE="${PARMgfs}/ufs/fv3/field_table_wsm6${tbf}${tbp}"
export nwat=6
;;
8) # Thompson
export ncld=2
export FIELD_TABLE="${PARMgfs}/ufs/fv3/field_table_thompson_noaero_tke${tbp}"
export nwat=6

export cal_pre=".false."
export random_clds=".false."
export effr_in=".true."
export ltaerosol=".false."
export lradar=".true."
export ttendlim="-999"
export dt_inner=$((DELTIM/2))
export sedi_semi=.true.
if [[ "${sedi_semi}" == .true. ]]; then export dt_inner=${DELTIM} ; fi
if [[ dt_inner -gt 300 ]]; then export dt_inner=300 ; fi
export decfl=10

export hord_mt_nh_nonmono=5
export hord_xx_nh_nonmono=5
export hord_dp_nh_nonmono=-5
export vtdm4_nh_nonmono=0.02
export nord=2
if [[ "${TYPE}" == "nh"* ]]; then
export dddmp=0.1
else
export dddmp=0.
fi
export d4_bg=0.12
;;
11) # GFDL
export ncld=5
export FIELD_TABLE="${PARMgfs}/ufs/fv3/field_table_gfdl${tbf}${tbp}"
export nwat=6
export dnats=1
export cal_pre=".false."
export do_sat_adj=".true."
export random_clds=".false."
export lgfdlmprad=".true."
export effr_in=".true."
export reiflag=2

export hord_mt_nh_nonmono=5
export hord_xx_nh_nonmono=5
export hord_dp_nh_nonmono=-5
export vtdm4_nh_nonmono=0.02
export nord=2
export d4_bg=0.12
if [[ "${TYPE}" == "nh"* ]]; then
export dddmp=0.1
else
export dddmp=0.
fi
;;
*) echo "Unknown microphysics option, ABORT!" ;;
esac

# Stochastic physics
export DO_SPPT="NO"
export DO_SKEB="NO"
export DO_SHUM="NO"
export DO_LAND_PERT="NO"
export DO_OCN_SPPT="NO"
export DO_OCN_PERT_EPBL="NO"

#coupling settings
export cplmode="ufs.frac"
if [[ "${FRAC_GRID:-".true."}" == ".false." ]]; then
export cplmode="ufs.nfrac"
fi
export psm_bc="1"

export min_lakeice="0.15"
export min_seaice=${min_seaice:-"0.15"}
export use_cice_alb=${use_cice_alb:-".false."}

export FSICL="0"
export FSICS="0"

#---------------------------------------------------------------------
# Write more variables to output
if [[ "${REPLAY_ICS:-NO}" == "YES" ]]; then
export DIAG_TABLE="${PARMgfs}/ufs/fv3/diag_table_replay"
else
export DIAG_TABLE="${PARMgfs}/ufs/fv3/diag_table"
fi

# Write gfs restart files to rerun fcst from any break point
export restart_interval=${restart_interval_gfs:-12}

# Turn off dry mass adjustment in GFS
export adjust_dry_mass=".false."

# Write each restart file in 16 small files to save time
if [[ "${CASE}" = C768 ]]; then
export io_layout="4,4"
else
export io_layout="1,1"
fi

export reforecast=@reforecast@
# Remember config.efcs will over-ride these values for ensemble forecasts
# if these variables are re-defined there.
# Otherwise, the ensemble forecast will inherit from config.fcst

# Which ozone parameters to use
# McCormack-empirical-sh-ozh is empirically-corrected to include ozone hole
# McCormack is from the 2006 paper as updated for the 2015 implementation
export o3forc_params="McCormack-empirical-sh-ozh"

echo "END: config.fcst"
6 changes: 5 additions & 1 deletion ush/forecast_predet.sh
Original file line number Diff line number Diff line change
Expand Up @@ -499,7 +499,11 @@ FV3_predet(){
fi

if [[ "${new_o3forc:-YES}" == "YES" ]]; then
O3FORC="ozprdlos_2015_new_sbuvO3_tclm15_nuchem.f77"
if [[ "${o3forc_params:-McCormack}" == "McCormack-empirical-sh-ozh" ]]; then
O3FORC="ozprdlos_2015_new_sbuvO3_tclm15_nuchem_zhozhvlogp.f77"
else
O3FORC="ozprdlos_2015_new_sbuvO3_tclm15_nuchem.f77"
fi
else
O3FORC="global_o3prdlos.f77"
fi
Expand Down