From 7f806b04da517e62c323c03ea0bd064986782ea4 Mon Sep 17 00:00:00 2001 From: "Chan-Hoo.Jeon-NOAA" <60152248+chan-hoo@users.noreply.github.com> Date: Tue, 31 Dec 2024 10:30:54 -0500 Subject: [PATCH] Add New Coupling Option of LND (Noah-MP) and ATM (FV3) (#171) * update hash of ufs-weather-model * add atm-land compile option * fix camke_setting issue * change if condition * add initial templates for ATML * make use common templates * merge model_configure templates * fix missing change * initial setup script * update setup script * fix fill_jinja issue on setup script * change launch script to template * fix missing parms in templates * make hpc parm calculated in script * fix missing change * change name ncores * add missinog max cores * fix format issue in ufs.configure * add confgi.atml.yaml * update script to add atml option * remove tstub and tpath * remove atm_model from config * fix mismatch in script * fix coldstart issue on forecast * add ufs_utils for cold start IC * update module files * add fcst_ic task * change template for chgres_cube * fix namelist issue on chgres_cube * fix missing filed_table in forecast * change hash of ufs_utils * update atml scripts * change file name and err_exit * add missing change * update scripts * fix ctest failure * fix bugs in forecast script * change file path for forecast we2e * add memory to fcst_ics * update pr template * add ioda convert capability to prep_obs * fix typos * modify ioda conv script to match time stamp with jedi * add detect_platform to setup script * set time adjustment flexible * fix missing global attributes in ioda conv script * fix LND coldstart issues * fix ctest failure * update forecast script for atml * fix restart file name issue * add obs plot * update restart plot part * turn off checksum for restart of ufs_model * add atml warm start sample * add python script to plot sfc_data * fix python issues on hera * move jedi_py_ver * increase wtime of prep_obs for orion --- .github/pull_request_template.md | 1 + .gitignore | 10 +- .gitmodules | 5 + README.md | 8 +- jobs/JLANDDA_ANALYSIS | 9 +- jobs/JLANDDA_FCST_IC | 105 ++ jobs/JLANDDA_FORECAST | 10 +- jobs/JLANDDA_PLOT_STATS | 5 - jobs/JLANDDA_POST_ANAL | 4 - jobs/JLANDDA_PREP_OBS | 8 +- jobs/JLANDDA_PRE_ANAL | 4 - modulefiles/build_container_intel.lua | 2 +- modulefiles/build_hera_intel.lua | 10 +- modulefiles/build_hercules_intel.lua | 10 +- modulefiles/build_orion_intel.lua | 10 +- modulefiles/build_singularity_intel.lua | 2 +- modulefiles/tasks/hera/task.analysis.lua | 7 +- modulefiles/tasks/hera/task.fcst_ic.lua | 20 + modulefiles/tasks/hera/task.prep_obs.lua | 10 +- parm/check_release_outputs.sh | 41 - .../config_samples/config.ATML.coldstart.yaml | 38 + .../config_samples/config.ATML.warmstart.yaml | 38 + parm/config_samples/config.LND.coldstart.yaml | 25 + parm/config_samples/config.LND.warmstart.yaml | 25 + parm/jedi/letkfoi_snow.yaml | 4 +- parm/parm_xml_hera.yaml | 7 - parm/parm_xml_hercules.yaml | 7 - parm/parm_xml_orion.yaml | 7 - parm/parm_xml_singularity.yaml | 7 - parm/setup_wflow_env.py | 331 +++++ parm/templates/template.ATML.diag_table | 313 ++++ parm/templates/template.ATML.fd_ufs.yaml | 1283 +++++++++++++++++ parm/templates/template.ATML.field_table | 65 + .../template.ATML.input.nml.FV3_GFS_v17_p8 | 406 ++++++ ...ate.data_table => template.LND.data_table} | 0 ...datm.streams => template.LND.datm.streams} | 0 ...{template.datm_in => template.LND.datm_in} | 0 ...ate.diag_table => template.LND.diag_table} | 0 ...e.fd_ufs.yaml => template.LND.fd_ufs.yaml} | 0 ...plate.input.nml => template.LND.input.nml} | 0 parm/templates/template.chgres_cube | 19 + parm/templates/template.coupler.res | 2 +- parm/templates/template.jedi2ufs | 2 +- parm/templates/template.land_analysis.yaml | 368 +++-- .../template.launch_rocoto_wflow.sh} | 9 +- parm/templates/template.model_configure | 32 +- parm/templates/template.ufs.configure | 16 +- parm/templates/template.ufs2jedi | 2 +- scripts/exlandda_analysis.sh | 217 +-- scripts/exlandda_fcst_ic.sh | 111 ++ scripts/exlandda_forecast.sh | 383 ++++- scripts/exlandda_plot_stats.sh | 175 +-- scripts/exlandda_post_anal.sh | 29 +- scripts/exlandda_pre_anal.sh | 26 +- scripts/exlandda_prep_obs.sh | 85 +- sorc/CMakeLists.txt | 136 +- sorc/UFS_UTILS.fd | 1 + sorc/app_build.sh | 60 +- sorc/cmake/compiler_flags_Cray_Fortran.cmake | 56 - sorc/cmake/compiler_flags_GNU_CXX.cmake | 45 - sorc/cmake/compiler_flags_GNU_Fortran.cmake | 49 - sorc/cmake/compiler_flags_Intel_Fortran.cmake | 45 - sorc/cmake/compiler_flags_XL_Fortran.cmake | 56 - sorc/cmake/landda_compiler_flags.cmake | 27 - sorc/test/apply_jedi_incr.sh | 4 +- sorc/test/ci/Dockerfile | 2 +- sorc/test/create_bkg_ens.sh | 1 + sorc/test/hera_ctest.sh | 1 + sorc/test/parm/data_table | 1 + sorc/test/parm/datm.streams | 61 + sorc/test/parm/datm_in | 15 + sorc/test/parm/diag_table | 284 ++++ sorc/test/parm/fd_ufs.yaml | 1266 ++++++++++++++++ sorc/test/parm/input.nml | 28 + sorc/test/parm/model_configure | 9 + sorc/test/parm/noahmptable.tbl | 782 ++++++++++ sorc/test/parm/rpointer.atm | 1 + sorc/test/parm/rpointer.cpl | 1 + sorc/test/parm/ufs.configure | 4 +- sorc/test/run_ufs_datm_lnd.sh | 125 +- sorc/test/runtime_vars.sh | 10 +- sorc/test/test_letkfoi_snowda.sh | 9 +- sorc/ufs_model.fd | 2 +- ush/ghcn_snod2ioda.py | 269 ++++ ush/hofx_analysis_stats.py | 21 +- ush/plot_analysis_timehistory.py | 6 +- ush/plot_comp_sfc_data.py | 305 ++++ ush/plot_forecast_restart.py | 12 +- ush/plot_obs_ghcn.py | 208 +++ versions/build.ver_hera | 4 + versions/build.ver_hercules | 4 + versions/build.ver_orion | 4 + versions/run.ver_hera | 2 + versions/run.ver_hercules | 2 + versions/run.ver_orion | 2 + 95 files changed, 7209 insertions(+), 1024 deletions(-) create mode 100755 jobs/JLANDDA_FCST_IC create mode 100644 modulefiles/tasks/hera/task.fcst_ic.lua delete mode 100755 parm/check_release_outputs.sh create mode 100644 parm/config_samples/config.ATML.coldstart.yaml create mode 100644 parm/config_samples/config.ATML.warmstart.yaml create mode 100644 parm/config_samples/config.LND.coldstart.yaml create mode 100644 parm/config_samples/config.LND.warmstart.yaml delete mode 100644 parm/parm_xml_hera.yaml delete mode 100644 parm/parm_xml_hercules.yaml delete mode 100644 parm/parm_xml_orion.yaml delete mode 100644 parm/parm_xml_singularity.yaml create mode 100755 parm/setup_wflow_env.py create mode 100644 parm/templates/template.ATML.diag_table create mode 100644 parm/templates/template.ATML.fd_ufs.yaml create mode 100644 parm/templates/template.ATML.field_table create mode 100644 parm/templates/template.ATML.input.nml.FV3_GFS_v17_p8 rename parm/templates/{template.data_table => template.LND.data_table} (100%) rename parm/templates/{template.datm.streams => template.LND.datm.streams} (100%) rename parm/templates/{template.datm_in => template.LND.datm_in} (100%) rename parm/templates/{template.diag_table => template.LND.diag_table} (100%) rename parm/templates/{template.fd_ufs.yaml => template.LND.fd_ufs.yaml} (100%) rename parm/templates/{template.input.nml => template.LND.input.nml} (100%) create mode 100644 parm/templates/template.chgres_cube rename parm/{launch_rocoto_wflow.sh => templates/template.launch_rocoto_wflow.sh} (94%) create mode 100755 scripts/exlandda_fcst_ic.sh create mode 160000 sorc/UFS_UTILS.fd delete mode 100755 sorc/cmake/compiler_flags_Cray_Fortran.cmake delete mode 100755 sorc/cmake/compiler_flags_GNU_CXX.cmake delete mode 100755 sorc/cmake/compiler_flags_GNU_Fortran.cmake delete mode 100755 sorc/cmake/compiler_flags_Intel_Fortran.cmake delete mode 100755 sorc/cmake/compiler_flags_XL_Fortran.cmake delete mode 100755 sorc/cmake/landda_compiler_flags.cmake create mode 100644 sorc/test/parm/data_table create mode 100644 sorc/test/parm/datm.streams create mode 100644 sorc/test/parm/datm_in create mode 100644 sorc/test/parm/diag_table create mode 100644 sorc/test/parm/fd_ufs.yaml create mode 100644 sorc/test/parm/input.nml create mode 100644 sorc/test/parm/model_configure create mode 100644 sorc/test/parm/noahmptable.tbl create mode 100644 sorc/test/parm/rpointer.atm create mode 100644 sorc/test/parm/rpointer.cpl create mode 100755 ush/ghcn_snod2ioda.py create mode 100755 ush/plot_comp_sfc_data.py create mode 100755 ush/plot_obs_ghcn.py diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 050faa32..ea823515 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -9,6 +9,7 @@ Provide a detailed description of what this PR does. What bug does it fix, or wh ## Subcomponents involved: - [ ] apply_incr.fd (NOAA-PSL/land-apply_jedi_incr) - [ ] ufs_model.fd (ufs-community/ufs-weather-model) +- [ ] UFS_UTILS.fd (ufs-community/UFS_UTILS) - [ ] none ## Linked PR's and Issues: diff --git a/.gitignore b/.gitignore index ee86d047..cf82bfbc 100644 --- a/.gitignore +++ b/.gitignore @@ -6,14 +6,8 @@ sorc/conda/ sorc/lib/ sorc/lib64 parm/conda_loc -parm/*.xml -parm/*.db -parm/*.out -parm/*.err -parm/*.log -parm/parm_xml.yaml -parm/land_analysis.yaml -parm/log.* +parm/config.yaml +ush/__pycache__/ __pycache__ *.swp diff --git a/.gitmodules b/.gitmodules index f0489a28..43442a5f 100644 --- a/.gitmodules +++ b/.gitmodules @@ -2,8 +2,13 @@ path = sorc/ufs_model.fd url = https://github.com/ufs-community/ufs-weather-model.git ignore = dirty + [submodule "sorc/apply_incr.fd"] path = sorc/apply_incr.fd url = https://github.com/NOAA-PSL/land-apply_jedi_incr.git ignore = dirty +[submodule "sorc/UFS_UTILS.fd"] + path = sorc/UFS_UTILS.fd + url = https://github.com/ufs-community/UFS_UTILS.git + ignore = dirty diff --git a/README.md b/README.md index b5003f38..78f0f7cb 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,12 @@ -# UFS Offline Land Data Assimilation System +# UFS Land Data Assimilation System The Unified Forecast System (UFS) is a community-based, coupled, comprehensive Earth modeling system. It is designed to be the source system for NOAA's operational numerical weather prediction applications while enabling research, development, and contribution opportunities for the broader Weather Enterprise. For more information about the UFS, visit the UFS Portal at https://ufs.epic.noaa.gov/. -The UFS includes [multiple applications](https://ufs.epic.noaa.gov/applications/) that support different forecast durations and spatial domains. This repository hosts the source code for the UFS Land Data Assimilation (DA) System. Land DA is an offline version of the Noah Multi-Physics (Noah-MP) land surface model (LSM) used in the UFS Weather Model (WM). Its data assimilation framework uses the Joint Effort for Data assimilation Integration (JEDI) software stack, which includes the Object-Oriented Prediction System (OOPS) for the data assimilation algorithm, the Interface for Observation Data Access (IODA) for observation formatting and processing, and the Unified Forward Operator (UFO) for comparing model forecasts and observations. +The UFS includes [multiple applications](https://ufs.epic.noaa.gov/applications/) that support different forecast durations and spatial domains. This repository hosts the source code for the UFS Land Data Assimilation (DA) System. Land DA applies the Noah Multi-Physics (Noah-MP) land surface model (LSM) of the UFS Weather Model (WM) as the key component. Its data assimilation framework uses the Joint Effort for Data assimilation Integration (JEDI) software stack, which includes the Object-Oriented Prediction System (OOPS) for the data assimilation algorithm, the Interface for Observation Data Access (IODA) for observation formatting and processing, and the Unified Forward Operator (UFO) for comparing model forecasts and observations. -The offline Noah-MP LSM is a standalone, uncoupled model used to execute land surface simulations. In this traditional uncoupled mode, near-surface atmospheric forcing data is required as input forcing. This LSM simulates soil moisture (both liquid and frozen), soil temperature, skin temperature, snow depth, snow water equivalent (SWE), snow density, canopy water content, and the energy flux and water flux terms of the surface energy balance and surface water balance. Its data assimilation framework applies the Local Ensemble Transform Kalman Filter-Optimal Interpolation (LETKF-OI) algorithm to combine the state-dependent background error derived from an ensemble forecast with the observations and their corresponding uncertainties to produce an analysis ensemble (Hunt et al., 2007). +The Noah-MP LSM is used to execute land surface simulations. A near-surface atmospheric forcing data is required as input forcing. This LSM simulates soil moisture (both liquid and frozen), soil temperature, skin temperature, snow depth, snow water equivalent (SWE), snow density, canopy water content, and the energy flux and water flux terms of the surface energy balance and surface water balance. Its data assimilation framework applies the Local Ensemble Transform Kalman Filter-Optimal Interpolation (LETKF-OI) algorithm to combine the state-dependent background error derived from an ensemble forecast with the observations and their corresponding uncertainties to produce an analysis ensemble (Hunt et al., 2007). -The Noah-MP LSM has evolved through community efforts to pursue and refine a modern-era LSM suitable for use in the National Centers for Environmental Prediction (NCEP) operational weather and climate prediction models. This collaborative effort continues with participation from entities such as NCAR, NCEP, NASA, and university groups. The development branch of the Land DA System is continually evolving as the system undergoes open development. The latest Land DA release (v1.2.0) represents a snapshot of this continuously evolving system. +The Noah-MP LSM has evolved through community efforts to pursue and refine a modern-era LSM suitable for use in the National Centers for Environmental Prediction (NCEP) operational weather and climate prediction models. This collaborative effort continues with participation from entities such as NCAR, NCEP, NASA, and university groups. The development branch of the Land DA System is continually evolving as the system undergoes open development. The latest Land DA release (v2.0.0) represents a snapshot of this continuously evolving system. The Land DA System User's Guide associated with the development branch is at: https://land-da-workflow.readthedocs.io/en/develop/, while the guide specific to the Land DA v2.0.0 release can be found at: https://land-da-workflow.readthedocs.io/en/release-public-v2.0.0/. Users may download data for use with the most recent release from the [Land DA data bucket](https://registry.opendata.aws/noaa-ufs-land-da/). The [Land DA Docker Hub](https://hub.docker.com/r/noaaepic/ubuntu22.04-intel21.10-landda) hosts Land DA containers. These containers package the Land DA System together with all its software dependencies for an easier experience building and running Land DA. diff --git a/jobs/JLANDDA_ANALYSIS b/jobs/JLANDDA_ANALYSIS index 5dbe8e14..14036b7d 100755 --- a/jobs/JLANDDA_ANALYSIS +++ b/jobs/JLANDDA_ANALYSIS @@ -73,15 +73,14 @@ fi mkdir -p ${COMOUT} export COMOUThofx="${COMOUThofx:-${COMOUT}/hofx}" mkdir -p ${COMOUThofx} +export COMOUTplot="${COMOUTplot:-${COMOUT}/plot}" +mkdir -p ${COMOUTplot} # Create a teomporary share directory -export DATA_SHARE="${DATA_SHARE:-${DATAROOT}/DATA_SHARE/${PDY}}" -mkdir -p ${DATA_SHARE} +export DATA_RESTART="${DATA_RESTART:-${DATAROOT}/DATA_SHARE/RESTART}" +mkdir -p ${DATA_RESTART} export DATA_HOFX="${DATA_HOFX:-${DATAROOT}/DATA_SHARE/hofx}" mkdir -p ${DATA_HOFX} - -# Set other dates -export PTIME=$($NDATE -24 $PDY$cyc) # #----------------------------------------------------------------------- # diff --git a/jobs/JLANDDA_FCST_IC b/jobs/JLANDDA_FCST_IC new file mode 100755 index 00000000..f7c722db --- /dev/null +++ b/jobs/JLANDDA_FCST_IC @@ -0,0 +1,105 @@ +#!/bin/bash + +date +export PS4='+ $SECONDS + ' +set -xue +# +#----------------------------------------------------------------------- +# +# Set the NCO standard environment variables (Table 1, pp.4) +# +#----------------------------------------------------------------------- +# +export USHlandda="${HOMElandda}/ush" +export EXEClandda="${HOMElandda}/exec" +export PARMlandda="${HOMElandda}/parm" +export FIXlandda="${HOMElandda}/fix" +export SCRIPTSlandda="${HOMElandda}/scripts" +# +#----------------------------------------------------------------------- +# +# Define job and jobid by default for rocoto +# +#----------------------------------------------------------------------- +# +WORKFLOW_MANAGER="${WORKFLOW_MANAGER:-rocoto}" +if [ "${WORKFLOW_MANAGER}" = "rocoto" ]; then + if [ "${SCHED}" = "slurm" ]; then + job=${SLURM_JOB_NAME} + pid=${SLURM_JOB_ID} + elif [ "${SCHED}" = "pbspro" ]; then + job=${PBS_JOBNAME} + pid=${PBS_JOBID} + else + job="task" + pid=$$ + fi + jobid="${job}.${PDY}${cyc}.${pid}" +fi +# +#----------------------------------------------------------------------- +# +# Create a temp working directory (DATA) and cd into it. +# +#----------------------------------------------------------------------- +# +export DATA="${DATA:-${DATAROOT}/${jobid}}" +mkdir -p $DATA +cd $DATA +# +#----------------------------------------------------------------------- +# +# Define NCO environment variables and set COM type definitions. +# +#----------------------------------------------------------------------- +# +export NET="${NET:-landda}" +export RUN="${RUN:-landda}" + +# Run setpdy to initialize PDYm and PDYp variables +export cycle="${cycle:-t${cyc}z}" +setpdy.sh +. ./PDY + +[[ "$WORKFLOW_MANAGER" = "rocoto" ]] && export COMROOT=$COMROOT +if [ "${MACHINE}" = "WCOSS2" ]; then + export COMIN="${COMIN:-$(compath.py -o ${NET}/${model_ver}/${RUN}.${PDY})}" + export COMOUT="${COMOUT:-$(compath.py -o ${NET}/${model_ver}/${RUN}.${PDY})}" + export COMINgdas="${COMINgdas:-$(compath.py ${envir}/gdas/${gdas_ver})}" + export COMINgfs="${COMINgfs:-$(compath.py ${envir}/gfs/${gfs_ver})}" +else + export COMIN="${COMIN:-${COMROOT}/${NET}/${model_ver}/${RUN}.${PDY}}" + export COMOUT="${COMOUT:-${COMROOT}/${NET}/${model_ver}/${RUN}.${PDY}}" + export COMINgdas="${COMINgdas:-${FIXlandda}/DATA_gdas}" + export COMINgfs="${COMINgfs:-${FIXlandda}/DATA_gfs}" +fi + +mkdir -p ${COMOUT} + +# +#----------------------------------------------------------------------- +# +# Call the ex-script for this J-job. +# +#----------------------------------------------------------------------- +# +export pgmout="${DATA}/OUTPUT.$$" +env + +${SCRIPTSlandda}/exlandda_fcst_ic.sh +export err=$?; err_chk + +if [ -e "$pgmout" ]; then + cat $pgmout +fi +# +#----------------------------------------------------------------------- +# +# Whether or not working directory DATA should be kept. +# +#----------------------------------------------------------------------- +# +if [ "${KEEPDATA}" = "NO" ]; then + rm -rf ${DATA} +fi +date diff --git a/jobs/JLANDDA_FORECAST b/jobs/JLANDDA_FORECAST index bc079b91..1472b414 100755 --- a/jobs/JLANDDA_FORECAST +++ b/jobs/JLANDDA_FORECAST @@ -74,14 +74,16 @@ fi mkdir -p ${COMOUT} +# RESTART directory in COMOUT +mkdir -p ${COMOUT}/RESTART +# plot directory in COMOUT +export COMOUTplot="${COMOUTplot:-${COMOUT}/plot}" +mkdir -p ${COMOUTplot} + # Create a teomporary share directory -export DATA_SHARE="${DATA_SHARE:-${DATAROOT}/DATA_SHARE/${PDY}}" -mkdir -p ${DATA_SHARE} export DATA_RESTART="${DATA_RESTART:-${DATAROOT}/DATA_SHARE/RESTART}" mkdir -p ${DATA_RESTART} -# Set other dates -export NTIME=$($NDATE 24 $PDY$cyc) # #----------------------------------------------------------------------- # diff --git a/jobs/JLANDDA_PLOT_STATS b/jobs/JLANDDA_PLOT_STATS index 73fb19b6..1152159c 100755 --- a/jobs/JLANDDA_PLOT_STATS +++ b/jobs/JLANDDA_PLOT_STATS @@ -75,13 +75,8 @@ export COMOUTplot="${COMOUTplot:-${COMOUT}/plot}" mkdir -p ${COMOUTplot} # Create a teomporary share directory -export DATA_SHARE="${DATA_SHARE:-${DATAROOT}/DATA_SHARE/${PDY}}" -mkdir -p ${DATA_SHARE} export DATA_HOFX="${DATA_HOFX:-${DATAROOT}/DATA_SHARE/hofx}" mkdir -p ${DATA_HOFX} - -# Set other dates -export NTIME=$($NDATE 24 $PDY$cyc) # #----------------------------------------------------------------------- # diff --git a/jobs/JLANDDA_POST_ANAL b/jobs/JLANDDA_POST_ANAL index 5ba01440..187c6f44 100755 --- a/jobs/JLANDDA_POST_ANAL +++ b/jobs/JLANDDA_POST_ANAL @@ -73,13 +73,9 @@ fi mkdir -p ${COMOUT} # Create a teomporary share directory -export DATA_SHARE="${DATA_SHARE:-${DATAROOT}/DATA_SHARE/${PDY}}" -mkdir -p ${DATA_SHARE} export DATA_RESTART="${DATA_RESTART:-${DATAROOT}/DATA_SHARE/RESTART}" mkdir -p ${DATA_RESTART} -# Set other dates -export NTIME=$($NDATE 24 $PDY$cyc) # #----------------------------------------------------------------------- # diff --git a/jobs/JLANDDA_PREP_OBS b/jobs/JLANDDA_PREP_OBS index bcd8a267..0e2807ef 100755 --- a/jobs/JLANDDA_PREP_OBS +++ b/jobs/JLANDDA_PREP_OBS @@ -73,13 +73,9 @@ fi mkdir -p ${COMOUT} export COMOUTobs=${COMOUTobs:-${COMOUT}/obs} mkdir -p ${COMOUTobs} +export COMOUTplot="${COMOUTplot:-${COMOUT}/plot}" +mkdir -p ${COMOUTplot} -# Create a teomporary share directory -export DATA_SHARE="${DATA_SHARE:-${DATAROOT}/DATA_SHARE/${PDY}}" -mkdir -p ${DATA_SHARE} - -# Set other dates -export PTIME=$($NDATE -24 $PDY$cyc) # #----------------------------------------------------------------------- # diff --git a/jobs/JLANDDA_PRE_ANAL b/jobs/JLANDDA_PRE_ANAL index a295fe25..9de219d5 100755 --- a/jobs/JLANDDA_PRE_ANAL +++ b/jobs/JLANDDA_PRE_ANAL @@ -73,13 +73,9 @@ fi mkdir -p ${COMOUT} # Create a teomporary share directory -export DATA_SHARE="${DATA_SHARE:-${DATAROOT}/DATA_SHARE/${PDY}}" -mkdir -p ${DATA_SHARE} export DATA_RESTART="${DATA_RESTART:-${DATAROOT}/DATA_SHARE/RESTART}" mkdir -p ${DATA_RESTART} -# Set other dates -export PTIME=$($NDATE -24 $PDY$cyc) # #----------------------------------------------------------------------- # diff --git a/modulefiles/build_container_intel.lua b/modulefiles/build_container_intel.lua index f7c0036d..d34ea536 100644 --- a/modulefiles/build_container_intel.lua +++ b/modulefiles/build_container_intel.lua @@ -71,5 +71,5 @@ setenv("CC", "mpiicc") setenv("CXX", "mpiicpc") setenv("FC", "mpiifort") -setenv("JEDI_INSTALL", pathJoin(os.getenv("EPICHOME"),"")) +setenv("JEDI_PATH", pathJoin(os.getenv("EPICHOME"),"")) diff --git a/modulefiles/build_hera_intel.lua b/modulefiles/build_hera_intel.lua index a4a9d938..b6bd692f 100644 --- a/modulefiles/build_hera_intel.lua +++ b/modulefiles/build_hera_intel.lua @@ -32,6 +32,12 @@ load(pathJoin("w3emc", w3emc_ver)) load(pathJoin("gftl-shared", gftl_shared_ver)) load(pathJoin("mapl", mapl_ver)) load(pathJoin("scotch", scotch_ver)) + +load(pathJoin("nemsio", nemsio_ver)) +load(pathJoin("sfcio", sfcio_ver)) +load(pathJoin("sigio", sigio_ver)) +load(pathJoin("nccmp", nccmp_ver)) + load(pathJoin("prod_util", prod_util_ver)) load(pathJoin("ufs-pyenv", ufs_pyenv_ver)) @@ -40,5 +46,5 @@ setenv("CXX", "mpiicpc") setenv("FC", "mpiifort") setenv("CMAKE_Platform", "hera.intel") -setenv("EPICHOME", "/scratch2/NAGAPE/epic/UFS_Land-DA_Dev") -setenv("JEDI_INSTALL", "/scratch2/NAGAPE/epic/UFS_Land-DA_Dev/jedi_v7") +setenv("EPICHOME", "/scratch2/NAGAPE/epic/UFS_Land-DA_v2.1") +setenv("JEDI_PATH", "/scratch2/NAGAPE/epic/UFS_Land-DA_v2.1/jedi_v7_ic") diff --git a/modulefiles/build_hercules_intel.lua b/modulefiles/build_hercules_intel.lua index b9bcd753..b6d871d0 100644 --- a/modulefiles/build_hercules_intel.lua +++ b/modulefiles/build_hercules_intel.lua @@ -32,6 +32,12 @@ load(pathJoin("w3emc", w3emc_ver)) load(pathJoin("gftl-shared", gftl_shared_ver)) load(pathJoin("mapl", mapl_ver)) load(pathJoin("scotch", scotch_ver)) + +load(pathJoin("nemsio", nemsio_ver)) +load(pathJoin("sfcio", sfcio_ver)) +load(pathJoin("sigio", sigio_ver)) +load(pathJoin("nccmp", nccmp_ver)) + load(pathJoin("prod_util", prod_util_ver)) load(pathJoin("ufs-pyenv", ufs_pyenv_ver)) @@ -43,5 +49,5 @@ setenv("CXX", "mpiicpc") setenv("FC", "mpiifort") setenv("CMAKE_Platform", "hercules.intel") -setenv("EPICHOME", "/work/noaa/epic/UFS_Land-DA_Dev") -setenv("JEDI_INSTALL", "/work/noaa/epic/UFS_Land-DA_Dev/jedi_v7_hercules") +setenv("EPICHOME", "/work/noaa/epic/UFS_Land-DA_v2.1") +setenv("JEDI_PATH", "/work/noaa/epic/UFS_Land-DA_v2.1/jedi_v7_ic_hercules") diff --git a/modulefiles/build_orion_intel.lua b/modulefiles/build_orion_intel.lua index 2d95b862..7662ff69 100644 --- a/modulefiles/build_orion_intel.lua +++ b/modulefiles/build_orion_intel.lua @@ -32,6 +32,12 @@ load(pathJoin("w3emc", w3emc_ver)) load(pathJoin("gftl-shared", gftl_shared_ver)) load(pathJoin("mapl", mapl_ver)) load(pathJoin("scotch", scotch_ver)) + +load(pathJoin("nemsio", nemsio_ver)) +load(pathJoin("sfcio", sfcio_ver)) +load(pathJoin("sigio", sigio_ver)) +load(pathJoin("nccmp", nccmp_ver)) + load(pathJoin("prod_util", prod_util_ver)) load(pathJoin("ufs-pyenv", ufs_pyenv_ver)) @@ -43,5 +49,5 @@ setenv("CXX", "mpiicpc") setenv("FC", "mpiifort") setenv("CMAKE_Platform", "orion.intel") -setenv("EPICHOME", "/work/noaa/epic/UFS_Land-DA_Dev") -setenv("JEDI_INSTALL", "/work/noaa/epic/UFS_Land-DA_Dev/jedi_v7_stack1.6") +setenv("EPICHOME", "/work/noaa/epic/UFS_Land-DA_v2.1") +setenv("JEDI_PATH", "/work/noaa/epic/UFS_Land-DA_v2.1/jedi_v7_ic_orion") diff --git a/modulefiles/build_singularity_intel.lua b/modulefiles/build_singularity_intel.lua index 37d362c5..05de9b1a 100644 --- a/modulefiles/build_singularity_intel.lua +++ b/modulefiles/build_singularity_intel.lua @@ -100,6 +100,6 @@ setenv("CC", "mpiicc") setenv("CXX", "mpiicpc") setenv("FC", "mpiifort") -setenv("JEDI_INSTALL", pathJoin(os.getenv("EPICHOME"),"")) +setenv("JEDI_PATH", pathJoin(os.getenv("EPICHOME"),"")) whatis("Description: UFS build environment") diff --git a/modulefiles/tasks/hera/task.analysis.lua b/modulefiles/tasks/hera/task.analysis.lua index 22b031e9..7763e6cd 100644 --- a/modulefiles/tasks/hera/task.analysis.lua +++ b/modulefiles/tasks/hera/task.analysis.lua @@ -1,13 +1,16 @@ -prepend_path("MODULEPATH", os.getenv("modulepath_spack_stack")) +prepend_path("MODULEPATH", os.getenv("modulepath_spack_stack_unienv")) load(pathJoin("stack-intel", stack_intel_ver)) load(pathJoin("stack-intel-oneapi-mpi", stack_intel_oneapi_mpi_ver)) load(pathJoin("stack-python", stack_python_ver)) load(pathJoin("prod_util", prod_util_ver)) - +load(pathJoin("py-cartopy", py_cartopy_ver)) load(pathJoin("py-jinja2", py_jinja2_ver)) +load(pathJoin("py-matplotlib", py_matplotlib_ver)) load(pathJoin("py-netcdf4", py_netcdf4_ver)) load(pathJoin("py-numpy", py_numpy_ver)) load(pathJoin("py-pyyaml", py_pyyaml_ver)) +load(pathJoin("py-scipy", py_scipy_ver)) +load(pathJoin("py-xarray", py_xarray_ver)) diff --git a/modulefiles/tasks/hera/task.fcst_ic.lua b/modulefiles/tasks/hera/task.fcst_ic.lua new file mode 100644 index 00000000..6a06e9b8 --- /dev/null +++ b/modulefiles/tasks/hera/task.fcst_ic.lua @@ -0,0 +1,20 @@ +prepend_path("MODULEPATH", os.getenv("modulepath_spack_stack")) + +load(pathJoin("stack-intel", stack_intel_ver)) +load(pathJoin("stack-intel-oneapi-mpi", stack_intel_oneapi_mpi_ver)) +load(pathJoin("stack-python", stack_python_ver)) + +load(pathJoin("jasper", jasper_ver)) +load(pathJoin("hdf5", hdf5_ver)) +load(pathJoin("netcdf-c", netcdf_c_ver)) +load(pathJoin("netcdf-fortran", netcdf_fortran_ver)) +load(pathJoin("parallelio", parallelio_ver)) +load(pathJoin("esmf", esmf_ver)) +load(pathJoin("g2", g2_ver)) +load(pathJoin("prod_util", prod_util_ver)) + +load(pathJoin("py-jinja2", py_jinja2_ver)) +load(pathJoin("py-netcdf4", py_netcdf4_ver)) +load(pathJoin("py-numpy", py_numpy_ver)) +load(pathJoin("py-pyyaml", py_pyyaml_ver)) + diff --git a/modulefiles/tasks/hera/task.prep_obs.lua b/modulefiles/tasks/hera/task.prep_obs.lua index 4f16978f..a287714b 100644 --- a/modulefiles/tasks/hera/task.prep_obs.lua +++ b/modulefiles/tasks/hera/task.prep_obs.lua @@ -1,7 +1,15 @@ -prepend_path("MODULEPATH", os.getenv("modulepath_spack_stack")) +prepend_path("MODULEPATH", os.getenv("modulepath_spack_stack_unienv")) load(pathJoin("stack-intel", stack_intel_ver)) load(pathJoin("stack-intel-oneapi-mpi", stack_intel_oneapi_mpi_ver)) load(pathJoin("stack-python", stack_python_ver)) load(pathJoin("prod_util", prod_util_ver)) + +load(pathJoin("py-cartopy", py_cartopy_ver)) +load(pathJoin("py-matplotlib", py_matplotlib_ver)) +load(pathJoin("py-netcdf4", py_netcdf4_ver)) +load(pathJoin("py-numpy", py_numpy_ver)) +load(pathJoin("py-pandas", py_pandas_ver)) +load(pathJoin("py-pyyaml", py_pyyaml_ver)) + diff --git a/parm/check_release_outputs.sh b/parm/check_release_outputs.sh deleted file mode 100755 index e82b1f32..00000000 --- a/parm/check_release_outputs.sh +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/sh - -# get OUTDIR -export SETTINGS_FILE=${1:-"settings_DA_cycle_gdas"} -source ./${SETTINGS_FILE} - -export TEST_BASEDIR=${TEST_BASEDIR:-${EPICTESTS}} - -function run_comp(){ - echo "testing ${state} on ${test_date}" - cmp ${OUTDIR}/mem000/restarts/vector/ufs_land_restart_${state}.${test_date}.nc ${TEST_BASEDIR}/ufs_land_restart_${state}.${test_date}.nc - - if [[ $? != 0 ]]; then - echo TEST FAILED - echo "$test_date $state are different" - exit 99 - fi -} - -start_date=${STARTDATE::8} -start_hour=${STARTDATE:8} -end_date=${ENDDATE::8} - - -while [[ $start_date != $end_date ]]; do - test_date=$(date -d "$start_date $start_hour" +"%Y-%m-%d_%H-%M-%S") - state='anal' - run_comp - - # check back files for this date - test_date=$(date -d "$start_date $start_hour + 1 day" +"%Y-%m-%d_%H-%M-%S") - state='back' - run_comp - - # Update start date formatted var - start_date=$(date -d "$start_date + 1 day" +%Y%m%d) -done - -echo "TEST PASSED" - -exit diff --git a/parm/config_samples/config.ATML.coldstart.yaml b/parm/config_samples/config.ATML.coldstart.yaml new file mode 100644 index 00000000..75626bb9 --- /dev/null +++ b/parm/config_samples/config.ATML.coldstart.yaml @@ -0,0 +1,38 @@ +account: epic +app: ATML +atm_io_layout_x: 1 +atm_io_layout_y: 1 +atm_layout_x: 2 +atm_layout_y: 4 +coldstart: 'YES' +coupler_calendar: 3 +date_cycle_freq_hr: 24 +date_first_cycle: 2022122100 +date_last_cycle: 2022122200 +dt_atmos: 720 +dt_runseq: 720 +envir: test_atml_cold +exp_case_name: atml_coldstart_00 +fcsthr: 24 +fhrot: 0 +ic_data_model: GFS +imo: 384 +jmo: 190 +lnd_calc_snet: .false. +lnd_ic_type: sfc +lnd_initial_albedo: 0.2 +lnd_layout_x: 1 +lnd_layout_y: 2 +lnd_output_freq_sec: 21600 +med_coupling_mode: ufs.frac +model_ver: v2.1.0 +net: landda +nprocs_analysis: 6 +nprocs_fcst_ic: 36 +output_fh: '6 -1' +res: 96 +restart_interval: '6 -1' +run: landda +we2e_test: 'NO' +write_groups: 1 +write_tasks_per_group: 6 diff --git a/parm/config_samples/config.ATML.warmstart.yaml b/parm/config_samples/config.ATML.warmstart.yaml new file mode 100644 index 00000000..90cf93dd --- /dev/null +++ b/parm/config_samples/config.ATML.warmstart.yaml @@ -0,0 +1,38 @@ +account: epic +app: ATML +atm_io_layout_x: 1 +atm_io_layout_y: 1 +atm_layout_x: 2 +atm_layout_y: 4 +coldstart: 'NO' +coupler_calendar: 3 +date_cycle_freq_hr: 24 +date_first_cycle: 2022122300 +date_last_cycle: 2022122400 +dt_atmos: 720 +dt_runseq: 720 +envir: test_atml_warm +exp_case_name: atml_warmstart_00 +fcsthr: 24 +fhrot: 0 +ic_data_model: GFS +imo: 384 +jmo: 190 +lnd_calc_snet: .false. +lnd_ic_type: sfc +lnd_initial_albedo: 0.2 +lnd_layout_x: 1 +lnd_layout_y: 2 +lnd_output_freq_sec: 21600 +med_coupling_mode: ufs.frac +model_ver: v2.1.0 +net: landda +nprocs_analysis: 6 +nprocs_fcst_ic: 36 +output_fh: '6 -1' +res: 96 +restart_interval: '6 -1' +run: landda +we2e_test: 'NO' +write_groups: 1 +write_tasks_per_group: 6 diff --git a/parm/config_samples/config.LND.coldstart.yaml b/parm/config_samples/config.LND.coldstart.yaml new file mode 100644 index 00000000..cfdbbeee --- /dev/null +++ b/parm/config_samples/config.LND.coldstart.yaml @@ -0,0 +1,25 @@ +account: epic +app: LND +coldstart: 'YES' +coupler_calendar: 2 +date_cycle_freq_hr: 24 +date_first_cycle: 2000010300 +date_last_cycle: 2000010400 +dt_atmos: 900 +dt_runseq: 3600 +envir: test_lnd_cold +exp_case_name: lnd_coldstart_00 +fcsthr: 24 +lnd_calc_snet: .true. +lnd_ic_type: custom +lnd_initial_albedo: 0.25 +lnd_layout_x: 1 +lnd_layout_y: 2 +lnd_output_freq_sec: 21600 +med_coupling_mode: ufs.nfrac.aoflux +model_ver: v2.1.0 +net: landda +nprocs_analysis: 6 +res: 96 +run: landda +we2e_test: 'NO' diff --git a/parm/config_samples/config.LND.warmstart.yaml b/parm/config_samples/config.LND.warmstart.yaml new file mode 100644 index 00000000..c39f226c --- /dev/null +++ b/parm/config_samples/config.LND.warmstart.yaml @@ -0,0 +1,25 @@ +account: epic +app: LND +coldstart: 'NO' +coupler_calendar: 2 +date_cycle_freq_hr: 24 +date_first_cycle: 2000010500 +date_last_cycle: 2000010600 +dt_atmos: 900 +dt_runseq: 3600 +envir: test_lnd_warm +exp_case_name: lnd_warmstart_00 +fcsthr: 24 +lnd_calc_snet: .true. +lnd_ic_type: custom +lnd_initial_albedo: 0.25 +lnd_layout_x: 1 +lnd_layout_y: 2 +lnd_output_freq_sec: 21600 +med_coupling_mode: ufs.nfrac.aoflux +model_ver: v2.1.0 +net: landda +nprocs_analysis: 6 +res: 96 +run: landda +we2e_test: 'NO' diff --git a/parm/jedi/letkfoi_snow.yaml b/parm/jedi/letkfoi_snow.yaml index f71d40b3..3254f666 100644 --- a/parm/jedi/letkfoi_snow.yaml +++ b/parm/jedi/letkfoi_snow.yaml @@ -13,8 +13,8 @@ geometry: filetype: fms restart skip coupler file: true state variables: [orog_filt] - datapath: {{ tpath }} - filename_orog: {{ tstub }}.nc + datapath: {{ datapath }} + filename_orog: {{ fn_orog }}.nc derived fields: [nominal_surface_pressure] time window: diff --git a/parm/parm_xml_hera.yaml b/parm/parm_xml_hera.yaml deleted file mode 100644 index cbe99863..00000000 --- a/parm/parm_xml_hera.yaml +++ /dev/null @@ -1,7 +0,0 @@ -machine: hera -account: epic -# exp_basedir: /path/to/parent/directory/of/land-DA_workflow -exp_basedir: -jedi_install: /scratch2/NAGAPE/epic/UFS_Land-DA_Dev/jedi_v7 -warmstart_dir: /scratch2/NAGAPE/epic/UFS_Land-DA_Dev/inputs/DATA_RESTART -we2e_test: 'NO' diff --git a/parm/parm_xml_hercules.yaml b/parm/parm_xml_hercules.yaml deleted file mode 100644 index cab1afd6..00000000 --- a/parm/parm_xml_hercules.yaml +++ /dev/null @@ -1,7 +0,0 @@ -machine: hercules -account: epic -# exp_basedir: /path/to/parent/directory/of/land-DA_workflow -exp_basedir: -jedi_install: /work/noaa/epic/UFS_Land-DA_Dev/jedi_v7_hercules -warmstart_dir: /work/noaa/epic/UFS_Land-DA_Dev/inputs/DATA_RESTART -we2e_test: 'NO' diff --git a/parm/parm_xml_orion.yaml b/parm/parm_xml_orion.yaml deleted file mode 100644 index 3c844204..00000000 --- a/parm/parm_xml_orion.yaml +++ /dev/null @@ -1,7 +0,0 @@ -machine: orion -account: epic -# exp_basedir: /path/to/parent/directory/of/land-DA_workflow -exp_basedir: -jedi_install: /work/noaa/epic/UFS_Land-DA_Dev/jedi_v7_stack1.6 -warmstart_dir: /work/noaa/epic/UFS_Land-DA_Dev/inputs/DATA_RESTART -we2e_test: 'NO' diff --git a/parm/parm_xml_singularity.yaml b/parm/parm_xml_singularity.yaml deleted file mode 100644 index 10956221..00000000 --- a/parm/parm_xml_singularity.yaml +++ /dev/null @@ -1,7 +0,0 @@ -machine: singularity -account: epic -# exp_basedir: /path/to/parent/directory/of/land-DA_workflow -exp_basedir: SINGULARITY_WORKING_DIR -jedi_install: SINGULARITY_WORKING_DIR -warmstart_dir: SINGULARITY_WORKING_DIR/land-DA_workflow/fix/DATA_RESTART -we2e_test: 'NO' diff --git a/parm/setup_wflow_env.py b/parm/setup_wflow_env.py new file mode 100755 index 00000000..fb59689d --- /dev/null +++ b/parm/setup_wflow_env.py @@ -0,0 +1,331 @@ +#!/usr/bin/env python3 + +###################################################################### CHJ ##### +# +# Setting up workflow environemnt +# +###################################################################### CHJ ##### + +import argparse +import os +import sys +import socket +import shutil +import yaml +import math +from datetime import datetime, timedelta + +dirpath = os.path.dirname(os.path.abspath(__file__)) +sys.path.append(os.path.join(dirpath, '../ush')) + +from fill_jinja_template import fill_jinja_template +from uwtools.api.rocoto import realize + + +# Main part (will be called at the end) ============================= CHJ ===== +def setup_wflow_env(machine): +# =================================================================== CHJ ===== + + machine = machine.lower() + print(f''' Machine (platform) name: {machine} ''') + # Set directory paths + parm_dir = os.getcwd() + print(f''' Current directory (PARMdir): {parm_dir} ''') + home_dir = os.path.dirname(parm_dir) + print(f''' Home directory (HOMEdir): {home_dir} ''') + exp_basedir = os.path.dirname(home_dir) + print(f''' Experimental base directory (EXP_BASEDIR): {exp_basedir} ''') + + # Set default values of input parameters + config_parm = set_default_parm() + + # Set machine-specific parameters + machine_config = set_machine_parm(machine) + + # Merge default and machine-specific parameters + config_parm.update(machine_config) + + # Add extra parameters + config_parm["exp_basedir"] = exp_basedir + config_parm["machine"] = machine + + # Read input YAML file + yaml_file = "config.yaml" + try: + with open(yaml_file, 'r') as f: + yaml_data = yaml.safe_load(f) + f.close() +# print(f''' Input YAML file:, {yaml_data} ''') + except FileNotFoundError: + print(f''' FATAL ERROR: Input YAML file {yaml_file} does not exist! ''') + + for key,value in yaml_data.items(): + if key in config_parm: + config_parm[key] = value + + # Create an experimental case directory + if config_parm.get("exp_case_name") is None: + exp_case_name = f'''{config_parm.get("app")}_{config_parm.get("run")}''' + config_parm.update({'exp_case_name': exp_case_name}) + else: + exp_case_name = config_parm.get("exp_case_name") + + # Calculate date for the second cycle + date_first_cycle = config_parm.get("date_first_cycle") + date_cycle_freq_hr = config_parm.get("date_cycle_freq_hr") + next_date = datetime.strptime(str(date_first_cycle), "%Y%m%d%H") + timedelta(hours=date_cycle_freq_hr) + date_second_cycle = next_date.strftime("%Y%m%d%H") + config_parm["date_second_cycle"] = date_second_cycle + + # Calculate HPC parameter values + app = config_parm.get("app") + atm_layout_x = config_parm.get("atm_layout_x") + atm_layout_y = config_parm.get("atm_layout_y") + atm_io_layout_x = config_parm.get("atm_io_layout_x") + atm_io_layout_y = config_parm.get("atm_io_layout_y") + lnd_layout_x = config_parm.get("lnd_layout_x") + lnd_layout_y = config_parm.get("lnd_layout_y") + max_cores_per_node = config_parm.get("max_cores_per_node") + + nprocs_forecast_lnd = 6*lnd_layout_x*lnd_layout_y + if app == "ATML": + nprocs_forecast_atm = 6*(atm_layout_x*atm_layout_y+atm_io_layout_x*atm_io_layout_y) + else: + nprocs_forecast_atm = nprocs_forecast_lnd + + nprocs_forecast = nprocs_forecast_lnd + nprocs_forecast_atm + lnd_layout_x*lnd_layout_y + if nprocs_forecast <= max_cores_per_node: + nnodes_forecast = 1 + nprocs_per_node = nprocs_forecast + else: + nnodes_forecast = math.ceil(nprocs_forecast/max_cores_per_node) + nprocs_per_node = math.ceil(nprocs_forecast/nnodes_forecast) + + config_parm.update({ + 'nprocs_forecast_lnd': nprocs_forecast_lnd, + 'nprocs_forecast_atm': nprocs_forecast_atm, + 'nprocs_forecast': nprocs_forecast, + 'nnodes_forecast': nnodes_forecast, + 'nprocs_per_node': nprocs_per_node, + }) + + config_parm_str = yaml.dump(config_parm, sort_keys=True, default_flow_style=False) +# print("FINAL configuration=",config_parm_str) + + exp_case_path = os.path.join(exp_basedir, "exp_case", exp_case_name) + if os.path.exists(exp_case_path) and os.path.isdir(exp_case_path): + tmp_new_name = exp_case_path+"_old" + if os.path.exists(tmp_new_name): + shutil.rmtree(tmp_new_name) + os.rename(exp_case_path, tmp_new_name) + os.makedirs(exp_case_path) + else: + os.makedirs(exp_case_path) + + print(f''' Experimental case directory {exp_case_path} has been created. ''') + + # Create YAML file for Rocoto XML from template + fn_yaml_rocoto_template = "template.land_analysis.yaml" + fn_yaml_rocoto = "land_analysis.yaml" + fp_yaml_rocoto_template = os.path.join(parm_dir, "templates", fn_yaml_rocoto_template) + fp_yaml_rocoto = os.path.join(exp_case_path, fn_yaml_rocoto) + print(f''' Rocoto YAML template: {fp_yaml_rocoto_template} ''') + try: + fill_jinja_template([ + "-u", config_parm_str, + "-t", fp_yaml_rocoto_template, + "-o", fp_yaml_rocoto ]) + except: + print(f''' FATAL ERROR: Call to python script fill_jinja_template.py + to create a '{fp_yaml_rocoto}' file from a jinja2 template failed. ''') + return False + + # Call uwtools to create Rocoto XML file + fn_xml_rocoto = "land_analysis.xml" + fp_xml_rocoto = os.path.join(exp_case_path, fn_xml_rocoto) + realize( + config = fp_yaml_rocoto, + output_file = fp_xml_rocoto, + ) + + # Create rocoto launch file to exp_case directory + fn_launch_template = "template.launch_rocoto_wflow.sh" + fn_launch_script = "launch_rocoto_wflow.sh" + fp_launch_template = os.path.join(parm_dir, "templates", fn_launch_template) + fp_launch_script = os.path.join(exp_case_path, fn_launch_script) + shutil.copyfile(fp_launch_template, fp_launch_script) + with open(fp_launch_script, 'r') as file: + fdata = file.read() + fdata = fdata.replace('{{ parm_dir }}', parm_dir) + fdata = fdata.replace('{{ fn_xml_rocoto }}', fn_xml_rocoto) + fdata = fdata.replace('{{ exp_case_path }}', exp_case_path) + with open(fp_launch_script, 'w') as file: + file.write(fdata) + os.chmod(fp_launch_script, 0o755) + + # Add links to log/tmp/com directories within exp_case directory + envir = config_parm.get("envir") + model_ver = config_parm.get("model_ver") + net = config_parm.get("net") + run = config_parm.get("run") + ptmp = os.path.join(exp_basedir,"ptmp") + log_dir_src = os.path.join(ptmp, envir, "com/output/logs") + log_dir_dst = os.path.join(exp_case_path, "log_dir") + tmp_dir_src = os.path.join(ptmp, envir, "tmp") + tmp_dir_dst = os.path.join(exp_case_path, "tmp_dir") + com_dir_src = os.path.join(ptmp, envir, "com", net, model_ver) + com_dir_dst = os.path.join(exp_case_path, "com_dir") + os.symlink(log_dir_src, log_dir_dst) + os.symlink(tmp_dir_src, tmp_dir_dst) + os.symlink(com_dir_src, com_dir_dst) + + # Create coldstart txt file for the first cycle when APP = LND + coldstart = config_parm.get("coldstart") + if app == "LND" and coldstart == "YES": + fn_pass = f"task_skip_coldstart_{date_first_cycle}.txt" + open(os.path.join(exp_case_path,fn_pass), 'a').close() + + + +# Default values of configuration =================================== CHJ ===== +def set_default_parm(): +# =================================================================== CHJ ===== + + default_config = { + "account": "epic", + "app": "LND", + "atm_io_layout_x": 1, + "atm_io_layout_y": 1, + "atm_layout_x": 3, + "atm_layout_y": 8, + "COMINgdas": "", + "ccpp_suite": "FV3_GFS_v17_p8", + "coldstart": "NO", + "coupler_calendar": 2, + "date_cycle_freq_hr": 24, + "date_first_cycle": 200001030000, + "date_last_cycle": 200001040000, + "dt_atmos": 900, + "dt_runseq": 3600, + "envir": "test", + "exp_case_name": None, + "fcsthr": 24, + "fhrot": 0, + "ic_data_model": "GFS", + "imo": 384, + "jedi_path": "/path/to/jedi/install/dir", + "jedi_py_ver": "python3.10", + "jmo": 190, + "lnd_calc_snet": ".true.", + "lnd_ic_type": "custom", + "lnd_initial_albedo": 0.25, + "lnd_layout_x": 1, + "lnd_layout_y": 2, + "lnd_output_freq_sec": 21600, + "machine": "/machine/platform/name", + "med_coupling_mode": "ufs.nfrac.aoflux", + "model_ver": "v2.1.0", + "net": "landda", + "nprocs_analysis": 6, + "nprocs_fcst_ic": 36, + "obsdir": "", + "obs_ghcn": "YES", + "output_fh": "1 -1", + "res": 96, + "restart_interval": "12 -1", + "run": "landda", + "warmstart_dir": "/path/to/wart/start/dir", + "we2e_test": "NO", + "write_groups": 1, + "write_tasks_per_group": 6, + } + + return default_config + + + +# Machine-specific values of configuration ========================== CHJ ===== +def set_machine_parm(machine): +# =================================================================== CHJ ===== + + lowercase_machine = machine.lower() + match lowercase_machine: + case "hera": + jedi_path = "/scratch2/NAGAPE/epic/UFS_Land-DA_v2.1/jedi_v7_ic" + max_cores_per_node = 40 + warmstart_dir = "/scratch2/NAGAPE/epic/UFS_Land-DA_v2.1/inputs/DATA_RESTART" + case "orion": + jedi_path = "/work/noaa/epic/UFS_Land-DA_v2.1/jedi_v7_ic_orion" + max_cores_per_node = 40 + warmstart_dir = "/work/noaa/epic/UFS_Land-DA_v2.1/inputs/DATA_RESTART" + case "hercules": + jedi_path = "/work/noaa/epic/UFS_Land-DA_v2.1/jedi_v7_ic_hercules" + max_cores_per_node = 80 + warmstart_dir = "/work/noaa/epic/UFS_Land-DA_v2.1/inputs/DATA_RESTART" + case "singularity": + jedi_path = "SINGULARITY_WORKING_DIR" + max_cores_per_node = 40 + warmstart_dir = "SINGULARITY_WORKING_DIR" + case _: + sys.exit(f"FATAL ERROR: this machine/platform '{lowercase_machine}' is NOT supported yet !!!") + + machine_config = { + "jedi_path": jedi_path, + "max_cores_per_node": max_cores_per_node, + "warmstart_dir": warmstart_dir, + } + + return machine_config + + + +# Parse arguments =================================================== CHJ ===== +def parse_args(argv): +# =================================================================== CHJ ===== + """Parse command line arguments""" + parser = argparse.ArgumentParser(description="Generate case-specific workflow environment.") + + parser.add_argument( + "-p", "--platform", + dest="machine", +# required=True, + help="Platform (machine) name.", + ) + + return parser.parse_args(argv) + + + +# Detect platform (machine) ========================================= CHJ ===== +def detect_platform(): +# =================================================================== CHJ ===== + + if os.path.isdir("/scratch2/NAGAPE"): + machine = "hera" + elif os.path.isdir("/work/noaa"): + machine = socket.gethostname().split('-')[0] # orion/hercules + elif os.path.isdir("/ncrc"): + machine = "gaea" + elif os.path.isdir("/glade"): + machine = "derecho" + elif os.path.isdir("/lfs4/HFIP"): + machine = "jet" + elif os.path.isdir("/lfs/h2"): + machine = "wcoss2" + else: + sys.exit(f"Machine (platform) is not detected. Please set it with -p argument") + + print(f" Machine (platform) detected: {machine}") + + return machine + + +# Main call ========================================================= CHJ ===== +if __name__=='__main__': + args = parse_args(sys.argv[1:]) + machine=args.machine + if machine is None: + machine = detect_platform() + + setup_wflow_env(machine) + diff --git a/parm/templates/template.ATML.diag_table b/parm/templates/template.ATML.diag_table new file mode 100644 index 00000000..a2889445 --- /dev/null +++ b/parm/templates/template.ATML.diag_table @@ -0,0 +1,313 @@ +{{ yyyymmdd }}.06Z.C96.64bit.non-mono +{{ yyyy }} {{ mm }} {{ dd }} {{ hh }} 0 0 + +"fv3_history", 0, "hours", 1, "hours", "time" +"fv3_history2d", 0, "hours", 1, "hours", "time" +###################### +"./MOM6_OUTPUT/ocn%4yr%2mo%2dy%2hr", 6, "hours", 1, "hours", "time", 6, "hours", "2021 03 22 06 0 0" +"./MOM6_OUTPUT/SST%4yr%2mo%2dy", 1, "days", 1, "days", "time", 1, "days", "2021 03 22 06 0 0" +############################################## +# static fields + "ocean_model", "geolon", "geolon", "./MOM6_OUTPUT/ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 + "ocean_model", "geolat", "geolat", "./MOM6_OUTPUT/ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 + "ocean_model", "geolon_c", "geolon_c", "./MOM6_OUTPUT/ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 + "ocean_model", "geolat_c", "geolat_c", "./MOM6_OUTPUT/ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 + "ocean_model", "geolon_u", "geolon_u", "./MOM6_OUTPUT/ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 + "ocean_model", "geolat_u", "geolat_u", "./MOM6_OUTPUT/ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 + "ocean_model", "geolon_v", "geolon_v", "./MOM6_OUTPUT/ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 + "ocean_model", "geolat_v", "geolat_v", "./MOM6_OUTPUT/ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 +# "ocean_model", "depth_ocean", "depth_ocean", "./MOM6_OUTPUT/ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 +# "ocean_model", "wet", "wet", "./MOM6_OUTPUT/ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 + "ocean_model", "wet_c", "wet_c", "./MOM6_OUTPUT/ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 + "ocean_model", "wet_u", "wet_u", "./MOM6_OUTPUT/ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 + "ocean_model", "wet_v", "wet_v", "./MOM6_OUTPUT/ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 + "ocean_model", "sin_rot", "sin_rot", "./MOM6_OUTPUT/ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 + "ocean_model", "cos_rot", "cos_rot", "./MOM6_OUTPUT/ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 + +# ocean output TSUV and others + "ocean_model", "SSH", "SSH", "./MOM6_OUTPUT/ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + "ocean_model", "SST", "SST", "./MOM6_OUTPUT/ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + "ocean_model", "SSS", "SSS", "./MOM6_OUTPUT/ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + "ocean_model", "speed", "speed", "./MOM6_OUTPUT/ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + "ocean_model", "SSU", "SSU", "./MOM6_OUTPUT/ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + "ocean_model", "SSV", "SSV", "./MOM6_OUTPUT/ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + "ocean_model", "frazil", "frazil", "./MOM6_OUTPUT/ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + "ocean_model", "ePBL_h_ML", "ePBL", "./MOM6_OUTPUT/ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + "ocean_model", "MLD_003", "MLD_003", "./MOM6_OUTPUT/ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + "ocean_model", "MLD_0125", "MLD_0125", "./MOM6_OUTPUT/ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + "ocean_model", "tob", "tob", "./MOM6_OUTPUT/ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + +# save daily SST + "ocean_model", "geolon", "geolon", "./MOM6_OUTPUT/SST%4yr%2mo%2dy", "all", .false., "none", 2 + "ocean_model", "geolat", "geolat", "./MOM6_OUTPUT/SST%4yr%2mo%2dy", "all", .false., "none", 2 + "ocean_model", "SST", "sst", "./MOM6_OUTPUT/SST%4yr%2mo%2dy", "all", .true., "none", 2 + +# Z-Space Fields Provided for CMIP6 (CMOR Names): +#=============================================== + "ocean_model_z","uo","uo" ,"./MOM6_OUTPUT/ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + "ocean_model_z","vo","vo" ,"./MOM6_OUTPUT/ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + "ocean_model_z","so","so" ,"./MOM6_OUTPUT/ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + "ocean_model_z","temp","temp" ,"./MOM6_OUTPUT/ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + +# forcing + "ocean_model", "taux", "taux", "./MOM6_OUTPUT/ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + "ocean_model", "tauy", "tauy", "./MOM6_OUTPUT/ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + "ocean_model", "latent", "latent", "./MOM6_OUTPUT/ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + "ocean_model", "sensible", "sensible", "./MOM6_OUTPUT/ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + "ocean_model", "SW", "SW", "./MOM6_OUTPUT/ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + "ocean_model", "LW", "LW", "./MOM6_OUTPUT/ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + "ocean_model", "evap", "evap", "./MOM6_OUTPUT/ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + "ocean_model", "lprec", "lprec", "./MOM6_OUTPUT/ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + "ocean_model", "lrunoff", "lrunoff", "./MOM6_OUTPUT/ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 +# "ocean_model", "frunoff", "frunoff", "./MOM6_OUTPUT/ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + "ocean_model", "fprec", "fprec", "./MOM6_OUTPUT/ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + "ocean_model", "LwLatSens", "LwLatSens", "./MOM6_OUTPUT/ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + "ocean_model", "Heat_PmE", "Heat_PmE", "./MOM6_OUTPUT/ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 +# +### +# FV3 variabls needed for NGGPS evaluation +### +"gfs_dyn", "ucomp", "ugrd", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "vcomp", "vgrd", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "sphum", "spfh", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "temp", "tmp", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "liq_wat", "clwmr", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "o3mr", "o3mr", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "delp", "dpres", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "delz", "delz", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "w", "dzdt", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "omga", "omga", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "ice_wat", "icmr", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "rainwat", "rwmr", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "snowwat", "snmr", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "graupel", "grle", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "ps", "pressfc", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "hs", "hgtsfc", "fv3_history", "all", .false., "none", 2 +#"gfs_dyn", "ice_nc", "nicp", "fv3_history", "all", .false., "none", 2 +#"gfs_dyn", "rain_nc", "ntrnc", "fv3_history", "all", .false., "none", 2 + +# chemical tracers advected by FV3 +"gfs_dyn", "so2", "so2", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "so4", "so4", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "dms", "dms", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "msa", "msa", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "bc1", "bc1", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "bc2", "bc2", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "oc1", "oc1", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "oc2", "oc2", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "dust1", "dust1", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "dust2", "dust2", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "dust3", "dust3", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "dust4", "dust4", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "dust5", "dust5", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "seas1", "seas1", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "seas2", "seas2", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "seas3", "seas3", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "seas4", "seas4", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "seas5", "seas5", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "nh3", "nh3", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "nh4a", "nh4a", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "no3an1", "no3an1", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "no3an2", "no3an2", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "no3an3", "no3an3", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "pm25", "pm25", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "pm10", "pm10", "fv3_history", "all", .false., "none", 2 + +"gfs_phys", "frzr", "frzr", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "frzrb", "frzrb", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "frozr", "frozr", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "frozrb", "frozrb", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "tsnowp", "tsnowp", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "tsnowpb", "tsnowpb", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "rhonewsn", "rhonewsn", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "ALBDO_ave", "albdo_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "cnvprcp_ave", "cprat_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "cnvprcpb_ave", "cpratb_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "totprcp_ave", "prate_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "totprcpb_ave", "prateb_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "DLWRF", "dlwrf_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "DLWRFI", "dlwrf", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "ULWRF", "ulwrf_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "ULWRFI", "ulwrf", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "DSWRF", "dswrf_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "DSWRFI", "dswrf", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "USWRF", "uswrf_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "USWRFI", "uswrf", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "DSWRFtoa", "dswrf_avetoa","fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "USWRFtoa", "uswrf_avetoa","fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "ULWRFtoa", "ulwrf_avetoa","fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "gflux_ave", "gflux_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "hpbl", "hpbl", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "lhtfl_ave", "lhtfl_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "shtfl_ave", "shtfl_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "pwat", "pwat", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "soilm", "soilm", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "TCDC_aveclm", "tcdc_aveclm", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "TCDC_avebndcl", "tcdc_avebndcl", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "TCDC_avehcl", "tcdc_avehcl", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "TCDC_avelcl", "tcdc_avelcl", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "TCDC_avemcl", "tcdc_avemcl", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "TCDCcnvcl", "tcdccnvcl", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "PREScnvclt", "prescnvclt", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "PREScnvclb", "prescnvclb", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "PRES_avehct", "pres_avehct", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "PRES_avehcb", "pres_avehcb", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "TEMP_avehct", "tmp_avehct", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "PRES_avemct", "pres_avemct", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "PRES_avemcb", "pres_avemcb", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "TEMP_avemct", "tmp_avemct", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "PRES_avelct", "pres_avelct", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "PRES_avelcb", "pres_avelcb", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "TEMP_avelct", "tmp_avelct", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "u-gwd_ave", "u-gwd_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "v-gwd_ave", "v-gwd_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "dusfc", "uflx_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "dvsfc", "vflx_ave", "fv3_history2d", "all", .false., "none", 2 +#"gfs_phys", "cnvw", "cnvcldwat", "fv3_history2d", "all", .false., "none", 2 + +"gfs_phys", "psurf", "pressfc", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "u10m", "ugrd10m", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "v10m", "vgrd10m", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "cldfra", "cldfra", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "crain", "crain", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "tprcp", "tprcp", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "hgtsfc", "orog", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "weasd", "weasd", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "f10m", "f10m", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "q2m", "spfh2m", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "t2m", "tmp2m", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "tsfc", "tmpsfc", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "vtype", "vtype", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "stype", "sotyp", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "slmsksfc", "land", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "vfracsfc", "veg", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "zorlsfc", "sfcr", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "uustar", "fricv", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "soilt1", "soilt1" "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "soilt2", "soilt2" "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "soilt3", "soilt3" "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "soilt4", "soilt4" "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "soilw1", "soilw1" "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "soilw2", "soilw2" "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "soilw3", "soilw3" "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "soilw4", "soilw4" "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "slc_1", "soill1", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "slc_2", "soill2", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "slc_3", "soill3", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "slc_4", "soill4", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "slope", "sltyp", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "alnsf", "alnsf", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "alnwf", "alnwf", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "alvsf", "alvsf", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "alvwf", "alvwf", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "canopy", "cnwat", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "facsf", "facsf", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "facwf", "facwf", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "ffhh", "ffhh", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "ffmm", "ffmm", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "fice", "icec", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "hice", "icetk", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "snoalb", "snoalb", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "shdmax", "shdmax", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "shdmin", "shdmin", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "snowd", "snod", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "tg3", "tg3", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "tisfc", "tisfc", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "tref", "tref", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "z_c", "zc", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "c_0", "c0", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "c_d", "cd", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "w_0", "w0", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "w_d", "wd", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "xt", "xt", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "xz", "xz", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "dt_cool", "dtcool", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "xs", "xs", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "xu", "xu", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "xv", "xv", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "xtts", "xtts", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "xzts", "xzts", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "d_conv", "dconv", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "qrain", "qrain", "fv3_history2d", "all", .false., "none", 2 + +"gfs_phys", "acond", "acond", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "cduvb_ave", "cduvb_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "cpofp", "cpofp", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "duvb_ave", "duvb_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "csdlf_ave", "csdlf", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "csusf_ave", "csusf", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "csusf_avetoa", "csusftoa", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "csdsf_ave", "csdsf", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "csulf_ave", "csulf", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "csulf_avetoa", "csulftoa", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "cwork_ave", "cwork_aveclm", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "evbs_ave", "evbs_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "evcw_ave", "evcw_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "fldcp", "fldcp", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "hgt_hyblev1", "hgt_hyblev1", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "spfh_hyblev1", "spfh_hyblev1", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "ugrd_hyblev1", "ugrd_hyblev1", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "vgrd_hyblev1", "vgrd_hyblev1", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "tmp_hyblev1", "tmp_hyblev1", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "gfluxi", "gflux", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "lhtfl", "lhtfl", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "shtfl", "shtfl", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "pevpr", "pevpr", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "pevpr_ave", "pevpr_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "sbsno_ave", "sbsno_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "sfexc", "sfexc", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "snohf", "snohf", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "snowc_ave", "snowc_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "spfhmax2m", "spfhmax_max2m", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "spfhmin2m", "spfhmin_min2m", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "tmpmax2m", "tmax_max2m", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "tmpmin2m", "tmin_min2m", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "ssrun_acc", "ssrun_acc", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "sunsd_acc", "sunsd_acc", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "watr_acc", "watr_acc", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "wilt", "wilt", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "vbdsf_ave", "vbdsf_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "vddsf_ave", "vddsf_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "nbdsf_ave", "nbdsf_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "nddsf_ave", "nddsf_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "trans_ave", "trans_ave", "fv3_history2d", "all", .false., "none", 2 + +"gfs_phys", "AOD_550", "aod550", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "DU_AOD_550", "du_aod550", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "SU_AOD_550", "su_aod550", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "BC_AOD_550", "bc_aod550", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "OC_AOD_550", "oc_aod550", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "SS_AOD_550", "ss_aod550", "fv3_history2d", "all", .false., "none", 2 +#============================================================================================= +# +#====> This file can be used with diag_manager/v2.0a (or higher) <==== +# +# +# FORMATS FOR FILE ENTRIES (not all input values are used) +# ------------------------ +# +#"file_name", output_freq, "output_units", format, "time_units", "long_name", +# +# +#output_freq: > 0 output frequency in "output_units" +# = 0 output frequency every time step +# =-1 output frequency at end of run +# +#output_units = units used for output frequency +# (years, months, days, minutes, hours, seconds) +# +#time_units = units used to label the time axis +# (days, minutes, hours, seconds) +# +# +# FORMAT FOR FIELD ENTRIES (not all input values are used) +# ------------------------ +# +#"module_name", "field_name", "output_name", "file_name" "time_sampling", time_avg, "other_opts", packing +# +#time_avg = .true. or .false. +# +#packing = 1 double precision +# = 2 float +# = 4 packed 16-bit integers +# = 8 packed 1-byte (not tested?) diff --git a/parm/templates/template.ATML.fd_ufs.yaml b/parm/templates/template.ATML.fd_ufs.yaml new file mode 100644 index 00000000..34602a32 --- /dev/null +++ b/parm/templates/template.ATML.fd_ufs.yaml @@ -0,0 +1,1283 @@ +field_dictionary: + version_number: 0.0.0 + institution: National ESPC, CSC & MCL Working Groups + source: automatically generated by the NUOPC Layer + description: Community-based dictionary for shared coupling fields + entries: + # + #----------------------------------- + # section: mediator calculation for atm/ocn flux calculation + #----------------------------------- + # + - standard_name: Faox_lat + alias: mean_laten_heat_flx_atm_into_ocn + canonical_units: W m-2 + description: mediator calculation - atm/ocn surface latent heat flux + # + - standard_name: Faox_lwup + alias: mean_up_lw_flx_ocn + canonical_units: W m-2 + description: mediator calculation - long wave radiation flux over the ocean + # + - standard_name: Faox_taux + alias: stress_on_air_ocn_zonal + canonical_units: N m-2 + description: mediator calculation + # + - standard_name: Faox_tauy + alias: stress_on_air_ocn_merid + canonical_units: N m-2 + description: mediator calculation + # + - standard_name: Foxx_lwnet + alias: mean_net_lw_flx + canonical_units: W m-2 + description: mediator calculation - atm/ocn net longwave flux + # + - standard_name: Foxx_sen + canonical_units: W m-2 + alias: mean_sensi_heat_flx + description: mediator calculation - atm/ocn surface sensible heat flux + # + - standard_name: Foxx_evap + canonical_units: kg m-2 s-1 + alias: mean_evap_rate + description: mediator calculation - atm/ocn specific humidity flux + # + - standard_name: Faox_evap + canonical_units: kg m-2 s-1 + description: mediator calculation - atm/ocn specific humidity flux + #----------------------------------- + # section: atmosphere export + #----------------------------------- + # + - standard_name: Faxa_bcph + canonical_units: kg m-2 s-1 + description: atmosphere export + # + - standard_name: Faxa_ocph + canonical_units: kg m-2 s-1 + description: atmosphere export + # + - standard_name: Faxa_dstdry + canonical_units: kg m-2 s-1 + description: atmosphere export + # + - standard_name: Faxa_dstwet + canonical_units: kg m-2 s-1 + description: atmosphere export + # + #----------------------------------- + # section: atmosphere export + #----------------------------------- + # + - standard_name: Faxa_swdn + alias: inst_down_sw_flx + canonical_units: W m-2 + description: atmosphere export - mean downward SW heat flux + # + - standard_name: Faxa_lwdn + alias: inst_down_lw_flx + canonical_units: W m-2 + description: atmosphere export - mean downward LW heat flux + # + - standard_name: Faxa_rain + alias: inst_prec_rate + canonical_units: kg m-2 s-1 + description: atmosphere export + # + - standard_name: Faxa_rainc + alias: inst_prec_rate_conv + canonical_units: kg m-2 s-1 + description: atmosphere export + # + - standard_name: Faxa_rainl + alias: inst_prec_rate_large + canonical_units: kg m-2 s-1 + description: atmosphere export + # + - standard_name: Faxa_snow + alias: inst_fprec_rate + canonical_units: kg m-2 s-1 + description: atmosphere export + # + - standard_name: Faxa_snowc + alias: inst_fprec_rate_conv + canonical_units: kg m-2 s-1 + description: atmosphere export + # + - standard_name: Faxa_snowl + alias: inst_fprec_rate_large + canonical_units: kg m-2 s-1 + description: atmosphere export + # + - standard_name: Faxa_swnet + alias: inst_net_sw_flx + canonical_units: W m-2 + description: atmosphere export + # + - standard_name: Faxa_swndf + alias: inst_down_sw_ir_dif_flx + canonical_units: W m-2 + description: atmosphere export - mean surface downward nir diffuse flux + # + - standard_name: Faxa_swndr + alias: inst_down_sw_ir_dir_flx + canonical_units: W m-2 + description: atmosphere export - mean surface downward nir direct flux + # + - standard_name: Faxa_swvdf + alias: inst_down_sw_vis_dif_flx + canonical_units: W m-2 + description: atmosphere export - mean surface downward uv+vis diffuse flux + # + - standard_name: Faxa_swvdr + alias: inst_down_sw_vis_dir_flx + canonical_units: W m-2 + description: atmosphere export - mean surface downward uv+visvdirect flux + # + - standard_name: Sa_dens + alias: air_density_height_lowest + canonical_units: kg m-3 + description: atmosphere export- density at the lowest model layer + # + - standard_name: Sa_pbot + alias: inst_pres_height_lowest + canonical_units: Pa + description: atmosphere export - pressure at lowest model layer + # + - standard_name: Sa_prsl + alias: inst_pres_height_lowest_from_phys + canonical_units: Pa + description: atmosphere export - pressure at lowest model layer + # + - standard_name: Sa_pslv + alias: inst_pres_height_surface + canonical_units: Pa + description: atmosphere export - instantaneous pressure land and sea surface + # + - standard_name: Sa_ptem + canonical_units: K + description: atmosphere export - bottom layer potential temperature + # + - standard_name: Sa_shum + alias: inst_spec_humid_height_lowest + canonical_units: kg kg-1 + description: atmosphere export - bottom layer specific humidity + # + - standard_name: Sa_qa + alias: inst_spec_humid_height_lowest_from_phys + canonical_units: kg kg-1 + description: atmosphere export - bottom layer specific humidity + # + - standard_name: Sa_tbot + alias: inst_temp_height_lowest + canonical_units: K + description: atmosphere export - bottom layer temperature + # + - standard_name: Sa_tskn + alias: inst_temp_height_surface + - standard_name: Sa_tskn + alias: inst_temp_skin_temperature + canonical_units: K + description: atmosphere export - sea surface skin temperature + # + - standard_name: Sa_ta + alias: inst_temp_height_lowest_from_phys + canonical_units: K + description: atmosphere export - bottom layer temperature + # + - standard_name: Sa_u + alias: inst_zonal_wind_height_lowest + canonical_units: m s-1 + description: atmosphere export - bottom layer zonal wind + # + - standard_name: Sa_v + alias: inst_merid_wind_height_lowest + canonical_units: m s-1 + description: atmosphere export - bottom layer meridional wind + # + - standard_name: Sa_wspd + alias: inst_wind_speed_height_lowest + canonical_units: m s-1 + description: atmosphere export - bottom layer wind speed + # + - standard_name: Sa_z + alias: inst_height_lowest + canonical_units: m + description: atmosphere export - bottom layer height + # + - standard_name: Sa_topo + alias: inst_surface_height + canonical_units: m + description: atmosphere export - topographic height + # + - standard_name: Faxa_taux + alias: inst_zonal_moment_flx + - standard_name: Faxa_taux + alias: inst_zonal_moment_flx_atm + canonical_units: N m-2 + description: atmosphere export- zonal component of momentum flux + # + - standard_name: Faxa_tauy + alias: inst_merid_moment_flx + - standard_name: Faxa_tauy + alias: inst_merid_moment_flx_atm + canonical_units: N m-2 + description: atmosphere export - meridional component of momentum flux + # + - standard_name: Faxa_lwnet + canonical_units: W m-2 + alias: inst_net_lw_flx + description: atmosphere export - mean net longwave flux from atm + # + - standard_name: Faxa_sen + canonical_units: W m-2 + alias: inst_sensi_heat_flx + description: atmosphere export - sensible heat flux + # + - standard_name: Faxa_evap + canonical_units: kg m-2 s-1 + alias: inst_evap_rate + description: atmosphere export - latent heat flux conversion + # + - standard_name: Faxx_evap + canonical_units: kg m-2 s-1 + description: atmosphere import + # + - standard_name: Faxa_lat + alias: inst_laten_heat_flx + canonical_units: W m-2 + description: atmosphere export - latent heat flux + # + - standard_name: Faxx_lat + alias: mean_laten_heat_flx + canonical_units: W m-2 + description: atmosphere import + # + - standard_name: Faxx_lwup + alias: mean_up_lw_flx + canonical_units: W m-2 + description: atmosphere import - merged ocn/ice flux + # + - standard_name: Faxx_sen + alias: mean_sensi_heat_flx + canonical_units: W m-2 + description: atmosphere import + # + - standard_name: Faxx_taux + alias: mean_zonal_moment_flx + canonical_units: N m-2 + description: atmosphere import - zonal component of momentum flux + # + - standard_name: Faxx_tauy + alias: mean_merid_moment_flx + canonical_units: N m-2 + description: atmosphere import - meridional component of momentum flux + # + - standard_name: Sa_ofrac + alias: openwater_frac_in_atm + canonical_units: 1 + description: atm export to mediator - open water ocean fraction (varies with time) + # + - standard_name: Sa_u10m + alias: inst_zonal_wind_height10m + canonical_units: m s-1 + description: atmosphere export - zonal wind height 10m + - standard_name: Sa_u10m + alias: eastward_wind_at_10m_height + # + - standard_name: Sa_v10m + alias: inst_merid_wind_height10m + canonical_units: m s-1 + description: atmosphere export - meridional wind height 10m + - standard_name: Sa_v10m + alias: northward_wind_at_10m_height + # + - standard_name: Sa_wspd10m + alias: inst_wind_speed_height10m + canonical_units: m s-1 + description: atmosphere export - wind speed height 10m + # + - standard_name: Sa_t2m + alias: inst_temp_height2m + canonical_units: K + description: atmosphere export - temperature height 2m + # + - standard_name: Sa_q2m + alias: inst_spec_humid_height2m + canonical_units: kg kg -1 + description: atmosphere export - specifc humidity height 2m + # + - standard_name: canopy_moisture_storage + canonical_units: m + description: canopy moisture content + # + - standard_name: inst_aerodynamic_conductance + canonical_units: m + description: aerodynamic conductance + # + - standard_name: inst_canopy_resistance + canonical_units: s m-1 + description: canopy aerodynamic resistance + # + - standard_name: leaf_area_index + canonical_units: 1 + description: leaf area index + # + - standard_name: temperature_of_soil_layer + canonical_units: K + description: temperature in soil layer + # + - standard_name: height + canonical_units: m + description: orography + # + - standard_name: Sa_exner + alias: inst_exner_function_height_lowest + canonical_units: 1 + description: dimensionless exner function at surface adjacent layer + # + - standard_name: Sa_ustar + alias: surface_friction_velocity + canonical_units: m s-1 + description: surface friction velocity + # + #----------------------------------- + # section: sea-ice export + #----------------------------------- + # + - standard_name: Faii_evap + alias: evap_rate_atm_into_ice + canonical_units: kg m-2 s-1 + description: sea-ice export + # + - standard_name: Faii_lat + alias: laten_heat_flx_atm_into_ice + canonical_units: W m-2 + description: sea-ice export to atm - atm/ice latent heat flux + # + - standard_name: Faii_sen + alias: sensi_heat_flx_atm_into_ice + canonical_units: W m-2 + description: sea-ice export to atm - atm/ice sensible heat flux + # + - standard_name: Faii_lwup + alias: lwup_flx_ice + canonical_units: W m-2 + description: sea-ice export - outgoing logwave radiation + # + - standard_name: Faii_swnet + canonical_units: W m-2 + description: sea-ice export to atm + # + - standard_name: Faii_taux + alias: stress_on_air_ice_zonal + canonical_units: N m-2 + description: sea-ice export to atm - air ice zonal stress + # + - standard_name: Faii_tauy + alias: stress_on_air_ice_merid + canonical_units: N m-2 + description: sea-ice export - air ice meridional stress + # + - standard_name: Fioi_bcphi + canonical_units: kg m-2 s-1 + description: sea-ice export to ocean - hydrophilic black carbon flux to ocean + # + - standard_name: Fioi_bcpho + canonical_units: kg m-2 s-1 + description: sea-ice export to ocean - hydrophobic black carbon flux to ocean + # + - standard_name: Fioi_flxdst + canonical_units: kg m-2 s-1 + description: sea-ice export to ocean - dust aerosol flux to ocean + # + - standard_name: Fioi_melth + alias: net_heat_flx_to_ocn + canonical_units: W m-2 + description: sea-ice export to ocean - net heat flux to ocean + # + - standard_name: Fioi_meltw + alias: mean_fresh_water_to_ocean_rate + canonical_units: kg m-2 s-1 + description: sea-ice export to ocean - fresh water to ocean (h2o flux from melting) + # + - standard_name: Fioi_meltw_wiso + alias: mean_fresh_water_to_ocean_rate_wiso + canonical_units: kg m-2 s-1 + description: sea-ice export to ocean - fresh water to ocean (h2o flux from melting) for 16O, 18O, HDO + # + - standard_name: Fioi_salt + alias: mean_salt_rate + canonical_units: kg m-2 s-1 + description: sea-ice export to ocean - salt to ocean (salt flux from melting) + # + - standard_name: Fioi_swpen + alias: mean_sw_pen_to_ocn + canonical_units: W m-2 + description: sea-ice export to ocean - flux of shortwave through ice to ocean + # + - standard_name: Fioi_swpen_vdr + alias: mean_sw_pen_to_ocn_vis_dir_flx + canonical_units: W m-2 + description: sea-ice export to ocean - flux of vis dir shortwave through ice to ocean + # + - standard_name: Fioi_swpen_vdf + alias: mean_sw_pen_to_ocn_vis_dif_flx + canonical_units: W m-2 + description: sea-ice export to ocean - flux of vif dir shortwave through ice to ocean + # + - standard_name: Fioi_swpen_idr + alias: mean_sw_pen_to_ocn_ir_dir_flx + canonical_units: W m-2 + description: sea-ice export to ocean - flux of ir dir shortwave through ice to ocean + # + - standard_name: Fioi_swpen_idf + alias: mean_sw_pen_to_ocn_ir_dif_flx + canonical_units: W m-2 + description: sea-ice export to ocean - flux of ir dif shortwave through ice to ocean + # + - standard_name: Fioi_taux + alias: stress_on_ocn_ice_zonal + canonical_units: N m-2 + description: sea-ice export to ocean - ice ocean zonal stress + # + - standard_name: Fioi_tauy + alias: stress_on_ocn_ice_merid + canonical_units: N m-2 + description: sea-ice export to ocean - ice ocean meridional stress + # + - standard_name: Si_anidf + alias: inst_ice_ir_dif_albedo + canonical_units: 1 + description: sea-ice export to atm + # + - standard_name: Si_anidr + alias: inst_ice_ir_dir_albedo + canonical_units: 1 + description: sea-ice export to atm + # + - standard_name: Si_avsdf + alias: inst_ice_vis_dif_albedo + canonical_units: 1 + description: sea-ice export to atm + # + - standard_name: Si_avsdr + alias: inst_ice_vis_dir_albedo + canonical_units: 1 + description: sea-ice export to atm + # + - standard_name: Si_ifrac + alias: ice_fraction + canonical_units: 1 + description: sea-ice export to atm - ice fraction (varies with time) + # + - standard_name: Si_imask + alias: ice_mask + canonical_units: 1 + description: sea-ice export - ice mask + # + - standard_name: Si_qref + canonical_units: kg kg-1 + description: sea-ice export to atm + # + - standard_name: Si_t + alias: sea_ice_surface_temperature + canonical_units: K + description: sea-ice export + # + - standard_name: Si_tref + canonical_units: K + description: sea-ice export + # + - standard_name: Si_u10 + canonical_units: m/s + description: sea-ice export + # + - standard_name: Si_vice + alias: sea_ice_volume + canonical_units: m + description: sea-ice export - volume of ice per unit area + # + - standard_name: Si_snowh + canonical_units: m + description: sea-ice export - surface_snow_water_equivalent + # + - standard_name: Si_vsno + alias: snow_volume_on_sea_ice + canonical_units: m + description: sea-ice export - volume of snow per unit area + # + - standard_name: Si_thick + canonical_units: m + description: sea-ice export - ice thickness + # + - standard_name: Si_floediam + canonical_units: m + description: sea-ice export - ice floe diameter + # + #----------------------------------- + # section: ocean export to mediator + #----------------------------------- + # + - standard_name: Fioo_q + alias: freezing_melting_potential + canonical_units: W m-2 + description: ocean export + # + - standard_name: So_bldepth + alias: mixed_layer_depth + canonical_units: m + description: ocean export + # + - standard_name: So_h + alias: sea_surface_height_above_sea_level + canonical_units: m + description: ocean export + - standard_name: So_h + alias: seahgt + # + - standard_name: So_dhdx + alias: sea_surface_slope_zonal + canonical_units: m m-1 + description: ocean export + # + - standard_name: So_dhdy + alias: sea_surface_slope_merid + canonical_units: m m-1 + description: ocean export + # + - standard_name: So_duu10n + canonical_units: m2 s-2 + description: ocean export + # + - standard_name: So_fswpen + canonical_units: 1 + description: ocean export + # + - standard_name: So_ofrac + canonical_units: 1 + description: ocean export + # + - standard_name: So_omask + alias: ocean_mask + canonical_units: 1 + description: ocean export + # + - standard_name: So_qref + canonical_units: kg kg-1 + description: ocean export + # + - standard_name: So_re + canonical_units: 1 + description: ocean export + # + - standard_name: So_s + alias: s_surf + canonical_units: g kg-1 + description: ocean export + # + - standard_name: So_ssq + canonical_units: kg kg-1 + description: ocean export + # + - standard_name: So_t + alias: sea_surface_temperature + canonical_units: K + description: ocean export + # + - standard_name: So_tref + canonical_units: K + description: ocean export + # + - standard_name: So_u + alias: ocn_current_zonal + canonical_units: m s-1 + description: ocean export + # + - standard_name: So_u10 + canonical_units: m + description: ocean export + # + - standard_name: So_ustar + canonical_units: m s-1 + description: ocean export + # + - standard_name: So_v + alias: ocn_current_merid + canonical_units: m s-1 + description: ocean export + # + #----------------------------------- + # section: ocean import + #----------------------------------- + # + - standard_name: Foxx_hrain + canonical_units: W m-2 + description: to ocn heat content of rain + # + - standard_name: Foxx_hsnow + canonical_units: W m-2 + description: to ocn heat content of snow + # + - standard_name: Foxx_hevap + canonical_units: W m-2 + description: to ocn heat content of evaporation + # + - standard_name: Foxx_hcond + canonical_units: W m-2 + description: to ocn heat content of condensation + # + - standard_name: Foxx_hrofl + canonical_units: W m-2 + description: to ocn heat content of liquid runoff + # + - standard_name: Foxx_hrofi + canonical_units: W m-2 + description: to ocn heat content of ice runoff + # + - standard_name: Foxx_rofi + canonical_units: kg m-2 s-1 + description: ocean import - water flux due to runoff (frozen) + # + - standard_name: Foxx_rofl + canonical_units: kg m-2 s-1 + description: ocean import - water flux due to runoff (liquid) + # + - standard_name: Foxx_swnet + alias: mean_net_sw_flx + canonical_units: W m-2 + description: ocean import - net shortwave radiation to ocean + # + - standard_name: Foxx_swnet_vdr + alias: mean_net_sw_vis_dir_flx + canonical_units: W m-2 + description: ocean import - net shortwave visible direct radiation to ocean + # + - standard_name: Foxx_swnet_vdf + alias: mean_net_sw_vis_dif_flx + canonical_units: W m-2 + description: ocean import - net shortwave visible diffuse radiation to ocean + # + - standard_name: Foxx_swnet_idr + alias: mean_net_sw_ir_dir_flx + canonical_units: W m-2 + description: ocean import - net shortwave ir direct radiation to ocean + # + - standard_name: Foxx_swnet_idf + alias: mean_net_sw_ir_dif_flx + canonical_units: W m-2 + description: ocean import - net shortwave ir diffuse radiation to ocean + # + - standard_name: Foxx_sen + alias: mean_sensi_heat_flx + canonical_units: W m-2 + description: ocean import - sensible heat flux into ocean + # + - standard_name: Foxx_lat + canonical_units: W m-2 + description: ocean import - latent heat flux into ocean + # + - standard_name: Foxx_taux + alias: mean_zonal_moment_flx + canonical_units: N m-2 + description: ocean import - zonal surface stress to ocean + # + - standard_name: Foxx_tauy + alias: mean_merid_moment_flx + canonical_units: N m-2 + description: ocean import - meridional surface stress to ocean + # + #----------------------------------- + # mediator fields + #----------------------------------- + # + - standard_name: cpl_scalars + canonical_units: unitless + # + - standard_name: frac + canonical_units: 1 + # + - standard_name: mask + canonical_units: 1 + # + #----------------------------------- + # fields to use fluxes from mediator + #----------------------------------- + # + - standard_name: Faox_lat + alias: laten_heat_flx_atm_into_ocn + canonical_units: W m-2 + description: mediator export - atm/ocn surface latent heat flux + # + - standard_name: Faox_sen + alias: sensi_heat_flx_atm_into_ocn + canonical_units: W m-2 + description: mediator export - atm/ocn surface sensible heat flux + # + - standard_name: Faox_lwup + alias: lwup_flx_ocn + canonical_units: W m-2 + description: mediator export - long wave radiation flux over the ocean + # + - standard_name: Faox_taux + alias: stress_on_air_ocn_zonal + canonical_units: N m-2 + description: mediator export + # + - standard_name: Faox_tauy + alias: stress_on_air_ocn_merid + canonical_units: N m-2 + description: mediator export + # + #----------------------------------- + # section: atmosphere fields that need to be defined but are not used + #----------------------------------- + # + - standard_name: mean_prec_rate + canonical_units: kg m-2 s-1 + - standard_name: mean_fprec_rate + canonical_units: kg m-2 s-1 + - standard_name: mean_prec_rate_conv + canonical_units: kg m-2 s-1 + - standard_name: mean_down_lw_flx + canonical_units: W m-2 + - standard_name: inst_net_lw_flx + canonical_units: W m-2 + - standard_name: mean_down_sw_flx + canonical_units: W m-2 + - standard_name: mean_net_sw_flx + canonical_units: W m-2 + - standard_name: inst_net_sw_ir_dir_flx + canonical_units: W m-2 + - standard_name: inst_net_sw_ir_dif_flx + canonical_units: W m-2 + - standard_name: inst_net_sw_vis_dir_flx + canonical_units: W m-2 + - standard_name: inst_net_sw_vis_dif_flx + canonical_units: W m-2 + - standard_name: mean_down_sw_ir_dif_flx + canonical_units: W m-2 + - standard_name: mean_down_sw_ir_dir_flx + canonical_units: W m-2 + - standard_name: mean_down_sw_vis_dif_flx + canonical_units: W m-2 + - standard_name: mean_down_sw_vis_dir_flx + canonical_units: W m-2 + - standard_name: inst_surface_height + canonical_units: m + - standard_name: mean_zonal_moment_flx_atm + canonical_units: N m-2 + - standard_name: mean_merid_moment_flx_atm + canonical_units: N m-2 + - standard_name: inst_zonal_moment_flx_atm + canonical_units: N m-2 + - standard_name: inst_merid_moment_flx_atm + canonical_units: N m-2 + - standard_name: inst_sensi_heat_flx + canonical_units: N m-2 + - standard_name: inst_laten_heat_flx + canonical_units: N m-2 + - standard_name: inst_evap_rate + canonical_units: kg m-2 s-1 + - standard_name: inst_tracer_mass_frac + canonical_units: 1 + - standard_name: inst_tracer_up_surface_flx + canonical_units: kg m-2 s-1 + - standard_name: inst_tracer_down_surface_flx + canonical_units: kg m-2 s-1 + - standard_name: inst_tracer_clmn_mass_dens + canonical_units: g m-2 + - standard_name: inst_tracer_anth_biom_flx + canonical_units: ug m-2 s-1 + description: atmosphere export + - standard_name: inst_pres_interface + canonical_units: Pa + - standard_name: inst_pres_levels + canonical_units: Pa + - standard_name: inst_geop_interface + canonical_units: tbd + - standard_name: inst_geop_levels + canonical_units: tbd + - standard_name: inst_temp_interface + canonical_units: K + - standard_name: inst_temp_levels + canonical_units: K + - standard_name: inst_zonal_wind_levels + canonical_units: m s-1 + - standard_name: inst_merid_wind_levels + canonical_units: m s-1 + - standard_name: inst_omega_levels + canonical_units: tbd + - standard_name: inst_tracer_mass_frac + canonical_units: 1 + - standard_name: inst_soil_moisture_content + canonical_units: tbd + - standard_name: soil_type + canonical_units: tbd + - standard_name: inst_pbl_height + canonical_units: tbd + - standard_name: surface_cell_area + canonical_units: tbd + - standard_name: inst_convective_rainfall_amount + canonical_units: tbd + - standard_name: inst_spec_humid_conv_tendency_levels + canonical_units: tbd + - standard_name: inst_exchange_coefficient_heat_levels + canonical_units: tbd + - standard_name: inst_friction_velocity + canonical_units: tbd + - standard_name: inst_rainfall_amount + canonical_units: tbd + - standard_name: accumulated_lwe_thickness_of_precipitation_amount + canonical_units: tbd + - standard_name: inst_land_sea_mask + canonical_units: tbd + - standard_name: inst_temp_height_surface + canonical_units: tbd + - standard_name: inst_up_sensi_heat_flx + canonical_units: tbd + - standard_name: inst_lwe_snow_thickness + canonical_units: tbd + - standard_name: vegetation_type + canonical_units: tbd + - standard_name: inst_vegetation_area_frac + canonical_units: tbd + - standard_name: inst_surface_roughness + canonical_units: tbd + - standard_name: inst_laten_heat_flx + canonical_units: W m-2 + - standard_name: inst_sensi_heat_flx + canonical_units: W m-2 + - standard_name: land_mask + canonical_units: 1 + - standard_name: inst_cloud_frac_levels + canonical_units: 1 + - standard_name: inst_ice_nonconv_tendency_levels + canonical_units: kg m-2 s-1 + - standard_name: inst_liq_nonconv_tendency_levels + canonical_units: kg m-2 s-1 + - standard_name: inst_surface_soil_wetness + canonical_units: 1 + - standard_name: lake_fraction + canonical_units: 1 + - standard_name: ice_fraction_in_atm + alias: sea_ice_area_fraction + canonical_units: 1 + - standard_name: ocean_fraction + canonical_units: 1 + - standard_name: surface_snow_area_fraction + canonical_units: 1 + # + #----------------------------------- + # WW3 import + #----------------------------------- + # + - standard_name: sea_surface_height_above_sea_level + canonical_units: m + description: ww3 import + # + - standard_name: sea_surface_salinity + alias: s_surf + canonical_units: g kg-1 + description: ww3 import + # + - standard_name: surface_eastward_sea_water_velocity + alias: ocn_current_zonal + canonical_units: m s-1 + description: ww3 import + # + - standard_name: surface_northward_sea_water_velocity + alias: ocn_current_merid + canonical_units: m s-1 + description: ww3 import + # + - standard_name: eastward_wind_at_10m_height + alias: inst_zonal_wind_height10m + canonical_units: m s-1 + description: ww3 import + # + - standard_name: northward_wind_at_10m_height + alias: inst_merid_wind_height10m + canonical_units: m s-1 + description: ww3 import + # + - standard_name: sea_ice_concentration + alias: ice_fraction + canonical_units: 1 + description: ww3 import + # + #----------------------------------- + # WW3 export + #----------------------------------- + # + - standard_name: Sw_z0 + alias: wave_z0_roughness_length + canonical_units: 1 + description: ww3 export + - standard_name: Sw_z0 + alias: z0rlen + # + - standard_name: Sw_pstokes_x + alias: eastward_partitioned_stokes_drift_current + canonical_units: m s-1 + description: ww3 export partitioned drift components using ungridded dimension + # + - standard_name: Sw_pstokes_y + alias: northward_partitioned_stokes_drift_current + canonical_units: m s-1 + description: ww3 export partitioned drift components using ungridded dimension + # + - standard_name: Sw_elevation_spectrum + alias: wave_elevation_spectrum + canonical_units: m2/s + description: wave elevation spectrum + # + # remaining fields are unused but required to be present + # + - standard_name: Sw_ch + alias: wave_induced_charnock_parameter + canonical_units: 1 + description: ww3 export + - standard_name: Sw_ch + alias: charno + # + - standard_name: eastward_stokes_drift_current + alias: uscurr + canonical_units: m s-1 + description: ww3 export spectrum of drift components + # + - standard_name: northward_stokes_drift_current + alias: vscurr + canonical_units: m s-1 + description: ww3 export spectrum of drift components + # + - standard_name: Sw_ustokes + alias: eastward_surface_stokes_drift_current + canonical_units: m s-1 + description: ww3 export surface drift components + - standard_name: Sw_ustokes + alias: ussx + # + - standard_name: Sw_vstokes + alias: northward_surface_stokes_drift_current + canonical_units: m s-1 + description: ww3 export using surface drift components + - standard_name: Sw_vstokes + alias: ussy + # + - standard_name: Sw_wbcuru + alias: eastward_wave_bottom_current + canonical_units: m s-1 + description: ww3 export + - standard_name: Sw_wbcuru + alias: wbcuru + # + - standard_name: Sw_wbcurv + alias: northward_wave_bottom_current + canonical_units: m s-1 + description: ww3 export + - standard_name: Sw_wbcurv + alias: wbcurv + # + - standard_name: Sw_wbcurp + alias: wave_bottom_current_period + canonical_units: s + description: ww3 export + - standard_name: Sw_wbcurp + alias: wbcurp + # + - standard_name: Sw_wavsuu + alias: eastward_wave_radiation_stress + canonical_units: N m-1 + description: ww3 export + - standard_name: Sw_wavsuu + alias: wavsuu + # + - standard_name: Sw_wavsuv + alias: eastward_northward_wave_radiation_stress + canonical_units: N m-1 + description: ww3 export + - standard_name: Sw_wavsuv + alias: wavsuv + # + - standard_name: Sw_wavsvv + alias: northward_wave_radiation_stress + canonical_units: Pa + description: ww3 export + - standard_name: Sw_wavsvv + alias: wavsvv + # + - standard_name: Sw_ustokes1 + alias: eastward_partitioned_stokes_drift_1 + canonical_units: m s-1 + description: ww3 export + - standard_name: Sw_ustokes1 + alias: x1pstk + # + - standard_name: Sw_ustokes2 + alias: eastward_partitioned_stokes_drift_2 + canonical_units: m s-1 + description: ww3 export + - standard_name: Sw_ustokes2 + alias: x2pstk + # + - standard_name: Sw_ustokes3 + alias: eastward_partitioned_stokes_drift_3 + canonical_units: m s-1 + description: ww3 export + - standard_name: Sw_ustokes3 + alias: x3pstk + # + - standard_name: Sw_vstokes1 + alias: northward_partitioned_stokes_drift_1 + canonical_units: m s-1 + description: ww3 export + - standard_name: Sw_vstokes1 + alias: y1pstk + # + - standard_name: Sw_vstokes2 + alias: northward_partitioned_stokes_drift_2 + canonical_units: m s-1 + description: ww3 export + - standard_name: Sw_vstokes2 + alias: y2pstk + # + - standard_name: Sw_vstokes3 + alias: northward_partitioned_stokes_drift_3 + canonical_units: m s-1 + description: ww3 export + - standard_name: Sw_vstokes3 + alias: y3pstk + # + #----------------------------------- + # section: FV3 atm export/import to/from JEDI + #----------------------------------- + # + - standard_name: u + canonical_units: m s-1 + alias: u_component_of_native_D_grid_wind + # + - standard_name: v + canonical_units: m s-1 + alias: v_component_of_native_D_grid_wind + # + - standard_name: ua + canonical_units: m s-1 + alias: eastward_wind + # + - standard_name: va + canonical_units: m s-1 + alias: northward_wind + # + - standard_name: t + canonical_units: K + alias: air_temperature + # + - standard_name: delp + canonical_units: Pa + alias: air_pressure_thickness + # + - standard_name: ps + canonical_units: Pa + alias: surface_pressure + # + - standard_name: sphum + canonical_units: kg kg-1 + alias: specific_humidity + # + - standard_name: ice_wat + canonical_units: kg kg-1 + alias: cloud_liquid_ice + # + - standard_name: liq_wat + canonical_units: kg kg-1 + alias: cloud_liquid_water + # + - standard_name: rainwat + canonical_units: kg kg-1 + alias: rain_water + # + - standard_name: snowwat + canonical_units: kg kg-1 + alias: snow_water + # + - standard_name: graupel + canonical_units: kg kg-1 + alias: graupel + # + - standard_name: o3mr + canonical_units: kg kg-1 + alias: ozone_mass_mixing_ratio + # + - standard_name: phis + canonical_units: m2 s-2 + alias: sfc_geopotential_height_times_grav + # + - standard_name: u_srf + canonical_units: m s-1 + alias: surface_eastward_wind + # + - standard_name: v_srf + canonical_units: m s-1 + alias: surface_northward_wind + # + # + - standard_name: t2m + canonical_units: K + alias: surface_temperature + # + - standard_name: slmsk + canonical_units: flag + description: landmask sea/land/ice=0/1/2 + # + - standard_name: weasd + canonical_units: mm + description: water equiv of acc snow depth over land and sea ice + alias: sheleg + # + - standard_name: tsea + canonical_units: K + description: surface skin temperature + # + - standard_name: vtype + canonical_units: index + description: vegetation type + # + - standard_name: stype + canonical_units: index + description: soil type + # + - standard_name: Sa_vfrac + canonical_units: frac + description: areal fractional cover of green vegetation + - standard_name: Sa_vfrac + alias: vfrac + # + - standard_name: stc + canonical_units: K + description: soil temperature content + # + - standard_name: smc + canonical_units: m3 m-3 + description: soil moisture content + # + - standard_name: snwdph + canonical_units: mm + description: snow depth in mm + # + - standard_name: f10m + canonical_units: ratio + description: fm at 10m - Ratio of sigma level 1 wind and 10m wind + # + - standard_name: Sa_zorl + canonical_units: cm + description: composite surface roughness in cm + - standard_name: Sa_zorl + alias: zorl + # + - standard_name: t2m + canonical_units: K + description: two meter temperature + # + #----------------------------------- + # section: land export + #----------------------------------- + # + - standard_name: Sl_lfrac + alias: land_fraction + canonical_units: 1 + description: land export + # + - standard_name: Sl_lfrin + canonical_units: 1 + description: land export + # + - standard_name: Sl_t + canonical_units: K + description: land export + # + - standard_name: inst_tracer_diag_aod + canonical_units: 1 + description: AOD + # + - standard_name: Sl_sfrac + alias: inst_snow_area_fraction_lnd + canonical_units: 1 + description: land export + # + - standard_name: Sl_tref + alias: inst_temp_height2m_lnd + canonical_units: K + description: mediator export to glc - no levation classes + # + - standard_name: Sl_qref + alias: inst_spec_humid_height2m_lnd + canonical_units: kg kg-1 + description: land export + # + - standard_name: Sl_q + alias: inst_spec_humid_lnd + canonical_units: kg kg-1 + description: land export + # + - standard_name: Fall_lat + alias: inst_laten_heat_flx_lnd + canonical_units: kg kg-1 m s-1 + description: land export to atm - atm/lnd latent heat flux + # + - standard_name: Fall_sen + alias: inst_sensi_heat_flx_lnd + canonical_units: K m s-1 + description: land export to atm - atm/lnd sensible heat flux + # + - standard_name: Fall_evap + alias: inst_potential_laten_heat_flx_lnd + canonical_units: W m-2 + description: land export + # + - standard_name: Fall_gflx + alias: inst_upward_heat_flux_lnd + canonical_units: W m-2 + description: land export + # + - standard_name: Fall_roff + alias: inst_runoff_rate_lnd + canonical_units: kg m-2 s-1 + description: land export + # + - standard_name: Fall_soff + alias: inst_subsurface_runoff_rate_lnd + canonical_units: kg m-2 s-1 + description: land export + # + - standard_name: Sl_cmm + alias: inst_drag_wind_speed_for_momentum + canonical_units: m s-1 + description: land export + # + - standard_name: Sl_chh + alias: inst_drag_mass_flux_for_heat_and_moisture + canonical_units: kg m-2 s-1 + description: land export + # + - standard_name: Sl_zvfun + alias: inst_func_of_roughness_length_and_vfrac + canonical_units: 1 + description: land export + # + #----------------------------------- + # section: fire behavior + #----------------------------------- + # + - standard_name: hflx_fire + canonical_units: K m s-1 + description: kinematic surface upward sensible heat flux of fire + # + - standard_name: evap_fire + canonical_units: Kg Kg-1 m s-1 + description: kinematic surface upward latent heat flux of fire + # + - standard_name: smoke_fire + canonical_units: kg m-2 diff --git a/parm/templates/template.ATML.field_table b/parm/templates/template.ATML.field_table new file mode 100644 index 00000000..bc96278f --- /dev/null +++ b/parm/templates/template.ATML.field_table @@ -0,0 +1,65 @@ +# added by FRE: sphum must be present in atmos +# specific humidity for moist runs + "TRACER", "atmos_mod", "sphum" + "longname", "specific humidity" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=3.e-6" / +# prognostic cloud water mixing ratio + "TRACER", "atmos_mod", "liq_wat" + "longname", "cloud water mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / +# prognostic ice water mixing ratio + "TRACER", "atmos_mod", "ice_wat" + "longname", "cloud ice mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / +# prognostic rain water mixing ratio + "TRACER", "atmos_mod", "rainwat" + "longname", "rain water mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / +# prognostic snow water mixing ratio + "TRACER", "atmos_mod", "snowwat" + "longname", "snow water mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / +# prognostic Grau water mixing ratio + "TRACER", "atmos_mod", "graupel" + "longname", "graupel mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / +# prognostic cloud water number concentration - not for non-aerosol runs +# "TRACER", "atmos_mod", "water_nc" +# "longname", "cloud liquid water number concentration" +# "units", "/kg" +# "profile_type", "fixed", "surface_value=0.0" / +# prognostic cloud ice number concentration + "TRACER", "atmos_mod", "ice_nc" + "longname", "cloud ice water number concentration" + "units", "/kg" + "profile_type", "fixed", "surface_value=0.0" / +# prognostic rain number concentration + "TRACER", "atmos_mod", "rain_nc" + "longname", "rain number concentration" + "units", "/kg" + "profile_type", "fixed", "surface_value=0.0" / +# prognostic ozone mixing ratio tracer + "TRACER", "atmos_mod", "o3mr" + "longname", "ozone mixing ratio" + "units", "kg/kg" + "profile_type", "fixed", "surface_value=1.e30" / +# water- and ice-friendly aerosols (Thompson) - not for non-aerosol runs +# "TRACER", "atmos_mod", "liq_aero" +# "longname", "water-friendly aerosol number concentration" +# "units", "/kg" +# "profile_type", "fixed", "surface_value=0.0" / +# "TRACER", "atmos_mod", "ice_aero" +# "longname", "ice-friendly aerosol number concentration" +# "units", "/kg" +# "profile_type", "fixed", "surface_value=0.0" / +# prognostic subgrid scale turbulent kinetic energy + "TRACER", "atmos_mod", "sgs_tke" + "longname", "subgrid scale turbulent kinetic energy" + "units", "m2/s2" + "profile_type", "fixed", "surface_value=0.0" / diff --git a/parm/templates/template.ATML.input.nml.FV3_GFS_v17_p8 b/parm/templates/template.ATML.input.nml.FV3_GFS_v17_p8 new file mode 100644 index 00000000..d3b9dbd0 --- /dev/null +++ b/parm/templates/template.ATML.input.nml.FV3_GFS_v17_p8 @@ -0,0 +1,406 @@ +&atmos_model_nml + blocksize = 32 + chksum_debug = .false. + dycore_only = .false. + ccpp_suite = '{{ ccpp_suite }}' + ignore_rst_cksum = .true. +/ + +&diag_manager_nml + prepend_date = .false. + max_output_fields = 310 +/ + +&fms_nml + clock_grain = 'ROUTINE' + domains_stack_size = 3000000 + print_memory_usage = .false. +/ + +&fms2_io_nml + netcdf_default_format = 'netcdf4' +/ + +&fv_core_nml + layout = {{ atm_layout_x }},{{ atm_layout_y }} + io_layout = {{ atm_io_layout_x }},{{ atm_io_layout_y }} + npx = 97 + npy = 97 + ntiles = 6 + npz = 127 + dz_min = 6 + psm_bc = 1 + grid_type = -1 + make_nh = {{ make_nh }} + fv_debug = .false. + range_warn = .true. + reset_eta = .false. + n_sponge = 42 + nudge_qv = .true. + nudge_dz = .false. + tau = 0.0 + fast_tau_w_sec = 0.2 + rf_cutoff = 10. + d2_bg_k1 = 0.20 + d2_bg_k2 = 0.04 + kord_tm = -9 + kord_mt = 9 + kord_wz = 9 + kord_tr = 9 + hydrostatic = .false. + phys_hydrostatic = .false. + use_hydro_pressure = .false. + pass_full_omega_to_physics_in_non_hydrostatic_mode = .false. + beta = 0. + a_imp = 1. + p_fac = 0.1 + k_split = 2 + n_split = 5 + nwat = 6 + na_init = {{ na_init }} + d_ext = 0. + dnats = 0 + fv_sg_adj = 450 + d2_bg = 0. + nord = 2 + dddmp = 0.1 + d4_bg = 0.12 + vtdm4 = 0.02 + delt_max = 0.002 + ke_bg = 0. + do_vort_damp = .true. + external_ic = {{ external_ic }} + external_eta = .true. + gfs_phil = .false. + nggps_ic = {{ nggps_ic }} + mountain = {{ mountain }} + ncep_ic = .false. + d_con = 1. + hord_mt = 5 + hord_vt = 5 + hord_tm = 5 + hord_dp = -5 + hord_tr = 8 + adjust_dry_mass = .false. + dry_mass = 98320.0 + consv_te = 1. + do_sat_adj = .false. + consv_am = .false. + fill = .true. + dwind_2d = .false. + print_freq = 6 + warm_start = {{ warm_start }} + no_dycore = .false. + z_tracer = .true. + agrid_vel_rst = .true. + read_increment = .false. + res_latlon_dynamics = '' + increment_file_on_native_grid = .false. +/ + +&external_ic_nml + filtered_terrain = .true. + levp = 128 + gfs_dwinds = .true. + checker_tr = .false. + nt_checker = 0 +/ + +&gfs_physics_nml + fhzero = 6 + h2o_phys = .true. + ldiag3d = .false. + qdiag3d = .false. + print_diff_pgr = .false. + fhcyc = 24 + use_ufo = .true. + pre_rad = .false. + imp_physics = 8 + iovr = 3 + ltaerosol = .false. + lradar = .false. + ttendlim = -999 + dt_inner = 720 + sedi_semi = .true. + decfl = 10 + oz_phys = .false. + oz_phys_2015 = .true. + lsoil_lsm = 4 + do_mynnedmf = .false. + do_mynnsfclay = .false. + icloud_bl = 1 + bl_mynn_edmf = 1 + bl_mynn_tkeadvect = .true. + bl_mynn_edmf_mom = 1 + do_ugwp = .false. + do_tofd = .false. + gwd_opt = 2 + do_ugwp_v0 = .true. + do_ugwp_v1 = .false. + do_ugwp_v0_orog_only = .false. + do_ugwp_v0_nst_only = .false. + do_gsl_drag_ls_bl = .false. + do_gsl_drag_ss = .true. + do_gwd_opt_psl = .false. + psl_gwd_dx_factor = 6.0 + do_gsl_drag_tofd = .false. + do_ugwp_v1_orog_only = .false. + min_lakeice = 0.15 + min_seaice = 0.15 + use_cice_alb = .false. + pdfcld = .false. + fhswr = 3600. + fhlwr = 3600. + ialb = 2 + iems = 2 + iaer = 1011 + icliq_sw = 2 + ico2 = 2 + isubc_sw = 2 + isubc_lw = 2 + isol = 2 + lwhtr = .true. + swhtr = .true. + cnvgwd = .true. + shal_cnv = .true. + cal_pre = .false. + redrag = .true. + dspheat = .true. + hybedmf = .false. + satmedmf = .true. + isatmedmf = 1 + lheatstrg = .false. + lseaspray = .true. + random_clds = .false. + trans_trac = .true. + cnvcld = .true. + imfshalcnv = 2 + imfdeepcnv = 2 + progsigma = .false. + betascu = 8.0 + betamcu = 1.0 + betadcu = 2.0 + ras = .false. + cdmbgwd = 0.14,1.8,1.0,1.0 + prslrd0 = 0. + ivegsrc = 1 + isot = 1 + lsoil = 4 + lsm = 2 + iopt_dveg = 4 + iopt_crs = 2 + iopt_btr = 1 + iopt_run = 1 + iopt_sfc = 3 + iopt_trs = 2 + iopt_diag = 2 + iopt_frz = 1 + iopt_inf = 1 + iopt_rad = 3 + iopt_alb = 1 + iopt_snf = 4 + iopt_tbot = 2 + iopt_stc = 3 + debug = .false. + nstf_name = {{ nstf_name }} + nst_anl = .true. + psautco = 0.0008,0.0005 + prautco = 0.00015,0.00015 + lgfdlmprad = .false. + effr_in = .true. + ldiag_ugwp = .false. + fscav_aero = "*:0.3","so2:0.0","msa:0.0","dms:0.0","nh3:0.4","nh4:0.6","bc1:0.6","bc2:0.6","oc1:0.4","oc2:0.4","dust1:0.6","dust2:0.6","dust3:0.6","dust4:0.6","dust5:0.6","seas1:0.5","seas2:0.5","seas3:0.5","seas4:0.5","seas5:0.5" + do_RRTMGP = .false. + active_gases = 'h2o_co2_o3_n2o_ch4_o2' + ngases = 6 + lw_file_gas = 'rrtmgp-data-lw-g128-210809.nc' + lw_file_clouds = 'rrtmgp-cloud-optics-coeffs-lw.nc' + sw_file_gas = 'rrtmgp-data-sw-g112-210809.nc' + sw_file_clouds = 'rrtmgp-cloud-optics-coeffs-sw.nc' + rrtmgp_nGptsSW = 112 + rrtmgp_nGptsLW = 128 + rrtmgp_nBandsLW = 16 + rrtmgp_nBandsSW = 14 + doGP_cldoptics_LUT = .true. + doGP_lwscat = .true. + doGP_sgs_cnv = .true. + do_sppt = .false. + do_shum = .false. + do_skeb = .false. + iaufhrs = -1 + iau_delthrs = 0 + iau_inc_files= '' + iau_drymassfixer = .false. + use_med_flux = .false. + frac_grid = .true. + cplchm = .false. + cplflx = .false. + cplice = .false. + cplwav = .false. + cplwav2atm = .false. + cpllnd = .true. + cpllnd2atm = .true. + do_ca = .true. + ca_global = .false. + ca_sgs = .true. + nca = 1 + ncells = 5 + nlives = 12 + nseed = 1 + nfracseed = 0.5 + nthresh = 18 + ca_trigger = .true. + nspinup = 1 + iseed_ca = 12345 + lndp_type = 0 + n_var_lndp = 0 +/ + +&cires_ugwp_nml + knob_ugwp_solver = 2 + knob_ugwp_source = 1,1,0,0 + knob_ugwp_wvspec = 1,25,25,25 + knob_ugwp_azdir = 2,4,4,4 + knob_ugwp_stoch = 0,0,0,0 + knob_ugwp_effac = 1,1,1,1 + knob_ugwp_doaxyz = 1 + knob_ugwp_doheat = 1 + knob_ugwp_dokdis = 1 + knob_ugwp_ndx4lh = 1 + knob_ugwp_version = 0 + ! This is only for UGWP v0 + launch_level = 54 + ! These are only for UGWP v1 +! knob_ugwp_palaunch = 275.0e2 +! knob_ugwp_nslope = 1 +! knob_ugwp_lzmax = 15.750e3 +! knob_ugwp_lzmin = 0.75e3 +! knob_ugwp_lzstar = 2.0e3 +! knob_ugwp_taumin = 0.25e-3 +! knob_ugwp_tauamp = 3.0e-3 +! knob_ugwp_lhmet = 200.0e3 +! knob_ugwp_orosolv = 'pss-1986' +/ + +&gfdl_cloud_microphysics_nml + sedi_transport = .true. + do_sedi_heat = .false. + rad_snow = .true. + rad_graupel = .true. + rad_rain = .true. + const_vi = .false. + const_vs = .false. + const_vg = .false. + const_vr = .false. + vi_max = 1. + vs_max = 2. + vg_max = 12. + vr_max = 12. + qi_lim = 1. + prog_ccn = .false. + do_qa = .true. + fast_sat_adj = .true. + tau_l2v = 225. + tau_v2l = 150. + tau_g2v = 900. + rthresh = 10.e-6 ! This is a key parameter for cloud water + dw_land = 0.16 + dw_ocean = 0.10 + ql_gen = 1.0e-3 + ql_mlt = 1.0e-3 + qi0_crt = 8.0e-5 + qs0_crt = 1.0e-3 + tau_i2s = 1000. + c_psaci = 0.05 + c_pgacs = 0.01 + rh_inc = 0.30 + rh_inr = 0.30 + rh_ins = 0.30 + ccn_l = 300. + ccn_o = 100. + c_paut = 0.5 + c_cracw = 0.8 + use_ppm = .false. + use_ccn = .true. + mono_prof = .true. + z_slope_liq = .true. + z_slope_ice = .true. + de_ice = .false. + fix_negative = .true. + icloud_f = 1 + mp_time = 150. + reiflag = 2 +/ + +&interpolator_nml + interp_method = 'conserve_great_circle' +/ + +&namsfc + FNGLAC = 'global_glacier.2x2.grb' + FNMXIC = 'global_maxice.2x2.grb' + FNTSFC = 'RTGSST.1982.2012.monthly.clim.grb' + FNSNOC = 'global_snoclim.1.875.grb' + FNZORC = 'igbp' + FNALBC = 'INPUT/C96.snowfree_albedo.tileX.nc' + FNALBC2 = 'INPUT/C96.facsf.tileX.nc' + FNAISC = 'IMS-NIC.blended.ice.monthly.clim.grb' + FNTG3C = 'INPUT/C96.substrate_temperature.tileX.nc' + FNVEGC = 'INPUT/C96.vegetation_greenness.tileX.nc' + FNVETC = 'INPUT/C96.vegetation_type.tileX.nc' + FNSOTC = 'INPUT/C96.soil_type.tileX.nc' + FNSOCC = 'INPUT/C96.soil_color.tileX.nc' + FNSMCC = 'global_soilmgldas.statsgo.t1534.3072.1536.grb' + FNMSKH = 'global_slmask.t1534.3072.1536.grb' + FNTSFA = '' + FNACNA = '' + FNSNOA = '' + FNVMNC = 'INPUT/C96.vegetation_greenness.tileX.nc' + FNVMXC = 'INPUT/C96.vegetation_greenness.tileX.nc' + FNSLPC = 'INPUT/C96.slope_type.tileX.nc' + FNABSC = 'INPUT/C96.maximum_snow_albedo.tileX.nc' + LDEBUG = .false. + FSMCL(2) = 99999 + FSMCL(3) = 99999 + FSMCL(4) = 99999 + LANDICE = .false. + FTSFS = 90 + FAISL = 99999 + FAISS = 99999 + FSNOL = 99999 + FSNOS = 99999 + FSICL = 0 + FSICS = 0 + FTSFL = 99999 + FVETL = 99999 + FSOTL = 99999 + FvmnL = 99999 + FvmxL = 99999 + FSLPL = 99999 + FABSL = 99999 +/ + +&fv_grid_nml + grid_file = 'INPUT/grid_spec.nc' +/ + +&nam_stochy +/ + +&nam_sfcperts + lndp_type = 0 + lndp_model_type = 0 + LNDP_TAU=21600, + LNDP_LSCALE=500000, + ISEED_LNDP=2010, + lndp_var_list = 'XXX' + lndp_prt_list = -999 +/ + +&MOM_input_nml + output_directory = './MOM6_OUTPUT', + input_filename = 'n' + restart_input_dir = 'INPUT/', + restart_output_dir = './RESTART/' + parameter_filename = 'INPUT/MOM_input', + 'INPUT/MOM_override'/ diff --git a/parm/templates/template.data_table b/parm/templates/template.LND.data_table similarity index 100% rename from parm/templates/template.data_table rename to parm/templates/template.LND.data_table diff --git a/parm/templates/template.datm.streams b/parm/templates/template.LND.datm.streams similarity index 100% rename from parm/templates/template.datm.streams rename to parm/templates/template.LND.datm.streams diff --git a/parm/templates/template.datm_in b/parm/templates/template.LND.datm_in similarity index 100% rename from parm/templates/template.datm_in rename to parm/templates/template.LND.datm_in diff --git a/parm/templates/template.diag_table b/parm/templates/template.LND.diag_table similarity index 100% rename from parm/templates/template.diag_table rename to parm/templates/template.LND.diag_table diff --git a/parm/templates/template.fd_ufs.yaml b/parm/templates/template.LND.fd_ufs.yaml similarity index 100% rename from parm/templates/template.fd_ufs.yaml rename to parm/templates/template.LND.fd_ufs.yaml diff --git a/parm/templates/template.input.nml b/parm/templates/template.LND.input.nml similarity index 100% rename from parm/templates/template.input.nml rename to parm/templates/template.LND.input.nml diff --git a/parm/templates/template.chgres_cube b/parm/templates/template.chgres_cube new file mode 100644 index 00000000..27831725 --- /dev/null +++ b/parm/templates/template.chgres_cube @@ -0,0 +1,19 @@ +&config + mosaic_file_target_grid="{{ mosaic_file_target_grid }}" + fix_dir_target_grid="{{ fix_dir_target_grid }}" + orog_dir_target_grid="{{ orog_dir_target_grid }}" + orog_files_target_grid="C{{ res }}_oro_data.tile1.nc","C{{ res }}_oro_data.tile2.nc","C{{ res }}_oro_data.tile3.nc","C{{ res }}_oro_data.tile4.nc","C{{ res }}_oro_data.tile5.nc","C{{ res }}_oro_data.tile6.nc" + sfc_files_input_grid="{{ sfc_files_input_grid }}" + atm_files_input_grid="{{ atm_files_input_grid }}" + data_dir_input_grid="{{ data_dir_input_grid }}" + vcoord_file_target_grid="{{ vcoord_file_target_grid }}" + cycle_mon={{ cycle_mon }} + cycle_day={{ cycle_day }} + cycle_hour={{ cycle_hour }} + convert_atm=.true. + convert_nst=.true. + convert_sfc=.true. + input_type="{{ input_type }}" + tracers_input="spfh","clwmr","o3mr","icmr","rwmr","snmr","grle" + tracers="sphum","liq_wat","o3mr","ice_wat","rainwat","snowwat","graupel" +/ diff --git a/parm/templates/template.coupler.res b/parm/templates/template.coupler.res index 652666da..23149cb7 100644 --- a/parm/templates/template.coupler.res +++ b/parm/templates/template.coupler.res @@ -1,4 +1,4 @@ - 2 (Calendar: no_calendar=0, thirty_day_months=1, julian=2, gregorian=3, noleap=4) + {{ coupler_calendar }} (Calendar: no_calendar=0, thirty_day_months=1, julian=2, gregorian=3, noleap=4) {{ yyyp }} {{ mp }} {{ dp }} {{ hp }} 0 0 Model start time: year, month, day, hour, minute, second {{ yyyy }} {{ mm }} {{ dd }} {{ hh }} 0 0 Current model time: year, month, day, hour, minute, second diff --git a/parm/templates/template.jedi2ufs b/parm/templates/template.jedi2ufs index 4f31a316..48cd9667 100644 --- a/parm/templates/template.jedi2ufs +++ b/parm/templates/template.jedi2ufs @@ -10,7 +10,7 @@ tile_size = {{ res }} tile_path = "{{ fix_landda }}/FV3_fix_tiled/C{{ res }}/" - tile_fstub = "{{ tstub }}" + tile_fstub = "{{ fn_orog }}" !------------------- only restart conversion ------------------- ! Time stamp for conversion for restart conversion diff --git a/parm/templates/template.land_analysis.yaml b/parm/templates/template.land_analysis.yaml index e801e33b..ceb4d773 100644 --- a/parm/templates/template.land_analysis.yaml +++ b/parm/templates/template.land_analysis.yaml @@ -7,100 +7,169 @@ workflow: cycledef: - attrs: group: cycled - spec: 200001040000 200001050000 24:00:00 + spec: {{ date_first_cycle }}00 {{ date_last_cycle }}00 {{ date_cycle_freq_hr }}:00:00 + - attrs: + group: first_cycle + spec: {{ date_first_cycle }}00 {{ date_first_cycle }}00 {{ date_cycle_freq_hr }}:00:00 + - attrs: + group: cycled_from_second + spec: {{ date_second_cycle }}00 {{ date_last_cycle }}00 {{ date_cycle_freq_hr }}:00:00 entities: - MACHINE: "{{ machine }}" - SCHED: "slurm" ACCOUNT: "{{ account }}" + APP: "{{ app }}" + ATM_IO_LAYOUT_X: "{{ atm_io_layout_x }}" + ATM_IO_LAYOUT_Y: "{{ atm_io_layout_y }}" + ATM_LAYOUT_X: "{{ atm_layout_x }}" + ATM_LAYOUT_Y: "{{ atm_layout_y }}" + ATMOS_FORC: "gswp3" + CCPP_SUITE: "{{ ccpp_suite }}" + COLDSTART: "{{ coldstart }}" + COUPLER_CALENDAR: "{{ coupler_calendar }}" + DATE_CYCLE_FREQ_HR: "{{ date_cycle_freq_hr }}" + DATE_FIRST_CYCLE: "{{ date_first_cycle }}" + DT_ATMOS: "{{ dt_atmos }}" + DT_RUNSEQ: "{{ dt_runseq }}" + envir: "{{ envir }}" EXP_BASEDIR: "{{ exp_basedir }}" - JEDI_INSTALL: "{{ jedi_install }}" + EXP_CASE_NAME: "{{ exp_case_name }}" + FCSTHR: "{{ fcsthr }}" + FHROT: "{{ fhrot }}" + IC_DATA_MODEL: "{{ ic_data_model }}" + IMO: "{{ imo }}" + JEDI_PATH: "{{ jedi_path }}" + JEDI_PY_VER: "{{ jedi_py_ver }}" + JMO: "{{ jmo }}" + KEEPDATA: "YES" + LND_CALC_SNET: "{{ lnd_calc_snet }}" + LND_IC_TYPE: "{{ lnd_ic_type }}" + LND_INITIAL_ALBEDO: "{{ lnd_initial_albedo }}" + LND_LAYOUT_X: "{{ lnd_layout_x }}" + LND_LAYOUT_Y: "{{ lnd_layout_y }}" + LND_OUTPUT_FREQ_SEC: "{{ lnd_output_freq_sec }}" + MACHINE: "{{ machine }}" + MED_COUPLING_MODE: "{{ med_coupling_mode }}" + model_ver: "{{ model_ver }}" + NET: "{{ net }}" + NNODES_FORECAST: "{{ nnodes_forecast }}" + NPROCS_ANALYSIS: "{{ nprocs_analysis }}" + NPROCS_FCST_IC: "{{ nprocs_fcst_ic }}" + NPROCS_FORECAST: "{{ nprocs_forecast }}" + NPROCS_FORECAST_ATM: "{{ nprocs_forecast_atm }}" + NPROCS_FORECAST_LND: "{{ nprocs_forecast_lnd }}" + NPROCS_PER_NODE: "{{ nprocs_per_node }}" + OBSDIR: "{{ obsdir }}" + OBS_GHCN: "{{ obs_ghcn }}" + OUTPUT_FH: "{{ output_fh }}" + RES: "{{ res }}" + RESTART_INTERVAL: "{{ restart_interval }}" + RUN: "{{ run }}" + SCHED: "slurm" WARMSTART_DIR: "{{ warmstart_dir }}" - ATMOS_FORC: "gswp3" - RES: "96" - NPROCS_ANALYSIS: "6" - FCSTHR: "24" - DT_ATMOS: "900" - DT_RUNSEQ: "3600" - NPROCS_FORECAST: "26" - NPROCS_FORECAST_ATM: "12" - NPROCS_FORECAST_LND: "12" - LND_LAYOUT_X: "1" - LND_LAYOUT_Y: "2" - LND_OUTPUT_FREQ_SEC: "21600" - NNODES_FORECAST: "1" - NPROCS_PER_NODE: "26" - OBSDIR: "" - OBSDIR_SUBDIR: "" - OBS_TYPES: "GHCN" - DAtype: "letkfoi_snow" - TSTUB: "oro_C96.mx100" WE2E_TEST: "{{ we2e_test }}" WE2E_ATOL: "1e-7" WE2E_LOG_FN: "we2e.log" - NET: "landda" - envir: "test" - model_ver: "v2.0.0" - RUN: "landda" + WRITE_GROUPS: "{{ write_groups }}" + WRITE_TASKS_PER_GROUP: "{{ write_tasks_per_group }}" HOMElandda: "&EXP_BASEDIR;/land-DA_workflow" PTMP: "&EXP_BASEDIR;/ptmp" COMROOT: "&PTMP;/&envir;/com" DATAROOT: "&PTMP;/&envir;/tmp" - KEEPDATA: "YES" LOGDIR: "&COMROOT;/output/logs" LOGFN_SUFFIX: "_@Y@m@d@H.log" PDY: "@Y@m@d" cyc: "@H" - DATADEP_FILE1: "&WARMSTART_DIR;/ufs_land_restart.@Y-@m-@d_@H-00-00.tile1.nc" - DATADEP_FILE2: "&WARMSTART_DIR;/ufs_land_restart.@Y-@m-@d_@H-00-00.nc" - DATADEP_FILE3: "&DATAROOT;/DATA_SHARE/RESTART/ufs_land_restart.@Y-@m-@d_@H-00-00.tile1.nc" - DATADEP_FILE4: "&DATAROOT;/DATA_SHARE/RESTART/ufs_land_restart.@Y-@m-@d_@H-00-00.nc" + DATADEP_LRST1: "&DATAROOT;/DATA_SHARE/RESTART/ufs_land_restart.@Y-@m-@d_@H-00-00.tile6.nc" + DATADEP_LRST2: "&WARMSTART_DIR;/ufs_land_restart.@Y-@m-@d_@H-00-00.tile6.nc" + DATADEP_COLDSTART: "&EXP_BASEDIR;/exp_case/&EXP_CASE_NAME;/task_skip_coldstart_@Y@m@d@H.txt" + DATADEP_SFC1: "&DATAROOT;/DATA_SHARE/RESTART/@Y@m@d.@H0000.sfc_data.tile6.nc" + DATADEP_SFC2: "&WARMSTART_DIR;/@Y@m@d.@H0000.sfc_data.tile6.nc" log: "&LOGDIR;/workflow.log" tasks: task_prep_obs: attrs: +{%- if coldstart == "YES" %} + cycledefs: cycled_from_second +{%- else %} cycledefs: cycled +{%- endif %} maxtries: 2 envars: - OBSDIR: "&OBSDIR;" - OBSDIR_SUBDIR: "&OBSDIR_SUBDIR;" - OBS_TYPES: "&OBS_TYPES;" - MACHINE: "&MACHINE;" - SCHED: "&SCHED;" ACCOUNT: "&ACCOUNT;" ATMOS_FORC: "&ATMOS_FORC;" - model_ver: "&model_ver;" - HOMElandda: "&HOMElandda;" COMROOT: "&COMROOT;" + cyc: "&cyc;" DATAROOT: "&DATAROOT;" + DATE_CYCLE_FREQ_HR: "&DATE_CYCLE_FREQ_HR;" + HOMElandda: "&HOMElandda;" + JEDI_PATH: "&JEDI_PATH;" + JEDI_PY_VER: "&JEDI_PY_VER;" KEEPDATA: "&KEEPDATA;" + MACHINE: "&MACHINE;" + model_ver: "&model_ver;" + OBSDIR: "&OBSDIR;" + OBS_GHCN: "&OBS_GHCN;" PDY: "&PDY;" - cyc: "&cyc;" + SCHED: "&SCHED;" account: "&ACCOUNT;" command: '&HOMElandda;/parm/task_load_modules_run_jjob.sh "prep_obs" "&HOMElandda;" "&MACHINE;"' jobname: prep_obs cores: 1 - walltime: 00:02:00 + walltime: 00:30:00 queue: batch join: "&LOGDIR;/prep_obs&LOGFN_SUFFIX;" - task_pre_anal: + memory: 128G +{%- if ( app == "ATML" and coldstart == "YES" ) %} + task_fcst_ic: attrs: - cycledefs: cycled + cycledefs: first_cycle maxtries: 2 envars: + ACCOUNT: "&ACCOUNT;" + APP: "&APP;" + COMROOT: "&COMROOT;" + cyc: "&cyc;" + DATAROOT: "&DATAROOT;" + HOMElandda: "&HOMElandda;" + IC_DATA_MODEL: "&IC_DATA_MODEL;" + KEEPDATA: "&KEEPDATA;" MACHINE: "&MACHINE;" + model_ver: "&model_ver;" + NPROCS_FCST_IC: "&NPROCS_FCST_IC;" + PDY: "&PDY;" + RES: "&RES;" SCHED: "&SCHED;" + account: "&ACCOUNT;" + command: '&HOMElandda;/parm/task_load_modules_run_jjob.sh "fcst_ic" "&HOMElandda;" "&MACHINE;"' + jobname: fcst_ic + nodes: "1:ppn=&NPROCS_FCST_IC;" + walltime: 00:15:00 + queue: batch + join: "&LOGDIR;/fcst_ic&LOGFN_SUFFIX;" + memory: 128G +{%- endif %} +{%- if app == "LND" %} + task_pre_anal: + attrs: +{%- if coldstart == "YES" %} + cycledefs: cycled_from_second +{%- else %} + cycledefs: cycled +{%- endif %} + maxtries: 2 + envars: ACCOUNT: "&ACCOUNT;" - RES: "&RES;" - TSTUB: "&TSTUB;" - WARMSTART_DIR: "&WARMSTART_DIR;" - model_ver: "&model_ver;" - RUN: "&RUN;" - HOMElandda: "&HOMElandda;" COMROOT: "&COMROOT;" + cyc: "&cyc;" DATAROOT: "&DATAROOT;" + HOMElandda: "&HOMElandda;" KEEPDATA: "&KEEPDATA;" + MACHINE: "&MACHINE;" + model_ver: "&model_ver;" PDY: "&PDY;" - cyc: "&cyc;" + RES: "&RES;" + RUN: "&RUN;" + SCHED: "&SCHED;" + WARMSTART_DIR: "&WARMSTART_DIR;" account: "&ACCOUNT;" command: '&HOMElandda;/parm/task_load_modules_run_jjob.sh "pre_anal" "&HOMElandda;" "&MACHINE;"' jobname: pre_anal @@ -110,47 +179,47 @@ workflow: join: "&LOGDIR;/pre_anal&LOGFN_SUFFIX;" dependency: or: - datadep_file1: - attrs: - age: 5 - value: "&DATADEP_FILE1;" - datadep_file2: + datadep_lrst1: attrs: age: 5 - value: "&DATADEP_FILE2;" - datadep_file3: + value: "&DATADEP_LRST1;" +{%- if coldstart == "NO" %} + datadep_lrst2: attrs: age: 5 - value: "&DATADEP_FILE3;" - datadep_file4: - attrs: - age: 5 - value: "&DATADEP_FILE4;" + value: "&DATADEP_LRST2;" +{%- endif %} +{%- endif %} task_analysis: attrs: +{%- if coldstart == "YES" %} + cycledefs: cycled_from_second +{%- else %} cycledefs: cycled +{%- endif %} maxtries: 2 envars: - OBS_TYPES: "&OBS_TYPES;" - MACHINE: "&MACHINE;" - SCHED: "&SCHED;" ACCOUNT: "&ACCOUNT;" - RES: "&RES;" - TSTUB: "&TSTUB;" - WE2E_TEST: "&WE2E_TEST;" - WE2E_ATOL: "&WE2E_ATOL;" - WE2E_LOG_FN: "&WE2E_LOG_FN;" - LOGDIR: "&LOGDIR;" - model_ver: "&model_ver;" - HOMElandda: "&HOMElandda;" COMROOT: "&COMROOT;" + COUPLER_CALENDAR: "&COUPLER_CALENDAR;" + cyc: "&cyc;" DATAROOT: "&DATAROOT;" + DATE_CYCLE_FREQ_HR: "&DATE_CYCLE_FREQ_HR;" KEEPDATA: "&KEEPDATA;" - PDY: "&PDY;" - cyc: "&cyc;" - DAtype: "&DAtype;" + HOMElandda: "&HOMElandda;" + JEDI_PATH: "&JEDI_PATH;" + LOGDIR: "&LOGDIR;" + MACHINE: "&MACHINE;" + model_ver: "&model_ver;" NPROCS_ANALYSIS: "&NPROCS_ANALYSIS;" - JEDI_INSTALL: "&JEDI_INSTALL;" + OBS_GHCN: "&OBS_GHCN;" + PDY: "&PDY;" + RES: "&RES;" + SCHED: "&SCHED;" + WARMSTART_DIR: "&WARMSTART_DIR;" + WE2E_TEST: "&WE2E_TEST;" + WE2E_ATOL: "&WE2E_ATOL;" + WE2E_LOG_FN: "&WE2E_LOG_FN;" account: "&ACCOUNT;" command: '&HOMElandda;/parm/task_load_modules_run_jjob.sh "analysis" "&HOMElandda;" "&MACHINE;"' jobname: analysis @@ -159,32 +228,53 @@ workflow: queue: batch join: "&LOGDIR;/analysis&LOGFN_SUFFIX;" dependency: - taskdep: - attrs: - task: pre_anal + and: + taskdep_prep_obs: + attrs: + task: prep_obs +{%- if app == "LND" %} + taskdep_pre_anal: + attrs: + task: pre_anal +{%- else %} + or: + datadep_sfc1: + attrs: + age: 5 + value: "&DATADEP_SFC1;" + datadep_sfc2: + attrs: + age: 5 + value: "&DATADEP_SFC2;" +{%- endif %} task_post_anal: attrs: +{%- if coldstart == "YES" %} + cycledefs: cycled_from_second +{%- else %} cycledefs: cycled +{%- endif %} maxtries: 2 envars: - MACHINE: "&MACHINE;" - SCHED: "&SCHED;" ACCOUNT: "&ACCOUNT;" - RES: "&RES;" - TSTUB: "&TSTUB;" - WE2E_TEST: "&WE2E_TEST;" - WE2E_ATOL: "&WE2E_ATOL;" - WE2E_LOG_FN: "&WE2E_LOG_FN;" - LOGDIR: "&LOGDIR;" - model_ver: "&model_ver;" - RUN: "&RUN;" - HOMElandda: "&HOMElandda;" COMROOT: "&COMROOT;" + cyc: "&cyc;" DATAROOT: "&DATAROOT;" + DATE_CYCLE_FREQ_HR: "&DATE_CYCLE_FREQ_HR;" + FCSTHR: "&FCSTHR;" + HOMElandda: "&HOMElandda;" KEEPDATA: "&KEEPDATA;" + LOGDIR: "&LOGDIR;" + MACHINE: "&MACHINE;" + model_ver: "&model_ver;" PDY: "&PDY;" - cyc: "&cyc;" - FCSTHR: "&FCSTHR;" + RES: "&RES;" + RUN: "&RUN;" + SCHED: "&SCHED;" + WARMSTART_DIR: "&WARMSTART_DIR;" + WE2E_TEST: "&WE2E_TEST;" + WE2E_ATOL: "&WE2E_ATOL;" + WE2E_LOG_FN: "&WE2E_LOG_FN;" account: "&ACCOUNT;" command: '&HOMElandda;/parm/task_load_modules_run_jjob.sh "post_anal" "&HOMElandda;" "&MACHINE;"' jobname: post_anal @@ -201,37 +291,56 @@ workflow: cycledefs: cycled maxtries: 2 envars: - OBS_TYPES: "&OBS_TYPES;" - MACHINE: "&MACHINE;" - SCHED: "&SCHED;" ACCOUNT: "&ACCOUNT;" + APP: "&APP;" + ATM_IO_LAYOUT_X: "&ATM_IO_LAYOUT_X;" + ATM_IO_LAYOUT_Y: "&ATM_IO_LAYOUT_Y;" + ATM_LAYOUT_X: "&ATM_LAYOUT_X;" + ATM_LAYOUT_Y: "&ATM_LAYOUT_Y;" ATMOS_FORC: "&ATMOS_FORC;" - RES: "&RES;" - WARMSTART_DIR: "&WARMSTART_DIR;" - WE2E_TEST: "&WE2E_TEST;" - WE2E_ATOL: "&WE2E_ATOL;" - WE2E_LOG_FN: "&WE2E_LOG_FN;" - LOGDIR: "&LOGDIR;" - model_ver: "&model_ver;" - HOMElandda: "&HOMElandda;" + CCPP_SUITE: "&CCPP_SUITE;" + COLDSTART: "&COLDSTART;" COMROOT: "&COMROOT;" - DATAROOT: "&DATAROOT;" - KEEPDATA: "&KEEPDATA;" - LOGDIR: "&LOGDIR;" - PDY: "&PDY;" + COUPLER_CALENDAR: "&COUPLER_CALENDAR;" cyc: "&cyc;" - DAtype: "&DAtype;" - FCSTHR: "&FCSTHR;" + DATAROOT: "&DATAROOT;" + DATE_FIRST_CYCLE: "&DATE_FIRST_CYCLE;" + DATE_CYCLE_FREQ_HR: "&DATE_CYCLE_FREQ_HR;" DT_ATMOS: "&DT_ATMOS;" DT_RUNSEQ: "&DT_RUNSEQ;" - NPROCS_FORECAST: "&NPROCS_FORECAST;" - NPROCS_FORECAST_ATM: "&NPROCS_FORECAST_ATM;" - NPROCS_FORECAST_LND: "&NPROCS_FORECAST_LND;" + FCSTHR: "&FCSTHR;" + FHROT: "&FHROT;" + HOMElandda: "&HOMElandda;" + IMO: "&IMO;" + JMO: "&JMO;" + KEEPDATA: "&KEEPDATA;" + LND_CALC_SNET: "&LND_CALC_SNET;" + LND_IC_TYPE: "&LND_IC_TYPE;" + LND_INITIAL_ALBEDO: "&LND_INITIAL_ALBEDO;" LND_LAYOUT_X: "&LND_LAYOUT_X;" LND_LAYOUT_Y: "&LND_LAYOUT_Y;" LND_OUTPUT_FREQ_SEC: "&LND_OUTPUT_FREQ_SEC;" + LOGDIR: "&LOGDIR;" + MACHINE: "&MACHINE;" + MED_COUPLING_MODE: "&MED_COUPLING_MODE;" + model_ver: "&model_ver;" + NET: "&NET;" NNODES_FORECAST: "&NNODES_FORECAST;" + NPROCS_FORECAST: "&NPROCS_FORECAST;" + NPROCS_FORECAST_ATM: "&NPROCS_FORECAST_ATM;" + NPROCS_FORECAST_LND: "&NPROCS_FORECAST_LND;" NPROCS_PER_NODE: "&NPROCS_PER_NODE;" + OUTPUT_FH: "&OUTPUT_FH;" + PDY: "&PDY;" + RES: "&RES;" + RESTART_INTERVAL: "&RESTART_INTERVAL;" + SCHED: "&SCHED;" + WARMSTART_DIR: "&WARMSTART_DIR;" + WE2E_TEST: "&WE2E_TEST;" + WE2E_ATOL: "&WE2E_ATOL;" + WE2E_LOG_FN: "&WE2E_LOG_FN;" + WRITE_GROUPS: "&WRITE_GROUPS;" + WRITE_TASKS_PER_GROUP: "&WRITE_TASKS_PER_GROUP;" account: "&ACCOUNT;" command: '&HOMElandda;/parm/task_load_modules_run_jjob.sh "forecast" "&HOMElandda;" "&MACHINE;"' jobname: forecast @@ -240,28 +349,41 @@ workflow: queue: batch join: "&LOGDIR;/forecast&LOGFN_SUFFIX;" dependency: - taskdep: - attrs: - task: post_anal + or: + taskdep_post_anal: + attrs: + task: post_anal + taskdep_fcst_ic: + attrs: + task: fcst_ic + datadep_coldstart: + attrs: + age: 5 + value: "&DATADEP_COLDSTART;" task_plot_stats: attrs: +{%- if coldstart == "YES" %} + cycledefs: cycled_from_second +{%- else %} cycledefs: cycled +{%- endif %} maxtries: 2 envars: - MACHINE: "&MACHINE;" - SCHED: "&SCHED;" ACCOUNT: "&ACCOUNT;" - model_ver: "&model_ver;" - RUN: "&RUN;" - HOMElandda: "&HOMElandda;" COMROOT: "&COMROOT;" + cyc: "&cyc;" DATAROOT: "&DATAROOT;" + DATE_CYCLE_FREQ_HR: "&DATE_CYCLE_FREQ_HR;" + HOMElandda: "&HOMElandda;" KEEPDATA: "&KEEPDATA;" - PDY: "&PDY;" - cyc: "&cyc;" LOGDIR: "&LOGDIR;" + MACHINE: "&MACHINE;" + model_ver: "&model_ver;" NPROCS_ANALYSIS: "&NPROCS_ANALYSIS;" NPROCS_FORECAST: "&NPROCS_FORECAST;" + PDY: "&PDY;" + RUN: "&RUN;" + SCHED: "&SCHED;" account: "&ACCOUNT;" command: '&HOMElandda;/parm/task_load_modules_run_jjob.sh "plot_stats" "&HOMElandda;" "&MACHINE;"' jobname: plot_stats diff --git a/parm/launch_rocoto_wflow.sh b/parm/templates/template.launch_rocoto_wflow.sh similarity index 94% rename from parm/launch_rocoto_wflow.sh rename to parm/templates/template.launch_rocoto_wflow.sh index a0c07ef9..76028d7d 100755 --- a/parm/launch_rocoto_wflow.sh +++ b/parm/templates/template.launch_rocoto_wflow.sh @@ -4,8 +4,9 @@ set -u # Set path -PARMdir=$(cd "$(dirname "$(readlink -f -n "${BASH_SOURCE[0]}" )" )" && pwd -P) +PARMdir="{{ parm_dir }}" source ${PARMdir}/detect_platform.sh +workdir="{{ exp_case_path }}" # Load rocoto module purge @@ -27,7 +28,7 @@ else fi # Set file names. -WFLOW_XML_FN="land_analysis.xml" +WFLOW_XML_FN="{{ fn_xml_rocoto }}" rocoto_xml_bn=$( basename "${WFLOW_XML_FN}" ".xml" ) rocoto_database_fn="${rocoto_xml_bn}.db" WFLOW_LOG_FN="log.rocoto_launch" @@ -37,7 +38,7 @@ LOG_FN_ROCOTO_RUN="log.rocoto_run" wflow_status="IN PROGRESS" # crontab line -CRONTAB_LINE="*/2 * * * * cd ${PARMdir} && ./launch_rocoto_wflow.sh >> ${WFLOW_LOG_FN}" +CRONTAB_LINE="*/2 * * * * cd ${workdir} && ./launch_rocoto_wflow.sh >> ${WFLOW_LOG_FN}" if [ "$#" -eq 1 ] && [ "$1" == "add" ]; then msg="The crontab line is added: @@ -48,7 +49,7 @@ if [ "$#" -eq 1 ] && [ "$1" == "add" ]; then printf "%s" "$msg" fi -cd "${PARMdir}" +cd "${workdir}" rocotorun_cmd="rocotorun -w \"${WFLOW_XML_FN}\" -d \"${rocoto_database_fn}\" -v 10" eval ${rocotorun_cmd} > ${LOG_FN_ROCOTO_RUN} 2>&1 diff --git a/parm/templates/template.model_configure b/parm/templates/template.model_configure index 07883611..ffea1b7a 100644 --- a/parm/templates/template.model_configure +++ b/parm/templates/template.model_configure @@ -6,4 +6,34 @@ start_minute: 0 start_second: 0 nhours_fcst: {{ fcsthr }} dt_atmos: {{ dt_atmos }} -fhrot: 0 +fhrot: {{ fhrot }} + +{%- if app == "ATML" %} +restart_interval: {{ restart_interval }} +quilting: .true. +quilting_restart: .true. +write_groups: {{ write_groups }} +write_tasks_per_group: {{ write_tasks_per_group }} +itasks: 1 +output_history: .true. +history_file_on_native_grid: .false. +write_dopost: .false. +write_nsflip: .true. +num_files: 2 +filename_base: 'atm' 'sfc' +output_grid: cubed_sphere_grid +output_file: 'netcdf' +zstandard_level: 0 +ideflate: 0 +quantize_mode: 'quantize_bitround' +quantize_nsd: 0 +ichunk2d: 0 +jchunk2d: 0 +ichunk3d: 0 +jchunk3d: 0 +kchunk3d: 0 +imo: {{ imo }} +jmo: {{ jmo }} +output_fh: {{ output_fh }} +iau_offset: 0 +{%- endif %} diff --git a/parm/templates/template.ufs.configure b/parm/templates/template.ufs.configure index 0d6ec1e3..10aa1e30 100644 --- a/parm/templates/template.ufs.configure +++ b/parm/templates/template.ufs.configure @@ -19,17 +19,17 @@ MED_omp_num_threads: 1 MED_attributes:: Verbosity = 1 Diagnostic = 0 - ATM_model = datm + ATM_model = {{ atm_model }} LND_model = noahmp MED_model = cmeps history_n = 6 history_option = nhours history_ymd = -999 - coupling_mode = ufs.nfrac.aoflux + coupling_mode = {{ med_coupling_mode }} :: # ATM # -ATM_model: datm +ATM_model: {{ atm_model }} ATM_petlist_bounds: 0 {{ nprocs_atm_m1 }} ATM_omp_num_threads: 1 ATM_attributes:: @@ -46,7 +46,7 @@ LND_attributes:: Diagnostic = 0 mosaic_file = INPUT/C96_mosaic.nc input_dir = INPUT/ - ic_type = custom + ic_type = {{ lnd_ic_type }} layout = {{ lnd_layout_x }}:{{ lnd_layout_y }} # need to be consistent with number of PEs (6*Lx*Ly) num_soil_levels = 4 forcing_height = 10 @@ -69,8 +69,8 @@ LND_attributes:: surface_thermal_roughness_option = 2 output_freq = {{ lnd_output_freq_sec }} restart_freq = -1 - calc_snet = .true. - initial_albedo = 0.25 + calc_snet = {{ lnd_calc_snet }} + initial_albedo = {{ lnd_initial_albedo }} :: # cold @@ -102,7 +102,7 @@ ALLCOMP_attributes:: ScalarFieldIdxGridNTile = 3 ScalarFieldIdxNextSwCday = 4 # required for data atmosphere configurations ScalarFieldName = cpl_scalars - start_type = continue + start_type = {{ allcomp_start_type }} restart_dir = ./RESTART/ case_name = ufs.cpld restart_n = 1 @@ -112,7 +112,7 @@ ALLCOMP_attributes:: stop_n = 24 stop_option = nhours stop_ymd = -999 - read_restart = .true. + read_restart = {{ allcomp_read_restart }} mediator_present = true orb_eccen = 1.e36 orb_iyear = 2000 diff --git a/parm/templates/template.ufs2jedi b/parm/templates/template.ufs2jedi index 9c4c5a81..5a7cd346 100644 --- a/parm/templates/template.ufs2jedi +++ b/parm/templates/template.ufs2jedi @@ -10,7 +10,7 @@ tile_size = {{ res }} tile_path = "{{ fix_landda }}/FV3_fix_tiled/C{{ res }}/" - tile_fstub = "{{ tstub }}" + tile_fstub = "{{ fn_orog }}" !------------------- only restart conversion ------------------- ! Time stamp for conversion for restart conversion diff --git a/scripts/exlandda_analysis.sh b/scripts/exlandda_analysis.sh index 5b6433e6..bcd67c6c 100755 --- a/scripts/exlandda_analysis.sh +++ b/scripts/exlandda_analysis.sh @@ -2,7 +2,9 @@ set -xue -TPATH="${FIXlandda}/FV3_fix_tiled/C${RES}" +# Set other dates +PTIME=$($NDATE -${DATE_CYCLE_FREQ_HR} $PDY$cyc) + YYYY=${PDY:0:4} MM=${PDY:4:2} DD=${PDY:6:2} @@ -14,8 +16,8 @@ HP=${PTIME:8:2} FILEDATE=${YYYY}${MM}${DD}.${HH}0000 -JEDI_STATICDIR=${JEDI_INSTALL}/jedi-bundle/fv3-jedi/test/Data -JEDI_EXECDIR=${JEDI_INSTALL}/build/bin +JEDI_STATICDIR=${JEDI_PATH}/jedi-bundle/fv3-jedi/test/Data +JEDI_EXECDIR=${JEDI_PATH}/build/bin case $MACHINE in "hera") @@ -32,28 +34,38 @@ case $MACHINE in ;; esac -YAML_DA=construct GFSv17="NO" B=30 # back ground error std for LETKFOI -# Import input files +# copy sfc_data files into work directory for itile in {1..6} do - cp ${DATA_SHARE}/${FILEDATE}.sfc_data.tile${itile}.nc . + sfc_fn="${FILEDATE}.sfc_data.tile${itile}.nc" + if [ -f ${DATA_RESTART}/${sfc_fn} ]; then + cp -p ${DATA_RESTART}/${sfc_fn} . + elif [ -f ${WARMSTART_DIR}/${sfc_fn} ]; then + cp -p ${WARMSTART_DIR}/${sfc_fn} . + else + err_exit "Initial sfc_data files do not exist" + fi + # copy sfc_data file for comparison + cp -p ${sfc_fn} "${sfc_fn}_old" done -ln -nsf ${COMIN}/obs/*_${YYYY}${MM}${DD}${HH}.nc . +# Copy obserbation file to work directory +ln -nsf ${COMIN}/obs/GHCN_${YYYY}${MM}${DD}${HH}.nc . # update coupler.res file settings="\ - 'yyyy': !!str ${YYYY} - 'mm': !!str ${MM} - 'dd': !!str ${DD} - 'hh': !!str ${HH} + 'coupler_calendar': ${COUPLER_CALENDAR} 'yyyp': !!str ${YYYP} 'mp': !!str ${MP} 'dp': !!str ${DP} 'hp': !!str ${HP} -" # End of settins variable + 'yyyy': !!str ${YYYY} + 'mm': !!str ${MM} + 'dd': !!str ${DD} + 'hh': !!str ${HH} +" # End of settings variable fp_template="${PARMlandda}/templates/template.coupler.res" fn_namelist="${DATA}/${FILEDATE}.coupler.res" @@ -63,34 +75,28 @@ ${USHlandda}/fill_jinja_template.py -u "${settings}" -t "${fp_template}" -o "${f # CREATE BACKGROUND ENSEMBLE (LETKFOI) ################################################ -if [[ ${DAtype} == "letkfoi_snow" ]]; then - - if [ $GFSv17 == "YES" ]; then - SNOWDEPTHVAR="snodl" - else - SNOWDEPTHVAR="snwdph" - # replace field overwrite file - cp ${PARMlandda}/jedi/gfs-land.yaml ${DATA}/gfs-land.yaml +if [ $GFSv17 == "YES" ]; then + SNOWDEPTHVAR="snodl" +else + SNOWDEPTHVAR="snwdph" + # replace field overwrite file + cp -p ${PARMlandda}/jedi/gfs-land.yaml ${DATA}/gfs-land.yaml +fi +# FOR LETKFOI, CREATE THE PSEUDO-ENSEMBLE +for ens in pos neg +do + if [ -e $DATA/mem_${ens} ]; then + rm -r $DATA/mem_${ens} fi - # FOR LETKFOI, CREATE THE PSEUDO-ENSEMBLE - for ens in pos neg - do - if [ -e $DATA/mem_${ens} ]; then - rm -r $DATA/mem_${ens} - fi - mkdir -p $DATA/mem_${ens} - cp ${FILEDATE}.sfc_data.tile*.nc ${DATA}/mem_${ens} - cp ${DATA}/${FILEDATE}.coupler.res ${DATA}/mem_${ens}/${FILEDATE}.coupler.res - done - - echo 'do_landDA: calling create ensemble' + mkdir -p $DATA/mem_${ens} + cp -p ${FILEDATE}.sfc_data.tile*.nc ${DATA}/mem_${ens} + cp -p ${DATA}/${FILEDATE}.coupler.res ${DATA}/mem_${ens}/${FILEDATE}.coupler.res +done - # using ioda mods to get a python version with netCDF4 - ${USHlandda}/letkf_create_ens.py $FILEDATE $SNOWDEPTHVAR $B - if [[ $? != 0 ]]; then - echo "letkf create failed" - exit 10 - fi +# using ioda mods to get a python version with netCDF4 +${USHlandda}/letkf_create_ens.py $FILEDATE $SNOWDEPTHVAR $B +if [[ $? != 0 ]]; then + err_exit "letkf create failed" fi ################################################ @@ -103,17 +109,11 @@ RESP1=$((RES+1)) mkdir -p output/DA/hofx # if yaml is specified by user, use that. Otherwise, build the yaml -if [[ $do_DA == "YES" ]]; then - - if [[ $YAML_DA == "construct" ]];then # construct the yaml - cp ${PARMlandda}/jedi/${DAtype}.yaml ${DATA}/letkf_land.yaml - for obs in "${OBS_TYPES[@]}"; - do - cat ${PARMlandda}/jedi/${obs}.yaml >> letkf_land.yaml - done - else # use specified yaml - echo "Using user specified YAML: ${YAML_DA}" - cp ${PARMlandda}/jedi/${YAML_DA} ${DATA}/letkf_land.yaml +if [ ${do_DA} = "YES" ]; then + + cp "${PARMlandda}/jedi/letkfoi_snow.yaml" "${DATA}/letkf_land.yaml" + if [ "${OBS_GHCN}" = "YES" ]; then + cat ${PARMlandda}/jedi/GHCN.yaml >> letkf_land.yaml fi # update jedi yaml file @@ -128,29 +128,23 @@ if [[ $do_DA == "YES" ]]; then 'mp': !!str ${MP} 'dp': !!str ${DP} 'hp': !!str ${HP} - 'tstub': ${TSTUB} - 'tpath': ${TPATH} + 'fn_orog': C${RES}_oro_data + 'datapath': ${FIXlandda}/FV3_fix_tiled/C${RES} 'res': ${RES} 'resp1': ${RESP1} 'driver_obs_only': false - " # End of settins variable + " # End of settings variable fp_template="${DATA}/letkf_land.yaml" fn_namelist="${DATA}/letkf_land.yaml" ${USHlandda}/fill_jinja_template.py -u "${settings}" -t "${fp_template}" -o "${fn_namelist}" fi -if [[ $do_HOFX == "YES" ]]; then - - if [[ $YAML_HOFX == "construct" ]];then # construct the yaml - cp ${PARMlandda}/jedi/${DAtype}.yaml ${DATA}/hofx_land.yaml - for obs in "${OBS_TYPES[@]}"; - do - cat ${PARMlandda}/jedi/${obs}.yaml >> hofx_land.yaml - done - else # use specified yaml - echo "Using user specified YAML: ${YAML_HOFX}" - cp ${PARMlandda}/jedi/${YAML_HOFX} ${DATA}/hofx_land.yaml +if [ "${do_HOFX}" = "YES" ]; then + + cp "${PARMlandda}/jedi/letkfoi_snow.yaml" "${DATA}/hofx_land.yaml" + if [ "${OBS_GHCN}" = "YES" ]; then + cat ${PARMlandda}/jedi/GHCN.yaml >> hofx_land.yaml fi # update jedi yaml file @@ -165,22 +159,22 @@ if [[ $do_HOFX == "YES" ]]; then 'mp': !!str ${MP} 'dp': !!str ${DP} 'hp': !!str ${HP} - 'tstub': ${TSTUB} - 'tpath': ${TPATH} + 'fn_orog': C${RES}_oro_data + 'datapath': ${FIXlandda}/FV3_fix_tiled/C${RES} 'res': ${RES} 'resp1': ${RESP1} 'driver_obs_only': true - " # End of settins variable + " # End of settings variable fp_template="${DATA}/hofx_land.yaml" fn_namelist="${DATA}/hofx_land.yaml" ${USHlandda}/fill_jinja_template.py -u "${settings}" -t "${fp_template}" -o "${fn_namelist}" fi -if [[ "$GFSv17" == "NO" ]]; then +if [ "$GFSv17" = "NO" ]; then cp ${PARMlandda}/jedi/gfs-land.yaml ${DATA}/gfs-land.yaml else - cp ${JEDI_INSTALL}/jedi-bundle/fv3-jedi/test/Data/fieldmetadata/gfs_v17-land.yaml ${DATA}/gfs-land.yaml + cp ${JEDI_PATH}/jedi-bundle/fv3-jedi/test/Data/fieldmetadata/gfs_v17-land.yaml ${DATA}/gfs-land.yaml fi ################################################ @@ -193,26 +187,24 @@ fi echo 'do_landDA: calling fv3-jedi' -if [[ $do_DA == "YES" ]]; then +if [ "${do_DA}" = "YES" ]; then export pgm="fv3jedi_letkf.x" . prep_step ${RUN_CMD} -n ${NPROCS_ANALYSIS} ${JEDI_EXECDIR}/$pgm letkf_land.yaml >>$pgmout 2>errfile export err=$?; err_chk cp errfile errfile_jedi_letkf if [[ $err != 0 ]]; then - echo "JEDI DA failed" - exit 10 + err_exit "JEDI DA failed" fi fi -if [[ $do_HOFX == "YES" ]]; then +if [ "${do_HOFX}" = "YES" ]; then export pgm="fv3jedi_letkf.x" . prep_step ${RUN_CMD} -n ${NPROCS_ANALYSIS} ${JEDI_EXECDIR}/$pgm hofx_land.yaml >>$pgmout 2>errfile export err=$?; err_chk cp errfile errfile_jedi_hofx if [[ $err != 0 ]]; then - echo "JEDI hofx failed" - exit 10 + err_exit "JEDI hofx failed" fi fi @@ -220,33 +212,27 @@ fi # Apply Increment to UFS sfc_data files ################################################ -if [[ $do_DA == "YES" ]]; then - - if [[ $DAtype == "letkfoi_snow" ]]; then +if [ "${do_DA}" = "YES" ]; then cat << EOF > apply_incr_nml &noahmp_snow date_str=${YYYY}${MM}${DD} - hour_str=$HH - res=$RES + hour_str=${HH} + res=${RES} frac_grid=$GFSv17 - orog_path="$TPATH" - otype="$TSTUB" + orog_path="${FIXlandda}/FV3_fix_tiled/C${RES}" + otype="C${RES}_oro_data" / EOF - echo 'do_landDA: calling apply snow increment' - - export pgm="apply_incr.exe" - . prep_step - # (n=6) -> this is fixed, at one task per tile (with minor code change, could run on a single proc). - ${RUN_CMD} -n 6 ${EXEClandda}/$pgm >>$pgmout 2>errfile - export err=$?; err_chk - cp errfile errfile_apply_incr - if [[ $err != 0 ]]; then - echo "apply snow increment failed" - exit 10 - fi + export pgm="apply_incr.exe" + . prep_step + # (n=6) -> this is fixed, at one task per tile (with minor code change, could run on a single proc). + ${RUN_CMD} -n 6 ${EXEClandda}/$pgm >>$pgmout 2>errfile + export err=$?; err_chk + cp errfile errfile_apply_incr + if [[ $err != 0 ]]; then + err_exit "apply snow increment failed" fi for itile in {1..6} @@ -261,19 +247,58 @@ do cp -p ${DATA}/${FILEDATE}.sfc_data.tile${itile}.nc ${COMOUT} done -if [[ -d output/DA/hofx ]]; then +if [ -d output/DA/hofx ]; then cp -p output/DA/hofx/* ${COMOUThofx} ln -nsf ${COMOUThofx}/* ${DATA_HOFX} fi + +############################################################ +# Comparison plot of sfc_data by JEDI increment +############################################################ +DO_PLOT_SFC_COMP="YES" +if [ "${DO_PLOT_SFC_COMP}" = "YES" ]; then + + fn_sfc_base="${FILEDATE}.sfc_data.tile" + fn_inc_base="${FILEDATE}.xainc.sfc_data.tile" + fn_orog_base="C96_oro_data.tile" + out_title_base="Land-DA::SFC-DATA::${PDY}::" + out_fn_base="landda_comp_sfc_${PDY}_" + # zlevel_number is valid only for 3-D fields such as stc/smc/slc + zlevel_number="1" + + cat > plot_comp_sfc.yaml <>$pgmout 2>errfile +export err=$?; err_chk + +cp -p ${DATA}/gfs_ctrl.nc ${COMOUT} +for itile in {1..6} +do + cp -p ${DATA}/out.atm.tile${itile}.nc ${COMOUT}/gfs_data.tile${itile}.nc + cp -p ${DATA}/out.sfc.tile${itile}.nc ${COMOUT}/sfc_data.tile${itile}.nc +done + diff --git a/scripts/exlandda_forecast.sh b/scripts/exlandda_forecast.sh index 6dbf3d1a..0a644872 100755 --- a/scripts/exlandda_forecast.sh +++ b/scripts/exlandda_forecast.sh @@ -2,8 +2,6 @@ set -xue -echo '************************************************' -echo 'running the forecast model' case $MACHINE in "hera") @@ -30,6 +28,8 @@ export ESMF_RUNTIME_PROFILE_OUTPUT="SUMMARY" export PSM_RANKS_PER_CONTEXT=4 export PSM_SHAREDCONTEXTS=1 +NTIME=$($NDATE ${DATE_CYCLE_FREQ_HR} $PDY$cyc) + YYYY=${PDY:0:4} MM=${PDY:4:2} DD=${PDY:6:2} @@ -40,29 +40,98 @@ nMM=${NTIME:4:2} nDD=${NTIME:6:2} nHH=${NTIME:8:2} +HHsec=$(( HH * 3600 )) +HHsec_5d=$(printf "%05d" "${HHsec}") +nHHsec=$(( nHH * 3600 )) +nHHsec_5d=$(printf "%05d" "${nHHsec}") + FILEDATE=${YYYY}${MM}${DD}.${HH}0000 # Copy input namelist data files -cp -p ${PARMlandda}/templates/template.input.nml input.nml -cp -p ${PARMlandda}/templates/template.datm_in datm_in -cp -p ${PARMlandda}/templates/template.datm.streams datm.streams -cp -p ${PARMlandda}/templates/template.noahmptable.tbl noahmptable.tbl -cp -p ${PARMlandda}/templates/template.fd_ufs.yaml fd_ufs.yaml -cp -p ${PARMlandda}/templates/template.data_table data_table +cp -p "${PARMlandda}/templates/template.noahmptable.tbl" noahmptable.tbl +cp -p "${PARMlandda}/templates/template.${APP}.fd_ufs.yaml" fd_ufs.yaml +if [ "${APP}" = "LND" ]; then + cp -p "${PARMlandda}/templates/template.${APP}.datm_in" datm_in + cp -p "${PARMlandda}/templates/template.${APP}.datm.streams" datm.streams + cp -p "${PARMlandda}/templates/template.${APP}.data_table" data_table +elif [ "${APP}" = "ATML" ]; then + cp -p "${PARMlandda}/templates/template.${APP}.field_table" field_table +fi + +# Set input.nml +if [ "${APP}" = "ATML" ]; then + if [ "${COLDSTART}" = "YES" ] && [ "${PDY}${cyc}" = "${DATE_FIRST_CYCLE:0:10}" ]; then + settings="\ + 'atm_io_layout_x': ${ATM_IO_LAYOUT_X} + 'atm_io_layout_y': ${ATM_IO_LAYOUT_Y} + 'atm_layout_x': ${ATM_LAYOUT_X} + 'atm_layout_y': ${ATM_LAYOUT_Y} + 'ccpp_suite': ${CCPP_SUITE} + 'external_ic': '.true.' + 'make_nh': '.true.' + 'mountain': '.false.' + 'na_init': '1' + 'nggps_ic': '.true.' + 'nstf_name': '2,1,0,0,0' + 'warm_start': '.false.' + " # End of settings variable + else + settings="\ + 'atm_io_layout_x': ${ATM_IO_LAYOUT_X} + 'atm_io_layout_y': ${ATM_IO_LAYOUT_Y} + 'atm_layout_x': ${ATM_LAYOUT_X} + 'atm_layout_y': ${ATM_LAYOUT_Y} + 'ccpp_suite': ${CCPP_SUITE} + 'external_ic': '.false.' + 'make_nh': '.false.' + 'mountain': '.true.' + 'na_init': '0' + 'nggps_ic': '.false.' + 'nstf_name': '2,0,0,0,0' + 'warm_start': '.true.' + " # End of settings variable + fi + fp_template="${PARMlandda}/templates/template.${APP}.input.nml.${CCPP_SUITE}" + fn_namelist="input.nml" + ${USHlandda}/fill_jinja_template.py -u "${settings}" -t "${fp_template}" -o "${fn_namelist}" +else + cp -p "${PARMlandda}/templates/template.${APP}.input.nml" input.nml +fi # Set ufs.configure +if [ "${APP}" = "LND" ]; then + atm_model="datm" +elif [ "${APP}" = "ATML" ]; then + atm_model="fv3" +fi + +if [ "${COLDSTART}" = "YES" ] && [ "${PDY}${cyc}" = "${DATE_FIRST_CYCLE:0:10}" ]; then + allcomp_read_restart=".false." + allcomp_start_type="startup" +else + allcomp_read_restart=".true." + allcomp_start_type="continue" +fi + nprocs_atm_m1=$(( NPROCS_FORECAST_ATM - 1 )) nprocs_atm_lnd_m1=$(( NPROCS_FORECAST_ATM + NPROCS_FORECAST_LND - 1 )) settings="\ - 'nprocs_atm_m1': ${nprocs_atm_m1} - 'nprocs_forecast_atm': ${NPROCS_FORECAST_ATM} - 'nprocs_atm_lnd_m1': ${nprocs_atm_lnd_m1} + 'allcomp_read_restart': ${allcomp_read_restart} + 'allcomp_start_type': ${allcomp_start_type} + 'atm_model': ${atm_model} + 'dt_runseq': ${DT_RUNSEQ} + 'lnd_calc_snet': ${LND_CALC_SNET} + 'lnd_ic_type': ${LND_IC_TYPE} + 'lnd_initial_albedo': ${LND_INITIAL_ALBEDO} 'lnd_layout_x': ${LND_LAYOUT_X} 'lnd_layout_y': ${LND_LAYOUT_Y} 'lnd_output_freq_sec': ${LND_OUTPUT_FREQ_SEC} - 'dt_runseq': ${DT_RUNSEQ} -" # End of settins variable + 'med_coupling_mode': ${MED_COUPLING_MODE} + 'nprocs_atm_m1': ${nprocs_atm_m1} + 'nprocs_forecast_atm': ${NPROCS_FORECAST_ATM} + 'nprocs_atm_lnd_m1': ${nprocs_atm_lnd_m1} +" # End of settings variable fp_template="${PARMlandda}/templates/template.ufs.configure" fn_namelist="ufs.configure" @@ -74,9 +143,17 @@ settings="\ 'mm': !!str ${MM} 'dd': !!str ${DD} 'hh': !!str ${HH} - 'fcsthr': ${FCSTHR} + 'app': ${APP} 'dt_atmos': ${DT_ATMOS} -" # End of settins variable + 'fcsthr': ${FCSTHR} + 'fhrot': ${FHROT} + 'imo': ${IMO} + 'jmo': ${JMO} + 'output_fh': ${OUTPUT_FH} + 'restart_interval': ${RESTART_INTERVAL} + 'write_groups': ${WRITE_GROUPS} + 'write_tasks_per_group': ${WRITE_TASKS_PER_GROUP} +" # End of settings variable fp_template="${PARMlandda}/templates/template.model_configure" fn_namelist="model_configure" @@ -89,64 +166,172 @@ settings="\ 'mm': !!str ${MM} 'dd': !!str ${DD} 'hh': !!str ${HH} -" # End of settins variable +" # End of settings variable -fp_template="${PARMlandda}/templates/template.diag_table" +fp_template="${PARMlandda}/templates/template.${APP}.diag_table" fn_namelist="diag_table" ${USHlandda}/fill_jinja_template.py -u "${settings}" -t "${fp_template}" -o "${fn_namelist}" -# Set up the run directory +if [ "${APP}" = "LND" ]; then + # CDEPS restart and pointer files for DATM (LND) + rfile2="ufs.cpld.datm.r.${YYYY}-${MM}-${DD}-${HHsec_5d}.nc" + if [ -f "${COMINm1}/${rfile2}" ]; then + ln -nsf "${COMINm1}/${rfile2}" . + elif [ -f "${WARMSTART_DIR}/${rfile2}" ]; then + ln -nsf "${WARMSTART_DIR}/${rfile2}" . + else + ln -nsf ${FIXlandda}/restarts/${ATMOS_FORC}/${rfile2} . + fi + ls -1 "${rfile2}">rpointer.atm +elif [ "${APP}" = "ATML" ]; then + ln -nsf ${FIXlandda}/FV3_fix_global/* . +fi + +############################### +# Set up RESTART directory +################################ mkdir -p RESTART -# NoahMP restart files -for itile in {1..6} -do - ln -nsf ${COMIN}/ufs_land_restart.anal.${YYYY}-${MM}-${DD}_${HH}-00-00.tile${itile}.nc RESTART/ufs.cpld.lnd.out.${YYYY}-${MM}-${DD}-00000.tile${itile}.nc -done +if [ "${COLDSTART}" = "NO" ] || [ "${PDY}${cyc}" != "${DATE_FIRST_CYCLE:0:10}" ]; then + # Set path to directory where restart files exist + if [ "${COLDSTART}" = "NO" ] && [ "${PDY}${cyc}" = "${DATE_FIRST_CYCLE:0:10}" ]; then + data_dir="${WARMSTART_DIR}" + else + data_dir="${COMINm1}/RESTART" + fi -# CMEPS restart and pointer files -rfile1="ufs.cpld.cpl.r.${YYYY}-${MM}-${DD}-00000.nc" -if [[ -e "${COMINm1}/${rfile1}" ]]; then - ln -nsf "${COMINm1}/${rfile1}" RESTART/. -elif [[ -e "${WARMSTART_DIR}/${rfile1}" ]]; then - ln -nsf "${WARMSTART_DIR}/${rfile1}" RESTART/. -else - ln -nsf ${FIXlandda}/restarts/${ATMOS_FORC}/${rfile1} RESTART/. -fi -ls -1 "RESTART/${rfile1}">rpointer.cpl - -# CDEPS restart and pointer files -rfile2="ufs.cpld.datm.r.${YYYY}-${MM}-${DD}-00000.nc" -if [[ -e "${COMINm1}/${rfile2}" ]]; then - ln -nsf "${COMINm1}/${rfile2}" RESTART/. -elif [[ -e "${WARMSTART_DIR}/${rfile2}" ]]; then - ln -nsf "${WARMSTART_DIR}/${rfile2}" RESTART/. -else - ln -nsf ${FIXlandda}/restarts/${ATMOS_FORC}/${rfile2} RESTART/. -fi -ls -1 "RESTART/${rfile2}">rpointer.atm + # NoahMP restart files + for itile in {1..6} + do + ln -nsf "${COMIN}/ufs_land_restart.anal.${YYYY}-${MM}-${DD}_${HH}-00-00.tile${itile}.nc" RESTART/ufs.cpld.lnd.out.${YYYY}-${MM}-${DD}-${HHsec_5d}.tile${itile}.nc + done -mkdir -p INPUT_DATM -ln -nsf ${FIXlandda}/DATM_input_data/${ATMOS_FORC}/* INPUT_DATM/. + # CMEPS restart and pointer files + r_fn="ufs.cpld.cpl.r.${YYYY}-${MM}-${DD}-${HHsec_5d}.nc" + if [ -f "${data_dir}/${r_fn}" ]; then + ln -nsf "${data_dir}/${r_fn}" RESTART/. + else + err_exit "${data_dir}/${r_fn} file does not exist." + fi + ls -1 "./RESTART/${r_fn}">rpointer.cpl +fi +############################# +# Set up INPUT directory +############################# mkdir -p INPUT cd INPUT + +sfc_fns=( "facsf" "maximum_snow_albedo" "slope_type" "snowfree_albedo" "soil_color" \ + "soil_type" "substrate_temperature" "vegetation_greenness" "vegetation_type" ) +for ifn in "${sfc_fns[@]}" ; do + for itile in {1..6}; + do + ln -nsf "${FIXlandda}/FV3_fix_tiled/C${RES}/C${RES}.${ifn}.tile${itile}.nc" . + done +done + for itile in {1..6} do - ln -nsf ${FIXlandda}/NOAHMP_IC/ufs-land_C${RES}_init_fields.tile${itile}.nc C${RES}.initial.tile${itile}.nc - ln -nsf ${FIXlandda}/FV3_fix_tiled/C${RES}/C${RES}.maximum_snow_albedo.tile${itile}.nc . - ln -nsf ${FIXlandda}/FV3_fix_tiled/C${RES}/C${RES}.slope_type.tile${itile}.nc . - ln -nsf ${FIXlandda}/FV3_fix_tiled/C${RES}/C${RES}.soil_type.tile${itile}.nc . - ln -nsf ${FIXlandda}/FV3_fix_tiled/C${RES}/C${RES}.soil_color.tile${itile}.nc . - ln -nsf ${FIXlandda}/FV3_fix_tiled/C${RES}/C${RES}.substrate_temperature.tile${itile}.nc . - ln -nsf ${FIXlandda}/FV3_fix_tiled/C${RES}/C${RES}.vegetation_greenness.tile${itile}.nc . - ln -nsf ${FIXlandda}/FV3_fix_tiled/C${RES}/C${RES}.vegetation_type.tile${itile}.nc . - ln -nsf ${FIXlandda}/FV3_fix_tiled/C${RES}/oro_C${RES}.mx100.tile${itile}.nc oro_data.tile${itile}.nc + ln -nsf ${FIXlandda}/FV3_fix_tiled/C${RES}/C${RES}_oro_data.tile${itile}.nc oro_data.tile${itile}.nc ln -nsf ${FIXlandda}/FV3_fix_tiled/C${RES}/C${RES}_grid.tile${itile}.nc . - ln -nsf ${FIXlandda}/FV3_fix_tiled/C${RES}/grid_spec.nc C${RES}_mosaic.nc done +ln -nsf ${FIXlandda}/FV3_fix_tiled/C${RES}/C${RES}_mosaic.nc . + +if [ "${APP}" = "LND" ]; then + for itile in {1..6} + do + ln -nsf ${FIXlandda}/NOAHMP_IC/ufs-land_C${RES}_init_fields.tile${itile}.nc C${RES}.initial.tile${itile}.nc + done +elif [ "${APP}" = "ATML" ]; then + ln -nsf ${FIXlandda}/FV3_fix_tiled/C${RES}/C${RES}_grid_spec.nc grid_spec.nc + for itile in {1..6} + do + ln -nsf ${FIXlandda}/FV3_fix_tiled/C${RES}/C${RES}_oro_data_ls.tile${itile}.nc oro_data_ls.tile${itile}.nc + ln -nsf ${FIXlandda}/FV3_fix_tiled/C${RES}/C${RES}_oro_data_ss.tile${itile}.nc oro_data_ss.tile${itile}.nc + done + # GFS IC files for cold start + if [ "${COLDSTART}" = "YES" ] && [ "${PDY}${cyc}" = "${DATE_FIRST_CYCLE:0:10}" ]; then + ln -nsf ${COMIN}/gfs_ctrl.nc . + for itile in {1..6} + do + ln -nsf ${COMIN}/gfs_data.tile${itile}.nc . + ln -nsf ${COMIN}/sfc_data.tile${itile}.nc . + done + fi +fi + +# Copy restart files only for ATML +if [ "${APP}" = "ATML" ]; then + if [ "${COLDSTART}" = "NO" ] || [ "${PDY}${cyc}" != "${DATE_FIRST_CYCLE:0:10}" ]; then + # Set path to directory where restart files exist + if [ "${COLDSTART}" = "NO" ] && [ "${PDY}${cyc}" = "${DATE_FIRST_CYCLE:0:10}" ]; then + data_dir="${WARMSTART_DIR}" + else + data_dir="${COMINm1}/RESTART" + fi + + rst_fns=( "ca_data" "fv_core.res" "fv_srf_wnd.res" "fv_tracer.res" "phy_data" ) + for ifn in "${rst_fns[@]}" ; do + for itile in {1..6}; + do + r_fp="${data_dir}/${YYYY}${MM}${DD}.${HH}0000.${ifn}.tile${itile}.nc" + if [ -f "${r_fp}" ]; then + ln -nsf "${r_fp}" "${ifn}.tile${itile}.nc" + else + err_exit "${r_fp} file does not exist." + fi + done + if [ "${ifn}" = "fv_core.res" ]; then + r_fp="${data_dir}/${YYYY}${MM}${DD}.${HH}0000.${ifn}.nc" + if [ -f "${r_fp}" ]; then + ln -nsf "${r_fp}" "${ifn}.nc" + else + err_exit "${r_fp} file does not exist." + fi + fi + done + # link sfc_data from COMIN because they were upated by JEDI Analysis task + if [ "${PDY}${cyc}" != "${DATE_FIRST_CYCLE:0:10}" ]; then + data_dir="${COMIN}" + fi + for itile in {1..6}; + do + r_fp="${data_dir}/${YYYY}${MM}${DD}.${HH}0000.sfc_data.tile${itile}.nc" + if [ -f "${r_fp}" ]; then + ln -nsf "${r_fp}" "sfc_data.tile${itile}.nc" + else + err_exit "${r_fp} file does not exist." + fi + done + + # update coupler.res file + settings="\ + 'coupler_calendar': ${COUPLER_CALENDAR} + 'yyyp': !!str ${YYYY} + 'mp': !!str ${MM} + 'dp': !!str ${DD} + 'hp': !!str ${HH} + 'yyyy': !!str ${YYYY} + 'mm': !!str ${MM} + 'dd': !!str ${DD} + 'hh': !!str ${HH} +" # End of settings variable + + fp_template="${PARMlandda}/templates/template.coupler.res" + fn_namelist="coupler.res" + ${USHlandda}/fill_jinja_template.py -u "${settings}" -t "${fp_template}" -o "${fn_namelist}" + + fi +fi + cd - +if [ "${APP}" = "LND" ]; then + mkdir -p INPUT_DATM + ln -nsf ${FIXlandda}/DATM_input_data/${ATMOS_FORC}/* INPUT_DATM/. +fi + # start runs echo "Start ufs-cdeps-land model run with TASKS: ${NPROCS_FORECAST}" export pgm="ufs_model" @@ -155,37 +340,97 @@ ${RUN_CMD} -n ${NPROCS_FORECAST} ${EXEClandda}/$pgm >>$pgmout 2>errfile export err=$?; err_chk cp errfile errfile_ufs_model if [[ $err != 0 ]]; then - echo "ufs_model failed" - exit 10 + err_exit "ufs_model failed" fi +########################### # copy model ouput to COM +########################### + +# Copy and link output file to restart for next cycle for itile in {1..6} do - cp -p ${DATA}/ufs.cpld.lnd.out.${nYYYY}-${nMM}-${nDD}-00000.tile${itile}.nc ${COMOUT}/ufs_land_restart.${nYYYY}-${nMM}-${nDD}_${nHH}-00-00.tile${itile}.nc + cp -p "${DATA}/ufs.cpld.lnd.out.${nYYYY}-${nMM}-${nDD}-${nHHsec_5d}.tile${itile}.nc" "${COMOUT}/RESTART/ufs_land_restart.${nYYYY}-${nMM}-${nDD}_${nHH}-00-00.tile${itile}.nc" + ln -nsf "${COMOUT}/RESTART/ufs_land_restart.${nYYYY}-${nMM}-${nDD}_${nHH}-00-00.tile${itile}.nc" ${DATA_RESTART}/. done -cp -p ${DATA}/ufs.cpld.datm.r.${nYYYY}-${nMM}-${nDD}-00000.nc ${COMOUT} -cp -p ${DATA}/RESTART/ufs.cpld.cpl.r.${nYYYY}-${nMM}-${nDD}-00000.nc ${COMOUT} -# link restart for next cycle -for itile in {1..6} -do - ln -nsf ${COMOUT}/ufs_land_restart.${nYYYY}-${nMM}-${nDD}_${nHH}-00-00.tile${itile}.nc ${DATA_RESTART} +# Move land output to COMOUT +lnd_out_freq_hr=$(( LND_OUTPUT_FREQ_SEC / 3600 )) +lnd_fcst_hh=${lnd_out_freq_hr} +while [ ${lnd_fcst_hh} -le ${FCSTHR} ]; do + lnd_out_date=$($NDATE $lnd_fcst_hh $PDY$cyc) + lnd_out_yyyy=${lnd_out_date:0:4} + lnd_out_mm=${lnd_out_date:4:2} + lnd_out_dd=${lnd_out_date:6:2} + lnd_out_hh=${lnd_out_date:8:2} + lnd_out_hh_sec=$(( lnd_out_hh * 3600 )) + lnd_out_hh_sec_5d=$(printf "%05d" "${lnd_out_hh_sec}") + lnd_fcst_hh_3d=$(printf "%03d" "${lnd_fcst_hh}") + # land output files + for itile in {1..6} + do + cp -p "${DATA}/ufs.cpld.lnd.out.${lnd_out_yyyy}-${lnd_out_mm}-${lnd_out_dd}-${lnd_out_hh_sec_5d}.tile${itile}.nc" "${COMOUT}/${NET}.${cycle}.lnd.f${lnd_fcst_hh_3d}.c${RES}.tile${itile}.nc" + done + # ufs.cpld.cpl.r files + cp -p "${DATA}/RESTART/ufs.cpld.cpl.r.${lnd_out_yyyy}-${lnd_out_mm}-${lnd_out_dd}-${lnd_out_hh_sec_5d}.nc" ${COMOUT}/RESTART/. + + lnd_fcst_hh=$(( lnd_fcst_hh + lnd_out_freq_hr )) done +if [ "${APP}" = "LND" ]; then + cp -p ${DATA}/ufs.cpld.datm.r.${nYYYY}-${nMM}-${nDD}-${nHHsec_5d}.nc ${COMOUT}/. +elif [ "${APP}" = "ATML" ]; then + read -ra out_fh <<< "${OUTPUT_FH}" + out_fh1="${out_fh[0]}" + out_fh2="${out_fh[1]}" + if [ "${out_fh2}" = "-1" ]; then + list_out_fh=$(seq 0 ${out_fh1} ${FCSTHR}) + else + list_out_fh=${OUTPUT_FH} + fi + for ihr in ${list_out_fh} + do + ihr_3d=$(printf "%03d" "${ihr}") + for itile in {1..6} + do + cp -p "${DATA}/atmf${ihr_3d}.tile${itile}.nc" "${COMOUT}/${NET}.${cycle}.atm.f${ihr_3d}.c${RES}.tile${itile}.nc" + cp -p "${DATA}/sfcf${ihr_3d}.tile${itile}.nc" "${COMOUT}/${NET}.${cycle}.sfc.f${ihr_3d}.c${RES}.tile${itile}.nc" + done + done + # RESTART directory + cp -p "${DATA}/RESTART/${nYYYY}${nMM}${nDD}.${nHH}0000.coupler.res" ${COMOUT}/RESTART/. + cp -p "${DATA}/RESTART/${nYYYY}${nMM}${nDD}.${nHH}0000.fv_core.res.nc" ${COMOUT}/RESTART/. + + rst_fns=( "ca_data" "fv_core.res" "fv_srf_wnd.res" "fv_tracer.res" "phy_data" "sfc_data" ) + for ifn in "${rst_fns[@]}" ; do + for itile in {1..6}; + do + cp -p "${DATA}/RESTART/${nYYYY}${nMM}${nDD}.${nHH}0000.${ifn}.tile${itile}.nc" ${COMOUT}/RESTART/. + done + done + # Set sfc_data to DATA_RESTART to trigger ANALYSIS task in next cycle + for itile in {1..6}; + do + cp -p "${COMOUT}/RESTART/${nYYYY}${nMM}${nDD}.${nHH}0000.sfc_data.tile${itile}.nc" ${DATA_RESTART}/. + done +fi + + +########################################################### # WE2E test -if [[ "${WE2E_TEST}" == "YES" ]]; then - path_fbase="${FIXlandda}/test_base/we2e_com/${RUN}.${PDY}" +########################################################### +if [ "${WE2E_TEST}" == "YES" ]; then + path_fbase="${FIXlandda}/test_base/we2e_com/${RUN}.${PDY}/RESTART" fn_res="ufs_land_restart.${nYYYY}-${nMM}-${nDD}_${nHH}-00-00.tile" we2e_log_fp="${LOGDIR}/${WE2E_LOG_FN}" - if [[ ! -e "${we2e_log_fp}" ]]; then + if [ ! -f "${we2e_log_fp}" ]; then touch ${we2e_log_fp} fi # restart files for itile in {1..6} do - ${USHlandda}/compare.py "${path_fbase}/${fn_res}${itile}.nc" "${COMOUT}/${fn_res}${itile}.nc" ${WE2E_ATOL} ${we2e_log_fp} "FORECAST" ${FILEDATE} "ufs_land_restart.tile${itile}" + ${USHlandda}/compare.py "${path_fbase}/${fn_res}${itile}.nc" "${COMOUT}/RESTART/${fn_res}${itile}.nc" ${WE2E_ATOL} ${we2e_log_fp} "FORECAST" ${FILEDATE} "ufs_land_restart.tile${itile}" done fi diff --git a/scripts/exlandda_plot_stats.sh b/scripts/exlandda_plot_stats.sh index 8a026f27..7f49392f 100755 --- a/scripts/exlandda_plot_stats.sh +++ b/scripts/exlandda_plot_stats.sh @@ -2,6 +2,9 @@ set -xue +# Set other dates +NTIME=$($NDATE ${DATE_CYCLE_FREQ_HR} $PDY$cyc) + YYYY=${PDY:0:4} MM=${PDY:4:2} DD=${PDY:6:2} @@ -12,113 +15,115 @@ nMM=${NTIME:4:2} nDD=${NTIME:6:2} nHH=${NTIME:8:2} +DO_PLOT_STATS="YES" +DO_PLOT_TIME_HISTORY="YES" +DO_PLOT_RESTART="YES" + ############################################################ # Stats Plot ############################################################ - -# Path to the directory containing the input file -INPUTFP="${DATA_HOFX}" -# Field variable -FIELDVAR="OMA" -# Field Range for scatter plot: [Low,High] -FRLOW=-300 -FRHIGH=300 -# Number of bins in histogram plot -NBINS=100 -# Plot type (scatter/histogram/both) -PLOTTYPE="both" -# Figure title -FIGTITLE="GHCN Snow Depth (mm)::Obs-Ana::${PDY}" -# Prefix of output file name -PREOUTFN="hofx_oma_${PDY}" - -cat > plot_hofx.yaml < plot_hofx.yaml < plot_timehistory.yaml < plot_timehistory.yaml < plot_restart.yaml < plot_restart.yaml <>$pgmout 2>errfile export err=$?; err_chk cp errfile errfile_tile2tile if [[ $err != 0 ]]; then - echo "tile2tile failed" - exit 10 + err_exit "tile2tile failed" fi # save analysis restart @@ -82,11 +89,11 @@ do done # WE2E test -if [[ "${WE2E_TEST}" == "YES" ]]; then +if [ "${WE2E_TEST}" == "YES" ]; then path_fbase="${FIXlandda}/test_base/we2e_com/${RUN}.${PDY}" fn_res="ufs_land_restart.anal.${YYYY}-${MM}-${DD}_${HH}-00-00.tile" we2e_log_fp="${LOGDIR}/${WE2E_LOG_FN}" - if [[ ! -e "${we2e_log_fp}" ]]; then + if [ ! -f "${we2e_log_fp}" ]; then touch ${we2e_log_fp} fi # restart files diff --git a/scripts/exlandda_pre_anal.sh b/scripts/exlandda_pre_anal.sh index 9007d92f..4f133568 100755 --- a/scripts/exlandda_pre_anal.sh +++ b/scripts/exlandda_pre_anal.sh @@ -6,31 +6,20 @@ YYYY=${PDY:0:4} MM=${PDY:4:2} DD=${PDY:6:2} HH=${cyc} -YYYP=${PTIME:0:4} -MP=${PTIME:4:2} -DP=${PTIME:6:2} -HP=${PTIME:8:2} FILEDATE=${YYYY}${MM}${DD}.${HH}0000 -# tile2tile for DA -echo '************************************************' -echo 'calling tile2tile' - # copy restarts into work directory for itile in {1..6} do rst_fn="ufs_land_restart.${YYYY}-${MM}-${DD}_${HH}-00-00.tile${itile}.nc" - if [[ -e ${DATA_RESTART}/${rst_fn} ]]; then + if [ -f ${DATA_RESTART}/${rst_fn} ]; then cp ${DATA_RESTART}/${rst_fn} . - elif [[ -e ${WARMSTART_DIR}/${rst_fn} ]]; then + elif [ -f ${WARMSTART_DIR}/${rst_fn} ]; then cp ${WARMSTART_DIR}/${rst_fn} . else - echo "Initial restart files do not exist" - exit 21 + err_exit "Initial restart files do not exist" fi - # copy restart to data share dir for post_anal - cp -p ${rst_fn} ${DATA_SHARE} done # update tile2tile namelist @@ -41,8 +30,8 @@ settings="\ 'mm': !!str ${MM} 'dd': !!str ${DD} 'hh': !!str ${HH} - 'tstub': ${TSTUB} -" # End of settins variable + 'fn_orog': C${RES}_oro_data +" # End of settings variable fp_template="${PARMlandda}/templates/template.ufs2jedi" fn_namelist="ufs2jedi.namelist" @@ -55,13 +44,12 @@ ${EXEClandda}/$pgm ufs2jedi.namelist >>$pgmout 2>errfile cp errfile errfile_tile2tile export err=$?; err_chk if [[ $err != 0 ]]; then - echo "tile2tile failed" - exit 22 + err_exit "tile2tile failed" fi #stage restarts for applying JEDI update to intermediate directory for itile in {1..6} do - cp -p ${DATA}/${FILEDATE}.sfc_data.tile${itile}.nc ${DATA_SHARE}/${FILEDATE}.sfc_data.tile${itile}.nc + cp -p ${DATA}/${FILEDATE}.sfc_data.tile${itile}.nc ${DATA_RESTART}/${FILEDATE}.sfc_data.tile${itile}.nc done diff --git a/scripts/exlandda_prep_obs.sh b/scripts/exlandda_prep_obs.sh index ed0d36c3..0c13176b 100755 --- a/scripts/exlandda_prep_obs.sh +++ b/scripts/exlandda_prep_obs.sh @@ -2,6 +2,8 @@ set -xue +# Set other dates +PTIME=$($NDATE -${DATE_CYCLE_FREQ_HR} $PDY$cyc) YYYY=${PDY:0:4} MM=${PDY:4:2} @@ -12,38 +14,59 @@ MP=${PTIME:4:2} DP=${PTIME:6:2} HP=${PTIME:8:2} -################################################ -# 2. PREPARE OBS FILES -################################################ -OBSDIR="${OBSDIR:-${FIXlandda}/DA}" -for obs in "${OBS_TYPES[@]}"; do - # get the obs file name - if [ "${obs}" == "GTS" ]; then - OBSDIR_SUBDIR="${OBSDIR_SUBDIR:-snow_depth/GTS/data_proc}" - obsfile="${OBSDIR}/${OBSDIR_SUBDIR}/${YYYY}${MM}/adpsfc_snow_${YYYY}${MM}${DD}${HH}.nc4" - elif [ "${obs}" == "GHCN" ]; then - # GHCN are time-stamped at 18. If assimilating at 00, need to use previous day's obs, so that - # obs are within DA window. - if [ "${ATMOS_FORC}" == "era5" ]; then - OBSDIR_SUBDIR="${OBSDIR_SUBDIR:-snow_depth/GHCN/data_proc/v3}" - obsfile="${OBSDIR}/${OBSDIR_SUBDIR}/${YYYY}/ghcn_snwd_ioda_${YYYP}${MP}${DP}_jediv7.nc" - elif [ "${ATMOS_FORC}" == "gswp3" ]; then - OBSDIR_SUBDIR="${OBSDIR_SUBDIR:-snow_depth/GHCN/data_proc/v3}" - obsfile="${OBSDIR}/${OBSDIR_SUBDIR}/${YYYY}/ghcn_snwd_ioda_${YYYP}${MP}${DP}.nc" - fi - elif [ ${obs} == "SYNTH" ]; then - OBSDIR_SUBDIR="${OBSDIR_SUBDIR:-synthetic_noahmp}" - obsfile="${OBSDIR}/${OBSDIR_SUBDIR}/IODA.synthetic_gswp_obs.${YYYY}${MM}${DD}${HH}.nc" +OBSDIR="${OBSDIR:-${FIXlandda}/DA_obs}" +DATA_GHCN_RAW="${DATA_GHCN_RAW:-${FIXlandda}/DATA_ghcn}" + +# GHCN snow depth data +if [ "${OBS_GHCN}" = "YES" ]; then + # GHCN are time-stamped at 18. If assimilating at 00, need to use previous day's obs, + # so that obs are within DA window. + obs_fn="ghcn_snwd_ioda_${YYYP}${MP}${DP}${HP}.nc" + obs_fp="${OBSDIR}/GHCN/${YYYY}/${obs_fn}" + out_fn="GHCN_${YYYY}${MM}${DD}${HH}.nc" + + # check obs is available + if [ -f "${obs_fp}" ]; then + echo "GHCN observation file: ${obs_fp}" + cp -p "${obs_fp}" . + cp -p "${obs_fp}" "${COMOUTobs}/${out_fn}" else - echo "do_landDA: Unknown obs type requested ${obs}, exiting" - exit 1 + input_ghcn_file="${DATA_GHCN_RAW}/${YYYP}.csv" + if [ ! -f "${input_ghcn_file}" ]; then + echo "GHCN raw data path: ${DATA_GHCN_RAW}" + echo "GHCN raw data file: ${YYYP}.csv" + err_exit "GHCN raw data file does not exist in designated path !!!" + fi + ghcn_station_file="${DATA_GHCN_RAW}/ghcnd-stations.txt" + + ${USHlandda}/ghcn_snod2ioda.py -i ${input_ghcn_file} -o ${obs_fn} -f ${ghcn_station_file} -d ${YYYP}${MP}${DP}${HP} -m maskout + if [ $? -ne 0 ]; then + err_exit "Generation of GHCN obs file failed !!!" + fi + cp -p "${obs_fn}" "${COMOUTobs}/${out_fn}" fi - # check obs are available - if [[ -e $obsfile ]]; then - echo "do_landDA: $obs observations found: $obsfile" - cp -p $obsfile ${COMOUTobs}/${obs}_${YYYY}${MM}${DD}${HH}.nc - else - echo "${obs} observations not found: $obsfile" + ############################################################ + # Observation File Plot + ############################################################ + + out_title_base="Land-DA::Obs::GHCN::${PDY}::" + out_fn_base="landda_obs_ghcn_${PDY}_" + + cat > plot_obs_ghcn.yaml <&1 | tee log.ecbuild + ecbuild ${SORC_DIR} ${CMAKE_SETTINGS} 2>&1 | tee log.ecbuild printf "... Compile executables ...\n" make ${MAKE_SETTINGS} 2>&1 | tee log.make @@ -370,25 +370,27 @@ else if [[ "${BUILD}" = false && "${MOVE}" = false ]] || [[ "${BUILD}" = true && "${MOVE}" = true ]]; then printf "... Moving pre-compiled executables to designated location ...\n" - mkdir -p ${HOME_DIR}/${BIN_DIR} + mkdir -p "${HOME_DIR}/exec" cd "${INSTALL_DIR}/bin" - # copy executables in build/bin to BIN_DIR + # copy executables in build/bin to HOME_DIR/exec for file in *; do - [ -x "${file}" ] && cp "${file}" "${HOME_DIR}/${BIN_DIR}" + [ -x "${file}" ] && cp "${file}" "${HOME_DIR}/exec" done # copy libraries - cp -r ${BUILD_DIR}/lib ${HOME_DIR} - cp -r ${BUILD_DIR}/lib64 ${HOME_DIR} - # copy ufs_model to BIN_DIR - cp ${BUILD_DIR}/ufs_model.fd/src/ufs_model.fd-build/ufs_model ${HOME_DIR}/${BIN_DIR} + mkdir -p ${HOME_DIR}/lib64 + cd ${BUILD_DIR}/lib64 + for file in *; do + [ -f "${file}" ] && cp "${file}" "${HOME_DIR}/lib64" + done fi fi # Link land-DA input files to FIXlandda directory +ver_fix_data="_v2.1" if [ "${PLATFORM}" = "hera" ]; then - landda_fix_orig="/scratch2/NAGAPE/epic/UFS_Land-DA_Dev/inputs" + landda_fix_orig="/scratch2/NAGAPE/epic/UFS_Land-DA${ver_fix_data}/inputs" elif [ "${PLATFORM}" = "orion" ] || [ "${PLATFORM}" = "hercules" ]; then - landda_fix_orig="/work/noaa/epic/UFS_Land-DA_Dev/inputs" + landda_fix_orig="/work/noaa/epic/UFS_Land-DA${ver_fix_data}/inputs" fi ln -nsf ${landda_fix_orig}/* ${HOME_DIR}/fix diff --git a/sorc/cmake/compiler_flags_Cray_Fortran.cmake b/sorc/cmake/compiler_flags_Cray_Fortran.cmake deleted file mode 100755 index 4f96bb85..00000000 --- a/sorc/cmake/compiler_flags_Cray_Fortran.cmake +++ /dev/null @@ -1,56 +0,0 @@ -# (C) Copyright 2018 UCAR. -# -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. - -# Cray Fortran compiler requires this definition to be added -add_definitions( -DC_F_NO_DEALLOC ) - -#################################################################### -# FLAGS COMMON TO ALL BUILD TYPES -#################################################################### -set( CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -emf -rmoid -lhugetlbfs") - -if( HAVE_OMP ) - set( CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -homp") -else( ) - set( CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -hnoomp") -endif( ) - -#################################################################### -# RELEASE FLAGS -#################################################################### - -set( CMAKE_Fortran_FLAGS_RELEASE "-O3 -hfp3 -hscalar3 -hvector3 -hPIC" ) - -#################################################################### -# DEBUG FLAGS -#################################################################### - -set( CMAKE_Fortran_FLAGS_DEBUG "-O0 -Gfast -Ktrap=fp" ) - -#################################################################### -# BIT REPRODUCIBLE FLAGS -#################################################################### - -set( CMAKE_Fortran_FLAGS_BIT "-O2 -hflex_mp=conservative -hadd_paren -hfp1" ) - -#################################################################### -# LINK FLAGS -#################################################################### - -set( CMAKE_Fortran_LINK_FLAGS "-Wl,-Map,loadmap" ) - -#################################################################### - -# Meaning of flags -# ---------------- -# -hfp3 : Special optimisation for floating points -# -Ktrap=fp : Abort on NaN -# -R b : Bounds checking -# -hflex_mp=conservative -hfp1 : Obtain bit-reproducible results -# -hflex_mp=intolerant -hfp2 : Obtain bit-reproducible results (also) -# -hadd_paren : encourage left to right fp evaluation -# -hscalarN , -hvectorN : optimisation for scalar and vectorisation -# -homp/-hnoomp : Enable/Disable OpenMP -# -rmoi : create compiler listing diff --git a/sorc/cmake/compiler_flags_GNU_CXX.cmake b/sorc/cmake/compiler_flags_GNU_CXX.cmake deleted file mode 100755 index dbe13c02..00000000 --- a/sorc/cmake/compiler_flags_GNU_CXX.cmake +++ /dev/null @@ -1,45 +0,0 @@ -# (C) Copyright 2018 UCAR. -# -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. - -#################################################################### -# FLAGS COMMON TO ALL BUILD TYPES -#################################################################### - -if( HAVE_OMP ) - set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-deprecated-declarations -fopenmp") -else( ) - set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-deprecated-declarations -fno-openmp") -endif( ) - -#################################################################### -# RELEASE FLAGS -#################################################################### - -set( CMAKE_CXX_FLAGS_RELEASE "-O3" ) - -#################################################################### -# DEBUG FLAGS -#################################################################### - -set( CMAKE_CXX_FLAGS_DEBUG "-O0 -g" ) - -#################################################################### -# BIT REPRODUCIBLE FLAGS -#################################################################### - -set( CMAKE_CXX_FLAGS_BIT "-O2" ) - -#################################################################### -# LINK FLAGS -#################################################################### - -set( CMAKE_CXX_LINK_FLAGS "" ) - -#################################################################### - -# Meaning of flags -# ---------------- -# todo - diff --git a/sorc/cmake/compiler_flags_GNU_Fortran.cmake b/sorc/cmake/compiler_flags_GNU_Fortran.cmake deleted file mode 100755 index 1f106b23..00000000 --- a/sorc/cmake/compiler_flags_GNU_Fortran.cmake +++ /dev/null @@ -1,49 +0,0 @@ -# (C) Copyright 2018 UCAR. -# -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. - -#################################################################### -# FLAGS COMMON TO ALL BUILD TYPES -#################################################################### - -if( HAVE_OMP ) - set( CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fopenmp") -else( ) - set( CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -fno-openmp") -endif( ) - -set( CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -D_REAL8_ -ffree-line-length-none") - -#################################################################### -# RELEASE FLAGS -#################################################################### - -set( CMAKE_Fortran_FLAGS_RELEASE "-O3 -funroll-all-loops -finline-functions") - -#################################################################### -# DEBUG FLAGS -#################################################################### - -set( CMAKE_Fortran_FLAGS_DEBUG "-O0 -g -fcheck=bounds -ffpe-trap=invalid,zero,overflow,underflow -fbacktrace" ) - -#################################################################### -# BIT REPRODUCIBLE FLAGS -#################################################################### - -set( CMAKE_Fortran_FLAGS_BIT "-O2 -funroll-all-loops -finline-functions" ) - -#################################################################### -# LINK FLAGS -#################################################################### - -set( CMAKE_Fortran_LINK_FLAGS "" ) - -#################################################################### - -# Meaning of flags -# ---------------- -# -fstack-arrays : Allocate automatic arrays on the stack (needs large stacksize!!!) -# -funroll-all-loops : Unroll all loops -# -fcheck=bounds : Bounds checking - diff --git a/sorc/cmake/compiler_flags_Intel_Fortran.cmake b/sorc/cmake/compiler_flags_Intel_Fortran.cmake deleted file mode 100755 index 00b43a4b..00000000 --- a/sorc/cmake/compiler_flags_Intel_Fortran.cmake +++ /dev/null @@ -1,45 +0,0 @@ -# (C) Copyright 2018 UCAR. -# -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. - -#################################################################### -# FLAGS COMMON TO ALL BUILD TYPES -#################################################################### - -if( HAVE_OMP ) - set( CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -qopenmp") -else( ) - set( CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -qopenmp-stubs") -endif( ) - -#################################################################### -# RELEASE FLAGS -#################################################################### - -set( CMAKE_Fortran_FLAGS_RELEASE "-O3 -ip -unroll -inline -no-heap-arrays" ) - -#################################################################### -# DEBUG FLAGS -#################################################################### - -set( CMAKE_Fortran_FLAGS_DEBUG "-O0 -g -check bounds -traceback -warn -heap-arrays -fpe-all=0 -fpe:0 -check all" ) - -#################################################################### -# BIT REPRODUCIBLE FLAGS -#################################################################### - -set( CMAKE_Fortran_FLAGS_BIT "-O2 -ip -ipo -unroll -inline -no-heap-arrays" ) - -#################################################################### -# LINK FLAGS -#################################################################### - -set( CMAKE_Fortran_LINK_FLAGS "" ) - -#################################################################### - -# Meaning of flags -# ---------------- -# todo - diff --git a/sorc/cmake/compiler_flags_XL_Fortran.cmake b/sorc/cmake/compiler_flags_XL_Fortran.cmake deleted file mode 100755 index ddbfefc5..00000000 --- a/sorc/cmake/compiler_flags_XL_Fortran.cmake +++ /dev/null @@ -1,56 +0,0 @@ -# (C) Copyright 2018 UCAR. -# -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. - - -# WARNING!! -# Following has not been thoroughly tested. Take these flags with grain of salt - - -# Without following line, compile flags are appended to link flags -set( CMAKE_Fortran_LINK_EXECUTABLE " -o ") - -#################################################################### -# FLAGS COMMON TO ALL BUILD TYPES -#################################################################### - -if( ${HAVE_OMP} ) - set( CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -qsmp=omp" ) - set( CMAKE_Fortran_LINK_FLAGS "${CMAKE_Fortran_LINK_FLAGS} -qsmp=omp" ) -else( ) - set( CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -qsmp=noomp" ) - set( CMAKE_Fortran_LINK_FLAGS "${CMAKE_Fortran_LINK_FLAGS} -qsmp=noomp" ) -endif( ) - -set( CMAKE_Fortran_FLAGS "${CMAKE_Fortran_FLAGS} -qfree=F90 -qsuffix=cpp=F90 -qextname -q64=largetype -qarch=pwr5 -g -qsource,list -qsaveopt -NS32648" ) - -#################################################################### -# RELEASE FLAGS -#################################################################### - -set( CMAKE_Fortran_FLAGS_RELEASE "-O3 -qstrict" ) - -#################################################################### -# DEBUG FLAGS -#################################################################### - -set( CMAKE_Fortran_FLAGS_DEBUG "-O0" ) - -#################################################################### -# BIT REPRODUCIBLE FLAGS -#################################################################### - -set( CMAKE_Fortran_FLAGS_BIT "-O3 -qstrict" ) - -#################################################################### -# LINK FLAGS -#################################################################### - -set( CMAKE_Fortran_LINK_FLAGS "${CMAKE_Fortran_LINK_FLAGS} -b64 -bbigtoc -bmaxstack:0x800000000 -bloadmap:map -bmap:map") - -#################################################################### - -# Meaning of flags -# ---------------- -# todo diff --git a/sorc/cmake/landda_compiler_flags.cmake b/sorc/cmake/landda_compiler_flags.cmake deleted file mode 100755 index cd8ca6a8..00000000 --- a/sorc/cmake/landda_compiler_flags.cmake +++ /dev/null @@ -1,27 +0,0 @@ -# (C) Copyright 2018 UCAR. -# -# This software is licensed under the terms of the Apache Licence Version 2.0 -# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0. - -add_definitions ( -Duse_libMPI -Duse_netCDF -DSPMD ) - -if( NOT CMAKE_BUILD_TYPE MATCHES "Debug" ) - add_definitions( -DNDEBUG ) -endif( ) - -####################################################################################### -# Fortran -####################################################################################### - -if( CMAKE_Fortran_COMPILER_ID MATCHES "GNU" ) - include( compiler_flags_GNU_Fortran ) -elseif( CMAKE_Fortran_COMPILER_ID MATCHES "Intel" ) - include( compiler_flags_Intel_Fortran ) -elseif( CMAKE_Fortran_COMPILER_ID MATCHES "XL" ) - include( compiler_flags_XL_Fortran ) -elseif( CMAKE_Fortran_COMPILER_ID MATCHES "Cray" ) - include( compiler_flags_Cray_Fortran ) -else() - message( STATUS "Fortran compiler with ID ${CMAKE_CXX_COMPILER_ID} will be used with CMake default options") -endif() - diff --git a/sorc/test/apply_jedi_incr.sh b/sorc/test/apply_jedi_incr.sh index 6681d621..98a9e314 100755 --- a/sorc/test/apply_jedi_incr.sh +++ b/sorc/test/apply_jedi_incr.sh @@ -1,5 +1,5 @@ #!/bin/bash -set -e +set -xe ################################################ # pass arguments project_binary_dir=$1 @@ -34,7 +34,7 @@ cat << EOF > apply_incr_nml res=$RES frac_grid=$GFSv17 orog_path="$TPATH" - otype="$TSTUB" + otype="$fn_orog" / EOF diff --git a/sorc/test/ci/Dockerfile b/sorc/test/ci/Dockerfile index 7c0e5ca6..07b4d81d 100644 --- a/sorc/test/ci/Dockerfile +++ b/sorc/test/ci/Dockerfile @@ -11,7 +11,7 @@ RUN wget https://noaa-ufs-land-da-pds.s3.amazonaws.com/develop-20241024/inputs.t # set env vars ENV FIXlandda=$HOME/land-DA_workflow/fix -ENV JEDI_INSTALL=$HOME +ENV JEDI_PATH=$HOME ENV FIXdir=$FIXlandda ENV JEDI_EXECDIR=/opt/jedi-bundle/install/bin diff --git a/sorc/test/create_bkg_ens.sh b/sorc/test/create_bkg_ens.sh index 3fda79de..166189a4 100755 --- a/sorc/test/create_bkg_ens.sh +++ b/sorc/test/create_bkg_ens.sh @@ -37,6 +37,7 @@ if [[ ${DAtype} == 'letkfoi_snow' ]]; then # update coupler.res file settings="\ + 'coupler_calendar': 2 'yyyy': !!str ${YY} 'mm': !!str ${MM} 'dd': !!str ${DD} diff --git a/sorc/test/hera_ctest.sh b/sorc/test/hera_ctest.sh index 65484d4a..0dbaf45b 100755 --- a/sorc/test/hera_ctest.sh +++ b/sorc/test/hera_ctest.sh @@ -3,6 +3,7 @@ set -eux +module purge source ../../versions/build.ver_hera module use ../../modulefiles module load build_hera_intel diff --git a/sorc/test/parm/data_table b/sorc/test/parm/data_table new file mode 100644 index 00000000..537060cf --- /dev/null +++ b/sorc/test/parm/data_table @@ -0,0 +1 @@ +"OCN", "runoff", "runoff", "./INPUT/", "none" , 1.0 diff --git a/sorc/test/parm/datm.streams b/sorc/test/parm/datm.streams new file mode 100644 index 00000000..3badd37b --- /dev/null +++ b/sorc/test/parm/datm.streams @@ -0,0 +1,61 @@ +stream_info: CLMGSWP3v1.Solar01 CLMGSWP3v1.Precip02 CLMGSWP3v1.TPQW03 topo.observed04 + +taxmode01: limit +mapalgo01: bilinear +tInterpAlgo01: coszen +readMode01: single +dtlimit01: 1.5 +stream_offset01: 0 +yearFirst01: 1999 +yearLast01: 2000 +yearAlign01: 1999 +stream_vectors01: null +stream_mesh_file01: INPUT_DATM/clmforc.GSWP3.c2011.0.5x0.5.TPQWL.SCRIP.210520_ESMFmesh.nc +stream_lev_dimname01: null +stream_data_files01: "INPUT_DATM/clmforc.GSWP3.c2011.0.5x0.5.Solr.1999-12.nc" "INPUT_DATM/clmforc.GSWP3.c2011.0.5x0.5.Solr.2000-01.nc" +stream_data_variables01: "FSDS Faxa_swdn" + +taxmode02: limit +mapalgo02: bilinear +tInterpAlgo02: nearest +readMode02: single +dtlimit02: 1.5 +stream_offset02: 0 +yearFirst02: 1999 +yearLast02: 2000 +yearAlign02: 1999 +stream_vectors02: null +stream_mesh_file02: INPUT_DATM/clmforc.GSWP3.c2011.0.5x0.5.TPQWL.SCRIP.210520_ESMFmesh.nc +stream_lev_dimname02: null +stream_data_files02: "INPUT_DATM/clmforc.GSWP3.c2011.0.5x0.5.Prec.1999-12.nc" "INPUT_DATM/clmforc.GSWP3.c2011.0.5x0.5.Prec.2000-01.nc" +stream_data_variables02: "PRECTmms Faxa_precn" + +taxmode03: limit +mapalgo03: bilinear +tInterpAlgo03: linear +readMode03: single +dtlimit03: 1.5 +stream_offset03: 0 +yearFirst03: 1999 +yearLast03: 2000 +yearAlign03: 1999 +stream_vectors03: null +stream_mesh_file03: INPUT_DATM/clmforc.GSWP3.c2011.0.5x0.5.TPQWL.SCRIP.210520_ESMFmesh.nc +stream_lev_dimname03: null +stream_data_files03: "INPUT_DATM/clmforc.GSWP3.c2011.0.5x0.5.TPQWL.1999-12.nc" "INPUT_DATM/clmforc.GSWP3.c2011.0.5x0.5.TPQWL.2000-01.nc" +stream_data_variables03: "TBOT Sa_tbot" "WIND Sa_wind" "QBOT Sa_shum" "PSRF Sa_pbot" "PSRF Sa_pslv" "FLDS Faxa_lwdn" + +taxmode04: cycle +mapalgo04: bilinear +tInterpAlgo04: lower +readMode04: single +dtlimit04: 1.5 +stream_offset04: 0 +yearFirst04: 1 +yearLast04: 1 +yearAlign04: 1 +stream_vectors04: null +stream_mesh_file04: INPUT_DATM/topodata_0.9x1.SCRIP.210520_ESMFmesh.nc +stream_lev_dimname04: null +stream_data_files04: "INPUT_DATM/topodata_0.9x1.25_USGS_070110_stream_c151201.nc" +stream_data_variables04: "TOPO Sa_topo" diff --git a/sorc/test/parm/datm_in b/sorc/test/parm/datm_in new file mode 100644 index 00000000..4dc30373 --- /dev/null +++ b/sorc/test/parm/datm_in @@ -0,0 +1,15 @@ +&datm_nml + datamode = "CLMNCEP" + factorfn_data = "null" + factorfn_mesh = "null" + flds_co2 = .false. + flds_presaero = .false. + flds_wiso = .false. + iradsw = 1 + model_maskfile = "INPUT_DATM/fv1.9x2.5_141008_ESMFmesh.nc" + model_meshfile = "INPUT_DATM/fv1.9x2.5_141008_ESMFmesh.nc" + nx_global = 144 + ny_global = 96 + restfilm = "null" + export_all = .true. +/ diff --git a/sorc/test/parm/diag_table b/sorc/test/parm/diag_table new file mode 100644 index 00000000..5ff554bc --- /dev/null +++ b/sorc/test/parm/diag_table @@ -0,0 +1,284 @@ +20000105.00Z.1760x880.64bit.non-mono +2000 01 05 00 0 0 + +"fv3_history", 0, "hours", 1, "hours", "time" +"fv3_history2d", 0, "hours", 1, "hours", "time" +###################### +"ocn%4yr%2mo%2dy%2hr", 6, "hours", 1, "hours", "time", 6, "hours", "1901 1 1 0 0 0" +"SST%4yr%2mo%2dy", 1, "days", 1, "days", "time", 1, "days", "1901 1 1 0 0 0" +############################################## +# static fields + "ocean_model", "geolon", "geolon", "ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 + "ocean_model", "geolat", "geolat", "ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 + "ocean_model", "geolon_c", "geolon_c", "ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 + "ocean_model", "geolat_c", "geolat_c", "ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 + "ocean_model", "geolon_u", "geolon_u", "ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 + "ocean_model", "geolat_u", "geolat_u", "ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 + "ocean_model", "geolon_v", "geolon_v", "ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 + "ocean_model", "geolat_v", "geolat_v", "ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 +# "ocean_model", "depth_ocean", "depth_ocean", "ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 +# "ocean_model", "wet", "wet", "ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 + "ocean_model", "wet_c", "wet_c", "ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 + "ocean_model", "wet_u", "wet_u", "ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 + "ocean_model", "wet_v", "wet_v", "ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 + "ocean_model", "sin_rot", "sin_rot", "ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 + "ocean_model", "cos_rot", "cos_rot", "ocn%4yr%2mo%2dy%2hr", "all", .false., "none", 2 + +# ocean output TSUV and others + "ocean_model", "SSH", "SSH", "ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + "ocean_model", "SST", "SST", "ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + "ocean_model", "SSS", "SSS", "ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + "ocean_model", "speed", "speed", "ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + "ocean_model", "SSU", "SSU", "ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + "ocean_model", "SSV", "SSV", "ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + "ocean_model", "frazil", "frazil", "ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + "ocean_model", "ePBL_h_ML", "ePBL", "ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + "ocean_model", "MLD_003", "MLD_003", "ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + "ocean_model", "MLD_0125", "MLD_0125", "ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + +# save daily SST + "ocean_model", "geolon", "geolon", "SST%4yr%2mo%2dy", "all", .false., "none", 2 + "ocean_model", "geolat", "geolat", "SST%4yr%2mo%2dy", "all", .false., "none", 2 + "ocean_model", "SST", "sst", "SST%4yr%2mo%2dy", "all", .true., "none", 2 + +# Z-Space Fields Provided for CMIP6 (CMOR Names): +#=============================================== + "ocean_model_z","uo","uo" ,"ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + "ocean_model_z","vo","vo" ,"ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + "ocean_model_z","so","so" ,"ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + "ocean_model_z","temp","temp" ,"ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + +# forcing + "ocean_model", "taux", "taux", "ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + "ocean_model", "tauy", "tauy", "ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + "ocean_model", "latent", "latent", "ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + "ocean_model", "sensible", "sensible", "ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + "ocean_model", "SW", "SW", "ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + "ocean_model", "LW", "LW", "ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + "ocean_model", "evap", "evap", "ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + "ocean_model", "lprec", "lprec", "ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + "ocean_model", "lrunoff", "lrunoff", "ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 +# "ocean_model", "frunoff", "frunoff", "ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + "ocean_model", "fprec", "fprec", "ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + "ocean_model", "LwLatSens", "LwLatSens", "ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 + "ocean_model", "Heat_PmE", "Heat_PmE", "ocn%4yr%2mo%2dy%2hr","all",.true.,"none",2 +# +### +# FV3 variabls needed for NGGPS evaluation +### +"gfs_dyn", "ucomp", "ugrd", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "vcomp", "vgrd", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "sphum", "spfh", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "temp", "tmp", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "liq_wat", "clwmr", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "o3mr", "o3mr", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "delp", "dpres", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "delz", "delz", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "w", "dzdt", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "omga", "omga", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "ice_wat", "icmr", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "rainwat", "rwmr", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "snowwat", "snmr", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "graupel", "grle", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "ps", "pressfc", "fv3_history", "all", .false., "none", 2 +"gfs_dyn", "hs", "hgtsfc", "fv3_history", "all", .false., "none", 2 +#"gfs_dyn", "ice_nc", "nicp", "fv3_history", "all", .false., "none", 2 +#"gfs_dyn", "rain_nc", "ntrnc", "fv3_history", "all", .false., "none", 2 + +"gfs_phys", "frzr", "frzr", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "frzrb", "frzrb", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "frozr", "frozr", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "frozrb", "frozrb", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "tsnowp", "tsnowp", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "tsnowpb", "tsnowpb", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "rhonewsn", "rhonewsn", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "ALBDO_ave", "albdo_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "cnvprcp_ave", "cprat_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "cnvprcpb_ave", "cpratb_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "totprcp_ave", "prate_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "totprcpb_ave", "prateb_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "DLWRF", "dlwrf_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "DLWRFI", "dlwrf", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "ULWRF", "ulwrf_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "ULWRFI", "ulwrf", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "DSWRF", "dswrf_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "DSWRFI", "dswrf", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "USWRF", "uswrf_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "USWRFI", "uswrf", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "DSWRFtoa", "dswrf_avetoa","fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "USWRFtoa", "uswrf_avetoa","fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "ULWRFtoa", "ulwrf_avetoa","fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "gflux_ave", "gflux_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "hpbl", "hpbl", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "lhtfl_ave", "lhtfl_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "shtfl_ave", "shtfl_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "pwat", "pwat", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "soilm", "soilm", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "TCDC_aveclm", "tcdc_aveclm", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "TCDC_avebndcl", "tcdc_avebndcl", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "TCDC_avehcl", "tcdc_avehcl", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "TCDC_avelcl", "tcdc_avelcl", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "TCDC_avemcl", "tcdc_avemcl", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "TCDCcnvcl", "tcdccnvcl", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "PREScnvclt", "prescnvclt", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "PREScnvclb", "prescnvclb", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "PRES_avehct", "pres_avehct", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "PRES_avehcb", "pres_avehcb", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "TEMP_avehct", "tmp_avehct", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "PRES_avemct", "pres_avemct", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "PRES_avemcb", "pres_avemcb", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "TEMP_avemct", "tmp_avemct", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "PRES_avelct", "pres_avelct", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "PRES_avelcb", "pres_avelcb", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "TEMP_avelct", "tmp_avelct", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "u-gwd_ave", "u-gwd_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "v-gwd_ave", "v-gwd_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "dusfc", "uflx_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "dvsfc", "vflx_ave", "fv3_history2d", "all", .false., "none", 2 +#"gfs_phys", "cnvw", "cnvcldwat", "fv3_history2d", "all", .false., "none", 2 + +"gfs_phys", "psurf", "pressfc", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "u10m", "ugrd10m", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "v10m", "vgrd10m", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "crain", "crain", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "tprcp", "tprcp", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "hgtsfc", "orog", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "weasd", "weasd", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "f10m", "f10m", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "q2m", "spfh2m", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "t2m", "tmp2m", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "tsfc", "tmpsfc", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "vtype", "vtype", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "stype", "sotyp", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "slmsksfc", "land", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "vfracsfc", "veg", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "zorlsfc", "sfcr", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "uustar", "fricv", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "soilt1", "soilt1" "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "soilt2", "soilt2" "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "soilt3", "soilt3" "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "soilt4", "soilt4" "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "soilw1", "soilw1" "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "soilw2", "soilw2" "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "soilw3", "soilw3" "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "soilw4", "soilw4" "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "slc_1", "soill1", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "slc_2", "soill2", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "slc_3", "soill3", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "slc_4", "soill4", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "slope", "sltyp", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "alnsf", "alnsf", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "alnwf", "alnwf", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "alvsf", "alvsf", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "alvwf", "alvwf", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "canopy", "cnwat", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "facsf", "facsf", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "facwf", "facwf", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "ffhh", "ffhh", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "ffmm", "ffmm", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "fice", "icec", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "hice", "icetk", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "snoalb", "snoalb", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "shdmax", "shdmax", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "shdmin", "shdmin", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "snowd", "snod", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "tg3", "tg3", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "tisfc", "tisfc", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "tref", "tref", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "z_c", "zc", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "c_0", "c0", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "c_d", "cd", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "w_0", "w0", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "w_d", "wd", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "xt", "xt", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "xz", "xz", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "dt_cool", "dtcool", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "xs", "xs", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "xu", "xu", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "xv", "xv", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "xtts", "xtts", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "xzts", "xzts", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "d_conv", "dconv", "fv3_history2d", "all", .false., "none", 2 +"gfs_sfc", "qrain", "qrain", "fv3_history2d", "all", .false., "none", 2 + +"gfs_phys", "acond", "acond", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "cduvb_ave", "cduvb_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "cpofp", "cpofp", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "duvb_ave", "duvb_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "csdlf_ave", "csdlf", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "csusf_ave", "csusf", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "csusf_avetoa", "csusftoa", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "csdsf_ave", "csdsf", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "csulf_ave", "csulf", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "csulf_avetoa", "csulftoa", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "cwork_ave", "cwork_aveclm", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "evbs_ave", "evbs_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "evcw_ave", "evcw_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "fldcp", "fldcp", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "hgt_hyblev1", "hgt_hyblev1", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "spfh_hyblev1", "spfh_hyblev1", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "ugrd_hyblev1", "ugrd_hyblev1", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "vgrd_hyblev1", "vgrd_hyblev1", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "tmp_hyblev1", "tmp_hyblev1", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "gfluxi", "gflux", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "lhtfl", "lhtfl", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "shtfl", "shtfl", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "pevpr", "pevpr", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "pevpr_ave", "pevpr_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "sbsno_ave", "sbsno_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "sfexc", "sfexc", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "snohf", "snohf", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "snowc_ave", "snowc_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "spfhmax2m", "spfhmax_max2m", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "spfhmin2m", "spfhmin_min2m", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "tmpmax2m", "tmax_max2m", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "tmpmin2m", "tmin_min2m", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "ssrun_acc", "ssrun_acc", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "sunsd_acc", "sunsd_acc", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "watr_acc", "watr_acc", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "wilt", "wilt", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "vbdsf_ave", "vbdsf_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "vddsf_ave", "vddsf_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "nbdsf_ave", "nbdsf_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "nddsf_ave", "nddsf_ave", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "trans_ave", "trans_ave", "fv3_history2d", "all", .false., "none", 2 + +"gfs_phys", "AOD_550", "aod550", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "DU_AOD_550", "du_aod550", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "SU_AOD_550", "su_aod550", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "BC_AOD_550", "bc_aod550", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "OC_AOD_550", "oc_aod550", "fv3_history2d", "all", .false., "none", 2 +"gfs_phys", "SS_AOD_550", "ss_aod550", "fv3_history2d", "all", .false., "none", 2 +#============================================================================================= +# +#====> This file can be used with diag_manager/v2.0a (or higher) <==== +# +# +# FORMATS FOR FILE ENTRIES (not all input values are used) +# ------------------------ +# +#"file_name", output_freq, "output_units", format, "time_units", "long_name", +# +# +#output_freq: > 0 output frequency in "output_units" +# = 0 output frequency every time step +# =-1 output frequency at end of run +# +#output_units = units used for output frequency +# (years, months, days, minutes, hours, seconds) +# +#time_units = units used to label the time axis +# (days, minutes, hours, seconds) +# +# +# FORMAT FOR FIELD ENTRIES (not all input values are used) +# ------------------------ +# +#"module_name", "field_name", "output_name", "file_name" "time_sampling", time_avg, "other_opts", packing +# +#time_avg = .true. or .false. +# +#packing = 1 double precision +# = 2 float +# = 4 packed 16-bit integers +# = 8 packed 1-byte (not tested?) diff --git a/sorc/test/parm/fd_ufs.yaml b/sorc/test/parm/fd_ufs.yaml new file mode 100644 index 00000000..edfca0be --- /dev/null +++ b/sorc/test/parm/fd_ufs.yaml @@ -0,0 +1,1266 @@ +field_dictionary: + version_number: 0.0.0 + institution: National ESPC, CSC & MCL Working Groups + source: automatically generated by the NUOPC Layer + description: Community-based dictionary for shared coupling fields + entries: + # + #----------------------------------- + # section: mediator calculation for atm/ocn flux calculation + #----------------------------------- + # + - standard_name: Faox_lat + alias: mean_laten_heat_flx_atm_into_ocn + canonical_units: W m-2 + description: mediator calculation - atm/ocn surface latent heat flux + # + - standard_name: Faox_lwup + alias: mean_up_lw_flx_ocn + canonical_units: W m-2 + description: mediator calculation - long wave radiation flux over the ocean + # + - standard_name: Faox_taux + alias: stress_on_air_ocn_zonal + canonical_units: N m-2 + description: mediator calculation + # + - standard_name: Faox_tauy + alias: stress_on_air_ocn_merid + canonical_units: N m-2 + description: mediator calculation + # + - standard_name: Foxx_lwnet + alias: mean_net_lw_flx + canonical_units: W m-2 + description: mediator calculation - atm/ocn net longwave flux + # + - standard_name: Foxx_sen + canonical_units: W m-2 + alias: mean_sensi_heat_flx + description: mediator calculation - atm/ocn surface sensible heat flux + # + - standard_name: Foxx_evap + canonical_units: kg m-2 s-1 + alias: mean_evap_rate + description: mediator calculation - atm/ocn specific humidity flux + # + - standard_name: Faox_evap + canonical_units: kg m-2 s-1 + description: mediator calculation - atm/ocn specific humidity flux + #----------------------------------- + # section: atmosphere export + #----------------------------------- + # + - standard_name: Faxa_bcph + canonical_units: kg m-2 s-1 + description: atmosphere export + # + - standard_name: Faxa_ocph + canonical_units: kg m-2 s-1 + description: atmosphere export + # + - standard_name: Faxa_dstdry + canonical_units: kg m-2 s-1 + description: atmosphere export + # + - standard_name: Faxa_dstwet + canonical_units: kg m-2 s-1 + description: atmosphere export + # + #----------------------------------- + # section: atmosphere export + #----------------------------------- + # + - standard_name: Faxa_swdn + alias: inst_down_sw_flx + canonical_units: W m-2 + description: atmosphere export - mean downward SW heat flux + # + - standard_name: Faxa_lwdn + alias: inst_down_lw_flx + canonical_units: W m-2 + description: atmosphere export - mean downward LW heat flux + # + - standard_name: Faxa_rain + alias: inst_prec_rate + canonical_units: kg m-2 s-1 + description: atmosphere export + # + - standard_name: Faxa_rainc + alias: inst_prec_rate_conv + canonical_units: kg m-2 s-1 + description: atmosphere export + # + - standard_name: Faxa_rainl + alias: inst_prec_rate_large + canonical_units: kg m-2 s-1 + description: atmosphere export + # + - standard_name: Faxa_snow + alias: inst_fprec_rate + canonical_units: kg m-2 s-1 + description: atmosphere export + # + - standard_name: Faxa_snowc + alias: inst_fprec_rate_conv + canonical_units: kg m-2 s-1 + description: atmosphere export + # + - standard_name: Faxa_snowl + alias: inst_fprec_rate_large + canonical_units: kg m-2 s-1 + description: atmosphere export + # + - standard_name: Faxa_swnet + alias: inst_net_sw_flx + canonical_units: W m-2 + description: atmosphere export + # + - standard_name: Faxa_swndf + alias: inst_down_sw_ir_dif_flx + canonical_units: W m-2 + description: atmosphere export - mean surface downward nir diffuse flux + # + - standard_name: Faxa_swndr + alias: inst_down_sw_ir_dir_flx + canonical_units: W m-2 + description: atmosphere export - mean surface downward nir direct flux + # + - standard_name: Faxa_swvdf + alias: inst_down_sw_vis_dif_flx + canonical_units: W m-2 + description: atmosphere export - mean surface downward uv+vis diffuse flux + # + - standard_name: Faxa_swvdr + alias: inst_down_sw_vis_dir_flx + canonical_units: W m-2 + description: atmosphere export - mean surface downward uv+visvdirect flux + # + - standard_name: Sa_dens + alias: air_density_height_lowest + canonical_units: kg m-3 + description: atmosphere export- density at the lowest model layer + # + - standard_name: Sa_pbot + alias: inst_pres_height_lowest + canonical_units: Pa + description: atmosphere export - pressure at lowest model layer + # + - standard_name: Sa_prsl + alias: inst_pres_height_lowest_from_phys + canonical_units: Pa + description: atmosphere export - pressure at lowest model layer + # + - standard_name: Sa_pslv + alias: inst_pres_height_surface + canonical_units: Pa + description: atmosphere export - instantaneous pressure land and sea surface + # + - standard_name: Sa_ptem + canonical_units: K + description: atmosphere export - bottom layer potential temperature + # + - standard_name: Sa_shum + alias: inst_spec_humid_height_lowest + canonical_units: kg kg-1 + description: atmosphere export - bottom layer specific humidity + # + - standard_name: Sa_qa + alias: inst_spec_humid_height_lowest_from_phys + canonical_units: kg kg-1 + description: atmosphere export - bottom layer specific humidity + # + - standard_name: Sa_tbot + alias: inst_temp_height_lowest + canonical_units: K + description: atmosphere export - bottom layer temperature + # + - standard_name: Sa_tskn + alias: inst_temp_height_surface + - standard_name: Sa_tskn + alias: inst_temp_skin_temperature + canonical_units: K + description: atmosphere export - sea surface skin temperature + # + - standard_name: Sa_ta + alias: inst_temp_height_lowest_from_phys + canonical_units: K + description: atmosphere export - bottom layer temperature + # + - standard_name: Sa_u + alias: inst_zonal_wind_height_lowest + canonical_units: m s-1 + description: atmosphere export - bottom layer zonal wind + # + - standard_name: Sa_v + alias: inst_merid_wind_height_lowest + canonical_units: m s-1 + description: atmosphere export - bottom layer meridional wind + # + - standard_name: Sa_wspd + alias: inst_wind_speed_height_lowest + canonical_units: m s-1 + description: atmosphere export - bottom layer wind speed + # + - standard_name: Sa_z + alias: inst_height_lowest + canonical_units: m + description: atmosphere export - bottom layer height + # + - standard_name: Sa_topo + alias: inst_surface_height + canonical_units: m + description: atmosphere export - topographic height + # + - standard_name: Faxa_taux + alias: inst_zonal_moment_flx + - standard_name: Faxa_taux + alias: inst_zonal_moment_flx_atm + canonical_units: N m-2 + description: atmosphere export- zonal component of momentum flux + # + - standard_name: Faxa_tauy + alias: inst_merid_moment_flx + - standard_name: Faxa_tauy + alias: inst_merid_moment_flx_atm + canonical_units: N m-2 + description: atmosphere export - meridional component of momentum flux + # + - standard_name: Faxa_lwnet + canonical_units: W m-2 + alias: inst_net_lw_flx + description: atmosphere export - mean net longwave flux from atm + # + - standard_name: Faxa_sen + canonical_units: W m-2 + alias: inst_sensi_heat_flx + description: atmosphere export - sensible heat flux + # + - standard_name: Faxa_evap + canonical_units: kg m-2 s-1 + alias: inst_evap_rate + description: atmosphere export - latent heat flux conversion + # + - standard_name: Faxx_evap + canonical_units: kg m-2 s-1 + description: atmosphere import + # + - standard_name: Faxa_lat + alias: inst_laten_heat_flx + canonical_units: W m-2 + description: atmosphere export - latent heat flux + # + - standard_name: Faxx_lat + alias: mean_laten_heat_flx + canonical_units: W m-2 + description: atmosphere import + # + - standard_name: Faxx_lwup + alias: mean_up_lw_flx + canonical_units: W m-2 + description: atmosphere import - merged ocn/ice flux + # + - standard_name: Faxx_sen + alias: mean_sensi_heat_flx + canonical_units: W m-2 + description: atmosphere import + # + - standard_name: Faxx_taux + alias: mean_zonal_moment_flx + canonical_units: N m-2 + description: atmosphere import - zonal component of momentum flux + # + - standard_name: Faxx_tauy + alias: mean_merid_moment_flx + canonical_units: N m-2 + description: atmosphere import - meridional component of momentum flux + # + - standard_name: Sa_ofrac + alias: openwater_frac_in_atm + canonical_units: 1 + description: atm export to mediator - open water ocean fraction (varies with time) + # + - standard_name: Sa_u10m + alias: inst_zonal_wind_height10m + canonical_units: m s-1 + description: atmosphere export - zonal wind height 10m + - standard_name: Sa_u10m + alias: eastward_wind_at_10m_height + # + - standard_name: Sa_v10m + alias: inst_merid_wind_height10m + canonical_units: m s-1 + description: atmosphere export - meridional wind height 10m + - standard_name: Sa_v10m + alias: northward_wind_at_10m_height + # + - standard_name: Sa_wspd10m + alias: inst_wind_speed_height10m + canonical_units: m s-1 + description: atmosphere export - wind speed height 10m + # + - standard_name: Sa_t2m + alias: inst_temp_height2m + canonical_units: K + description: atmosphere export - temperature height 2m + # + - standard_name: Sa_q2m + alias: inst_spec_humid_height2m + canonical_units: kg kg -1 + description: atmosphere export - specifc humidity height 2m + # + - standard_name: canopy_moisture_storage + canonical_units: m + description: canopy moisture content + # + - standard_name: inst_aerodynamic_conductance + canonical_units: m + description: aerodynamic conductance + # + - standard_name: inst_canopy_resistance + canonical_units: s m-1 + description: canopy aerodynamic resistance + # + - standard_name: leaf_area_index + canonical_units: 1 + description: leaf area index + # + - standard_name: temperature_of_soil_layer + canonical_units: K + description: temperature in soil layer + # + - standard_name: height + canonical_units: m + description: orography + # + - standard_name: Sa_exner + alias: inst_exner_function_height_lowest + canonical_units: 1 + description: dimensionless exner function at surface adjacent layer + # + - standard_name: Sa_ustar + alias: surface_friction_velocity + canonical_units: m s-1 + description: surface friction velocity + # + #----------------------------------- + # section: sea-ice export + #----------------------------------- + # + - standard_name: Faii_evap + alias: evap_rate_atm_into_ice + canonical_units: kg m-2 s-1 + description: sea-ice export + # + - standard_name: Faii_lat + alias: laten_heat_flx_atm_into_ice + canonical_units: W m-2 + description: sea-ice export to atm - atm/ice latent heat flux + # + - standard_name: Faii_sen + alias: sensi_heat_flx_atm_into_ice + canonical_units: W m-2 + description: sea-ice export to atm - atm/ice sensible heat flux + # + - standard_name: Faii_lwup + alias: lwup_flx_ice + canonical_units: W m-2 + description: sea-ice export - outgoing logwave radiation + # + - standard_name: Faii_swnet + canonical_units: W m-2 + description: sea-ice export to atm + # + - standard_name: Faii_taux + alias: stress_on_air_ice_zonal + canonical_units: N m-2 + description: sea-ice export to atm - air ice zonal stress + # + - standard_name: Faii_tauy + alias: stress_on_air_ice_merid + canonical_units: N m-2 + description: sea-ice export - air ice meridional stress + # + - standard_name: Fioi_bcphi + canonical_units: kg m-2 s-1 + description: sea-ice export to ocean - hydrophilic black carbon flux to ocean + # + - standard_name: Fioi_bcpho + canonical_units: kg m-2 s-1 + description: sea-ice export to ocean - hydrophobic black carbon flux to ocean + # + - standard_name: Fioi_flxdst + canonical_units: kg m-2 s-1 + description: sea-ice export to ocean - dust aerosol flux to ocean + # + - standard_name: Fioi_melth + alias: net_heat_flx_to_ocn + canonical_units: W m-2 + description: sea-ice export to ocean - net heat flux to ocean + # + - standard_name: Fioi_meltw + alias: mean_fresh_water_to_ocean_rate + canonical_units: kg m-2 s-1 + description: sea-ice export to ocean - fresh water to ocean (h2o flux from melting) + # + - standard_name: Fioi_meltw_wiso + alias: mean_fresh_water_to_ocean_rate_wiso + canonical_units: kg m-2 s-1 + description: sea-ice export to ocean - fresh water to ocean (h2o flux from melting) for 16O, 18O, HDO + # + - standard_name: Fioi_salt + alias: mean_salt_rate + canonical_units: kg m-2 s-1 + description: sea-ice export to ocean - salt to ocean (salt flux from melting) + # + - standard_name: Fioi_swpen + alias: mean_sw_pen_to_ocn + canonical_units: W m-2 + description: sea-ice export to ocean - flux of shortwave through ice to ocean + # + - standard_name: Fioi_swpen_vdr + alias: mean_sw_pen_to_ocn_vis_dir_flx + canonical_units: W m-2 + description: sea-ice export to ocean - flux of vis dir shortwave through ice to ocean + # + - standard_name: Fioi_swpen_vdf + alias: mean_sw_pen_to_ocn_vis_dif_flx + canonical_units: W m-2 + description: sea-ice export to ocean - flux of vif dir shortwave through ice to ocean + # + - standard_name: Fioi_swpen_idr + alias: mean_sw_pen_to_ocn_ir_dir_flx + canonical_units: W m-2 + description: sea-ice export to ocean - flux of ir dir shortwave through ice to ocean + # + - standard_name: Fioi_swpen_idf + alias: mean_sw_pen_to_ocn_ir_dif_flx + canonical_units: W m-2 + description: sea-ice export to ocean - flux of ir dif shortwave through ice to ocean + # + - standard_name: Fioi_taux + alias: stress_on_ocn_ice_zonal + canonical_units: N m-2 + description: sea-ice export to ocean - ice ocean zonal stress + # + - standard_name: Fioi_tauy + alias: stress_on_ocn_ice_merid + canonical_units: N m-2 + description: sea-ice export to ocean - ice ocean meridional stress + # + - standard_name: Si_anidf + alias: inst_ice_ir_dif_albedo + canonical_units: 1 + description: sea-ice export to atm + # + - standard_name: Si_anidr + alias: inst_ice_ir_dir_albedo + canonical_units: 1 + description: sea-ice export to atm + # + - standard_name: Si_avsdf + alias: inst_ice_vis_dif_albedo + canonical_units: 1 + description: sea-ice export to atm + # + - standard_name: Si_avsdr + alias: inst_ice_vis_dir_albedo + canonical_units: 1 + description: sea-ice export to atm + # + - standard_name: Si_ifrac + alias: ice_fraction + canonical_units: 1 + description: sea-ice export to atm - ice fraction (varies with time) + # + - standard_name: Si_imask + alias: ice_mask + canonical_units: 1 + description: sea-ice export - ice mask + # + - standard_name: Si_qref + canonical_units: kg kg-1 + description: sea-ice export to atm + # + - standard_name: Si_t + alias: sea_ice_surface_temperature + canonical_units: K + description: sea-ice export + # + - standard_name: Si_tref + canonical_units: K + description: sea-ice export + # + - standard_name: Si_u10 + canonical_units: m/s + description: sea-ice export + # + - standard_name: Si_vice + alias: sea_ice_volume + canonical_units: m + description: sea-ice export - volume of ice per unit area + # + - standard_name: Si_snowh + canonical_units: m + description: sea-ice export - surface_snow_water_equivalent + # + - standard_name: Si_vsno + alias: snow_volume_on_sea_ice + canonical_units: m + description: sea-ice export - volume of snow per unit area + # + - standard_name: Si_thick + canonical_units: m + description: sea-ice export - ice thickness + # + - standard_name: Si_floediam + canonical_units: m + description: sea-ice export - ice floe diameter + # + #----------------------------------- + # section: ocean export to mediator + #----------------------------------- + # + - standard_name: Fioo_q + alias: freezing_melting_potential + canonical_units: W m-2 + description: ocean export + # + - standard_name: So_bldepth + alias: mixed_layer_depth + canonical_units: m + description: ocean export + # + - standard_name: So_h + alias: sea_surface_height_above_sea_level + canonical_units: m + description: ocean export + - standard_name: So_h + alias: seahgt + # + - standard_name: So_dhdx + alias: sea_surface_slope_zonal + canonical_units: m m-1 + description: ocean export + # + - standard_name: So_dhdy + alias: sea_surface_slope_merid + canonical_units: m m-1 + description: ocean export + # + - standard_name: So_duu10n + canonical_units: m2 s-2 + description: ocean export + # + - standard_name: So_fswpen + canonical_units: 1 + description: ocean export + # + - standard_name: So_ofrac + canonical_units: 1 + description: ocean export + # + - standard_name: So_omask + alias: ocean_mask + canonical_units: 1 + description: ocean export + # + - standard_name: So_qref + canonical_units: kg kg-1 + description: ocean export + # + - standard_name: So_re + canonical_units: 1 + description: ocean export + # + - standard_name: So_s + alias: s_surf + canonical_units: g kg-1 + description: ocean export + # + - standard_name: So_ssq + canonical_units: kg kg-1 + description: ocean export + # + - standard_name: So_t + alias: sea_surface_temperature + canonical_units: K + description: ocean export + # + - standard_name: So_tref + canonical_units: K + description: ocean export + # + - standard_name: So_u + alias: ocn_current_zonal + canonical_units: m s-1 + description: ocean export + # + - standard_name: So_u10 + canonical_units: m + description: ocean export + # + - standard_name: So_ustar + canonical_units: m s-1 + description: ocean export + # + - standard_name: So_v + alias: ocn_current_merid + canonical_units: m s-1 + description: ocean export + # + #----------------------------------- + # section: ocean import + #----------------------------------- + # + - standard_name: Foxx_hrain + canonical_units: W m-2 + description: to ocn heat content of rain + # + - standard_name: Foxx_hsnow + canonical_units: W m-2 + description: to ocn heat content of snow + # + - standard_name: Foxx_hevap + canonical_units: W m-2 + description: to ocn heat content of evaporation + # + - standard_name: Foxx_hcond + canonical_units: W m-2 + description: to ocn heat content of condensation + # + - standard_name: Foxx_hrofl + canonical_units: W m-2 + description: to ocn heat content of liquid runoff + # + - standard_name: Foxx_hrofi + canonical_units: W m-2 + description: to ocn heat content of ice runoff + # + - standard_name: Foxx_rofi + canonical_units: kg m-2 s-1 + description: ocean import - water flux due to runoff (frozen) + # + - standard_name: Foxx_rofl + canonical_units: kg m-2 s-1 + description: ocean import - water flux due to runoff (liquid) + # + - standard_name: Foxx_swnet + alias: mean_net_sw_flx + canonical_units: W m-2 + description: ocean import - net shortwave radiation to ocean + # + - standard_name: Foxx_swnet_vdr + alias: mean_net_sw_vis_dir_flx + canonical_units: W m-2 + description: ocean import - net shortwave visible direct radiation to ocean + # + - standard_name: Foxx_swnet_vdf + alias: mean_net_sw_vis_dif_flx + canonical_units: W m-2 + description: ocean import - net shortwave visible diffuse radiation to ocean + # + - standard_name: Foxx_swnet_idr + alias: mean_net_sw_ir_dir_flx + canonical_units: W m-2 + description: ocean import - net shortwave ir direct radiation to ocean + # + - standard_name: Foxx_swnet_idf + alias: mean_net_sw_ir_dif_flx + canonical_units: W m-2 + description: ocean import - net shortwave ir diffuse radiation to ocean + # + - standard_name: Foxx_sen + alias: mean_sensi_heat_flx + canonical_units: W m-2 + description: ocean import - sensible heat flux into ocean + # + - standard_name: Foxx_lat + canonical_units: W m-2 + description: ocean import - latent heat flux into ocean + # + - standard_name: Foxx_taux + alias: mean_zonal_moment_flx + canonical_units: N m-2 + description: ocean import - zonal surface stress to ocean + # + - standard_name: Foxx_tauy + alias: mean_merid_moment_flx + canonical_units: N m-2 + description: ocean import - meridional surface stress to ocean + # + #----------------------------------- + # mediator fields + #----------------------------------- + # + - standard_name: cpl_scalars + canonical_units: unitless + # + - standard_name: frac + canonical_units: 1 + # + - standard_name: mask + canonical_units: 1 + # + #----------------------------------- + # fields to use fluxes from mediator + #----------------------------------- + # + - standard_name: Faox_lat + alias: laten_heat_flx_atm_into_ocn + canonical_units: W m-2 + description: mediator export - atm/ocn surface latent heat flux + # + - standard_name: Faox_sen + alias: sensi_heat_flx_atm_into_ocn + canonical_units: W m-2 + description: mediator export - atm/ocn surface sensible heat flux + # + - standard_name: Faox_lwup + alias: lwup_flx_ocn + canonical_units: W m-2 + description: mediator export - long wave radiation flux over the ocean + # + - standard_name: Faox_taux + alias: stress_on_air_ocn_zonal + canonical_units: N m-2 + description: mediator export + # + - standard_name: Faox_tauy + alias: stress_on_air_ocn_merid + canonical_units: N m-2 + description: mediator export + # + #----------------------------------- + # section: atmosphere fields that need to be defined but are not used + #----------------------------------- + # + - standard_name: mean_prec_rate + canonical_units: kg m-2 s-1 + - standard_name: mean_fprec_rate + canonical_units: kg m-2 s-1 + - standard_name: mean_prec_rate_conv + canonical_units: kg m-2 s-1 + - standard_name: mean_down_lw_flx + canonical_units: W m-2 + - standard_name: inst_net_lw_flx + canonical_units: W m-2 + - standard_name: mean_down_sw_flx + canonical_units: W m-2 + - standard_name: mean_net_sw_flx + canonical_units: W m-2 + - standard_name: inst_net_sw_ir_dir_flx + canonical_units: W m-2 + - standard_name: inst_net_sw_ir_dif_flx + canonical_units: W m-2 + - standard_name: inst_net_sw_vis_dir_flx + canonical_units: W m-2 + - standard_name: inst_net_sw_vis_dif_flx + canonical_units: W m-2 + - standard_name: mean_down_sw_ir_dif_flx + canonical_units: W m-2 + - standard_name: mean_down_sw_ir_dir_flx + canonical_units: W m-2 + - standard_name: mean_down_sw_vis_dif_flx + canonical_units: W m-2 + - standard_name: mean_down_sw_vis_dir_flx + canonical_units: W m-2 + - standard_name: inst_surface_height + canonical_units: m + - standard_name: mean_zonal_moment_flx_atm + canonical_units: N m-2 + - standard_name: mean_merid_moment_flx_atm + canonical_units: N m-2 + - standard_name: inst_zonal_moment_flx_atm + canonical_units: N m-2 + - standard_name: inst_merid_moment_flx_atm + canonical_units: N m-2 + - standard_name: inst_sensi_heat_flx + canonical_units: N m-2 + - standard_name: inst_laten_heat_flx + canonical_units: N m-2 + - standard_name: inst_evap_rate + canonical_units: kg m-2 s-1 + - standard_name: inst_tracer_mass_frac + canonical_units: 1 + - standard_name: inst_tracer_up_surface_flx + canonical_units: kg m-2 s-1 + - standard_name: inst_tracer_down_surface_flx + canonical_units: kg m-2 s-1 + - standard_name: inst_tracer_clmn_mass_dens + canonical_units: g m-2 + - standard_name: inst_tracer_anth_biom_flx + canonical_units: ug m-2 s-1 + description: atmosphere export + - standard_name: inst_pres_interface + canonical_units: Pa + - standard_name: inst_pres_levels + canonical_units: Pa + - standard_name: inst_geop_interface + canonical_units: tbd + - standard_name: inst_geop_levels + canonical_units: tbd + - standard_name: inst_temp_interface + canonical_units: K + - standard_name: inst_temp_levels + canonical_units: K + - standard_name: inst_zonal_wind_levels + canonical_units: m s-1 + - standard_name: inst_merid_wind_levels + canonical_units: m s-1 + - standard_name: inst_omega_levels + canonical_units: tbd + - standard_name: inst_tracer_mass_frac + canonical_units: 1 + - standard_name: inst_soil_moisture_content + canonical_units: tbd + - standard_name: soil_type + canonical_units: tbd + - standard_name: inst_pbl_height + canonical_units: tbd + - standard_name: surface_cell_area + canonical_units: tbd + - standard_name: inst_convective_rainfall_amount + canonical_units: tbd + - standard_name: inst_spec_humid_conv_tendency_levels + canonical_units: tbd + - standard_name: inst_exchange_coefficient_heat_levels + canonical_units: tbd + - standard_name: inst_friction_velocity + canonical_units: tbd + - standard_name: inst_rainfall_amount + canonical_units: tbd + - standard_name: inst_land_sea_mask + canonical_units: tbd + - standard_name: inst_temp_height_surface + canonical_units: tbd + - standard_name: inst_up_sensi_heat_flx + canonical_units: tbd + - standard_name: inst_lwe_snow_thickness + canonical_units: tbd + - standard_name: vegetation_type + canonical_units: tbd + - standard_name: inst_vegetation_area_frac + canonical_units: tbd + - standard_name: inst_surface_roughness + canonical_units: tbd + - standard_name: inst_laten_heat_flx + canonical_units: W m-2 + - standard_name: inst_sensi_heat_flx + canonical_units: W m-2 + - standard_name: land_mask + canonical_units: 1 + - standard_name: inst_cloud_frac_levels + canonical_units: 1 + - standard_name: inst_ice_nonconv_tendency_levels + canonical_units: kg m-2 s-1 + - standard_name: inst_liq_nonconv_tendency_levels + canonical_units: kg m-2 s-1 + - standard_name: inst_surface_soil_wetness + canonical_units: 1 + - standard_name: lake_fraction + canonical_units: 1 + - standard_name: ice_fraction_in_atm + alias: sea_ice_area_fraction + canonical_units: 1 + - standard_name: ocean_fraction + canonical_units: 1 + - standard_name: surface_snow_area_fraction + canonical_units: 1 + # + #----------------------------------- + # WW3 import + #----------------------------------- + # + - standard_name: sea_surface_height_above_sea_level + canonical_units: m + description: ww3 import + # + - standard_name: sea_surface_salinity + alias: s_surf + canonical_units: g kg-1 + description: ww3 import + # + - standard_name: surface_eastward_sea_water_velocity + alias: ocn_current_zonal + canonical_units: m s-1 + description: ww3 import + # + - standard_name: surface_northward_sea_water_velocity + alias: ocn_current_merid + canonical_units: m s-1 + description: ww3 import + # + - standard_name: eastward_wind_at_10m_height + alias: inst_zonal_wind_height10m + canonical_units: m s-1 + description: ww3 import + # + - standard_name: northward_wind_at_10m_height + alias: inst_merid_wind_height10m + canonical_units: m s-1 + description: ww3 import + # + - standard_name: sea_ice_concentration + alias: ice_fraction + canonical_units: 1 + description: ww3 import + # + #----------------------------------- + # WW3 export + #----------------------------------- + # + - standard_name: Sw_z0 + alias: wave_z0_roughness_length + canonical_units: 1 + description: ww3 export + - standard_name: Sw_z0 + alias: z0rlen + # + - standard_name: Sw_pstokes_x + alias: eastward_partitioned_stokes_drift_current + canonical_units: m s-1 + description: ww3 export partitioned drift components using ungridded dimension + # + - standard_name: Sw_pstokes_y + alias: northward_partitioned_stokes_drift_current + canonical_units: m s-1 + description: ww3 export partitioned drift components using ungridded dimension + # + - standard_name: Sw_elevation_spectrum + alias: wave_elevation_spectrum + canonical_units: m2/s + description: wave elevation spectrum + # + # remaining fields are unused but required to be present + # + - standard_name: Sw_ch + alias: wave_induced_charnock_parameter + canonical_units: 1 + description: ww3 export + - standard_name: Sw_ch + alias: charno + # + - standard_name: eastward_stokes_drift_current + alias: uscurr + canonical_units: m s-1 + description: ww3 export spectrum of drift components + # + - standard_name: northward_stokes_drift_current + alias: vscurr + canonical_units: m s-1 + description: ww3 export spectrum of drift components + # + - standard_name: Sw_ustokes + alias: eastward_surface_stokes_drift_current + canonical_units: m s-1 + description: ww3 export surface drift components + - standard_name: Sw_ustokes + alias: ussx + # + - standard_name: Sw_vstokes + alias: northward_surface_stokes_drift_current + canonical_units: m s-1 + description: ww3 export using surface drift components + - standard_name: Sw_vstokes + alias: ussy + # + - standard_name: Sw_wbcuru + alias: eastward_wave_bottom_current + canonical_units: m s-1 + description: ww3 export + - standard_name: Sw_wbcuru + alias: wbcuru + # + - standard_name: Sw_wbcurv + alias: northward_wave_bottom_current + canonical_units: m s-1 + description: ww3 export + - standard_name: Sw_wbcurv + alias: wbcurv + # + - standard_name: Sw_wbcurp + alias: wave_bottom_current_period + canonical_units: s + description: ww3 export + - standard_name: Sw_wbcurp + alias: wbcurp + # + - standard_name: Sw_wavsuu + alias: eastward_wave_radiation_stress + canonical_units: N m-1 + description: ww3 export + - standard_name: Sw_wavsuu + alias: wavsuu + # + - standard_name: Sw_wavsuv + alias: eastward_northward_wave_radiation_stress + canonical_units: N m-1 + description: ww3 export + - standard_name: Sw_wavsuv + alias: wavsuv + # + - standard_name: Sw_wavsvv + alias: northward_wave_radiation_stress + canonical_units: Pa + description: ww3 export + - standard_name: Sw_wavsvv + alias: wavsvv + # + - standard_name: Sw_ustokes1 + alias: eastward_partitioned_stokes_drift_1 + canonical_units: m s-1 + description: ww3 export + - standard_name: Sw_ustokes1 + alias: x1pstk + # + - standard_name: Sw_ustokes2 + alias: eastward_partitioned_stokes_drift_2 + canonical_units: m s-1 + description: ww3 export + - standard_name: Sw_ustokes2 + alias: x2pstk + # + - standard_name: Sw_ustokes3 + alias: eastward_partitioned_stokes_drift_3 + canonical_units: m s-1 + description: ww3 export + - standard_name: Sw_ustokes3 + alias: x3pstk + # + - standard_name: Sw_vstokes1 + alias: northward_partitioned_stokes_drift_1 + canonical_units: m s-1 + description: ww3 export + - standard_name: Sw_vstokes1 + alias: y1pstk + # + - standard_name: Sw_vstokes2 + alias: northward_partitioned_stokes_drift_2 + canonical_units: m s-1 + description: ww3 export + - standard_name: Sw_vstokes2 + alias: y2pstk + # + - standard_name: Sw_vstokes3 + alias: northward_partitioned_stokes_drift_3 + canonical_units: m s-1 + description: ww3 export + - standard_name: Sw_vstokes3 + alias: y3pstk + # + #----------------------------------- + # section: FV3 atm export/import to/from JEDI + #----------------------------------- + # + - standard_name: u + canonical_units: m s-1 + alias: u_component_of_native_D_grid_wind + # + - standard_name: v + canonical_units: m s-1 + alias: v_component_of_native_D_grid_wind + # + - standard_name: ua + canonical_units: m s-1 + alias: eastward_wind + # + - standard_name: va + canonical_units: m s-1 + alias: northward_wind + # + - standard_name: t + canonical_units: K + alias: air_temperature + # + - standard_name: delp + canonical_units: Pa + alias: air_pressure_thickness + # + - standard_name: ps + canonical_units: Pa + alias: surface_pressure + # + - standard_name: sphum + canonical_units: kg kg-1 + alias: specific_humidity + # + - standard_name: ice_wat + canonical_units: kg kg-1 + alias: cloud_liquid_ice + # + - standard_name: liq_wat + canonical_units: kg kg-1 + alias: cloud_liquid_water + # + - standard_name: rainwat + canonical_units: kg kg-1 + alias: rain_water + # + - standard_name: snowwat + canonical_units: kg kg-1 + alias: snow_water + # + - standard_name: graupel + canonical_units: kg kg-1 + alias: graupel + # + - standard_name: o3mr + canonical_units: kg kg-1 + alias: ozone_mass_mixing_ratio + # + - standard_name: phis + canonical_units: m2 s-2 + alias: sfc_geopotential_height_times_grav + # + - standard_name: u_srf + canonical_units: m s-1 + alias: surface_eastward_wind + # + - standard_name: v_srf + canonical_units: m s-1 + alias: surface_northward_wind + # + # + - standard_name: t2m + canonical_units: K + alias: surface_temperature + # + - standard_name: slmsk + canonical_units: flag + description: landmask sea/land/ice=0/1/2 + # + - standard_name: weasd + canonical_units: mm + description: water equiv of acc snow depth over land and sea ice + alias: sheleg + # + - standard_name: tsea + canonical_units: K + description: surface skin temperature + # + - standard_name: vtype + canonical_units: index + description: vegetation type + # + - standard_name: stype + canonical_units: index + description: soil type + # + - standard_name: Sa_vfrac + canonical_units: frac + description: areal fractional cover of green vegetation + - standard_name: Sa_vfrac + alias: vfrac + # + - standard_name: stc + canonical_units: K + description: soil temperature content + # + - standard_name: smc + canonical_units: m3 m-3 + description: soil moisture content + # + - standard_name: snwdph + canonical_units: mm + description: snow depth in mm + # + - standard_name: f10m + canonical_units: ratio + description: fm at 10m - Ratio of sigma level 1 wind and 10m wind + # + - standard_name: Sa_zorl + canonical_units: cm + description: composite surface roughness in cm + - standard_name: Sa_zorl + alias: zorl + # + - standard_name: t2m + canonical_units: K + description: two meter temperature + # + #----------------------------------- + # section: land export + #----------------------------------- + # + - standard_name: Sl_lfrac + alias: land_fraction + canonical_units: 1 + description: land export + # + - standard_name: Sl_lfrin + canonical_units: 1 + description: land export + # + - standard_name: Sl_t + canonical_units: K + description: land export + # + - standard_name: inst_tracer_diag_aod + canonical_units: 1 + description: AOD + # + - standard_name: Sl_sfrac + alias: inst_snow_area_fraction_lnd + canonical_units: 1 + description: land export + # + - standard_name: Sl_tref + alias: inst_temp_height2m_lnd + canonical_units: K + description: mediator export to glc - no levation classes + # + - standard_name: Sl_qref + alias: inst_spec_humid_height2m_lnd + canonical_units: kg kg-1 + description: land export + # + - standard_name: Sl_q + alias: inst_spec_humid_lnd + canonical_units: kg kg-1 + description: land export + # + - standard_name: Fall_lat + alias: inst_laten_heat_flx_lnd + canonical_units: kg kg-1 m s-1 + description: land export to atm - atm/lnd latent heat flux + # + - standard_name: Fall_sen + alias: inst_sensi_heat_flx_lnd + canonical_units: K m s-1 + description: land export to atm - atm/lnd sensible heat flux + # + - standard_name: Fall_evap + alias: inst_potential_laten_heat_flx_lnd + canonical_units: W m-2 + description: land export + # + - standard_name: Fall_gflx + alias: inst_upward_heat_flux_lnd + canonical_units: W m-2 + description: land export + # + - standard_name: Fall_roff + alias: inst_runoff_rate_lnd + canonical_units: kg m-2 s-1 + description: land export + # + - standard_name: Fall_soff + alias: inst_subsurface_runoff_rate_lnd + canonical_units: kg m-2 s-1 + description: land export + # + - standard_name: Sl_cmm + alias: inst_drag_wind_speed_for_momentum + canonical_units: m s-1 + description: land export + # + - standard_name: Sl_chh + alias: inst_drag_mass_flux_for_heat_and_moisture + canonical_units: kg m-2 s-1 + description: land export + # + - standard_name: Sl_zvfun + alias: inst_func_of_roughness_length_and_vfrac + canonical_units: 1 + description: land export diff --git a/sorc/test/parm/input.nml b/sorc/test/parm/input.nml new file mode 100644 index 00000000..7fcb7c2e --- /dev/null +++ b/sorc/test/parm/input.nml @@ -0,0 +1,28 @@ +&fms_nml + clock_grain='ROUTINE' + clock_flags='NONE' + domains_stack_size = 5000000 + stack_size =0 +/ + &MOM_input_nml + output_directory = './MOM6_OUTPUT', + input_filename = 'n' + restart_input_dir = 'INPUT/', + restart_output_dir = './RESTART/', + parameter_filename = 'INPUT/MOM_input', + 'INPUT/MOM_override' / + + +&nam_stochy +new_lscale=.true., +OCNSPPT=-999., +OCNSPPT_LSCALE=500e3, +OCNSPPT_TAU=21600, +ISEED_OCNSPPT=201601010012, +EPBL=-999., +EPBL_LSCALE=500e3, +EPBL_TAU=21600, +ISEED_EPBL=201601010023, +/ +&nam_sfcperts +/ diff --git a/sorc/test/parm/model_configure b/sorc/test/parm/model_configure new file mode 100644 index 00000000..0d84564a --- /dev/null +++ b/sorc/test/parm/model_configure @@ -0,0 +1,9 @@ +start_year: 2000 +start_month: 01 +start_day: 05 +start_hour: 00 +start_minute: 0 +start_second: 0 +nhours_fcst: 24 +dt_atmos: 900 +fhrot: 0 diff --git a/sorc/test/parm/noahmptable.tbl b/sorc/test/parm/noahmptable.tbl new file mode 100644 index 00000000..44531919 --- /dev/null +++ b/sorc/test/parm/noahmptable.tbl @@ -0,0 +1,782 @@ +&noahmp_usgs_veg_categories + veg_dataset_description = "usgs" + nveg = 27 +/ +&noahmp_usgs_parameters + ! nveg = 27 + ! 1: urban and built-up land + ! 2: dryland cropland and pasture + ! 3: irrigated cropland and pasture + ! 4: mixed dryland/irrigated cropland and pasture + ! 5: cropland/grassland mosaic + ! 6: cropland/woodland mosaic + ! 7: grassland + ! 8: shrubland + ! 9: mixed shrubland/grassland + ! 10: savanna + ! 11: deciduous broadleaf forest + ! 12: deciduous needleleaf forest + ! 13: evergreen broadleaf forest + ! 14: evergreen needleleaf forest + ! 15: mixed forest + ! 16: water bodies + ! 17: herbaceous wetland + ! 18: wooded wetland + ! 19: barren or sparsely vegetated + ! 20: herbaceous tundra + ! 21: wooded tundra + ! 22: mixed tundra + ! 23: bare ground tundra + ! 24: snow or ice + ! 25: playa + ! 26: lava + ! 27: white sand + + isurban = 1 + iswater = 16 + isbarren = 19 + isice = 24 + iscrop = 2 + eblforest = 13 + natural = 5 + lcz_1 = 31 + lcz_2 = 32 + lcz_3 = 33 + lcz_4 = 34 + lcz_5 = 35 + lcz_6 = 36 + lcz_7 = 37 + lcz_8 = 38 + lcz_9 = 39 + lcz_10 = 40 + lcz_11 = 41 + + !--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + ! 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 + !--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + ch2op = 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + dleaf = 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, + z0mvt = 1.00, 0.15, 0.15, 0.15, 0.14, 0.50, 0.12, 0.06, 0.09, 0.50, 0.80, 0.85, 1.10, 1.09, 0.80, 0.00, 0.12, 0.50, 0.00, 0.10, 0.30, 0.20, 0.03, 0.00, 0.01, 0.00, 0.00, + hvt = 15.0, 2.00, 2.00, 2.00, 1.50, 8.00, 1.00, 1.10, 1.10, 10.0, 16.0, 18.0, 20.0, 20.0, 16.0, 0.00, 0.50, 10.0, 0.00, 0.50, 4.00, 2.00, 0.50, 0.00, 0.10, 0.00, 0.00, + hvb = 1.00, 0.10, 0.10, 0.10, 0.10, 0.15, 0.05, 0.10, 0.10, 0.10, 11.5, 7.00, 8.00, 8.50, 10.0, 0.00, 0.05, 0.10, 0.00, 0.10, 0.10, 0.10, 0.10, 0.00, 0.10, 0.00, 0.00, + z0mhvt= 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.00, 0.05, 0.05, 0.05, 0.05, 0.00, 0.05, 0.00, 0.00, + den = 0.01, 25.0, 25.0, 25.0, 25.0, 25.0, 100., 10.0, 10.0, 0.02, 0.10, 0.28, 0.02, 0.28, 0.10, 0.01, 10.0, 0.10, 0.01, 1.00, 1.00, 1.00, 1.00, 0.00, 0.01, 0.01, 0.01, + rc = 1.00, 0.08, 0.08, 0.08, 0.08, 0.08, 0.03, 0.12, 0.12, 3.00, 1.40, 1.20, 3.60, 1.20, 1.40, 0.01, 0.10, 1.40, 0.01, 0.30, 0.30, 0.30, 0.30, 0.00, 0.01, 0.01, 0.01, +!mfsno = 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, +! c. he 12/17/2020: optimized mfsno values dependent on land type based on evaluation with snotel swe and modis scf, surface albedo + mfsno = 4.00, 3.00, 3.00, 3.00, 4.00, 4.00, 2.00, 2.00, 2.00, 2.00, 1.00, 1.00, 1.00, 1.00, 1.00, 3.00, 3.00, 3.00, 3.00, 3.50, 3.50, 3.50, 3.50, 2.50, 3.50, 3.50, 3.50, +! c. he 12/17/2020: optimized snow cover factor (m) in scf formulation to replace original constant 2.5*z0,z0=0.002m, based on evaluation with snotel swe and modis scf, surface albedo + scffac= 0.042, 0.014, 0.014, 0.014, 0.026, 0.026, 0.020, 0.018, 0.016, 0.020, 0.008, 0.008, 0.008, 0.008, 0.008, 0.030, 0.020, 0.020, 0.016, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, 0.030, + cbiom = 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, + + ! row 1: vis + ! row 2: near ir + rhol_vis=0.00, 0.11, 0.11, 0.11, 0.11, 0.11, 0.11, 0.07, 0.10, 0.10, 0.10, 0.07, 0.10, 0.07, 0.10, 0.00, 0.11, 0.10, 0.00, 0.10, 0.10, 0.10, 0.10, 0.00, 0.10, 0.00, 0.00, + rhol_nir=0.00, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.35, 0.45, 0.45, 0.45, 0.35, 0.45, 0.35, 0.45, 0.00, 0.58, 0.45, 0.00, 0.45, 0.45, 0.45, 0.45, 0.00, 0.45, 0.00, 0.00, + + ! row 1: vis + ! row 2: near ir + rhos_vis=0.00, 0.36, 0.36, 0.36, 0.36, 0.36, 0.36, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.00, 0.36, 0.16, 0.00, 0.16, 0.16, 0.16, 0.16, 0.00, 0.16, 0.00, 0.00, + rhos_nir=0.00, 0.58, 0.58, 0.58, 0.58, 0.58, 0.58, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.00, 0.58, 0.39, 0.00, 0.39, 0.39, 0.39, 0.39, 0.00, 0.39, 0.00, 0.00, + + ! row 1: vis + ! row 2: near ir + taul_vis=0.00, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.00, 0.07, 0.05, 0.00, 0.05, 0.05, 0.05, 0.05, 0.00, 0.05, 0.00, 0.00, + taul_nir=0.00, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.10, 0.10, 0.25, 0.25, 0.10, 0.25, 0.10, 0.25, 0.00, 0.25, 0.25, 0.00, 0.25, 0.25, 0.25, 0.25, 0.00, 0.25, 0.00, 0.00, + + ! row 1: vis + ! row 2: near ir + taus_vis=0.00, 0.220, 0.220, 0.220, 0.220, 0.220, 0.220, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.000, 0.220, 0.001, 0.000, 0.220, 0.001, 0.001, 0.001, 0.000, 0.001, 0.000, 0.000, + taus_nir=0.00, 0.380, 0.380, 0.380, 0.380, 0.380, 0.380, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.000, 0.380, 0.001, 0.000, 0.380, 0.001, 0.001, 0.001, 0.000, 0.001, 0.000, 0.000, + + xl = 0.000, -0.30, -0.30, -0.30, -0.30, -0.30, -0.30, 0.010, 0.250, 0.010, 0.250, 0.010, 0.010, 0.010, 0.250, 0.000, -0.30, 0.250, 0.000, -0.30, 0.250, 0.250, 0.250, 0.000, 0.250, 0.000, 0.000, + ! make cwpvt vegetation dependent according to j. goudriaan, crop micrometeorology: a simulation study (simulation monographs), 1977). c. he, 12/17/2020 + cwpvt = 0.18, 1.67, 1.67, 1.67, 1.67, 0.5, 5.0, 1.0, 2.0, 1.0, 0.67, 0.18, 0.67, 0.18, 0.29, 0.18, 1.67, 0.67, 0.18, 1.67, 0.67, 1.00, 0.18, 0.18, 0.18, 0.18, 0.18, + c3psn = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, + kc25 = 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, + akc = 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, + ko25 = 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, + ako = 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, + avcmx = 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, + aqe = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, + + ltovrc= 0.0, 1.2, 1.2, 1.2, 1.2, 1.30, 0.50, 0.65, 0.70, 0.65, 0.55, 0.2, 0.55, 0.5, 0.5, 0.0, 1.4, 1.4, 0.0, 1.2, 1.3, 1.4, 1.0, 0.0, 1.0, 0.0, 0.0, + dilefc= 0.00, 0.50, 0.50, 0.50, 0.35, 0.20, 0.20, 0.20, 0.50, 0.50, 0.60, 1.80, 0.50, 1.20, 0.80, 0.00, 0.40, 0.40, 0.00, 0.40, 0.30, 0.40, 0.30, 0.00, 0.30, 0.00, 0.00, + dilefw= 0.00, 0.20, 0.20, 0.20, 0.20, 0.20, 0.10, 0.20, 0.20, 0.50, 0.20, 0.20, 4.00, 0.20, 0.20, 0.00, 0.20, 0.20, 0.00, 0.20, 0.20, 0.20, 0.20, 0.00, 0.20, 0.00, 0.00, + rmf25 = 0.00, 1.00, 1.40, 1.45, 1.45, 1.45, 1.80, 0.26, 0.26, 0.80, 3.00, 4.00, 0.65, 3.00, 3.00, 0.00, 3.20, 3.20, 0.00, 3.20, 3.00, 3.00, 3.00, 0.00, 3.00, 0.00, 0.00, + sla = 60, 80, 80, 80, 80, 80, 60, 60, 60, 50, 80, 80, 80, 80, 80, 0, 80, 80, 0, 80, 80, 80, 80, 0, 80, 0, 0, + fragr = 0.00, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.10, 0.20, 0.10, 0.10, 0.00, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.00, 0.10, 0.00, 0.00, + tmin = 0, 273, 273, 273, 273, 273, 273, 273, 273, 273, 273, 268, 273, 265, 268, 0, 268, 268, 0, 268, 268, 268, 268, 0, 268, 0, 0, + vcmx25= 0.00, 80.0, 80.0, 80.0, 60.0, 70.0, 40.0, 40.0, 40.0, 40.0, 60.0, 60.0, 60.0, 50.0, 55.0, 0.00, 50.0, 50.0, 0.00, 50.0, 50.0, 50.0, 50.0, 0.00, 50.0, 0.00, 0.00, + tdlef = 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 278, 268, 278, 278, 268, 0, 268, 268, 0, 268, 268, 268, 268, 0, 268, 0, 0, + bp = 1.e15, 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, 1.e15, 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, 1.e15, 2.e3, 1.e15, 1.e15, + mp = 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 6., 9., 6., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., + qe25 = 0., 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.00, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.00, 0.06, 0.00, 0.00, + rms25 = 0.00, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.10, 0.32, 0.10, 0.64, 0.30, 0.90, 0.80, 0.00, 0.10, 0.10, 0.00, 0.10, 0.10, 0.10, 0.00, 0.00, 0.00, 0.00, 0.00, + rmr25 = 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.20, 0.00, 0.00, 0.01, 0.01, 0.05, 0.05, 0.36, 0.03, 0.00, 0.00, 0.00, 0.00, 2.11, 2.11, 2.11, 0.00, 0.00, 0.00, 0.00, 0.00, + arm = 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + folnmx= 0.00, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 0.00, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 0.00, 1.5, 0.00, 0.00, + wdpool= 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 0.00, 0.00, 1.00, 0.00, 0.00, 1.00, 1.00, 0.00, 0.00, 0.00, 0.00, 0.00, + wrrat = 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 3.00, 3.00, 30.0, 30.0, 30.0, 30.0, 30.0, 0.00, 0.00, 30.0, 0.00, 0.00, 3.00, 3.00, 0.00, 0.00, 0.00, 0.00, 0.00, + mrp = 0.00, 0.23, 0.23, 0.23, 0.23, 0.23, 0.17, 0.19, 0.19, 0.40, 0.40, 0.37, 0.23, 0.37, 0.30, 0.00, 0.17, 0.40, 0.00, 0.17, 0.23, 0.20, 0.00, 0.00, 0.20, 0.00, 0.00, + nroot = 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 0, 2, 2, 1, 3, 3, 3, 2, 1, 1, 0, 0, + rgl = 999.0, 100.0, 100.0, 100.0, 100.0, 65.0, 100.0, 100.0, 100.0, 65.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 100.0, 30.0, 999.0, 100.0, 100.0, 100.0, 100.0, 999.0, 100.0, 999.0, 999.0, + rs = 200.0, 40.0, 40.0, 40.0, 40.0, 70.0, 40.0, 300.0, 170.0, 70.0, 100.0, 150.0, 150.0, 125.0, 125.0, 100.0, 40.0, 100.0, 999.0, 150.0, 150.0, 150.0, 200.0, 999.0, 40.0, 999.0, 999.0, + hs = 999.0, 36.25, 36.25, 36.25, 36.25, 44.14, 36.35, 42.00, 39.18, 54.53, 54.53, 47.35, 41.69, 47.35, 51.93, 51.75, 60.00, 51.93, 999.0, 42.00, 42.00, 42.00, 42.00, 999.0, 36.25, 999.0, 999.0, + topt = 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, + rsmax = 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., + rtovrc = 2.e-8,2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, + rswoodc= 3.e-10,3.e-10,3.e-10,3.e-10,3.e-10,3.e-10,3.e-10,3.e-10,3.e-10,3.e-10,3.e-10,3.e-10,3.e-10,3.e-10,3.e-10,3.e-10,3.e-10,3.e-10,3.e-10,3.e-10,3.e-10,3.e-10,3.e-10,3.e-10,3.e-10,3.e-10,3.e-10, + bf = 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, + wstrc = 100.0,100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, + laimin = 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, + xsamin = 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, + +! monthly values, one row for each month: + sai_jan = 0.0, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.2, 0.2, 0.3, 0.4, 0.3, 0.5, 0.4, 0.4, 0.0, 0.2, 0.3, 0.0, 0.1, 0.2, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, + sai_feb = 0.0, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.2, 0.2, 0.3, 0.4, 0.3, 0.5, 0.4, 0.4, 0.0, 0.2, 0.3, 0.0, 0.1, 0.2, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, + sai_mar = 0.0, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.2, 0.2, 0.3, 0.4, 0.3, 0.5, 0.4, 0.4, 0.0, 0.2, 0.3, 0.0, 0.1, 0.2, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, + sai_apr = 0.0, 0.3, 0.3, 0.3, 0.3, 0.3, 0.3, 0.2, 0.2, 0.3, 0.4, 0.4, 0.5, 0.3, 0.4, 0.0, 0.2, 0.3, 0.0, 0.1, 0.2, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, + sai_may = 0.0, 0.2, 0.2, 0.2, 0.3, 0.3, 0.3, 0.2, 0.2, 0.3, 0.4, 0.4, 0.5, 0.4, 0.4, 0.0, 0.3, 0.3, 0.0, 0.1, 0.2, 0.1, 0.0, 0.0, 0.0, 0.0, 0.0, + sai_jun = 0.0, 0.3, 0.3, 0.3, 0.4, 0.4, 0.4, 0.2, 0.3, 0.4, 0.4, 0.7, 0.5, 0.5, 0.4, 0.0, 0.4, 0.4, 0.0, 0.2, 0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, + sai_jul = 0.0, 0.4, 0.4, 0.4, 0.6, 0.6, 0.8, 0.4, 0.6, 0.8, 0.9, 1.3, 0.5, 0.5, 0.7, 0.0, 0.6, 0.6, 0.0, 0.4, 0.4, 0.4, 0.0, 0.0, 0.0, 0.0, 0.0, + sai_aug = 0.0, 0.5, 0.5, 0.5, 0.9, 0.9, 1.3, 0.6, 0.9, 1.2, 1.2, 1.2, 0.5, 0.6, 0.8, 0.0, 0.9, 0.9, 0.0, 0.6, 0.6, 0.6, 0.0, 0.0, 0.0, 0.0, 0.0, + sai_sep = 0.0, 0.4, 0.4, 0.4, 0.7, 1.0, 1.1, 0.8, 1.0, 1.3, 1.6, 1.0, 0.5, 0.6, 1.0, 0.0, 0.7, 1.0, 0.0, 0.7, 0.8, 0.7, 0.0, 0.0, 0.0, 0.0, 0.0, + sai_oct = 0.0, 0.3, 0.3, 0.3, 0.3, 0.8, 0.4, 0.7, 0.6, 0.7, 1.4, 0.8, 0.5, 0.7, 1.0, 0.0, 0.3, 0.8, 0.0, 0.5, 0.7, 0.5, 0.0, 0.0, 0.0, 0.0, 0.0, + sai_nov = 0.0, 0.3, 0.3, 0.3, 0.3, 0.4, 0.4, 0.3, 0.3, 0.4, 0.6, 0.6, 0.5, 0.6, 0.5, 0.0, 0.3, 0.4, 0.0, 0.3, 0.3, 0.3, 0.0, 0.0, 0.0, 0.0, 0.0, + sai_dec = 0.0, 0.3, 0.3, 0.3, 0.3, 0.3, 0.4, 0.2, 0.3, 0.4, 0.4, 0.5, 0.5, 0.5, 0.4, 0.0, 0.3, 0.4, 0.0, 0.2, 0.2, 0.2, 0.0, 0.0, 0.0, 0.0, 0.0, + + lai_jan = 0.0, 0.0, 0.0, 0.0, 0.2, 0.0, 0.4, 0.0, 0.2, 0.3, 0.0, 0.0, 4.5, 4.0, 2.0, 0.0, 0.2, 0.2, 0.0, 0.2, 1.0, 0.6, 0.0, 0.0, 0.0, 0.0, 0.0, + lai_feb = 0.0, 0.0, 0.0, 0.0, 0.3, 0.0, 0.5, 0.0, 0.3, 0.3, 0.0, 0.0, 4.5, 4.0, 2.0, 0.0, 0.3, 0.3, 0.0, 0.3, 1.0, 0.6, 0.0, 0.0, 0.0, 0.0, 0.0, + lai_mar = 0.0, 0.0, 0.0, 0.0, 0.3, 0.2, 0.6, 0.2, 0.4, 0.5, 0.3, 0.0, 4.5, 4.0, 2.2, 0.0, 0.3, 0.3, 0.0, 0.3, 1.1, 0.7, 0.0, 0.0, 0.0, 0.0, 0.0, + lai_apr = 0.0, 0.0, 0.0, 0.0, 0.4, 0.6, 0.7, 0.6, 0.7, 0.8, 1.2, 0.6, 4.5, 4.0, 2.6, 0.0, 0.4, 0.6, 0.0, 0.4, 1.3, 0.8, 0.0, 0.0, 0.0, 0.0, 0.0, + lai_may = 0.0, 1.0, 1.0, 1.0, 1.1, 2.0, 1.2, 1.5, 1.4, 1.8, 3.0, 1.2, 4.5, 4.0, 3.5, 0.0, 1.1, 2.0, 0.0, 0.6, 1.7, 1.2, 0.0, 0.0, 0.0, 0.0, 0.0, + lai_jun = 0.0, 2.0, 2.0, 2.0, 2.5, 3.3, 3.0, 2.3, 2.6, 3.6, 4.7, 2.0, 4.5, 4.0, 4.3, 0.0, 2.5, 3.3, 0.0, 1.5, 2.1, 1.8, 0.0, 0.0, 0.0, 0.0, 0.0, + lai_jul = 0.0, 3.0, 3.0, 3.0, 3.2, 3.7, 3.5, 2.3, 2.9, 3.8, 4.5, 2.6, 4.5, 4.0, 4.3, 0.0, 3.2, 3.7, 0.0, 1.7, 2.1, 1.8, 0.0, 0.0, 0.0, 0.0, 0.0, + lai_aug = 0.0, 3.0, 3.0, 3.0, 2.2, 3.2, 1.5, 1.7, 1.6, 2.1, 3.4, 1.7, 4.5, 4.0, 3.7, 0.0, 2.2, 3.2, 0.0, 0.8, 1.8, 1.3, 0.0, 0.0, 0.0, 0.0, 0.0, + lai_sep = 0.0, 1.5, 1.5, 1.5, 1.1, 1.3, 0.7, 0.6, 0.7, 0.9, 1.2, 1.0, 4.5, 4.0, 2.6, 0.0, 1.1, 1.3, 0.0, 0.4, 1.3, 0.8, 0.0, 0.0, 0.0, 0.0, 0.0, + lai_oct = 0.0, 0.0, 0.0, 0.0, 0.3, 0.2, 0.6, 0.2, 0.4, 0.5, 0.3, 0.5, 4.5, 4.0, 2.2, 0.0, 0.3, 0.3, 0.0, 0.3, 1.1, 0.7, 0.0, 0.0, 0.0, 0.0, 0.0, + lai_nov = 0.0, 0.0, 0.0, 0.0, 0.3, 0.0, 0.5, 0.0, 0.3, 0.3, 0.0, 0.2, 4.5, 4.0, 2.0, 0.0, 0.3, 0.3, 0.0, 0.2, 1.0, 0.6, 0.0, 0.0, 0.0, 0.0, 0.0, + lai_dec = 0.0, 0.0, 0.0, 0.0, 0.2, 0.0, 0.4, 0.0, 0.2, 0.3, 0.0, 0.0, 4.5, 4.0, 2.0, 0.0, 0.2, 0.2, 0.0, 0.2, 1.0, 0.6, 0.0, 0.0, 0.0, 0.0, 0.0, + +! five types, one row for each type (bvoc currently not active). + eps1 = 41.87, 0.00, 0.00, 2.52, 0.04, 17.11, 0.02, 21.62, 0.11, 22.80, 46.86, 0.00, 0.00, 0.46, 30.98, 2.31, 1.63, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + eps2 = 0.98, 0.00, 0.00, 0.16, 0.09, 0.28, 0.05, 0.92, 0.22, 0.59, 0.38, 0.00, 0.00, 3.34, 0.96, 1.47, 1.07, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + eps3 = 1.82, 0.00, 0.00, 0.23, 0.05, 0.81, 0.03, 1.73, 1.26, 1.37, 1.84, 0.00, 0.00, 1.85, 1.84, 1.70, 1.21, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + eps4 = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + eps5 = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, +/ + +&noahmp_modis_veg_categories + veg_dataset_description = "modified igbp modis noah" + nveg = 20 +/ + +&noahmp_modis_parameters +! 1 'evergreen needleleaf forest' -> usgs 14 +! 2, 'evergreen broadleaf forest' -> usgs 13 +! 3, 'deciduous needleleaf forest' -> usgs 12 +! 4, 'deciduous broadleaf forest' -> usgs 11 +! 5, 'mixed forests' -> usgs 15 +! 6, 'closed shrublands' -> usgs 8 "shrubland" +! 7, 'open shrublands' -> usgs 9 "shrubland/grassland" +! 8, 'woody savannas' -> usgs 8 "shrubland" +! 9, 'savannas' -> usgs 10 +! 10, 'grasslands' -> usgs 7 +! 11 'permanent wetlands' -> avg of usgs 17 and 18 (herb. wooded wetland) +! 12, 'croplands' -> usgs 2 "dryland cropland" +! 13, 'urban and built-up' -> usgs 1 +! 14 'cropland/natural vegetation mosaic' -> usgs 5 "cropland/grassland" +! 15, 'snow and ice' -> usgs 24 +! 16, 'barren or sparsely vegetated' -> usgs 19 +! 17, 'water' -> usgs 16 +! 18, 'wooded tundra' -> usgs 21 +! 19, 'mixed tundra' -> usgs 22 +! 20, 'barren tundra' -> usgs 23 + + isurban = 13 + iswater = 17 + isbarren = 16 + isice = 15 + iscrop = 12 + eblforest = 2 + natural = 14 + lcz_1 = 31 + lcz_2 = 32 + lcz_3 = 33 + lcz_4 = 34 + lcz_5 = 35 + lcz_6 = 36 + lcz_7 = 37 + lcz_8 = 38 + lcz_9 = 39 + lcz_10 = 40 + lcz_11 = 41 + !--------------------------------------------------------------------------------------------------------------------------------------------------------------------- + ! 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 + !--------------------------------------------------------------------------------------------------------------------------------------------------------------------- + ch2op = 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, + dleaf = 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, 0.04, + z0mvt = 1.00, 1.50, 0.75, 0.90, 0.85, 0.20, 0.10, 0.90, 0.60, 0.20, 0.30, 0.25, 1.00, 0.25, 0.00, 0.015, 0.00, 0.30, 0.10, 0.05, + hvt = 20.0, 20.0, 18.0, 16.0, 16.0, 1.10, 1.10, 13.0, 10.0, 1.00, 5.00, 2.00, 15.0, 1.50, 0.00, 0.00, 0.00, 4.00, 2.00, 0.50, + hvb = 8.50, 8.00, 7.00, 11.5, 10.0, 0.10, 0.10, 0.10, 0.10, 0.05, 0.10, 0.10, 1.00, 0.10, 0.00, 0.00, 0.00, 0.30, 0.20, 0.10, + z0mhvt= 0.0545, 0.055, 0.047, 0.050, 0.050, 0.182, 0.0545, 0.046, 0.050, 0.120, 0.060, 0.075, 0.067, 0.093, 0.000, 0.000, 0.000, 0.075, 0.100, 0.060, + den = 0.28, 0.02, 0.28, 0.10, 0.10, 10.0, 10.0, 10.0, 0.02, 100., 5.05, 25.0, 0.01, 25.0, 0.00, 0.01, 0.01, 1.00, 1.00, 1.00, + rc = 1.20, 3.60, 1.20, 1.40, 1.40, 0.12, 0.12, 0.12, 3.00, 0.03, 0.75, 0.08, 1.00, 0.08, 0.00, 0.01, 0.01, 0.30, 0.30, 0.30, +!mfsno = 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, 2.50, +! c. he 12/17/2020: optimized mfsno values dependent on land type based on evaluation with snotel swe and modis scf, surface albedo + mfsno = 1.00, 1.00, 1.00, 1.00, 1.00, 2.00, 2.00, 2.00, 2.00, 2.00, 3.00, 3.00, 4.00, 4.00, 2.50, 3.00, 3.00, 3.50, 3.50, 3.50, +!mfsno = 1.97, 1.97, 1.97, 1.97, 1.97, 1.97, 1.97, 1.97, 1.97, 1.97, 1.97, 1.97, 1.97, 1.97, 1.97, 1.97, 1.97, 1.97, 1.97, 1.97, +! c. he 12/17/2020: optimized snow cover factor (m) in scf formulation to replace original constant 2.5*z0,z0=0.002m, based on evaluation with snotel swe and modis scf, surface albedo +! scffac = 0.008, 0.008, 0.008, 0.008, 0.008, 0.016, 0.016, 0.020, 0.020, 0.020, 0.020, 0.014, 0.042, 0.026, 0.030, 0.016, 0.030, 0.030, 0.030, 0.030, + scffac = 0.005, 0.005, 0.005, 0.005, 0.005, 0.008, 0.008, 0.010, 0.010, 0.010, 0.010, 0.007, 0.021, 0.013, 0.015, 0.008, 0.015, 0.015, 0.015, 0.015, +! scffac = 0.059, 0.059, 0.059, 0.059, 0.059, 0.059, 0.059, 0.059, 0.059, 0.059, 0.059, 0.059, 0.059, 0.059, 0.059, 0.059, 0.059, 0.059, 0.059, 0.059, + cbiom = 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, 0.02, + + ! row 1: vis + ! row 2: near ir + rhol_vis=0.07, 0.10, 0.07, 0.10, 0.10, 0.07, 0.07, 0.07, 0.10, 0.11, 0.105, 0.11, 0.00, 0.11, 0.00, 0.00, 0.00, 0.10, 0.10, 0.10, + rhol_nir=0.35, 0.45, 0.35, 0.45, 0.45, 0.35, 0.35, 0.35, 0.45, 0.35, 0.515, 0.35, 0.00, 0.35, 0.00, 0.00, 0.00, 0.45, 0.45, 0.45, + + ! row 1: vis + ! row 2: near ir + rhos_vis=0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.16, 0.31, 0.26, 0.31, 0.00, 0.31, 0.00, 0.00, 0.00, 0.16, 0.16, 0.16, + rhos_nir=0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.39, 0.53, 0.485, 0.53, 0.00, 0.53, 0.00, 0.00, 0.00, 0.39, 0.39, 0.39, + + ! row 1: vis + ! row 2: near ir + taul_vis=0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.06, 0.05, 0.00, 0.05, 0.00, 0.00, 0.00, 0.05, 0.05, 0.05, + taul_nir=0.10, 0.25, 0.10, 0.25, 0.25, 0.10, 0.10, 0.10, 0.25, 0.34, 0.25, 0.34, 0.00, 0.34, 0.00, 0.00, 0.00, 0.25, 0.25, 0.25, + + ! row 1: vis + ! row 2: near ir + taus_vis=0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.120, 0.1105, 0.120, 0.000, 0.120, 0.000, 0.000, 0.000, 0.001, 0.001, 0.001, + taus_nir=0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.001, 0.250, 0.1905, 0.250, 0.000, 0.250, 0.000, 0.000, 0.000, 0.001, 0.001, 0.001, + + xl = 0.010, 0.10, 0.010, 0.250, 0.250, 0.010, 0.010, 0.010, 0.010, -0.30, -0.025, -0.30, 0.000, -0.30, 0.000, 0.000, 0.000, 0.250, 0.250, 0.250, +! make cwpvt vegetation dependent according to j. goudriaan, crop micrometeorology: a simulation study (simulation monographs), 1977). c. he, 12/17/2020 +! cwpvt = 0.18, 0.67, 0.18, 0.67, 0.29, 1.0, 2.0, 1.3, 1.0, 5.0, 1.17, 1.67, 1.67, 1.67, 0.18, 0.18, 0.18, 0.67, 1.0, 0.18, + cwpvt = 0.09, 0.335, 0.09, 0.335, 0.145, 0.5, 1.0, 0.65, 0.5, 2.5, 0.585, 0.835, 0.835, 0.835, 0.09, 0.09, 0.09, 0.335, 0.5, 0.09, + c3psn = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, + kc25 = 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, 30.0, + akc = 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, 2.1, + ko25 = 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, + ako = 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, 1.2, + avcmx = 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, 2.4, + aqe = 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, + + ltovrc= 0.5, 0.55, 0.2, 0.55, 0.5, 0.65, 0.65, 0.65, 0.65, 0.50, 1.4, 1.6, 0.0, 1.2, 0.0, 0.0, 0.0, 1.3, 1.4, 1.0, + dilefc= 1.20, 0.50, 1.80, 0.60, 0.80, 0.20, 0.20, 0.20, 0.50, 0.20, 0.4, 0.50, 0.00, 0.35, 0.00, 0.00, 0.00, 0.30, 0.40, 0.30, + dilefw= 0.20, 4.00, 0.20, 0.20, 0.20, 0.20, 0.20, 0.20, 0.50, 0.10, 0.2, 0.20, 0.00, 0.20, 0.00, 0.00, 0.00, 0.20, 0.20, 0.20, + rmf25 = 3.00, 0.65, 4.00, 3.00, 3.00, 0.26, 0.26, 0.26, 0.80, 1.80, 3.2, 1.00, 0.00, 1.45, 0.00, 0.00, 0.00, 3.00, 3.00, 3.00, + sla = 80, 80, 80, 80, 80, 60, 60, 60, 50, 60, 80, 80, 60, 80, 0, 0, 0, 80, 80, 80, + fragr = 0.10, 0.20, 0.10, 0.20, 0.10, 0.20, 0.20, 0.20, 0.20, 0.20, 0.1, 0.20, 0.00, 0.20, 0.00, 0.10, 0.00, 0.10, 0.10, 0.10, + tmin = 265, 273, 268, 273, 268, 273, 273, 273, 273, 273, 268, 273, 0, 273, 0, 0, 0, 268, 268, 268, + vcmx25= 50.0, 60.0, 60.0, 60.0, 55.0, 40.0, 40.0, 40.0, 40.0, 40.0, 50.0, 80.0, 0.00, 60.0, 0.00, 0.00, 0.00, 50.0, 50.0, 50.0, + tdlef = 278, 278, 268, 278, 268, 278, 278, 278, 278, 278, 268, 278, 278, 278, 0, 0, 0, 268, 268, 268, + bp = 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, 2.e3, 1.e15, 2.e3, 1.e15, 2.e3, 1.e15, 2.e3, 2.e3, 2.e3, + mp = 6., 9., 6., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., 9., + qe25 = 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.06, 0.00, 0.06, 0.00, 0.06, 0.00, 0.06, 0.06, 0.06, + rms25 = 0.90, 0.30, 0.64, 0.10, 0.80, 0.10, 0.10, 0.10, 0.32, 0.10, 0.10, 0.10, 0.00, 0.10, 0.00, 0.00, 0.00, 0.10, 0.10, 0.00, + rmr25 = 0.36, 0.05, 0.05, 0.01, 0.03, 0.00, 0.00, 0.00, 0.01, 1.20, 0.0, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 2.11, 2.11, 0.00, + arm = 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, 2.0, + folnmx= 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 1.5, 0.00, 1.5, 0.00, 1.5, 0.00, 1.5, 1.5, 1.5, + wdpool= 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 0.00, 0.5, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 1.00, 1.00, 0.00, + wrrat = 30.0, 30.0, 30.0, 30.0, 30.0, 3.00, 3.00, 3.00, 3.00, 0.00, 15.0, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 3.00, 3.00, 0.00, + mrp = 0.37, 0.23, 0.37, 0.40, 0.30, 0.19, 0.19, 0.19, 0.40, 0.17, 0.285, 0.23, 0.00, 0.23, 0.00, 0.00, 0.00, 0.23, 0.20, 0.00, + nroot = 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 2, 3, 1, 3, 1, 1, 0, 3, 3, 2, + rgl = 30.0, 30.0, 30.0, 30.0, 30.0, 100.0, 100.0, 100.0, 65.0, 100.0, 65.0, 100.0, 999.0, 100.0, 999.0, 999.0, 30.0, 100.0, 100.0, 100.0, + rs = 125.0, 150.0, 150.0, 100.0, 125.0, 300.0, 170.0, 300.0, 70.0, 40.0, 70.0, 40.0, 200.0, 40.0, 999.0, 999.0, 100.0, 150.0, 150.0, 200.0, + hs = 47.35, 41.69, 47.35, 54.53, 51.93, 42.00, 39.18, 42.00, 54.53, 36.35, 55.97, 36.25, 999.0, 36.25, 999.0, 999.0, 51.75, 42.00, 42.00, 42.00, + topt = 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, 298.0, + rsmax = 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., 5000., + rtovrc = 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, 2.e-8, + rswoodc= 3.e-10,3.e-10,3.e-10, 3.e-10, 3.e-10, 3.e-10, 3.e-10, 3.e-10, 3.e-10, 3.e-10, 3.e-10, 3.e-10, 3.e-10, 3.e-10, 3.e-10, 3.e-10, 3.e-10, 3.e-10, 3.e-10, 3.e-10, + bf = 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, + wstrc = 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, 100.0, + laimin = 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, + xsamin = 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, + +! monthly values, one row for each month: + sai_jan = 0.4, 0.5, 0.3, 0.4, 0.4, 0.3, 0.2, 0.4, 0.3, 0.3, 0.3, 0.3, 0.0, 0.3, 0.0, 0.0, 0.0, 0.2, 0.1, 0.0, + sai_feb = 0.4, 0.5, 0.3, 0.4, 0.4, 0.3, 0.2, 0.4, 0.3, 0.3, 0.3, 0.3, 0.0, 0.3, 0.0, 0.0, 0.0, 0.2, 0.1, 0.0, + sai_mar = 0.4, 0.5, 0.3, 0.4, 0.4, 0.3, 0.2, 0.4, 0.3, 0.3, 0.3, 0.3, 0.0, 0.3, 0.0, 0.0, 0.0, 0.2, 0.1, 0.0, + sai_apr = 0.3, 0.5, 0.4, 0.4, 0.4, 0.3, 0.2, 0.4, 0.3, 0.3, 0.3, 0.3, 0.0, 0.3, 0.0, 0.0, 0.0, 0.2, 0.1, 0.0, + sai_may = 0.4, 0.5, 0.4, 0.4, 0.4, 0.3, 0.2, 0.4, 0.3, 0.3, 0.3, 0.3, 0.0, 0.3, 0.0, 0.0, 0.0, 0.2, 0.1, 0.0, + sai_jun = 0.5, 0.5, 0.7, 0.4, 0.4, 0.3, 0.2, 0.4, 0.4, 0.4, 0.4, 0.3, 0.0, 0.4, 0.0, 0.0, 0.0, 0.2, 0.2, 0.0, + sai_jul = 0.5, 0.5, 1.3, 0.9, 0.7, 0.6, 0.4, 0.7, 0.8, 0.8, 0.6, 0.4, 0.0, 0.6, 0.0, 0.0, 0.0, 0.4, 0.4, 0.0, + sai_aug = 0.6, 0.5, 1.2, 1.2, 0.8, 0.9, 0.6, 1.2, 1.2, 1.3, 0.9, 0.5, 0.0, 0.9, 0.0, 0.0, 0.0, 0.6, 0.6, 0.0, + sai_sep = 0.6, 0.5, 1.0, 1.6, 1.0, 1.2, 0.8, 1.4, 1.3, 1.1, 0.9, 0.4, 0.0, 0.7, 0.0, 0.0, 0.0, 0.8, 0.7, 0.0, + sai_oct = 0.7, 0.5, 0.8, 1.4, 1.0, 0.9, 0.7, 1.1, 0.7, 0.4, 0.6, 0.3, 0.0, 0.3, 0.0, 0.0, 0.0, 0.7, 0.5, 0.0, + sai_nov = 0.6, 0.5, 0.6, 0.6, 0.5, 0.4, 0.3, 0.5, 0.4, 0.4, 0.4, 0.3, 0.0, 0.3, 0.0, 0.0, 0.0, 0.3, 0.3, 0.0, + sai_dec = 0.5, 0.5, 0.5, 0.4, 0.4, 0.3, 0.2, 0.4, 0.4, 0.4, 0.3, 0.3, 0.0, 0.3, 0.0, 0.0, 0.0, 0.2, 0.2, 0.0, + + lai_jan = 4.0, 4.5, 0.0, 0.0, 2.0, 0.0, 0.0, 0.2, 0.3, 0.4, 0.2, 0.0, 0.0, 0.2, 0.0, 0.0, 0.0, 1.0, 0.6, 0.0, + lai_feb = 4.0, 4.5, 0.0, 0.0, 2.0, 0.0, 0.0, 0.2, 0.3, 0.5, 0.3, 0.0, 0.0, 0.3, 0.0, 0.0, 0.0, 1.0, 0.6, 0.0, + lai_mar = 4.0, 4.5, 0.0, 0.3, 2.2, 0.3, 0.2, 0.4, 0.5, 0.6, 0.3, 0.0, 0.0, 0.3, 0.0, 0.0, 0.0, 1.1, 0.7, 0.0, + lai_apr = 4.0, 4.5, 0.6, 1.2, 2.6, 0.9, 0.6, 1.0, 0.8, 0.7, 0.5, 0.0, 0.0, 0.4, 0.0, 0.0, 0.0, 1.3, 0.8, 0.0, + lai_may = 4.0, 4.5, 1.2, 3.0, 3.5, 2.2, 1.5, 2.4, 1.8, 1.2, 1.5, 1.0, 0.0, 1.1, 0.0, 0.0, 0.0, 1.7, 1.2, 0.0, + lai_jun = 4.0, 4.5, 2.0, 4.7, 4.3, 3.5, 2.3, 4.1, 3.6, 3.0, 2.9, 2.0, 0.0, 2.5, 0.0, 0.0, 0.0, 2.1, 1.8, 0.0, + lai_jul = 4.0, 4.5, 2.6, 4.5, 4.3, 3.5, 2.3, 4.1, 3.8, 3.5, 3.5, 3.0, 0.0, 3.2, 0.0, 0.0, 0.0, 2.1, 1.8, 0.0, + lai_aug = 4.0, 4.5, 1.7, 3.4, 3.7, 2.5, 1.7, 2.7, 2.1, 1.5, 2.7, 3.0, 0.0, 2.2, 0.0, 0.0, 0.0, 1.8, 1.3, 0.0, + lai_sep = 4.0, 4.5, 1.0, 1.2, 2.6, 0.9, 0.6, 1.0, 0.9, 0.7, 1.2, 1.5, 0.0, 1.1, 0.0, 0.0, 0.0, 1.3, 0.8, 0.0, + lai_oct = 4.0, 4.5, 0.5, 0.3, 2.2, 0.3, 0.2, 0.4, 0.5, 0.6, 0.3, 0.0, 0.0, 0.3, 0.0, 0.0, 0.0, 1.1, 0.7, 0.0, + lai_nov = 4.0, 4.5, 0.2, 0.0, 2.0, 0.0, 0.0, 0.2, 0.3, 0.5, 0.3, 0.0, 0.0, 0.3, 0.0, 0.0, 0.0, 1.0, 0.6, 0.0, + lai_dec = 4.0, 4.5, 0.0, 0.0, 2.0, 0.0, 0.0, 0.2, 0.3, 0.4, 0.2, 0.0, 0.0, 0.2, 0.0, 0.0, 0.0, 1.0, 0.6, 0.0, + +! five types, one row for each type (bvoc currently not active). + eps1 = 0.46, 0.00, 0.00, 46.86, 30.98, 21.62, 0.11, 21.62, 22.80, 0.02, 0.815, 0.00, 41.87, 0.04, 0.0, 0.0, 2.31, 0.0, 0.0, 0.0, + eps2 = 3.34, 0.00, 0.00, 0.38, 0.96, 0.92, 0.22, 0.92, 0.59, 0.05, 0.535, 0.00, 0.98, 0.09, 0.0, 0.0, 1.47, 0.0, 0.0, 0.0, + eps3 = 1.85, 0.00, 0.00, 1.84, 1.84, 1.73, 1.26, 1.73, 1.37, 0.03, 0.605, 0.00, 1.82, 0.05, 0.0, 0.0, 1.70, 0.0, 0.0, 0.0, + eps4 = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + eps5 = 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, + +/ + +&noahmp_rad_parameters + !-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + ! 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 soil color index for soil albedo + !-------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + albsat_vis = 0.21, 0.20, 0.18, 0.17, 0.16, 0.15, 0.14, 0.13, 0.13, 0.12, 0.11, 0.10, 0.10, 0.09, 0.08, 0.08, 0.08, 0.07, 0.07, 0.06 ! saturated soil albedos + albsat_nir = 0.42, 0.40, 0.36, 0.34, 0.32, 0.30, 0.28, 0.26, 0.26, 0.24, 0.22, 0.20, 0.20, 0.18, 0.16, 0.16, 0.16, 0.14, 0.14, 0.13 ! saturated soil albedos + albdry_vis = 0.31, 0.30, 0.28, 0.27, 0.26, 0.24, 0.23, 0.22, 0.22, 0.22, 0.20, 0.19, 0.20, 0.18, 0.16, 0.16, 0.16, 0.14, 0.14, 0.13 ! dry soil albedos + albdry_nir = 0.52, 0.50, 0.46, 0.44, 0.42, 0.40, 0.38, 0.37, 0.36, 0.34, 0.32, 0.30, 0.30, 0.28, 0.27, 0.27, 0.27, 0.26, 0.25, 0.25 ! dry soil albedos + albice = 0.80, 0.55 ! albedo land ice: 1=vis, 2=nir + alblak = 0.60, 0.40 ! albedo frozen lakes: 1=vis, 2=nir + omegas = 0.8 , 0.4 ! two-stream parameter omega for snow + betads = 0.5 ! two-stream parameter betad for snow + betais = 0.5 ! two-stream parameter betai for snow + eg = 0.97, 0.98 ! emissivity soil surface 1-soil;2-lake + eice = 0.98 ! emissivity ice surface +/ + +&noahmp_global_parameters + +! atmospheric constituants + + co2 = 395.e-06 !co2 partial pressure + o2 = 0.209 !o2 partial pressure + +! runoff parameters used for simtop and simgm: + + timean = 10.5 !gridcell mean topgraphic index (global mean) + fsatmx = 0.38 !maximum surface saturated fraction (global mean) + +! adjustable parameters for snow processes + + z0sno = 0.002 !snow surface roughness length (m) (0.002) + ssi = 0.03 !liquid water holding capacity for snowpack (m3/m3) (0.03) + snow_ret_fac = 5.e-5 !snowpack water release timescale factor (1/s) + snow_emis = 0.95 !snow emissivity (bring from hard-coded value of 1.0 to here) + swemx = 1.00 !new snow mass to fully cover old snow (mm) + !equivalent to 10mm depth (density = 100 kg/m3) + tau0 = 1.e6 !tau0 from yang97 eqn. 10a + grain_growth = 5000. !growth from vapor diffusion yang97 eqn. 10b + extra_growth = 10. !extra growth near freezing yang97 eqn. 10c + dirt_soot = 0.3 !dirt and soot term yang97 eqn. 10d + bats_cosz = 2.0 !zenith angle snow albedo adjustment; b in yang97 eqn. 15 + bats_vis_new = 0.95 !new snow visible albedo + bats_nir_new = 0.65 !new snow nir albedo + bats_vis_age = 0.2 !age factor for diffuse visible snow albedo yang97 eqn. 17 + bats_nir_age = 0.5 !age factor for diffuse nir snow albedo yang97 eqn. 18 + bats_vis_dir = 0.4 !cosz factor for direct visible snow albedo yang97 eqn. 15 + bats_nir_dir = 0.4 !cosz factor for direct nir snow albedo yang97 eqn. 16 + rsurf_snow = 50.0 !surface resistence for snow [s/m] + rsurf_exp = 5.0 !exponent in the shape parameter for soil resistance option 1 + c2_snowcompact = 21.e-3 !overburden snow compaction parameter (m3/kg) cenlin + c3_snowcompact = 2.5e-6 !snow desctructive metamorphism compaction parameter1 [1/s] cenlin + c4_snowcompact = 0.04 !snow desctructive metamorphism compaction parameter2 [1/k] cenlin + c5_snowcompact = 2.0 !snow desctructive metamorphism compaction parameter3 cenlin + dm_snowcompact = 100.0 !upper limit on destructive metamorphism compaction [kg/m3] cenlin + eta0_snowcompact = 0.8e+6 !snow viscosity coefficient [kg-s/m2], anderson1979: 0.52e6~1.38e6 cenlin + snliqmaxfrac = 0.4 !maximum liquid water fraction in snow cenlin + swemaxgla = 5000.0 ! maximum swe allowed at glaciers (mm) cenlin + wslmax = 5000.0 ! maximum lake water storage (mm) cenlin + rous = 0.20 ! specific yield [-] for niu et al. 2007 groundwater scheme (optrunoffsubsurface=1) + cmic = 0.20 ! microprore content (0.0-1.0), 0.0: close to free drainage + snowden_max = 120.0 ! maximum fresh snowfall density (kg/m3) + class_alb_ref = 0.55 ! reference snow albedo in class scheme + class_sno_age = 3600.0 ! snow aging e-folding time (s) in class albedo scheme + class_alb_new = 0.84 ! fresh snow albedo in class scheme + psiwlt = -150.0 !metric potential for wilting point (m) + z0soil = 0.015 ! bare-soil roughness length (m) (i.e., under the canopy) + z0lake = 0.01 ! lake surface roughness length (m) +/ + +&noahmp_irrigation_parameters +irr_frac = 0.10 ! irrigation fraction +irr_har = 20 ! number of days before harvest date to stop irrigation +irr_lai = 0.50 ! minimum lai to trigger irrigation +irr_mad = 0.60 ! management allowable deficit (0-1) +filoss = 0.10 ! fraction of flood irrigation loss (0-1) +sprir_rate = 6.40 ! mm/h, sprinkler irrigation rate +micir_rate = 1.38 ! mm/h, micro irrigation rate +firtfac = 1.00 ! flood application rate factor +ir_rain = 1.00 ! maximum precipitation [mm/hr] to stop irrigation trigger +/ + +&noahmp_crop_parameters + + ! ncrop = 5 + ! 1: corn + ! 2: soybean + ! 3: sorghum + ! 4: rice + ! 5: winter wheat + +default_crop = 0 ! the default crop type(1-5); if zero, use generic dynamic vegetation + +!---------------------------------------------------------- +! 1 2 3 4 5 +!---------------------------------------------------------- + +pltday = 111, 131, 111, 111, 111, ! planting date +hsday = 300, 280, 300, 300, 300, ! harvest date +plantpop = 78.0, 78.0, 78.0, 78.0, 78.0, ! plant density [per ha] - used? +gddtbase = 10.0, 10.0, 10.0, 10.0, 10.0, ! base temperature for gdd accumulation [c] +gddtcut = 30.0, 30.0, 30.0, 30.0, 30.0, ! upper temperature for gdd accumulation [c] +gdds1 = 50.0, 60.0, 50.0, 50.0, 50.0, ! gdd from seeding to emergence +gdds2 = 625.0, 675.0, 718.0, 718.0, 718.0, ! gdd from seeding to initial vegetative +gdds3 = 933.0, 1183.0, 933.0, 933.0, 933.0, ! gdd from seeding to post vegetative +gdds4 = 1103.0, 1253.0, 1103.0, 1103.0, 1103.0, ! gdd from seeding to intial reproductive +gdds5 = 1555.0, 1605.0, 1555.0, 1555.0, 1555.0, ! gdd from seeding to pysical maturity +c3psni = 0.0, 1.0, 1.0, 1.0, 1.0, ! transfer crop-specific photosynthetic parameters +kc25i = 30.0, 30.0, 30.0, 30.0, 30.0, ! zhe zhang +akci = 2.1, 2.1, 2.1, 2.1, 2.1, ! 2020-02-05 +ko25i = 3.e4, 3.e4, 3.e4, 3.e4, 3.e4, ! +akoi = 1.2, 1.2, 1.2, 1.2, 1.2, ! +avcmxi = 2.4, 2.4, 2.4, 2.4, 2.4, ! +vcmx25i = 60.0, 80.0, 60.0, 60.0, 55.0, ! +bpi = 4.e4, 1.e4, 2.e3, 2.e3, 2.e3, ! +mpi = 4., 9., 6., 9., 9., ! +folnmxi = 1.5, 1.5, 1.5, 1.5, 1.5, ! foliage nitrogen concentration when f(n)=1 (%) +qe25i = 0.05, 0.06, 0.06, 0.06, 0.06, ! +aref = 7.0, 7.0, 7.0, 7.0, 7.0, ! reference maximum co2 assimilation rate +psnrf = 0.85, 0.85, 0.85, 0.85, 0.85, ! co2 assimilation reduction factor(0-1) (caused by non-modeling part,e.g.pest,weeds) +i2par = 0.5, 0.5, 0.5, 0.5, 0.5, ! fraction of incoming solar radiation to photosynthetically active radiation +tassim0 = 8.0, 8.0, 8.0, 8.0, 8.0, ! minimum temperature for co2 assimilation [c] +tassim1 = 18.0, 18.0, 18.0, 18.0, 18.0, ! co2 assimilation linearly increasing until temperature reaches t1 [c] +tassim2 = 30.0, 30.0, 30.0, 30.0, 30.0, ! co2 assmilation rate remain at aref until temperature reaches t2 [c] +k = 0.55, 0.55, 0.55, 0.55, 0.55, ! light extinction coefficient +epsi = 12.5, 12.5, 12.5, 12.5, 12.5, ! initial light use efficiency + +q10mr = 2.0, 2.0, 2.0, 2.0, 2.0, ! q10 for maintainance respiration +lefreez = 268, 268, 268, 268, 268, ! characteristic t for leaf freezing [k] + +dile_fc_s1 = 0.0, 0.0, 0.0, 0.0, 0.0, ! coeficient for temperature leaf stress death [1/s] +dile_fc_s2 = 0.0, 0.0, 0.0, 0.0, 0.0, ! one row for each of 8 stages +dile_fc_s3 = 0.0, 0.0, 0.0, 0.0, 0.0, +dile_fc_s4 = 0.0, 0.0, 0.0, 0.0, 0.0, +dile_fc_s5 = 0.5, 0.5, 0.5, 0.5, 0.5, +dile_fc_s6 = 0.5, 0.5, 0.5, 0.5, 0.5, +dile_fc_s7 = 0.0, 0.0, 0.0, 0.0, 0.0, +dile_fc_s8 = 0.0, 0.0, 0.0, 0.0, 0.0, + +dile_fw_s1 = 0.0, 0.0, 0.0, 0.0, 0.0, ! coeficient for water leaf stress death [1/s] +dile_fw_s2 = 0.0, 0.0, 0.0, 0.0, 0.0, ! one row for each of 8 stages +dile_fw_s3 = 0.0, 0.0, 0.0, 0.0, 0.0, +dile_fw_s4 = 0.0, 0.0, 0.0, 0.0, 0.0, +dile_fw_s5 = 0.2, 0.2, 0.2, 0.2, 0.2, +dile_fw_s6 = 0.2, 0.2, 0.2, 0.2, 0.2, +dile_fw_s7 = 0.0, 0.0, 0.0, 0.0, 0.0, +dile_fw_s8 = 0.0, 0.0, 0.0, 0.0, 0.0, + +fra_gr = 0.2, 0.2, 0.2, 0.2, 0.2, ! fraction of growth respiration + +lf_ovrc_s1 = 0.0, 0.0, 0.0, 0.0, 0.0, ! fraction of leaf turnover [1/s] +lf_ovrc_s2 = 0.0, 0.0, 0.0, 0.0, 0.0, ! one row for each of 8 stages +lf_ovrc_s3 = 0.0, 0.0, 0.0, 0.0, 0.0, +lf_ovrc_s4 = 0.0, 0.0, 0.0, 0.0, 0.0, +lf_ovrc_s5 = 0.2, 0.2, 0.48, 0.48, 0.48, +lf_ovrc_s6 = 0.3, 0.3, 0.48, 0.48, 0.48, +lf_ovrc_s7 = 0.0, 0.0, 0.0, 0.0, 0.0, +lf_ovrc_s8 = 0.0, 0.0, 0.0, 0.0, 0.0, + +st_ovrc_s1 = 0.0, 0.0, 0.0, 0.0, 0.0, ! fraction of stem turnover [1/s] +st_ovrc_s2 = 0.0, 0.0, 0.0, 0.0, 0.0, ! one row for each of 8 stages +st_ovrc_s3 = 0.0, 0.0, 0.0, 0.0, 0.0, +st_ovrc_s4 = 0.0, 0.0, 0.0, 0.0, 0.0, +st_ovrc_s5 = 0.2, 0.12, 0.12, 0.12, 0.12, +st_ovrc_s6 = 0.3, 0.06, 0.06, 0.06, 0.06, +st_ovrc_s7 = 0.0, 0.0, 0.0, 0.0, 0.0, +st_ovrc_s8 = 0.0, 0.0, 0.0, 0.0, 0.0, + +rt_ovrc_s1 = 0.0, 0.0, 0.0, 0.0, 0.0, ! fraction of root tunrover [1/s] +rt_ovrc_s2 = 0.0, 0.0, 0.0, 0.0, 0.0, ! one row for each of 8 stages +rt_ovrc_s3 = 0.0, 0.0, 0.0, 0.0, 0.0, +rt_ovrc_s4 = 0.0, 0.0, 0.0, 0.0, 0.0, +rt_ovrc_s5 = 0.12, 0.12, 0.12, 0.12, 0.12, +rt_ovrc_s6 = 0.06, 0.06, 0.06, 0.06, 0.06, +rt_ovrc_s7 = 0.0, 0.0, 0.0, 0.0, 0.0, +rt_ovrc_s8 = 0.0, 0.0, 0.0, 0.0, 0.0, + +lfmr25 = 0.8, 1.0, 1.0, 1.0, 1.0, ! leaf maintenance respiration at 25c [umol co2/m**2 /s] +stmr25 = 0.05, 0.05, 0.1, 0.1, 0.1, ! stem maintenance respiration at 25c [umol co2/kg bio/s] +rtmr25 = 0.05, 0.05, 0.0, 0.0, 0.0, ! root maintenance respiration at 25c [umol co2/kg bio/s] +grainmr25 = 0.0, 0.0, 0.1, 0.1, 0.1, ! grain maintenance respiration at 25c [umol co2/kg bio/s] + +lfpt_s1 = 0.0, 0.0, 0.0, 0.0, 0.0, ! fraction of carbohydrate flux to leaf +lfpt_s2 = 0.0, 0.0, 0.0, 0.0, 0.0, ! one row for each of 8 stages +lfpt_s3 = 0.36, 0.4, 0.4, 0.4, 0.4, +lfpt_s4 = 0.1, 0.2, 0.2, 0.2, 0.2, +lfpt_s5 = 0.0, 0.0, 0.0, 0.0, 0.0, +lfpt_s6 = 0.0, 0.0, 0.0, 0.0, 0.0, +lfpt_s7 = 0.0, 0.0, 0.0, 0.0, 0.0, +lfpt_s8 = 0.0, 0.0, 0.0, 0.0, 0.0, + +stpt_s1 = 0.0, 0.0, 0.0, 0.0, 0.0, ! fraction of carbohydrate flux to stem +stpt_s2 = 0.0, 0.0, 0.0, 0.0, 0.0, ! one row for each of 8 stages +stpt_s3 = 0.24, 0.2, 0.2, 0.2, 0.2, +stpt_s4 = 0.6, 0.5, 0.5, 0.5, 0.5, +stpt_s5 = 0.0, 0.0, 0.15, 0.15, 0.15, +stpt_s6 = 0.0, 0.0, 0.05, 0.05, 0.05, +stpt_s7 = 0.0, 0.0, 0.0, 0.0, 0.0, +stpt_s8 = 0.0, 0.0, 0.0, 0.0, 0.0, + +rtpt_s1 = 0.0, 0.0, 0.0, 0.0, 0.0, ! fraction of carbohydrate flux to root +rtpt_s2 = 0.0, 0.0, 0.0, 0.0, 0.0, ! one row for each of 8 stages +rtpt_s3 = 0.4, 0.4, 0.4, 0.4, 0.4, +rtpt_s4 = 0.3, 0.3, 0.3, 0.3, 0.3, +rtpt_s5 = 0.05, 0.05, 0.05, 0.05, 0.05, +rtpt_s6 = 0.0, 0.0, 0.05, 0.05, 0.05, +rtpt_s7 = 0.0, 0.0, 0.0, 0.0, 0.0, +rtpt_s8 = 0.0, 0.0, 0.0, 0.0, 0.0, + +grainpt_s1 = 0.0, 0.0, 0.0, 0.0, 0.0, ! fraction of carbohydrate flux to grain +grainpt_s2 = 0.0, 0.0, 0.0, 0.0, 0.0, ! one row for each of 8 stages +grainpt_s3 = 0.0, 0.0, 0.0, 0.0, 0.0, +grainpt_s4 = 0.0, 0.0, 0.0, 0.0, 0.0, +grainpt_s5 = 0.95, 0.95, 0.8, 0.8, 0.8, +grainpt_s6 = 1.0, 1.0, 0.9, 0.9, 0.9, +grainpt_s7 = 0.0, 0.0, 0.0, 0.0, 0.0, +grainpt_s8 = 0.0, 0.0, 0.0, 0.0, 0.0, + +lfct_s1 = 0.0, 0.0, 0.0, 0.0, 0.0, ! carbohydrate translocation +lfct_s2 = 0.0, 0.0, 0.0, 0.0, 0.0, +lfct_s3 = 0.0, 0.0, 0.4, 0.4, 0.4, +lfct_s4 = 0.0, 0.0, 0.3, 0.3, 0.3, +lfct_s5 = 0.0, 0.0, 0.05, 0.05, 0.05, +lfct_s6 = 0.0, 0.0, 0.05, 0.05, 0.05, +lfct_s7 = 0.0, 0.0, 0.0, 0.0, 0.0, +lfct_s8 = 0.0, 0.0, 0.0, 0.0, 0.0, + +stct_s1 = 0.0, 0.0, 0.0, 0.0, 0.0, ! carbohydrate translocation +stct_s2 = 0.0, 0.0, 0.0, 0.0, 0.0, +stct_s3 = 0.0, 0.0, 0.4, 0.4, 0.4, +stct_s4 = 0.0, 0.0, 0.3, 0.3, 0.3, +stct_s5 = 0.0, 0.0, 0.05, 0.05, 0.05, +stct_s6 = 0.0, 0.0, 0.05, 0.05, 0.05, +stct_s7 = 0.0, 0.0, 0.0, 0.0, 0.0, +stct_s8 = 0.0, 0.0, 0.0, 0.0, 0.0, + +rtct_s1 = 0.0, 0.0, 0.0, 0.0, 0.0, ! carbohydrate translocation +rtct_s2 = 0.0, 0.0, 0.0, 0.0, 0.0, +rtct_s3 = 0.0, 0.0, 0.4, 0.4, 0.4, +rtct_s4 = 0.0, 0.0, 0.3, 0.3, 0.3, +rtct_s5 = 0.0, 0.0, 0.05, 0.05, 0.05, +rtct_s6 = 0.0, 0.0, 0.05, 0.05, 0.05, +rtct_s7 = 0.0, 0.0, 0.0, 0.0, 0.0, +rtct_s8 = 0.0, 0.0, 0.0, 0.0, 0.0, + +bio2lai = 0.015, 0.030, 0.015, 0.015, 0.015, ! leaf are per living leaf biomass [m^2/kg] + +/ + +&noahmp_tiledrain_parameters +!-----------------------------------! +! for simple drainage model ! +!-----------------------------------! +nsoiltype = 19 ! num_soil_types +drain_layer_opt = 4 + ! 0 - from one specified layer by td_depth, + ! 1 - from layers 1 & 2, + ! 2 - from layer layers 1, 2, and 3 + ! 3 - from layer 2 and 3 + ! 4 - from layer layers 3, 4 + ! 5 - from all the four layers +!-------------------------------------------------------------------------------------------------------------------------------------------------------------------- ! +! 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ! +!-------------------------------------------------------------------------------------------------------------------------------------------------------------------- ! +tdsmc_fac = 0.90, 0.90, 0.90, 0.90, 0.90, 1.25, 0.90, 1.0, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90, 0.90 ! corresponds to number of soil types soilparam.tbl +td_depth = 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 ! depth of drain tube from the soil surface +td_dc = 20., 20., 20., 20., 20., 20., 20., 20., 20., 20., 20., 20., 20., 20., 20., 20., 20., 20., 20. ! drainage coefficient (mm d^-1) +!-------------------------------------------------------------------------------------------------------------------------------------------------------------------- ! +! +!-------------------------------------! +! for hooghoudt tile drain model ! +!-------------------------------------! +!-------------------------------------------------------------------------------------------------------------------------------------------------------------------- +td_dcoef = 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07 ! m d^-1, drainage coefficent +td_d = 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00 ! m, depth to impe layer from drain water level (d) +td_adepth = 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00, 2.00 ! m, actual depth of imp layer from land surface +td_radi = 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07, 0.07 ! m, effective radius of drains (ro) +td_spac = 60.0, 55.0, 45.0, 20.0, 25.0, 30.0, 40.0, 16.0, 18.0, 50.0, 15.0, 10.0, 35.0, 10.0, 60.0, 60.0, 10.0, 60.0, 60.0 ! m, distance between two drain tubes or tiles (l) +td_ddrain = 1.20, 1.20, 1.20, 1.20, 1.20, 1.20, 1.20, 1.20, 1.20, 1.20, 1.20, 1.20, 1.20, 1.20, 1.20, 1.20, 1.20, 1.20, 1.20 ! m, depth of drain +klat_fac = 1.30, 1.80, 2.10, 2.60, 2.90, 2.50, 2.30, 3.00, 2.70, 2.00, 3.10, 3.30, 2.50, 1.00, 1.00, 1.80, 4.00, 1.00, 1.30 ! multiplication factor to lateral hyd.cond +!-------------------------------------------------------------------------------------------------------------------------------------------------------------------- + +/ + +&noahmp_optional_parameters + + !------------------------------------------------------------------------------ + ! saxton and rawls 2006 pedo-transfer function coefficients + !------------------------------------------------------------------------------ + + sr2006_theta_1500t_a = -0.024 ! sand coefficient + sr2006_theta_1500t_b = 0.487 ! clay coefficient + sr2006_theta_1500t_c = 0.006 ! orgm coefficient + sr2006_theta_1500t_d = 0.005 ! sand*orgm coefficient + sr2006_theta_1500t_e = -0.013 ! clay*orgm coefficient + sr2006_theta_1500t_f = 0.068 ! sand*clay coefficient + sr2006_theta_1500t_g = 0.031 ! constant adjustment + + sr2006_theta_1500_a = 0.14 ! theta_1500t coefficient + sr2006_theta_1500_b = -0.02 ! constant adjustment + + sr2006_theta_33t_a = -0.251 ! sand coefficient + sr2006_theta_33t_b = 0.195 ! clay coefficient + sr2006_theta_33t_c = 0.011 ! orgm coefficient + sr2006_theta_33t_d = 0.006 ! sand*orgm coefficient + sr2006_theta_33t_e = -0.027 ! clay*orgm coefficient + sr2006_theta_33t_f = 0.452 ! sand*clay coefficient + sr2006_theta_33t_g = 0.299 ! constant adjustment + + sr2006_theta_33_a = 1.283 ! theta_33t*theta_33t coefficient + sr2006_theta_33_b = -0.374 ! theta_33t coefficient + sr2006_theta_33_c = -0.015 ! constant adjustment + + sr2006_theta_s33t_a = 0.278 ! sand coefficient + sr2006_theta_s33t_b = 0.034 ! clay coefficient + sr2006_theta_s33t_c = 0.022 ! orgm coefficient + sr2006_theta_s33t_d = -0.018 ! sand*orgm coefficient + sr2006_theta_s33t_e = -0.027 ! clay*orgm coefficient + sr2006_theta_s33t_f = -0.584 ! sand*clay coefficient + sr2006_theta_s33t_g = 0.078 ! constant adjustment + + sr2006_theta_s33_a = 0.636 ! theta_s33t coefficient + sr2006_theta_s33_b = -0.107 ! constant adjustment + + sr2006_psi_et_a = -21.67 ! sand coefficient + sr2006_psi_et_b = -27.93 ! clay coefficient + sr2006_psi_et_c = -81.97 ! theta_s33 coefficient + sr2006_psi_et_d = 71.12 ! sand*theta_s33 coefficient + sr2006_psi_et_e = 8.29 ! clay*theta_s33 coefficient + sr2006_psi_et_f = 14.05 ! sand*clay coefficient + sr2006_psi_et_g = 27.16 ! constant adjustment + + sr2006_psi_e_a = 0.02 ! psi_et*psi_et coefficient + sr2006_psi_e_b = -0.113 ! psi_et coefficient + sr2006_psi_e_c = -0.7 ! constant adjustment + + sr2006_smcmax_a = -0.097 ! sand adjustment + sr2006_smcmax_b = 0.043 ! constant adjustment + +/ + +&noahmp_general_parameters + !------------------------------------------------- + ! this part is originally from genparm.tbl + !------------------------------------------------- +slope_data = 0.1, 0.6, 1.0, 0.35, 0.55, 0.8, 0.63, 0.0, 0.0 ! slope factor for soil drainage (9 different slope types) +csoil_data = 2.00e+6 ! soil heat capacity [j m-3 k-1] +refdk_data = 2.0e-6 ! parameter in the surface runoff parameterization +refkdt_data = 3.0 ! parameter in the surface runoff parameterization +frzk_data = 0.15 ! frozen ground parameter +zbot_data = -8.0 ! depth [m] of lower boundary soil temperature +czil_data = 0.1 ! parameter used in the calculation of the roughness length for heat + +/ + +&noahmp_stas_soil_categories + sltype = "stas" ! "stas" or "stas_ruc" + slcats = 19 !num_soil_types +/ + +&noahmp_soil_stas_parameters +! 19 total soil types considered by noahmp +! 1: sand +! 2: loamy sand +! 3: sandy loam +! 4: silt loam +! 5: silt +! 6: loam +! 7: sandy clay loam +! 8: silty clay loam +! 9: clay loam +! 10: sandy clay +! 11: silty clay +! 12: clay +! 13: organic material +! 14: water +! 15: bedrock +! 16: other(land-ice) +! 17: playa +! 18: lava +! 19: white sand +!-------------------------------------------------------------------------------------------------------------------------------------------------------------------- ! +! soil type: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ! +!-------------------------------------------------------------------------------------------------------------------------------------------------------------------- ! + bb = 2.790, 4.260, 4.740, 5.330, 3.860, 5.250, 6.770, 8.720, 8.170, 10.730, 10.390, 11.550, 5.250, 0.000, 2.790, 4.260, 11.550, 2.790, 2.790 + drysmc = 0.010, 0.028, 0.047, 0.084, 0.061, 0.066, 0.069, 0.120, 0.103, 0.100, 0.126, 0.138, 0.066, 0.000, 0.006, 0.028, 0.030, 0.006, 0.010 + maxsmc = 0.339, 0.421, 0.434, 0.476, 0.484, 0.439, 0.404, 0.464, 0.465, 0.406, 0.468, 0.468, 0.439, 1.000, 0.200, 0.421, 0.468, 0.200, 0.339 + refsmc = 0.192, 0.283, 0.312, 0.360, 0.347, 0.329, 0.315, 0.387, 0.382, 0.338, 0.404, 0.412, 0.329, 0.000, 0.170, 0.283, 0.454, 0.170, 0.192 + satpsi = 0.069, 0.036, 0.141, 0.759, 0.955, 0.355, 0.135, 0.617, 0.263, 0.098, 0.324, 0.468, 0.355, 0.000, 0.069, 0.036, 0.468, 0.069, 0.069 + satdk = 4.66e-05, 1.41e-05, 5.23e-06, 2.81e-06, 2.18e-06, 3.38e-06, 4.45e-06, 2.03e-06, 2.45e-06, 7.22e-06, 1.34e-06, 9.74e-07, 3.38e-06, 0.00e+00, 1.41e-04, 1.41e-05, 9.74e-07, 1.41e-04, 4.66e-05 + satdw = 2.65e-05, 5.14e-06, 8.05e-06, 2.39e-05, 1.66e-05, 1.43e-05, 1.01e-05, 2.35e-05, 1.13e-05, 1.87e-05, 9.64e-06, 1.12e-05, 1.43e-05, 0.00e+00, 1.36e-04, 5.14e-06, 1.12e-05, 1.36e-04, 2.65e-05 + wltsmc = 0.010, 0.028, 0.047, 0.084, 0.061, 0.066, 0.069, 0.120, 0.103, 0.100, 0.126, 0.138, 0.066, 0.000, 0.006, 0.028, 0.030, 0.006, 0.010 + qtz = 0.920, 0.820, 0.600, 0.250, 0.100, 0.400, 0.600, 0.100, 0.350, 0.520, 0.100, 0.250, 0.050, 0.600, 0.070, 0.250, 0.600, 0.520, 0.920 + bvic = 0.050, 0.080, 0.090, 0.250, 0.150, 0.180, 0.200, 0.220, 0.230, 0.250, 0.280, 0.300, 0.260, 0.000, 1.000, 1.000, 1.000, 0.350, 0.150 + axaj = 0.009, 0.010, 0.009, 0.010, 0.012, 0.013, 0.014, 0.015, 0.016, 0.015, 0.016, 0.017, 0.012, 0.001, 0.017, 0.017, 0.017, 0.015, 0.009 + bxaj = 0.050, 0.080, 0.090, 0.250, 0.150, 0.180, 0.200, 0.220, 0.230, 0.250, 0.280, 0.300, 0.260, 0.000, 1.000, 1.000, 1.000, 0.350, 0.150 + xxaj = 0.050, 0.080, 0.090, 0.250, 0.150, 0.180, 0.200, 0.220, 0.230, 0.250, 0.280, 0.300, 0.260, 0.000, 1.000, 1.000, 1.000, 0.350, 0.150 + bdvic = 0.050, 0.080, 0.090, 0.250, 0.150, 0.180, 0.200, 0.220, 0.230, 0.250, 0.280, 0.300, 0.260, 0.000, 1.000, 1.000, 1.000, 0.350, 0.150 + bbvic = 1.000, 1.010, 1.020, 1.025, 1.000, 1.000, 1.032, 1.035, 1.040, 1.042, 1.045, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000 + gdvic = 0.050, 0.070, 0.130, 0.200, 0.170, 0.110, 0.260, 0.350, 0.260, 0.300, 0.380, 0.410, 0.500, 0.001, 0.010, 0.001, 0.001, 0.050, 0.020 + +/ + +&noahmp_soil_stas_ruc_parameters +! 19 total soil types considered by noahmp +! 1: sand +! 2: loamy sand +! 3: sandy loam +! 4: silt loam +! 5: silt +! 6: loam +! 7: sandy clay loam +! 8: silty clay loam +! 9: clay loam +! 10: sandy clay +! 11: silty clay +! 12: clay +! 13: organic material +! 14: water +! 15: bedrock +! 16: other(land-ice) +! 17: playa +! 18: lava +! 19: white sand +!-------------------------------------------------------------------------------------------------------------------------------------------------------------------- ! +! soil type: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 ! +!-------------------------------------------------------------------------------------------------------------------------------------------------------------------- ! + bb = 4.050, 4.380, 4.900, 5.300, 5.300, 5.390, 7.120, 7.750, 5.390, 10.400, 10.400, 11.400, 5.390, 0.000, 4.050, 4.900, 11.400, 4.050, 4.050 + drysmc = 0.002, 0.035, 0.041, 0.034, 0.034, 0.050, 0.068, 0.060, 0.050, 0.070, 0.070, 0.068, 0.027, 0.000, 0.004, 0.065, 0.030, 0.006, 0.010 + hc = 1.470, 1.410, 1.340, 1.270, 1.270, 1.210, 1.180, 1.320, 1.210, 1.180, 1.150, 1.090, 1.210, 4.180, 2.030, 2.100, 1.410, 1.410, 1.470 + maxsmc = 0.395, 0.410, 0.435, 0.485, 0.485, 0.451, 0.420, 0.477, 0.451, 0.426, 0.492, 0.482, 0.451, 1.000, 0.200, 0.435, 0.468, 0.200, 0.339 + refsmc = 0.174, 0.179, 0.249, 0.369, 0.369, 0.314, 0.299, 0.357, 0.314, 0.316, 0.409, 0.400, 0.314, 1.000, 0.100, 0.249, 0.454, 0.170, 0.236 + satpsi = 0.121, 0.090, 0.218, 0.786, 0.786, 0.478, 0.299, 0.356, 0.478, 0.153, 0.490, 0.405, 0.478, 0.000, 0.121, 0.218, 0.468, 0.069, 0.069 + satdk = 1.76e-04, 1.56e-04, 3.47e-05, 7.20e-06, 7.20e-06, 6.95e-06, 6.30e-06, 1.70e-06, 6.95e-06, 2.17e-06, 1.03e-06, 1.28e-06, 6.95e-06, 0.00e+00, 1.41e-04, 3.47e-05, 9.74e-07, 1.41e-04, 1.76e-04 + satdw = 6.08e-07, 5.14e-06, 8.05e-06, 2.39e-05, 2.39e-05, 1.43e-05, 9.90e-06, 2.37e-05, 1.43e-05, 1.87e-05, 9.64e-06, 1.12e-05, 1.43e-05, 0.00e+00, 1.36e-04, 5.14e-06, 1.12e-05, 1.36e-04, 6.08e-07 + wltsmc = 0.033, 0.055, 0.095, 0.143, 0.143, 0.137, 0.148, 0.170, 0.137, 0.158, 0.190, 0.198, 0.117, 0.000, 0.006, 0.114, 0.030, 0.006, 0.060 + qtz = 0.920, 0.820, 0.600, 0.250, 0.100, 0.400, 0.600, 0.100, 0.400, 0.520, 0.100, 0.250, 0.050, 0.000, 0.600, 0.050, 0.600, 0.520, 0.920 + bvic = 0.050, 0.080, 0.090, 0.100, 0.150, 0.180, 0.200, 0.220, 0.230, 0.250, 0.280, 0.300, 0.260, 0.000, 1.000, 1.000, 1.000, 0.350, 0.150 + axaj = 0.009, 0.010, 0.009, 0.010, 0.012, 0.013, 0.014, 0.015, 0.016, 0.015, 0.016, 0.017, 0.012, 0.001, 0.017, 0.017, 0.017, 0.015, 0.009 + bxaj = 0.050, 0.080, 0.090, 0.250, 0.150, 0.180, 0.200, 0.220, 0.230, 0.250, 0.280, 0.300, 0.260, 0.000, 1.000, 1.000, 1.000, 0.350, 0.150 + xxaj = 0.050, 0.080, 0.090, 0.250, 0.150, 0.180, 0.200, 0.220, 0.230, 0.250, 0.280, 0.300, 0.260, 0.000, 1.000, 1.000, 1.000, 0.350, 0.150 + bdvic = 0.050, 0.080, 0.090, 0.100, 0.150, 0.180, 0.200, 0.220, 0.230, 0.250, 0.280, 0.300, 0.260, 0.000, 1.000, 1.000, 1.000, 0.350, 0.150 + bbvic = 1.000, 1.010, 1.020, 1.025, 1.000, 1.000, 1.032, 1.035, 1.040, 1.042, 1.045, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000 + gdvic = 0.050, 0.070, 0.130, 0.200, 0.170, 0.110, 0.260, 0.350, 0.260, 0.300, 0.380, 0.410, 0.500, 0.001, 0.010, 0.001, 0.001, 0.050, 0.020 + +/ + diff --git a/sorc/test/parm/rpointer.atm b/sorc/test/parm/rpointer.atm new file mode 100644 index 00000000..b361b7ea --- /dev/null +++ b/sorc/test/parm/rpointer.atm @@ -0,0 +1 @@ +ufs.cpld.datm.r.2000-01-05-00000.nc diff --git a/sorc/test/parm/rpointer.cpl b/sorc/test/parm/rpointer.cpl new file mode 100644 index 00000000..2be827d9 --- /dev/null +++ b/sorc/test/parm/rpointer.cpl @@ -0,0 +1 @@ +./RESTART/ufs.cpld.cpl.r.2000-01-05-00000.nc diff --git a/sorc/test/parm/ufs.configure b/sorc/test/parm/ufs.configure index 3c21dd4e..e5b68e85 100644 --- a/sorc/test/parm/ufs.configure +++ b/sorc/test/parm/ufs.configure @@ -102,7 +102,7 @@ ALLCOMP_attributes:: ScalarFieldIdxGridNTile = 3 ScalarFieldIdxNextSwCday = 4 # required for data atmosphere configurations ScalarFieldName = cpl_scalars - start_type = startup + start_type = continue restart_dir = ./RESTART/ case_name = ufs.cpld restart_n = 1 @@ -112,7 +112,7 @@ ALLCOMP_attributes:: stop_n = 24 stop_option = nhours stop_ymd = -999 - read_restart = .false. + read_restart = .true. mediator_present = true orb_eccen = 1.e36 orb_iyear = 2000 diff --git a/sorc/test/run_ufs_datm_lnd.sh b/sorc/test/run_ufs_datm_lnd.sh index 2eb6c73e..8b695180 100755 --- a/sorc/test/run_ufs_datm_lnd.sh +++ b/sorc/test/run_ufs_datm_lnd.sh @@ -11,38 +11,11 @@ echo ${project_source_dir} # TEST_NAME=datm_cdeps_lnd_gswp3 -PATHRT=${project_source_dir}/ufs_model.fd/tests -FIXdir=${project_source_dir}/../fix +FIXlandda=${project_source_dir}/../fix source ${project_source_dir}/../parm/detect_platform.sh -if [[ "${PLATFORM}" == "hera" ]]; then - INPUTDATA_ROOT="/scratch2/NAGAPE/epic/UFS-WM_RT/NEMSfv3gfs/input-data-20240501" -elif [[ "${PLATFORM}" == "orion" ]] || [[ "${PLATFORM}" == "hercules" ]]; then - INPUTDATA_ROOT="/work/noaa/epic/UFS-WM_RT/NEMSfv3gfs/input-data-20240501" -else - echo "WARNING: input data path is not specified for this machine." - INPUTDATA_ROOT=${FIXdir} -fi -export MACHINE_ID=${PLATFORM} -export RT_COMPILER=${RT_COMPILER:-intel} -export CREATE_BASELINE=false -export skip_check_result=false -export RTVERBOSE=false -export delete_rundir=false -export WLCLK=30 ATOL="1e-7" - -source ${PATHRT}/rt_utils.sh -source ${PATHRT}/default_vars.sh -source ${PATHRT}/tests/$TEST_NAME -source ${PATHRT}/atparse.bash - -RTPWD=${RTPWD:-$FIXdir/test_base/${TEST_NAME}_${RT_COMPILER}} - -if [[ ! -d ${RTPWD} ]]; then - echo "Error: cannot find RTPWD, please check!" - exit 1 -fi +RES="96" # create test folder RUNDIR=${project_binary_dir}/test/${TEST_NAME} @@ -53,58 +26,70 @@ cd ${RUNDIR} # FV3 executable: cp ${project_binary_dir}/ufs_model.fd/src/ufs_model.fd-build/ufs_model ./ufs_model -#set multiple input files -for i in ${FV3_RUN:-fv3_run.IN} +# Set input files +cp -p ${project_source_dir}/test/parm/ufs.configure . +cp -p ${project_source_dir}/test/parm/noahmptable.tbl . +cp -p ${project_source_dir}/test/parm/fd_ufs.yaml . +cp -p ${project_source_dir}/test/parm/datm_in . +cp -p ${project_source_dir}/test/parm/datm.streams . +cp -p ${project_source_dir}/test/parm/data_table . +cp -p ${project_source_dir}/test/parm/diag_table . +cp -p ${project_source_dir}/test/parm/input.nml . +cp -p ${project_source_dir}/test/parm/model_configure . +cp -p ${project_source_dir}/test/parm/rpointer.atm . +cp -p ${project_source_dir}/test/parm/rpointer.cpl . + +# Set RESTART directory +mkdir -p RESTART +ln -nsf ${FIXlandda}/DATA_RESTART/ufs.cpld.cpl.r.2000-01-05-00000.nc RESTART/. +ln -nsf ${FIXlandda}/DATA_RESTART/ufs.cpld.datm.r.2000-01-05-00000.nc . +for itile in {1..6} do - atparse < ${PATHRT}/fv3_conf/${i} >> fv3_run + ln -nsf ${FIXlandda}/DATA_RESTART/ufs_land_restart.2000-01-05_00-00-00.tile${itile}.nc RESTART/ufs.cpld.lnd.out.2000-01-05-00000.tile${itile}.nc done -if [[ $DATM_CDEPS = 'true' ]] || [[ $FV3 = 'true' ]] || [[ $S2S = 'true' ]]; then - if [[ $HAFS = 'false' ]] || [[ $FV3 = 'true' && $HAFS = 'true' ]]; then - atparse < ${PATHRT}/parm/${INPUT_NML:-input.nml.IN} > input.nml - fi -fi +# Set INPUT directory +mkdir -p INPUT +cd INPUT -atparse < ${PATHRT}/parm/${MODEL_CONFIGURE:-model_configure.IN} > model_configure +for itile in {1..6} +do + ln -nsf ${FIXlandda}/FV3_fix_tiled/C${RES}/C${RES}.maximum_snow_albedo.tile${itile}.nc . + ln -nsf ${FIXlandda}/FV3_fix_tiled/C${RES}/C${RES}.slope_type.tile${itile}.nc . + ln -nsf ${FIXlandda}/FV3_fix_tiled/C${RES}/C${RES}.soil_type.tile${itile}.nc . + ln -nsf ${FIXlandda}/FV3_fix_tiled/C${RES}/C${RES}.soil_color.tile${itile}.nc . + ln -nsf ${FIXlandda}/FV3_fix_tiled/C${RES}/C${RES}.substrate_temperature.tile${itile}.nc . + ln -nsf ${FIXlandda}/FV3_fix_tiled/C${RES}/C${RES}.vegetation_greenness.tile${itile}.nc . + ln -nsf ${FIXlandda}/FV3_fix_tiled/C${RES}/C${RES}.vegetation_type.tile${itile}.nc . + ln -nsf ${FIXlandda}/FV3_fix_tiled/C${RES}/C${RES}_oro_data.tile${itile}.nc oro_data.tile${itile}.nc + ln -nsf ${FIXlandda}/FV3_fix_tiled/C${RES}/C${RES}_grid.tile${itile}.nc . +done -#compute_petbounds_and_tasks -#atparse < ${PATHRT}/parm/${UFS_CONFIGURE:-ufs.configure} > ufs.configure +ln -nsf ${FIXlandda}/FV3_fix_tiled/C${RES}/C${RES}_grid_spec.nc C${RES}_mosaic.nc +for itile in {1..6} +do + ln -nsf ${FIXlandda}/NOAHMP_IC/ufs-land_C${RES}_init_fields.tile${itile}.nc C${RES}.initial.tile${itile}.nc +done +cd - +# Set INPUT_DATM directory +mkdir -p INPUT_DATM +ln -nsf ${FIXlandda}/DATM_input_data/gswp3/* INPUT_DATM/. -cp -p ${project_source_dir}/test/parm/ufs.configure . NPROCS_FORECAST="13" - -# diag table -if [[ "Q${DIAG_TABLE:-}" != Q ]] ; then - atparse < ${PATHRT}/parm/diag_table/${DIAG_TABLE} > diag_table -fi -# Field table -if [[ "Q${FIELD_TABLE:-}" != Q ]] ; then - cp ${PATHRT}/parm/field_table/${FIELD_TABLE} field_table -fi - -# Field Dictionary -cp ${PATHRT}/parm/fd_ufs.yaml fd_ufs.yaml - -# Set up the run directory -source ./fv3_run - -if [[ $DATM_CDEPS = 'true' ]]; then - atparse < ${PATHRT}/parm/${DATM_IN_CONFIGURE:-datm_in} > datm_in - atparse < ${PATHRT}/parm/${DATM_STREAM_CONFIGURE:-datm.streams.IN} > datm.streams -fi - -# NoahMP table file -cp ${PATHRT}/parm/noahmptable.tbl noahmptable.tbl - # start runs +MPIRUN="${MPIRUN:-srun}" echo "Start ufs-weather-model run with ${MPIRUN}" ${MPIRUN} -n ${NPROCS_FORECAST} ./ufs_model # echo "Now check model output with ufs-wm baseline!" -for filename in ${LIST_FILES}; do - if [[ -f ${RUNDIR}/${filename} ]] ; then - echo "Baseline check with ${RTPWD}/${TEST_NAME}/${filename}" - ${project_source_dir}/test/compare.py ${RUNDIR}/${filename} ${RTPWD}/${filename} ${ATOL} - fi +path_fbase="${FIXlandda}/test_base/we2e_com/landda.20000105" +fn_out="ufs.cpld.lnd.out.2000-01-06-00000.tile" +fn_res="ufs_land_restart.2000-01-06_00-00-00.tile" + +# restart files +for itile in {1..6} +do + ${project_source_dir}/test/compare.py "${path_fbase}/RESTART/${fn_res}${itile}.nc" "${fn_out}${itile}.nc" ${ATOL} done + diff --git a/sorc/test/runtime_vars.sh b/sorc/test/runtime_vars.sh index 79423358..35b25a04 100755 --- a/sorc/test/runtime_vars.sh +++ b/sorc/test/runtime_vars.sh @@ -7,7 +7,7 @@ project_source_dir=$2 # Prepare runtime environement # set date -export CYMDH=2000010300 +export CYMDH=2000010500 export YY=`echo $CYMDH | cut -c1-4` export MM=`echo $CYMDH | cut -c5-6` export DD=`echo $CYMDH | cut -c7-8` @@ -36,13 +36,13 @@ export EXECDIR=${EXECDIR:-$project_binary_dir/bin} export FIXlandda=${FIXlandda:-"`dirname $project_source_dir`/fix"} # set IODA path -export IODA_BUILD_DIR=${IODA_BUILD_DIR:-"${JEDI_INSTALL}/build"} +export IODA_BUILD_DIR=${IODA_BUILD_DIR:-"${JEDI_PATH}/build"} export PYTHON_VERSION=`python -c 'import sys; version=sys.version_info[:3]; print("{0}.{1}".format(*version))'` export PYTHONPATH=$PYTHONPATH:${IODA_BUILD_DIR}/lib/python${PYTHON_VERSION}/pyioda:${IODA_BUILD_DIR}/lib/pyiodaconv # JEDI directories -export JEDI_EXECDIR=${JEDI_EXECDIR:-"${JEDI_INSTALL}/build/bin"} -export JEDI_STATICDIR=${JEDI_INSTALL}/jedi-bundle/fv3-jedi/test/Data +export JEDI_EXECDIR=${JEDI_EXECDIR:-"${JEDI_PATH}/build/bin"} +export JEDI_STATICDIR=${JEDI_PATH}/jedi-bundle/fv3-jedi/test/Data # set executables export MPIRUN=${MPIRUN:-`which mpiexec`} @@ -52,7 +52,7 @@ export PYTHON_EXEC=${PYTHON_EXEC:-`which python`} export RES=96 export atmos_forc=gswp3 export TPATH="$FIXlandda/FV3_fix_tiled/C${RES}/" -export TSTUB="oro_C${RES}.mx100" +export fn_orog="C${RES}_oro_data" export GFSv17=NO export OBS_TYPES=("GHCN") export DAtype=letkfoi_snow diff --git a/sorc/test/test_letkfoi_snowda.sh b/sorc/test/test_letkfoi_snowda.sh index 4f92a801..b61b01f7 100755 --- a/sorc/test/test_letkfoi_snowda.sh +++ b/sorc/test/test_letkfoi_snowda.sh @@ -10,7 +10,7 @@ source ${project_source_dir}/test/runtime_vars.sh ${project_binary_dir} ${projec # set extra paths OROG_PATH=$TPATH -OBSDIR="${FIXlandda}/DA" +OBSDIR="${FIXlandda}/DA_obs" # set executables JEDI_EXEC=${JEDI_EXEC:-$JEDI_EXECDIR/fv3jedi_letkf.x} @@ -38,7 +38,7 @@ do # GHCN are time-stamped at 18. If assimilating at 00, need to use previous day's obs, so that # obs are within DA window. [[ -e ${OBS_TYPES[$ii]}_${YY}${MP}${DP}${HP}.nc ]] && rm ${OBS_TYPES[$ii]}_${YY}${MP}${DP}${HP}.nc - obs_file=${OBSDIR}/snow_depth/${OBS_TYPES[$ii]}/data_proc/v3/${YY}/${OBS_TYPES[$ii],,}_snwd_ioda_${YY}${MP}${DP}.nc + obs_file=${OBSDIR}/${OBS_TYPES[$ii]}/${YY}/${OBS_TYPES[$ii],,}_snwd_ioda_${YY}${MP}${DP}${HP}.nc if [[ -e $obs_file ]]; then echo "${OBS_TYPES[$ii]} observations found: $obs_file" else @@ -63,8 +63,8 @@ settings="\ 'mp': !!str ${MP} 'dp': !!str ${DP} 'hp': !!str ${HP} - 'tstub': ${TSTUB} - 'tpath': ${TPATH} + 'fn_orog': C${RES}_oro_data + 'datapath': ${FIXlandda}/FV3_fix_tiled/C${RES} 'res': ${RES} 'resp1': ${RESP1} 'driver_obs_only': false @@ -83,5 +83,6 @@ ln -fs $JEDI_STATICDIR ./ cp $project_source_dir/../parm/jedi/gfs-land.yaml . # +MPIRUN="${MPIRUN:-srun}" echo "============================= calling ${JEDI_EXEC} with ${MPIRUN}" ${MPIRUN} -n $NPROC ${JEDI_EXEC} letkf_land.yaml diff --git a/sorc/ufs_model.fd b/sorc/ufs_model.fd index 2ccc5493..be4544ee 160000 --- a/sorc/ufs_model.fd +++ b/sorc/ufs_model.fd @@ -1 +1 @@ -Subproject commit 2ccc549348da37aac51ab44482174dff2bb2912d +Subproject commit be4544ee28f8fad7bc2cdb207dc62f89c4aa2bb2 diff --git a/ush/ghcn_snod2ioda.py b/ush/ghcn_snod2ioda.py new file mode 100755 index 00000000..11ea82a0 --- /dev/null +++ b/ush/ghcn_snod2ioda.py @@ -0,0 +1,269 @@ +#!/usr/bin/env python3 +# +# (C) Copyright 2021-2022 NOAA/NWS/NCEP/EMC +# +# This software is licensed under the terms of the Apache Licence Version 2.0 +# + +import os, sys +import argparse +import numpy as np +import pandas as pd +from datetime import datetime, timedelta +from dateutil.parser import parse + +jedi_path = os.environ.get('JEDI_PATH') +jedi_py_ver = os.environ.get('JEDI_PY_VER') +pyioda_conv_path = os.path.join(jedi_path, 'build/lib', jedi_py_ver) +print(f'''pyioda/pyiodaconv path: {pyioda_conv_path}''') +sys.path.append(pyioda_conv_path) + +import pyiodaconv.ioda_conv_engines as iconv +from collections import defaultdict, OrderedDict +from pyiodaconv.orddicts import DefaultOrderedDict +from pyiodaconv.def_jedi_utils import epoch, iso8601_string +from pyiodaconv.def_jedi_utils import record_time + +locationKeyList = [ + ("latitude", "float"), + ("longitude", "float"), + ("stationElevation", "float"), + ("dateTime", "long"), +] + +AttrData = { +} + +DimDict = { +} + +VarDims = { + 'totalSnowDepth': ['Location'], +} + +float_missing_value = iconv.get_default_fill_val(np.float32) +int_missing_value = iconv.get_default_fill_val(np.int32) +long_missing_value = iconv.get_default_fill_val(np.int64) + + +def get_epoch_time(adatetime): + + # take python datetime object and convert to seconds from epoch + time_offset = round((adatetime - epoch).total_seconds()) + + return time_offset + + +def assignValue(colrowValue, df400): + if colrowValue == '' or pd.isnull(colrowValue): + outList = float_missing_value + else: + ml = df400.loc[df400['ID'] == colrowValue, "DATA_VALUE"] + # check if the series is empty + if not ml.empty: + outList = ml.iloc[0] + else: + outList = float_missing_value + return outList + + +class ghcn(object): + + def __init__(self, filename, fixfile, date, mask): + self.filename = filename + self.fixfile = fixfile + self.date = date + self.mask = mask + self.varDict = defaultdict(lambda: defaultdict(dict)) + self.metaDict = defaultdict(lambda: defaultdict(dict)) + self.outdata = defaultdict(lambda: DefaultOrderedDict(OrderedDict)) + self.varAttrs = defaultdict(lambda: DefaultOrderedDict(OrderedDict)) + self._read() + + def _read(self): + + # set up variable names for IODA + iodavar = 'totalSnowDepth' + self.varDict[iodavar]['valKey'] = iodavar, iconv.OvalName() + self.varDict[iodavar]['errKey'] = iodavar, iconv.OerrName() + self.varDict[iodavar]['qcKey'] = iodavar, iconv.OqcName() + self.varAttrs[iodavar, iconv.OvalName()]['coordinates'] = 'longitude latitude' + self.varAttrs[iodavar, iconv.OerrName()]['coordinates'] = 'longitude latitude' + self.varAttrs[iodavar, iconv.OqcName()]['coordinates'] = 'longitude latitude' + self.varAttrs[iodavar, iconv.OvalName()]['units'] = 'mm' + self.varAttrs[iodavar, iconv.OerrName()]['units'] = 'mm' + + # read in the GHCN data csv file + cols = ["ID", "DATETIME", "ELEMENT", "DATA_VALUE", "M_FLAG", "Q_FLAG", "S_FLAG", "OBS_TIME"] + sub_cols = ["ID", "DATETIME", "ELEMENT", "DATA_VALUE"] + df30_list = [] + # Fix dtypeWarning with mixed types via set low_memory=False + df20all = pd.read_csv(self.filename, header=None, names=cols, low_memory=False) + df20 = df20all[sub_cols] + df20all = None + df30_list.append(df20) + df20 = None + + df30 = pd.concat(df30_list, ignore_index=True) + df30 = df30[df30["ELEMENT"] == "SNWD"] + df30["DATETIME"] = df30.apply(lambda row: parse(str(row["DATETIME"])).date(), axis=1) + + # select data which matches the Start date + startdate = self.date + valid_date = datetime.strptime(startdate, "%Y%m%d%H") + select_date = valid_date.strftime('%Y%m%d') + new_date = parse(select_date).date() + df30 = df30[df30["DATETIME"] == new_date] + + # Read in the GHCN station files + cols = ["ID", "LATITUDE", "LONGITUDE", "ELEVATION", "STATE", "NAME", "GSN_FLAG", "HCNCRN_FLAG", "WMO_ID"] + df10all = pd.read_csv(self.fixfile, header=None, sep='\r\n', engine='python') + df10all = df10all[0].str.split('\\s+', expand=True) + df10 = df10all.iloc[:, 0:4] + df10all = None + sub_cols = {0: "ID", 1: "LATITUDE", 2: "LONGITUDE", 3: "ELEVATION"} + df10 = df10.rename(columns=sub_cols) + df10 = df10.drop_duplicates(subset=["ID"]) + + # use stations list as the number of obs points + # if no data for a station and a given date, leave float_missing_value + num_obs = len(df10.index) + + # Initialzed data array + vals = np.full((num_obs), float_missing_value) + lats = np.full((num_obs), float_missing_value) + lons = np.full((num_obs), float_missing_value) + alts = np.full((num_obs), float_missing_value) + id_array = np.chararray((num_obs)) + id_array[:] = "UNKNOWN" + + lats = df10["LATITUDE"].values + lons = df10["LONGITUDE"].values + alts = df10["ELEVATION"].values + id_array = df10["ID"].values + + df100 = pd.DataFrame(data=id_array, columns=['ID']) + df100.assign(DATA_VALUE=float_missing_value) + df30Temp = df30.loc[df30["DATETIME"] == new_date] + df100["DATA_VALUE"] = df100.apply(lambda row: assignValue(row['ID'], df30Temp), axis=1) + df30Temp = None + + vals = df100["DATA_VALUE"].values + vals = vals.astype('float32') + lats = lats.astype('float32') + lons = lons.astype('float32') + alts = alts.astype('float32') + qflg = 0*vals.astype('int32') + errs = 0.0*vals + sites = np.empty_like(vals, dtype=object) + times = np.empty_like(vals, dtype='int64') + sites = id_array + + # use maskout options + if self.mask == "maskout": + + with np.errstate(invalid='ignore'): + mask = (vals >= 0.0) & (vals < float_missing_value) + vals = vals[mask] + errs = errs[mask] + qflg = qflg[mask] + lons = lons[mask] + lats = lats[mask] + alts = alts[mask] + sites = sites[mask] + times = times[mask] + + # get datetime from input + my_date = datetime.strptime(startdate, "%Y%m%d%H") + + ######################################################## + # Adjust time stamp to match with JEDI : CHJ + # JEDI: 18h + # cyc: HH + # adjust = ( 18h - HH ) * 3600 + ######################################################## + dt_adj_sec = (18-int(my_date.hour))*3600 + my_date_adj = my_date + timedelta(seconds=dt_adj_sec) + epoch_time = np.int64(get_epoch_time(my_date_adj)) + my_date_time_string = my_date_adj.isoformat() + "Z" + AttrData['date_time_string'] = my_date_time_string + print(f"my_date: {my_date}") + print(f"dt_adj_sec: {dt_adj_sec}") + print(f"my_date_adj: {my_date_adj}") + print(f"epoch_time: {epoch_time}") + print(f"date_time_string: {my_date_time_string}") + + # vals[vals >= 0.0] *= 0.001 # mm to meters + # errs[:] = 0.04 # error in meters + errs[:] = 40.0 # error in mm + times[:] = epoch_time + # add metadata variables + self.outdata[('dateTime', 'MetaData')] = times + self.outdata[('stationIdentification', 'MetaData')] = sites + self.outdata[('latitude', 'MetaData')] = lats + self.outdata[('longitude', 'MetaData')] = lons + self.outdata[('stationElevation', 'MetaData')] = alts + self.varAttrs[('stationElevation', 'MetaData')]['units'] = 'm' + self.varAttrs[('dateTime', 'MetaData')]['units'] = iso8601_string + self.varAttrs[('dateTime', 'MetaData')]['_FillValue'] = long_missing_value + + self.outdata[self.varDict[iodavar]['valKey']] = vals + self.outdata[self.varDict[iodavar]['errKey']] = errs + self.outdata[self.varDict[iodavar]['qcKey']] = qflg + + ######################################################## + # Add nlocs to global attributes : CHJ + ######################################################## +# DimDict['Location'] = len(self.outdata[('dateTime', 'MetaData')]) + nlocs = len(self.outdata[('dateTime', 'MetaData')]) + DimDict['Location'] = nlocs + AttrData['nlocs'] = nlocs + + +def main(): + + parser = argparse.ArgumentParser( + description=('Read GHCN snow depth file(s) and Converter' + ' of native csv format for observations of snow' + ' depth from GHCN to IODA netCDF format.') + ) + parser.add_argument('-i', '--input', + help="name of ghcn snow depth input file(s)", + type=str, required=True) + parser.add_argument('-f', '--fixfile', + help="name of ghcn station fixed file(s)", + type=str, required=True) + parser.add_argument('-o', '--output', + help="name of ioda output file", + type=str, required=True) + parser.add_argument('-d', '--date', + help="base date (YYYYMMDDHH)", type=str, required=True) + optional = parser.add_argument_group(title='optional arguments') + optional.add_argument( + '-m', '--mask', + help="maskout missing values: maskout/default, default=none", + type=str, required=True) + + args = parser.parse_args() + + # start timer + tic = record_time() + + # Read in the GHCN snow depth data + snod = ghcn(args.input, args.fixfile, args.date, args.mask) + + # report time + toc = record_time(tic=tic) + + # setup the IODA writer + writer = iconv.IodaWriter(args.output, locationKeyList, DimDict) + + # write all data out + writer.BuildIoda(snod.outdata, VarDims, snod.varAttrs, AttrData) + + # report time + toc = record_time(tic=tic) + + +if __name__ == '__main__': + main() diff --git a/ush/hofx_analysis_stats.py b/ush/hofx_analysis_stats.py index df7a30dd..96a8ae7f 100755 --- a/ush/hofx_analysis_stats.py +++ b/ush/hofx_analysis_stats.py @@ -27,17 +27,17 @@ def get_obs_stats(fdir, plottype): for fname in os.listdir(fdir): print("=== File Name:",fname) f=netCDF4.Dataset(fdir+'/'+fname) -# print("NETCDF:",f) + print("NETCDF:",f) obs=f.groups['ObsValue'].variables['totalSnowDepth'] -# print("ObsValue:",obs) + print("ObsValue:",obs) ombg=f.groups['ombg'].variables['totalSnowDepth'] -# print("OMBG:",ombg) + print("OMBG:",ombg) oman=f.groups['oman'].variables['totalSnowDepth'] -# print("OMAN:",oman) + print("OMAN:",oman) qc=f.groups['PreQC'].variables['totalSnowDepth'] -# print("PreQC:",qc) + print("PreQC:",qc) obstime=f.groups['MetaData'].variables['dateTime'] -# print("OBS_TIME:",obstime) + print("OBS_TIME:",obstime) if plottype=='histogram': ombg_=np.ma.masked_where(qc != 0, ombg) ombg_=np.ma.masked_where(ombg == 0, ombg_) @@ -64,12 +64,9 @@ def get_obs_stats(fdir, plottype): def plot_scatter(): print("===== PLOT: SCATTER =====") - if yaml_data['machine']=='hera': - cartopy.config['data_dir']='/scratch2/NAGAPE/epic/UFS_Land-DA_Dev/inputs/NaturalEarth' - elif yaml_data['machine']=='orion' or yaml_data['machine']=='hercules': - cartopy.config['data_dir']='/work/noaa/epic/UFS_Land-DA_Dev/inputs/NaturalEarth' - elif yaml_data['machine']=='singularity': - cartopy.config['data_dir']='SINGULARITY_WORKING_DIR/land-DA_workflow/fix/NaturalEarth' + + # Set the path to Natural Earth dataset + cartopy.config['data_dir']=yaml_data['cartopy_ne_path'] field_mean=float("{:.2f}".format(np.mean(np.absolute(field)))) field_std=float("{:.2f}".format(np.std(np.absolute(field)))) diff --git a/ush/plot_analysis_timehistory.py b/ush/plot_analysis_timehistory.py index 986c8ecd..178feaa8 100755 --- a/ush/plot_analysis_timehistory.py +++ b/ush/plot_analysis_timehistory.py @@ -71,7 +71,7 @@ def get_data_analysis(path_data,fn_data_anal_prefix,fn_data_anal_suffix,nprocs_a files.append(entry.path) files.sort() - print("Files=",files) +# print("Files=",files) nobs_qc_prefix = "QC SnowDepthGHCN totalSnowDepth" wtime_oops_prefix = "OOPS_STATS util::Timers::Total" @@ -195,7 +195,9 @@ def get_data_forecast(path_data,fn_data_fcst_prefix,fn_data_fcst_suffix,nprocs_f fp_data_fcst_prefix = os.path.join(path_data,fn_data_fcst_prefix) files = [] for entry in os.scandir(path_data): - if entry.is_file() and entry.name.startswith(fn_data_fcst_prefix): + if entry.is_file() and \ + entry.name.startswith(fn_data_fcst_prefix) and \ + entry.name.endswith(fn_data_fcst_suffix): files.append(entry.path) files.sort() diff --git a/ush/plot_comp_sfc_data.py b/ush/plot_comp_sfc_data.py new file mode 100755 index 00000000..6fa5a562 --- /dev/null +++ b/ush/plot_comp_sfc_data.py @@ -0,0 +1,305 @@ +#!/usr/bin/env python3 + +###################################################################### CHJ ##### +## Name : plot_comp_sfc_data.py +## Usage : Plot comparison of sfc_data files by analysis task +## Input files : sfc_data.tile#.nc / sfc_data.tile#.nc_old +## NOAA/EPIC +## History =============================== +## V000: 2024/12/10: Chan-Hoo Jeon : Preliminary version +###################################################################### CHJ ##### + +import os, sys +import yaml +import numpy as np +import netCDF4 as nc +import cartopy +import cartopy.crs as ccrs +import cartopy.feature as cfeature +import xarray as xr +from scipy.stats import norm +import matplotlib.pyplot as plt +import matplotlib.colors as colors +import matplotlib.ticker +import matplotlib as mpl +from matplotlib.colors import ListedColormap +from mpl_toolkits.axes_grid1 import make_axes_locatable + + +# Main part (will be called at the end) ============================= CHJ ===== +def main(): +# =================================================================== CHJ ===== + + global num_tiles,c_lon,work_dir,out_title_base,out_fn_base + + num_tiles=6 + # center of map + c_lon=-77.0369 + + yaml_file="plot_comp_sfc.yaml" + with open(yaml_file, 'r') as f: + yaml_data=yaml.load(f, Loader=yaml.FullLoader) + f.close() + print("YAML_DATA:",yaml_data) + + work_dir=yaml_data['work_dir'] + fn_sfc_base=yaml_data['fn_sfc_base'] + fn_inc_base=yaml_data['fn_inc_base'] + fn_orog_base=yaml_data['fn_orog_base'] + zlvl=yaml_data['zlevel_number'] + out_title_base=yaml_data['out_title_base'] + out_fn_base=yaml_data['out_fn_base'] + fix_dir=yaml_data['fix_dir'] + + # Set the path to Natural Earth dataset + cartopy.config['data_dir']=os.path.join(fix_dir,"NaturalEarth") + + sfc_var_nm="snwdph" + + # get lon, lat from orography + get_geo(fix_dir,fn_orog_base) + # get sfc data before analysis + sfc1_data=get_sfc(work_dir,fn_sfc_base,sfc_var_nm,zlvl,'before') + # get sfc data after analysis + sfc2_data=get_sfc(work_dir,fn_sfc_base,sfc_var_nm,zlvl,'after') + # get sfc increment data of analysis + sfc_xainc_data=get_sfc(work_dir,fn_inc_base,sfc_var_nm,zlvl,'xainc') + # compare sfc1 and sfc2 + compare_sfc(sfc1_data,sfc2_data,sfc_xainc_data,sfc_var_nm) + + +# geo lon/lat from orography ======================================== CHJ ===== +def get_geo(fix_dir,fn_orog_base): +# =================================================================== CHJ ===== + + global glon,glat + + print(' ===== geo data files ====================================') + + cres=fn_orog_base.split('_')[0] + + glon_all=[] + glat_all=[] + for it in range(num_tiles): + itp=it+1 + fn_orog=f'''{fn_orog_base}{itp}.nc''' + fp_orog=os.path.join(fix_dir,"FV3_fix_tiled",cres,fn_orog) + + try: orog=xr.open_dataset(fp_orog) + except: raise Exception('Could NOT find the file',fp_orog) +# print(orog) + # Extract longitudes, and latitudes + geolon=np.ma.masked_invalid(orog['geolon'].data) + geolat=np.ma.masked_invalid(orog['geolat'].data) + glon_all.append(geolon[None,:]) + glat_all.append(geolat[None,:]) + + glon=np.vstack(glon_all) + glat=np.vstack(glat_all) + + +# Get sfc_data from files and plot ================================== CHJ ===== +def get_sfc(path_sfc,fn_sfc_base,sfc_var_nm,zlvl,sfc_opt): +# =================================================================== CHJ ===== + + print(' ===== sfc files: '+sfc_var_nm+' :: '+sfc_opt+' ========================') + sfc_data_all=[] + if sfc_opt == 'before': + fn_sfc_ext=".nc_old" + else: + fn_sfc_ext=".nc" + + for it in range(num_tiles): + itp=it+1 + fn_sfc=f'''{fn_sfc_base}{itp}{fn_sfc_ext}''' + fp_sfc=os.path.join(path_sfc,fn_sfc) + + try: sfc=xr.open_dataset(fp_sfc) + except: raise Exception('Could NOT find the file',fp_sfc) + + # Extract variable + sfc_data=np.ma.masked_invalid(sfc[sfc_var_nm].data) + if it == 1: + print(sfc) + print(sfc_data.shape) + + if sfc_opt == 'xainc': + sfc_data2d=np.squeeze(sfc_data,axis=(0,1)) + else: + if sfc_var_nm == 'stc' or sfc_var_nm == 'smc' or sfc_var_nm == 'slc': + sfc_data3d=np.squeeze(sfc_data,axis=0) + sfc_data2d=sfc_data3d[zlvl,:,:] + else: + sfc_data2d=np.squeeze(sfc_data,axis=0) + + sfc_data_all.append(sfc_data2d[None,:]) + + sfc_var=np.vstack(sfc_data_all) + + if sfc_opt == 'xainc': + plot_increment(sfc_var,sfc_var_nm,sfc_opt) + else: + plot_data(sfc_var,sfc_var_nm,sfc_opt) + + return sfc_var + + +# Compare two data set and plot ===================================== CHJ ===== +def compare_sfc(sfc_data1,sfc_data2,inc_data,sfc_var_nm): +# =================================================================== CHJ ===== + print(' ===== compare files =============================================') + print(' data 1: ',sfc_data1.shape) + print(' data 2: ',sfc_data2.shape) + + diff_data=sfc_data2-sfc_data1 + print(' diff. data: ',diff_data.shape) + plot_increment(diff_data,sfc_var_nm,'diff_sfc') + + +# increment/difference plot ========================================== CHJ ===== +def plot_increment(plt_var,plt_var_nm,plt_out_txt): +# ==================================================================== CHJ ===== + var_max=np.max(plt_var) + var_min=np.min(plt_var) + print(plt_var_nm,': diff : var_max=',var_max) + print(plt_var_nm,': diff : var_min=',var_min) + + cs_max=max(abs(var_max),abs(var_min)) + cs_min=cs_max*-1.0 + cs_cmap='seismic' + nm_svar='\u0394'+plt_var_nm + n_rnd=0 + cbar_extend='neither' + + out_title=f'''{out_title_base}{plt_var_nm}::{plt_out_txt}''' + out_fn=f'''{out_fn_base}{plt_var_nm}_{plt_out_txt}''' + + fig,ax=plt.subplots(1,1,subplot_kw=dict(projection=ccrs.Robinson(c_lon))) + ax.set_title(out_title, fontsize=6) + # Call background plot + back_plot(ax) + + for it in range(num_tiles): + cs=ax.pcolormesh(glon[it,:,:],glat[it,:,:],plt_var[it,:,:],cmap=cs_cmap,rasterized=True, + vmin=cs_min,vmax=cs_max,transform=ccrs.PlateCarree()) + + divider=make_axes_locatable(ax) + ax_cb=divider.new_horizontal(size="3%",pad=0.1,axes_class=plt.Axes) + fig.add_axes(ax_cb) + cbar=plt.colorbar(cs,cax=ax_cb,extend=cbar_extend) + cbar.ax.tick_params(labelsize=6) + cbar.set_label(nm_svar,fontsize=6) + # Output figure + ndpi=300 + out_file(work_dir,out_fn,ndpi) + + +# data plot ========================================================== CHJ ===== +def plot_data(plt_var,plt_var_nm,plt_out_txt): +# ==================================================================== CHJ ===== + var_max=np.max(plt_var) + var_min=np.min(plt_var) + print('var_max=',var_max) + print('var_min=',var_min) + var_max05=var_max*0.5 + var_min05=var_min*0.5 + print('var_max05=',var_max05) + print('var_min05=',var_min05) + + cmap_range_opt='real' + cs_cmap='gist_ncar_r' + if cmap_range_opt=='symmetry': + n_rnd=0 + tmp_cmp=max(abs(var_max05),abs(var_min05)) + cs_min=round(-tmp_cmp,n_rnd) + cs_max=round(tmp_cmp,n_rnd) + cbar_extend='both' + elif cmap_range_opt=='round': + n_rnd=0 + cs_min=round(var_min05,n_rnd) + cs_max=round(var_max05,n_rnd) + cbar_extend='both' + elif cmap_range_opt=='real': + cs_min=var_min + cs_max=var_max + cbar_extend='neither' + elif cmap_range_opt=='fixed': + cs_min=0.0 + cs_max=150.0 + cbar_extend='both' + else: + sys.exit('ERROR: wrong colormap-range flag !!!') + + print('cs_max=',cs_max) + print('cs_min=',cs_min) + + out_title=f'''{out_title_base}{plt_var_nm}::{plt_out_txt}''' + out_fn=f'''{out_fn_base}{plt_var_nm}_{plt_out_txt}''' + + fig,ax=plt.subplots(1,1,subplot_kw=dict(projection=ccrs.Robinson(c_lon))) + ax.set_title(out_title, fontsize=6) + # Call background plot + back_plot(ax) + + for it in range(num_tiles): + cs=ax.pcolormesh(glon[it,:,:],glat[it,:,:],plt_var[it,:,:],cmap=cs_cmap,rasterized=True, + vmin=cs_min,vmax=cs_max,transform=ccrs.PlateCarree()) + + divider=make_axes_locatable(ax) + ax_cb=divider.new_horizontal(size="3%",pad=0.1,axes_class=plt.Axes) + fig.add_axes(ax_cb) + cbar=plt.colorbar(cs,cax=ax_cb,extend=cbar_extend) + cbar.ax.tick_params(labelsize=6) + cbar.set_label(plt_var_nm,fontsize=6) + # Output figure + ndpi=300 + out_file(work_dir,out_fn,ndpi) + + +# Background plot ==================================================== CHJ ===== +def back_plot(ax): +# ==================================================================== CHJ ===== + + # Resolution of background natural earth data ('50m' or '110m') + back_res='50m' + + fline_wd=0.5 # line width + falpha=0.7 # transparency + + # natural_earth + land=cfeature.NaturalEarthFeature('physical','land',back_res, + edgecolor='face',facecolor=cfeature.COLORS['land'], + alpha=falpha) + lakes=cfeature.NaturalEarthFeature('physical','lakes',back_res, + edgecolor='blue',facecolor='none', + linewidth=fline_wd,alpha=falpha) + coastline=cfeature.NaturalEarthFeature('physical','coastline', + back_res,edgecolor='black',facecolor='none', + linewidth=fline_wd,alpha=falpha) + states=cfeature.NaturalEarthFeature('cultural','admin_1_states_provinces', + back_res,edgecolor='green',facecolor='none', + linewidth=fline_wd,linestyle=':',alpha=falpha) + borders=cfeature.NaturalEarthFeature('cultural','admin_0_countries', + back_res,edgecolor='red',facecolor='none', + linewidth=fline_wd,alpha=falpha) + +# ax.add_feature(land) +# ax.add_feature(lakes) +# ax.add_feature(states) +# ax.add_feature(borders) + ax.add_feature(coastline) + + +# Output file ======================================================= CHJ ===== +def out_file(work_dir,out_file,ndpi): +# =================================================================== CHJ ===== + # Output figure + fp_out=os.path.join(work_dir,out_file) + plt.savefig(fp_out+'.png',dpi=ndpi,bbox_inches='tight') + plt.close('all') + + +# Main call ========================================================= CHJ ===== +if __name__=='__main__': + main() + diff --git a/ush/plot_forecast_restart.py b/ush/plot_forecast_restart.py index 2e4c8d05..c7bf246c 100755 --- a/ush/plot_forecast_restart.py +++ b/ush/plot_forecast_restart.py @@ -44,14 +44,10 @@ def main(): soil_lvl_num=yaml_data['soil_lvl_number'] out_title_base=yaml_data['out_title_base'] out_fn_base=yaml_data['out_fn_base'] - machine=yaml_data['machine'] - - if yaml_data['machine']=='hera': - cartopy.config['data_dir']='/scratch2/NAGAPE/epic/UFS_Land-DA_Dev/inputs/NaturalEarth' - elif yaml_data['machine']=='orion' or yaml_data['machine']=='hercules': - cartopy.config['data_dir']='/work/noaa/epic/UFS_Land-DA_Dev/inputs/NaturalEarth' - elif yaml_data['machine']=='singularity': - cartopy.config['data_dir']='SINGULARITY_WORKING_DIR/land-DA_workflow/fix/NaturalEarth' + cartopy_ne_path=yaml_data['cartopy_ne_path'] + + # Set the path to Natural Earth dataset + cartopy.config['data_dir']=cartopy_ne_path #var_list=["snwdph","smc"] var_list=["snwdph"] diff --git a/ush/plot_obs_ghcn.py b/ush/plot_obs_ghcn.py new file mode 100755 index 00000000..52ea57ad --- /dev/null +++ b/ush/plot_obs_ghcn.py @@ -0,0 +1,208 @@ +#!/usr/bin/env python3 + +###################################################################### CHJ ##### +## Name : plot_obs_ghcn.py +## Usage : Plot GHCN observation ioda file of land-DA workflow +## Input file : ghcn_snwd_ioda.nc +## NOAA/EPIC +## History =============================== +## V000: 2024/12/03: Chan-Hoo Jeon : Preliminary version +###################################################################### CHJ ##### + +import os, sys +import yaml +import numpy as np +import netCDF4 as nc +import cartopy +import cartopy.crs as ccrs +import cartopy.feature as cfeature +import matplotlib.pyplot as plt +from mpl_toolkits.axes_grid1 import make_axes_locatable + + +# Main part (will be called at the end) ============================= CHJ ===== +def main(): +# =================================================================== CHJ ===== + + yaml_file="plot_obs_ghcn.yaml" + with open(yaml_file, 'r') as f: + yaml_data=yaml.load(f, Loader=yaml.FullLoader) + f.close() + print("YAML_DATA:",yaml_data) + + work_dir=yaml_data['work_dir'] + fn_input=yaml_data['fn_input'] + out_title_base=yaml_data['out_title_base'] + out_fn_base=yaml_data['out_fn_base'] + cartopy_ne_path=yaml_data['cartopy_ne_path'] + + # Set the path to Natural Earth dataset + cartopy.config['data_dir']=cartopy_ne_path + + print(' ===== INPUT: '+fn_input+' ================================') + # open the data file + fpath=os.path.join(work_dir,fn_input) + try: mdat=nc.Dataset(fpath) + except: raise Exception('Could NOT find the file',fpath) + print(mdat) + print(mdat.groups['MetaData']) + print(mdat.groups['ObsError']) + print(mdat.groups['ObsValue']) + print(mdat.groups['PreQC']) + + longitude=mdat.groups['MetaData'].variables['longitude'][:] + latitude=mdat.groups['MetaData'].variables['latitude'][:] + datetime=mdat.groups['MetaData'].variables['dateTime'][:] + stationElevation=mdat.groups['MetaData'].variables['stationElevation'][:] +# height=mdat.groups['MetaData'].variables['height'][:] + stationID=mdat.groups['MetaData'].variables['stationIdentification'][:] + + # Longitude 0:360 => -180:180 +# lon_max=np.max(lon) +# if lon_max>180: +# lon=(lon+180)%360-180 + + lon=longitude + lat=latitude + + # Highest and lowest longitudes and latitudes for plot extent + lon_min=np.min(lon) + lon_max=np.max(lon) + lat_min=np.min(lat) + lat_max=np.max(lat) +# extent=[lon_min,lon_max,lat_min,lat_max] + # for CONUS +# extent=[-125,-66,23,53] + # for Northern Hemisphere + extent=[-179,179,0,82.5] + print(extent) + +# c_lon=np.mean(extent[:2]) + c_lon=-77.0369 # D.C. + print(' c_lon=',c_lon) + + # Variables +# vars_out=["ObsValue","ObsError","PreQC"] + vars_out=["ObsValue"] + for svar in vars_out: + svar_plot(svar,mdat,lon,lat,extent,c_lon,out_title_base,out_fn_base,work_dir) + + +# Variable plot =============================================== CHJ ===== +def svar_plot(svar,mdat,lon,lat,extent,c_lon,out_title_base,out_fn_base,work_dir): +# ============================================================= CHJ ===== + + print(' ===== '+svar+' === Total Snow Depth =====================') + # Extract data array + sfld=mdat.groups[svar].variables['totalSnowDepth'][:] + + svar="SnowDepth" + out_title_fld=out_title_base+svar + out_fn=out_fn_base+svar + + cs_cmap='gist_ncar_r' + lb_ext='neither' + tick_ln=1.5 + tick_wd=0.45 + tlb_sz=3 + scat_sz=1.0 + n_rnd=2 + cmap_range='fixed' + + print(' svar name=',svar) + + # Max and Min of the field + fmax=np.max(sfld) + fmin=np.min(sfld) + print(' fld_max=',fmax) + print(' flx_min=',fmin) + + # Make the colormap range symmetry + print(' cmap range=',cmap_range) + if cmap_range=='symmetry': + tmp_cmp=max(abs(fmax),abs(fmin)) + cs_min=round(-tmp_cmp,n_rnd) + cs_max=round(tmp_cmp,n_rnd) + elif cmap_range=='round': + cs_min=round(fmin,n_rnd) + cs_max=round(fmax,n_rnd) + elif cmap_range=='real': + cs_min=fmin + cs_max=fmax + elif cmap_range=='fixed': + cs_min=0 + cs_max=1000.0 + else: + sys.exit('ERROR: wrong colormap-range flag !!!') + + print(' cs_max=',cs_max) + print(' cs_min=',cs_min) + print(' extent=',extent) + + # Plot field + fig,ax=plt.subplots(1,1,subplot_kw=dict(projection=ccrs.Robinson(c_lon))) + ax.set_extent(extent, ccrs.PlateCarree()) + # Call background plot + back_plot(ax) + ax.set_title(out_title_fld,fontsize=9) + cs=ax.scatter(lon,lat,transform=ccrs.PlateCarree(),c=sfld,cmap=cs_cmap, + vmin=cs_min,vmax=cs_max,s=scat_sz) + divider=make_axes_locatable(ax) + ax_cb=divider.new_horizontal(size="3%",pad=0.1,axes_class=plt.Axes) + fig.add_axes(ax_cb) + cbar=plt.colorbar(cs,cax=ax_cb,extend=lb_ext) + cbar.ax.tick_params(labelsize=8) + cbar.set_label(svar,fontsize=8) + + # Output figure + ndpi=300 + out_file(work_dir,out_fn,ndpi) + + +# Background plot ==================================================== CHJ ===== +def back_plot(ax): +# ==================================================================== CHJ ===== + + # Resolution of background natural earth data ('50m' or '110m') + back_res='50m' + + fline_wd=0.5 # line width + falpha=0.7 # transparency + + # natural_earth + land=cfeature.NaturalEarthFeature('physical','land',back_res, + edgecolor='face',facecolor=cfeature.COLORS['land'], + alpha=falpha) + lakes=cfeature.NaturalEarthFeature('physical','lakes',back_res, + edgecolor='blue',facecolor='none', + linewidth=fline_wd,alpha=falpha) + coastline=cfeature.NaturalEarthFeature('physical','coastline', + back_res,edgecolor='black',facecolor='none', + linewidth=fline_wd,alpha=falpha) + states=cfeature.NaturalEarthFeature('cultural','admin_1_states_provinces', + back_res,edgecolor='green',facecolor='none', + linewidth=fline_wd,linestyle=':',alpha=falpha) + borders=cfeature.NaturalEarthFeature('cultural','admin_0_countries', + back_res,edgecolor='red',facecolor='none', + linewidth=fline_wd,alpha=falpha) + +# ax.add_feature(land) +# ax.add_feature(lakes) +# ax.add_feature(states) +# ax.add_feature(borders) + ax.add_feature(coastline) + + +# Output file ======================================================= CHJ ===== +def out_file(work_dir,out_file,ndpi): +# =================================================================== CHJ ===== + # Output figure + fp_out=os.path.join(work_dir,out_file) + plt.savefig(fp_out+'.png',dpi=ndpi,bbox_inches='tight') + plt.close('all') + + +# Main call ========================================================= CHJ ===== +if __name__=='__main__': + main() + diff --git a/versions/build.ver_hera b/versions/build.ver_hera index d87174f1..b2a554ce 100644 --- a/versions/build.ver_hera +++ b/versions/build.ver_hera @@ -16,11 +16,15 @@ export ip_ver="4.3.0" export jasper_ver="2.0.32" export libpng_ver="1.6.37" export mapl_ver="2.40.3-esmf-8.6.0" +export nccmp_ver="1.9.0.1" +export nemsio_ver="2.5.4" export netcdf_c_ver="4.9.2" export netcdf_fortran_ver="4.6.1" export parallelio_ver="2.5.10" export prod_util_ver="2.1.1" export scotch_ver="7.0.4" +export sfcio_ver="1.4.1" +export sigio_ver="2.3.2" export sp_ver="2.5.0" export stack_intel_oneapi_mpi_ver="2021.5.1" export stack_intel_ver="2021.5.0" diff --git a/versions/build.ver_hercules b/versions/build.ver_hercules index 8ec0ce3c..2fa11231 100644 --- a/versions/build.ver_hercules +++ b/versions/build.ver_hercules @@ -16,11 +16,15 @@ export ip_ver="4.3.0" export jasper_ver="2.0.32" export libpng_ver="1.6.37" export mapl_ver="2.40.3-esmf-8.6.0" +export nccmp_ver="1.9.0.1" +export nemsio_ver="2.5.4" export netcdf_c_ver="4.9.2" export netcdf_fortran_ver="4.6.1" export parallelio_ver="2.5.10" export prod_util_ver="2.1.1" export scotch_ver="7.0.4" +export sfcio_ver="1.4.1" +export sigio_ver="2.3.2" export sp_ver="2.5.0" export stack_intel_oneapi_mpi_ver="2021.9.0" export stack_intel_ver="2021.9.0" diff --git a/versions/build.ver_orion b/versions/build.ver_orion index b3e6c325..77ff1cbb 100644 --- a/versions/build.ver_orion +++ b/versions/build.ver_orion @@ -16,11 +16,15 @@ export ip_ver="4.3.0" export jasper_ver="2.0.32" export libpng_ver="1.6.37" export mapl_ver="2.40.3-esmf-8.6.0" +export nccmp_ver="1.9.0.1" +export nemsio_ver="2.5.4" export netcdf_c_ver="4.9.2" export netcdf_fortran_ver="4.6.1" export parallelio_ver="2.5.10" export prod_util_ver="2.1.1" export scotch_ver="7.0.4" +export sfcio_ver="1.4.1" +export sigio_ver="2.3.2" export sp_ver="2.5.0" export stack_intel_oneapi_mpi_ver="2021.9.0" export stack_intel_ver="2021.9.0" diff --git a/versions/run.ver_hera b/versions/run.ver_hera index 7e5ae889..867b0dd0 100644 --- a/versions/run.ver_hera +++ b/versions/run.ver_hera @@ -10,6 +10,8 @@ export crtm_ver="2.4.0" export ecbuild_ver="3.7.2" export esmf_ver="8.6.0" export fms_ver="2024.01" +export gdas_ver="v16.3" +export gfs_ver="v16.3" export gftl_shared_ver="1.6.1" export g2_ver="3.5.1" export g2tmpl_ver="1.13.0" diff --git a/versions/run.ver_hercules b/versions/run.ver_hercules index 72af1154..58b7cdb5 100644 --- a/versions/run.ver_hercules +++ b/versions/run.ver_hercules @@ -10,6 +10,8 @@ export crtm_ver="2.4.0" export ecbuild_ver="3.7.2" export esmf_ver="8.6.0" export fms_ver="2024.01" +export gdas_ver="v16.3" +export gfs_ver="v16.3" export gftl_shared_ver="1.6.1" export g2_ver="3.5.1" export g2tmpl_ver="1.13.0" diff --git a/versions/run.ver_orion b/versions/run.ver_orion index a0ef6e99..88baa5d8 100644 --- a/versions/run.ver_orion +++ b/versions/run.ver_orion @@ -10,6 +10,8 @@ export crtm_ver="2.4.0" export ecbuild_ver="3.7.2" export esmf_ver="8.6.0" export fms_ver="2024.01" +export gdas_ver="v16.3" +export gfs_ver="v16.3" export gftl_shared_ver="1.6.1" export g2_ver="3.5.1" export g2tmpl_ver="1.13.0"