first commit

This commit is contained in:
baoliang 2025-01-12 20:48:10 +08:00
commit b144ce570d
1100 changed files with 415767 additions and 0 deletions

31
.config_files.xml Normal file
View File

@ -0,0 +1,31 @@
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" ?>
<entry_id>
<!-- This is the same as the default entry in
cime/config/cesm/config_files.xml except for the value for clm:
In a standalone clm checkout, COMP_ROOT_DIR_LND is $SRCROOT
rather than $SRCROOT/components/clm.
However, because of the way overrides are handled, we need to
re-specify the full information here rather than just overriding
the value for clm.
-->
<entry id="COMP_ROOT_DIR_LND">
<type>char</type>
<default_value>unset</default_value>
<values>
<value component="clm" >$SRCROOT</value>
<value component="dlnd" >$CIMEROOT/src/components/data_comps/dlnd</value>
<value component="slnd" >$CIMEROOT/src/components/stub_comps/slnd</value>
<value component="xlnd" >$CIMEROOT/src/components/xcpl_comps/xlnd</value>
</values>
<group>case_comps</group>
<file>env_case.xml</file>
<desc>Root directory of the case land model component </desc>
<schema>$CIMEROOT/config/xml_schemas/config_compsets.xsd</schema>
</entry>
</entry_id>

6
.gitattributes vendored Normal file
View File

@ -0,0 +1,6 @@
*.svg filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.jpg filter=lfs diff=lfs merge=lfs -text
*.jpeg filter=lfs diff=lfs merge=lfs -text
*.gif filter=lfs diff=lfs merge=lfs -text
*.pdf filter=lfs diff=lfs merge=lfs -text

29
.github/ISSUE_TEMPLATE/01_bug_report.md vendored Normal file
View File

@ -0,0 +1,29 @@
---
name: Bug report
about: Report a problem with the code
---
### Brief summary of bug
[Give a one or two sentence summary. This could be the same as the issue title if you feel that is a sufficient summary.]
### General bug information
**CTSM version you are using:** [output of `git describe`]
**Does this bug cause significantly incorrect results in the model's science?** [Yes / No]
**Configurations affected:** [Fill this in if known.]
### Details of bug
[Fill in details here.]
### Important details of your setup / configuration so we can reproduce the bug
[Specify anything relevant: the compset, resolution, machine, compiler, any xml or namelist changes, etc. You don't have to repeat anything that you have already noted above.]
### Important output or errors that show the problem
[Fill this in with anything relevant that you haven't already noted; if there is nothing to add, delete this section.]

View File

@ -0,0 +1,36 @@
---
name: Support needed for model use
about: Ask for help with using CTSM
---
### NOTE: Be sure to read the relevant documentation and user forums
We have limited staff and ability to provide support. Here are some resources that might provide help:
- User's Guide: https://escomp.github.io/ctsm-docs/doc/build/html/users_guide/index.html
- CLM Forum: https://bb.cgd.ucar.edu/forums/land-modeling-clm
- README files amongst the source code
- GitHub CTSM issues: https://github.com/escomp/ctsm/issues/
- Also make sure this issue is unique to CTSM and not really an issue with CESM or CIME
### Details of support request
[Fill in details here.]
### Important details of your setup / configuration so we can better assist you
**CTSM version you are using:** [output of `git describe`]
**Have you made any modifications to code, xml files, etc.?** [Yes / No]
[If Yes: Please point us to your modifications. However: In general we can NOT support problems with modified code. Try to show the problem without modifications.]
**If you are having problems with a specific case: Is your case on a machine accessible to most CTSM developers (e.g., an NCAR machine)?** [Yes / No]
If Yes:
- Location of case directory: [Fill this in]
- Location of run directory: [Fill this in]
[If No: Please make sure you have included all important input and output needed to understand your issue, either by pasting it into the issue text, or by attaching relevant files. However: We are less likely to be able to reproduce your problem if the issue is NOT on an NCAR machine.]

View File

@ -0,0 +1,7 @@
---
name: Science discussion
about: We encourage the use of issues to discuss CTSM science developments
---

7
.github/ISSUE_TEMPLATE/04_other.md vendored Normal file
View File

@ -0,0 +1,7 @@
---
name: Other
about: Other issues (enhancement, cleanup, documentation, etc.)
---

20
.github/PULL_REQUEST_TEMPLATE.md vendored Normal file
View File

@ -0,0 +1,20 @@
### Description of changes
### Specific notes
Contributors other than yourself, if any:
CTSM Issues Fixed (include github issue #):
Are answers expected to change (and if so in what way)?
Any User Interface Changes (namelist or namelist defaults changes)?
Testing performed, if any:
(List what testing you did to show your changes worked as expected)
(This can be manual testing or running of the different test suites)
(Documentation on system testing is here: https://github.com/ESCOMP/ctsm/wiki/System-Testing-Guide)
(aux_clm on cheyenne for gnu/pgi and hobart for gnu/pgi/nag is the standard for tags on master)
**NOTE: Be sure to check your Coding style against the standard:**
https://github.com/ESCOMP/ctsm/wiki/CTSM-coding-guidelines

118
.gitignore vendored Normal file
View File

@ -0,0 +1,118 @@
# directories checked out by manage_externals, and other files created
# by manage_externals
manage_externals.log
/src/fates/
/tools/PTCLM/
/cime/
/components/
/doc/doc-builder/
# ignore svn directories
**/.svn/**
.svn/
# binary files
*.nc
# editor files
*.swp
*~
# vim files (from https://github.com/github/gitignore/blob/master/Global/Vim.gitignore)
# Swap
[._]*.s[a-v][a-z]
[._]*.sw[a-p]
[._]s[a-rt-v][a-z]
[._]ss[a-gi-z]
[._]sw[a-p]
# Session
Session.vim
# Temporary
.netrwhist
# (removed *~ because it is listed above)
# Auto-generated tag files
tags
# Persistent undo
[._]*.un~
# mac files
.DS_Store
# cmake generated files
build/
CMakeFiles/
# unit testing directories
/src/unit_tests.*
# files generated by the unit test build
/src/dyn_subgrid/dynVarMod.F90
/src/dyn_subgrid/dynVarTimeInterpMod.F90
/src/dyn_subgrid/dynVarTimeUninterpMod.F90
/src/utils/array_utils.F90
/src/unit_test_stubs/utils/restUtilMod_stub.F90
/src/unit_test_stubs/main/ncdio_pio_fake.F90
/src/unit_test_stubs/main/ncdio_var.F90
/src/unit_test_shr/unittestArrayMod.F90
# cime_config
buildnmlc
buildcppc
# configure / build files
/bld/**/CESM_cppdefs
/bld/**/Filepath
/bld/**/config_cache.xml
/bld/**/lnd_in
/bld/**/drv_flds_in
# build-naemlist testing
/bld/unit_testers/lnd_in*
/bld/unit_testers/drv_flds_in*
/bld/unit_testers/temp_file.txt*
/bld/unit_testers/user_nl_clm_real_parameters*
/bld/unit_testers/env_run.xml
# tools testing output
td.*.status
td.*.log
td.*.status.xFail
test_driver_*.sh
# mksurfdata output
surfdata_*.log
surfdata_*.namelist
landuse.timeseries_*.namelist
landuse.timeseries_*.log
landuse_timeseries_*.txt
clm.input_data_list
clm.input_data_list.previous
*.stdout.txt.o*
# mksurfdata unit tests
unit_test_build
# Tools executables
/tools/mksurfdata_map/mksurfdata_map
/tools/mkprocdata_map/mkprocdata_map
# mksurfdata output files
/tools/mksurfdata_map/surfdata_*.nc
/tools/mksurfdata_map/landuse.timeseries_*.nc
# mkmapdata output files
/tools/mkmapdata/PET*.RegridWeightGen.Log
/tools/mkmapdata/regrid.*.out
/tools/mkmapdata/regrid.*.err
/tools/mkmapdata/regrid.o*
/tools/mkmapdata/map*.nc
# build output
*.o
*.mod
core.*
*.gz
*.log !run.log
*.pyc
Depends

2
.lfsconfig Normal file
View File

@ -0,0 +1,2 @@
[lfs]
fetchexclude = *

7
.zenodo.json Normal file
View File

@ -0,0 +1,7 @@
{
"creators": [
{
"name": "CTSM Development Team"
}
]
}

49
CODE_OF_CONDUCT.md Normal file
View File

@ -0,0 +1,49 @@
# Contributor Covenant Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, politcal affiliation, veteran status, pregnancy, genetic information, personal appearance, choice of text editor or operating system, race, religion, or sexual identity and orientation, or any other characteristic protected under applicable US federal or state law.
## Our Standards
Examples of behavior that contributes to creating a positive environment include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a professional setting
* Refusing to use the pronouns that someone requests
* Intimidating, threatening, or hostile conduct; physical or verbal abuse; vandalism; arson; and sabotage
* Alarming or threatening comments that might refer to, suggest, or promote a violent, intimidating, or threatening action
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at ctsm-core@ucar.edu. Alternatively, this behavior can be reported to individuals on the CTSM team, who will then have the responsibility to talk about the behavior to the core team. Another alternative for NCAR employees (when all individuals involved are NCAR employees) is to use the reporting methods of NCAR for this behavior (these options include anonymous reporting methods). The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. Retaliation against a person who initiates a complaint or an inquiry about such behaviors is equally prohibited.
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
[homepage]: http://contributor-covenant.org
[version]: http://contributor-covenant.org/version/1/4/

48
CONTRIBUTING.md Normal file
View File

@ -0,0 +1,48 @@
## How to contribute:
We recommend that you first open an issue (https://github.com/escomp/ctsm/issues/) to
discuss the changes or additions that you propose. Through the issue discussion, you can
work with other CTSM developers to think about the design and implementation of the changes
as well as the planning and scheduling for the change to come into CTSM. An alternative is
to contact the key software and science developers via ctsm-software@ucar.edu. Making
contact early in your project will increase the likelihood that your developments can come
into CTSM.
We also recommend that you join the ctsm-dev@ucar.edu google groups in order
to be informed about the science that is happening in CTSM as well as the latest developments and tags.
The ctsm-dev group is here:
https://groups.google.com/a/ucar.edu/forum/#!forum/ctsm-dev
Use the help from the wiki below to setup a fork and personal branch in GitHub to put your developments
on and keep up to date with the master branch of CTSM. Once the changes are sufficiently advanced you
can form a Pull Request on GitHub. Either from your fork on GitHub, or from the main ESCOMP GitHub page
for CTSM (be sure to hit the "compare across forks" link at the top of the page when you first create
the pull request).
https://github.com/ESCOMP/ctsm/pulls
This allows you to show your proposed changes and start getting feedback on them (even if they aren't finished).
This also allows your changes to be planned for and slated for a time to come into CTSM master. In most
cases you won't merge the Pull Request yourself, but a software engineer responsible for CTSM will do
additional testing and bring the changes to CTSM master.
### CTSM Developers Guide:
https://wiki.ucar.edu/display/ccsm/Community+Land+Model+Developers+Guide
## Getting Started:
The following resources give you information on the project and how to get started.
#### CTSM Wiki:
https://github.com/ESCOMP/ctsm/wiki
#### Coding Practices and Style:
Code conventions: https://github.com/ESCOMP/ctsm/wiki/CTSM-coding-guidelines
#### Code of Conduct:
See the `CODE_OF_CONDUCT.md` file for expectations of how to work in the community.

71
CTSMMasterChecklist Normal file
View File

@ -0,0 +1,71 @@
Checklist of steps to do to make a CTSM Trunk Tag Oct/1st/2018
CTSM Software Management team.
See the wiki page for this on:
https://github.com/ESCOMP/ctsm/wiki/CTSM-development-workflow
(1) Update your branch to latest version of ESCOMP/ctsm master branch (git fetch followed
by git merge)
(2) Make sure you have the latest version of code in your testing sandbox
2a -- run 'git pull' to pull in the latest version from GitHub
2b -- run 'git status' and/or 'git diff' to make sure you don't have any uncommitted
local changes
2c -- run './manage_externals/checkout_externals -S' to make sure all externals are
updated and don't have any uncommitted changes. (If any are marked with 's' in
the first column, run ./manage_externals/checkout_externals to update them.)
(3) Do all testing on your fork/feature-branch
3a -- make sure any new failing tests are either fixed or approved as a new expected
fail
3b -- update the ExpectedFails list if expected fails changes in 1a
$EDITOR cime_config/testdefs/ExpectedTestFails.xml
3c -- make sure you understand any changes to the baselines -- to document in ChangeLog
(4) Use diff and status to make sure any new files are in the repo and only the correct
changes are on the branch
4a -- 'git status' to check that you've added any new files and haven't
added any non source files that aren't needed in the repository
4b -- 'git diff' to check that your changes are correct and you didn't accidentally
add something unintentionally
(5) Update ChangeLog
5a -- From the 'doc' directory, run './UpdateChangelog.pl TAGNAME "one-line summary"'.
This will open an editor with the ChangeLog. You can edit it now (step 4b) or
exit your editor and then reopen it manually.
5b -- Fill in the ChangeLog entry
5c -- Update date stamp on ChangeLog
./UpDateChangeLog.pl -update
5d -- Commit new change files
(6) Submit a pull request (PR) for the changes
Have someone review it if you are able. At minimum review it youself. The PR mechanism
on git is an excellent way to code review code for both yourself and others. Also make
sure all your changes are correct, changes that shouldn't have gone in don't, and all new
files are added in.
---- THE FOLLOWING CAN ONLY BE DONE BY INTEGRATORS ----
(7) Merge the PR to master when review is approved
(8) Compare master to branch show that they are identical
git diff master remote/feature-branch
This should show no diffs
(9) Make an annotated tag on master
(10) Push master and tag to ESCOMP/ctsm
---- NOTES ----
(3) -- Always test on your fork with a feature-branch so that we can change tag order if needed. Put
baselines in the next tag name, as we can easily change afterwards if needed.

45
Externals.cfg Normal file
View File

@ -0,0 +1,45 @@
[clm]
local_path = .
protocol = externals_only
externals = Externals_CLM.cfg
required = True
[cism]
local_path = components/cism
protocol = git
repo_url = https://github.com/ESCOMP/CISM-wrapper
tag = cism-release-cesm2.1.2_03
externals = Externals_CISM.cfg
required = True
[rtm]
local_path = components/rtm
protocol = git
repo_url = https://github.com/ESCOMP/RTM
tag = release-cesm2.0.04
required = True
[mosart]
local_path = components/mosart
protocol = git
repo_url = https://github.com/ESCOMP/MOSART
tag = release-cesm2.0.04
required = True
[cime]
local_path = cime
protocol = git
repo_url = https://github.com/ESMCI/cime
tag = cime5.6.47
required = True
[doc-builder]
local_path = doc/doc-builder
protocol = git
repo_url = https://github.com/ESMCI/doc-builder
tag = v1.0.4
required = False
[externals_description]
schema_version = 1.0.0

10
Externals_CLM.cfg Normal file
View File

@ -0,0 +1,10 @@
[fates]
local_path = src/fates
protocol = git
repo_url = https://github.com/NGEET/fates
tag = sci.1.30.0_api.8.0.0
required = True
[externals_description]
schema_version = 1.0.0

34
LICENSE Normal file
View File

@ -0,0 +1,34 @@
Copyright (c) 2005-2018, University Corporation for Atmospheric Research (UCAR)
All rights reserved.
Developed by:
University Corporation for Atmospheric Research - National Center for Atmospheric Research
https://www2.cesm.ucar.edu/working-groups/sewg
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the "Software"),
to deal with the Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute, sublicense,
and/or sell copies of the Software, and to permit persons to whom
the Software is furnished to do so, subject to the following conditions:
- Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimers.
- Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimers in the documentation
and/or other materials provided with the distribution.
- Neither the names of [Name of Development Group, UCAR],
nor the names of its contributors may be used to endorse or promote
products derived from this Software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.

144
README Normal file
View File

@ -0,0 +1,144 @@
$CTSMROOT/README 06/08/2018
Community Land Surface Model (CLM) science version 5.0.0 series -- source code,
offline-build and test scripts. This gives you everything you need
to run CLM with CESM with datm8 to provide CRU NCEP or GSWP3 forcing data in
place of a modeled atmosphere.
For lists of current bugs (issues) and current development see the CTSM GitHub page:
https://github.com/ESCOMP/ctsm
IMPORTANT NOTE ON CESM CHECKOUT VERSUS A CTSM CHECKOUT:
If this is the top level directory from making a clone of CTSM the
directory structure is a little bit different than if CTSM is from
a clone of the entire CESM. If this is part of CESM this directory
will be under components/clm alongside other CESM component models.
For a CTSM checkout this will be the top level directory.
Other documentation will refer to $CTSMROOT and it means the directory
that this file is at. CIMEROOT is the directory where "cime" is for
this checkout. For a CESM checkout $CIMEROOT will be the "cime" directory
beneath the top level directory. For a CTSM checkout $CIMEROOT will
be $CTSMROOT/cime.
General directory structure ($CTSMROOT):
doc --------------- Documentation of CLM.
bld --------------- Template, configure and build-namelist scripts for clm.
src --------------- CLM Source code.
cime_config ------- Configuration files of cime for compsets and CLM settings
manage_externals -- Script to manage the external source directories
Directory structure only for a CTSM checkout:
components -------- Other active sub-components needed for CLM to run (river routing and land-ice models)
cime/scripts --------------- cesm/cime driver scripts
cime/src/drivers/mct/main ----------- CESM top level driver source code.
cime/src/drivers/mct/shr ------------ CESM top level driver shared code.
cime/src/components/data_comps/datm - CESM Data model version 8 source code.
cime/src/components/stub_comps/sice - CESM stub sea-ice model source code.
cime/src/components/stub_comps/socn - CESM stub ocean model source code.
cime/src/components/stub_comps/sglc - CESM stub glacier model source code.
cime/src/externals ------------------ CESM external utility codes
(Model Coupling Toolkit (MCT)
(Earth System Model Framework)
(timing -- code timing utility)
(pio -- Parallel Input/Output)
components/cism --------------------- CESM Community land Ice Sheet Model.
components/mosart ------------------- Model for Scale Adaptive River Transport
components/rtm ---------------------- CESM River Transport Model.
Top level documentation ($CTSMROOT):
README ------------------- This file
README.rst --------------- File that displays under the project in github
README_EXTERNALS.rst ----- Information on how to work with subversion externals for clm
CODE_OF_CONDUCT.md ------- Code of Conduct for how to work with each other on the CTSM project
Copyright ---------------- CESM Copyright file
doc/UpdateChangeLog.pl ------- Script to add documentation on a tag to the
ChangeLog/ChangeSum files
doc/ChangeLog ---------------- Documents different CLM versions
doc/ChangeSum ---------------- Summary documentation of different CLM versions
Documentation of Namelist Items: (view the following in a web browser)
bld/namelist_files/namelist_definition.xml --- Definition of all namelist items
bld/namelist_files/namelist_defaults_clm4_5.xml - Default values for CLM4.5/CLM5.0
=============================================================================================
Important files in main directories (under $CTSMROOT):
=============================================================================================
Externals.cfg --------------- File for management of the main high level externals
Externals_CLM.cfg ----------- File for management of the CLM specific externals (i.e. FATES)
parse_cime.cs.status -------- Script to parse test status files cs.status.* created by create_test
doc/Quickstart.GUIDE -------- Quick guide to using cpl7 scripts.
doc/IMPORTANT_NOTES --------- Some important notes about this version of
clm, configuration modes and namelist items
that are not validated or functional.
doc/ChangeLog --------------- Detailed list of changes for each model version.
doc/ChangeSum --------------- Summary one-line list of changes for each
model version.
doc/README ------------------ Documentation similar to this file
doc/UsersGuide -------------- CLM Users Guide
doc/CodeReference ----------- CLM Code Reference Guide
bld/README ------------------ Description of how to use the configure and
build-namelist scripts.
bld/configure --------------- Script to prepare CLM to be built.
bld/build-namelist ---------- Script to build CLM namelists.
cime_config/buildnml ------------- Build the CLM namelist for CIME
cime_config/buildlib ------------- Build the CLM library
cime_config/config_compsets.xml -- Define CLM compsets
cime_config/config_component.xml - Define CLM XML settings
cime_config/config_tests.xml ----- Define CLM specific tests
cime_config/config_pes.xml ------- Define Processor layouts for various CLM grids and compsets
cime_config/testdefs ------------- Directory for specification of CLM testing
cime_config/testdefs/ExpectedTestFails.xml -- List of tests that are expected to fail
cime_config/usermods_dirs -------- Directories of sets of user-modification subdirs
(These are directories that add specific user modifications to
simulations created using "cime/scripts/create_newcase --user-mods-dir".
Current sub directories are for various CMIP6 configurations)
=============================================================================================
Source code directory structure:
=============================================================================================
src/biogeochem ---- Biogeochemisty
src/main ---------- Main control and high level code
src/cpl ----------- Land model high level MCT and ESMF drivers
src/biogeophys ---- Biogeophysics (Hydrology)
src/dyn_subgrid --- Dynamic land unit change
src/init_interp --- Online interpolation
scr/fates --------- FATES model and sub-directories
Functionally Assembled Terrestrial Ecosystem Simulator (FATES)
Experimental Ecosystem Demography model
src/utils --------- Utility codes
src/unit_test_shr - Unit test shared modules for unit testing
src/unit_test_stubs Unit test stubs that replicate CTSM code simpler
src_clm40 --------- CLM4.0 source code directory
=============================================================================================
QUICKSTART: using the CPL7 scripts
=============================================================================================
cd $CIMEROOT/scripts
./create_newcase # get help on how to run create_newcase
./create_newcase --case testI --res f19_g17_gl4 --compset I2000Clm50BgcCrop
# create new "I" case for default machine at 1.9x2.5_gx1v7
# with 4km greenland ice sheetres resolution
# "I2000Clm50BgcCrop" case is clm5_0 active, datm8, and inactive ice/ocn
# With no-evolve ice-sheet, and MOSART for river-routing
cd testI
./case.setup # create the $CASE.run file
./case.build # build model and create namelists
./case.submit # submit script
# (NOTE: ./xmlchange RESUBMIT=10 to set RESUBMIT to number
# # of times to automatically resubmit -- 10 in this example)

59
README.md Normal file
View File

@ -0,0 +1,59 @@
# CTSM
[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.3739617.svg)](https://doi.org/10.5281/zenodo.3739617)
## Overview and resources
The Community Terrestrial Systems Model.
This includes the Community Land Model (CLM5.0 and CLM4.5) of the Community Earth System Model.
For documentation, quick start, diagnostics, model output and
references, see
http://www.cesm.ucar.edu/models/cesm2.0/land/
and
https://escomp.github.io/ctsm-docs/
For help with how to work with CTSM in git, see
https://github.com/ESCOMP/CTSM/wiki/Quick-start-to-CTSM-development-with-git
and
https://github.com/ESCOMP/ctsm/wiki/Recommended-git-setup
For support with model use, troubleshooting, etc., please use the CTSM forum (or other
appropriate forum) here:
https://xenforo.cgd.ucar.edu/cesm/
To get updates on CTSM tags and important notes on CTSM developments
join our low traffic email list:
https://groups.google.com/a/ucar.edu/forum/#!forum/ctsm-dev
(Send email to ctsm-software@ucar.edu if you have problems with any of this)
## CTSM code management team
CTSM code management is provided primarily by:
Software engineering team:
- [Erik Kluzek](https://github.com/ekluzek)
- [Bill Sacks](https://github.com/billsacks)
- [Mariana Vertenstein](https://github.com/mvertens)
- [Negin Sobhani](https://github.com/negin513)
- [Sam Levis](https://github.com/slevisconsulting)
Science team:
- [Dave Lawrence](https://github.com/dlawrenncar)
- [Will Wieder](https://github.com/wwieder)
- [Danica Lombardozzi](https://github.com/danicalombardozzi)
- [Keith Oleson](https://github.com/olyson)
- [Sean Swenson](https://github.com/swensosc)
- [Mike Barlage](https://github.com/barlage)
- [Rosie Fisher](https://github.com/rosiealice)
- [Peter Lawrence](https://github.com/lawrencepj1)

124
README_EXTERNALS.rst Normal file
View File

@ -0,0 +1,124 @@
Obtaining the full model code and associated scripting infrastructure
=====================================================================
CTSM is released via GitHub. You will need some familiarity with git in order
to modify the code and commit these changes. However, to simply checkout and run the
code, no git knowledge is required other than what is documented in the following steps.
To obtain the CTSM code you need to do the following:
#. Clone the repository. ::
git clone https://github.com/escomp/ctsm.git my_ctsm_sandbox
This will create a directory ``my_ctsm_sandbox/`` in your current working directory.
#. Run the script **manage_externals/checkout_externals**. ::
./manage_externals/checkout_externals
The **checkout_externals** script is a package manager that will
populate the ctsm directory with the relevant versions of each of the
components along with the CIME infrastructure code.
At this point you have a working version of CTSM.
To see full details of how to set up a case, compile and run, see the CIME documentation at http://esmci.github.io/cime/ .
More details on checkout_externals
----------------------------------
The file **Externals.cfg** in your top-level CTSM directory tells
**checkout_externals** which tag/branch of each component should be
brought in to generate your sandbox. (This file serves the same purpose
as SVN_EXTERNAL_DIRECTORIES when CLM was in a subversion repository.)
NOTE: Just like svn externals, checkout_externals will always attempt
to make the working copy exactly match the externals description. If
you manually modify an external without updating Externals.cfg, e.g. switch
to a different tag, then rerunning checkout_externals will switch you
back to the external described in Externals.cfg. See below
documentation `Customizing your CTSM sandbox`_ for more details.
**You need to rerun checkout_externals whenever Externals.cfg has
changed** (unless you have already manually updated the relevant
external(s) to have the correct branch/tag checked out). Common times
when this is needed are:
* After checking out a new CTSM branch/tag
* After merging some other CTSM branch/tag into your currently
checked-out branch
**checkout_externals** must be run from the root of the source
tree. For example, if you cloned CTSM with::
git clone https://github.com/escomp/ctsm.git my_ctsm_sandbox
then you must run **checkout_externals** from
``/path/to/my_ctsm_sandbox``.
To see more details of **checkout_externals**, issue ::
./manage_externals/checkout_externals --help
Customizing your CTSM sandbox
=============================
There are several use cases to consider when you want to customize or modify your CTSM sandbox.
Switching to a different CTSM branch or tag
-------------------------------------------
If you have already checked out a branch or tag and **HAVE NOT MADE ANY
MODIFICATIONS** it is simple to change your sandbox. Say that you
checked out ctsm1.0.0 but really wanted to have ctsm1.1.0;
you would simply do the following::
git checkout ctsm1.1.0
./manage_externals/checkout_externals
You should **not** use this method if you have made any source code
changes, or if you have any ongoing CTSM cases that were created from
this sandbox. In these cases, it is often easiest to do a second **git
clone**.
Pointing to a different version of a component
----------------------------------------------
Each entry in **Externals.cfg** has the following form (we use CIME as an
example below)::
[cime]
local_path = cime
protocol = git
repo_url = https://github.com/CESM-Development/cime
tag = cime5.4.0-alpha.20
required = True
Each entry specifies either a tag or a branch. To point to a new tag:
#. Modify the relevant entry/entries in **Externals.cfg** (e.g., changing
``cime5.4.0-alpha.20`` to ``cime5.4.0-alpha.21`` above)
#. Checkout the new component(s)::
./manage_externals/checkout_externals
Keep in mind that changing individual components from a tag may result
in an invalid model (won't compile, won't run, not scientifically
meaningful) and is unsupported.
Committing your change to Externals.cfg
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
After making this change, it's a good idea to commit the change in your
local CTSM git repository. First create a branch in your local
repository, then commit it. (Unlike with subversion, branches are stored
locally unless you explicitly push them up to GitHub. Feel free to
create whatever local branches you'd like.) For example::
git checkout -b my_ctsm_branch
git add Externals.cfg
git commit -m "Update CIME to cime5.4.0-alpha.20"

4669
bld/CLMBuildNamelist.pm Executable file

File diff suppressed because it is too large Load Diff

72
bld/README Normal file
View File

@ -0,0 +1,72 @@
$CTSMROOT/bld/README Jun/08/2018
CLM build and configure directory and scripts. Scripts to help
you prepare to build CLM as a component within CESM, and setup
a namelist for it.
Important files/directories:
--------- Configure and build scripts
--------- (These scripts are also used by the cesm/cime scripts)
configure ---------------- Configure script -- sets up the CPP Macro's needed to be
defined to build CLM (only actively used for clm4_0)
----- configure --help - Configure help mode -- sends information on all configure options
config_files/clm_phys_vers.pm ------------- Perl module to handle different CLM versions
config_files/config_defaults.xml ---------- XML file of defaults for CLM
config_files/config_defaults_*.xml -------- XML file of defaults for CLM for a specific site
config_files/config_definition_clm4_0.xml - XML file definining all CLM4.0 configuration items
config_files/config_definition_clm4_5.xml - XML file definining all CLM5.5/CLM5.0 configuration items
--------- Scripts to build the namelists
--------- (These scripts are also used by the cesm/cime scripts)
build-namelist --- Build the namelists needed
env_run.xml --- Sample case runtime environment variables, so build-namelist can run outside of a case directory.
--------- Scripts to query namelist defaults
listDefaultNamelist.pl -- List the files needed, for a list of resolutions,
to run CLM that are currently NOT on your machine.
This file can then be used by
cime/scripts/Tools/check_input_data
to retreive them from the inputdata repository.
Setting up cases with create_newcase also does
this -- but only for the exact configuration
given. This tries to get all the files need
for several different resolutions and configurations
at once.
queryDefaultNamelist.pl - Query default namelist for settings of variables
queryDefaultXML.pm ------ Subroutines needed by queryDefaultNamelist.pl script
--------- Test scripts directory
unit_testers --- Directory of scripts to test scipts in this directory
(most notably build-namelist and possibly configure)
---------- XML Files describing namelists in namelist_files
namelist_files/namelist_defaults_clm4_0.xml ------- List of default values for the clm4_0 namelist
namelist_files/namelist_defaults_clm4_5.xml ------- List of default values for the clm4_5 namelist
namelist_files/namelist_defaults_overall.xml ------ List of default values for overall settings
namelist_files/namelist_defaults_usr_files.xml ---- List of default values for the user-files
namelist_files/namelist_definition_clm4_0.xml ----- Definition of all namelist items for clm4_0
namelist_files/namelist_definition_clm4_5.xml ----- Definition of all namelist items for clm4_5
namelist_files/namelist_definition.xsl ------------ Describes how to view the xml file as html
namelist_files/namelist_defaults_drydep.xml ------- List of default values for the dry deposition module.
namelist_files/use_cases -------------------------- Specific configurations that build-namelist uses
namelist_files/use_cases/README ------------------- File explaining the naming convention for use_cases
---------- Driver namelist files, duplicated information from cime/driver/cime_config
namelist_files/namelist_defaults_drv.xml ---------- List of default values for driver namelist defaults
namelist_files/namelist_defaults_drydep.xml ------- List of default values for dry deposition fields
namelist_files/namelist_defaults_fire_emis.xml ---- List of default values for fire emission fields
namelist_files/namelist_definition_drv.xml -------- Definition of all driver namelist items
namelist_files/namelist_definition_drv_flds.xml --- Definition of add driver fieldsnamelist items
---------- XML helper files
namelist_files/LogMessages.pm ---- Perl module to handle log output
namelist_files/checkmapfiles.ncl -- NCL script to check that all of the mapping files are valid
namelist_files/createMapEntry.pl -- Perl script to create a map entry for the
namelist_files/history_fields.xsl - Style sheet for history fields as created by script that lists all of the
history fields from the source files (../src/main/findHistFields.pl)

23
bld/build-namelist Executable file
View File

@ -0,0 +1,23 @@
#!/usr/bin/env perl
#-----------------------------------------------------------------------------------------------
#
# clm build-namelist driver
#
# Placing all of build-namelist into CLMBuildNamelist.pm means we can unit test the module.
#
require 5;
use strict;
BEGIN {
# ensure that the cesm create_X scripts can find CLMBuildNamelist.pm
use File::Basename qw(dirname);
use Cwd qw(abs_path);
my $dirname = dirname(abs_path($0));
my @dirs = ($dirname, );
unshift @INC, @dirs;
}
use CLMBuildNamelist qw(main);
CLMBuildNamelist::main();

198
bld/config_files/clm_phys_vers.pm Executable file
View File

@ -0,0 +1,198 @@
package config_files::clm_phys_vers;
my $pkg_nm = 'config_files::clm_phys_vers';
#-----------------------------------------------------------------------------------------------
#
# SYNOPSIS
#
# require config_files::clm_phys_vers;
#
# my $phys = config_files::clm_phys_vers->new("clm4_0");
# print $phys->as_float();
# print $phys->as_long();
# print $phys->as_string();
# print $phys->as_filename();
#
# DESCRIPTION
#
# Enter the physics version as a string, with a list of valid versions, and have the ability to convert it to
# different formats.
#
# COLLABORATORS: None
#
#-----------------------------------------------------------------------------------------------
#
# Date Author Modification
# 03/06/2014 Erik Kluzek creation
#
#--------------------------------------------------------------------------------------------
use strict;
use bigint;
#use warnings;
#use diagnostics;
my $major_mask = 1000000;
my $minor_mask = 1000;
my @version_strings = ( "clm4_0", "clm4_5", "clm5_0" );
my @version_long = ( 4*$major_mask, 4*$major_mask+5*$minor_mask, 5*$major_mask );
#-------------------------------------------------------------------------------
sub new {
# Constructor, enter version string as argument
my $class = shift;
my $vers_string = shift;
my $nm = "$class\:\:new";
my $self = {};
bless($self, $class);
$self->__validate_vers__( $vers_string );
$self->{'vers_string'} = $vers_string;
return( $self );
}
#-------------------------------------------------------------------------------
sub __validate_vers__ {
# Make sure the version string is a valid one
my $class = shift;
my $vers_string = shift;
my $found = undef;
foreach my $i (0..$#version_strings) {
if ( $vers_string eq $version_strings[$i] ) {
$found = 1;
last;
}
}
if ( ! defined($found) ) {
die "NOT a valid CLM version: $vers_string\n";
}
}
#-------------------------------------------------------------------------------
sub as_long {
# Return the physics version as a long
my $self = shift;
my $vers = shift;
if ( ! defined($vers) ) {
$vers = $self->{'vers_string'};
} else {
$self->__validate_vers__( $vers );
}
my $phys = undef;
for( my $i = 0; $i <= $#version_strings; $i++ ) {
if ( $vers eq $version_strings[$i] ) {
$phys = $version_long[$i];
last;
}
}
return( $phys );
}
#-------------------------------------------------------------------------------
sub as_float {
# Return the physics version as a float
my $self = shift;
my $long = $self->as_long();
my $major = int($long / $major_mask);
my $minor = int(($long - $major*$major_mask)/ $minor_mask);
my $rev = $long - $major*$major_mask - $minor*$minor_mask;
{
no bigint;
use bignum;
my $phys = $major*1.0 + $minor/10.0 + $rev / 10000.0;
return( $phys );
}
}
#-------------------------------------------------------------------------------
sub as_string {
# Return the physics version as a string
my $self = shift;
my $phys = $self->{'vers_string'};
return( $phys );
}
#-------------------------------------------------------------------------------
sub as_filename {
# Return the physics version string with clm4_5 and clm5_0 pointing to the same name
my $self = shift;
my $phys = undef;
if ( $self->as_long() < 5*$major_mask ) {
$phys = $self->as_string();
} else {
$phys = "clm4_5";
}
return( $phys );
}
#-----------------------------------------------------------------------------------------------
# Unit testing of above
#-----------------------------------------------------------------------------------------------
if ( ! defined(caller) && $#ARGV == -1 ) {
package phys_vers_unit_tester;
require Test::More;
Test::More->import( );
plan( tests=>13 );
sub testit {
print "unit tester\n";
my %lastv;
my @vers_list = ( "clm4_0", "clm4_5", "clm5_0" );
foreach my $vers ( @vers_list ) {
my $phys = config_files::clm_phys_vers->new($vers);
isa_ok($phys, "config_files::clm_phys_vers", "created clm_phys_vers object");
print "$vers: long: ".$phys->as_long()." float: ".$phys->as_float()." string: ".$phys->as_string()." file: ".$phys->as_filename()."\n";
if ( exists($lastv{"long"}) ) {
is( $phys->as_long() > $lastv{'long'}, 1, "Definition of long is not increasing\n" );
}
if ( exists($lastv{"float"}) ) {
is( $phys->as_float() > $lastv{'float'}, 1, "Definition of float is not increasing\n" );
}
# Check that also can get results of any valid value for long
foreach my $chvers ( @vers_list ) {
my $lvalue = $phys->as_long($chvers);
print "Long value of $chvers = $lvalue\n";
}
# Check that a bad value gives an error
eval { $phys->as_long('xxx'); };
like( $@, qr/NOT a valid CLM version:/, "check that a bad version fails" );
# Save last values to make sure increasing
$lastv{'long'} = $phys->as_long();
$lastv{'float'} = $phys->as_float();
}
my $phys = config_files::clm_phys_vers->new("clm4_0");
is( 4.0, $phys->as_float(), "Make sure clm4_0 correct float value" );
$phys = config_files::clm_phys_vers->new("clm4_5");
no bigint;
use bignum;
is( 4.5, $phys->as_float(), "Make sure clm4_5 correct float value" );
no bignum;
use bigint;
$phys = config_files::clm_phys_vers->new("clm5_0");
is( 5.0, $phys->as_float(), "Make sure clm5_0 correct float value" );
print "\nSuccessfully ran all tests\n";
}
}
#-----------------------------------------------------------------------------------------------
# Determine if you should run the unit test or if this is being called from a require statement
#-----------------------------------------------------------------------------------------------
if ( defined(caller) ) {
1 # to make use or require happy
} elsif ( $#ARGV == -1 ) {
&phys_vers_unit_tester::testit();
}

View File

@ -0,0 +1,7 @@
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="config_definition.xsl" ?>
<config_definition>
</config_definition>

View File

@ -0,0 +1,9 @@
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="config_definition.xsl" ?>
<config_definition>
<entry id="cppdefs" value="-DMEXICOCITY" />
</config_definition>

View File

@ -0,0 +1,10 @@
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="config_definition.xsl" ?>
<config_definition>
<entry id="bgc" value="cn" />
<entry id="crop" value="on" />
</config_definition>

View File

@ -0,0 +1,10 @@
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="config_definition.xsl" ?>
<config_definition>
<entry id="bgc" value="cn" />
<entry id="crop" value="on" />
</config_definition>

View File

@ -0,0 +1,9 @@
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="config_definition.xsl" ?>
<config_definition>
<entry id="cppdefs" value="-DVANCOUVER" />
</config_definition>

View File

@ -0,0 +1,72 @@
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<html>
<xsl:apply-templates/>
</html>
</xsl:template>
<xsl:template match="config_definition">
<head>
<title>CLM Configuration Definition</title>
</head>
<body>
<h2>CLM Configuration Definition</h2>
<table border="1" cellpadding="10">
<caption><font size="larger"><bold>CLM Physics Configurations</bold></font></caption>
<tr>
<th rowspan="2">Name</th>
<th rowspan="2">Value</th>
<th>Description</th>
</tr>
<tr>
<th>Valid Values</th>
</tr>
<xsl:apply-templates select="entry[@category='physics']"/>
</table>
<table border="1" cellpadding="10">
<caption><font size="larger"><bold>CLM Biogeochemistry Configurations</bold></font></caption>
<tr>
<th rowspan="2">Name</th>
<th rowspan="2">Value</th>
<th>Description</th>
</tr>
<tr>
<th>Valid Value</th>
</tr>
<xsl:apply-templates select="entry[@category='bgc']"/>
</table>
<table border="1" cellpadding="10">
<caption><font size="larger"><bold>Configuration Directories</bold></font></caption>
<tr>
<th rowspan="2">Name</th>
<th rowspan="2">Value</th>
<th>Description</th>
</tr>
<tr>
<th>Valid Value</th>
</tr>
<xsl:apply-templates select="entry[@category='directories']"/>
</table>
</body>
</xsl:template>
<xsl:template match="entry">
<tr>
<td rowspan="2"><font color="#ff0000"><xsl:value-of select="@id"/></font></td>
<td rowspan="2"><xsl:value-of select="@value"/></td>
<td><xsl:apply-templates/></td>
</tr>
<tr>
<td><b>Valid values: </b> <xsl:value-of select="@valid_values"/></td>
</tr>
</xsl:template>
</xsl:stylesheet>

View File

@ -0,0 +1,115 @@
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="config_definition.xsl" ?>
<config_definition>
<entry id="phys"
valid_values="clm4_0,clm4_5,clm5_0"
value="clm4_0"
category="physics">
Specifies either clm4_0, clm4_5, or clm5_0 physics
</entry>
<entry id="spinup"
valid_values="AD,exit,normal"
value="normal"
category="bgc">
CLM 4.0 Only. For CLM 4.5/5.0, spinup is controlled from build-namelist.
Spinup mode for the CN Carbon Nitrogen BGC model
AD turn on accelerated decomposition spinup for CN biogeochemistry model
exit jump from AD spinup mode to normal mode
normal no acceleration of decompositon (i.e. "final spinup")
</entry>
<entry id="snicar_frc"
valid_values="on,off"
value="off"
category="physics">
Toggle to turn on calculation of SNow and Ice Aerosol Radiation model (SNICAR) radiative forcing
(SNICAR_FRC .true.is EXPERIMENTAL NOT SUPPORTED!)
</entry>
<entry id="sitespf_pt"
valid_values=""
value="none"
category="physics">
Flag to turn on site specific special configuration flags for supported single
point resolutions. See the specific config_defaults_*.xml file for the special
settings that are set for a particular site.
</entry>
<entry id="bgc"
valid_values="none,cn,cndv"
value="none"
category="bgc">
CLM Biogeochemistry mode
none = Satellite Phenology (SP)
cn = Carbon Nitrogen model (CN)
(or CLM45BGC if phys=clm4_5/clm5_0, vsoilc_centbgc='on', and clm4me='on')
cndv = Carbon Nitrogen with Dynamic Global Vegetation Model (CNDV)
(or CLM45BGCDV if phys=clm4_5/clm5_0, vsoilc_centbgc='on', and clm4me='on')
</entry>
<entry id="crop"
valid_values="on,off"
value="off">
Toggle to turn on the prognostic crop model
</entry>
<entry id="clm_root"
value=""
category="directories">
Root directory of CLM source distribution (directory above CLM configure).
</entry>
<entry id="comp_intf"
valid_values="ESMF,MCT,cpl_\$COMP"
value="MCT"
category="directories">
Component framework interface to use
(Model Coupling Toolkit, or Earth System Modeling Framework)
</entry>
<entry id="usr_src"
value=""
list="1"
category="directories">
User source directories to prepend to the filepath. Multiple directories
are specified as a comma separated list with no embedded white space.
Normally this is SourceMods/src.clm in your case.
</entry>
<entry id="cppdefs"
value=""
category="physics">
User specified CPP defines to append to Makefile defaults.
Note: It's recommended to use configure options to set standard CPP values rather
than defining them here.
</entry>
<entry id="maxpft" value=""
valid_values="17,21,25"
category="physics">
Maximum number of plant function types (PFT) per gridcell
(Setting maxpft to anything other than 17 (or 25 for clm4_5/clm5_0 CROP or 21 for clm4_0 CROP)
is EXPERIMENTAL AND NOT SUPPORTED!)
(Either 17 for a standard vegetated case or
21 for prognostic clm4_0 CROP or 25
for prognostic clm4_5/clm5_0 CROP)
</entry>
<entry id="nofire"
valid_values="on,off"
value="off"
category="bgc">
Toggle to make wild-fires inactive for biogeochemistry=CN mode
</entry>
<entry id="noio"
valid_values="on,off"
value="off"
category="physics">
Toggle to turn all history output completely OFF (possibly used for testing)
</entry>
</config_definition>

View File

@ -0,0 +1,45 @@
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="config_definition.xsl" ?>
<config_definition>
<entry id="phys"
valid_values="clm4_0,clm4_5,clm5_0"
value="clm4_5"
category="physics">
Specifies either clm4_0, clm4_5, or clm5_0 physics
</entry>
<entry id="clm_root"
value=""
category="directories">
Root directory of CLM source distribution (directory above CLM configure).
</entry>
<entry id="comp_intf"
valid_values="ESMF,MCT,cpl_\$COMP"
value="MCT"
category="directories">
Component framework interface to use
(Model Coupling Toolkit, or Earth System Modeling Framework)
</entry>
<entry id="usr_src"
value=""
list="1"
category="directories">
User source directories to prepend to the filepath. Multiple directories
are specified as a comma separated list with no embedded white space.
Normally this is SourceMods/src.clm in your case.
</entry>
<entry id="cppdefs"
value=""
category="physics">
User specified CPP defines to append to Makefile defaults.
Note: It's recommended to use configure options to set standard CPP values rather
than defining them here.
</entry>
</config_definition>

756
bld/configure vendored Executable file
View File

@ -0,0 +1,756 @@
#!/usr/bin/env perl
#-----------------------------------------------------------------------------------------------
#
# configure
#
#
# This utility allows the CLM user to specify compile-time configuration
# options via a commandline interface. The output from configure is a
# Makefile and a cache file that contains all configuration parameters
# required to produce the Makefile. A subsequent invocation of configure
# can use the cache file as input (via the -defaults argument) to reproduce
# the CLM configuration contained in it. Note that when a cache file is
# used to set default values only the model parameters are used. The
# parameters that are platform dependent (e.g., compiler options, library
# locations, etc) are ignored.
#
# As the build time configurable options of CLM are changed, this script
# must also be changed. Thus configure is maintained under revision
# control in the CLM source tree and it is assumed that only the version of
# configure in the source tree will be used to build CLM. Thus we assume
# that the root of the source tree can be derived from the location of this
# script.
#
#-----------------------------------------------------------------------------------------------
use strict;
#use warnings;
#use diagnostics;
use Cwd qw(getcwd abs_path);
use English;
use Getopt::Long;
use IO::File;
use IO::Handle;
use File::Copy;
#-----------------------------------------------------------------------------------------------
sub usage {
die <<EOF;
SYNOPSIS
configure [options]
Configure CLM in preparation to be built.
OPTIONS
User supplied values are denoted in angle brackets (<>). Any value that contains
white-space must be quoted. Long option names may be supplied with either single
or double leading dashes. A consequence of this is that single letter options may
NOT be bundled.
-bgc <name> Build CLM with BGC package [ none | cn | cndv ]
(default is none).
-cache <file> Name of output cache file (default: config_cache.xml).
-cachedir <file> Name of directory where output cache file is written
(default: CLM build directory).
-cimeroot <dir> REQUIRED: Path to cime directory
-clm_root <dir> Root directory of clm source code
(default: directory above location of this script)
-cppdefs <string> A string of user specified CPP defines. Appended to
Makefile defaults. e.g. -cppdefs '-DVAR1 -DVAR2'
-crop <name> Toggle for prognostic crop model. [on | off] (default is off)
(can ONLY be turned on when BGC type is CN or CNDV)
-comp_intf <name> Component interface to use (ESMF or MCT) (default MCT)
-defaults <file> Specify full path to a configuration file which will be used
to supply defaults instead of the defaults in bld/config_files.
This file is used to specify model configuration parameters only.
Parameters relating to the build which are system dependent will
be ignored.
-help [or -h] Print usage to STDOUT.
-nofire Turn off wildfires for BGC setting of CN
(default includes fire for CN)
-noio Turn history output completely off (typically for testing).
-phys <name> Value of clm4_0, clm4_5, or clm5_0 (default is clm4_0)
-silent [or -s] Turns on silent mode - only fatal messages issued.
-sitespf_pt <name> Setup for the given site specific single-point resolution.
-snicar_frc <name> Turn on SNICAR radiative forcing calculation. [on | off]
(default is off)
-spinup <name> CLM 4.0 Only. For CLM 4.5, spinup is controlled from build-namelist.
Turn on given spinup mode for BGC setting of CN (level)
AD Turn on Accelerated Decomposition from (2)
bare-soil
exit Jump directly from AD spinup to normal mode (1)
normal Normal decomposition ("final spinup mode") (0)
(default)
The recommended sequence is 2-1-0
-usr_src <dir1>[,<dir2>[,<dir3>[...]]]
Directories containing user source code.
-verbose [or -v] Turn on verbose echoing of settings made by configure.
-version Echo the SVN tag name used to check out this CLM distribution.
EOF
}
#-----------------------------------------------------------------------------------------------
# Setting autoflush (an IO::Handle method) on STDOUT helps in debugging. It forces the test
# descriptions to be printed to STDOUT before the error messages start.
*STDOUT->autoflush();
#-----------------------------------------------------------------------------------------------
# Set the directory that contains the CLM configuration scripts. If the configure command was
# issued using a relative or absolute path, that path is in $ProgDir. Otherwise assume the
# command was issued from the current working directory.
(my $ProgName = $0) =~ s!(.*)/!!; # name of this script
my $ProgDir = $1; # name of directory containing this script -- may be a
# relative or absolute path, or null if the script is in
# the user's PATH
my $cwd = getcwd(); # current working directory
my $cfgdir; # absolute pathname of directory that contains this script
if ($ProgDir) {
$cfgdir = abs_path($ProgDir);
} else {
$cfgdir = $cwd;
}
#-----------------------------------------------------------------------------------------------
# Save commandline
my $commandline = "$cfgdir/configure @ARGV";
#-----------------------------------------------------------------------------------------------
# Parse command-line options.
my %opts = (
cache => "config_cache.xml",
phys => "clm4_0",
nofire => undef,
noio => undef,
cimeroot => undef,
clm_root => undef,
spinup => "normal",
);
GetOptions(
"spinup=s" => \$opts{'spinup'},
"bgc=s" => \$opts{'bgc'},
"cache=s" => \$opts{'cache'},
"cachedir=s" => \$opts{'cachedir'},
"snicar_frc=s" => \$opts{'snicar_frc'},
"cimeroot=s" => \$opts{'cimeroot'},
"clm_root=s" => \$opts{'clm_root'},
"cppdefs=s" => \$opts{'cppdefs'},
"comp_intf=s" => \$opts{'comp_intf'},
"defaults=s" => \$opts{'defaults'},
"clm4me=s" => \$opts{'clm4me'},
"h|help" => \$opts{'help'},
"nofire" => \$opts{'nofire'},
"noio" => \$opts{'noio'},
"phys=s" => \$opts{'phys'},
"snicar_frc=s" => \$opts{'snicar_frc'},
"s|silent" => \$opts{'silent'},
"sitespf_pt=s" => \$opts{'sitespf_pt'},
"usr_src=s" => \$opts{'usr_src'},
"v|verbose" => \$opts{'verbose'},
"version" => \$opts{'version'},
"crop=s" => \$opts{'crop'},
) or usage();
# Give usage message.
usage() if $opts{'help'};
# Echo version info.
version($cfgdir) if $opts{'version'};
# Check for unparsed arguments
if (@ARGV) {
print "ERROR: unrecognized arguments: @ARGV\n";
usage();
}
# Define 3 print levels:
# 0 - only issue fatal error messages
# 1 - only informs what files are created (default)
# 2 - verbose
my $print = 1;
if ($opts{'silent'}) { $print = 0; }
if ($opts{'verbose'}) { $print = 2; }
my $eol = "\n";
my %cfg = (); # build configuration
#-----------------------------------------------------------------------------------------------
# Make sure we can find required perl modules and configuration files.
# Look for them in the directory that contains the configure script.
my $cimeroot = $opts{'cimeroot'};
if ( ! defined($cimeroot) ) {
$cimeroot = "$cfgdir/../cime";
if ( -d $cimeroot ) {
} elsif ( -d "$cfgdir/../../../cime" ) {
$cimeroot = "$cfgdir/../../../cime";
} else {
die <<"EOF";
** Cannot find the root of the cime directory enter it using the -cimeroot option
Did you run the checkout_externals scripts?
EOF
}
}
my $casecfgdir = "$cimeroot/scripts/Tools";
my $perl5lib = "$cimeroot/utils/perl5lib/";
# The Build::Config module provides utilities to store and manipulate the configuration.
my $file = "$perl5lib/Build/Config.pm";
(-f "$file") or die <<"EOF";
** Cannot find perl module \"Build/Config.pm\" in path
\"$file\" **
EOF
#-----------------------------------------------------------------------------------------------
# Add $cfgdir/perl5lib to the list of paths that Perl searches for modules
my @dirs = ( $cfgdir, "$perl5lib", $casecfgdir);
unshift @INC, @dirs;
require Build::Config;
require config_files::clm_phys_vers;
# Get the physics version
my $phys = config_files::clm_phys_vers->new($opts{'phys'});
# Check for the physics specific configuration definition file.
my $phys_string = $phys->as_filename();
my $config_def_file = "config_definition_$phys_string.xml";
(-f "$cfgdir/config_files/$config_def_file") or die <<"EOF";
** Cannot find configuration definition file \"$config_def_file\" in directory
\"$cfgdir/config_files\" **
EOF
# The configuration defaults file modifies the generic defaults in the configuration
# definition file. Note that the -defaults option has precedence over all other options.
my $config_defaults_file;
my $std_config_defaults_file = "$cfgdir/config_files/config_defaults.xml";
if ($opts{'defaults'}) {
$config_defaults_file = $opts{'defaults'};
} elsif (defined($opts{'sitespf_pt'}) and $phys->as_long() == $phys->as_long( "clm4_0" ) ) {
$config_defaults_file = "$cfgdir/config_files/config_defaults_$opts{'sitespf_pt'}.xml";
if ( ! -f $config_defaults_file ) {
$config_defaults_file = "$std_config_defaults_file";
}
} else {
$config_defaults_file = "$std_config_defaults_file";
}
(-f "$config_defaults_file") or die <<"EOF";
** Cannot find configuration defaults file \"$config_defaults_file\" **
EOF
if ($print>=2) { print "Setting CLM configuration script directory to $cfgdir$eol"; }
if ($print>=2) { print "Using configuration defaults file $config_defaults_file$eol"; }
# Initialize the configuration. The $config_def_file provides the definition of a CLM
# configuration, and the $config_defaults_file provides default values for a specific CLM
# configuration. $cfg_ref is a reference to the new configuration object.
my $cfg_ref = Build::Config->new("$cfgdir/config_files/$config_def_file",
"$config_defaults_file");
#-----------------------------------------------------------------------------------------------
# CLM root directory.
my $clm_root;
if ( ! defined($opts{'clm_root'} ) ) {
$clm_root = abs_path("$cfgdir/..");
} else {
$clm_root = $opts{'clm_root'};
}
if ( &is_valid_directory( "$clm_root/src", allowEnv=>0 ) ) {
$cfg_ref->set('clm_root', $clm_root);
} else {
die <<"EOF";
** Invalid CLM root directory: $clm_root
**
** The CLM root directory must contain the subdirectory /src/.
** clm_root can be entered on the command line or it will be derived
** from the location of this script.
EOF
}
if ($print>=2) { print "Setting CLM root directory to $clm_root$eol"; }
#-----------------------------------------------------------------------------------------------
# CLM build directory is current directory
my $clm_bld = `pwd`;
chomp( $clm_bld );
# Make sure directory is valid
if ( ! &is_valid_directory( $clm_bld ) and ! mkdirp($clm_bld)) {
die <<"EOF";
** Could not create the specified CLM build directory: $clm_bld
EOF
}
if ($print>=2) { print "Setting CLM build directory to $clm_bld$eol"; }
#-----------------------------------------------------------------------------------------------
# User source directories.
my $usr_src = '';
if (defined $opts{'usr_src'}) {
my @dirs = split ',', $opts{'usr_src'};
my @adirs;
while ( my $dir = shift @dirs ) {
if (&is_valid_directory( "$dir", allowEnv=>0 ) ) {
push @adirs, $dir;
} else {
die "** User source directory does not exist: $dir\n";
}
}
$usr_src = join ',', @adirs;
$cfg_ref->set('usr_src', $usr_src);
}
if ($print>=2) { print "Setting user source directories to $usr_src$eol"; }
#-----------------------------------------------------------------------------------------------
# configuration cache directory and file.
my $config_cache_dir;
my $config_cache_file;
if (defined $opts{'cachedir'}) {
$config_cache_dir = abs_path($opts{'cachedir'});
}
else {
$config_cache_dir = $clm_bld;
}
if (&is_valid_directory( $config_cache_dir, allowEnv=>0 ) or mkdirp($config_cache_dir)) {
$config_cache_file = "$config_cache_dir/$opts{'cache'}";
} else {
die <<"EOF";
** Could not create the specified directory for configuration cache file: $config_cache_dir
EOF
}
if ($print>=2) { print "The configuration cache file will be created in $config_cache_file$eol"; }
#-----------------------------------------------------------------------------------------------
# physics
$cfg_ref->set('phys', $opts{'phys'});
my $phys_string = $phys->as_string();
if ($print>=2) {
if( defined($opts{'phys'}) ) {
print "Using version $phys_string physics.$eol";
}
}
#-----------------------------------------------------------------------------------------------
# supported single point configurations
my $sitespf_pt = undef;
if ($phys->as_long() == $phys->as_long("clm4_0") ) {
if( defined($opts{'sitespf_pt'}) ) {
$cfg_ref->set('sitespf_pt', $opts{'sitespf_pt'});
}
$sitespf_pt = $cfg_ref->get('sitespf_pt');
if ($print>=2) {
if( defined($opts{'sitespf_pt'}) ) {
print "Using $sitespf_pt for supported single point configuration.$eol";
}
}
}
#-----------------------------------------------------------------------------------------------
# NOIO option
my $noio = undef;
if ($phys->as_long() == $phys->as_long("clm4_0") ) {
if (defined $opts{'noio'}) {
$cfg_ref->set('noio', "on" );
}
$noio = $cfg_ref->get('noio');
if ($print>=2) {
if ( $noio eq "on") { print "ALL history output is turned OFF.$eol"; }
}
}
#-----------------------------------------------------------------------------------------------
# BGC option
my $bgc_mode = undef;
if ($phys->as_long() == $phys->as_long("clm4_0") ) {
if (defined $opts{'bgc'}) {
$cfg_ref->set('bgc', $opts{'bgc'});
}
$bgc_mode = $cfg_ref->get('bgc');
if ($print>=2) { print "Using $bgc_mode for bgc.$eol"; }
if ( $bgc_mode eq "casa" ) {
print "Warning:: bgc=casa is NOT validated / scientifically supported.$eol";
}
}
# NOFIRE option -- currently only in bgc=CN
my $nofire = undef;
if ($phys->as_long() == $phys->as_long("clm4_0") ) {
if (defined $opts{'nofire'}) {
$cfg_ref->set('nofire', "on" );
}
$nofire = $cfg_ref->get('nofire');
if ( ($nofire eq "on") && ($bgc_mode ne "cn") ) {
die <<"EOF";
** Cannot turn nofire mode on -- without cn for bgc mode**
EOF
}
if ($print>=2 && $bgc_mode =~ /^cn/ ) {
if ( $nofire eq "off") { print "Wildfires are active as normal.$eol"; }
else { print "Wildfires are turned off.$eol"; }
}
}
#-----------------------------------------------------------------------------------------------
# SPINUP option for BGC/CN mode only
my $spinup = undef;
if ($phys->as_long() == $phys->as_long("clm4_0") ) {
if (defined $opts{'spinup'}) {
$cfg_ref->set('spinup', $opts{'spinup'});
}
$spinup = $cfg_ref->get('spinup');
if ( ($spinup ne "normal" ) && ($bgc_mode ne "cn") ) {
die <<"EOF";
** Cannot turn spinup mode on -- without cn for bgc mode**
**
** Set the bgc mode by the following means from highest to lowest precedence:
** * by the command-line option -bgc cn
** * by a default configuration file, specified by -defaults
EOF
}
if ($print>=2) { print "Using $spinup for spinup for cn mode.$eol"; }
} else {
if ($opts{'spinup'} ne "normal") {
die <<"EOF";
** Spinup mode can only be controlled with configure for CLM 4.0.
** For CLM 4.5 use the bgc_spinup option to build-namelist
EOF
}
}
#-----------------------------------------------------------------------------------------------
# comp_intf option
if (defined $opts{'comp_intf'}) {
$cfg_ref->set('comp_intf', $opts{'comp_intf'});
}
my $comp_intf = $cfg_ref->get('comp_intf');
if ($print>=2) { print "Using $comp_intf for comp_intf.$eol"; }
#-----------------------------------------------------------------------------------------------
# CROP option
my $crpmode = undef;
my $crop = undef;
if ($phys->as_long() == $phys->as_long("clm4_0") ) {
if (defined $opts{'crop'}) {
$cfg_ref->set('crop', $opts{'crop'});
}
$crpmode = "nocrop";
$crop = $cfg_ref->get('crop');
if ( $crop eq "on" ) {
$crpmode = "crop";
}
if ( ($crop eq "on" ) && ($bgc_mode ne "cn") && ($bgc_mode ne "cndv") ) {
die <<"EOF";
** Cannot turn crop mode on -- without some form of cn for bgc mode**
**
** Set the bgc mode by the following means from highest to lowest precedence:
** * by the command-line options -bgc cn
** * by a default configuration file, specified by -defaults
EOF
}
}
#-----------------------------------------------------------------------------------------------
# MAXPFT option
my %maxpatchpft;
my $maxpft = undef;
if ($phys->as_long() == $phys->as_long("clm4_0") ) {
$maxpatchpft{'crop'} = 21;
$maxpatchpft{'nocrop'} = 17;
$cfg_ref->set('maxpft', $maxpatchpft{$crpmode} );
$maxpft = $cfg_ref->get('maxpft');
if ( (($bgc_mode eq "cn") || ($bgc_mode eq "cndv")) && ($maxpft != $maxpatchpft{$crpmode}) ) {
die <<"EOF";
** For CN or CNDV BGC mode you MUST set max patch PFT's to $maxpatchpft{$crpmode}
**
** When the crop model is on then it must be set to $maxpatchpft{'crop'} otherwise to $maxpatchpft{'nocrop'}
** Set the bgc mode, crop and maxpft by the following means from highest to lowest precedence:
** * by the command-line options -bgc, -crop and -maxpft
** * by a default configuration file, specified by -defaults
**
EOF
}
if ( $maxpft > $maxpatchpft{$crpmode} ) {
die <<"EOF";
** Max patch PFT's can NOT exceed $maxpatchpft{$crpmode}
**
** Set maxpft by the following means from highest to lowest precedence:
** * by the command-line options -maxpft
** * by a default configuration file, specified by -defaults
**
EOF
}
if ( $maxpft != $maxpatchpft{$crpmode} ) {
print "Warning:: running with maxpft NOT equal to $maxpatchpft{$crpmode} is " .
"NOT validated / scientifically supported.$eol";
}
if ($print>=2) { print "Using $maxpft for maxpft.$eol"; }
}
#-----------------------------------------------------------------------------------------------
# SNICAR_FRC option
my $snicar_frc = undef;
if ($phys->as_long() == $phys->as_long("clm4_0") ) {
if (defined $opts{'snicar_frc'}) {
$cfg_ref->set('snicar_frc', $opts{'snicar_frc'});
}
$snicar_frc = $cfg_ref->get('snicar_frc');
if ($print>=2) { print "Using $snicar_frc for snicar_frc.$eol"; }
}
#-----------------------------------------------------------------------------------------------
# Makefile configuration #######################################################################
#-----------------------------------------------------------------------------------------------
#-----------------------------------------------------------------------------------------------
# Name of CLM executable.
my $clm_exe = "clm";
if ($print>=2) { print "Name of CLM executable: $clm_exe.$eol"; }
#-----------------------------------------------------------------------------------------------
# For the CPP tokens, start with the defaults (from defaults file) and append the specifications
# from the commandline. That way the user can override defaults since the commandline versions
# occur last.
my $usr_cppdefs = $cfg_ref->get('cppdefs');
if (defined $opts{'cppdefs'}) {
$usr_cppdefs .= " $opts{'cppdefs'}";
print "Warning:: running with user defined cppdefs is NOT validated / " .
"scientifically supported.$eol";
}
$cfg_ref->set('cppdefs', $usr_cppdefs);
if ($usr_cppdefs and $print>=2) { print "Default and user CPP definitions: \'$usr_cppdefs\'$eol";}
# The following CPP macro definitions are used to implement the compile-time options. They are
# determined by the configuration parameters that have been set above. They will be appended to
# the CPP definitions that were explicitly set in the defaults file or by the user on the commandline.
my $cfg_cppdefs = '';
if ($phys->as_long() == $phys->as_long("clm4_0") ) {
$cfg_cppdefs .= " -DMAXPATCH_PFT=$maxpft";
if ($bgc_mode eq 'cn') {
$cfg_cppdefs .= " -DCN";
}
if ($crop eq 'on') {
$cfg_cppdefs .= " -DCROP";
}
if ($bgc_mode eq 'cndv') {
$cfg_cppdefs .= " -DCNDV -DCN";
}
if ($nofire eq 'on') {
$cfg_cppdefs .= " -DNOFIRE";
}
if ($noio eq 'on') {
$cfg_cppdefs .= " -D_NOIO";
}
if ($spinup eq 'AD') {
$cfg_cppdefs .= " -DAD_SPINUP";
} elsif ($spinup eq 'exit') {
$cfg_cppdefs .= " -DEXIT_SPINUP";
}
if ( $snicar_frc eq 'on' ) {
$cfg_cppdefs .= " -DSNICAR_FRC";
}
} elsif ($phys->as_long() >= $phys->as_long("clm4_5") ) {
# clm4_5 cppdefs -- SHOULD NOT BE ANY!
if ( $cfg_cppdefs ne '' ) {
die <<"EOF";
** CPP definitions should be empty for clm5_0 and is NOT **
EOF
}
} elsif ($phys->as_long() == $phys->as_long("clm5_0") ) {
# clm5_0 cppdefs -- SHOULD NOT BE ANY!
if ( $cfg_cppdefs ne '' ) {
die <<"EOF";
** CPP definitions should be empty for clm5_0 and is NOT **
EOF
}
} else {
# this should NOT happen
die <<"EOF";
** Bad CLM physics version **
EOF
}
# CPP defines to put on Makefile
my $make_cppdefs = "$usr_cppdefs $cfg_cppdefs";
if ($print>=2) { print "CPP definitions set by configure: \'$cfg_cppdefs\'$eol"; }
#-----------------------------------------------------------------------------------------------
# Write configuration files ####################################################################
#-----------------------------------------------------------------------------------------------
my $fp_filename = 'Filepath'; # name of output filepath file
my $cpp_filename = 'CESM_cppdefs'; # name of output file for clm's cppdefs in cesm
# Write the filepath file for cesm.
write_filepath_cesmbld("$clm_bld/$fp_filename", $cfg_ref, $phys, allowEnv=>0 );
if ($print>=2) { print "creating $clm_bld/$fp_filename\n"; }
# Write the file for clm's cppdefs needed in cesm.
write_cppdefs("$clm_bld/$cpp_filename", $make_cppdefs);
if ($print>=2) { print "creating $clm_bld/$cpp_filename\n"; }
# Write the configuration file.
$cfg_ref->write_file($config_cache_file, $commandline);
if ($print>=2) { print "creating $config_cache_file\n"; }
#-----------------------------------------------------------------------------------------------
# Done
chdir( $cwd ) || die <<"EOF";
** Trouble changing directory back to $cwd
**
EOF
if ($print) { print "CLM configure done.\n"; }
exit;
#-----------------------------------------------------------------------------------------------
# FINISHED ####################################################################################
#-----------------------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
sub write_filepath_cesmbld
{
my ($file, $cfg_ref, $phys, %opts) = @_;
my $fh = new IO::File;
$fh->open(">$file") or die "** can't open filepath file: $file\n";
# configuration parameters used to determine paths
my $usr_src = $cfg_ref->get('usr_src');
my $clm_root = $cfg_ref->get('clm_root');
# User specified source directories.
if ($usr_src =~ /\S+/) {
my @dirs = split ',', $usr_src;
while ( my $dir = shift @dirs ) {
print $fh "$dir\n";
}
} else {
print $fh "../SourceMods/src.clm\n";
}
if ($phys->as_long() == $phys->as_long("clm4_0") ) {
# source root
my $srcdir = "$clm_root/src_clm40";
if ( ! &is_valid_directory( "$srcdir", %opts ) ) { die "** source directory does not exist: $srcdir\n"; }
# source directories under root
my @dirs = ( "main", "biogeophys", "biogeochem" );
foreach my $dir ( @dirs ) {
if ( &is_valid_directory( "$srcdir/$dir", %opts ) ) {
print $fh "$srcdir/$dir\n";
} else {
die "** source directory does not exist: $srcdir/$dir\n";
}
}
} else {
# source root
my $srcdir = "$clm_root/src";
if ( ! &is_valid_directory( "$srcdir", %opts ) ) { die "** source directory does not exist: $srcdir\n"; }
# source directories under root
my @dirs = ( "main",
"biogeophys",
"biogeochem",
"soilbiogeochem",
"dyn_subgrid",
"init_interp",
"fates",
"fates/main",
"fates/biogeophys",
"fates/biogeochem",
"fates/fire",
"fates/parteh",
"utils",
"cpl" );
foreach my $dir ( @dirs ) {
if ( &is_valid_directory( "$srcdir/$dir", %opts ) ) {
print $fh "$srcdir/$dir\n";
} else {
die "** source directory does not exist: $srcdir/$dir\n";
}
}
}
$fh->close;
}
#-------------------------------------------------------------------------------
sub write_cppdefs
{
my ($file, $make_cppdefs) = @_;
my $fh = new IO::File;
$fh->open(">$file") or die "** can't open cpp defs file: $file\n";
print $fh "$make_cppdefs\n";
$fh->close;
}
#-------------------------------------------------------------------------------
sub mkdirp {
my ($dir) = @_;
my (@dirs) = split /\//, $dir;
my (@subdirs, $path);
# if $dir is absolute pathname then @dirs will start with ""
if ($dirs[0] eq "") { push @subdirs, shift @dirs; }
while ( @dirs ) { # check that each subdir exists and mkdir if it doesn't
push @subdirs, shift @dirs;
$path = join '/', @subdirs;
unless (-d $path or mkdir($path, 0777)) { return 0; }
}
return 1;
}
#-------------------------------------------------------------------------------
sub version {
# The version is found in CLM's ChangeLog file.
# $cfgdir is set by the configure script to the name of its directory.
my ($cfgdir) = @_;
my $logfile = "$cfgdir/../doc/ChangeLog";
my $fh = IO::File->new($logfile, '<') or die "** can't open ChangeLog file: $logfile\n";
while (my $line = <$fh>) {
if ($line =~ /^Tag name:\s*[clm0-9_.-]*\s*[toin]*\s*([cesmclm0-9_.-]+)$/ ) {
print "$1\n";
exit;
}
}
}
#-------------------------------------------------------------------------------
sub is_valid_directory {
#
# Validate that the input is a valid existing directory.
#
my ($dir, %opts) = @_;
my $nm = "is_valid_directory";
my $valid = 0;
if ( -d $dir ) { $valid = 1; }
return( $valid );
}

13
bld/env_run.xml Normal file
View File

@ -0,0 +1,13 @@
<?xml version="1.0"?>
<config_definition>
<!--
Sample env_run.xml file that allows build-namelist to be run for testing in this directory.
-->
<entry id="DIN_LOC_ROOT" value="MYDINLOCROOT" />
<entry id="GLC_TWO_WAY_COUPLING" value="FALSE" />
</config_definition>

358
bld/listDefaultNamelist.pl Executable file
View File

@ -0,0 +1,358 @@
#!/usr/bin/env perl
#=======================================================================
#
# This is a script to list the missing files in your CESM inputdata area
# for a list of resolutions and model configurations. The list goes
# out to the file: clm.input_data_list. The check_input_data script
# can then be used to get this list of files from the SVN inputdata
# repository.
#
# Usage:
#
# listDefaultNamelist.pl [options]
#
# To get help on options and usage:
#
# listDefaultNamelist.pl -help
#
# To then get the files from the CESM SVN repository:
#
# ../../cime/scripts/Tools/check_input_data -datalistdir . -export
#
#=======================================================================
use strict;
use Cwd qw(getcwd abs_path);
use Getopt::Long;
use English;
#use diagnostics;
#-----------------------------------------------------------------------------------------------
my $ProgName;
($ProgName = $PROGRAM_NAME) =~ s!(.*)/!!; # name of program
my $ProgDir = $1; # name of directory where program lives
my $cwd = getcwd(); # current working directory
my $cfgdir;
my $printTimes = 0;
if ($ProgDir) { $cfgdir = $ProgDir; }
else { $cfgdir = $cwd; }
#-----------------------------------------------------------------------------------------------
# Add $cfgdir to the list of paths that Perl searches for modules
my @dirs = ( "$cfgdir", "../../../cime/utils/perl5lib" );
unshift @INC, @dirs;
require queryDefaultXML;
# Defaults
my $cesmroot = abs_path( "$cfgdir/../../../");
# The namelist defaults file contains default values for all required namelist variables.
my @nl_defaults_files = ( "$cfgdir/namelist_files/namelist_defaults_overall.xml",
"$cfgdir/namelist_files/namelist_defaults_drv.xml",
);
my $list = "clm.input_data_list";
my %list_of_all_files;
sub usage {
die <<EOF;
SYNOPSIS
$ProgName [options]
OPTIONS
-help [or -h] Display this help.
-csmdata [or -d] Path to CSMDATA.
-res "resolution1,resolution2,..." List of resolution to use for files.
(At least one resolution is required)
(If res is "all" will run over all resolutions)
-usrdat "name" Allow resolution to be the given clm user-data name
-silent [or -s] Do not do any extra printing.
EXAMPLES
List all the files needed for resolution 10x15 to the file $list.
$ProgName -res 10x15
List all the files needed for resolutions 10x15,4x5, and 64x128 from jaguar.
with silent mode on so no extra printing is done:
$ProgName -res 10x15,4x5,64x128 -s
to then read the resulting clm.input_data_list file and retreive the files
../../cime/scripts/Tools/check_input_data -datalistdir . -export
EOF
}
#-----------------------------------------------------------------------------------------------
sub GetListofNeededFiles {
#
# Get list of files that are needed to be copied to disk from the XML file.
#
my $inputopts_ref = shift;
my $settings_ref = shift;
my $files_ref = shift;
my $defaults_ref = &queryDefaultXML::ReadDefaultXMLFile( $inputopts_ref, $settings_ref );
my @keys = keys(%$defaults_ref);
my $csmdata = $$inputopts_ref{'csmdata'};
my $printing = $$inputopts_ref{'printing'};
foreach my $var ( @keys ) {
my $value = $$defaults_ref{$var}{'value'};
my $isafile = $$defaults_ref{$var}{'isfile'};
# If is a file
if ( $isafile ) {
$value =~ m#$csmdata/(.+?)/([^/]+)$#;
my $dir = $1;
my $file = $2;
# If file is already in the list then do NOT do anything
if ( defined($list_of_all_files{"$dir/$file"} ) ) {
# Test that this file exists
} elsif ( -f "$value" ) {
print "File $value exists\n" if $printing;
$list_of_all_files{"$dir/$file"} = 1;
} else {
# If doesn't exist add it to the list of files to copy
my $cfile = $$inputopts_ref{'scpfrom'} . "$dir/$file";
my @dfiles;
if ( defined($$files_ref{$dir}) ) {
my $dir_ref = $$files_ref{$dir};
@dfiles = @$dir_ref;
my $match = 0;
foreach my $i ( @dfiles ) {
if ( $i eq $cfile ) { $match = 1; }
}
if ( $match == 0 ) { push( @dfiles, $cfile ); }
} else {
@dfiles = ( "$cfile" );
}
if ( ! defined($$files_ref{$dir}) ) {
print " ADD $cfile to list to copy\n";
}
$$files_ref{$dir} = \@dfiles;
$list_of_all_files{"$dir/$file"} = 0;
}
}
}
$printTimes++;
}
#-----------------------------------------------------------------------------------------------
my %opts = (
res => undef,
silent => undef,
csmdata => "default",
list => $list,
usrdat => undef,
help => undef,
phys => "clm4_5",
);
my $cmdline = "@ARGV";
GetOptions(
"d|csmdata=s" => \$opts{'csmdata'},
"r|res=s" => \$opts{'res'},
"s|silent" => \$opts{'silent'},
"u|usrdat=s" => \$opts{'usrdat'},
"h|elp" => \$opts{'help'},
) or usage();
# Check for unparsed arguments
if (@ARGV) {
print "ERROR: unrecognized arguments: @ARGV\n";
usage();
}
if ( $opts{'help'} ) {
usage();
}
# Set if should do extra printing or not (if silent mode is not set)
my $printing = 1;
if ( defined($opts{'silent'}) ) {
$printing = 0;
}
#
# Check for required arguments
#
foreach my $req ( "res", "list" ) {
if ( ! defined($opts{$req}) ) {
print "ERROR: $req NOT set and it is a required argument\n";
usage();
}
}
my %inputopts;
my @nl_definition_files = (
"$cfgdir/namelist_files/namelist_definition_$opts{'phys'}.xml"
);
$inputopts{'nldef_files'} = \@nl_definition_files;
$inputopts{'empty_cfg_file'} = "$cfgdir/config_files/config_definition_$opts{'phys'}.xml";
my $definition = Build::NamelistDefinition->new( $nl_definition_files[0] );
foreach my $nl_defin_file ( @nl_definition_files ) {
$definition->add( "$nl_defin_file" );
}
my $cfg = Build::Config->new( $inputopts{'empty_cfg_file'} );
# Resolutions...
my @resolutions;
if ( $opts{'res'} eq "all" ) {
@resolutions = $definition->get_valid_values( "res", 'noquotes'=>1 );
} else {
@resolutions = split( /,/, $opts{'res'} );
}
# Input options
push @nl_defaults_files, "$cfgdir/namelist_files/namelist_defaults_$opts{'phys'}.xml";
if ( defined($opts{'usrdat'}) ) {
push @nl_defaults_files, "$cfgdir/namelist_files/namelist_defaults_usr_files.xml";
}
$inputopts{'files'} = \@nl_defaults_files;
$inputopts{'printing'} = $printing;
$inputopts{'ProgName'} = $ProgName;
$inputopts{'cmdline'} = $cmdline;
$inputopts{'cfgdir'} = $cfgdir;
if ( $opts{'csmdata'} eq "default" && $ENV{'CSMDATA'} ne "" ) {
$opts{'csmdata'} = $ENV{'CSMDATA'};
}
$inputopts{'csmdata'} = $opts{'csmdata'};
$inputopts{'config'} = "noconfig";
my %files;
#
# Loop over all resolutions asked for: 1.9x2.5, 10x15, 64x128 etc.
#
foreach my $res ( @resolutions ) {
if ( ! $definition->is_valid_value( "res", "'$res'" ) && $res ne $opts{'usrdat'} ) {
die "ERROR: Input resolution: $res is NOT a valid resolution\n";
}
$inputopts{'hgrid'} = $res;
print "Resolution = $res\n" if $printing;
my %settings;
if ( $res eq $opts{'usrdat'} ) {
$settings{'clm_usr_name'} = $opts{'usrdat'};
$settings{'csmdata'} = $opts{'csmdata'};
$settings{'notest'} = 1;
}
#
# Loop for all possible land masks: USGS, gx1v6, gx3v5 etc.
#
foreach my $mask ( $definition->get_valid_values( "mask", 'noquotes'=>1 ) ) {
print "Mask = $mask \n" if $printing;
$settings{'mask'} = $mask;
#
# Loop over all possible simulation year: 1890, 2000, 2100 etc.
#
$settings{'sim_year_range'} = "constant";
my @rcps = $definition->get_valid_values( "rcp", 'noquotes'=>1 );
$settings{'rcp'} = $rcps[0];
YEAR: foreach my $sim_year ( $definition->get_valid_values( "sim_year", 'noquotes'=>1 ) ) {
print "sim_year = $sim_year\n" if $printing;
$settings{'sim_year'} = $sim_year;
if ( $sim_year ne 1850 && $sim_year ne 2000 && $sim_year > 1800 ) { next YEAR; }
my @bgcsettings = $cfg->get_valid_values( "bgc" );
#my @glc_meclasses = $cfg->get_valid_values( "glc_nec" );
my @glc_meclasses = ( 0, 10 );
print "glc_nec = @glc_meclasses bgc=@bgcsettings\n" if $printing;
#
# Loop over all possible BGC settings
#
my $phys = $opts{'phys'};
foreach my $bgc ( @bgcsettings ) {
$settings{'bgc'} = $bgc;
my @crop_vals;
if ( $bgc =~ /^cn/ ) {
@crop_vals = ( "on", "off" );
} else {
@crop_vals = ( "off" );
}
#
# Loop over all possible glc_nec settings
#
foreach my $glc_nec ( @glc_meclasses ) {
$settings{'glc_nec'} = $glc_nec;
#
# Loop over all possible crop settings
#
foreach my $crop ( @crop_vals ) {
$settings{'crop'} = $crop;
if ( $crop eq "on" ) {
$settings{'maxpft'} = 78;
} else {
$settings{'maxpft'} = 17;
}
my @irrigset;
if ( $glc_nec == 0 && $sim_year == 2000 ) {
@irrigset= ( ".true.", ".false." );
} else {
@irrigset= ( ".false." );
}
#
# Loop over irrigation settings
#
foreach my $irrig ( @irrigset ) {
$settings{'irrig'} = $irrig;
$inputopts{'namelist'} = "clm_inparm";
&GetListofNeededFiles( \%inputopts, \%settings, \%files );
if ( $printTimes >= 1 ) {
$inputopts{'printing'} = 0;
}
}
}
}
}
}
#
# Now do sim-year ranges
#
$settings{'bgc'} = "cn";
$settings{'irrig'} = ".false.";
$inputopts{'namelist'} = "clm_inparm";
foreach my $sim_year_range ( $definition->get_valid_values( "sim_year_range", 'noquotes'=>1 ) ) {
$settings{'sim_year_range'} = $sim_year_range;
if ( $sim_year_range =~ /([0-9]+)-([0-9]+)/ ) {
$settings{'sim_year'} = $1;
}
#
# Loop over all possible rcp's
#
print "sim_year_range=$sim_year_range rcp=@rcps\n" if $printing;
foreach my $rcp ( @rcps ) {
$settings{'rcp'} = $rcp;
&GetListofNeededFiles( \%inputopts, \%settings, \%files );
if ( $printTimes >= 1 ) {
$inputopts{'printing'} = 0;
}
}
}
}
}
#
# Loop over directories that need to have files copied into
#
my $hostname;
my $csmdata = $inputopts{'csmdata'};
open( OUT, ">$list" ) || die "ERROR: trouble opening output file: $list";
foreach my $dir ( sort(keys(%files)) ) {
if ( $dir eq "." ) { next; }
if ( $dir eq "/" ) { next; }
if ( $dir eq "\n" ) { next; }
if ( $dir eq "" ) { next; }
if ( ! defined($dir) ) { next; }
my $files_ref = $files{$dir};
my @files = @$files_ref;
foreach my $file ( @files ) {
if ( $file !~ /\n$/ ) { $file = "$file\n"; }
print OUT "file = \$DIN_LOC_ROOT/$file";
}
}
close( OUT );
if ( $printing ) {
print "\n\nSuccessful\n\n"
}

244
bld/namelist_files/LogMessages.pm Executable file
View File

@ -0,0 +1,244 @@
package namelist_files::LogMessages;
my $pkg_nm = 'namelist_files::LogMessages';
#-----------------------------------------------------------------------------------------------
#
# SYNOPSIS
#
# require namelist_files::LogMessages;
#
# my %opts;
# my $log = namelist_files::LogMessages->new("ProgName", \%opts);
# $log->message("message to print");
# $log->verbose_message("message to print only if verbose mode is on");
# $log->warning("Warning message");
# $log->exit_message("clean exit");
# $log->fatal_error("die with fatal error");
# $log->final_exit("Final message to send (and exit");
#
#
# DESCRIPTION
#
# Handles log messages for perl. Sets up log messages according to verbose
# or silent setting. It also handles warnings printing them, but on finalization
# aborting unless ignore_warnings was set.
#
# COLLABORATORS: None
#
#-----------------------------------------------------------------------------------------------
#
# Date Author Modification
# 10/06/2017 Erik Kluzek creation
#
#--------------------------------------------------------------------------------------------
use strict;
#use warnings;
#use diagnostics;
#-------------------------------------------------------------------------------
sub new {
my $class = shift;
my $ProgName = shift;
my %opts = %{shift()};
my $nm = "$class\:\:new";
my $self = {};
bless($self, $class);
$self->{'nwarns'} = 0;
$self->{'verbosity'} = 1;
$self->{'NO_EXIT'} = $opts{'NO_EXIT'};
$self->{'ProgName'} = $ProgName;
$self->{'ignore_warnings'} = $opts{'ignore_warnings'};
$self->__set_print_level( \%opts );
return( $self );
}
#-------------------------------------------------------------------------------
sub __set_print_level {
my $self = shift;
# Define print levels:
# 0 - only issue fatal error messages
# 1 - only informs what files are created (default)
# 2 - verbose
my %opts = %{shift()};
if ( $opts{'silent'} && $opts{'verbose'} ) {
$self->fatal_error( "Can not set both the -silent and the -verbose options -- set one or the other" );
}
my $verbosity = 1;
if ($opts{'silent'}) { $verbosity = 0; }
if ($opts{'verbose'}) { $verbosity = 2; }
$self->{'verbosity'} = $verbosity;
$self->{'print_verbose'} = 2;
}
#-------------------------------------------------------------------------------
sub message {
my $self = shift;
my ($message) = @_;
if ($self->{'verbosity'} > 0) {
print "$message\n";
}
}
#-------------------------------------------------------------------------------
sub verbose_message {
my $self = shift;
my ($message) = @_;
if ($self->{'verbosity'} >= $self->{'print_verbose'}) {
print "$message\n";
}
}
#-------------------------------------------------------------------------------
sub nwarns {
my $self = shift;
return( $self->{'nwarns'} );
}
#-------------------------------------------------------------------------------
sub final_exit {
my $self = shift;
my ($message) = @_;
if ( $self->{'nwarns'} > 0 ) {
$self->message( "\n\nYou ran with the -ignore_warnings options and allowed $self->{'nwarns'} to go past\n" );
}
$self->verbose_message( $message );
if ( $self->{'NO_EXIT'} ) {
die
} else {
exit;
}
}
#-------------------------------------------------------------------------------
# Some simple subroutines to do a clean exit, print warning, or a fatal error
sub exit_message {
my $self = shift;
my ($message) = @_;
print "$self->{ProgName} : $message\n";
if ( $self->{'NO_EXIT'} ) {
die
} else {
exit;
}
}
#-------------------------------------------------------------------------------
sub warning {
my $self = shift;
my $message = shift;
$self->{'nwarns'} = $self->{'nwarns'} + 1;
my $func_name = (caller(1))[3];
if ( $self->{'ignore_warnings'} ) {
print "Warning : $self->{ProgName}::${func_name}() : $message\n\n";
} else {
die "Warning : $self->{ProgName}::${func_name}() : $message\n" .
" -- Add -ignore_warnings option to CLM_BLDNML_OPTS to ignore this warning\n\n";
}
}
#-------------------------------------------------------------------------------
sub fatal_error {
my $self = shift;
my ($message) = @_;
my $func_name = (caller(1))[3];
die "ERROR : $self->{ProgName}::${func_name}() : $message\n";
}
#-------------------------------------------------------------------------------
#-----------------------------------------------------------------------------------------------
# Unit testing of above
#-----------------------------------------------------------------------------------------------
if ( ! defined(caller) && $#ARGV == -1 ) {
package LogMessage_unit_tester;
require Test::More;
Test::More->import( );
plan( tests=>11 );
sub testit {
print "unit tester\n";
my %opts;
my $message;
# Standard verbose level, test all methods
$opts{'NO_EXIT'} = 1;
my $log = namelist_files::LogMessages->new("ProgName", \%opts);
isa_ok($log, "namelist_files::LogMessages", "Created LogMessages object");
$log->message("message to print");
$log->verbose_message("YOU SHOULD NOT SEE THIS MESSAGE BECAUSE IT IS VERBOSE AND VERBOSE NOT ON");
$message = "Warning message";
is ( $log->nwarns(), 0, "Make sure have zero warnings" );
eval{ $log->warning($message); };
like( $@, qr/$message/, "check that a warning dies without ignore_warnings option" );
is ( $log->nwarns(), 1, "Make sure have one warning" );
$message = "die with fatal error";
eval{ $log->fatal_error($message); };
like( $@, qr/$message/, "check that a fatal_error dies" );
$message = "exit with exit message";
eval{ $log->exit_message($message); };
like( $@, qr/Died/, "check that a exit_message exits" );
$message = "Final message to send";
eval{ $log->final_exit($message); };
like( $@, qr/Died/, "check that a final exits" );
# Test ignore_warnings option and verbose mode
$opts{'ignore_warnings'} = 1;
$opts{'verbose'} = 1;
$opts{'NO_EXIT'} = 1;
$log = namelist_files::LogMessages->new("ProgName", \%opts);
isa_ok($log, "namelist_files::LogMessages", "Created LogMessages object");
$log->verbose_message("message to print only if verbose mode is on");
$log->warning("Warning message");
$log->warning("Warning message2");
$log->warning("Warning message3");
$log->warning("Warning message4");
$log->warning("Warning message5");
is ( $log->nwarns(), 5, "Make sure have five warnings" );
eval{ $log->final_exit($message); };
print "content: $@\n";
like( $@, qr/Died/, "check that a final_exit with warning exits" );
# silent mode
$opts{'ignore_warnings'} = 0;
$opts{'verbose'} = 0;
$opts{'silent'} = 1;
$opts{'NO_EXIT'} = 1;
$log = namelist_files::LogMessages->new("ProgName", \%opts);
$log->message("YOU SHOULD NOT SEE THIS MESSAGE BECAUSE SILENT MODE IS ON");
$log->verbose_message("YOU SHOULD NOT SEE THIS VERBOSE MESSAGE BECAUSE SILENT MODE IS ON");
# Should die with error if both silent and verbose mode is on
$opts{'ignore_warnings'} = 0;
$opts{'verbose'} = 1;
$opts{'silent'} = 1;
$opts{'NO_EXIT'} = 1;
eval{ $log = namelist_files::LogMessages->new("ProgName", \%opts); };
print "content: $@\n";
like( $@, qr/ERROR : /, "check that died if both verbose and silent mode is on" );
print "\nSuccessfully ran all tests\n";
}
}
#-----------------------------------------------------------------------------------------------
# Determine if you should run the unit test or if this is being called from a require statement
#-----------------------------------------------------------------------------------------------
if ( defined(caller) ) {
1 # to make use or require happy
} elsif ( $#ARGV == -1 ) {
&LogMessage_unit_tester::testit();
}

View File

@ -0,0 +1,236 @@
;
; Check that the *_b values are the same between the mapping files
; at the same output resolution.
;
; Erik Kluzek
; Nov/18/2011
; $Id$
; $HeadURL;
;
print( "Check that datm mapping files are consistent" );
resolutions = (/ "128x256", "64x128", "48x96", "32x64", "8x16", "94x192", "0.23x0.31", "0.47x0.63", "0.9x1.25", "1.9x2.5", "2.5x3.33", "4x5", "10x15", "5x5_amazon", "1x1_camdenNJ", "1x1_vancouverCAN", "1x1_mexicocityMEX", "1x1_asphaltjungleNJ", "1x1_brazil", "1x1_urbanc_alpha", "1x1_numaIA", "1x1_smallvilleIA", "ne4np4", "ne16np4", "ne30np4", "ne60np4", "ne120np4", "ne240np4" /);
space = " ";
badres = 0
badresolutions = new( (/ 1000 /), string )
chkres = 0
chkresolutions = new( (/ 1000 /), string )
procedure checkit( desc:string, maxdiff:numeric, res:string, lmask:string, eps:numeric )
;
; check that difference is within reasonable tolerance...
;
begin
reso = res+"_"+lmask;
if ( maxdiff .gt. eps )then
print( space+space+space+desc+" are off by more than tolerance for "+reso+" resolution" );
print( space+space+space+"maximum difference = "+maxdiff );
if ( .not. any(badresolutions .eq. reso ) )then
badresolutions(badres) = reso;
badres = badres + 1
end if
else
print( space+space+space+"File OK for "+desc+"!" );
end if
if ( .not. any(chkresolutions .eq. reso ) )then
chkresolutions(chkres) = reso;
chkres = chkres + 1
end if
end
function checkdims( desc:string, dsizefile1 [*]:integer, dsizefile2 [*]:integer, res:string, lmask:string )
;
; check that dimensions are the same between the file variables
;
begin
reso = res+"_"+lmask;
if ( any( dsizefile1 .ne. dsizefile2) )then
print( space+space+space+desc+" dimensions are different for "+reso+" resolution" );
print( space+space+space+"dim first file "+dsizefile1 );
print( space+space+space+"dim second file "+dsizefile2 );
if ( .not. any(badresolutions .eq. reso ) )then
badresolutions(badres) = reso;
badres = badres + 1
end if
return( False );
else
print( space+space+space+"File dims OK for "+desc+"!" );
return( True );
end if
if ( .not. any(chkresolutions .eq. reso ) )then
chkresolutions(chkres) = reso;
chkres = chkres + 1
end if
end
begin
csmdata = getenv("CSMDATA");
clmroot = getenv("CLM_ROOT");
querynml = "bld/queryDefaultNamelist.pl -silent -justvalue -namelist clmexp";
if ( .not. ismissing(csmdata) )then
querynml = querynml+" -csmdata "+csmdata;
end if
if ( ismissing(clmroot) )then
querynml = "../../"+querynml;
else
querynml = clmroot+"/components/clm/"+querynml;
end if
print( "query string="+querynml )
mapgrids = (/"0.5x0.5_MODIS", "0.5x0.5_AVHRR", "0.5x0.5_MODIS", "5x5min_nomask", "5x5min_IGBP-GSDP", "5x5min_ISRIC-WISE", "10x10min_nomask", "3x3min_MODIS", "3x3min_LandScan2004", "3x3min_GLOBE-Gardner", "3x3min_GLOBE-Gardner-mergeGIS", "0.9x1.25_GRDC", "360x720cru_cruncep", "1km-merge-10min_HYDRO1K-merge-nomask"/);
do i = 0, dimsizes(resolutions)-1
res = resolutions(i);
print( "Go through maps for Resolution: "+res );
do j = 0, dimsizes(mapgrids)-1
grid = str_get_field( mapgrids(j), 1, "_" );
lmask = str_get_field( mapgrids(j), 2, "_" );
print( space+"Look for maps from Grid: "+grid+"_"+lmask);
querynmlres = querynml+" -options frm_lmask="+lmask+",frm_hgrid="+grid+",to_hgrid="+res+",to_lmask=nomask";
;
; Get map filename and open it
;
mapfile = systemfunc( querynmlres+" -var map" );
if ( systemfunc("test -f "+mapfile+"; echo $?" ) .ne. 0 )then
delete( mapfile );
continue;
end if
print( space+"Use mapfile: "+mapfile );
ncm = addfile( mapfile, "r" );
if ( .not. isvar("ncm0") )then
ncm0 = ncm;
else
vars = (/"yc_b", "xc_b", "area_b", "xv_b", "yv_b" /);
k = 0;
if ( checkdims( vars(k), dimsizes(ncm->$vars(k)$), dimsizes(ncm0->$vars(k)$), res, "nomask" ) )then
do k = 0, dimsizes(vars)-1
maxdiff = max( abs(ncm->$vars(k)$ - ncm0->$vars(k)$) );
checkit( vars(k), maxdiff, res, "nomask", 1.e-12 );
delete( maxdiff );
end do
var = "mask_b"
imaxdiff = max( abs(ncm->$var$ - ncm0->$var$) );
checkit( var, imaxdiff, res, "nomask", 1.e-12 );
delete( imaxdiff );
end if
delete( ncm );
end if
delete( mapfile );
end do
delete( grid );
delete( lmask );
delete( res );
if ( isvar("ncm0") )then
delete( ncm0 );
end if
end do
;
; go the other direction now check the _a variables
;
mksrf_files = (/"mksrf_fvegtyp", "mksrf_fglacier", "mksrf_furbtopo", "mksrf_flai", "mksrf_fsoitex", "mksrf_fsoicol", "mksrf_ffrac", "mksrf_fmax", "mksrf_ftopo", "mksrf_firrig", "mksrf_forganic", "mksrf_flakwat", "mksrf_fwetlnd", "mksrf_furban", "mksrf_fvocef"/)
do i = 0, dimsizes(mapgrids)-1
grid = str_get_field( mapgrids(i), 1, "_" );
lmask = str_get_field( mapgrids(i), 2, "_" );
print( "Grid: "+grid);
print( "Mask: "+lmask);
do j = 0, dimsizes(resolutions)-1
res = resolutions(j);
print( "res: "+res );
querynmlres = querynml+" -options frm_lmask="+lmask+",frm_hgrid="+grid+",to_hgrid="+res+",to_lmask=nomask";
;
; Get map filename and open it
;
mapfile = systemfunc( querynmlres+" -var map" );
if ( systemfunc("test -f "+mapfile+"; echo $?" ) .ne. 0 )then
delete( mapfile );
continue;
end if
print( space+"Use mapfile: "+mapfile );
ncm = addfile( mapfile, "r" );
if ( .not. isvar("ncm0") )then
ncm0 = ncm;
else
vars = (/"yc_a", "xc_a", "area_a", "xv_a", "yv_a" /);
vars2 = (/"LATIXY", "LONGXY", "AREA" /);
k = 0;
if ( checkdims( vars(k), dimsizes(ncm->$vars(k)$), dimsizes(ncm0->$vars(k)$), res, "nomask" ) )then
do k = 0, dimsizes(vars)-1
maxdiff = max( abs(ncm->$vars(k)$ - ncm0->$vars(k)$) );
checkit( vars(k), maxdiff, res, "nomask", 1.e-12 );
delete( maxdiff );
end do
end if
var = "mask_a"
imaxdiff = max( abs(ncm->$var$ - ncm0->$var$) );
checkit( var, imaxdiff, res, "nomask", 1.e-12 );
delete( imaxdiff );
;
; Get mksurfdata input datasets
;
do k = 0, dimsizes(mksrf_files)-1
srffile = systemfunc( querynmlres+" -var "+mksrf_files(k) );
if ( systemfunc("test -f "+srffile+"; echo $?" ) .ne. 0 )then
delete( srffile );
continue;
end if
print( space+"Use srffile: "+srffile );
ncs = addfile( srffile, "r" );
n = 0;
if ( checkdims( vars(n), dimsizes(ncm->$vars(n)$), ndtooned(dimsizes(ncs->$vars2(n)$)), res, "nomask" ) )then
do n = 0, dimsizes(vars2)-1
maxdiff = max( abs(ncm->$vars(n)$ - ndtooned(ncs->$vars2(n)$)) );
checkit( vars(n), maxdiff, res, "nomask", 1.e-12 );
delete( maxdiff );
end do
var = "mask_a"
var2 = "LANDMASK"
imaxdiff = max( abs(ncm->$var$ - ndtooned(ncs->$var2$)) );
checkit( var, imaxdiff, res, "nomask", 1.e-12 );
end if
delete( ncs );
end do
delete( ncm );
end if
delete( mapfile );
end do
if ( isvar("vars") )then
delete( vars )
end if
if ( isvar("vars2") )then
delete( vars2 )
end if
delete( grid );
delete( lmask );
delete( res );
if ( isvar("ncm0") )then
delete( ncm0 );
end if
end do
if ( chkres .gt. 0 )then
print( "resolutions checked = " );
print( chkresolutions(0:chkres-1) );
end if
if ( badres .gt. 0 )then
print( "badresolutions = " );
print( badresolutions(0:badres-1) );
end if
print( "===============================" );
print( "Successfully went through files" );
end

View File

@ -0,0 +1,56 @@
#!/usr/bin/env python
import os, sys
class mksrfDataEntry_prog:
# Class data
year_start = 2101
year_end = 2300
ssp_rcp = "SSP1-2.6"
subdir = "pftcftdynharv.0.25x0.25.SSP1-2.6.simyr2101-2300.c20200320"
cdate = "200320"
desc = "SSP1RCP26x_clm5"
def parse_cmdline_args( self ):
"Parse the command line arguments for create data entry list"
from optparse import OptionParser, OptionGroup
parser = OptionParser( usage="%prog [options]" )
options = OptionGroup( parser, "Options" )
options.add_option( "-s", "--year_start", dest="year_start", default=self.year_start, \
help="Start year" )
options.add_option( "-f", "--year_end", dest="year_end", default=self.year_end, \
help="End year" )
options.add_option( "-d", "--subdir", dest="subdir", default=self.subdir, \
help="Subdirectory" )
options.add_option( "--cdate", dest="cdate", default=self.cdate, \
help="Creation date" )
options.add_option( "--desc", dest="desc", default=self.desc, \
help="Description string" )
parser.add_option_group(options)
(options, args) = parser.parse_args()
if len(args) != 0:
parser.error("incorrect number of arguments")
self.year_start = options.year_start
self.year_end = options.year_end
self.subdir = options.subdir
self.cdate = options.cdate
self.desc = options.desc
def printentry( self, year ):
"Print a single entry"
print '<mksrf_fvegtyp hgrid="0.25x0.25" ssp_rcp="%s" sim_year="%d" crop="on"' % (self.ssp_rcp, year)
print '>lnd/clm2/rawdata/%s/mksrf_landuse_%s_%s.c%s.nc' % (self.subdir, self.desc, year, self.cdate)
print '</mksrf_fvegtyp>\n'
entry = mksrfDataEntry_prog()
entry.parse_cmdline_args()
for year in range(entry.year_start, entry.year_end+1):
entry.printentry( year )

View File

@ -0,0 +1,46 @@
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<html>
<xsl:apply-templates/>
</html>
</xsl:template>
<xsl:template match="history_fields">
<head>
<title>CLM History Fields</title>
</head>
<body>
<hr/>
<h2>Definition of CLM history variables</h2>
<p>Included in the table are the following pieces of information:</p>
<ul>
<li>Variable name.</li>
<li>Long name description.</li>
<li>units</li>
</ul>
<table border="1" cellpadding="10">
<caption>CLM History Fields</caption>
<tr>
<th>Name</th>
<th>Long-name</th>
<th>Units</th>
</tr>
<xsl:for-each select="*">
<xsl:sort select="@name"/>
<tr>
<td><font color="#ff0000"><xsl:value-of select="@name"/></font></td>
<td><xsl:value-of select="@long_name"/></td>
<td><xsl:value-of select="@units"/></td>
</tr>
</xsl:for-each>
</table>
<hr/>
</body>
</xsl:template>
</xsl:stylesheet>

View File

@ -0,0 +1,177 @@
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<html>
<head>
<title>CLM Namelist Defaults</title>
</head>
<body>
<h2>Default Values for Namelist Variables</h2>
<p>Included in the table are the following pieces of information:</p>
<h3>Table headers include:</h3>
<ul>
<li>Name of variable</li>
<li>Horizontal grid resolution</li>
<li>Land ocean mask type</li>
<li>Simulation year</li>
<li>Simulation year range (for transient datasets)</li>
</ul>
<h3>Miscellaneous items include:</h3>
<ol>
<li>Biogeochemistry (BGC) type (none, CN, CNDV)</li>
<li>Initial condition date (ymd - year month day)</li>
<li>Initial condition time of day (tod) (sec)</li>
<li>Maximum number of Plant Function Types (maxpft)</li>
<li>Number of glacier multiple elevation classes (glc_nec)</li>
<li>Site specific point name (sitespf_pt)</li>
<li>Crop model (crop)</li>
<li>Irrigation model (irrig) (clm4_0 only)</li>
<li>Data model forcing source (forcing)</li>
<li>Representative concentration pathway for future scenarios (rcp)</li>
<li>New good wood harvest (newwoodharv)</li>
<li>CN Spin-up mode (spinup)</li>
<li>Type of file (type)</li>
<li>Grid mapping to (to_hgrid)</li>
<li>Land-mask mapping to (to_lmask)</li>
<li>High resolution file? (hires)</li>
</ol>
<table border="1" cellpadding="10">
<caption>Namelist Defaults</caption>
<tr>
<th rowspan="2">Name</th>
<th>Horz. Grid</th>
<th>Mask</th>
<th>Sim year</th>
<th>Sim year range</th>
<th>Miscellaneous</th>
</tr>
<tr>
<th colspan="5">Default Value for this Configuration</th>
</tr>
<xsl:for-each select="namelist_defaults/*">
<xsl:sort select="name()"/>
<tr>
<td rowspan="2"><font color="#ff0000">
<xsl:value-of select="name()"/>
</font></td>
<td>
<xsl:choose>
<xsl:when test="string-length(@hgrid)>0">
<xsl:value-of select="@hgrid"/>
</xsl:when>
<xsl:when test="string-length(@frm_hgrid)>0">
<xsl:value-of select="@frm_hgrid"/>
</xsl:when>
<xsl:otherwise>
All res
</xsl:otherwise>
</xsl:choose>
</td>
<td>
<xsl:choose>
<xsl:when test="string-length(@mask)>0">
<xsl:value-of select="@mask"/>
</xsl:when>
<xsl:when test="string-length(@lmask)>0">
<xsl:value-of select="@lmask"/>
</xsl:when>
<xsl:when test="string-length(@frm_lmask)>0">
<xsl:value-of select="@frm_lmask"/>
</xsl:when>
<xsl:when test="name()='mksrf_fvegtyp'">
MODIS
</xsl:when>
<xsl:otherwise>
All masks
</xsl:otherwise>
</xsl:choose>
</td>
<td>
<xsl:choose>
<xsl:when test="string-length(@sim_year)>0">
<xsl:value-of select="@sim_year"/>
</xsl:when>
<xsl:otherwise>
All yrs
</xsl:otherwise>
</xsl:choose>
</td>
<td>
<xsl:choose>
<xsl:when test="string-length(@sim_year_range)>0">
<xsl:value-of select="@sim_year_range"/>
</xsl:when>
<xsl:otherwise>
All sim-yr-rng
</xsl:otherwise>
</xsl:choose>
</td>
<td>
<xsl:if test="string-length(@bgc)>0">
bgc=<xsl:value-of select="@bgc"/>
</xsl:if>
<xsl:if test="string-length(@ic_ymd)>0">
ymd=<xsl:value-of select="@ic_ymd"/>
</xsl:if>
<xsl:if test="string-length(@ic_tod)>0">
tod=<xsl:value-of select="@ic_tod"/>
</xsl:if>
<xsl:if test="string-length(@maxpft)>0">
maxpft=<xsl:value-of select="@maxpft"/>
</xsl:if>
<xsl:if test="string-length(@glc_nec)>0">
glc_nec=<xsl:value-of select="@glc_nec"/>
</xsl:if>
<xsl:if test="string-length(@sitespf_pt)>0">
sitespf_pt=<xsl:value-of select="@sitespf_pt"/>
</xsl:if>
<xsl:if test="string-length(@datm_presaero)>0">
datm_presaero=<xsl:value-of select="@datm_presaero"/>
</xsl:if>
<xsl:if test="string-length(@crop)>0">
crop=<xsl:value-of select="@crop"/>
</xsl:if>
<xsl:if test="string-length(@irrig)>0">
irrig=<xsl:value-of select="@irrig"/>
</xsl:if>
<xsl:if test="string-length(@spinup)>0">
spinup=<xsl:value-of select="@spinup"/>
</xsl:if>
<xsl:if test="string-length(@source)>0">
forcing=<xsl:value-of select="@source"/>
</xsl:if>
<xsl:if test="string-length(@rcp)>0">
rcp=<xsl:value-of select="@rcp"/>
</xsl:if>
<xsl:if test="string-length(@ngwh)>0">
newwoodharv=<xsl:value-of select="@ngwh"/>
</xsl:if>
<xsl:if test="string-length(@type)>0">
type=<xsl:value-of select="@type"/>
</xsl:if>
<xsl:if test="string-length(@to_hgrid)>0">
to_hgrid=<xsl:value-of select="@to_hgrid"/>
</xsl:if>
<xsl:if test="string-length(@to_lmask)>0">
to_lmask=<xsl:value-of select="@to_lmask"/>
</xsl:if>
<xsl:if test="string-length(@hires)>0">
hires=<xsl:value-of select="@hires"/>
</xsl:if>
</td>
</tr>
<tr>
<td colspan="5"><b>Value: </b><xsl:value-of select="." /></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,9 @@
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="namelist_defaults.xsl"?>
<namelist_defaults>
<!-- Empty file until can completely remove all of the clm4_0 code -->
</namelist_defaults>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,9 @@
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="namelist_defaults.xsl"?>
<namelist_defaults>
<drv_flds_in_files>Buildconf/camconf/drv_flds_in,Buildconf/clmconf/drv_flds_in</drv_flds_in_files>
</namelist_defaults>

View File

@ -0,0 +1,30 @@
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="namelist_defaults.xsl"?>
<namelist_defaults>
<!--
Values to use by default for creation of CLM model driver namelists.
The element names are the same as the corresponding namelist
variables. Values that depend on the model configuration use
attributes to express the dependency. The recognized attributes
are: RESOLUTION, defaults, mask, ic_ymd, ic_tod, sim_year and all configuration
attributes from the config_cache.xml file (with keys converted to upper-case).
-->
<!-- Defaults for drydep_inparm namelist -->
<drydep_list>'O3','NO2','HNO3','NO','HO2NO2','CH3OOH','CH2O','CO','H2O2','CH3COOOH','PAN','MPAN','C2H5OOH','ONIT','POOH','C3H7OOH','ROOH','CH3COCHO','CH3COCH3','Pb','ONITR','MACROOH','XOOH','ISOPOOH','CH3OH','C2H5OH','CH3CHO','GLYALD','HYAC','HYDRALD','ALKOOH','MEKOOH','TOLOOH','TERPOOH','CH3COOH','CB1','CB2','OC1','OC2','SOA','SO2','SO4','NH3','NH4NO3'
</drydep_list>
<drydep_method>xactive_lnd</drydep_method>
<!-- Defaults for megan_emis_nl -->
<megan_specifier>'ISOP = isoprene', 'C10H16 = pinene_a + carene_3 + thujene_a', 'CH3OH = methanol', 'C2H5OH = ethanol', 'CH2O = formaldehyde', 'CH3CHO = acetaldehyde', 'CH3COOH = acetic_acid', 'CH3COCH3 = acetone'</megan_specifier>
<megan_factors_file phys="clm5_0" >atm/cam/chem/trop_mozart/emis/megan21_emis_factors_78pft_c20161108.nc</megan_factors_file>
<megan_factors_file phys="clm4_5" >atm/cam/chem/trop_mozart/emis/megan21_emis_factors_78pft_c20161108.nc</megan_factors_file>
<megan_factors_file phys="clm4_0" >atm/cam/chem/trop_mozart/emis/megan21_emis_factors_c20120313.nc</megan_factors_file>
</namelist_defaults>

View File

@ -0,0 +1,22 @@
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="namelist_defaults.xsl"?>
<namelist_defaults>
<!--
Values to use by default for creation of CLM model driver namelists.
The element names are the same as the corresponding namelist
variables. Values that depend on the model configuration use
attributes to express the dependency. The recognized attributes
are: RESOLUTION, defaults, mask, ic_ymd, ic_tod, sim_year and all configuration
attributes from the config_cache.xml file (with keys converted to upper-case).
-->
<!-- Defaults for fire_emis_nl namelist -->
<fire_emis_specifier>'bc_a1 = BC','pom_a1 = 1.4*OC','SO2 = SO2'</fire_emis_specifier>
<fire_emis_factors_file>lnd/clm2/firedata/fire_emis_factors_c140116.nc</fire_emis_factors_file>
</namelist_defaults>

View File

@ -0,0 +1,116 @@
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="namelist_defaults.xsl"?>
<namelist_defaults>
<!--
Values to use by default for creation of CLM model namelists.
These are overall settings used as defaults for the model
configuration of all namelists. None of these are items
in a namelist, but they are default values that will help
determine default values for namelists.
-->
<!-- Default CLM start-type -->
<clm_start_type phys="clm4_5" sim_year="1850" >startup</clm_start_type>
<clm_start_type phys="clm5_0" sim_year="1850" >startup</clm_start_type>
<clm_start_type phys="clm4_5" sim_year="2000" >startup</clm_start_type>
<clm_start_type phys="clm5_0" sim_year="2000" >startup</clm_start_type>
<clm_start_type phys="clm4_5" >arb_ic</clm_start_type>
<clm_start_type phys="clm5_0" >arb_ic</clm_start_type>
<clm_start_type phys="clm5_0" use_cndv=".true." >arb_ic</clm_start_type>
<clm_start_type phys="clm4_5" use_cndv=".true." >arb_ic</clm_start_type>
<clm_start_type phys="clm5_0" use_fates=".true.">arb_ic</clm_start_type>
<clm_start_type phys="clm4_5" use_fates=".true.">arb_ic</clm_start_type>
<clm_start_type phys="clm4_0" >arb_ic</clm_start_type>
<clm_start_type bgc_spinup="on" >cold</clm_start_type> <!-- CLM 4.5 -->
<clm_start_type sim_year_range="1850-2100">arb_ic</clm_start_type>
<clm_start_type sim_year_range="2100-2300">arb_ic</clm_start_type>
<!-- For transient cases, turn on demand to set flanduse_timeseries -->
<clm_demand sim_year_range="1850-2000">flanduse_timeseries</clm_demand>
<clm_demand sim_year_range="1850-2100">flanduse_timeseries</clm_demand>
<clm_demand sim_year_range="2100-2300">flanduse_timeseries</clm_demand>
<!-- Default location of {csmdata} -->
<csmdata>/fs/cgd/csm/inputdata</csmdata>
<!-- Default resolution -->
<res sitespf_pt="none" >1.9x2.5</res>
<res sitespf_pt="1x1_brazil" >1x1_brazil</res>
<res sitespf_pt="5x5_amazon" >5x5_amazon</res>
<res sitespf_pt="1x1_camdenNJ" >1x1_camdenNJ</res>
<res sitespf_pt="1x1_vancouverCAN" >1x1_vancouverCAN</res>
<res sitespf_pt="1x1_mexicocityMEX" >1x1_mexicocityMEX</res>
<res sitespf_pt="1x1_asphaltjungleNJ">1x1_asphaltjungleNJ</res>
<res sitespf_pt="1x1_urbanc_alpha" >1x1_urbanc_alpha</res>
<res sitespf_pt="1x1_numaIA" >1x1_numaIA</res>
<res sitespf_pt="1x1_smallvilleIA" >1x1_smallvilleIA</res>
<!-- Default simulation year -->
<sim_year>2000</sim_year>
<!-- Default simulation year range -->
<sim_year_range>constant</sim_year_range>
<!-- Check resolution and land/mask in the local resolution list before continuing - normally turned off -->
<chk_res>0</chk_res>
<!-- Add note to namelist files documenting the options given to build-namelist -->
<note mode="clm_stndln" >1</note>
<note mode="ext_cesm" >0</note>
<!-- Default representative concentration pathway for future scenarios -->
<ssp_rcp>hist</ssp_rcp>
<!-- Default irrigation -->
<irrig>.false.</irrig>
<!-- Default land/ocean mask type -->
<mask hgrid="0.23x0.31" >gx1v6</mask>
<mask hgrid="0.47x0.63" >gx1v6</mask>
<mask hgrid="0.9x1.25" >gx1v6</mask>
<mask hgrid="1.9x2.5" >gx1v6</mask>
<mask hgrid="2.5x3.33" >gx3v7</mask>
<mask hgrid="4x5" >gx3v7</mask>
<mask hgrid="10x15" >USGS</mask>
<mask hgrid="360x720cru" >cruncep</mask>
<mask hgrid="128x256" >USGS</mask>
<mask hgrid="64x128" >USGS</mask>
<mask hgrid="48x96" >gx3v7</mask>
<mask hgrid="32x64" >USGS</mask>
<mask hgrid="8x16" >USGS</mask>
<mask hgrid="94x192" >T62</mask>
<mask hgrid="ne120" >gx1v6</mask>
<mask hgrid="ne240" >gx1v6</mask>
<mask hgrid="ne30" >gx1v6</mask>
<mask hgrid="5x5_amazon" >navy</mask>
<mask hgrid="1x1_camdenNJ" >navy</mask>
<mask hgrid="1x1_vancouverCAN" >navy</mask>
<mask hgrid="1x1_mexicocityMEX" >navy</mask>
<mask hgrid="1x1_asphaltjungleNJ" >navy</mask>
<mask hgrid="1x1_brazil" >navy</mask>
<mask hgrid="1x1_urbanc_alpha" >test</mask>
<mask hgrid="1x1_numaIA" >navy</mask>
<mask hgrid="1x1_smallvilleIA" >test</mask>
<mask >gx1v6</mask>
<!-- Default glacier model options -->
<glc_dyntopo >.false.</glc_dyntopo>
<glc_nec glc_nec="0" >0</glc_nec>
<glc_nec glc_nec="1" >1</glc_nec>
<glc_nec glc_nec="3" >3</glc_nec>
<glc_nec glc_nec="5" >5</glc_nec>
<glc_nec glc_nec="10">10</glc_nec>
<glc_nec glc_nec="36">36</glc_nec>
</namelist_defaults>

View File

@ -0,0 +1,36 @@
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="namelist_defaults.xsl"?>
<namelist_defaults>
<!--
User defined filenames to use in conjuction with the "clm_usr_name" option
to build-namelist to specify user created files that will be searched for
in place of the standard files, or to give different resolutions, or
The element names are the same as the corresponding namelist filename
variables (only files can be set here). Values that depend on the model
configuration use attributes to express the dependency. The recognized attributes
are: clm_usr_name, mask, sim_year, and sim_year_range and all configuration
attributes from the config_cache.xml file (with keys converted to upper-case).
In addition variable names expressed as ${variable_name} will be expanded
provided they are in the valid list expressed above.
-->
<!-- Initial file (relative to ${csmdata}) -->
<finidat >lnd/clm2/initdata/clmi.${clm_usr_name}_${mask}_simyr${sim_year}.nc</finidat>
<!-- Surface dataset (relative to ${csmdata}) -->
<fsurdat phys="clm4_0">lnd/clm2/surfdata/surfdata_${clm_usr_name}_simyr${sim_year}.nc</fsurdat>
<fsurdat phys="clm4_5">lnd/clm2/surfdata_map/surfdata_${clm_usr_name}_simyr${sim_year}.nc</fsurdat>
<!-- Dynamic PFT surface dataset (relative to ${csmdata}) -->
<flanduse_timeseries sim_year_range="constant" ssp_rcp="hist">null</flanduse_timeseries>
<flanduse_timeseries ssp_rcp="hist">lnd/clm2/surfdata/landuse.timeseries_${clm_usr_name}_simyr${sim_year_range}.nc</flanduse_timeseries>
<flanduse_timeseries sim_year_range="1850-2000" ssp_rcp="hist">lnd/clm2/surfdata/landuse.timeseries_${clm_usr_name}_simyr1849-2006.nc</flanduse_timeseries>
<flanduse_timeseries >lnd/clm2/surfdata/landuse.timeseries_${ssp_rcp}_${clm_usr_name}_simyr${sim_year_range}.nc</flanduse_timeseries>
<flanduse_timeseries sim_year_range="1850-2000" >lnd/clm2/surfdata/landuse.timeseries_${ssp_rcp}_${clm_usr_name}_simyr1849-2006.nc</flanduse_timeseries>
</namelist_defaults>

View File

@ -0,0 +1,363 @@
<?xml version='1.0'?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<html>
<xsl:apply-templates/>
</html>
</xsl:template>
<xsl:template match="namelist_definition">
<head>
<title>CLM Namelist Definition</title>
</head>
<body>
<p>
</p>
<hr/>
<p>
</p>
<h1>Definition of CLM namelist variables</h1>
<p>We list all of the relevant namelist variables for CLM I cases. This includes
CLM Namelist items as well as CLM build-namelist settings and namelist settings
for CLM offline tools.</p>
<hr/>
<h2>Definition of CLM namelist variables</h2>
<p>Note, these all would go into the user_nl_clm file
before configure):</p>
<p>Included in the table are the following pieces of information:</p>
<ul>
<li>Variable name.</li>
<li>Variable type (<code>char</code>, <code>integer</code>,
<code>real</code>, or <code>logical</code>). The type
<code>char</code> has the length appended
following an asterisk, e.g., <code>char*256</code>. Variables that are
arrays have their dimension specifier appended inside parentheses. For
example <code>char*1(6)</code> denotes a array of six
<code>char*1</code> values.
</li>
<li>Variable description (includes information on defaults).</li>
<li>Valid values (if restricted).</li>
</ul>
<table border="1" cellpadding="10">
<caption>CLM Namelist Physics Options</caption>
<tr>
<th rowspan="2">Name</th>
<th rowspan="2">Type</th>
<th>Description</th>
</tr>
<tr>
<th colspan="1">Valid values</th>
</tr>
<xsl:apply-templates select="entry[@category='clm_physics']"/>
</table>
<table border="1" cellpadding="10">
<caption>CLM Namelist Lake Model Options</caption>
<tr>
<th rowspan="2">Name</th>
<th rowspan="2">Type</th>
<th>Description</th>
</tr>
<tr>
<th colspan="1">Valid values</th>
</tr>
<xsl:apply-templates select="entry[@category='clm_lake']"/>
</table>
<table border="1" cellpadding="10">
<caption>CLM Biogeochemistry (BGC) Model Options</caption>
<tr>
<th rowspan="2">Name</th>
<th rowspan="2">Type</th>
<th>Description</th>
</tr>
<tr>
<th colspan="1">Valid values</th>
</tr>
<xsl:apply-templates select="entry[@category='bgc']"/>
</table>
<table border="1" cellpadding="10">
<caption>CLM Biogeochemistry Namelist Nitrogen Model Options</caption>
<tr>
<th rowspan="2">Name</th>
<th rowspan="2">Type</th>
<th>Description</th>
</tr>
<tr>
<th colspan="1">Valid values</th>
</tr>
<xsl:apply-templates select="entry[@category='clm_nitrogen']"/>
</table>
<table border="1" cellpadding="10">
<caption>CLM Namelist Methane Model Options</caption>
<tr>
<th rowspan="2">Name</th>
<th rowspan="2">Type</th>
<th>Description</th>
</tr>
<tr>
<th colspan="1">Valid values</th>
</tr>
<xsl:apply-templates select="entry[@category='clm_methane']"/>
</table>
<table border="1" cellpadding="10">
<caption>CLM Namelist Vertical CN Model Options</caption>
<tr>
<th rowspan="2">Name</th>
<th rowspan="2">Type</th>
<th>Description</th>
</tr>
<tr>
<th colspan="1">Valid values</th>
</tr>
<xsl:apply-templates select="entry[@category='clm_vertcn']"/>
</table>
<table border="1" cellpadding="10">
<caption>CLM Namelist Carbon Isotope Model Options</caption>
<tr>
<th rowspan="2">Name</th>
<th rowspan="2">Type</th>
<th>Description</th>
</tr>
<tr>
<th colspan="1">Valid values</th>
</tr>
<xsl:apply-templates select="entry[@category='clm_isotope']"/>
</table>
<table border="1" cellpadding="10">
<caption>CLM Namelist Datasets</caption>
<tr>
<th rowspan="2">Name</th>
<th rowspan="2">Type</th>
<th>Description
</th>
</tr>
<tr>
<th colspan="1">Valid values</th>
</tr>
<xsl:apply-templates select="entry[@category='datasets']"/>
</table>
<table border="1" cellpadding="10">
<caption>CLM Namelist History output settings</caption>
<tr>
<th rowspan="2">Name</th>
<th rowspan="2">Type</th>
<th>Description</th>
</tr>
<tr>
<th colspan="1">Valid values</th>
</tr>
<xsl:apply-templates select="entry[@category='history']"/>
</table>
<table border="1" cellpadding="10">
<caption>CLM Namelist Restart settings</caption>
<tr>
<th rowspan="2">Name</th>
<th rowspan="2">Type</th>
<th>Description</th>
</tr>
<tr>
<th colspan="1">Valid values</th>
</tr>
<xsl:apply-templates select="entry[@category='clm_restart']"/>
</table>
<table border="1" cellpadding="10">
<caption>CLM Namelist Performance Tuning</caption>
<tr>
<th rowspan="2">Name</th>
<th rowspan="2">Type</th>
<th>Description</th>
</tr>
<tr>
<th colspan="1">Valid values</th>
</tr>
<xsl:apply-templates select="entry[@category='clm_performance']"/>
</table>
<p>
</p>
<hr/>
<p>
</p>
<h2>Command Line Options to CLM Build-namelist</h2>
<p>Variables that are entered as options to build-namelist (but NOT used by
namelists in code). Most of these are options that could be added to
CLM_BLDNML_OPTS. Included in the table are the following pieces
of information:</p>
<ul>
<li>Variable name.</li>
<li>Type.</li>
<li>Valid values.</li>
<li>Variable description.</li>
</ul>
<table border="1" cellpadding="10">
<caption>CLM Namelist Default Settings</caption>
<tr>
<th rowspan="2">Name</th>
<th rowspan="2">Type</th>
<th>Description</th>
</tr>
<tr>
<th colspan="1">Valid values, if restricted at all</th>
</tr>
<xsl:apply-templates select="entry[@category='default_settings']"/>
</table>
<p>
</p>
<hr/>
<p>
</p>
<h2>Command Line Options to CLM Build-namelist</h2>
<p>Variables that are entered as options to build-namelist (but NOT used by
namelists in code). Most of these are options that could be added to
CLM_BLDNML_OPTS. Included in the table are the following pieces
of information:</p>
<ul>
<li>Variable name.</li>
<li>Type.</li>
<li>Valid values.</li>
<li>Variable description.</li>
</ul>
<table border="1" cellpadding="10">
<caption>CLM Namelist Default Settings</caption>
<tr>
<th rowspan="2">Name</th>
<th rowspan="2">Type</th>
<th>Description</th>
</tr>
<tr>
<th colspan="1">Valid values, if restricted at all</th>
</tr>
<xsl:apply-templates select="entry[@category='default_settings']"/>
</table>
<p>
</p>
<hr/>
<p>
</p>
<h2>Namelist items for CLM Tools</h2>
<p>These are namelist items that appear in the CLM Tools under components/clm/tools.
</p>
<table border="1" cellpadding="10">
<caption>CLM mksurfdata</caption>
<tr>
<th rowspan="2">Name</th>
<th rowspan="2">Type</th>
<th>Description</th>
</tr>
<tr>
<th colspan="1">Valid values</th>
</tr>
<xsl:apply-templates select="entry[@category='mksurfdata']"/>
</table>
<table border="1" cellpadding="10">
<caption>CLM mkgriddata</caption>
<tr>
<th rowspan="2">Name</th>
<th rowspan="2">Type</th>
<th>Description</th>
</tr>
<tr>
<th colspan="1">Valid values</th>
</tr>
<xsl:apply-templates select="entry[@category='mkgriddata']"/>
</table>
<table border="1" cellpadding="10">
<caption>CLM mkmapdata</caption>
<tr>
<th rowspan="2">Name</th>
<th rowspan="2">Type</th>
<th>Description</th>
</tr>
<tr>
<th colspan="1">Valid values</th>
</tr>
<xsl:apply-templates select="entry[@category='mkmapdata']"/>
</table>
<table border="1" cellpadding="10">
<caption>CLM mkgriddata</caption>
<tr>
<th rowspan="2">Name</th>
<th rowspan="2">Type</th>
<th>Description</th>
</tr>
<tr>
<th colspan="1">Valid values</th>
</tr>
<xsl:apply-templates select="entry[@category='mkgriddata']"/>
</table>
<table border="1" cellpadding="10">
<caption>Miscellaneous CLM tools</caption>
<tr>
<th rowspan="2">Name</th>
<th rowspan="2">Type</th>
<th>Description</th>
</tr>
<tr>
<th colspan="1">Valid values</th>
</tr>
<xsl:apply-templates select="entry[@category='tools']"/>
</table>
<hr/>
<h2>Namelist items for Driver MEGAN Physics</h2>
<table border="1" cellpadding="10">
<caption>Driver Physics</caption>
<tr>
<th rowspan="2">Name</th>
<th rowspan="2">Type</th>
<th>Description</th>
</tr>
<tr>
<th colspan="1">Valid values</th>
</tr>
<xsl:apply-templates select="entry[@category='drv_physics']"/>
</table>
<h2>Namelist items for Driver Dry Deposition</h2>
<table border="1" cellpadding="10">
<caption>Driver Dry-Deposition Namelist Options</caption>
<tr>
<th rowspan="2">Name</th>
<th rowspan="2">Type</th>
<th>Description</th>
</tr>
<tr>
<th colspan="1">Valid values, if restricted at all</th>
</tr>
<xsl:apply-templates select="entry[@category='dry-deposition']"/>
</table>
<hr/>
</body>
</xsl:template>
<xsl:template match="entry">
<tr>
<td rowspan="2"><font color="#ff0000"><xsl:value-of select="@id"/></font></td>
<td rowspan="2"><xsl:value-of select="@type"/></td>
<td><xsl:apply-templates/></td>
</tr>
<tr>
<td colspan="1"><xsl:if test="string-length(@valid_values)>0"><b>Valid Values: </b>
<xsl:value-of select="@valid_values"/></xsl:if></td>
</tr>
</xsl:template>
</xsl:stylesheet>

View File

@ -0,0 +1,822 @@
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="namelist_definition.xsl"?>
<namelist_definition>
<!-- ======================================================================================== -->
<!-- CLM Namelist -->
<!-- ======================================================================================== -->
<entry id="finidat"
type="char*256"
category="datasets"
input_pathname="abs"
group="clm_inparm"
valid_values="" >
Full pathname of initial conditions file. If blank CLM will startup from
arbitrary initial conditions.
</entry>
<entry id="nrevsn"
type="char*256"
category="clm_restart"
input_pathname="abs"
group="clm_inparm"
valid_values="" >
Full pathname of master restart file for a branch run. (only used if RUN_TYPE=branch)
(Set with RUN_REFCASE and RUN_REFDATE)
</entry>
<entry id="fatmlndfrc"
type="char*256"
category="datasets"
input_pathname="abs"
group="clm_inparm"
valid_values="" >
Full pathname of land fraction data file.
</entry>
<entry id="clump_pproc" type="integer" category="clm_performance"
group="clm_inparm" valid_values="" >
Clumps per processor.
</entry>
<entry id="co2_ppmv" type="real" category="clm_physics"
group="clm_inparm" valid_values="" >
Atmospheric CO2 molar ratio (by volume) only used when co2_type==constant (umol/mol)
(Set by CCSM_CO2_PPMV)
</entry>
<entry id="co2_type" type="char*16" category="clm_physics"
group="clm_inparm" valid_values="constant,prognostic,diagnostic" >
Type of CO2 feedback.
constant = use the input co2_ppmv value
prognostic = use the prognostic value sent from the atmosphere
diagnostic = use the diagnostic value sent from the atmosphere
</entry>
<entry id="suplnitro" type="char*15" category="clm_physics"
group="clm_inparm" valid_values="NONE,PROG_CROP_ONLY,ALL" >
Supplemental Nitrogen mode and for what type of vegetation it's turned on for.
In this mode Nitrogen is unlimited rather than prognosed and in general vegetation is
over-productive. It does act as a proxy for fertilization for crops however.
NONE = No vegetation types get supplemental Nitrogen
PROG_CROP_ONLY = Supplemental Nitrogen is only active for prognostic Crops
ALL = Supplemental Nitrogen is active for all vegetation types
</entry>
<entry id="create_crop_landunit" type="logical" category="clm_physics"
group="clm_inparm" valid_values="" >
If TRUE, separate the vegetated landunit into a crop landunit and a natural vegetation landunit
</entry>
<entry id="maxpatch_glcmec" type="integer" category="clm_physics"
group="clm_inparm" valid_values="0,1,3,5,10,36" >
Number of multiple elevation classes over glacier points.
Normally this is ONLY used when running CESM with the active glacier model.
</entry>
<entry id="glc_dyntopo" type="logical" category="clm_physics"
group="clm_inparm" valid_values="" >
If TRUE, dynamically change topographic height over glacier points.
Only works when glc_nec is greater than zero.
(EXPERIMENTAL AND NOT FUNCTIONAL!)
</entry>
<entry id="albice" type="real(2)" category="clm_physics"
group="clm_inparm" >
Visible and Near-infrared albedo's for glacier ice
</entry>
<entry id="dtime" type="real" category="clm_physics"
group="clm_inparm" valid_values="">
Time step (seconds)
</entry>
<entry id="override_nsrest" type="integer" category="clm_restart"
group="clm_inparm" valid_values="3">
Override the start type from the driver: it can only be
set to 3 meaning branch.
</entry>
<entry id="fglcmask" type="char*256" category="datasets"
input_pathname="abs" group="clm_inparm" valid_values="" >
Full pathname of land-ice mask data file (on lnd grid).
</entry>
<entry id="flndtopo" type="char*256" category="datasets"
input_pathname="abs" group="clm_inparm" valid_values="" >
Full pathname of topography data file. Only required when
land-ice model is active.
</entry>
<entry id="fpftcon" type="char*256" category="datasets"
input_pathname="abs" group="clm_inparm" valid_values="" >
Full pathname datafile with plant function type (PFT) constants
</entry>
<entry id="flanduse_timeseries" type="char*256" category="datasets"
input_pathname="abs" group="clm_inparm" valid_values="" >
Full pathname of time varying PFT data file. This causes the land-use types of
the initial surface dataset to vary over time.
</entry>
<entry id="fsurdat" type="char*256" category="datasets"
input_pathname="abs" group="clm_inparm" valid_values="" >
Full pathname of surface data file.
</entry>
<entry id="fsnowoptics" type="char*256" category="datasets"
input_pathname="abs" group="clm_inparm" valid_values="" >
SNICAR (SNow, ICe, and Aerosol Radiative model) optical data file name
</entry>
<entry id="fsnowaging" type="char*256" category="datasets"
input_pathname="abs" group="clm_inparm" valid_values="" >
SNICAR (SNow, ICe, and Aerosol Radiative model) snow aging data file name
</entry>
<entry id="hist_avgflag_pertape" type="char*1(6)" category="history"
group="clm_inparm" valid_values="A,I,X,M" >
Per file averaging flag.
'A' (average over history period)
'I' (instantaneous)
'X' (maximum over history period)
'M' (minimum over history period)
</entry>
<entry id="hist_type1d_pertape" type="char*4(6)" category="history"
group="clm_inparm" valid_values="GRID,LAND,COLS,PFTS, " >
Averaging type of output for 1D vector output (when hist_dov2xy is false).
GRID means average all land-units up to the grid-point level
LAND means average all columns up to the land-unit level
COLS means average all PFT's up to the column level
PFTS means report everything on native PFT level
</entry>
<entry id="hist_dov2xy" type="logical(6)" category="history"
group="clm_inparm" valid_values="" >
If TRUE, implies output data on a 2D latitude/longitude grid. False means
output in 1D vector format. One setting per history tape series.
</entry>
<entry id="hist_empty_htapes" type="logical" category="history"
group="clm_inparm" valid_values="" >
If TRUE, indicates do NOT output any default history fields (requires you to use
hist_fincl* to set the exact output fields to use)..
</entry>
<entry id="hist_fexcl1" type="char*34(1000)" category="history"
group="clm_inparm" valid_values="" >
Fields to exclude from history tape series 1.
</entry>
<entry id="hist_fexcl2" type="char*34(1000)" category="history"
group="clm_inparm" valid_values="" >
Fields to exclude from history tape series 2.
</entry>
<entry id="hist_fexcl3" type="char*34(1000)" category="history"
group="clm_inparm" valid_values="" >
Fields to exclude from history tape series 3.
</entry>
<entry id="hist_fexcl4" type="char*34(1000)" category="history"
group="clm_inparm" valid_values="" >
Fields to exclude from history tape series 4.
</entry>
<entry id="hist_fexcl5" type="char*34(1000)" category="history"
group="clm_inparm" valid_values="" >
Fields to exclude from history tape series 5.
</entry>
<entry id="hist_fexcl6" type="char*34(1000)" category="history"
group="clm_inparm" valid_values="" >
Fields to exclude from history tape series 6.
</entry>
<entry id="hist_fincl1" type="char*34(1000)" category="history"
group="clm_inparm" valid_values="" >
Fields to add to history tape series 1.
</entry>
<entry id="hist_fincl2" type="char*34(1000)" category="history"
group="clm_inparm" valid_values="" >
Fields to add to history tape series 2.
</entry>
<entry id="hist_fincl3" type="char*34(1000)" category="history"
group="clm_inparm" valid_values="" >
Fields to add to history tape series 3.
</entry>
<entry id="hist_fincl4" type="char*34(1000)" category="history"
group="clm_inparm" valid_values="" >
Fields to add to history tape series 4.
</entry>
<entry id="hist_fincl5" type="char*34(1000)" category="history"
group="clm_inparm" valid_values="" >
Fields to add to history tape series 5.
</entry>
<entry id="hist_fincl6" type="char*34(1000)" category="history"
group="clm_inparm" valid_values="" >
Fields to add to history tape series 6.
</entry>
<entry id="hist_mfilt" type="integer(6)" category="history"
group="clm_inparm" valid_values="" >
Per tape series maximum number of time samples.
</entry>
<entry id="hist_ndens" type="integer(6)" category="history"
group="clm_inparm" valid_values="1,2" >
Per tape series history file density (i.e. output precision)
1=double precision
2=single precision
<default>Default: 2,2,2,2,2,2</default>
</entry>
<entry id="hist_nhtfrq" type="integer(6)" category="history"
group="clm_inparm" valid_values="" >
Per tape series history write frequency.
positive means in time steps
0=monthly
negative means hours
(i.e. 5 means every 24 time-steps and -24 means every day
<default>Default: 0,-24,-24,-24,-24,-24</default>
</entry>
<entry id="nsegspc" type="integer" category="clm_performance"
group="clm_inparm" valid_values="" >
number of segments per clump for decomposition
<default>Default: 20</default>
</entry>
<entry id="pertlim" type="real" category="clm_physics"
group="clm_inparm" valid_values="" >
Perturbation limit when doing error growth test
</entry>
<entry id="rest_flag" type="logical" category="clm_restart"
group="clm_inparm" valid_values="" >
If FALSE, don't write any restart files.
</entry>
<entry id="urban_hac" type="char*16" category="clm_physics"
group="clm_inparm" valid_values="OFF,ON,ON_WASTEHEAT" >
Turn urban air conditioning/heating ON or OFF and add wasteheat:
OFF = Air conditioning/heating is OFF in buildings, internal temperature allowed to float freely
ON = Air conditioning/heating is ON in buildings, internal temperature constrained
ON_WASTEHEAT = Air conditioning/heating is ON and waste-heat sent to urban canyon
</entry>
<entry id="urban_traffic" type="logical" category="clm_physics"
group="clm_inparm" valid_values="" >
If TRUE, urban traffic flux will be activated (Currently NOT implemented).
</entry>
<entry id="wrtdia" type="logical" category="history"
group="clm_inparm" valid_values="" >
If TRUE, write diagnostic of global radiative temperature written to CLM log file.
</entry>
<!-- -->
<!-- mkmapdata namelist -->
<!-- -->
<entry id="scripgriddata" type="char*256" category="mkmapdata"
input_pathname="abs" group="clmexp" valid_values="" >
SCRIP format grid data file
</entry>
<entry id="scripgriddata_lrgfile_needed" type="char*256" category="mkmapdata"
group="clmexp" valid_values="none,64bit_offset,netcdf4" >
Flag to pass to the ESMF mapping utility, telling it what kind of large
file support is needed for an output file generated with this grid as
either the source or destination ('none', '64bit_offset' or 'netcdf4').
</entry>
<entry id="scripgriddata_type" type="char*256" category="mkmapdata"
group="clmexp" valid_values="SCRIP,UGRID" >
Flag to pass to the ESMF mapping utility, telling it what kind of grid
file this is (SCRIP or UGRID).
</entry>
<entry id="scripgriddata_meshname" type="char*256" category="mkmapdata"
group="clmexp" valid_values="" >
For UGRID files, flag to pass to the ESMF mapping utility, telling it the
name of the dummy variable that has all of the topology information stored
in its attributes. (Only used if scripgriddata_src_type = UGRID.)
</entry>
<!-- -->
<!-- mksurfdata namelist -->
<!-- -->
<entry id="mksrf_filename" type="char*256" category="mksurfdata"
group="default_settings"
valid_values="mksrf_fsoitex,mksrf_forganic,mksrf_flakwat,mksrf_fwetlnd,mksrf_fmax,mksrf_fmax,mksrf_fglacier,mksrf_fvocef,mksrf_furbtopo,mksrf_flndtopo,mksrf_firrig,mksrf_furban,mksrf_fvegtyp,mksrf_fsoicol,mksrf_flai" >
Filename for mksurfdata_map to remap raw data into the output surface dataset
</entry>
<entry id="mksrf_fvegtyp" type="char*256" category="mksurfdata"
input_pathname="abs" group="clmexp" valid_values="" >
Plant Function Type dataset for mksurfdata
</entry>
<entry id="mksrf_fglacier" type="char*256" category="mksurfdata"
input_pathname="abs" group="clmexp" valid_values="" >
Dataset for percent glacier land-unit for mksurfdata
</entry>
<entry id="mksrf_furbtopo" type="char*256" category="mksurfdata"
input_pathname="abs" group="clmexp" valid_values="" >
Dataset for topography used to define urban threshold
</entry>
<entry id="mksrf_flndtopo" type="char*256" category="mksurfdata"
input_pathname="abs" group="clmexp" valid_values="" >
Dataset for land topography
</entry>
<entry id="mksrf_flai" type="char*256" category="mksurfdata"
input_pathname="abs" group="clmexp" valid_values="" >
Leaf Area Index dataset for mksurfdata
</entry>
<entry id="mksrf_fsoitex" type="char*256" category="mksurfdata"
input_pathname="abs" group="clmexp" valid_values="" >
Soil texture dataset for mksurfdata
</entry>
<entry id="mksrf_fsoicol" type="char*256" category="mksurfdata"
input_pathname="abs" group="clmexp" valid_values="" >
Soil color dataset for mksurfdata
</entry>
<entry id="mksrf_fmax" type="char*256" category="mksurfdata"
input_pathname="abs" group="clmexp" valid_values="" >
Soil max fraction dataset for mksurfdata
</entry>
<entry id="mksrf_ffrac" type="char*256" category="mksurfdata"
input_pathname="abs" group="clmexp" valid_values="" >
High resolution land mask/fraction dataset for mksurfdata
(used for glacier_mec land-units)
</entry>
<entry id="mksrf_gridtype" type="char*256" category="mksurfdata"
group="clmexp" value="global" valid_values="global,regional" >
Type of grid to create for mksurfdata
</entry>
<entry id="mksrf_fgrid" type="char*256" category="mksurfdata"
input_pathname="abs" group="clmexp" valid_values="" >
Grid file at the output resolution for mksurfdata
</entry>
<entry id="mksrf_fdynuse" type="char*256" category="mksurfdata"
input_pathname="abs" group="clmexp" valid_values="" >
Text file with filepaths (or list of XML elements) for vegetation fractions
and harvesting for each year to run over for mksurfdata to be able to model
transient land-use change
</entry>
<entry id="mksrf_ftopo" type="char*256" category="mksurfdata"
input_pathname="abs" group="clmexp" valid_values="" >
High resolution topography dataset for mksurfdata
(used for glacier_mec land-units)
</entry>
<entry id="mksrf_firrig" type="char*256" category="mksurfdata"
input_pathname="abs" group="clmexp" valid_values="" >
Irrigation dataset for mksurfdata
</entry>
<entry id="mksrf_forganic" type="char*256" category="mksurfdata"
input_pathname="abs" group="clmexp" valid_values="" >
Organic soil dataset for mksurfdata
</entry>
<entry id="mksrf_flakwat" type="char*256" category="mksurfdata"
input_pathname="abs" group="clmexp" valid_values="" >
Lake water dataset for mksurfdata
</entry>
<entry id="mksrf_fwetlnd" type="char*256" category="mksurfdata"
input_pathname="abs" group="clmexp" valid_values="" >
Wetland dataset for mksurfdata
</entry>
<entry id="mksrf_furban" type="char*256" category="mksurfdata"
input_pathname="abs" group="clmexp" valid_values="" >
Urban dataset for mksurfdata
</entry>
<entry id="mksrf_fvocef" type="char*256" category="mksurfdata"
input_pathname="abs" group="clmexp" valid_values="" >
Biogenic Volatile Organic Compounds (VOC) emissions dataset for mksurfdata
</entry>
<entry id="outnc_double" type="logical" category="mksurfdata"
group="clmexp" value=".true.">
If TRUE, output variables in double precision for mksurfdata
</entry>
<entry id="all_urban" type="logical" category="mksurfdata"
group="clmexp" value=".false.">
If TRUE, ignore other files, and set the output percentage to 100% urban and
zero for other land-use types.
</entry>
<entry id="numpft" type="integer" category="mksurfdata"
group="clmexp" value="16" valid_values="16,20" >
Number of Plant Functional Types (excluding bare-soil)
</entry>
<entry id="pft_idx" type="integer" category="mksurfdata"
group="clmexp"
valid_values="0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20" >
Plant Function Type index to override global file with for mksurfdata
</entry>
<entry id="pft_frc" type="real" category="mksurfdata"
group="clmexp" valid_values="">
Plant Function Type fraction to override global file with for mksurfdata
</entry>
<entry id="soil_color" type="integer" category="mksurfdata"
group="clmexp"
valid_values="0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20" >
Soil color index to override global file with for mksurfdata
</entry>
<entry id="soil_fmax" type="real" category="mksurfdata"
group="clmexp" >
Soil maximum fraction to override global file with for mksurfdata
</entry>
<entry id="soil_sand" type="real" category="mksurfdata"
group="clmexp" >
Soil percent sand to override global file with for mksurfdata
</entry>
<entry id="soil_clay" type="real" category="mksurfdata"
group="clmexp" >
Soil percent clay to override global file with for mksurfdata
</entry>
<!-- -->
<!-- mkgriddata namelist -->
<!-- -->
<entry id="mksrf_fnavyoro" type="char*256" category="mkgriddata"
input_pathname="abs" group="clmexp" valid_values="" >
Orography file with surface heights and land area fraction
</entry>
<entry id="mksrf_fclmgrid" type="char*256" category="mkgriddata"
input_pathname="abs" group="clmexp" valid_values="" >
CLM grid file
</entry>
<entry id="mksrf_fccsmdom" type="char*256" category="mkgriddata"
input_pathname="abs" group="clmexp" valid_values="" >
CESM domain file
</entry>
<entry id="mksrf_fcamfile" type="char*256" category="mkgriddata"
input_pathname="abs" group="clmexp" valid_values="" >
CAM file
</entry>
<entry id="mksrf_frawtopo" type="char*256" category="mkgriddata"
input_pathname="abs" group="clmexp" valid_values="" >
Raw topography file
</entry>
<entry id="mksrf_fcamtopo" type="char*256" category="mkgriddata"
input_pathname="abs" group="clmexp" valid_values="" >
CAM topography file
</entry>
<entry id="mksrf_lsmlon" type="integer" category="mkgriddata"
group="clmexp" valid_values="" >
Number of longitudes to use for a regional grid (for single-point set to 1)
</entry>
<entry id="mksrf_lsmlat" type="integer" category="mkgriddata"
group="clmexp" valid_values="" >
Number of latitudes to use for a regional grid (for single-point set to 1)
</entry>
<entry id="mksrf_edgen" type="real" category="mkgriddata"
group="clmexp" valid_values="" >
Northern edge of the regional grid
</entry>
<entry id="mksrf_edges" type="real" category="mkgriddata"
group="clmexp" valid_values="" >
Southern edge of the regional grid
</entry>
<entry id="mksrf_edgee" type="real" category="mkgriddata"
group="clmexp" valid_values="" >
Eastern edge of the regional grid
</entry>
<entry id="mksrf_edgew" type="real" category="mkgriddata"
group="clmexp" valid_values="" >
Western edge of the regional grid
</entry>
<!-- -->
<!-- mkghg -->
<!-- -->
<entry id="mkghg_bndtvghg" type="char*256" category="tools"
input_pathname="abs" group="clmexp" valid_values="" >
Historical greenhouse gas concentrations from CAM, only used
by getco2_historical.ncl
</entry>
<!-- -->
<!-- files needed for tools/ncl_scripts -->
<!-- -->
<entry id="faerdep" type="char*256" category="tools"
input_pathname="abs" group="clmexp" valid_values="" >
Aerosol deposition file name (only used for aerdepregrid.ncl)
</entry>
<entry id="f_fracdata" type="char*256" category="tools"
input_pathname="abs" group="domain_nl" valid_values="" >
Full pathname of CLM fraction dataset (only used for mkdatadomain).
</entry>
<entry id="f_griddata" type="char*256" category="tools"
input_pathname="abs" group="domain_nl" valid_values="" >
Full pathname of CLM grid dataset (only used for mkdatadomain).
</entry>
<entry id="f_domain" type="char*256" category="tools"
input_pathname="abs" group="domain_nl" valid_values="" >
Full pathname of output domain dataset (only used for mkdatadomain).
</entry>
<entry id="dtype" type="char*5" category="tools"
group="domain_nl" valid_values="datm,docn" >
Type of domain file to create (ocean or atmosphere) (only used for mkdatadomain)
</entry>
<!-- ======================================================================================== -->
<!-- ndepdyn streams Namelist (only used when bgc=cn/cndv) -->
<!-- ======================================================================================== -->
<entry id="stream_year_first_ndep" type="integer" category="datasets"
group="ndepdyn_nml" valid_values="" >
First year to loop over for Nitrogen Deposition data
</entry>
<entry id="stream_year_last_ndep" type="integer" category="datasets"
group="ndepdyn_nml" valid_values="" >
Last year to loop over for Nitrogen Deposition data
</entry>
<entry id="model_year_align_ndep" type="integer" category="datasets"
group="ndepdyn_nml" valid_values="" >
Simulation year that aligns with stream_year_first_ndep value
</entry>
<entry id="stream_fldfilename_ndep" type="char*256" category="datasets"
input_pathname="abs" group="ndepdyn_nml" valid_values="" >
Filename of input stream data for Nitrogen Deposition
</entry>
<entry id="ndepmapalgo" type="char*256" category="datasets"
group="ndepdyn_nml" valid_values="bilinear,nn,nnoni,nnonj,spval,copy" >
Mapping method from Nitrogen deposition input file to the model resolution
bilinear = bilinear interpolation
nn = nearest neighbor
nnoni = nearest neighbor on the "i" (longitude) axis
nnonj = nearest neighbor on the "j" (latitude) axis
spval = set to special value
copy = copy using the same indices
</entry>
<entry id="diri" type="char*256" category="datm"
group="modelio" valid_values="">
datm input directory
</entry>
<entry id="diro" type="char*256" category="datm"
group="modelio" valid_values="">
datm output directory
</entry>
<entry id="logfile" type="char*256" category="datm"
group="modelio" valid_values="">
Datm logfile name
</entry>
<!-- ======================================================================================== -->
<!-- Mapping files -->
<!-- ======================================================================================== -->
<entry id="map" type="char*256" category="mksurfdata"
input_pathname="abs" group="clmexp" valid_values="" >
Mapping file to go from one resolution/land-mask to another resolution/land-mask
</entry>
<entry id="lmask" type="char*10" category="mksurfdata"
group="default_settings"
valid_values="nomask,navy,AVHRR,MODIS,USGS,IGBP-GSDP,ISRIC-WISE,LandScan2004,GLOBE-Gardner,GLOBE-Gardner-mergeGIS">
Land mask description for mksurfdata input files
</entry>
<entry id="hgrid" type="char*10" category="mksurfdata"
group="default_settings"
valid_values="0.1x0.1,0.5x0.5,10x10min,5x5min,360x720cru,19basin">
Horizontal grid resolutions for mksurfdata input files
</entry>
<!-- ======================================================================================== -->
<!-- Generic issues (resolution, mask etc.) -->
<!-- ======================================================================================== -->
<entry id="chk_res" type="integer" category="default_settings"
group="default_settings" valid_values="0,1" >
Check that the resolution and land-mask is valid before continuing.
</entry>
<entry id="ssp_rcp" type="char*8" category="default_settings"
group="default_settings"
valid_values="hist">
Shared Socioeconomic Pathway (SSP) and Representative Concentration Pathway (RCP) combination for future scenarios
The form is SSPn-m.m Where n is the SSP number and m.m is RCP radiative forcing at peak or 2100 in W/m^2
n is just the whole number of the specific SSP scenario. The lower numbers have higher mitigation
- the higher numbers less mitigation, more than one SSP can result in the same RCP forcing
hist means do NOT use a future scenario, just use historical data.
</entry>
<entry id="note" type="integer" category="default_settings"
group="default_settings" valid_values="0,1" >
Add a note to the output namelist about the options given to build-namelist
</entry>
<entry id="clm_start_type" type="char*8" category="default_settings"
group="default_settings" valid_values="default,cold,arb_ic,startup,continue,branch" >
CLM run type.
'default' use the default type of clm_start type for this configuration
'cold' is a run from arbitrary initial conditions
'arb_ic' is a run using initial conditions if provided, OR arbitrary initial conditions if no files can be found
'startup' is an initial run with initial conditions provided.
'continue' is a restart run.
'branch' is a restart run in which properties of the output history files may be changed.
</entry>
<entry id="res" type="char*30" category="default_settings"
group="default_settings"
valid_values=
"512x1024,360x720cru,128x256,64x128,48x96,32x64,8x16,94x192,0.23x0.31,0.47x0.63,0.9x1.25,1.9x2.5,2.5x3.33,4x5,10x15,5x5_amazon,1x1_camdenNJ,1x1_vancouverCAN,1x1_mexicocityMEX,1x1_asphaltjungleNJ,1x1_brazil,1x1_urbanc_alpha,1x1_numaIA,1x1_smallvilleIA,0.1x0.1,0.5x0.5,3x3min,5x5min,10x10min,0.33x0.33,ne4np4,ne16np4,ne30np4,ne60np4,ne120np4,ne240np4">
Horizontal resolutions
Note: 0.1x0.1, 0.5x0.5, 5x5min, 10x10min, 3x3min and 0.33x0.33 are only used for CLM tools
</entry>
<entry id="mask" type="char*10" category="default_settings"
group="default_settings"
valid_values="USGS,gx3v7,gx1v6,gx1v7,navy,test,tx0.1v2,tx1v1,T62,cruncep">
Land mask description
</entry>
<entry id="clm_accelerated_spinup" type="char*3" category="default_settings"
group="default_settings" valid_values="on,off" >
Command line argument for setting up your simulation in a mode for faster
throughput. By default turns off some options, and sets up for a lower level
of output. When bgc_mode is some level of prognostic BGC (so NOT Satellite Phenology)
it also sets up for accelerated decomposition.
NOTE: THIS CORRESPONDS DIRECTLY TO THE env_run.xml VARIABLE OF THE SAME NAME.
Set the env_run variable, rather than setting this directly.
</entry>
<entry id="lnd_tuning_mode" type="char*20" category="default_settings"
group="default_settings"
valid_values="clm4_0_default,clm4_0_CRUv7,clm4_0_GSWP3v1,clm4_0_cam6.0">
General configuration of model version and atmospheric forcing to tune the model to run under.
This sets the model to run with constants that were set to run well under the configuration
of model version and atmospheric forcing. To run well constants would need to be changed
to run with a different type of atmospheric forcing.
</entry>
<entry id="irrig" type="logical" category="default_settings"
group="default_settings" >
If TRUE, irrigation will be active (find surface datasets with active irrigation).
</entry>
<entry id="megan" type="integer" category="default_settings"
group="default_settings" valid_values="0,1">
If 1, turn on the MEGAN model for BVOC's (Biogenic Volitile Organic Compounds)
</entry>
<entry id="sim_year" type="char*4" category="default_settings"
group="default_settings" valid_values=
"1000,850,1100,1350,1600,1850,1855,1865,1875,1885,1895,1905,1915,1925,1935,1945,1955,1965,1975,1985,1995,2000,2005">
Year to simulate and to provide datasets for (such as surface datasets, initial conditions, aerosol-deposition, Nitrogen deposition rates etc.)
A sim_year of 1000 corresponds to data used for testing only, NOT corresponding to any real datasets.
Most years are only used for clm_tools and there aren't CLM datasets that correspond to them.
CLM datasets exist for years: 1000 (for testing), 1850, and 2000
</entry>
<entry id="sim_year_range" type="char*9" category="default_settings"
group="default_settings" valid_values=
"constant,1000-1002,1000-1004,850-1100,1100-1350,1350-1600,1600-1850,1850-2000,1850-2100,2000-2100">
Range of years to simulate transitory datasets for (such as dynamic: land-use datasets, aerosol-deposition, Nitrogen deposition rates etc.)
Constant means simulation will be held at a constant year given in sim_year.
A sim_year_range of 1000-1002 or 1000-1004 corresponds to data used for testing only, NOT corresponding to any real datasets.
A sim_year_range that goes beyond 2005 corresponds to historical data until 2005 and then scenario data beyond that point.
</entry>
<entry id="clm_demand" type="char*256" category="default_settings"
group="default_settings" valid_values="">
Namelist entries to demand be provided on the namelist.
</entry>
<entry id="use_case_desc" type="char*256" category="default_settings"
group="use_case_desc" valid_values="" >
Description of the use case selected.
</entry>
<!-- ======================================================================================== -->
<!-- drydep Namelists -->
<!-- ======================================================================================== -->
<entry id="drydep_method" type="char*16" category="dry-deposition"
group="drydep_inparm"
valid_values="xactive_lnd,xactive_atm,table">
Where dry deposition is calculated (from land, atmosphere, or from a table)
</entry>
<!-- List of all of the potential Chemical species that can be use for Dry-Deposition
Anything NOT in this list - can NOT be used. As species are added in
seq_drydep_mod.F90 this list needs to be updated.
Note: Species from H2 and thereafter are species that "map"
to other previous species in the list. The mapping is laid
out in seq_drydep_mod.F90.
-->
<entry id="drydep_list" type="char*32(100)" category="dry-deposition"
group="drydep_inparm"
valid_values=
"OX,H2O2,OH,HO2,CO,CH4,CH3O2,CH3OOH,CH2O,CHOOH,NO,NO2,HNO3,CO2,NH3,N2O5,NO3,CH3OH,HO2NO2,O1D,C2H6,C2H5O2,PO2,MACRO2,ISOPO2,C4H10,CH3CHO,C2H5OOH,C3H6,POOH,C2H4,PAN,CH3COOOH,C10H16,CHOCHO,CH3COCHO,GLYALD,CH3CO3,C3H8,C3H7O2,CH3COCH3,C3H7OOH,RO2,ROOH,Rn,ISOP,MVK,MACR,C2H5OH,ONITR,ONIT,ISOPNO3,HYDRALD,HCN,CH3CN,H2,'HYAC','CH3COOH','O3S','O3INERT','MPAN','ISOPOOH','MACROOH','Pb','XOOH','H2SO4','ALKOOH','MEKOOH','TOLOOH','BENOOH','XYLOOH','TERPOOH','SOGM','SOGI','SOGT','SOGB','SOGX','SOA','SO2','SO4','CB1','CB2','OC1','OC2','NH3','NH4','SA1','SA2','SA3','SA4','HCN','CH3CN','HCOOH','SOAM','SOAI','SOAT','SOAB','SOAX','O3A','XMPAN','XPAN','XNO','XNO2','XHNO3','XONIT','XONITR',XHO2NO2','XNH4NO3','COhc','COme','CO01','CO02','CO03','CO04','CO05','CO06','CO07','CO08','CO09','CO10','CO11','CO12','CO13','CO14','CO15','CO16','CO17','CO18','CO19','CO20','CO21','CO22','CO23','CO24','CO25','CO26','CO27','CO28','CO29','CO30','CO31','CO32','CO33','CO34','CO35','CO36','CO37','CO38','CO39','CO40','CO41','CO42','CO43','CO44','CO45','CO46','CO47','CO48','CO49','CO50','NH4NO3'"
>
List of chemical constituents that dry deposition will be calculated for
</entry>
<!-- ======================================================================================== -->
<!-- MEGAN VOC emissions namelist options -->
<!-- ======================================================================================== -->
<entry id="megan_factors_file" type="char*256" input_pathname="abs" category="drv_physics"
group="megan_emis_nl" valid_values="" >
File containing MEGAN emissions factors. Includes the list of MEGAN compounds that can be
used in the Comp_Name variable on the file.
</entry>
<entry id="megan_specifier" type="char*1024(100)" category="drv_physics"
group="megan_emis_nl" valid_values="" >
MEGAN specifier. This is in the form of: Chem-compound = megan_compound(s)
where megan_compound(s) can be the sum of megan compounds with a "+" between them.
In each equation, the item to the left of the equal sign is a CAM chemistry compound, the
items to the right are compounds known to the MEGAN model (single or combinations).
For example,
megan_specifier = 'ISOP = isoprene',
'C10H16 = pinene_a + carene_3 + thujene_a'
</entry>
<entry id="megan_mapped_emisfctrs" type="logical" category="drv_physics"
group="megan_emis_nl" >
MEGAN mapped isoprene emissions factors switch
If TRUE then use mapped MEGAN emissions factors for isoprene.
</entry>
<entry id="megan_cmpds" type="char*32(150)" category="drv_physics"
group="drv_physics"
valid_values=
"isoprene,myrcene,sabinene,limonene,carene_3,ocimene_t_b,pinene_b,pinene_a,2met_styrene,cymene_p,cymene_o,phellandrene_a,thujene_a,terpinene_a,terpinene_g,terpinolene,phellandrene_b,camphene,bornene,fenchene_a,ocimene_al,ocimene_c_b,tricyclene,estragole,camphor,fenchone,piperitone,thujone_a,thujone_b,cineole_1_8,borneol,linalool,terpineol_4,terpineol_a,linalool_OXD_c,linalool_OXD_t,ionone_b,bornyl_ACT,farnescene_a,caryophyllene_b,acoradiene,aromadendrene,bergamotene_a,bergamotene_b,bisabolene_a,bisabolene_b,bourbonene_b,cadinene_d,cadinene_g,cedrene_a,copaene_a,cubebene_a,cubebene_b,elemene_b,farnescene_b,germacrene_B,germacrene_D,gurjunene_b,humulene_a,humulene_g,isolongifolene,longifolene,longipinene,muurolene_a,muurolene_g,selinene_b,selinene_d,nerolidol_c,nerolidol_t,cedrol,MBO_2m3e2ol,methanol,acetone,methane,ammonia,nitrous_OXD,nitric_OXD,acetaldehyde,ethanol,formic_acid,formaldehyde,acetic_acid,MBO_3m2e1ol,MBO_3m3e1ol,benzaldehyde,butanone_2,decanal,dodecene_1,geranyl_acetone,heptanal,heptane,hexane,met_benzoate,met_heptenone,neryl_acetone,nonanal,nonenal,octanal,octanol,octenol_1e3ol,oxopentanal,pentane,phenyl_CCO,pyruvic_acid,terpinyl_ACT_a,tetradecene_1,toluene,carbon_monoxide,butene,ethane,ethene,hydrogen_cyanide,propane,propene,carbon_2s,carbonyl_s,diallyl_2s,2met_2s,2met_s,met_chloride,met_bromide,met_iodide,hydrogen_s,met_mercaptan,met_propenyl_2s,PPPP_2s,2met_nonatriene,met_salicylate,indole,jasmone,met_jasmonate,3met_3DCTT,hexanal,hexanol_1,hexenal_c3,hexenal_t2,hexenol_c3,hexenyl_ACT_c3,homosalate,Ehsalate,pentanal,heptanone,anisole,verbenene,benzyl-acetate,myrtenal,benzyl-alcohol,meta-cymenene,ipsenol,Napthalene"
>
List of possible MEGAN compounds to use
(the list used by the simulation is on the megan_factors_file as the Comp_Name)
</entry>
<!-- C isotope flags -->
<entry id="use_c13" type="logical" category="clm_isotope"
group="clm_inparm" valid_values="" >
Enable C13 model
</entry>
<entry id="use_c14" type="logical" category="clm_isotope"
group="clm_inparm" valid_values="" >
Enable C14 model
</entry>
</namelist_definition>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,17 @@
<?xml version="1.0"?>
<namelist_definition>
<version>1.0</version>
<!-- The following entries are being used by CLM's build-namelist,
which has not been converted to parse the version 2.0 schema for
a namelist_definition.xml file
-->
<entry id="start_type" type="char*64" category="expdef" group="seq_infodata_inparm" valid_values="startup,branch,continue"> </entry>
<entry id="start_ymd" type="integer" category="time" group="seq_timemgr_inparm"> </entry>
<entry id="glc_nec" type="integer" category="seq_flds" group="seq_cplflds_inparm"> </entry>
</namelist_definition>

View File

@ -0,0 +1,131 @@
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="namelist_definition.xsl"?>
<namelist_definition version="1.0">
<entry id="drv_flds_in_files"
type="char*256(10)"
category="drv_physics"
group="default_settings"
valid_values="" >
List of files to merge together that contains drv_flds_in namelists
The paths are relative to the case directory. drv_flds_in include the namelists that
the driver reads and gives information on additional fields to be passed to different
components that need to look at the same data.
</entry>
<!-- ======================================================================================== -->
<!-- MEGAN VOC emissions namelist options -->
<!-- ======================================================================================== -->
<entry id="megan_factors_file"
type="char*256"
input_pathname="abs"
category="drv_physics"
group="megan_emis_nl"
valid_values="" >
File containing MEGAN emissions factors. Includes the list of MEGAN compounds that can be
used in the Comp_Name variable on the file.
</entry>
<entry id="megan_specifier"
type="char*1024(100)"
category="drv_physics"
group="megan_emis_nl"
valid_values="" >
MEGAN specifier. This is in the form of: Chem-compound = megan_compound(s)
where megan_compound(s) can be the sum of megan compounds with a "+" between them.
In each equation, the item to the left of the equal sign is a CAM chemistry compound, the
items to the right are compounds known to the MEGAN model (single or combinations).
For example: megan_specifier = 'ISOP = isoprene', 'C10H16 = pinene_a + carene_3 + thujene_a'
</entry>
<entry id="megan_mapped_emisfctrs"
type="logical"
category="drv_physics"
group="megan_emis_nl" >
MEGAN mapped isoprene emissions factors switch
If TRUE then use mapped MEGAN emissions factors for isoprene.
</entry>
<entry id="megan_cmpds"
type="char*32(150)"
category="drv_physics"
group="drv_physics"
valid_values=
"isoprene,myrcene,sabinene,limonene,carene_3,ocimene_t_b,pinene_b,pinene_a,2met_styrene,cymene_p,cymene_o,phellandrene_a,thujene_a,terpinene_a,terpinene_g,terpinolene,phellandrene_b,camphene,bornene,fenchene_a,ocimene_al,ocimene_c_b,tricyclene,estragole,camphor,fenchone,piperitone,thujone_a,thujone_b,cineole_1_8,borneol,linalool,terpineol_4,terpineol_a,linalool_OXD_c,linalool_OXD_t,ionone_b,bornyl_ACT,farnescene_a,caryophyllene_b,acoradiene,aromadendrene,bergamotene_a,bergamotene_b,bisabolene_a,bisabolene_b,bourbonene_b,cadinene_d,cadinene_g,cedrene_a,copaene_a,cubebene_a,cubebene_b,elemene_b,farnescene_b,germacrene_B,germacrene_D,gurjunene_b,humulene_a,humulene_g,isolongifolene,longifolene,longipinene,muurolene_a,muurolene_g,selinene_b,selinene_d,nerolidol_c,nerolidol_t,cedrol,MBO_2m3e2ol,methanol,acetone,methane,ammonia,nitrous_OXD,nitric_OXD,acetaldehyde,ethanol,formic_acid,formaldehyde,acetic_acid,MBO_3m2e1ol,MBO_3m3e1ol,benzaldehyde,butanone_2,decanal,dodecene_1,geranyl_acetone,heptanal,heptane,hexane,met_benzoate,met_heptenone,neryl_acetone,nonanal,nonenal,octanal,octanol,octenol_1e3ol,oxopentanal,pentane,phenyl_CCO,pyruvic_acid,terpinyl_ACT_a,tetradecene_1,toluene,carbon_monoxide,butene,ethane,ethene,hydrogen_cyanide,propane,propene,carbon_2s,carbonyl_s,diallyl_2s,2met_2s,2met_s,met_chloride,met_bromide,met_iodide,hydrogen_s,met_mercaptan,met_propenyl_2s,PPPP_2s,2met_nonatriene,met_salicylate,indole,jasmone,met_jasmonate,3met_3DCTT,hexanal,hexanol_1,hexenal_c3,hexenal_t2,hexenol_c3,hexenyl_ACT_c3,homosalate,Ehsalate,pentanal,heptanone,anisole,verbenene,benzyl-acetate,myrtenal,benzyl-alcohol,meta-cymenene,ipsenol,Napthalene">
List of possible MEGAN compounds to use
(the list used by the simulation is on the megan_factors_file as the Comp_Name)
</entry>
<!-- ======================================================================================== -->
<!-- drydep Namelists -->
<!-- ======================================================================================== -->
<entry id="drydep_method"
type="char*16"
category="dry-deposition"
group="drydep_inparm"
valid_values="xactive_lnd,xactive_atm,table">
Where dry deposition is calculated (from land, atmosphere, or from a table)
This specifies the method used to calculate dry
deposition velocities of gas-phase chemical species. The available methods
are:
'table' - prescribed method in CAM
'xactive_atm' - interactive method in CAM
'xactive_lnd' - interactive method in CLM
</entry>
<entry id="drydep_list"
type="char*32(300)"
category="dry-deposition"
group="drydep_inparm"
valid_values="">
List of species that undergo dry deposition.
</entry>
<!-- ======================================================================================== -->
<!-- Fire emissions fluxes -->
<!-- ======================================================================================== -->
<entry id="fire_emis_factors_file"
type="char*256"
input_pathname="abs"
category="Fire_emissions"
group="fire_emis_nl"
valid_values="" >
File containing fire emissions factors.
Default: none
</entry>
<entry id="fire_emis_specifier"
type="char*1024(100)"
category="Fire_emissions"
group="fire_emis_nl"
valid_values="" >
Fire emissions specifier.
Default: none
</entry>
<entry id="fire_emis_elevated"
type="logical"
category="Fire_emissions"
group="fire_emis_nl"
valid_values="" >
If ture fire emissions are input into atmosphere as elevated forcings.
Otherwise they are treated as surface emissions.
Default: TRUE
</entry>
<!-- ======================================================================================== -->
<!-- CARMA fields -->
<!-- ======================================================================================== -->
<entry id="carma_fields" type="char*256" category="carma"
group="carma_inparm" valid_values="" >
List of fluxes needed by the CARMA model, from CLM to CAM.
</entry>
</namelist_definition>

View File

@ -0,0 +1,17 @@
<?xml version="1.0"?>
<namelist_defaults>
<use_case_desc >Simulate transient land-use, and aerosol deposition changes from 1850 to current day with historical data, and then to 2100 with the CMIP6 SSP1-1.9 scenario</use_case_desc>
<use_case_desc use_cn=".true." >Simulate transient land-use, aerosol deposition, and Nitrogen deposition changes from 1850 to current day with historical data, and then to 2100 with the CMIP6 SSP1-1.9 scenario</use_case_desc>
<!-- Have a minimal list of things set here, sim_year, sim_year_range, and ssp_rcp, other things should be dependent on these and
set in a namelist_defaults xml file -->
<sim_year>1850</sim_year>
<sim_year_range>1850-2100</sim_year_range>
<ssp_rcp>SSP1-1.9</ssp_rcp>
</namelist_defaults>

View File

@ -0,0 +1,17 @@
<?xml version="1.0"?>
<namelist_defaults>
<use_case_desc >Simulate transient land-use, and aerosol deposition changes from 1850 to current day with historical data, and then to 2100 with the CMIP6 SSP1-2.6 scenario</use_case_desc>
<use_case_desc use_cn=".true." >Simulate transient land-use, aerosol deposition, and Nitrogen deposition changes from 1850 to current day with historical data, and then to 2100 with the CMIP6 SSP1-2.6 scenario</use_case_desc>
<!-- Have a minimal list of things set here, sim_year, sim_year_range, and ssp_rcp, other things should be dependent on these and
set in a namelist_defaults xml file -->
<sim_year>1850</sim_year>
<sim_year_range>1850-2100</sim_year_range>
<ssp_rcp>SSP1-2.6</ssp_rcp>
</namelist_defaults>

View File

@ -0,0 +1,17 @@
<?xml version="1.0"?>
<namelist_defaults>
<use_case_desc >Simulate transient land-use, and aerosol deposition changes from 1850 to current day with historical data, and then to 2100 with the CMIP6 SSP2-4.5 scenario</use_case_desc>
<use_case_desc use_cn=".true." >Simulate transient land-use, aerosol deposition, and Nitrogen deposition changes from 1850 to current day with historical data, and then to 2100 with the CMIP6 SSP2-4.5 scenario</use_case_desc>
<!-- Have a minimal list of things set here, sim_year, sim_year_range, and ssp_rcp, other things should be dependent on these and
set in a namelist_defaults xml file -->
<sim_year>1850</sim_year>
<sim_year_range>1850-2100</sim_year_range>
<ssp_rcp>SSP2-4.5</ssp_rcp>
</namelist_defaults>

View File

@ -0,0 +1,17 @@
<?xml version="1.0"?>
<namelist_defaults>
<use_case_desc >Simulate transient land-use, and aerosol deposition changes from 1850 to current day with historical data, and then to 2100 with the CMIP6 SSP3-7.0 scenario</use_case_desc>
<use_case_desc use_cn=".true." >Simulate transient land-use, aerosol deposition, and Nitrogen deposition changes from 1850 to current day with historical data, and then to 2100 with the CMIP6 SSP3-7.0 scenario</use_case_desc>
<!-- Have a minimal list of things set here, sim_year, sim_year_range, and ssp_rcp, other things should be dependent on these and
set in a namelist_defaults xml file -->
<sim_year>1850</sim_year>
<sim_year_range>1850-2100</sim_year_range>
<ssp_rcp>SSP3-7.0</ssp_rcp>
</namelist_defaults>

View File

@ -0,0 +1,17 @@
<?xml version="1.0"?>
<namelist_defaults>
<use_case_desc >Simulate transient land-use, and aerosol deposition changes from 1850 to current day with historical data, and then to 2100 with the CMIP6 SSP4-3.4 scenario</use_case_desc>
<use_case_desc use_cn=".true." >Simulate transient land-use, aerosol deposition, and Nitrogen deposition changes from 1850 to current day with historical data, and then to 2100 with the CMIP6 SSP4-3.4 scenario</use_case_desc>
<!-- Have a minimal list of things set here, sim_year, sim_year_range, and ssp_rcp, other things should be dependent on these and
set in a namelist_defaults xml file -->
<sim_year>1850</sim_year>
<sim_year_range>1850-2100</sim_year_range>
<ssp_rcp>SSP4-3.4</ssp_rcp>
</namelist_defaults>

View File

@ -0,0 +1,17 @@
<?xml version="1.0"?>
<namelist_defaults>
<use_case_desc >Simulate transient land-use, and aerosol deposition changes from 1850 to current day with historical data, and then to 2100 with the CMIP6 SSP4-6.0 scenario</use_case_desc>
<use_case_desc use_cn=".true." >Simulate transient land-use, aerosol deposition, and Nitrogen deposition changes from 1850 to current day with historical data, and then to 2100 with the CMIP6 SSP4-6.0 scenario</use_case_desc>
<!-- Have a minimal list of things set here, sim_year, sim_year_range, and ssp_rcp, other things should be dependent on these and
set in a namelist_defaults xml file -->
<sim_year>1850</sim_year>
<sim_year_range>1850-2100</sim_year_range>
<ssp_rcp>SSP4-6.0</ssp_rcp>
</namelist_defaults>

View File

@ -0,0 +1,17 @@
<?xml version="1.0"?>
<namelist_defaults>
<use_case_desc >Simulate transient land-use, and aerosol deposition changes from 1850 to current day with historical data, and then to 2100 with the CMIP6 SSP5-3.4 scenario</use_case_desc>
<use_case_desc use_cn=".true." >Simulate transient land-use, aerosol deposition, and Nitrogen deposition changes from 1850 to current day with historical data, and then to 2100 with the CMIP6 SSP5-3.4 scenario</use_case_desc>
<!-- Have a minimal list of things set here, sim_year, sim_year_range, and ssp_rcp, other things should be dependent on these and
set in a namelist_defaults xml file -->
<sim_year>1850</sim_year>
<sim_year_range>1850-2100</sim_year_range>
<ssp_rcp>SSP5-3.4</ssp_rcp>
</namelist_defaults>

View File

@ -0,0 +1,17 @@
<?xml version="1.0"?>
<namelist_defaults>
<use_case_desc >Simulate transient land-use, and aerosol deposition changes from 1850 to current day with historical data, and then to 2100 with the CMIP6 SSP5-8.5 scenario</use_case_desc>
<use_case_desc use_cn=".true." >Simulate transient land-use, aerosol deposition, and Nitrogen deposition changes from 1850 to current day with historical data, and then to 2100 with the CMIP6 SSP5-8.5 scenario</use_case_desc>
<!-- Have a minimal list of things set here, sim_year, sim_year_range, and ssp_rcp, other things should be dependent on these and
set in a namelist_defaults xml file -->
<sim_year>1850</sim_year>
<sim_year_range>1850-2100</sim_year_range>
<ssp_rcp>SSP5-8.5</ssp_rcp>
</namelist_defaults>

View File

@ -0,0 +1,49 @@
<?xml version="1.0"?>
<namelist_defaults>
<use_case_desc>Conditions to simulate 1850 land-use</use_case_desc>
<sim_year>1850</sim_year>
<sim_year_range>constant</sim_year_range>
<irrigate use_crop=".true." phys="clm5_0" >.false.</irrigate>
<irrigate use_crop=".true." phys="clm4_5" >.false.</irrigate>
<stream_year_first_ndep phys="clm4_0" bgc="cn" >1850</stream_year_first_ndep>
<stream_year_last_ndep phys="clm4_0" bgc="cn" >1850</stream_year_last_ndep>
<stream_year_first_ndep phys="clm4_0" bgc="cndv" >1850</stream_year_first_ndep>
<stream_year_last_ndep phys="clm4_0" bgc="cndv" >1850</stream_year_last_ndep>
<stream_year_first_ndep phys="clm4_5" use_cn=".true." >1850</stream_year_first_ndep>
<stream_year_last_ndep phys="clm4_5" use_cn=".true." >1850</stream_year_last_ndep>
<stream_year_first_ndep phys="clm5_0" use_cn=".true." >1850</stream_year_first_ndep>
<stream_year_last_ndep phys="clm5_0" use_cn=".true." >1850</stream_year_last_ndep>
<stream_year_first_popdens phys="clm4_5" cnfireson=".true." >1850</stream_year_first_popdens>
<stream_year_last_popdens phys="clm4_5" cnfireson=".true." >1850</stream_year_last_popdens>
<stream_year_first_popdens phys="clm5_0" cnfireson=".true." >1850</stream_year_first_popdens>
<stream_year_last_popdens phys="clm5_0" cnfireson=".true." >1850</stream_year_last_popdens>
<stream_year_first_urbantv phys="clm5_0" >1850</stream_year_first_urbantv>
<stream_year_last_urbantv phys="clm5_0" >1850</stream_year_last_urbantv>
<stream_year_first_urbantv phys="clm4_5" >1850</stream_year_first_urbantv>
<stream_year_last_urbantv phys="clm4_5" >1850</stream_year_last_urbantv>
<!-- Use single year ndep file for CLM50 as the new multi-year file has different times that change answers relative to control sims -->
<stream_fldfilename_ndep phys="clm5_0" use_cn=".true."
>lnd/clm2/ndepdata/fndep_clm_WACCM6_CMIP6piControl001_y21-50avg_1850monthly_0.95x1.25_c180802.nc</stream_fldfilename_ndep>
<stream_fldfilename_ndep phys="clm4_5" use_cn=".true."
>lnd/clm2/ndepdata/fndep_clm_WACCM6_CMIP6piControl001_y21-50avg_1850monthly_0.95x1.25_c180802.nc</stream_fldfilename_ndep>
<ndep_taxmode phys="clm5_0" use_cn=".true." >cycle</ndep_taxmode>
<ndep_varlist phys="clm5_0" use_cn=".true." >NDEP_month</ndep_varlist>
</namelist_defaults>

View File

@ -0,0 +1,59 @@
<?xml version="1.0"?>
<namelist_defaults>
<use_case_desc>Simulate current conditions without ANY anthropogenic influnces</use_case_desc>
<sim_year>PtVg</sim_year>
<sim_year_range>constant</sim_year_range>
<irrigate>.false.</irrigate>
<stream_year_first_ndep phys="clm4_0" bgc="cn" >1850</stream_year_first_ndep>
<stream_year_last_ndep phys="clm4_0" bgc="cn" >1850</stream_year_last_ndep>
<stream_year_first_ndep phys="clm4_0" bgc="cndv" >1850</stream_year_first_ndep>
<stream_year_last_ndep phys="clm4_0" bgc="cndv" >1850</stream_year_last_ndep>
<stream_year_first_ndep phys="clm4_5" use_cn=".true." >1850</stream_year_first_ndep>
<stream_year_last_ndep phys="clm4_5" use_cn=".true." >1850</stream_year_last_ndep>
<stream_year_first_ndep phys="clm5_0" use_cn=".true." >1850</stream_year_first_ndep>
<stream_year_last_ndep phys="clm5_0" use_cn=".true." >1850</stream_year_last_ndep>
<ndep_taxmode phys="clm5_0" use_cn=".true." >cycle</ndep_taxmode>
<ndep_varlist phys="clm5_0" use_cn=".true." >NDEP_month</ndep_varlist>
<stream_year_first_popdens phys="clm4_0" cnfireson=".true." >1925</stream_year_first_popdens>
<stream_year_last_popdens phys="clm4_0" cnfireson=".true." >1925</stream_year_last_popdens>
<stream_year_first_popdens phys="clm4_5" cnfireson=".true." >1925</stream_year_first_popdens>
<stream_year_last_popdens phys="clm4_5" cnfireson=".true." >1925</stream_year_last_popdens>
<stream_year_first_popdens phys="clm5_0" cnfireson=".true." >1925</stream_year_first_popdens>
<stream_year_last_popdens phys="clm5_0" cnfireson=".true." >1925</stream_year_last_popdens>
<!-- zero population density file -->
<stream_fldfilename_popdens hgrid="0.5x0.5" use_cn=".true."
>lnd/clm2/firedata/clmforc.no_anthro_zero_hdm_1x1_simyr1925_181113.nc</stream_fldfilename_popdens>
<popdensmapalgo use_cn=".true.">nn</popdensmapalgo>
<stream_year_first_urbantv phys="clm5_0" >1850</stream_year_first_urbantv>
<stream_year_last_urbantv phys="clm5_0" >1850</stream_year_last_urbantv>
<stream_year_first_urbantv phys="clm4_5" >1850</stream_year_first_urbantv>
<stream_year_last_urbantv phys="clm4_5" >1850</stream_year_last_urbantv>
<!-- Turn calculation of human stress indices all the way off to save some CPU -->
<calc_human_stress_indices >NONE</calc_human_stress_indices>
<!-- Turn off URBAN heating and A/C, and turn off harvesting of forests -->
<urban_hac >OFF</urban_hac>
<do_harvest >.false.</do_harvest>
<!-- Set contants having to do with fire due to human influences to zero (human ignition counts, and crop fires -->
<pot_hmn_ign_counts_alpha >0.0</pot_hmn_ign_counts_alpha>
<cropfire_a1 >0.0</cropfire_a1>
</namelist_defaults>

View File

@ -0,0 +1,58 @@
<?xml version="1.0"?>
<namelist_defaults>
<use_case_desc>Conditions to simulate 1850 land-use</use_case_desc>
<sim_year>1850</sim_year>
<sim_year_range>constant</sim_year_range>
<irrigate use_crop=".true." phys="clm5_0" >.false.</irrigate>
<irrigate use_crop=".true." phys="clm4_5" >.false.</irrigate>
<stream_year_first_ndep phys="clm4_0" bgc="cn" >1850</stream_year_first_ndep>
<stream_year_last_ndep phys="clm4_0" bgc="cn" >1850</stream_year_last_ndep>
<stream_year_first_ndep phys="clm4_0" bgc="cndv" >1850</stream_year_first_ndep>
<stream_year_last_ndep phys="clm4_0" bgc="cndv" >1850</stream_year_last_ndep>
<stream_year_first_ndep phys="clm4_5" use_cn=".true." >1850</stream_year_first_ndep>
<stream_year_last_ndep phys="clm4_5" use_cn=".true." >1850</stream_year_last_ndep>
<stream_year_first_ndep phys="clm5_0" use_cn=".true." >1850</stream_year_first_ndep>
<stream_year_last_ndep phys="clm5_0" use_cn=".true." >1850</stream_year_last_ndep>
<stream_year_first_popdens phys="clm4_5" cnfireson=".true." >1850</stream_year_first_popdens>
<stream_year_last_popdens phys="clm4_5" cnfireson=".true." >1850</stream_year_last_popdens>
<stream_year_first_popdens phys="clm5_0" cnfireson=".true." >1850</stream_year_first_popdens>
<stream_year_last_popdens phys="clm5_0" cnfireson=".true." >1850</stream_year_last_popdens>
<stream_year_first_urbantv phys="clm5_0" >1850</stream_year_first_urbantv>
<stream_year_last_urbantv phys="clm5_0" >1850</stream_year_last_urbantv>
<stream_year_first_urbantv phys="clm4_5" >1850</stream_year_first_urbantv>
<stream_year_last_urbantv phys="clm4_5" >1850</stream_year_last_urbantv>
<!-- Use single year ndep file for CLM50 as the new multi-year file has different times that change answers relative to control sims -->
<stream_fldfilename_ndep phys="clm5_0" use_cn=".true."
>lnd/clm2/ndepdata/fndep_clm_WACCM6_CMIP6piControl001_y21-50avg_1850monthly_0.95x1.25_c180802.nc</stream_fldfilename_ndep>
<stream_fldfilename_ndep phys="clm4_5" use_cn=".true."
>lnd/clm2/ndepdata/fndep_clm_WACCM6_CMIP6piControl001_y21-50avg_1850monthly_0.95x1.25_c180802.nc</stream_fldfilename_ndep>
<ndep_taxmode phys="clm5_0" use_cn=".true." >cycle</ndep_taxmode>
<ndep_varlist phys="clm5_0" use_cn=".true." >NDEP_month</ndep_varlist>
<!-- SMYLE L83 changes -->
<dribble_crophrv_xsmrpool_2atm use_crop=".true." >.true.</dribble_crophrv_xsmrpool_2atm>
<use_init_interp>.true.</use_init_interp>
<use_c13 use_cn=".true."> .false.</use_c13>
<use_c14 use_cn=".true."> .false.</use_c14>
<!-- This differs from the default in that it turns on virtual columns over Antarctica
This is desired so that we have the output needed to drive a later offline CISM Antarctica simulation
However, this increases the cost of CLM by about 10% -->
<glacier_region_behavior> 'single_at_atm_topo', 'virtual', 'virtual', 'virtual'</glacier_region_behavior>
</namelist_defaults>

View File

@ -0,0 +1,39 @@
<?xml version="1.0"?>
<namelist_defaults>
<use_case_desc>Conditions to simulate 2000 land-use</use_case_desc>
<sim_year>2000</sim_year>
<sim_year_range>constant</sim_year_range>
<irrigate use_crop=".true." phys="clm5_0" use_cndv=".false.">.true.</irrigate>
<irrigate use_crop=".true." phys="clm5_0" use_cndv=".true." >.false.</irrigate>
<irrigate use_crop=".true." phys="clm4_5" >.false.</irrigate>
<stream_year_first_ndep phys="clm4_0" bgc="cn" >2000</stream_year_first_ndep>
<stream_year_last_ndep phys="clm4_0" bgc="cn" >2000</stream_year_last_ndep>
<stream_year_first_ndep phys="clm4_0" bgc="cndv" >2000</stream_year_first_ndep>
<stream_year_last_ndep phys="clm4_0" bgc="cndv" >2000</stream_year_last_ndep>
<stream_year_first_ndep phys="clm4_5" use_cn=".true." >2000</stream_year_first_ndep>
<stream_year_last_ndep phys="clm4_5" use_cn=".true." >2000</stream_year_last_ndep>
<stream_year_first_ndep phys="clm5_0" use_cn=".true." >2000</stream_year_first_ndep>
<stream_year_last_ndep phys="clm5_0" use_cn=".true." >2000</stream_year_last_ndep>
<stream_year_first_popdens phys="clm4_5" cnfireson=".true." >2000</stream_year_first_popdens>
<stream_year_last_popdens phys="clm4_5" cnfireson=".true." >2000</stream_year_last_popdens>
<stream_year_first_popdens phys="clm5_0" cnfireson=".true." >2000</stream_year_first_popdens>
<stream_year_last_popdens phys="clm5_0" cnfireson=".true." >2000</stream_year_last_popdens>
<stream_year_first_urbantv phys="clm5_0" >2000</stream_year_first_urbantv>
<stream_year_last_urbantv phys="clm5_0" >2000</stream_year_last_urbantv>
<stream_year_first_urbantv phys="clm4_5" >2000</stream_year_first_urbantv>
<stream_year_last_urbantv phys="clm4_5" >2000</stream_year_last_urbantv>
</namelist_defaults>

View File

@ -0,0 +1,39 @@
<?xml version="1.0"?>
<namelist_defaults>
<use_case_desc>Conditions to simulate 2010 land-use</use_case_desc>
<sim_year>2000</sim_year>
<sim_year_range>constant</sim_year_range>
<irrigate use_crop=".true." phys="clm5_0" use_cndv=".false.">.true.</irrigate>
<irrigate use_crop=".true." phys="clm5_0" use_cndv=".true." >.false.</irrigate>
<irrigate use_crop=".true." phys="clm4_5" >.false.</irrigate>
<stream_year_first_ndep phys="clm4_0" bgc="cn" >2010</stream_year_first_ndep>
<stream_year_last_ndep phys="clm4_0" bgc="cn" >2010</stream_year_last_ndep>
<stream_year_first_ndep phys="clm4_0" bgc="cndv" >2010</stream_year_first_ndep>
<stream_year_last_ndep phys="clm4_0" bgc="cndv" >2010</stream_year_last_ndep>
<stream_year_first_ndep phys="clm4_5" use_cn=".true." >2010</stream_year_first_ndep>
<stream_year_last_ndep phys="clm4_5" use_cn=".true." >2010</stream_year_last_ndep>
<stream_year_first_ndep phys="clm5_0" use_cn=".true." >2010</stream_year_first_ndep>
<stream_year_last_ndep phys="clm5_0" use_cn=".true." >2010</stream_year_last_ndep>
<stream_year_first_popdens phys="clm4_5" cnfireson=".true." >2010</stream_year_first_popdens>
<stream_year_last_popdens phys="clm4_5" cnfireson=".true." >2010</stream_year_last_popdens>
<stream_year_first_popdens phys="clm5_0" cnfireson=".true." >2010</stream_year_first_popdens>
<stream_year_last_popdens phys="clm5_0" cnfireson=".true." >2010</stream_year_last_popdens>
<stream_year_first_urbantv phys="clm5_0" >2010</stream_year_first_urbantv>
<stream_year_last_urbantv phys="clm5_0" >2010</stream_year_last_urbantv>
<stream_year_first_urbantv phys="clm4_5" >2010</stream_year_first_urbantv>
<stream_year_last_urbantv phys="clm4_5" >2010</stream_year_last_urbantv>
</namelist_defaults>

View File

@ -0,0 +1,68 @@
<?xml version="1.0"?>
<namelist_defaults>
<flanduse_timeseries hgrid="0.9x1.25" use_crop=".true.">lnd/clm2/surfdata_map/ctsm5.1.dev052/landuse.timeseries_0.9x1.25_hist_78pfts_CMIP6_simyr1700-2020_c210908.nc</flanduse_timeseries>
<fsurdat hgrid="0.9x1.25" use_crop=".true.">lnd/clm2/surfdata_map/ctsm5.1.dev052/surfdata_0.9x1.25_hist_78pfts_CMIP6_simyr1700_c210820.nc</fsurdat>
<use_case_desc >Simulate transient land-use, and aerosol deposition changes from 1850 to 2015</use_case_desc>
<use_case_desc bgc="cn" >Simulate transient land-use, aerosol deposition, and Nitrogen deposition changes from 1850 to 2015</use_case_desc>
<use_case_desc phys="clm4_0" bgc="cndv" >Simulate transient land-use, aerosol deposition, and Nitrogen deposition changes from 1850 to 2015</use_case_desc>
<use_case_desc use_cn=".true." >Simulate transient land-use, aerosol deposition, and Nitrogen deposition changes from 1850 to 2015</use_case_desc>
<sim_year>1850</sim_year>
<sim_year_range>1850-2100</sim_year_range>
<clm_start_type>arb_ic</clm_start_type>
<ssp_rcp>SSP3-7.0</ssp_rcp>
<clm_demand >flanduse_timeseries</clm_demand>
<irrigate use_crop=".true." phys="clm5_0" use_cndv=".false.">.true.</irrigate>
<irrigate use_crop=".true." phys="clm5_0" use_cndv=".true." >.false.</irrigate>
<irrigate use_crop=".true." phys="clm4_5" >.false.</irrigate>
<stream_year_first_ndep phys="clm4_0" bgc="cn" >1850</stream_year_first_ndep>
<stream_year_last_ndep phys="clm4_0" bgc="cn" >2025</stream_year_last_ndep>
<model_year_align_ndep phys="clm4_0" bgc="cn" >1850</model_year_align_ndep>
<stream_year_first_ndep phys="clm4_0" bgc="cndv" >1850</stream_year_first_ndep>
<stream_year_last_ndep phys="clm4_0" bgc="cndv" >2025</stream_year_last_ndep>
<model_year_align_ndep phys="clm4_0" bgc="cndv" >1850</model_year_align_ndep>
<stream_year_first_ndep phys="clm4_5" use_cn=".true." >1850</stream_year_first_ndep>
<stream_year_last_ndep phys="clm4_5" use_cn=".true." >2025</stream_year_last_ndep>
<model_year_align_ndep phys="clm4_5" use_cn=".true." >1850</model_year_align_ndep>
<stream_year_first_ndep phys="clm5_0" use_cn=".true." >1850</stream_year_first_ndep>
<stream_year_last_ndep phys="clm5_0" use_cn=".true." >2025</stream_year_last_ndep>
<model_year_align_ndep phys="clm5_0" use_cn=".true." >1850</model_year_align_ndep>
<stream_year_first_popdens phys="clm4_5" cnfireson=".true." >1850</stream_year_first_popdens>
<stream_year_last_popdens phys="clm4_5" cnfireson=".true." >2025</stream_year_last_popdens>
<model_year_align_popdens phys="clm4_5" cnfireson=".true." >1850</model_year_align_popdens>
<stream_year_first_popdens phys="clm5_0" cnfireson=".true." >1850</stream_year_first_popdens>
<stream_year_last_popdens phys="clm5_0" cnfireson=".true." >2025</stream_year_last_popdens>
<model_year_align_popdens phys="clm5_0" cnfireson=".true." >1850</model_year_align_popdens>
<stream_year_first_urbantv phys="clm5_0" >1850</stream_year_first_urbantv>
<stream_year_last_urbantv phys="clm5_0" >2106</stream_year_last_urbantv>
<model_year_align_urbantv phys="clm5_0" >1850</model_year_align_urbantv>
<stream_year_first_urbantv phys="clm4_5" >1850</stream_year_first_urbantv>
<stream_year_last_urbantv phys="clm4_5" >2106</stream_year_last_urbantv>
<model_year_align_urbantv phys="clm4_5" >1850</model_year_align_urbantv>
<!-- SMYLE L83 changes -->
<dribble_crophrv_xsmrpool_2atm use_crop=".true.">.true.</dribble_crophrv_xsmrpool_2atm>
<use_init_interp>.true.</use_init_interp>
<use_c13 use_cn=".true."> .false.</use_c13>
<use_c14 use_cn=".true."> .false.</use_c14>
<!-- This differs from the default in that it turns on virtual columns over Antarctica
This is desired so that we have the output needed to drive a later offline CISM Antarctica simulation
However, this increases the cost of CLM by about 10% -->
<glacier_region_behavior> 'single_at_atm_topo', 'virtual', 'virtual', 'virtual'</glacier_region_behavior>
</namelist_defaults>

View File

@ -0,0 +1,56 @@
<?xml version="1.0"?>
<namelist_defaults>
<use_case_desc >Simulate transient land-use, and aerosol deposition changes from 1850 to 2015</use_case_desc>
<use_case_desc bgc="cn" >Simulate transient land-use, aerosol deposition, and Nitrogen deposition changes from 1850 to 2015</use_case_desc>
<use_case_desc phys="clm4_0" bgc="cndv" >Simulate transient land-use, aerosol deposition, and Nitrogen deposition changes from 1850 to 2015</use_case_desc>
<use_case_desc use_cn=".true." >Simulate transient land-use, aerosol deposition, and Nitrogen deposition changes from 1850 to 2015</use_case_desc>
<sim_year>1850</sim_year>
<sim_year_range>1850-2000</sim_year_range>
<clm_start_type>arb_ic</clm_start_type>
<clm_demand >flanduse_timeseries</clm_demand>
<irrigate use_crop=".true." phys="clm5_0" use_cndv=".false.">.true.</irrigate>
<irrigate use_crop=".true." phys="clm5_0" use_cndv=".true." >.false.</irrigate>
<irrigate use_crop=".true." phys="clm4_5" >.false.</irrigate>
<stream_year_first_ndep phys="clm4_0" bgc="cn" >1850</stream_year_first_ndep>
<stream_year_last_ndep phys="clm4_0" bgc="cn" >2005</stream_year_last_ndep>
<model_year_align_ndep phys="clm4_0" bgc="cn" >1850</model_year_align_ndep>
<stream_year_first_ndep phys="clm4_0" bgc="cndv" >1850</stream_year_first_ndep>
<stream_year_last_ndep phys="clm4_0" bgc="cndv" >2005</stream_year_last_ndep>
<model_year_align_ndep phys="clm4_0" bgc="cndv" >1850</model_year_align_ndep>
<stream_year_first_ndep phys="clm4_5" use_cn=".true." >1850</stream_year_first_ndep>
<stream_year_last_ndep phys="clm4_5" use_cn=".true." >2005</stream_year_last_ndep>
<model_year_align_ndep phys="clm4_5" use_cn=".true." >1850</model_year_align_ndep>
<ndep_taxmode phys="clm4_5" use_cn=".true." >extend</ndep_taxmode>
<stream_year_first_ndep phys="clm5_0" use_cn=".true." >1850</stream_year_first_ndep>
<stream_year_last_ndep phys="clm5_0" use_cn=".true." >2015</stream_year_last_ndep>
<model_year_align_ndep phys="clm5_0" use_cn=".true." >1850</model_year_align_ndep>
<ndep_taxmode phys="clm5_0" use_cn=".true." >extend</ndep_taxmode>
<stream_year_first_popdens phys="clm4_5" cnfireson=".true." >1850</stream_year_first_popdens>
<stream_year_last_popdens phys="clm4_5" cnfireson=".true." >2016</stream_year_last_popdens>
<model_year_align_popdens phys="clm4_5" cnfireson=".true." >1850</model_year_align_popdens>
<stream_year_first_popdens phys="clm5_0" cnfireson=".true." >1850</stream_year_first_popdens>
<stream_year_last_popdens phys="clm5_0" cnfireson=".true." >2016</stream_year_last_popdens>
<model_year_align_popdens phys="clm5_0" cnfireson=".true." >1850</model_year_align_popdens>
<stream_year_first_urbantv phys="clm5_0" >1850</stream_year_first_urbantv>
<stream_year_last_urbantv phys="clm5_0" >2106</stream_year_last_urbantv>
<model_year_align_urbantv phys="clm5_0" >1850</model_year_align_urbantv>
<stream_year_first_urbantv phys="clm4_5" >1850</stream_year_first_urbantv>
<stream_year_last_urbantv phys="clm4_5" >2106</stream_year_last_urbantv>
<model_year_align_urbantv phys="clm4_5" >1850</model_year_align_urbantv>
</namelist_defaults>

View File

@ -0,0 +1,17 @@
<?xml version="1.0"?>
<namelist_defaults>
<use_case_desc >Simulate transient land-use, and aerosol deposition changes from 2100 to 2300 with the CMIP6 SSP1-2.6 scenario</use_case_desc>
<use_case_desc use_cn=".true." >Simulate transient land-use, aerosol deposition, and Nitrogen deposition changes from 2100 to 2300 with the CMIP6 SSP1-2.6 scenario</use_case_desc>
<!-- Have a minimal list of things set here, sim_year, sim_year_range, and ssp_rcp, other things should be dependent on these and
set in a namelist_defaults xml file -->
<sim_year>2100</sim_year>
<sim_year_range>2100-2300</sim_year_range>
<ssp_rcp>SSP1-2.6</ssp_rcp>
</namelist_defaults>

View File

@ -0,0 +1,20 @@
<?xml version="1.0"?>
<namelist_defaults>
<use_case_desc >Simulate transient land-use, and aerosol deposition changes from 2100 to 2300 with the CMIP6 SSP5-3.4 scenario</use_case_desc>
<use_case_desc use_cn=".true." >Simulate transient land-use, aerosol deposition, and Nitrogen deposition changes from 2100 to 2300 with the CMIP6 SSP5-3.4 scenario</use_case_desc>
<!-- Have a minimal list of things set here, sim_year, sim_year_range, and ssp_rcp, other things should be dependent on these and
set in a namelist_defaults xml file -->
<sim_year>2100</sim_year>
<sim_year_range>2100-2300</sim_year_range>
<ssp_rcp>SSP5-3.4</ssp_rcp>
<stream_fldfilename_ndep use_cn=".true."
>lnd/clm2/ndepdata/fndep_clm_SSP534osext_b.e21.BWSSP534osextcmip6.f09_g17.CMIP6-SSP5-3.4OSext-WACCM.001_2100-2300_monthly_0.9x1.25_c200624.nc</stream_fldfilename_ndep>
</namelist_defaults>

View File

@ -0,0 +1,20 @@
<?xml version="1.0"?>
<namelist_defaults>
<use_case_desc >Simulate transient land-use, and aerosol deposition changes from 2100 to 2300 with the CMIP6 SSP5-8.5 scenario</use_case_desc>
<use_case_desc use_cn=".true." >Simulate transient land-use, aerosol deposition, and Nitrogen deposition changes from 2100 to 2300 with the CMIP6 SSP5-8.5 scenario</use_case_desc>
<!-- Have a minimal list of things set here, sim_year, sim_year_range, and ssp_rcp, other things should be dependent on these and
set in a namelist_defaults xml file -->
<sim_year>2100</sim_year>
<sim_year_range>2100-2300</sim_year_range>
<ssp_rcp>SSP5-8.5</ssp_rcp>
<stream_fldfilename_ndep use_cn=".true."
>lnd/clm2/ndepdata/fndep_clm_SSP585ext_b.e21.BWSSP585extcmip6.f09_g17.CMIP6-SSP5-8.5ext-WACCM.001_2100-2300_monthly_0.9x1.25_c200623.nc</stream_fldfilename_ndep>
</namelist_defaults>

View File

@ -0,0 +1,29 @@
<?xml version="1.0"?>
<namelist_defaults>
<use_case_desc >Simulate land-use, and aerosol deposition for 2100 with the CMIP6 SSP3-7.0 scenario</use_case_desc>
<use_case_desc use_cn=".true." >Simulate land-use, and aerosol and Nitrogen deposition for 2100 with the CMIP6 SSP3-7.0 scenario</use_case_desc>
<!-- Have a minimal list of things set here, sim_year, sim_year_range, and ssp_rcp, other things should be dependent on these and
set in a namelist_defaults xml file -->
<sim_year>2100</sim_year>
<ssp_rcp>SSP3-7.0</ssp_rcp>
<sim_year_range>1850-2100</sim_year_range>
<stream_year_first_ndep use_cn=".true." >2100</stream_year_first_ndep>
<stream_year_last_ndep use_cn=".true." >2100</stream_year_last_ndep>
<stream_year_first_popdens cnfireson=".true." >2100</stream_year_first_popdens>
<stream_year_last_popdens cnfireson=".true." >2100</stream_year_last_popdens>
<stream_year_first_urbantv >2100</stream_year_first_urbantv>
<stream_year_last_urbantv >2100</stream_year_last_urbantv>
<fsurdat hgrid="0.9x1.25" use_crop=".true." >
lnd/clm2/surfdata_map/release-clm5.0.18/surfdata_0.9x1.25_hist_78pfts_CMIP6_simyr1850_c190214.nc</fsurdat>
</namelist_defaults>

View File

@ -0,0 +1,39 @@
$CTSMROOT/namelist_files/use_cases/README Jun/08/2018
Naming Convention for CLM use-cases
It's important that this naming convention be followed so that the PTCLMmkdata.py
utility can parse the use-cases appropriately. The build-namelist script also
checks for conformance with these conventions and won't work for names that
don't follow the convention.
Ending suffix requires one of these endings: _transient, _control or _pd
Transient cases:
yyyy-yyyy_$ssp_rcp$desc_transient (for example 1850-2100_SSP5-8.5_transient)
or
20thC$desc_transient (means nominal 1850-2000 although some datasets are 1850-2005)
Control cases:
yyyy$desc_control
Present day options (uses default present-day simulation year -- which right now is 2000):
$desc_pd
Where
yyyy = Simulation year (such as 1850 or 2000).
yyyy-yyyy = Range of simulation years to run over (i.e.. 1850-2000).
$ssp_rcp = Shared Socieconomic Pathway (SSP) Representative concentration pathway (RCP) description string
for future scenarios:
SSP#-#.# (for example: SSP5-8.5, SSP1-2.6, SSP4-6.0
[can be blank for historical cases].
$desc = Description of anything else -- alpha-numeric.
Should start with an underscore ("_") if not by itself
(for _transient and _control).

View File

@ -0,0 +1,25 @@
<?xml version="1.0"?>
<namelist_defaults>
<use_case_desc>Standard Urban Point Namelist Settings</use_case_desc>
<hist_empty_htapes>.true.</hist_empty_htapes>
<hist_dov2xy>.true., .false., .true.</hist_dov2xy>
<hist_fincl1>'TBUILD','BUILDHEAT','TRAFFICFLUX','WASTEHEAT','SWup','LWup','Rnet','Qh','Qle','Qstor','Qtau','Qanth','Wind','Qair','Tair','PSurf','Rainf','SWdown','LWdown','COSZEN'</hist_fincl1>
<hist_fincl2>'TG','TBOT','FIRE','FIRA','FLDS','FSDS','FSR','FSA','FGEV','FSH','FGR','TSOI','ERRSOI','BUILDHEAT','SABV','SABG','FSDSVD','FSDSND','FSDSVI','FSDSNI','FSRVD','FSRND','FSRVI','FSRNI','TSA','FCTR','FCEV','QBOT','Q2M','H2OSOI','H2OSNO','SOILLIQ','SOILICE','SWup','LWup','Rnet','Qh','Qle','Qstor','Qtau','Qanth','Wind','Qair','Tair','PSurf','Rainf','SWdown','LWdown','SoilAlpha_U','ZWT','WA'
</hist_fincl2>
<hist_fincl3>'SWup','LWup','Rnet','Qh','Qle','Qstor','Qtau','Qanth','Wind','Qair','Tair','PSurf','Rainf','SWdown','LWdown','FSA','FIRA','TG','COSZEN','SoilAlpha_U','TBUILD','BUILDHEAT'
</hist_fincl3>
<urban_hac>'OFF'</urban_hac>
<irrigate use_crop=".true." phys="clm5_0" use_cndv=".false.">.true.</irrigate>
<irrigate use_crop=".true." phys="clm5_0" use_cndv=".true." >.false.</irrigate>
<irrigate use_crop=".true." phys="clm4_5" >.false.</irrigate>
</namelist_defaults>

317
bld/queryDefaultNamelist.pl Executable file
View File

@ -0,0 +1,317 @@
#!/usr/bin/env perl
#=======================================================================
#
# This is a script to read the CLM namelist XML file
#
# Usage:
#
# queryDefaultNamelist.pl [options]
#
# To get help on options and usage:
#
# queryDefaultNamelist.pl -help
#
#=======================================================================
use Cwd;
use strict;
#use diagnostics;
use Getopt::Long;
use English;
#-----------------------------------------------------------------------------------------------
#Figure out where configure directory is and where can use the XML/Lite module from
my $ProgName;
($ProgName = $PROGRAM_NAME) =~ s!(.*)/!!; # name of program
my $ProgDir = $1; # name of directory where program lives
my $cwd = getcwd(); # current working directory
my $cfgdir;
if ($ProgDir) { $cfgdir = $ProgDir; }
else { $cfgdir = $cwd; }
#-----------------------------------------------------------------------------------------------
# Add $cfgdir to the list of paths that Perl searches for modules
my @dirs = ( "$cfgdir",
"$cfgdir/../cime/utils/perl5lib",
"$cfgdir/../../../cime/utils/perl5lib" );
unshift @INC, @dirs;
my $result = eval "require XML::Lite";
if ( ! defined($result) ) {
die <<"EOF";
** Cannot find perl module \"XML/Lite.pm\" from directories: @dirs **
EOF
}
require Build::Config;
require Build::NamelistDefinition;
require queryDefaultXML;
# Defaults
my $namelist = "clm_inparm";
my $config = "config_cache.xml";
sub usage {
die <<EOF;
SYNOPSIS
$ProgName [options]
query default namelist values.
OPTIONS
-config "file" CLM build configuration file created by configure.
-cesm CESM mode set csmdata to \$DIN_LOC_ROOT.
-usrname "name" Dataset resolution/descriptor for personal datasets.
Default : not used
Example: 1x1pt_boulderCO to describe location,
number of pts
-csmdata "dir" Directory for head of csm inputdata.
-demand Demand that something is returned.
-filenameonly Only return the filename -- not the full path to it.
-help [or -h] Display this help.
-justvalue Just display the values (NOT key = value).
-var "varname" Variable name to match. Use "-var list" to
list valid variable names from all namelists.
-namelist "namelistname" Namelist name to read in (by default $namelist).
-onlyfiles Only output filenames.
-options "item=value,item2=value2" Set options to query for when matching.
(comma delimited, with equality to set value).
-phys "CLM-version" [or -p] CLM version to use (clm4_0 or clm4_5)
-res "resolution" Resolution to use for files. Use "-res list" to
list all valid resolutions. Use "-res any" to
use any valid resolution.
-silent [or -s] Do not do any extra printing.
-test [or -t] Test that files exists.
EXAMPLES
To list all fsurdat files that match the resolution: 10x15:
$ProgName -var "fsurdat" -res 10x15
To only list files that match T42 resolution (or are for all resolutions)
$ProgName -onlyfiles -res 64x128
To test that all of the files exist on disk under a different default inputdata
$ProgName -onlyfiles -test -csmdata /spin/proj/ccsm/inputdata
To query for namelist items that match particular configurations
$ProgName -namelist seq_infodata_inparm -options sim_year=2000,bgc=cn
Only lists namelist items in the seqinfodata_inparm namelist with options for
sim_year=2000 and BGC=cn.
EOF
}
#-----------------------------------------------------------------------------------------------
my %opts = (
namelist => $namelist,
model => "clm4_5",
var => undef,
hgrid => undef,
config => undef,
cesm => undef,
csmdata => undef,
demand => undef,
test => undef,
onlyfiles => undef,
fileonly => undef,
silent => undef,
usrname => undef,
help => undef,
options => undef,
);
my $cmdline = "@ARGV";
GetOptions(
"f|file=s" => \$opts{'file'},
"n|namelist=s" => \$opts{'namelist'},
"v|var=s" => \$opts{'var'},
"p|phys=s" => \$opts{'model'},
"r|res=s" => \$opts{'hgrid'},
"config=s" => \$opts{'config'},
"cesm" => \$opts{'cesm'},
"csmdata=s" => \$opts{'csmdata'},
"demand" => \$opts{'demand'},
"options=s" => \$opts{'options'},
"t|test" => \$opts{'test'},
"onlyfiles" => \$opts{'onlyfiles'},
"filenameonly" => \$opts{'fileonly'},
"justvalues" => \$opts{'justvalues'},
"usrname=s" => \$opts{'usrname'},
"s|silent" => \$opts{'silent'},
"h|elp" => \$opts{'help'},
) or usage();
# Check for unparsed arguments
if (@ARGV) {
print "ERROR: unrecognized arguments: @ARGV\n";
usage();
}
if ( $opts{'help'} ) {
usage();
}
# Set if should do extra printing or not (if silent mode is not set)
my $printing = 1;
if ( defined($opts{'silent'}) ) {
$printing = 0;
}
# Get list of options from command-line into the settings hash
my %settings;
if ( defined($opts{'options'}) ) {
$opts{'options'} =~ s/\s//g; # Remove all white-space in options
my @optionlist = split( ",", $opts{'options'} );
foreach my $item ( @optionlist ) {
my ($key,$value) = split( "=", $item );
$settings{$key} = $value;
}
}
my $csmdata = "";
if ( defined($opts{'fileonly'}) ) {
if ( ! defined($opts{'justvalues'}) ) { print "When -filenameonly option used, -justvalues is set as well\n" if $printing; }
if ( ! defined($opts{'onlyfiles'}) ) { print "When -filenameonly option used, -onlyfiles is set as well\n" if $printing; }
$opts{'justvalues'} = 1;
$opts{'onlyfiles'} = 1;
}
# List of input options
my %inputopts;
# This namelist files under the cime directories are in version 2 format and can't be read by perl code EBK 11/15/2016
my $model = $opts{'model'};
my @nl_definition_files = ("$cfgdir/namelist_files/namelist_definition_drv.xml",
"$cfgdir/namelist_files/namelist_definition_$model.xml"
);
$inputopts{empty_cfg_file} = "$cfgdir/config_files/config_definition_$model.xml";
$inputopts{nldef_files} = \@nl_definition_files;
$inputopts{namelist} = $opts{namelist};
$inputopts{printing} = $printing;
$inputopts{cfgdir} = $cfgdir;
$inputopts{ProgName} = $ProgName;
$inputopts{cmdline} = $cmdline;
my $exitearly = 0;
my $definition = Build::NamelistDefinition->new( $nl_definition_files[0] );
foreach my $nl_defin_file ( @nl_definition_files ) {
if ( ! -f "$nl_defin_file" ) {
die "($ProgName $cmdline) ERROR:: bad namelist definition filename: $nl_defin_file.\n";
}
$definition->add( "$nl_defin_file" );
}
if ( ! defined($opts{csmdata}) ) {
$inputopts{csmdata} = "default";
} else {
$inputopts{csmdata} = $opts{csmdata};
}
if ( defined($opts{cesm}) ) {
$inputopts{csmdata} = '$DIN_LOC_ROOT';
}
if ( ! defined($opts{config}) ) {
$inputopts{config} = "noconfig";
} else {
$inputopts{config} = $opts{config};
}
if ( ! defined($opts{var}) ) {
$settings{'var'} = undef;
} elsif ( $opts{var} eq "list" ) {
print "Valid variables: " if $printing;
my @vars = $definition->get_var_names( );
print "@vars\n";
$exitearly = 1;
} else {
$settings{'var'} = $opts{'var'};
}
if ( ! defined($opts{hgrid}) ) {
$inputopts{hgrid} = "any";
} elsif ( $opts{hgrid} eq "list" ) {
print "Valid resolutions: " if $printing;
my @hgrids = $definition->get_valid_values( "res", 'noquotes'=>1 );
print "@hgrids\n";
$exitearly = 1;
} else {
if ( ! $definition->is_valid_value( "res", $opts{hgrid}, 'noquotes'=>1 ) ) {
if ( $opts{'hgrid'} ne $opts{'usrname'} ) {
die "($ProgName $cmdline) ERROR:: invalid resolution entered.\n";
}
}
$inputopts{hgrid} = $opts{hgrid};
}
# The namelist defaults file contains default values for all required namelist variables.
my @nl_defaults_files = ( "$cfgdir/namelist_files/namelist_defaults_overall.xml" );
if ( defined($opts{'usrname'}) ) {
my $nl_defaults_file = "$cfgdir/namelist_files/namelist_defaults_usr_files.xml";
push( @nl_defaults_files, $nl_defaults_file );
$settings{'clm_usr_name'} = $opts{'usrname'};
$settings{'notest'} = ! $opts{'test'};
$settings{'csmdata'} = $inputopts{csmdata};
} else {
my @files = ( "$cfgdir/namelist_files/namelist_defaults_${model}.xml",
"$cfgdir/namelist_files/namelist_defaults_drydep.xml",
);
push( @nl_defaults_files, @files );
}
if ( ! $exitearly ) {
$inputopts{files} = \@nl_defaults_files;
my $defaults_ref = &queryDefaultXML::ReadDefaultXMLFile( \%inputopts, \%settings );
my %defaults = %$defaults_ref;
my @keys = keys(%defaults);
if ( defined($opts{'demand'}) && ($#keys == -1) ) {
die "($ProgName $cmdline) ERROR:: demand option is set and nothing was found.\n";
}
my $print;
foreach my $var ( @keys ) {
$print = 1;
my $value = $defaults{$var}{value};
my $isadir = $defaults{$var}{isdir};
my $isafile = $defaults{$var}{isfile};
my $isastr = $defaults{$var}{isstr};
# If onlyfiles option set do NOT print if is NOT a file
if ( defined($opts{'onlyfiles'}) && (! $isafile) ) {
$print = undef;
}
# If is a directory
if ( $isadir ) {
# Test that this directory exists
if ( defined($opts{'test'}) && defined($print) ) {
print "Test that directory $value exists\n" if $printing;
if ( ! -d "$value" ) {
die "($ProgName) ERROR:: directory $value does NOT exist!\n";
}
}
}
# If is a file
if ( $isafile ) {
# Test that this file exists
if ( defined($opts{'test'}) && defined($print) ) {
chomp( $value );
print "Test that file $value exists\n" if $printing;
if ( ! -f "$value" ) {
die "($ProgName) ERROR:: file $value does NOT exist!\n";
}
}
}
# If a string
if ( (! defined($opts{'justvalues'}) ) && ($isastr) ) {
$value = "\'$value\'";
}
# if you just want the filename -- not the full path with the directory
if ( defined($opts{'fileonly'}) ) {
$value =~ s!(.*)/!!;
}
if ( defined($print) ) {
if ( ! defined($opts{'justvalues'}) ) {
print "$var = ";
}
print "$value\n";
}
}
}
if ( $printing && defined($opts{'test'}) ) {
print "\n\nTesting was successful\n\n"
}

161
bld/queryDefaultXML.pm Normal file
View File

@ -0,0 +1,161 @@
#=======================================================================
#
# This is a perl module to read in a list of namelist_default files.
#
#=======================================================================
use strict;
use Build::Config;
use Build::NamelistDefinition;
use Build::NamelistDefaults;
use Build::Namelist;
package queryDefaultXML;
#-------------------------------------------------------------------------------
sub read_cfg_file
#
# Read in the configuration cache XML file on the build-time configuration
#
{
my ($file, $empty_cfg_file, $printing, $settings_ref) = @_;
my $cfg;
my %config;
if ( $file eq "noconfig" ) {
print "No configuration cache file to read in.\n" if $printing;
$cfg = Build::Config->new( $empty_cfg_file );
} elsif ( -f "$file" ) {
$cfg = Build::Config->new($file);
} else {
die "Bad filename entered: $file does NOT exist or can not open it.\n";
}
#
# Make sure variables are set to valid values
#
foreach my $key ( keys( %config ) ) {
if ( $cfg->is_valid_name( $key ) ) {
$cfg->set( $key, $config{$key} );
}
}
foreach my $key ( $cfg->get_names( ) ) {
if ( defined($$settings_ref{$key}) ) {
if ( $cfg->is_valid_name( $key ) ) {
$cfg->set( $key, $$settings_ref{$key} );
}
}
}
return( $cfg );
}
#-------------------------------------------------------------------------------
sub ReadDefaultXMLFile {
#
# Read in the default XML file for the default namelist settings
#
my $opts_ref = shift;
my $settings_ref = shift;
# Error check that input and opts hash has the expected variables
my $ProgName = $$opts_ref{'ProgName'};
my $nm = "${ProgName}::ReadDefaultXMLFile";
my @required_list = ( "files", "nldef_files", "empty_cfg_file", "config", "namelist",
"csmdata", "hgrid", "printing", "ProgName", "cmdline",
"cfgdir" );
foreach my $var ( @required_list ) {
if ( ! defined($$opts_ref{$var}) ) {
die "ERROR($nm): Required input variable $var was not found\n";
}
}
my $printing = $$opts_ref{'printing'};
my $cmdline = $$opts_ref{'cmdline'};
# Initialize some local variables
my $files_ref = $$opts_ref{'files'};
my @files = @$files_ref;
my $nldef_ref = $$opts_ref{'nldef_files'};
my @nl_definition_files= @$nldef_ref;
my $empty_config_file = $$opts_ref{'empty_cfg_file'};
my $namelist = $$opts_ref{'namelist'};
my $cfg = read_cfg_file( $$opts_ref{'config'}, $$opts_ref{'empty_cfg_file'},
$printing, $settings_ref );
#
# Set up options to send to namelist defaults object
#
my %nlopts;
foreach my $var ( keys( %$settings_ref) ) {
if ( $var ne "csmdata" ) {
$nlopts{$var} = $$settings_ref{$var};
}
}
if ( $$opts_ref{'hgrid'} ne "any" ) {
$nlopts{'hgrid'} = $$opts_ref{'hgrid'};
}
#
# Loop through all variables in files
#
print "($nm) Read: $files[0]\n" if $printing;
my %defaults;
my $nldefaults = Build::NamelistDefaults->new($files[0], $cfg);
for ( my $i = 1; $i <= $#files; $i++ ) {
print "($nm) Read: $files[$i]\n" if $printing;
$nldefaults->add( $files[$i] );
}
my $definition = Build::NamelistDefinition->new( $nl_definition_files[0] );
for ( my $i = 1; $i <= $#nl_definition_files; $i++ ) {
print "($nm) Read: $nl_definition_files[$i]\n" if $printing;
$definition->add( $nl_definition_files[$i] );
}
if ( $$opts_ref{'csmdata'} eq "default" ) {
$$opts_ref{'csmdata'} = $nldefaults->get_value( "csmdata", \%nlopts );
}
$nlopts{'csmdata'} = $$opts_ref{'csmdata'};
foreach my $name ( $nldefaults->get_variable_names() ) {
my $value = $nldefaults->get_value( $name, \%nlopts );
if ( $value eq "null" ) { next; }
if ( defined($$settings_ref{'var'}) ) {
if ( $name ne $$settings_ref{'var'} ) { next; }
}
$value =~ s/\n//g;
my $isafile = 0;
if ( $definition->is_input_pathname($name) ) {
if ( defined($$settings_ref{'clm_usr_name'}) ) {
$value = $nldefaults->get_usr_file( $name, $definition, \%nlopts );
}
if ( $value && ($value !~ /^\/.+$/) ) {
$value = $$opts_ref{'csmdata'} . "/" . $value;
}
$isafile = 1;
}
my $isadir = 0;
my $isastr = 0;
if ( $definition->get_str_len($name) > 0 ) {
$isastr = 1;
}
#
# If is a directory (is a file and csmdata or a var with dir in name)
#
if ( $isafile && (($name eq "csmdata") || ($name =~ /dir/)) ) {
if ( $name eq "csmdata" ) {
$value = $$opts_ref{'csmdata'};
$isadir = 1;
} else {
$isadir = 1;
}
}
# Return hash with the results
my $group = $definition->get_group_name( $name );
if ( $group eq $namelist && $value && (! exists($defaults{$name}{'value'})) ) {
$defaults{$name}{'value'} = $value;
$defaults{$name}{'isfile'} = $isafile;
$defaults{$name}{'isdir'} = $isadir;
$defaults{$name}{'isstr'} = $isastr;
}
}
return( \%defaults );
}
1 # To make use or require happy

View File

@ -0,0 +1,218 @@
###############################################################################
#
# Module: NMLTest::CompFiles
#
# Created by Erik Kluzek NCAR
#
# This is a tester built on top of Test::More to compare namelist files
# (or really any ASCII text files). There is a mechanism for telling the
# test object that you should (or should NOT) expect the comparison to be
# exact or not.
#
###############################################################################
package NMLTest::CompFiles;
use strict;
use Test::More;
use IO::File;
=head1 NAME
NMLTest::CompFiles - A comparision tester for namelist (or ASCII text) files
=head1 SYNOPSIS
=head1 DESCRIPTION
=cut
sub new {
my $self = {};
my $class = shift;
my $dir = shift;
my @files = @_;
my $nm = ref($self)."\:\:new";
my %diffref = { };
$self->{'diffref'} = \%diffref;
if ( ! -d "$dir" ) {
die "ERROR::($nm) Input directory ($dir) does NOT exist!\n";
}
$self->{'dir'} = $dir;
$self->{'files'} = \@_;
bless( $self, $class );
}
sub checkfilesexist {
#
# Check that files exist
#
my $self = shift;
my $type = shift;
my $mode = shift;
my $nm = ref($self)."\:\:checkfilesexist";
my $filesref = $self->{'files'};
my $confdir = $self->{'dir'};
foreach my $file ( @$filesref ) {
my $exists = ( -f "$confdir/$file" );
ok( $exists, "$type $mode: $file file exists" );
if ( $exists ) {
$self->dodiffonfile( $file, $type, $mode );
} else {
$self->doNOTdodiffonfile( $file, $type, $mode );
}
}
}
sub comparefiles {
#
# Compare the resultant files to the default versions
#
my $self = shift;
my $type = shift;
my $comp_mode = shift;
my $compdir = shift;
my $nm = ref($self)."\:\:comparefiles";
$type =~ s#[ '"&/]#+#g;
$comp_mode =~ s#[ '"&/]#+#g;
my $confdir = $self->{'dir'};
my $diffref = $self->{'diffref'};
if ( ! defined($type) ) {
$type = "default";
}
my $compare = "compare to previous tag";
if ( ! defined($compdir) ) {
$compdir = ".";
$compare = undef;
}
if ( ! -d "$compdir" ) {
die "ERROR($nm):: Compare directory $compdir does NOT exist!\n";
}
print "Compare files for $type type MODE=$comp_mode $compare\n";
my $diffstat;
my %diffhas = %$diffref;
my $same = "file the same as expected";
my $diff = "file different as expected";
my $filesref = $self->{'files'};
foreach my $file ( @$filesref ) {
if ( ! -f "$compdir/${file}.$comp_mode.${type}" ) {
print "WARNING($nm):: File $compdir/${file}.$comp_mode.${type} does NOT exist!\n";
fail( "compare file $file DNE for $comp_mode and $type" );
} else {
if ( ! exists($diffhas{$comp_mode}{$type}{$file}) ) {
die "ERROR($nm):: difference is NOT setup for $comp_mode ${type} $file!\n";
}
system( "diff $confdir/${file} $compdir/${file}.$comp_mode.${type} > /dev/null" );
$diffstat = $?;
if ( $diffhas{$comp_mode}{$type}{$file} ) {
ok( ! $diffstat, "$file $same for $comp_mode" );
} else {
ok( $diffstat, "$file different as expected for $comp_mode" );
}
}
}
}
sub copyfiles {
#
# Copy the namelist files to default names for comparisions
#
my $self = shift;
my $type = shift;
my $mode = shift;
my $nm = ref($self)."\:\:copyfiles";
$type =~ s#[ '"&/]#+#g;
$mode =~ s#[ '"&/]#+#g;
my $diffref = $self->{'diffref'};
my $filesref = $self->{'files'};
my $confdir = $self->{'dir'};
foreach my $file ( @$filesref ) {
system( "/bin/cp $confdir/$file ${file}.${mode}.${type}" );
$$diffref{${mode}}{${type}}{$file} = 1;
}
print "$type namelists for $mode\n";
foreach my $file ( @$filesref ) {
system( "/bin/cat $file.${mode}.${type}" );
}
}
sub shownmldiff {
#
# Show the differences in the namelists
#
my $self = shift;
my $type = shift;
my $comp_mode = shift;
my $nm = ref($self)."\:\:shownmldiff";
$type =~ s#[ '"&/]#+#g;
$comp_mode =~ s#[ '"&/]#+#g;
my $filesref = $self->{'files'};
my $confdir = $self->{'dir'};
foreach my $file ( @$filesref ) {
my $file1 = "$confdir/$file";
if ( ! -f "$file1" ) {
print "$file1 does NOT exist\n";
return;
}
my $file2 = "${file}.${comp_mode}.${type}";
if ( ! -f "$file2" ) {
print "$file2 does NOT exist\n";
return;
}
print "Diff in in $file to $type $comp_mode version";
system( "diff $file1 $file2" );
}
}
sub dodiffonfile {
#
# Set it so that it does do a difference on the given input file
#
my $self = shift;
my $file = shift;
my $type = shift;
my $mode = shift;
my $nm = ref($self)."\:\:dodiffonfile";
$type =~ s#[ '"&/]#+#g;
$mode =~ s#[ '"&/]#+#g;
my $diffref = $self->{'diffref'};
if ( ! defined($type) ) {
$type = "default";
}
$$diffref{$mode}{$type}{$file} = 1;
}
sub doNOTdodiffonfile {
#
# Set it so that it does NOT do a difference on the given input file
#
my $self = shift;
my $file = shift;
my $type = shift;
my $mode = shift;
my $nm = ref($self)."\:\:doNOTdodiffonfile";
$type =~ s#[ '"&/]#+#g;
$mode =~ s#[ '"&/]#+#g;
my $diffref = $self->{'diffref'};
if ( ! defined($type) ) {
$type = "default";
}
$$diffref{$mode}{$type}{$file} = 0;
}
#-----------------------------------------------------------------------------------------------
1 # to make use or require happy

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,3 @@
&clm_inparm
fsurdat = "$DIN_LOC_ROOT/lnd/clm2/PTCLMmydatafiles/1x1pt_US-UMB/surfdata_1x1pt_US-UMB_simyr2000_clm4_5_c131122.nc"
/

View File

@ -0,0 +1,54 @@
<?xml version= "1.0"?>
<expectedFails>
<namelistTest>
<yellowstone>
<INTEL>
<compare>
</compare>
<generate>
</generate>
</INTEL>
</yellowstone>
<goldbach>
<INTEL>
<compare>
</compare>
<generate>
</generate>
</INTEL>
</goldbach>
</namelistTest>
<tools_test_driver>
<yellowstone>
<INTEL>
</INTEL>
</yellowstone>
<goldbach>
<INTEL>
<entry testId="sm684" failType="FAIL">goldbach not recognized</entry>
<entry testId="smf84" failType="FAIL">goldbach not recognized</entry>
<entry testId="smfc4" failType="FAIL">goldbach not recognized</entry>
</INTEL>
</goldbach>
</tools_test_driver>
<PTCLM>
<yellowstone>
</yellowstone>
<goldbach>
<PGI>
</PGI>
</goldbach>
</PTCLM>
<unit_tests>
<yellowstone>
<INTEL>
<entry failType="CFAIL">Internal compiler error</entry>
</INTEL>
</yellowstone>
</unit_tests>
</expectedFails>

View File

@ -0,0 +1,668 @@
=head1 expectedFail.pm
Documentation for expectedFail.pm
=head1 Overview
The module expectedFail.pm supplies the capability of checking if a failed test is expected to fail.
It is called directly from either test_driver.sh (for batch and interactive tests) or build-namelist_test.pl.
Future plans involve integrating this module into cesm tests.
=head1 Use Case
This is a new feature being added to the existing CLM test infrastructure. The use case would roughly be
along the lines of:
1) Run the test suite (CLM batch,interactive or namelist)
2) Search for test failures
a) Fix failed tests
b) -or- Add new xFail entries to XML file if a test is supposed to fail (eg. due to some missing resolution).
3) Check for new tests that now pass. This is for modifying the ChangeLog.
4) Update XML file by either adding new entries or removing old ones.
5) update the ChangeLog to reflect important changes in test behavior (Tests that now pass that failed before, tests that
are now xFail, etc...
=head2 Public methods
There are two public methods needed. The "new" ctor and one of the parseOutput* methods.
Everything else is private.
xFail::expectedFail->new
parseOutput
parseOutputCLM
=head2 Private methods
sub _searchExpectedFail
sub _readXml
sub _testNowPassing
sub _printOutput
sub _getTestType
sub _getMachInfo
=cut
package xFail::expectedFail;
our $VERSION = '1.00';
use Cwd;
use strict;
use Getopt::Long;
use English;
use Scalar::Util qw(looks_like_number);
my @testList={};
my $DEBUG=0;
my $pass=" PASS";
my $fail=" FAIL";
my $xfail="xFAIL";
##############################################################################
#
##############################################################################
=head1 CTOR
Constructor for the class. Reads in three arguments:
_callingName -> name of the script creating the new object
_compareGenerate -> compare or generate option
_totTests -> total number of tests to run
Calls _readXml which reads the file expectedClmTestFails.xml and stores it memory
for later searches.
returns: new object ($self)
=cut
##############################################################################
#
##############################################################################
sub new {
my ($class_name) = @_;
my $self = {
_className => shift,
_callingName => shift,
_compareGenerate => shift,
_totTests => shift,
_foundList => undef,
_numericalTestId => undef
};
if ($DEBUG) {
print "$self->{_callingName}\n";
print "$self->{_compareGenerate}\n";
}
bless ($self, $class_name);
$self->{_numericalTestId}=0;
$self->{_created} = 1;
$self->_readXml();
return $self;
}
##############################################################################
#
##############################################################################
=head1 parseOutput
parseOutput parsese the output from the build-namelist_test.pl script. It is similar
to, but not interchangable with parseOutputCLM.
The only argument is that of the reference variable that contains the information dumped
by Test::More.
returns: nothing
=cut
##############################################################################
#
##############################################################################
sub parseOutput
{
my $report;
my $testId;
my @testName={};
my $testReason;
my ($self, $output) = @_ ;
#_#===========================================
#_# keep this in for logging
#_#===========================================
print ("captured output is :: \n $output \n");
#_# split the output from Test::More output on newline
my @refList = split('\n', $output);
#_# process any buffered output which happens when a subroutine from build-namelist_test.pl
#_# itself calls some testing routines
foreach my $refSplit (@refList) {
#_# always look at the last element of refSplit since that will have the info. from the
#_# last test run
my @outArr=split(/ /,$refSplit);
if ($DEBUG) {
print ("\nxFail::expectedFail::parseOutput @outArr[0] \n");
print ("xFail::expectedFail::parseOutput @outArr[1] \n");
print ("xFail::expectedFail::parseOutput @outArr[2] \n");
print ("xFail::expectedFail::parseOutput @outArr[3] \n");
print ("xFail::expectedFail::parseOutput @outArr[4] \n");
}
my $size = @outArr-1;
#_# first case, we have a passed (ok) test
if (@outArr[0] eq "ok") {
$self->{_numericalTestId}++;
$report=$pass;
$testId=@outArr[1];
@testName=@outArr[3..$size];
$testReason="";
my ($retVal,$xFailText)=$self->_searchExpectedFail($testId);
my $testReason=$self->_testNowPassing($testId,$retVal,$xFailText);
if($DEBUG){
print("$testReason \n");
}
$self->_printOutput($report,$testId,$testReason,@testName);
#_# deal with the case of a failed (not ok) test
} elsif (@outArr[0] eq "not") {
$self->{_numericalTestId}++;
$testId=@outArr[2];
my ($retVal,$xFailText)=$self->_searchExpectedFail($testId);
if ($DEBUG) {
print ("xFail::expectedFail::parseOutput Id $retVal,$xFailText \n");
}
@testName=@outArr[4..$size];
if ($retVal eq "TRUE"){
#_# found an expected FAIL (xFAIL)
$report=$xfail;
$testReason= "<Note: $xFailText>";
} else {
#_# print a regular FAIL
$report=$fail;
$testReason="";
}
$self->_printOutput($report,$testId,$testReason,@testName);
} else {
#_# skipping line. Trying to parse error code from Test::More
}
}
#_# this resets the reference that points to $output (\$captOut) on the caller side
@_[1]="";
}
##############################################################################
#
##############################################################################
=head1 parseOutputCLM
parseOutputCLM parsese the output from the test_driver.sh script. It is similar
to, but not interchangable with parseOutput.
parseOutputCLM takes one arguments:
$statFoo-> the name of the td.<pid>.status file
returns: nothing
=cut
##############################################################################
#
##############################################################################
sub parseOutputCLM
{
my $report;
my $testId;
my @testName={};
my $testReason;
my ($self, $statFoo) = @_ ;
open(FOO, "< $statFoo"); # open for input
open(FOO_OUT, "> $statFoo.xFail"); # open for input
my(@reportLines);
while (<FOO>) {
my($line) = $_;
my @outArr=split(/ /,$line);
if (looks_like_number(@outArr[0])) {
$self->{_numericalTestId}++;
my $num=sprintf("%03d", $self->{_numericalTestId});
my $totNum=sprintf("%03d", $self->{_totTests});
#_# last element has the pass/fail info.
chomp(@outArr[-1]);
my $repPass=substr(@outArr[-1], -4, 4);
if ($DEBUG) {
print ("xFail::expectedFail::parseOutput @outArr[0] \n");
print ("xFail::expectedFail::parseOutput @outArr[1] \n");
print ("xFail::expectedFail::parseOutput @outArr[2] \n");
print ("xFail::expectedFail::parseOutput @outArr[3] \n");
print ("xFail::expectedFail::parseOutput @outArr[4] \n");
print ("xFail::expectedFail::parseOutput @outArr[5] \n");
print ("xFail::expectedFail::parseOutput @outArr[6] \n");
print ("xFail::expectedFail::parseOutput @outArr[-1] \n");
print ("xFail::expectedFail::parseOutput $repPass \n");
}
my $size = @outArr-1;
if ($DEBUG) {
print ("size of line $size \n");
}
my $endOfDesc=$size-1;
if ($repPass eq "PASS") {
$report=$pass;
$testId=@outArr[1];
@testName=@outArr[2..$endOfDesc];
my ($retVal,$xFailText)=$self->_searchExpectedFail($testId);
my $testReason=$self->_testNowPassing($testId,$retVal,$xFailText);
#_# print out the test results
print FOO_OUT ("$num/$totNum <$report> <Test Id: $testId> <Desc: @testName> $testReason \n");
} else {
$testId=@outArr[1];
my ($retVal,$xFailText)=$self->_searchExpectedFail($testId);
if ($DEBUG) {
print ("xFail::expectedFail::parseOutput Id $retVal,$xFailText \n");
}
@testName=@outArr[2..$endOfDesc];
if ($retVal eq "TRUE"){
#_# found an expected FAIL (xFAIL)
$report=$xfail;
$testReason= "<Note: $xFailText>";
} else {
#_# print a regular FAIL
$report=$fail;
$testReason="";
}
#_# print out the test results
print FOO_OUT ("$num/$totNum <$report> <Test Id: $testId> <Desc: @testName> $testReason \n");
}
} else {
print FOO_OUT $line;
}
}
close(FOO);
close(FOO_OUT);
}
##############################################################################
#
##############################################################################
=head1 _searchExpectedFail
searches the list of expected fails for a match with testId.
_searchExpectedFail takes one arguments:
$testId-> the test id (numerical or string) that we want to search for
returns: $retVal (TRUE or FALSE) if id was found
$text text from XML file
=cut
##############################################################################
#
##############################################################################
sub _searchExpectedFail
{
my ( $self,$testId) = @_;
#search through list for test ID
my $retVal="FALSE";
if ($DEBUG) {
print ("here 2 Id $self->{_foundList} \n");
}
if ($self->{_foundList} eq "FALSE"){
if ($DEBUG) {
print ("returning early Id \n");
}
return $retVal;
}
my $failType;
my $text;
foreach my $tL (@testList) {
my %tAtts = $tL->get_attributes();
my $tid=$tAtts{'testId'};
if ($DEBUG) {
print ("_seachExpectedFail Id $tid $testId \n");
}
if ($tid eq $testId) {
if ($DEBUG) {
print ("here Id \n");
}
#~# found the test we're looking for
$text=$tL->get_text();
$failType=$tAtts{'failType'};
if ($failType eq "xFail"){
$retVal="TRUE";
}
}
}
return ($retVal,$text);
}
##############################################################################
#
##############################################################################
=head1 _readXml
reads the xml file for a particular machine, compiler, test type and (compare
| generate) setup and saves it in memory for searching by _searchExpectedFail.
_readXml takes no arguments
returns: nothing
=cut
##############################################################################
#
##############################################################################
sub _readXml
{
my ( $self ) = @_;
#Figure out where configure directory is and where can use the XML/Lite module from
my $ProgName;
($ProgName = $PROGRAM_NAME) =~ s!(.*)/!!; # name of program
my $ProgDir = $1; # name of directory where program lives
my $cwd = getcwd(); # current working directory
my $cfgdir;
if ($ProgDir) { $cfgdir = $ProgDir; }
else { $cfgdir = $cwd; }
#-----------------------------------------------------------------------------------------------
# Add $cfgdir to the list of paths that Perl searches for modules
my @dirs = ( $cfgdir, "$cfgdir/perl5lib",
"$cfgdir/../../cime/utils/perl5lib",
"$cfgdir/../../../cime/utils/perl5lib"
);
unshift @INC, @dirs;
my $result = eval "require XML::Lite";
if ( ! defined($result) ) {
die <<"EOF";
** Cannot find perl module \"XML/Lite.pm\" from directories: @dirs **
EOF
}
#-----------------------------------------------------------------------------------------------
my ($machine,$compiler)=_getMachInfo();
my $testType=$self->_getTestType($self->{_callingName});
my $xmlFile=undef;
if ($testType eq "clmInteractive" || $testType eq "clmBatch") {
$xmlFile = "$cfgdir/expectedClmTestFails.xml";
} elsif ($testType eq "namelistTest") {
$xmlFile = "xFail/expectedClmTestFails.xml";
} else {
$xmlFile = "xFail/expectedClmTestFails.xml";
}
my $xml = XML::Lite->new($xmlFile);
my $root = $xml->root_element();
if ($DEBUG) {
print "_readXml $self->{_callingName}\n";
print "_readXml $self->{_compareGenerate}\n";
print "_readXml $xmlFile \n";
print ("_readXml Debug testType $testType \n");
print ("_readXml Debug machine $machine \n");
print ("_readXml Debug compiler $compiler \n");
}
# Check for valid root node
my $name = $root->get_name();
$name eq "expectedFails" or die
"readExpectedFail.pm::_readXml :: $xmlFile is not a file that contains expected test failures\n";
my @e = $xml->elements_by_name($testType);
$self->{_foundList}="FALSE";
### populate list of tests for a specfic test type, machine and compiler
### there's got to be a better way to write this
while ( my $e = shift @e ) {
my @mChildren = $e->get_children();
foreach my $mChild (@mChildren) {
my $mName=$mChild->get_name();
if ($mName eq $machine){
my @cChildren = $mChild->get_children();
foreach my $cChild (@cChildren) {
my $cName=$cChild->get_name();
if ($cName eq $compiler) {
my @cgChildren=$cChild->get_children();
foreach my $cgChild (@cgChildren) {
my $cgName=$cgChild->get_name();
if($cgName eq $self->{_compareGenerate}){
@testList=$cgChild->get_children();
$self->{_foundList}="TRUE";
last;
}
}
}
}
}
}
}
if ($DEBUG) {
print ("here 1 $self->{_foundList} \n");
}
}
##############################################################################
#
##############################################################################
=head1 _testNowPassing
reads the xml file for a particular machine, compiler, test type and (compare
| generate) setup and saves it in memory for searching by _searchExpectedFail.
_testNowPassing takes three arguments:
$id - test id to print out
$retVal - TRUE or FALSE. Was the id found in the expected fail list
$xmlText - text from the XML notes section of the file. (Currently not used,
may be used in future).
returns: a text string
=cut
##############################################################################
#
##############################################################################
sub _testNowPassing
{
my ($self, $id, $retVal, $xmlText) = @_ ;
my $text=undef;
if ($retVal eq "TRUE") {
#_# found a test that passes now, but is listed as an xFail
$text = "<NOTE: $id is a new PASS; was xFAIL>\n";
} else {
#_# this test passes and was not previously listed as an xFail
#_# noOp
}
return $text;
}
##############################################################################
#
##############################################################################
=head1 _printOutput
method that prints output for status files.
_printOutput takes four arguments:
$report - PASS,FAIL,xFAIL
$testId - test id to print out
$testReason - for xFAIL and new PASSES, additional reporting
@testName - test description from original test
returns: a text string
=cut
##############################################################################
#
##############################################################################
sub _printOutput
{
my ($self, $report, $testId, $testReason, @testName) = @_ ;
#_# print out the test results
my $num=sprintf("%03d", $self->{_numericalTestId});
my $totNum=sprintf("%03d", $self->{_totTests});
print ("$num/$totNum <$report> <Test Id: $testId> <Desc: @testName> $testReason \n");
}
##############################################################################
#
##############################################################################
=head1 _getTestType
method that takes the name of the calling script and returns the type of
test. Used for searching the expected fail list.
_getTestType takes four arguments:
$name - name of calling script
returns: $type, the type of test
=cut
##############################################################################
#
##############################################################################
sub _getTestType
{
my ($self, $name) = @_ ;
if($DEBUG){
print ("_getTestType $name");
}
my %testTypes = (
"build-namelist_test.pl" => "namelistTest",
"test_driver.sh-i" => "clmInteractive",
"test_driver.sh" => "clmBatch",
"clm-cesm.sh" => "cesm"
);
my $type = $testTypes {lc $name} || "unknown";
return $type;
}
##############################################################################
#
##############################################################################
=head1 _getMachInfo
method that figures out on what platform this is running and returns a 2 digit
machine identifier and the compiler. This will eventually contain multiple
compiler for various machines.
_getMachInfo takes no arguments
returns: $mach - the machine I'm running on
$comp - the compiler being used
=cut
##############################################################################
#
##############################################################################
sub _getMachInfo
{
my $name=`uname -n`;
$name = substr($name, 0, 2);
my %machNames = (
"ys" => "yellowstone",
"fr" => "frankfurt"
);
my %compNames = (
"ys" => "INTEL",
"fr" => "INTEL"
);
my $mach = $machNames {lc $name} || "unknown";
my $comp = $compNames {lc $name} || "unknown";
return ($mach,$comp);
}
# A Perl module must end with a true value or else it is considered not to
# have loaded. By convention this value is usually 1 though it can be
# any true value. A module can end with false to indicate failure but
# this is rarely used and it would instead die() (exit with an error).
1;

View File

@ -0,0 +1,128 @@
#!/usr/bin/env perl
#-# =========================================================================================
=head1 wrapClmTest.pl
=head1 Overview
This is a wrapper script that is called from test_driver.sh for either interactive or batch
tests. It calls the CTOR for the xFail::expectedFail.pm module and also parses the td*.status
file to create a new file with xFails listed.
It takes the following arguments:
numberOfTests -> number of tests from test_driver.sh
statusFile -> name of the td.<pid>.status file
callingScript -> name of script calling this. For test_driver.sh it may be one of:
1) test_driver.sh-i for interactive tests
2) test_driver.sh for batch tests
=head1 Notes
This script may be run standalone which is useful for testing purposes.
=cut
#-# =========================================================================================
use strict;
use Getopt::Long;
use English;
use Cwd;
use Scalar::Util qw(looks_like_number);
my $DEBUG=0;
sub usage {
die <<EOF;
SYNOPSIS
wrapClmTests [options]
Usually called from test_driver.sh. Scans the td.*.status file and checks for expected test failures.
OPTIONS
-help [or -h] Print usage to STDOUT.
-numberOfTests "numberOfTests"
-statusFile "statusFile" Name of status file
-callingScript "callingScript" Name of calling script
EOF
}
#
# Process command-line options.
#
my %opts = ( help => 0,
numberOfTests => undef,
statusFile => undef,
callingScript => undef,
);
GetOptions(
"h|help" => \$opts{'help'},
"numberOfTests=s" => \$opts{'numberOfTests'},
"statusFile=s" => \$opts{'statusFile'},
"callingScript=s" => \$opts{'callingScript'},
) or usage();
# Give usage message.
usage() if $opts{'help'};
my $statFoo = undef;
my $nTests = undef;
my $script= undef;
if (defined($opts{'statusFile'})) {
$statFoo = $opts{'statusFile'};
}
if (defined($opts{'numberOfTests'})) {
$nTests = $opts{'numberOfTests'};
}
if (defined($opts{'callingScript'})) {
$script = $opts{'callingScript'};
}
my ( $self ) = @_;
#Figure out where configure directory is and where can use the XML/Lite module from
my $ProgName;
($ProgName = $PROGRAM_NAME) =~ s!(.*)/!!; # name of program
my $ProgDir = $1; # name of directory where program lives
my $cwd = getcwd(); # current working directory
my $cfgdir;
if ($ProgDir) { $cfgdir = $ProgDir; }
else { $cfgdir = $cwd; }
#-----------------------------------------------------------------------------------------------
# Add $cfgdir to the list of paths that Perl searches for modules
#-----------------------------------------------------------------------------------------------
my @dirs = ( $cfgdir,
"$cfgdir/../",
"$cfgdir/../../../../../cime/utils/perl5lib");
unshift @INC, @dirs;
my $result = eval "require expectedFail";
if ( ! defined($result) ) {
die <<"EOF";
** Cannot find perl module \"xFail/expectedFail.pm\" from directories: @dirs **
EOF
}
#_# ====================================
#_# setup work complete. Now parse file
#_# ====================================
if ($DEBUG) {
print (" wrapClmTests.pl:: calling script $script \n");
print (" wrapClmTests.pl:: number of tests $nTests \n");
print (" wrapClmTests.pl:: processing $statFoo \n");
}
#_# compGen not used for CLM batch or interactive tests, but we use "compare" as the default in this case
my $compGen="compare";
my $xFail = xFail::expectedFail->new($script,$compGen,$nTests);
$xFail->parseOutputCLM($statFoo);
exit(0);

View File

@ -0,0 +1,37 @@
"""
Implementation of the CIME LCISO (Land Carbon Isotope) test.
This is a CTSM specific test:
Verifies turning on carbon isotopes doesn't change answers
(1) do a run with Carbon isotopes off (suffix base)
(2) add C13 and C14 carbon isotopes on with their time-series (suffix cisoallon)
"""
from CIME.SystemTests.system_tests_compare_two import SystemTestsCompareTwo
from CIME.XML.standard_module_setup import *
from CIME.SystemTests.test_utils.user_nl_utils import append_to_user_nl_files
logger = logging.getLogger(__name__)
class LCISO(SystemTestsCompareTwo):
def __init__(self, case):
SystemTestsCompareTwo.__init__(self, case,
separate_builds = False,
run_two_suffix = 'cisoallon',
run_one_description = 'carbon isotopes off',
run_two_description = 'c13 and c14 isotopes on as well as C isotope time series')
def _case_one_setup(self):
append_to_user_nl_files(caseroot = self._get_caseroot(),
component = "clm",
contents = "use_c13=F, use_c14=F")
def _case_two_setup(self):
append_to_user_nl_files(caseroot = self._get_caseroot(),
component = "clm",
contents = "use_c13=.true.,use_c14=.true.,use_c13_timeseries=.true.,use_c14_bombspike=.true.," + \
"hist_fexcl1='C13_AR','C13_GPP','C13_HR','C13_NBP','C13_SOILC_vr','C13_TOTECOSYSC'," + \
"'C13_TOTLITC','C13_TOTSOMC','C13_TOTVEGC','C14_AR','C14_GPP','C14_HR','C14_NBP'," + \
"'C14_SOILC_vr','C14_TOTECOSYSC','C14_TOTLITC','C14_TOTSOMC','C14_TOTVEGC'")

View File

@ -0,0 +1,56 @@
"""
Implementation of the CIME LII test.
This is a CLM specific test:
Verifies that interpolation of initial conditions onto an identical
configuration gives identical results:
(1) do a run with use_init_interp true (suffix base)
(2) do a run with use_init_interp false (suffix no_interp)
It is more intuitive to think of the no_interp test as the "base". However, we
do the use_init_interp=true test first to facilitate updating initial conditions
whenever this is necessary, as documented below.
The LII test needs to point to an initial conditions file that is compatible
with the given model configuration. Thus, the pointed-to initial conditions file
needs to be updated whenever surface datasets are changed, or the land-mask is
changed, or an imporant change is made to model physics (for example where new
fields are added to the restart file). The procedure for updating the initial
conditions files used by the LII test is as follows:
(1) Run the LII test; the 'base' case should run to completion even if the
no_interp test fails.
(2) Copy the finidat_interp_dest.nc file from the 'base' case to the inputdata
space. Rename this to be similar to the name of the file pointed to in this
test's user_nl_clm file, but with a new creation date.
(3) Update this test's user_nl_clm file (in the appropriate testmods directory)
to point to the new finidat file.
"""
from CIME.SystemTests.system_tests_compare_two import SystemTestsCompareTwo
from CIME.XML.standard_module_setup import *
from CIME.SystemTests.test_utils.user_nl_utils import append_to_user_nl_files
logger = logging.getLogger(__name__)
class LII(SystemTestsCompareTwo):
def __init__(self, case):
SystemTestsCompareTwo.__init__(self, case,
separate_builds = False,
run_two_suffix = 'no_interp',
run_one_description = 'use_init_interp set to true',
run_two_description = 'use_init_interp set to false')
def _case_one_setup(self):
append_to_user_nl_files(caseroot = self._get_caseroot(),
component = "clm",
contents = "use_init_interp = .true.")
def _case_two_setup(self):
append_to_user_nl_files(caseroot = self._get_caseroot(),
component = "clm",
contents = "use_init_interp = .false.")

View File

@ -0,0 +1,76 @@
"""
Implementation of the LII2FINIDATAREAS test.
This is similar to the LII test, but tests init_interp with mode
'use_finidat_areas'.
As with the standard LII test, this must be used in a configuration for
which we have a compatible out-of-the-box finidat file (so that the run
with use_init_interp = .false. runs successfully). In constrast to our
standard LII test (which uses glcMEC_spunup_1way), this one can use a
standard CISM2%NOEVOLVE configuration: we do *not* need to set
GLC_TWO_WAY_COUPLING=FALSE; in fact, it's a better test if we have
GLC_TWO_WAY_COUPLING=TRUE: with this mode of operation, areas should
match between the two runs.
It may not be totally necessary to have a system test covering this
init_interp_method: between unit tests and inline checks, we have quite
a bit of testing of this code. It's important to have at least one LII
test to make sure we're interpolating all the fields we're supposed to
interpolate, but we don't necessarily need a LII test with this mode of
operation as long as we have one with the general mode of operation.
However, this test is a good check that every point has a unique type
(because this mode of operation will fail if that's not the case); this
is something needed even for the 'general' init_interp method to work
correctly, but the 'general' mode won't catch problems in this regard.
One other reason why this test is useful is to cover the threading
directives in the set_single_match routine, since those aren't covered
by unit tests. So this test mod should be used in a test with threading.
To update the initial conditions (finidat) file for this test:
(1) Run the test; the 'base' case should run to completion even if the
no_interp test fails. (If the 'base' case fails, you may need to retry
with init_interp_method='general'.)
(2) Copy the finidat_interp_dest.nc file from the 'base' case to the inputdata
space. Rename this to be similar to the out-of-the-box finidat file
currently used by this test, but with a new creation date.
(3) Update namelist defaults to point to the new finidat file. If
updating the out-of-the-box file is not desired, then you could instead
point to this new finidat file with a user_nl_clm file in this testmod.
"""
from CIME.XML.standard_module_setup import *
from CIME.SystemTests.test_utils.user_nl_utils import append_to_user_nl_files
# We can import lii directly because the SystemTests directory has been
# added to sys.path.
#
# A cleaner and more general way to accomplish this would be: In cime:
# Rather than adding the SystemTests directory to sys.path and then
# importing an individual module from there: instead, allow each
# component to have a COMPNAME_pylib directory within its cime_config,
# and then have cime add each component's cime_config directory to
# sys.path and then do something like:
# import_module("COMPNAME_pylib.SystemTests.TESTNAME"). Then, for
# example, ctsm could access its own modules via "import
# ctsm_pylib.foo", or (in this case) "from ctsm_pylib.SystemTests.lii
# import LII".
from lii import LII
logger = logging.getLogger(__name__)
class LII2FINIDATAREAS(LII):
def __init__(self, case):
super(LII2FINIDATAREAS, self).__init__(case)
def _case_one_setup(self):
super(LII2FINIDATAREAS, self)._case_one_setup()
append_to_user_nl_files(caseroot = self._get_caseroot(),
component = "clm",
contents = "init_interp_method = 'use_finidat_areas'")

View File

@ -0,0 +1,37 @@
"""
Implementation of the CIME LVG (Land Virtual Glacier) test.
This is a CLM specific test:
Verifies that adding virtual glacier columns doesn't change answers
(1) do a run with the standard set of virtual columns (suffix base)
(2) add virtual columns over Antarctica (suffix more_virtual)
This will only pass if there are no column or patch-level outputs in CLM's
history files.
"""
from CIME.SystemTests.system_tests_compare_two import SystemTestsCompareTwo
from CIME.XML.standard_module_setup import *
from CIME.SystemTests.test_utils.user_nl_utils import append_to_user_nl_files
logger = logging.getLogger(__name__)
class LVG(SystemTestsCompareTwo):
def __init__(self, case):
SystemTestsCompareTwo.__init__(self, case,
separate_builds = False,
run_two_suffix = 'more_virtual',
run_one_description = 'standard set of virtual columns',
run_two_description = 'add virtual columns over Antarctica')
def _case_one_setup(self):
append_to_user_nl_files(caseroot = self._get_caseroot(),
component = "clm",
contents = "glacier_region_behavior = 'single_at_atm_topo', 'virtual', 'virtual', 'multiple'")
def _case_two_setup(self):
append_to_user_nl_files(caseroot = self._get_caseroot(),
component = "clm",
contents = "glacier_region_behavior = 'single_at_atm_topo', 'virtual', 'virtual', 'virtual'")

View File

@ -0,0 +1,100 @@
"""
Implementation of the CIME SSP test. This class inherits from SystemTestsCommon
This is a CLM specific test:
Verifies that spinup works correctly
this test is only valid for CLM compsets with CLM45 or CLM50
(1) do an initial spin test
- set CLM_ACCELERATED_SPINUP to on
- write restarts at the end of the run, turn on short term archiving
- turn MOSART off
(2) do a hybrid non-spinup simulation run
- start from the restart files generated in (1)
- turn MOSART off
"""
from CIME.XML.standard_module_setup import *
from CIME.SystemTests.system_tests_common import SystemTestsCommon
import shutil, glob, os
logger = logging.getLogger(__name__)
class SSP(SystemTestsCommon):
def __init__(self, case):
"""
initialize an object interface to the SSP system test
"""
SystemTestsCommon.__init__(self, case)
rof = self._case.get_value("COMP_ROF")
expect(rof == "mosart", "ERROR: SSP test requires that ROF component be mosart")
def run_phase(self):
caseroot = self._case.get_value("CASEROOT")
orig_case = self._case
orig_casevar = self._case.get_value("CASE")
# clone the main case to create ref1
clone_path = "{}.ref1".format(caseroot)
if os.path.exists(clone_path):
shutil.rmtree(clone_path)
clone = self._case.create_clone(clone_path, keepexe=True)
# determine run lengths needed below
stop_nf = self._case.get_value("STOP_N")
stop_n1 = int(stop_nf / 2)
stop_n2 = stop_nf - stop_n1
#-------------------------------------------------------------------
# (1) do a spinup run in the main case in the cloned ref case
# (short term archiving is on)
#-------------------------------------------------------------------
os.chdir(clone_path)
self._set_active_case(clone)
logger.info("startup: doing a {} {} 00000 seconds startup run".format(stop_n1, stop_nf))
logger.info(" writing restarts at end of run")
logger.info(" short term archiving is on ")
clone.set_value("CLM_ACCELERATED_SPINUP", "on")
clone.set_value("MOSART_MODE", "NULL")
clone.set_value("STOP_N",stop_n1)
clone.flush()
dout_sr = clone.get_value("DOUT_S_ROOT")
# No history files expected, set suffix=None to avoid compare error
self._skip_pnl = False
self.run_indv(suffix=None, st_archive=True)
#-------------------------------------------------------------------
# (2) do a hybrid, non-spinup run in orig_case
#-------------------------------------------------------------------
os.chdir(caseroot)
self._set_active_case(orig_case)
refdate = run_cmd_no_fail(r'ls -1dt {}/rest/*-00000* | head -1 | sed "s/-00000.*//" | sed "s/^.*rest\///"'.format(dout_sr))
refsec = "00000"
# obtain rpointer files and necessary restart files from short term archiving directory
rundir = self._case.get_value("RUNDIR")
rest_path = os.path.join(dout_sr, "rest", "{}-{}".format(refdate, refsec))
for item in glob.glob("{}/*{}*".format(rest_path, refdate)):
os.symlink(item, os.path.join(rundir, os.path.basename(item)))
for item in glob.glob("{}/*rpointer*".format(rest_path)):
shutil.copy(item, rundir)
self._case.set_value("CLM_ACCELERATED_SPINUP", "off")
self._case.set_value("RUN_TYPE", "hybrid")
self._case.set_value("GET_REFCASE", False)
self._case.set_value("RUN_REFCASE", "{}.ref1".format(orig_casevar))
self._case.set_value("MOSART_MODE", "NULL")
self._case.set_value("RUN_REFDATE", refdate)
self._case.set_value("STOP_N", stop_n2)
self._case.set_value("DOUT_S", False)
self._case.flush()
# do the restart run (short term archiving is off)
self.run_indv()

52
cime_config/buildcpp Normal file
View File

@ -0,0 +1,52 @@
#!/usr/bin/env python
"""
API for clm's configure
"""
from CIME.XML.standard_module_setup import *
from CIME.utils import run_cmd_no_fail, expect
import glob, shutil
logger = logging.getLogger(__name__)
def buildcpp(case):
"""
Invoke clm configure ONLY for clm4_0 - output goes in `caseroot`/Buildconf/camconf
"""
caseroot = case.get_value("CASEROOT")
cimeroot = case.get_value("CIMEROOT")
lnd_root = case.get_value("COMP_ROOT_DIR_LND")
lnd_grid = case.get_value("LND_GRID")
mask_grid = case.get_value("MASK_GRID")
clm_usrdat_name = case.get_value("CLM_USRDAT_NAME")
clm_config_opts = case.get_value("CLM_CONFIG_OPTS")
compset = case.get_value("COMPSET")
if mask_grid == "reg" and lnd_grid != "CLM_USRDAT":
config_opts = "-sitespf_pt $lnd_grid"
else:
config_opts = ""
if "1PT" in compset:
config_opts = " -sitespf_pt reg"
clmconf = os.path.join(caseroot, "Buildconf", "clmconf")
if not os.path.isdir(clmconf):
os.makedirs(clmconf)
cmd = os.path.join(lnd_root,"bld","configure")
command = "%s -cimeroot %s %s %s -usr_src %s -comp_intf mct " \
%(cmd, cimeroot, config_opts, clm_config_opts, os.path.join(caseroot,"SourceMods","src.clm"))
run_cmd_no_fail(command, from_dir=clmconf)
# determine cppdefs - caseroot/clmconf/CESM_cppdefs is created by the call to configure
with open(os.path.join(clmconf, "CESM_cppdefs"), 'r') as f:
user_cppdefs = f.readline().rstrip()
if user_cppdefs:
case.set_value("CLM_CPPDEFS", user_cppdefs)
case.flush()
return user_cppdefs

118
cime_config/buildlib Executable file
View File

@ -0,0 +1,118 @@
#!/usr/bin/env python
"""
build clm library
"""
import sys, os, shutil, imp
_CIMEROOT = os.environ.get("CIMEROOT")
if _CIMEROOT is None:
raise SystemExit("ERROR: must set CIMEROOT environment variable")
_LIBDIR = os.path.join(_CIMEROOT, "scripts", "Tools")
sys.path.append(_LIBDIR)
from standard_script_setup import *
from CIME.buildlib import parse_input
from CIME.case import Case
from CIME.utils import run_cmd, expect
logger = logging.getLogger(__name__)
###############################################################################
def _main_func():
###############################################################################
caseroot, libroot, bldroot = parse_input(sys.argv)
with Case(caseroot) as case:
casetools = case.get_value("CASETOOLS")
lnd_root = case.get_value("COMP_ROOT_DIR_LND")
gmake_j = case.get_value("GMAKE_J")
gmake = case.get_value("GMAKE")
mach = case.get_value("MACH")
clm_config_opts = case.get_value("CLM_CONFIG_OPTS")
if "clm4_5" in clm_config_opts:
clm_phys = "clm4_5"
elif "clm5_0" in clm_config_opts:
clm_phys = "clm5_0"
elif "clm4_0" in clm_config_opts:
clm_phys = "clm4_0"
else:
expect(False, "CLM_CONFIG_OPTS must support either clm4_5, clm5_0, or clm4_0 physics")
if clm_phys == "clm4_0":
#-------------------------------------------------------
# create Filepath file and clm_cppdefs for clm4_0
#-------------------------------------------------------
# the call to configure here creates BOTH the Filepath file and the clm_cppdefs
cmd = os.path.join(os.path.join(lnd_root,"cime_config","buildcpp"))
logger.info(" ...calling clm buildcpp to set build time options")
try:
mod = imp.load_source("buildcpp", cmd)
clm_cppdefs = mod.buildcpp(case)
except:
raise
# the above call to buildcpp generates the Filepath file
if not os.path.isfile(os.path.join(bldroot, "Filepath")):
filesrc = os.path.join(caseroot, "Buildconf", "clmconf", "Filepath")
filedst = os.path.join(bldroot, "Filepath")
shutil.copy(filesrc,filedst)
else:
#-------------------------------------------------------
# create Filepath file for clm4_5 or clm5_0
#-------------------------------------------------------
filepath_file = os.path.join(bldroot,"Filepath")
if not os.path.isfile(filepath_file):
caseroot = case.get_value("CASEROOT")
paths = [os.path.join(caseroot,"SourceMods","src.clm"),
os.path.join(lnd_root,"src","main"),
os.path.join(lnd_root,"src","biogeophys"),
os.path.join(lnd_root,"src","biogeochem"),
os.path.join(lnd_root,"src","soilbiogeochem"),
os.path.join(lnd_root,"src","dyn_subgrid"),
os.path.join(lnd_root,"src","init_interp"),
os.path.join(lnd_root,"src","fates"),
os.path.join(lnd_root,"src","fates","main"),
os.path.join(lnd_root,"src","fates","biogeophys"),
os.path.join(lnd_root,"src","fates","biogeochem"),
os.path.join(lnd_root,"src","fates","fire"),
os.path.join(lnd_root,"src","fates","parteh"),
os.path.join(lnd_root,"src","utils"),
os.path.join(lnd_root,"src","cpl")]
with open(filepath_file, "w") as filepath:
filepath.write("\n".join(paths))
filepath.write("\n")
#-------------------------------------------------------
# create the library in libroot
#-------------------------------------------------------
clm_config_opts = case.get_value("CLM_CONFIG_OPTS")
if clm_phys == "clm4_0":
complib = os.path.join(libroot,"liblnd.a")
else:
complib = os.path.join(libroot,"libclm.a")
makefile = os.path.join(casetools, "Makefile")
macfile = os.path.join(caseroot, "Macros.%s" % mach)
if clm_phys == "clm4_0":
cmd = "%s complib -j %d MODEL=clm COMPLIB=%s -f %s MACFILE=%s USER_CPPDEFS='%s'" \
% (gmake, gmake_j, complib, makefile, macfile, clm_cppdefs )
else:
cmd = "%s complib -j %d MODEL=clm COMPLIB=%s -f %s MACFILE=%s " \
% (gmake, gmake_j, complib, makefile, macfile )
rc, out, err = run_cmd(cmd)
logger.info("%s: \n\n output:\n %s \n\n err:\n\n%s\n"%(cmd,out,err))
expect(rc == 0, "Command %s failed with rc=%s" % (cmd, rc))
###############################################################################
if __name__ == "__main__":
_main_func()

270
cime_config/buildnml Executable file
View File

@ -0,0 +1,270 @@
#!/usr/bin/env python
"""
CLM namelist creator
"""
import sys, os, shutil, imp, filecmp
_CIMEROOT = os.environ.get("CIMEROOT")
if _CIMEROOT is None:
raise SystemExit("ERROR: must set CIMEROOT environment variable")
_LIBDIR = os.path.join(_CIMEROOT, "scripts", "Tools")
sys.path.append(_LIBDIR)
from standard_script_setup import *
from CIME.buildnml import create_namelist_infile, parse_input
from CIME.case import Case
from CIME.utils import expect, run_cmd
logger = logging.getLogger(__name__)
_config_cache_template = """
<?xml version="1.0"?>
<config_definition>
<commandline></commandline>
<entry id="phys" value="{clm_phys}" list="" valid_values="clm4_5,clm5_0">Specifies clm physics</entry>
</config_definition>
"""
###############################################################################
def buildnml(case, caseroot, compname):
###############################################################################
"""Build the clm namelist """
# Build the component namelist
if compname != "clm":
raise AttributeError
lnd_root = case.get_value("COMP_ROOT_DIR_LND")
din_loc_root = case.get_value("DIN_LOC_ROOT")
ccsm_co2_ppmv = case.get_value("CCSM_CO2_PPMV")
clm_co2_type = case.get_value("CLM_CO2_TYPE")
clm_namelist_opts = case.get_value("CLM_NAMELIST_OPTS")
clm_bldnml_opts = case.get_value("CLM_BLDNML_OPTS")
clm_nml_use_case = case.get_value("CLM_NML_USE_CASE")
clm_force_coldstart = case.get_value("CLM_FORCE_COLDSTART")
lnd_tuning_mode = case.get_value("LND_TUNING_MODE")
clm_accelerated_spinup = case.get_value("CLM_ACCELERATED_SPINUP")
comp_atm = case.get_value("COMP_ATM")
lnd_grid = case.get_value("LND_GRID")
lnd_ncpl = case.get_value("LND_NCPL")
lnd_domain_path = case.get_value("LND_DOMAIN_PATH")
lnd_domain_file = case.get_value("LND_DOMAIN_FILE")
ninst_lnd = case.get_value("NINST_LND")
rundir = case.get_value("RUNDIR")
run_type = case.get_value("RUN_TYPE")
run_startdate = case.get_value("RUN_STARTDATE")
run_refcase = case.get_value("RUN_REFCASE")
run_refdate = case.get_value("RUN_REFDATE")
run_reftod = case.get_value("RUN_REFTOD")
glc_nec = case.get_value("GLC_NEC")
mask = case.get_value("MASK_GRID")
# -----------------------------------------------------
# Set clmconf
# -----------------------------------------------------
clmconf = os.path.join(caseroot, "Buildconf", "clmconf")
if not os.path.isdir(clmconf):
os.makedirs(clmconf)
# -----------------------------------------------------
# Create config_cache.xml file
# -----------------------------------------------------
# Note that build-namelist utilizes the contents of the config_cache.xml file in
# the namelist_defaults.xml file to obtain namelist variables
clm_config_opts = case.get_value("CLM_CONFIG_OPTS")
if "clm4_5" in clm_config_opts:
clm_phys = "clm4_5"
elif "clm5_0" in clm_config_opts:
clm_phys = "clm5_0"
elif "clm4_0" in clm_config_opts:
clm_phys = "clm4_0"
else:
expect(False, "CLM_CONFIG_OPTS must support either clm4_5, clm5_0, or clm4_0 physics")
if clm_phys == "clm4_0":
# call buildcpp to obtain clm_cppdefs if it is not set in env_build.xml
call_buildcpp = False
if not os.path.exists(os.path.join(caseroot,"LockedFiles","env_build.xml")):
call_buildcpp = True
else:
file1 = os.path.join(caseroot,"env_build.xml")
file2 = os.path.join(caseroot,"LockedFiles","env_build.xml")
if not filecmp.cmp(file1, file2):
call_buildcpp = True
if call_buildcpp:
cmd = os.path.join(os.path.join(lnd_root,"cime_config","buildcpp"))
logger.info(" ...calling clm buildcpp to set build time options")
try:
mod = imp.load_source("buildcpp", cmd)
mod.buildcpp(case)
except:
raise
else:
config_cache_text = _config_cache_template.format(clm_phys=clm_phys)
config_cache_path = os.path.join(caseroot, "Buildconf", "clmconf", "config_cache.xml")
with open(config_cache_path, 'w') as config_cache_file:
config_cache_file.write(config_cache_text)
# -----------------------------------------------------
# Determine input arguments into build-namelist
# -----------------------------------------------------
startfile_type = "finidat"
start_type = "default"
if run_type == "hybrid":
start_type = "startup"
elif run_type != "startup":
start_type = run_type
if run_type == "branch":
startfile_type = "nrevsn"
if clm_force_coldstart == "on":
clm_force_coldstart = "off"
logger.warning( "WARNING: You've turned on CLM_FORCE_COLDSTART for a branch run_type, which is a contradiction, the coldstart will be ignored\n" +
" turn off CLM_FORCE_COLDSTART, or set RUN_TYPE=hybrid to get rid of this warning")
if (clm_force_coldstart == "on"):
logger.warning( "WARNING: CLM is starting up from a cold state" )
start_type = "cold"
if lnd_grid == 'T31':
lnd_grid = '48x96'
if lnd_grid == 'T42':
lnd_grid = '64x128'
if lnd_grid == 'T85':
lnd_grid = '128x256'
if lnd_grid == 'T341':
lnd_grid = '512x1024'
clmusr = ""
if lnd_grid == "CLM_USRDAT":
clm_usrdat_name = case.get_value("CLM_USRDAT_NAME")
lnd_grid = clm_usrdat_name
clmusr = " -clm_usr_name %s "%clm_usrdat_name
if comp_atm != "datm":
nomeg = "-no-megan"
else:
nomeg = ""
if clm_nml_use_case != "UNSET":
usecase = "-use_case %s" %clm_nml_use_case
else:
usecase = ""
if ( (mask != "null") and (mask != "UNSET") ):
gridmask = "-mask %s" %mask
else:
gridmask = ""
start_ymd = run_startdate.replace('-','')
if ('-01-01' in run_startdate) or ('-09-01' in run_startdate):
ignore = "-ignore_ic_year"
else:
ignore = "-ignore_ic_date"
tuning = "-lnd_tuning_mode %s "%lnd_tuning_mode
spinup = "-clm_accelerated_spinup %s "%clm_accelerated_spinup
infile = os.path.join(clmconf, "namelist")
inputdata_file = os.path.join(caseroot,"Buildconf","clm.input_data_list")
lndfrac_file = os.path.join(lnd_domain_path,lnd_domain_file)
config_cache_file = os.path.join(caseroot,"Buildconf","clmconf","config_cache.xml")
# -----------------------------------------------------
# Clear out old data
# -----------------------------------------------------
if os.path.exists(inputdata_file):
os.remove(inputdata_file)
# -----------------------------------------------------
# loop over instances
# -----------------------------------------------------
ninst = int(ninst_lnd)
for inst_counter in range(1, ninst+1):
# determine instance string
inst_string = ""
if ninst > 1:
inst_string = '_' + '%04d' % inst_counter
# If multi-instance case does not have restart file, use
# single-case restart for each instance
rpointer = "rpointer.lnd"
if (os.path.isfile(os.path.join(rundir,rpointer)) and
(not os.path.isfile(os.path.join(rundir,rpointer + inst_string)))):
shutil.copy(os.path.join(rundir, rpointer),
os.path.join(rundir, rpointer + inst_string))
# -----------------------------------------------------
# call build-namelist
# -----------------------------------------------------
if run_type == "hybrid" or run_type == "branch":
clm_startfile = "%s.clm2%s.r.%s-%s.nc"%(run_refcase,inst_string,run_refdate,run_reftod)
if not os.path.exists(os.path.join(rundir, clm_startfile)):
clm_startfile = "%s.clm2.r.%s-%s.nc"%(run_refcase,run_refdate,run_reftod)
clm_icfile = "%s = \'%s\'"%(startfile_type, clm_startfile)
else:
clm_icfile = ""
infile_lines = []
infile_lines.append(clm_icfile)
user_nl_file = os.path.join(caseroot, "user_nl_clm" + inst_string)
namelist_infile = os.path.join(clmconf, "namelist")
create_namelist_infile(case, user_nl_file, namelist_infile, "\n".join(infile_lines))
cmd = os.path.join(lnd_root,"bld","build-namelist")
command = ("%s -cimeroot %s -infile %s -csmdata %s -inputdata %s %s -namelist \"&clm_inparm start_ymd=%s %s/ \" "
"%s %s -res %s %s -clm_start_type %s -envxml_dir %s -l_ncpl %s "
"-lnd_frac %s -glc_nec %s -co2_ppmv %s -co2_type %s -config %s "
"%s %s %s %s"
%(cmd, _CIMEROOT, infile, din_loc_root, inputdata_file, ignore, start_ymd, clm_namelist_opts,
nomeg, usecase, lnd_grid, clmusr, start_type, caseroot, lnd_ncpl,
lndfrac_file, glc_nec, ccsm_co2_ppmv, clm_co2_type, config_cache_file,
clm_bldnml_opts, spinup, tuning, gridmask))
rc, out, err = run_cmd(command, from_dir=clmconf)
expect(rc==0,"Command %s failed rc=%d\nout=%s\nerr=%s"%(cmd,rc,out,err))
if out is not None:
logger.debug(" %s"%out)
if err is not None:
logger.debug(" %s"%err)
# -----------------------------------------------------
# copy resolved namelist to rundir
# -----------------------------------------------------
if os.path.isdir(rundir):
file1 = os.path.join(clmconf, "lnd_in")
file2 = os.path.join(rundir, "lnd_in")
if ninst > 1:
file2 += inst_string
logger.debug("CLM namelist copy: file1 %s file2 %s " %(file1, file2))
shutil.copy(file1,file2)
###############################################################################
def _main_func():
caseroot = parse_input(sys.argv)
with Case(caseroot) as case:
buildnml(case, caseroot, "clm")
if __name__ == "__main__":
_main_func()

View File

@ -0,0 +1,24 @@
<components version="2.0">
<comp_archive_spec compname="clm" compclass="lnd">
<rest_file_extension>r</rest_file_extension>
<rest_file_extension>rh\d?</rest_file_extension>
<hist_file_extension>h\d*.*\.nc$</hist_file_extension>
<hist_file_extension>e</hist_file_extension>
<rest_history_varname>locfnh</rest_history_varname>
<rpointer>
<rpointer_file>rpointer.lnd$NINST_STRING</rpointer_file>
<rpointer_content>./$CASE.clm2$NINST_STRING.r.$DATENAME.nc</rpointer_content>
</rpointer>
<test_file_names>
<tfile disposition="copy">rpointer.lnd</tfile>
<tfile disposition="copy">rpointer.lnd_9999</tfile>
<tfile disposition="copy">casename.clm2.r.1976-01-01-00000.nc</tfile>
<tfile disposition="copy">casename.clm2.rh4.1976-01-01-00000.nc</tfile>
<tfile disposition="move">casename.clm2.h0.1976-01-01-00000.nc</tfile>
<tfile disposition="ignore">casename.clm2.h0.1976-01-01-00000.nc.base</tfile>
<tfile disposition="move">casename.clm2_0002.e.postassim.1976-01-01-00000.nc</tfile>
<tfile disposition="move">casename.clm2_0002.e.preassim.1976-01-01-00000.nc</tfile>
<tfile disposition="ignore">anothercasename.clm2.i.1976-01-01-00000.nc</tfile>
</test_file_names>
</comp_archive_spec>
</components>

View File

@ -0,0 +1,274 @@
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="definitions_variables.xsl" ?>
<entry_id version="3.0">
<!-- modifier_mode allowed values are
'*' 0 or more modifiers (default)
'1' exactly 1 modifier
'?' 0 or 1 modifiers
'+' 1 or more modifiers
This file may have lnd desc entries.
-->
<!-- Descriptions of all the different valid configurations for different model versions -->
<description modifier_mode="1">
<desc lnd="CLM40[%SP][%CN][%CNDV][%CN-CROP][%CNDV-CROP]" >clm4.0:</desc>
<desc lnd="CLM45[%SP][%SP-VIC][%CN][%CNDV][%CN-CROP][%CNDV-CROP][%BGC][%BGC-CROP][%FATES][%BGCDV][%BGCDV-CROP]" >clm4.5:</desc>
<desc lnd="CLM50[%SP][%SP-VIC][%SP-NOANTHRO][%BGC-NOANTHRO][%CN][%BGC][%BGC-CROP][%FATES][%BGCDV][%BGCDV-CROP][%BGC-CROP-CMIP6DECK][%BGC-CROP-CMIP6WACCMDECK]">clm5.0:</desc>
<desc option="SP" >Satellite phenology:</desc>
<desc option="CN" >CN: Carbon Nitrogen model</desc>
<desc option="CNDV" >CNDV: CN with Dynamic Vegetation</desc>
<desc option="CN-CROP" >CN with prognostic crop:</desc>
<desc option="CNDV-CROP" >CNDV with prognostic crop:</desc>
<desc option="SP-VIC" >Satellite phenology with VIC hydrology:</desc>
<desc option="SP-NOANTHRO" >Satellite phenology without anthropomorphic influences</desc>
<desc option="BGC" >BGC (vert. resol. CN and methane):</desc>
<desc option="BGC-CROP" >BGC (vert. resol. CN and methane) with prognostic crop:</desc>
<desc option="BGC-NOANTHRO" >BGC (vert. resol. CN and methane) without anthropomorphic influences:</desc>
<desc option="FATES" >FATES (Functionally Assembled Terrestrial Ecosystem Simulator) Ecosystem Demography model: (experimental)</desc>
<desc option="BGCDV" >BGC (vert. resol. CN and methane) with dynamic vegetation:</desc>
<desc option="BGCDV-CROP" >BGC (vert. resol. CN and methane) with dynamic vegetation and prognostic crop:</desc>
<desc option="BGC-CROP-CMIP6DECK">BGC (vert. resol. CN and methane) with prognostic crop, with modifications appropriate for CMIP6 DECK experiments:</desc>
<desc option="BGC-CROP-CMIP6WACCMDECK">BGC (vert. resol. CN and methane) with prognostic crop, with modifications appropriate for CMIP6 WACCM DECK experiments:</desc>
</description>
<entry id="COMP_LND">
<type>char</type>
<valid_values>clm</valid_values>
<default_value>clm</default_value>
<group>case_comp</group>
<file>env_case.xml</file>
<desc>Name of land component</desc>
</entry>
<entry id="CLM_CPPDEFS">
<type>char</type>
<valid_values></valid_values>
<default_value>UNSET</default_value>
<group>build_component_cam</group>
<file>env_build.xml</file>
<desc>CLM cpp definitions (if-any) (setup automatically - DO NOT EDIT)</desc>
</entry>
<entry id="LND_TUNING_MODE">
<type>char</type>
<group>run_component_clm</group>
<file>env_run.xml</file>
<desc>Tuning parameters and initial conditions should be optimized for what CLM model version and what meteorlogical forcing combination?
</desc>
<default_value>UNSET</default_value>
<valid_values>clm4_0_CRUv7,clm4_0_GSWP3v1,clm5_0_cam6.0,clm5_0_GSWP3v1,clm5_0_CRUv7,clm4_5_CRUv7,clm4_5_GSWP3v1,clm4_5_cam6.0</valid_values>
<values>
<value compset= "CLM40" >clm4_0_CRUv7</value>
<value compset="DATM%CRU_CLM40" >clm4_0_CRUv7</value>
<value compset="DATM%CRUv7.+_CLM40" >clm4_0_CRUv7</value>
<value compset="DATM%GSWP3.+_CLM40" >clm4_0_GSWP3v1</value>
<value compset= "CLM45" >clm4_5_CRUv7</value>
<value compset="DATM%CRUv7.+_CLM45" >clm4_5_CRUv7</value>
<value compset="DATM%GSWP3.+_CLM45" >clm4_5_GSWP3v1</value>
<value compset="CAM.+_CLM45" >clm4_5_cam6.0</value>
<value compset= "CLM50" >clm5_0_CRUv7</value>
<value compset="DATM%CRUv7.+_CLM50" >clm5_0_CRUv7</value>
<value compset="DATM%GSWP3.+_CLM50" >clm5_0_GSWP3v1</value>
<value compset="CAM.+_CLM50" >clm5_0_cam6.0</value>
</values>
</entry>
<entry id="CLM_CONFIG_OPTS" >
<type>char</type>
<default_value></default_value>
<values modifier='additive'>
<value compset="_CLM40" >-phys clm4_0</value>
<value compset="_CLM40%[^_]*CN" >-bgc cn</value>
<value compset="_CLM40%[^_]*CNDV" >-bgc cndv</value>
<value compset="_CLM40%[^_]*CROP" >-crop on</value>
<value compset="_CLM45" >-phys clm4_5</value>
<value compset="_CLM50" >-phys clm5_0</value>
</values>
<group>build_component_clm</group>
<file>env_build.xml</file>
<desc>Provides option(s) for the CLM configure utility.
CLM_CONFIG_OPTS are normally set as compset variables (e.g., -bgc cn)
and in general should not be modified for supported compsets.
It is recommended that if you want to modify this value for your experiment,
you should use your own user-defined component sets via using create_newcase
with a compset_file argument.
This is an advanced flag and should only be used by expert users.</desc>
</entry>
<entry id="CLM_NML_USE_CASE">
<type>char</type>
<default_value>UNSET</default_value>
<values>
<!-- Use SSP5-8.5 for PI to PDAY so will have data up to the current year available (for WACCM compsets that use PDAY) -->
<value compset="^2010_" >2010_control</value>
<value compset="^2000_" >2000_control</value>
<value compset="^1850_" >1850_control</value>
<value compset="^1850_.*_CLM50%[^_]*NOANTHRO" >1850_noanthro_control</value>
<value compset="^HIST_" >20thC_transient</value>
<!-- Future scenarios to 2100 -->
<value compset="^SSP585_" >1850-2100_SSP5-8.5_transient</value>
<value compset="^SSP126_" >1850-2100_SSP1-2.6_transient</value>
<value compset="^SSP370_" >1850-2100_SSP3-7.0_transient</value>
<value compset="^SSP534_" >1850-2100_SSP5-3.4_transient</value>
<value compset="^SSP245_" >1850-2100_SSP2-4.5_transient</value>
<value compset="^SSP119_" >1850-2100_SSP1-1.9_transient</value>
<value compset="^SSP434_" >1850-2100_SSP4-3.4_transient</value>
<value compset="^SSP460_" >1850-2100_SSP4-6.0_transient</value>
<value compset="^SSP585_" >1850-2100_SSP5-8.5_transient</value>
<!-- SSP extensions to 2300 -->
<value compset="^SSP585EXT_" >2100-2300_SSP5-8.5_transient</value>
<value compset="^SSP534EXT_" >2100-2300_SSP5-3.4_transient</value>
<value compset="^SSP126EXT_" >2100-2300_SSP1-2.6_transient</value>
<value compset="^SSP370EXT_" >2100_SSP3-7.0_control</value>
<!-- Periods used for CAM -->
<value compset="^AMIP_" >20thC_transient</value>
<value compset="^PIPD_" >1850-2100_SSP5-8.5_transient</value>
<!-- SMYLE L83 -->
<value compset="1850_CAM60%WCSC%SMYLE_CLM50%BGC-CROP_CICE_POP2%ECO%ABIO-DIC_MOSART_CISM2%NOEVOLVE_WW3_BGC%BDRD">1850_smyle_control</value>
<value compset="HIST_CAM60%WCSC%SMYLE_CLM50%BGC-CROP_CICE_POP2%ECO%ABIO-DIC_MOSART_CISM2%NOEVOLVE_WW3_BGC%BDRD">20thC_smyle_transient</value>
</values>
<group>run_component_clm</group>
<file>env_run.xml</file>
<desc>CLM namelist use_case.
Determines the use-case that will be sent to the CLM build-namelist utility.
This is normally set by the component set. This is an advanced flag and should only be
used by expert users.</desc>
</entry>
<!-- CLM_BLDNML_OPTS is not additive, we must list all possible combinations -->
<!-- ERROR: the node below is never matched, see bug 2025 -->
<entry id="CLM_BLDNML_OPTS">
<type>char</type>
<default_value></default_value>
<values>
<value compset="_CLM45%[^_]*SP" >-bgc sp</value>
<value compset="_CLM45%[^_]*CN" >-bgc cn</value>
<value compset="_CLM45%[^_]*BGC" >-bgc bgc</value>
<value compset="_CLM45%[^_]*CN-CROP" >-bgc cn -crop</value>
<value compset="_CLM45%[^_]*BGC-CROP" >-bgc bgc -crop</value>
<value compset="_CLM45%[^_]*CNDV" >-bgc cn -dynamic_vegetation</value>
<value compset="_CLM45%[^_]*BGCDV" >-bgc bgc -dynamic_vegetation</value>
<value compset="_CLM45%[^_]*CNDV-CROP" >-bgc cn -dynamic_vegetation -crop</value>
<value compset="_CLM45%[^_]*BGCDV-CROP" >-bgc bgc -dynamic_vegetation -crop</value>
<value compset="_CLM45%[^_]*SP-VIC" >-bgc sp -vichydro </value>
<value compset="_CLM45%[^_]*FATES" >-bgc fates -no-megan</value>
<value compset="_CLM50%[^_]*SP" >-bgc sp</value>
<value compset="_CLM50%[^_]*BGC" >-bgc bgc</value>
<value compset="_CLM50%[^_]*BGCDV" >-bgc bgc -dynamic_vegetation</value>
<value compset="_CLM50%[^_]*BGC-CROP" >-bgc bgc -crop</value>
<value compset="_CLM50%[^_]*CN" >-bgc cn</value>
<value compset="_CLM50%[^_]*CN-CROP" >-bgc cn -crop</value>
<value compset="_CLM50%[^_]*CNDV" >-bgc cn -dynamic_vegetation</value>
<value compset="_CLM50%[^_]*CNDV-CROP" >-bgc cn -dynamic_vegetation -crop</value>
<value compset="_CLM50%[^_]*BGCDV-CROP" >-bgc bgc -dynamic_vegetation -crop</value>
<value compset="_CLM50%[^_]*SP-VIC" >-bgc sp -vichydro </value>
<value compset="_CLM50%[^_]*FATES" >-bgc fates -no-megan</value>
</values>
<group>run_component_clm</group>
<file>env_run.xml</file>
<desc>CLM build-namelist options</desc>
</entry>
<entry id="CLM_CO2_TYPE">
<type>char</type>
<valid_values>constant,diagnostic,prognostic</valid_values>
<default_value>constant</default_value>
<values>
<value compset="_CAM" >diagnostic</value>
<value compset="_BGC%BDRD" >diagnostic</value>
<value compset="_BGC%BPRP" >prognostic</value>
<value compset="HIST.*_DATM" >diagnostic</value>
<value compset="SSP.*_DATM" >diagnostic</value>
<!-- This requires a coordination with a cime tag
<value compset="SSP.*_DATM" >diagnostic</value>
-->
</values>
<group>run_component_clm</group>
<file>env_run.xml</file>
<desc>Determines how CLM will determine where CO2 is set.
If value is constant, it will be set to CCSM_CO2_PPMV,
if value is either diagnostic or prognostic, the atmosphere model
MUST send it to CLM. CLM_CO2_TYPE is normally set by the specific
compset, since it HAS to be coordinated with settings for the
atmospheric model. Do not modify this variable. If you want to modify for
your experiment, use your own user-defined component set
This is an advanced flag and should only be used by expert users.</desc>
</entry>
<entry id="CLM_NAMELIST_OPTS">
<type>char</type>
<default_value></default_value>
<group>run_component_clm</group>
<file>env_run.xml</file>
<desc>CLM-specific namelist settings for -namelist option in the CLM
build-namelist. CLM_NAMELIST_OPTS is normally set as a compset variable
and in general should not be modified for supported compsets.
It is recommended that if you want to modify this value for your experiment,
you should use your own user-defined component sets via using create_newcase
with a compset_file argument.
This is an advanced flag and should only be used by expert users.</desc>
</entry>
<entry id="CLM_ACCELERATED_SPINUP">
<type>char</type>
<valid_values>on,off</valid_values>
<default_value>off</default_value>
<group>run_component_clm</group>
<file>env_run.xml</file>
<desc>Turn on any settings for accellerating the model spinup.
</desc>
</entry>
<entry id="CLM_USRDAT_NAME">
<type>char</type>
<default_value>UNSET</default_value>
<group>run_component_clm</group>
<file>env_run.xml</file>
<desc>Dataset name for user-created datasets. This is used as the argument
in Buildconf/clm.buildnml to build-namelist -clm_usr_name. An example of
such a dataset would be 1x1pt_boulderCO_c090722. The default value is UNSET.
This is an advanced flag and should only be used by expert users.</desc>
</entry>
<entry id="CLM_FORCE_COLDSTART">
<type>char</type>
<valid_values>on,off</valid_values>
<default_value>off</default_value>
<group>run_component_clm</group>
<file>env_run.xml</file>
<desc>Flag to the CLM build-namelist command to force CLM to do a
cold start (finidat will be set to blanks).
A value of on forces the model to spin up from a cold-start
(arbitrary initial conditions). Setting this value in the xml file will take
precedence over any settings for finidat in the $CASEROOT/user_clm_clm file.</desc>
</entry>
<entry id="CLM_USER_MODS">
<type>char</type>
<valid_values></valid_values>
<default_value></default_value>
<values match="last">
<value compset="_CLM50%[^_]*CMIP6DECK[%_]" >$COMP_ROOT_DIR_LND/cime_config/usermods_dirs/cmip6_deck</value>
<value grid="l%1.9x2.5" compset="_CLM50%[^_]*CMIP6DECK[%_]" >$COMP_ROOT_DIR_LND/cime_config/usermods_dirs/cmip6_nociso_deck</value>
<value compset="_CLM50%[^_]*CMIP6WACCMDECK[%_]">$COMP_ROOT_DIR_LND/cime_config/usermods_dirs/cmip6_waccm_deck</value>
<value grid="l%1.9x2.5" compset="_CLM50%[^_]*CMIP6WACCMDECK[%_]">$COMP_ROOT_DIR_LND/cime_config/usermods_dirs/cmip6_waccm_nociso_deck</value>
</values>
<group>run_component_clm</group>
<file>env_case.xml</file>
<desc>User mods to apply to specific compset matches. </desc>
</entry>
<help>
=========================================
CLM naming conventions
=========================================
note: [^_]* means match zero or more of any character BUT an underbar.
(in other words make sure there is NOT a underbar before the string afterwards)
</help>
</entry_id>

View File

@ -0,0 +1,539 @@
<?xml version="1.0"?>
<compsets version="2.0">
<help>
=========================================
compset naming convention
=========================================
The compset longname below has the specified order
atm, lnd, ice, ocn, river, glc wave cesm-options
The notation for the compset longname is
TIME_ATM[%phys]_LND[%phys]_ICE[%phys]_OCN[%phys]_ROF[%phys]_GLC[%phys]_WAV[%phys][_BGC%phys]
Where for the CAM specific compsets below the following is supported
TIME = Time period (e.g. 2000, HIST, SSP585...)
ATM = [CAM40, CAM50, CAM55]
LND = [CLM40, CLM45, CLM50, SLND]
ICE = [CICE, DICE, SICE]
OCN = [DOCN, ,AQUAP, SOCN]
ROF = [RTM, SROF]
GLC = [CISM1, CISM2]
WAV = [SWAV]
BGC = optional BGC scenario
The OPTIONAL %phys attributes specify submodes of the given system
For example DOCN%DOM is the data ocean model for DOCN
ALL the possible %phys choices for each component are listed
with the -list command for create_newcase
ALL data models must have a %phys option that corresponds to the data model mode
Each compset node is associated with the following elements
- lname
- alias
- science_support (if this compset is supported scientifically with control simulations)
</help>
<!-- I single point forcing -->
<compset>
<alias>I1PtClm50SpGs</alias>
<lname>2000_DATM%1PT_CLM50%SP_SICE_SOCN_MOSART_SGLC_SWAV</lname>
</compset>
<compset>
<alias>I1PtClm45SpGs</alias>
<lname>2000_DATM%1PT_CLM45%SP_SICE_SOCN_RTM_SGLC_SWAV</lname>
</compset>
<!-- I CLM50 Compsets -->
<compset>
<alias>I2000Clm50Sp</alias>
<lname>2000_DATM%GSWP3v1_CLM50%SP_SICE_SOCN_MOSART_CISM2%NOEVOLVE_SWAV</lname>
</compset>
<compset>
<alias>I2010Clm50Sp</alias>
<lname>2010_DATM%GSWP3v1_CLM50%SP_SICE_SOCN_MOSART_CISM2%NOEVOLVE_SWAV</lname>
</compset>
<compset>
<alias>I2000Clm50BgcCru</alias>
<lname>2000_DATM%CRUv7_CLM50%BGC_SICE_SOCN_MOSART_CISM2%NOEVOLVE_SWAV</lname>
</compset>
<!-- Primarily for testing -->
<compset>
<alias>I2000Clm50BgcCropRtm</alias>
<lname>2000_DATM%GSWP3v1_CLM50%BGC-CROP_SICE_SOCN_RTM_CISM2%NOEVOLVE_SWAV</lname>
</compset>
<compset>
<alias>I2000Clm50BgcCrop</alias>
<lname>2000_DATM%GSWP3v1_CLM50%BGC-CROP_SICE_SOCN_MOSART_CISM2%NOEVOLVE_SWAV</lname>
</compset>
<!-- Primarily for testing -->
<compset>
<alias>I2000Clm50Cn</alias>
<lname>2000_DATM%GSWP3v1_CLM50%CN_SICE_SOCN_MOSART_CISM2%NOEVOLVE_SWAV</lname>
</compset>
<compset>
<alias>I1850Clm50Sp</alias>
<lname>1850_DATM%GSWP3v1_CLM50%SP_SICE_SOCN_MOSART_CISM2%NOEVOLVE_SWAV</lname>
<science_support grid="f09_g17"/>
<science_support grid="f19_g17"/>
</compset>
<compset>
<alias>I1850Clm50SpCru</alias>
<lname>1850_DATM%CRUv7_CLM50%SP_SICE_SOCN_MOSART_CISM2%NOEVOLVE_SWAV</lname>
<science_support grid="f09_g17"/>
<science_support grid="f19_g17"/>
</compset>
<compset>
<alias>I1850Clm50BgcCrop</alias>
<lname>1850_DATM%GSWP3v1_CLM50%BGC-CROP_SICE_SOCN_MOSART_CISM2%NOEVOLVE_SWAV</lname>
<science_support grid="f09_g17"/>
<science_support grid="f19_g17"/>
</compset>
<!-- Primarily for testing the CMIP6DECK compset option -->
<compset>
<alias>I1850Clm50BgcCropCmip6</alias>
<lname>1850_DATM%GSWP3v1_CLM50%BGC-CROP-CMIP6DECK_SICE_SOCN_MOSART_CISM2%NOEVOLVE_SWAV</lname>
</compset>
<!-- Primarily for testing the CMIP6WACCMDECK compset option -->
<compset>
<alias>I1850Clm50BgcCropCmip6waccm</alias>
<lname>1850_DATM%GSWP3v1_CLM50%BGC-CROP-CMIP6WACCMDECK_SICE_SOCN_MOSART_CISM2%NOEVOLVE_SWAV</lname>
</compset>
<compset>
<alias>I1850Clm50BgcCropCru</alias>
<lname>1850_DATM%CRUv7_CLM50%BGC-CROP_SICE_SOCN_MOSART_CISM2%NOEVOLVE_SWAV</lname>
<science_support grid="f09_g17"/>
<science_support grid="f19_g17"/>
</compset>
<compset>
<alias>I2000Clm50SpGs</alias>
<lname>2000_DATM%GSWP3v1_CLM50%SP_SICE_SOCN_MOSART_SGLC_SWAV</lname>
</compset>
<!-- Primarily for testing -->
<compset>
<alias>I2000Clm50BgcCropGs</alias>
<lname>2000_DATM%GSWP3v1_CLM50%BGC-CROP_SICE_SOCN_MOSART_SGLC_SWAV</lname>
</compset>
<!-- Primarily for testing (stub glc needed for single-point tests); uses Qian
atmospheric forcing simply to give faster datm throughput, which is
particularly relevant for single-point cases (where datm dominates the
runtime) -->
<compset>
<alias>I2000Clm50BgcCropQianGs</alias>
<lname>2000_DATM%QIA_CLM50%BGC-CROP_SICE_SOCN_MOSART_SGLC_SWAV</lname>
</compset>
<compset>
<alias>I2000Clm50BgcCruGs</alias>
<lname>2000_DATM%CRUv7_CLM50%BGC_SICE_SOCN_MOSART_SGLC_SWAV</lname>
</compset>
<!-- Primarily for testing -->
<compset>
<alias>I2000Clm50SpRtmFl</alias>
<lname>2000_DATM%GSWP3v1_CLM50%SP_SICE_SOCN_RTM%FLOOD_CISM2%NOEVOLVE_SWAV</lname>
</compset>
<!---I FATES compsets -->
<compset>
<alias>I2000Clm50Fates</alias>
<lname>2000_DATM%GSWP3v1_CLM50%FATES_SICE_SOCN_MOSART_CISM2%NOEVOLVE_SWAV</lname>
</compset>
<compset>
<alias>I2000Clm50FatesCruGs</alias>
<lname>2000_DATM%CRUv7_CLM50%FATES_SICE_SOCN_MOSART_SGLC_SWAV</lname>
</compset>
<!-- Stub glacier needed for regional / single-point -->
<compset>
<alias>I2000Clm50FatesGs</alias>
<lname>2000_DATM%GSWP3v1_CLM50%FATES_SICE_SOCN_MOSART_SGLC_SWAV</lname>
</compset>
<compset>
<alias>I1850Clm50Bgc</alias>
<lname>1850_DATM%GSWP3v1_CLM50%BGC_SICE_SOCN_MOSART_CISM2%NOEVOLVE_SWAV</lname>
</compset>
<compset>
<alias>I1850Clm50BgcNoAnthro</alias>
<lname>1850_DATM%GSWP3v1_CLM50%BGC-NOANTHRO_SICE_SOCN_MOSART_CISM2%NOEVOLVE_SWAV</lname>
</compset>
<compset>
<alias>I1850Clm50SpNoAnthro</alias>
<lname>1850_DATM%GSWP3v1_CLM50%SP-NOANTHRO_SICE_SOCN_MOSART_CISM2%NOEVOLVE_SWAV</lname>
</compset>
<compset>
<alias>IHistClm50BgcCrop</alias>
<lname>HIST_DATM%GSWP3v1_CLM50%BGC-CROP_SICE_SOCN_MOSART_CISM2%NOEVOLVE_SWAV</lname>
<science_support grid="f09_g17"/>
<science_support grid="f19_g17"/>
</compset>
<compset>
<alias>IHistClm50Sp</alias>
<lname>HIST_DATM%GSWP3v1_CLM50%SP_SICE_SOCN_MOSART_CISM2%NOEVOLVE_SWAV</lname>
<science_support grid="f09_g17"/>
<science_support grid="f19_g17"/>
</compset>
<compset>
<alias>IHistClm50SpCru</alias>
<lname>HIST_DATM%CRUv7_CLM50%SP_SICE_SOCN_MOSART_CISM2%NOEVOLVE_SWAV</lname>
<science_support grid="f09_g17"/>
<science_support grid="f19_g17"/>
</compset>
<compset>
<alias>IHistClm50Bgc</alias>
<lname>HIST_DATM%GSWP3v1_CLM50%BGC_SICE_SOCN_MOSART_CISM2%NOEVOLVE_SWAV</lname>
</compset>
<!-- Primarily for testing (stub glc needed for single-point tests); uses Qian
atmospheric forcing simply to give faster datm throughput, which is
particularly relevant for single-point cases (where datm dominates the
runtime) -->
<compset>
<alias>IHistClm50BgcQianGs</alias>
<lname>HIST_DATM%QIA_CLM50%BGC_SICE_SOCN_MOSART_SGLC_SWAV</lname>
</compset>
<!-- Primarily for testing (stub glc needed for single-point tests); uses Qian
atmospheric forcing simply to give faster datm throughput, which is
particularly relevant for single-point cases (where datm dominates the
runtime) -->
<compset>
<alias>IHistClm50BgcCropQianGs</alias>
<lname>HIST_DATM%QIA_CLM50%BGC-CROP_SICE_SOCN_MOSART_SGLC_SWAV</lname>
</compset>
<!-- Primarily for testing (stub glc needed for single-point tests) -->
<compset>
<alias>IHistClm50BgcCropGs</alias>
<lname>HIST_DATM%GSWP3v1_CLM50%BGC-CROP_SICE_SOCN_MOSART_SGLC_SWAV</lname>
</compset>
<!-- Primarily for testing, not entirely sure this configure works -->
<compset>
<alias>I2000Clm50BgcDvCrop</alias>
<lname>2000_DATM%GSWP3v1_CLM50%BGCDV-CROP_SICE_SOCN_MOSART_CISM2%NOEVOLVE_SWAV</lname>
</compset>
<!-- Primarily for testing; uses Qian atmospheric forcing simply to give
faster datm throughput, which is particularly relevant for single-point
cases (where datm dominates the runtime) -->
<compset>
<alias>I2000Clm50BgcDvCropQianGs</alias>
<lname>2000_DATM%QIA_CLM50%BGCDV-CROP_SICE_SOCN_MOSART_SGLC_SWAV</lname>
</compset>
<!-- I cpl history MOAR forcing spinup compsets -->
<compset>
<alias>I1850Clm50BgcSpinup</alias>
<lname>1850_DATM%CPLHIST_CLM50%BGC_SICE_SOCN_MOSART_CISM2%NOEVOLVE_SWAV</lname>
</compset>
<!-- Future scenario compsets -->
<compset>
<alias>ISSP585Clm50BgcCrop</alias>
<lname>SSP585_DATM%GSWP3v1_CLM50%BGC-CROP_SICE_SOCN_MOSART_CISM2%NOEVOLVE_SWAV</lname>
</compset>
<compset>
<alias>ISSP126Clm50BgcCrop</alias>
<lname>SSP126_DATM%GSWP3v1_CLM50%BGC-CROP_SICE_SOCN_MOSART_CISM2%NOEVOLVE_SWAV</lname>
</compset>
<compset>
<alias>ISSP119Clm50BgcCrop</alias>
<lname>SSP119_DATM%GSWP3v1_CLM50%BGC-CROP_SICE_SOCN_MOSART_CISM2%NOEVOLVE_SWAV</lname>
</compset>
<compset>
<alias>ISSP245Clm50BgcCrop</alias>
<lname>SSP245_DATM%GSWP3v1_CLM50%BGC-CROP_SICE_SOCN_MOSART_CISM2%NOEVOLVE_SWAV</lname>
</compset>
<compset>
<alias>ISSP370Clm50BgcCrop</alias>
<lname>SSP370_DATM%GSWP3v1_CLM50%BGC-CROP_SICE_SOCN_MOSART_CISM2%NOEVOLVE_SWAV</lname>
</compset>
<compset>
<alias>ISSP434Clm50BgcCrop</alias>
<lname>SSP434_DATM%GSWP3v1_CLM50%BGC-CROP_SICE_SOCN_MOSART_CISM2%NOEVOLVE_SWAV</lname>
</compset>
<compset>
<alias>ISSP460Clm50BgcCrop</alias>
<lname>SSP460_DATM%GSWP3v1_CLM50%BGC-CROP_SICE_SOCN_MOSART_CISM2%NOEVOLVE_SWAV</lname>
</compset>
<compset>
<alias>ISSP534Clm50BgcCrop</alias>
<lname>SSP534_DATM%GSWP3v1_CLM50%BGC-CROP_SICE_SOCN_MOSART_CISM2%NOEVOLVE_SWAV</lname>
</compset>
<!-- Future scenario compset - extensions -->
<compset>
<alias>ISSP585ExtClm50BgcCrop</alias>
<lname>SSP585EXT_DATM%GSWP3v1_CLM50%BGC-CROP_SICE_SOCN_MOSART_CISM2%NOEVOLVE_SWAV</lname>
</compset>
<compset>
<alias>ISSP534ExtClm50BgcCrop</alias>
<lname>SSP534EXT_DATM%GSWP3v1_CLM50%BGC-CROP_SICE_SOCN_MOSART_CISM2%NOEVOLVE_SWAV</lname>
</compset>
<compset>
<alias>ISSP126ExtClm50BgcCrop</alias>
<lname>SSP126EXT_DATM%GSWP3v1_CLM50%BGC-CROP_SICE_SOCN_MOSART_CISM2%NOEVOLVE_SWAV</lname>
</compset>
<compset>
<alias>ISSP370ExtClm50BgcCrop</alias>
<lname>SSP370EXT_DATM%GSWP3v1_CLM50%BGC-CROP_SICE_SOCN_MOSART_CISM2%NOEVOLVE_SWAV</lname>
</compset>
<!-- I CLM45 Compsets -->
<compset>
<alias>I1850Clm45BgcCrop</alias>
<lname>1850_DATM%GSWP3v1_CLM45%BGC-CROP_SICE_SOCN_RTM_CISM2%NOEVOLVE_SWAV</lname>
</compset>
<compset>
<alias>I1850Clm45BgcCruGs</alias>
<lname>1850_DATM%CRUv7_CLM45%BGC_SICE_SOCN_RTM_SGLC_SWAV</lname>
<science_support grid="f09_g17"/>
<science_support grid="f19_g17"/>
</compset>
<!-- Primarily for testing -->
<compset>
<alias>IHistClm45BgcCrop</alias>
<lname>HIST_DATM%GSWP3v1_CLM45%BGC-CROP_SICE_SOCN_RTM_CISM2%NOEVOLVE_SWAV</lname>
</compset>
<!-- Primarily for testing; uses Qian atmospheric forcing simply to give
faster datm throughput, which is particularly relevant for single-point
cases (where datm dominates the runtime) -->
<compset>
<alias>IHistClm45BgcCropQianGs</alias>
<lname>HIST_DATM%QIA_CLM45%BGC-CROP_SICE_SOCN_RTM_SGLC_SWAV</lname>
</compset>
<compset>
<alias>I2000Clm45Sp</alias>
<lname>2000_DATM%GSWP3v1_CLM45%SP_SICE_SOCN_RTM_CISM2%NOEVOLVE_SWAV</lname>
</compset>
<compset>
<alias>I2000Clm45BgcCrop</alias>
<lname>2000_DATM%GSWP3v1_CLM45%BGC-CROP_SICE_SOCN_RTM_CISM2%NOEVOLVE_SWAV</lname>
</compset>
<compset>
<alias>I2000Clm45Fates</alias>
<lname>2000_DATM%GSWP3v1_CLM45%FATES_SICE_SOCN_RTM_CISM2%NOEVOLVE_SWAV</lname>
</compset>
<!-- Stub glacier needed for regional / single-point -->
<compset>
<alias>I2000Clm45FatesGs</alias>
<lname>2000_DATM%GSWP3v1_CLM45%FATES_SICE_SOCN_RTM_SGLC_SWAV</lname>
</compset>
<compset>
<alias>I1850Clm45Cn</alias>
<lname>1850_DATM%GSWP3v1_CLM45%CN_SICE_SOCN_RTM_CISM2%NOEVOLVE_SWAV</lname>
</compset>
<compset>
<alias>I1850Clm45Bgc</alias>
<lname>1850_DATM%GSWP3v1_CLM45%BGC_SICE_SOCN_RTM_CISM2%NOEVOLVE_SWAV</lname>
</compset>
<compset>
<alias>I1850Clm45BgcGs</alias>
<lname>1850_DATM%GSWP3v1_CLM45%BGC_SICE_SOCN_RTM_SGLC_SWAV</lname>
<science_support grid="f09_g17"/>
<science_support grid="f19_g17"/>
</compset>
<compset>
<alias>I1850Clm45BgcCru</alias>
<lname>1850_DATM%CRUv7_CLM45%BGC_SICE_SOCN_RTM_CISM2%NOEVOLVE_SWAV</lname>
</compset>
<compset>
<alias>IHistClm45Bgc</alias>
<lname>HIST_DATM%GSWP3v1_CLM45%BGC_SICE_SOCN_RTM_CISM2%NOEVOLVE_SWAV</lname>
</compset>
<compset>
<alias>IHistClm45BgcGs</alias>
<lname>HIST_DATM%GSWP3v1_CLM45%BGC_SICE_SOCN_RTM_SGLC_SWAV</lname>
<science_support grid="f09_g17"/>
<science_support grid="f19_g17"/>
</compset>
<compset>
<alias>IHistClm45BgcCruGs</alias>
<lname>HIST_DATM%CRUv7_CLM45%BGC_SICE_SOCN_RTM_SGLC_SWAV</lname>
<science_support grid="f09_g17"/>
<science_support grid="f19_g17"/>
</compset>
<compset>
<alias>IHistClm45SpGs</alias>
<lname>HIST_DATM%GSWP3v1_CLM45%SP_SICE_SOCN_RTM_SGLC_SWAV</lname>
<science_support grid="f09_g17"/>
<science_support grid="f19_g17"/>
</compset>
<!-- Primarily for testing -->
<compset>
<alias>I2000Clm50Vic</alias>
<lname>2000_DATM%GSWP3v1_CLM50%SP-VIC_SICE_SOCN_RTM_CISM2%NOEVOLVE_SWAV</lname>
</compset>
<compset>
<alias>I2000Clm45VicCru</alias>
<lname>2000_DATM%CRUv7_CLM45%SP-VIC_SICE_SOCN_RTM_CISM2%NOEVOLVE_SWAV</lname>
</compset>
<!-- IG compsets -->
<compset>
<alias>I1850Clm50SpG</alias>
<lname>1850_DATM%GSWP3v1_CLM50%SP_SICE_SOCN_MOSART_CISM2%EVOLVE_SWAV</lname>
</compset>
<compset>
<alias>IHistClm50SpG</alias>
<lname>HIST_DATM%GSWP3v1_CLM50%SP_SICE_SOCN_MOSART_CISM2%EVOLVE_SWAV</lname>
</compset>
<compset>
<alias>I1850Clm50BgcCropG</alias>
<lname>1850_DATM%GSWP3v1_CLM50%BGC-CROP_SICE_SOCN_MOSART_CISM2%EVOLVE_SWAV</lname>
</compset>
<compset>
<alias>IHistClm50BgcCropG</alias>
<lname>HIST_DATM%GSWP3v1_CLM50%BGC-CROP_SICE_SOCN_MOSART_CISM2%EVOLVE_SWAV</lname>
</compset>
<!-- CLM 4.0 -->
<compset>
<alias>I2000Clm40SpCruGs</alias>
<lname>2000_DATM%CRUv7_CLM40%SP_SICE_SOCN_RTM_SGLC_SWAV</lname>
</compset>
<compset>
<alias>I1850Clm40SpCruGs</alias>
<lname>1850_DATM%CRUv7_CLM40%SP_SICE_SOCN_RTM_SGLC_SWAV</lname>
<science_support grid="f09_g17"/>
<science_support grid="f19_g17"/>
</compset>
<compset>
<alias>I1850Clm40SpGswGs</alias>
<lname>1850_DATM%GSWP3v1_CLM40%SP_SICE_SOCN_RTM_SGLC_SWAV</lname>
<science_support grid="f09_g17"/>
<science_support grid="f19_g17"/>
</compset>
<compset>
<alias>I1850Clm40CnGswGs</alias>
<lname>1850_DATM%GSWP3v1_CLM40%CN_SICE_SOCN_RTM_SGLC_SWAV</lname>
<science_support grid="f09_g17"/>
<science_support grid="f19_g17"/>
</compset>
<compset>
<alias>IHistClm40SpGswGs</alias>
<lname>HIST_DATM%GSWP3v1_CLM40%SP_SICE_SOCN_RTM_SGLC_SWAV</lname>
<science_support grid="f09_g17"/>
<science_support grid="f19_g17"/>
</compset>
<compset>
<alias>IHistClm40SpCruGs</alias>
<lname>HIST_DATM%CRUv7_CLM40%SP_SICE_SOCN_RTM_SGLC_SWAV</lname>
</compset>
<compset>
<alias>IHistClm40CnGswGs</alias>
<lname>HIST_DATM%GSWP3v1_CLM40%CN_SICE_SOCN_RTM_SGLC_SWAV</lname>
<science_support grid="f09_g17"/>
<science_support grid="f19_g17"/>
</compset>
<compset>
<alias>IHistClm40CnCruGs</alias>
<lname>HIST_DATM%CRUv7_CLM40%CN_SICE_SOCN_RTM_SGLC_SWAV</lname>
<science_support grid="f09_g17"/>
<science_support grid="f19_g17"/>
</compset>
<!-- changes to driver xml variables - in case of a tie in the values matches the last match is taken -->
<entries>
<entry id="RUN_STARTDATE">
<values match="last">
<value compset="HIST_" >1850-01-01</value>
<value compset="SSP" >2015-01-01</value>
<value compset="SSP[0-9]+EXT" >2101-01-01</value>
<value compset="CLM[45].*_CISM.*_TEST" >1980-01-15</value>
<value compset="CLM[45]%[^_]*CNDV.*_TEST" >1997-12-31</value>
<value grid="a%1x1_mexicocityMEX" >1993-12-01</value>
<value grid="a%1x1_vancouverCAN" >1992-08-12</value>
<value grid="a%1x1_urbanc_alpha" >0001-08-12</value>
</values>
</entry>
<entry id="STOP_OPTION">
<values>
<value grid="a%1x1_mexicocityMEX">nsteps</value>
<value grid="a%1x1_vancouverCAN" >nsteps</value>
<value grid="a%1x1_urbanc_alpha" >nsteps</value>
</values>
</entry>
<entry id="STOP_N">
<values>
<value grid="a%1x1_mexicocityMEX">158</value>
<value grid="a%1x1_vancouverCAN" >331</value>
<value grid="a%1x1_urbanc_alpha" >22772</value>
</values>
</entry>
</entries>
</compsets>

987
cime_config/config_pes.xml Normal file
View File

@ -0,0 +1,987 @@
<?xml version="1.0"?>
<config_pes>
<grid name="any">
<mach name="any">
<pes pesize="any" compset="any">
<comment>none</comment>
<ntasks>
<ntasks_atm>-1</ntasks_atm>
<ntasks_lnd>-1</ntasks_lnd>
<ntasks_rof>-1</ntasks_rof>
<ntasks_ice>-1</ntasks_ice>
<ntasks_ocn>-1</ntasks_ocn>
<ntasks_glc>-1</ntasks_glc>
<ntasks_wav>-1</ntasks_wav>
<ntasks_cpl>-1</ntasks_cpl>
</ntasks>
<nthrds>
<nthrds_atm>1</nthrds_atm>
<nthrds_lnd>1</nthrds_lnd>
<nthrds_rof>1</nthrds_rof>
<nthrds_ice>1</nthrds_ice>
<nthrds_ocn>1</nthrds_ocn>
<nthrds_glc>1</nthrds_glc>
<nthrds_wav>1</nthrds_wav>
<nthrds_cpl>1</nthrds_cpl>
</nthrds>
<rootpe>
<rootpe_atm>0</rootpe_atm>
<rootpe_lnd>0</rootpe_lnd>
<rootpe_rof>0</rootpe_rof>
<rootpe_ice>0</rootpe_ice>
<rootpe_ocn>0</rootpe_ocn>
<rootpe_glc>0</rootpe_glc>
<rootpe_wav>0</rootpe_wav>
<rootpe_cpl>0</rootpe_cpl>
</rootpe>
</pes>
</mach>
</grid>
<grid name="l%4x5">
<mach name="pleiades-ivy">
<pes pesize="any" compset="any">
<comment>none</comment>
<ntasks>
<ntasks_atm>-1</ntasks_atm>
<ntasks_lnd>-9</ntasks_lnd>
<ntasks_rof>-9</ntasks_rof>
<ntasks_ice>-9</ntasks_ice>
<ntasks_ocn>-9</ntasks_ocn>
<ntasks_glc>-9</ntasks_glc>
<ntasks_wav>-9</ntasks_wav>
<ntasks_cpl>-9</ntasks_cpl>
</ntasks>
<nthrds>
<nthrds_atm>1</nthrds_atm>
<nthrds_lnd>1</nthrds_lnd>
<nthrds_rof>1</nthrds_rof>
<nthrds_ice>1</nthrds_ice>
<nthrds_ocn>1</nthrds_ocn>
<nthrds_glc>1</nthrds_glc>
<nthrds_wav>1</nthrds_wav>
<nthrds_cpl>1</nthrds_cpl>
</nthrds>
<rootpe>
<rootpe_atm>0</rootpe_atm>
<rootpe_lnd>-1</rootpe_lnd>
<rootpe_rof>-1</rootpe_rof>
<rootpe_ice>-1</rootpe_ice>
<rootpe_ocn>-1</rootpe_ocn>
<rootpe_glc>-1</rootpe_glc>
<rootpe_wav>-1</rootpe_wav>
<rootpe_cpl>-1</rootpe_cpl>
</rootpe>
</pes>
</mach>
</grid>
<grid name="l%4x5">
<mach name="cheyenne">
<pes pesize="any" compset="any">
<comment>none</comment>
<ntasks>
<ntasks_atm>-1</ntasks_atm>
<ntasks_lnd>-4</ntasks_lnd>
<ntasks_rof>-4</ntasks_rof>
<ntasks_ice>-4</ntasks_ice>
<ntasks_ocn>-4</ntasks_ocn>
<ntasks_glc>-4</ntasks_glc>
<ntasks_wav>-4</ntasks_wav>
<ntasks_cpl>-4</ntasks_cpl>
</ntasks>
<nthrds>
<nthrds_atm>1</nthrds_atm>
<nthrds_lnd>1</nthrds_lnd>
<nthrds_rof>1</nthrds_rof>
<nthrds_ice>1</nthrds_ice>
<nthrds_ocn>1</nthrds_ocn>
<nthrds_glc>1</nthrds_glc>
<nthrds_wav>1</nthrds_wav>
<nthrds_cpl>1</nthrds_cpl>
</nthrds>
<rootpe>
<rootpe_atm>0</rootpe_atm>
<rootpe_lnd>-1</rootpe_lnd>
<rootpe_rof>-1</rootpe_rof>
<rootpe_ice>-1</rootpe_ice>
<rootpe_ocn>-1</rootpe_ocn>
<rootpe_glc>-1</rootpe_glc>
<rootpe_wav>-1</rootpe_wav>
<rootpe_cpl>-1</rootpe_cpl>
</rootpe>
</pes>
</mach>
</grid>
<grid name="l%4x5">
<mach name="derecho">
<pes pesize="any" compset="any">
<comment>none</comment>
<ntasks>
<ntasks_atm>-1</ntasks_atm>
<ntasks_lnd>-1</ntasks_lnd>
<ntasks_rof>-1</ntasks_rof>
<ntasks_ice>-1</ntasks_ice>
<ntasks_ocn>-1</ntasks_ocn>
<ntasks_glc>-1</ntasks_glc>
<ntasks_wav>-1</ntasks_wav>
<ntasks_cpl>-1</ntasks_cpl>
</ntasks>
<nthrds>
<nthrds_atm>1</nthrds_atm>
<nthrds_lnd>1</nthrds_lnd>
<nthrds_rof>1</nthrds_rof>
<nthrds_ice>1</nthrds_ice>
<nthrds_ocn>1</nthrds_ocn>
<nthrds_glc>1</nthrds_glc>
<nthrds_wav>1</nthrds_wav>
<nthrds_cpl>1</nthrds_cpl>
</nthrds>
<rootpe>
<rootpe_atm>0</rootpe_atm>
<rootpe_lnd>-1</rootpe_lnd>
<rootpe_rof>-1</rootpe_rof>
<rootpe_ice>-1</rootpe_ice>
<rootpe_ocn>-1</rootpe_ocn>
<rootpe_glc>-1</rootpe_glc>
<rootpe_wav>-1</rootpe_wav>
<rootpe_cpl>-1</rootpe_cpl>
</rootpe>
</pes>
</mach>
</grid>
<grid name="l%1.9x2.5">
<mach name="any">
<pes pesize="any" compset="any">
<comment>none</comment>
<ntasks>
<ntasks_atm>-2</ntasks_atm>
<ntasks_lnd>-2</ntasks_lnd>
<ntasks_rof>-2</ntasks_rof>
<ntasks_ice>-2</ntasks_ice>
<ntasks_ocn>-2</ntasks_ocn>
<ntasks_glc>-2</ntasks_glc>
<ntasks_wav>-2</ntasks_wav>
<ntasks_cpl>-2</ntasks_cpl>
</ntasks>
<nthrds>
<nthrds_atm>1</nthrds_atm>
<nthrds_lnd>1</nthrds_lnd>
<nthrds_rof>1</nthrds_rof>
<nthrds_ice>1</nthrds_ice>
<nthrds_ocn>1</nthrds_ocn>
<nthrds_glc>1</nthrds_glc>
<nthrds_wav>1</nthrds_wav>
<nthrds_cpl>1</nthrds_cpl>
</nthrds>
<rootpe>
<rootpe_atm>0</rootpe_atm>
<rootpe_lnd>0</rootpe_lnd>
<rootpe_rof>0</rootpe_rof>
<rootpe_ice>0</rootpe_ice>
<rootpe_ocn>0</rootpe_ocn>
<rootpe_glc>0</rootpe_glc>
<rootpe_wav>0</rootpe_wav>
<rootpe_cpl>0</rootpe_cpl>
</rootpe>
</pes>
</mach>
</grid>
<grid name="l%1.9x2.5">
<mach name="pleiades-ivy">
<pes pesize="any" compset="any">
<comment>none</comment>
<ntasks>
<ntasks_atm>180</ntasks_atm>
<ntasks_lnd>180</ntasks_lnd>
<ntasks_rof>180</ntasks_rof>
<ntasks_ice>180</ntasks_ice>
<ntasks_ocn>180</ntasks_ocn>
<ntasks_glc>180</ntasks_glc>
<ntasks_wav>180</ntasks_wav>
<ntasks_cpl>180</ntasks_cpl>
</ntasks>
<nthrds>
<nthrds_atm>1</nthrds_atm>
<nthrds_lnd>1</nthrds_lnd>
<nthrds_rof>1</nthrds_rof>
<nthrds_ice>1</nthrds_ice>
<nthrds_ocn>1</nthrds_ocn>
<nthrds_glc>1</nthrds_glc>
<nthrds_wav>1</nthrds_wav>
<nthrds_cpl>1</nthrds_cpl>
</nthrds>
<rootpe>
<rootpe_atm>0</rootpe_atm>
<rootpe_lnd>0</rootpe_lnd>
<rootpe_rof>0</rootpe_rof>
<rootpe_ice>0</rootpe_ice>
<rootpe_ocn>0</rootpe_ocn>
<rootpe_glc>0</rootpe_glc>
<rootpe_wav>0</rootpe_wav>
<rootpe_cpl>0</rootpe_cpl>
</rootpe>
</pes>
</mach>
</grid>
<grid name="l%1.9x2.5">
<mach name="cheyenne">
<pes pesize="any" compset="any">
<comment>none</comment>
<ntasks>
<ntasks_atm>-1</ntasks_atm>
<ntasks_lnd>-40</ntasks_lnd>
<ntasks_rof>-40</ntasks_rof>
<ntasks_ice>-40</ntasks_ice>
<ntasks_ocn>-40</ntasks_ocn>
<ntasks_glc>-40</ntasks_glc>
<ntasks_wav>-40</ntasks_wav>
<ntasks_cpl>-40</ntasks_cpl>
</ntasks>
<nthrds>
<nthrds_atm>1</nthrds_atm>
<nthrds_lnd>1</nthrds_lnd>
<nthrds_rof>1</nthrds_rof>
<nthrds_ice>1</nthrds_ice>
<nthrds_ocn>1</nthrds_ocn>
<nthrds_glc>1</nthrds_glc>
<nthrds_wav>1</nthrds_wav>
<nthrds_cpl>1</nthrds_cpl>
</nthrds>
<rootpe>
<rootpe_atm>0</rootpe_atm>
<rootpe_lnd>-1</rootpe_lnd>
<rootpe_rof>-1</rootpe_rof>
<rootpe_ice>-1</rootpe_ice>
<rootpe_ocn>-1</rootpe_ocn>
<rootpe_glc>-1</rootpe_glc>
<rootpe_wav>-1</rootpe_wav>
<rootpe_cpl>-1</rootpe_cpl>
</rootpe>
</pes>
</mach>
</grid>
<grid name="l%1.9x2.5">
<mach name="derecho">
<pes pesize="any" compset="any">
<comment>none</comment>
<ntasks>
<ntasks_atm>-1</ntasks_atm>
<ntasks_lnd>-12</ntasks_lnd>
<ntasks_rof>-12</ntasks_rof>
<ntasks_ice>-12</ntasks_ice>
<ntasks_ocn>-12</ntasks_ocn>
<ntasks_glc>-12</ntasks_glc>
<ntasks_wav>-12</ntasks_wav>
<ntasks_cpl>-12</ntasks_cpl>
</ntasks>
<nthrds>
<nthrds_atm>1</nthrds_atm>
<nthrds_lnd>1</nthrds_lnd>
<nthrds_rof>1</nthrds_rof>
<nthrds_ice>1</nthrds_ice>
<nthrds_ocn>1</nthrds_ocn>
<nthrds_glc>1</nthrds_glc>
<nthrds_wav>1</nthrds_wav>
<nthrds_cpl>1</nthrds_cpl>
</nthrds>
<rootpe>
<rootpe_atm>0</rootpe_atm>
<rootpe_lnd>-1</rootpe_lnd>
<rootpe_rof>-1</rootpe_rof>
<rootpe_ice>-1</rootpe_ice>
<rootpe_ocn>-1</rootpe_ocn>
<rootpe_glc>-1</rootpe_glc>
<rootpe_wav>-1</rootpe_wav>
<rootpe_cpl>-1</rootpe_cpl>
</rootpe>
</pes>
</mach>
</grid>
<grid name="l%1.9x2.5">
<mach name="hobart|izumi">
<pes pesize="any" compset="any">
<comment>none</comment>
<ntasks>
<ntasks_atm>-1</ntasks_atm>
<ntasks_lnd>-11</ntasks_lnd>
<ntasks_rof>-11</ntasks_rof>
<ntasks_ice>-11</ntasks_ice>
<ntasks_ocn>-11</ntasks_ocn>
<ntasks_glc>-11</ntasks_glc>
<ntasks_wav>-11</ntasks_wav>
<ntasks_cpl>-11</ntasks_cpl>
</ntasks>
<nthrds>
<nthrds_atm>1</nthrds_atm>
<nthrds_lnd>1</nthrds_lnd>
<nthrds_rof>1</nthrds_rof>
<nthrds_ice>1</nthrds_ice>
<nthrds_ocn>1</nthrds_ocn>
<nthrds_glc>1</nthrds_glc>
<nthrds_wav>1</nthrds_wav>
<nthrds_cpl>1</nthrds_cpl>
</nthrds>
<rootpe>
<rootpe_atm>0</rootpe_atm>
<rootpe_lnd>-1</rootpe_lnd>
<rootpe_rof>-1</rootpe_rof>
<rootpe_ice>-1</rootpe_ice>
<rootpe_ocn>-1</rootpe_ocn>
<rootpe_glc>-1</rootpe_glc>
<rootpe_wav>-1</rootpe_wav>
<rootpe_cpl>-1</rootpe_cpl>
</rootpe>
</pes>
</mach>
</grid>
<grid name="l%0.9x1.25">
<mach name="any">
<pes pesize="any" compset="any">
<comment>none</comment>
<ntasks>
<ntasks_atm>-4</ntasks_atm>
<ntasks_lnd>-4</ntasks_lnd>
<ntasks_rof>-4</ntasks_rof>
<ntasks_ice>-4</ntasks_ice>
<ntasks_ocn>-4</ntasks_ocn>
<ntasks_glc>-4</ntasks_glc>
<ntasks_wav>-4</ntasks_wav>
<ntasks_cpl>-4</ntasks_cpl>
</ntasks>
<nthrds>
<nthrds_atm>1</nthrds_atm>
<nthrds_lnd>1</nthrds_lnd>
<nthrds_rof>1</nthrds_rof>
<nthrds_ice>1</nthrds_ice>
<nthrds_ocn>1</nthrds_ocn>
<nthrds_glc>1</nthrds_glc>
<nthrds_wav>1</nthrds_wav>
<nthrds_cpl>1</nthrds_cpl>
</nthrds>
<rootpe>
<rootpe_atm>0</rootpe_atm>
<rootpe_lnd>0</rootpe_lnd>
<rootpe_rof>0</rootpe_rof>
<rootpe_ice>0</rootpe_ice>
<rootpe_ocn>0</rootpe_ocn>
<rootpe_glc>0</rootpe_glc>
<rootpe_wav>0</rootpe_wav>
<rootpe_cpl>0</rootpe_cpl>
</rootpe>
</pes>
</mach>
</grid>
<grid name="l%0.9x1.25">
<mach name="cheyenne">
<pes pesize="any" compset="any">
<comment>none</comment>
<ntasks>
<ntasks_atm>-1</ntasks_atm>
<ntasks_lnd>-50</ntasks_lnd>
<ntasks_rof>-50</ntasks_rof>
<ntasks_ice>-50</ntasks_ice>
<ntasks_ocn>-50</ntasks_ocn>
<ntasks_glc>-50</ntasks_glc>
<ntasks_wav>-50</ntasks_wav>
<ntasks_cpl>-50</ntasks_cpl>
</ntasks>
<nthrds>
<nthrds_atm>1</nthrds_atm>
<nthrds_lnd>1</nthrds_lnd>
<nthrds_rof>1</nthrds_rof>
<nthrds_ice>1</nthrds_ice>
<nthrds_ocn>1</nthrds_ocn>
<nthrds_glc>1</nthrds_glc>
<nthrds_wav>1</nthrds_wav>
<nthrds_cpl>1</nthrds_cpl>
</nthrds>
<rootpe>
<rootpe_atm>0</rootpe_atm>
<rootpe_lnd>-1</rootpe_lnd>
<rootpe_rof>-1</rootpe_rof>
<rootpe_ice>-1</rootpe_ice>
<rootpe_ocn>-1</rootpe_ocn>
<rootpe_glc>-1</rootpe_glc>
<rootpe_wav>-1</rootpe_wav>
<rootpe_cpl>-1</rootpe_cpl>
</rootpe>
</pes>
</mach>
</grid>
<grid name="l%0.9x1.25">
<mach name="derecho">
<pes pesize="any" compset="any">
<comment>none</comment>
<ntasks>
<ntasks_atm>-1</ntasks_atm>
<ntasks_lnd>-14</ntasks_lnd>
<ntasks_rof>-14</ntasks_rof>
<ntasks_ice>-14</ntasks_ice>
<ntasks_ocn>-14</ntasks_ocn>
<ntasks_glc>-14</ntasks_glc>
<ntasks_wav>-14</ntasks_wav>
<ntasks_cpl>-14</ntasks_cpl>
</ntasks>
<nthrds>
<nthrds_atm>1</nthrds_atm>
<nthrds_lnd>1</nthrds_lnd>
<nthrds_rof>1</nthrds_rof>
<nthrds_ice>1</nthrds_ice>
<nthrds_ocn>1</nthrds_ocn>
<nthrds_glc>1</nthrds_glc>
<nthrds_wav>1</nthrds_wav>
<nthrds_cpl>1</nthrds_cpl>
</nthrds>
<rootpe>
<rootpe_atm>0</rootpe_atm>
<rootpe_lnd>-1</rootpe_lnd>
<rootpe_rof>-1</rootpe_rof>
<rootpe_ice>-1</rootpe_ice>
<rootpe_ocn>-1</rootpe_ocn>
<rootpe_glc>-1</rootpe_glc>
<rootpe_wav>-1</rootpe_wav>
<rootpe_cpl>-1</rootpe_cpl>
</rootpe>
</pes>
</mach>
</grid>
<grid name="l%0.9x1.25">
<mach name="hobart|izumi">
<pes pesize="any" compset="any">
<comment>none</comment>
<ntasks>
<ntasks_atm>-1</ntasks_atm>
<ntasks_lnd>-11</ntasks_lnd>
<ntasks_rof>-11</ntasks_rof>
<ntasks_ice>-11</ntasks_ice>
<ntasks_ocn>-11</ntasks_ocn>
<ntasks_glc>-11</ntasks_glc>
<ntasks_wav>-11</ntasks_wav>
<ntasks_cpl>-11</ntasks_cpl>
</ntasks>
<nthrds>
<nthrds_atm>1</nthrds_atm>
<nthrds_lnd>1</nthrds_lnd>
<nthrds_rof>1</nthrds_rof>
<nthrds_ice>1</nthrds_ice>
<nthrds_ocn>1</nthrds_ocn>
<nthrds_glc>1</nthrds_glc>
<nthrds_wav>1</nthrds_wav>
<nthrds_cpl>1</nthrds_cpl>
</nthrds>
<rootpe>
<rootpe_atm>0</rootpe_atm>
<rootpe_lnd>-1</rootpe_lnd>
<rootpe_rof>-1</rootpe_rof>
<rootpe_ice>-1</rootpe_ice>
<rootpe_ocn>-1</rootpe_ocn>
<rootpe_glc>-1</rootpe_glc>
<rootpe_wav>-1</rootpe_wav>
<rootpe_cpl>-1</rootpe_cpl>
</rootpe>
</pes>
</mach>
</grid>
<grid name="l%0.47x0.63" >
<mach name="any">
<pes pesize="any" compset="any">
<comment>none</comment>
<ntasks>
<ntasks_atm>-8</ntasks_atm>
<ntasks_lnd>-8</ntasks_lnd>
<ntasks_rof>-8</ntasks_rof>
<ntasks_ice>-8</ntasks_ice>
<ntasks_ocn>-8</ntasks_ocn>
<ntasks_glc>-8</ntasks_glc>
<ntasks_wav>-8</ntasks_wav>
<ntasks_cpl>-8</ntasks_cpl>
</ntasks>
<nthrds>
<nthrds_atm>1</nthrds_atm>
<nthrds_lnd>1</nthrds_lnd>
<nthrds_rof>1</nthrds_rof>
<nthrds_ice>1</nthrds_ice>
<nthrds_ocn>1</nthrds_ocn>
<nthrds_glc>1</nthrds_glc>
<nthrds_wav>1</nthrds_wav>
<nthrds_cpl>1</nthrds_cpl>
</nthrds>
<rootpe>
<rootpe_atm>0</rootpe_atm>
<rootpe_lnd>0</rootpe_lnd>
<rootpe_rof>0</rootpe_rof>
<rootpe_ice>0</rootpe_ice>
<rootpe_ocn>0</rootpe_ocn>
<rootpe_glc>0</rootpe_glc>
<rootpe_wav>0</rootpe_wav>
<rootpe_cpl>0</rootpe_cpl>
</rootpe>
</pes>
</mach>
</grid>
<grid name="l%0.23x0.31" >
<mach name="any">
<pes pesize="any" compset="any">
<comment>none</comment>
<ntasks>
<ntasks_atm>-16</ntasks_atm>
<ntasks_lnd>-16</ntasks_lnd>
<ntasks_rof>-16</ntasks_rof>
<ntasks_ice>-16</ntasks_ice>
<ntasks_ocn>-16</ntasks_ocn>
<ntasks_glc>-16</ntasks_glc>
<ntasks_wav>-16</ntasks_wav>
<ntasks_cpl>-16</ntasks_cpl>
</ntasks>
<nthrds>
<nthrds_atm>1</nthrds_atm>
<nthrds_lnd>1</nthrds_lnd>
<nthrds_rof>1</nthrds_rof>
<nthrds_ice>1</nthrds_ice>
<nthrds_ocn>1</nthrds_ocn>
<nthrds_glc>1</nthrds_glc>
<nthrds_wav>1</nthrds_wav>
<nthrds_cpl>1</nthrds_cpl>
</nthrds>
<rootpe>
<rootpe_atm>0</rootpe_atm>
<rootpe_lnd>0</rootpe_lnd>
<rootpe_rof>0</rootpe_rof>
<rootpe_ice>0</rootpe_ice>
<rootpe_ocn>0</rootpe_ocn>
<rootpe_glc>0</rootpe_glc>
<rootpe_wav>0</rootpe_wav>
<rootpe_cpl>0</rootpe_cpl>
</rootpe>
</pes>
</mach>
</grid>
<grid name="l%ne30" >
<mach name="any">
<pes pesize="any" compset="any">
<comment>none</comment>
<ntasks>
<ntasks_atm>-4</ntasks_atm>
<ntasks_lnd>-4</ntasks_lnd>
<ntasks_rof>-4</ntasks_rof>
<ntasks_ice>-4</ntasks_ice>
<ntasks_ocn>-4</ntasks_ocn>
<ntasks_glc>-4</ntasks_glc>
<ntasks_wav>-4</ntasks_wav>
<ntasks_cpl>-4</ntasks_cpl>
</ntasks>
<nthrds>
<nthrds_atm>1</nthrds_atm>
<nthrds_lnd>1</nthrds_lnd>
<nthrds_rof>1</nthrds_rof>
<nthrds_ice>1</nthrds_ice>
<nthrds_ocn>1</nthrds_ocn>
<nthrds_glc>1</nthrds_glc>
<nthrds_wav>1</nthrds_wav>
<nthrds_cpl>1</nthrds_cpl>
</nthrds>
<rootpe>
<rootpe_atm>0</rootpe_atm>
<rootpe_lnd>0</rootpe_lnd>
<rootpe_rof>0</rootpe_rof>
<rootpe_ice>0</rootpe_ice>
<rootpe_ocn>0</rootpe_ocn>
<rootpe_glc>0</rootpe_glc>
<rootpe_wav>0</rootpe_wav>
<rootpe_cpl>0</rootpe_cpl>
</rootpe>
</pes>
</mach>
</grid>
<grid name="l%ne30" >
<mach name="derecho">
<pes pesize="any" compset="any">
<comment>none</comment>
<ntasks>
<ntasks_atm>-1</ntasks_atm>
<ntasks_lnd>-5</ntasks_lnd>
<ntasks_rof>-5</ntasks_rof>
<ntasks_ice>-5</ntasks_ice>
<ntasks_ocn>-5</ntasks_ocn>
<ntasks_glc>-5</ntasks_glc>
<ntasks_wav>-5</ntasks_wav>
<ntasks_cpl>-5</ntasks_cpl>
</ntasks>
<nthrds>
<nthrds_atm>1</nthrds_atm>
<nthrds_lnd>1</nthrds_lnd>
<nthrds_rof>1</nthrds_rof>
<nthrds_ice>1</nthrds_ice>
<nthrds_ocn>1</nthrds_ocn>
<nthrds_glc>1</nthrds_glc>
<nthrds_wav>1</nthrds_wav>
<nthrds_cpl>1</nthrds_cpl>
</nthrds>
<rootpe>
<rootpe_atm>0</rootpe_atm>
<rootpe_lnd>-1</rootpe_lnd>
<rootpe_rof>-1</rootpe_rof>
<rootpe_ice>-1</rootpe_ice>
<rootpe_ocn>-1</rootpe_ocn>
<rootpe_glc>-1</rootpe_glc>
<rootpe_wav>-1</rootpe_wav>
<rootpe_cpl>-1</rootpe_cpl>
</rootpe>
</pes>
</mach>
</grid>
<grid name="l%ne30" >
<mach name="cheyenne">
<pes pesize="any" compset="any">
<comment>none</comment>
<ntasks>
<ntasks_atm>-1</ntasks_atm>
<ntasks_lnd>-20</ntasks_lnd>
<ntasks_rof>-20</ntasks_rof>
<ntasks_ice>-20</ntasks_ice>
<ntasks_ocn>-20</ntasks_ocn>
<ntasks_glc>-20</ntasks_glc>
<ntasks_wav>-20</ntasks_wav>
<ntasks_cpl>-20</ntasks_cpl>
</ntasks>
<nthrds>
<nthrds_atm>1</nthrds_atm>
<nthrds_lnd>1</nthrds_lnd>
<nthrds_rof>1</nthrds_rof>
<nthrds_ice>1</nthrds_ice>
<nthrds_ocn>1</nthrds_ocn>
<nthrds_glc>1</nthrds_glc>
<nthrds_wav>1</nthrds_wav>
<nthrds_cpl>1</nthrds_cpl>
</nthrds>
<rootpe>
<rootpe_atm>0</rootpe_atm>
<rootpe_lnd>-1</rootpe_lnd>
<rootpe_rof>-1</rootpe_rof>
<rootpe_ice>-1</rootpe_ice>
<rootpe_ocn>-1</rootpe_ocn>
<rootpe_glc>-1</rootpe_glc>
<rootpe_wav>-1</rootpe_wav>
<rootpe_cpl>-1</rootpe_cpl>
</rootpe>
</pes>
</mach>
</grid>
<grid name="l%ne120">
<mach name="any">
<pes pesize="any" compset="any">
<comment>none</comment>
<ntasks>
<ntasks_atm>-16</ntasks_atm>
<ntasks_lnd>-16</ntasks_lnd>
<ntasks_rof>-16</ntasks_rof>
<ntasks_ice>-16</ntasks_ice>
<ntasks_ocn>-16</ntasks_ocn>
<ntasks_glc>-16</ntasks_glc>
<ntasks_wav>-16</ntasks_wav>
<ntasks_cpl>-16</ntasks_cpl>
</ntasks>
<nthrds>
<nthrds_atm>1</nthrds_atm>
<nthrds_lnd>1</nthrds_lnd>
<nthrds_rof>1</nthrds_rof>
<nthrds_ice>1</nthrds_ice>
<nthrds_ocn>1</nthrds_ocn>
<nthrds_glc>1</nthrds_glc>
<nthrds_wav>1</nthrds_wav>
<nthrds_cpl>1</nthrds_cpl>
</nthrds>
<rootpe>
<rootpe_atm>0</rootpe_atm>
<rootpe_lnd>0</rootpe_lnd>
<rootpe_rof>0</rootpe_rof>
<rootpe_ice>0</rootpe_ice>
<rootpe_ocn>0</rootpe_ocn>
<rootpe_glc>0</rootpe_glc>
<rootpe_wav>0</rootpe_wav>
<rootpe_cpl>0</rootpe_cpl>
</rootpe>
</pes>
</mach>
</grid>
<grid name="l%ne240">
<mach name="any">
<pes pesize="any" compset="any">
<comment>none</comment>
<ntasks>
<ntasks_atm>-32</ntasks_atm>
<ntasks_lnd>-32</ntasks_lnd>
<ntasks_rof>-32</ntasks_rof>
<ntasks_ice>-32</ntasks_ice>
<ntasks_ocn>-32</ntasks_ocn>
<ntasks_glc>-32</ntasks_glc>
<ntasks_wav>-32</ntasks_wav>
<ntasks_cpl>-32</ntasks_cpl>
</ntasks>
<nthrds>
<nthrds_atm>1</nthrds_atm>
<nthrds_lnd>1</nthrds_lnd>
<nthrds_rof>1</nthrds_rof>
<nthrds_ice>1</nthrds_ice>
<nthrds_ocn>1</nthrds_ocn>
<nthrds_glc>1</nthrds_glc>
<nthrds_wav>1</nthrds_wav>
<nthrds_cpl>1</nthrds_cpl>
</nthrds>
<rootpe>
<rootpe_atm>0</rootpe_atm>
<rootpe_lnd>0</rootpe_lnd>
<rootpe_rof>0</rootpe_rof>
<rootpe_ice>0</rootpe_ice>
<rootpe_ocn>0</rootpe_ocn>
<rootpe_glc>0</rootpe_glc>
<rootpe_wav>0</rootpe_wav>
<rootpe_cpl>0</rootpe_cpl>
</rootpe>
</pes>
</mach>
</grid>
<grid name="l%1x1|l%CLM_USRDAT" >
<mach name="any">
<pes pesize="any" compset="any">
<comment>none</comment>
<ntasks>
<ntasks_atm>1</ntasks_atm>
<ntasks_lnd>1</ntasks_lnd>
<ntasks_rof>1</ntasks_rof>
<ntasks_ice>1</ntasks_ice>
<ntasks_ocn>1</ntasks_ocn>
<ntasks_glc>1</ntasks_glc>
<ntasks_wav>1</ntasks_wav>
<ntasks_cpl>1</ntasks_cpl>
</ntasks>
<nthrds>
<nthrds_atm>1</nthrds_atm>
<nthrds_lnd>1</nthrds_lnd>
<nthrds_rof>1</nthrds_rof>
<nthrds_ice>1</nthrds_ice>
<nthrds_ocn>1</nthrds_ocn>
<nthrds_glc>1</nthrds_glc>
<nthrds_wav>1</nthrds_wav>
<nthrds_cpl>1</nthrds_cpl>
</nthrds>
<rootpe>
<rootpe_atm>0</rootpe_atm>
<rootpe_lnd>0</rootpe_lnd>
<rootpe_rof>0</rootpe_rof>
<rootpe_ice>0</rootpe_ice>
<rootpe_ocn>0</rootpe_ocn>
<rootpe_glc>0</rootpe_glc>
<rootpe_wav>0</rootpe_wav>
<rootpe_cpl>0</rootpe_cpl>
</rootpe>
</pes>
</mach>
</grid>
<grid name="l%5x5" >
<mach name="any">
<pes pesize="any" compset="any">
<comment>none</comment>
<ntasks>
<ntasks_atm>5</ntasks_atm>
<ntasks_lnd>5</ntasks_lnd>
<ntasks_rof>5</ntasks_rof>
<ntasks_ice>5</ntasks_ice>
<ntasks_ocn>5</ntasks_ocn>
<ntasks_glc>5</ntasks_glc>
<ntasks_wav>5</ntasks_wav>
<ntasks_cpl>5</ntasks_cpl>
</ntasks>
<nthrds>
<nthrds_atm>1</nthrds_atm>
<nthrds_lnd>1</nthrds_lnd>
<nthrds_rof>1</nthrds_rof>
<nthrds_ice>1</nthrds_ice>
<nthrds_ocn>1</nthrds_ocn>
<nthrds_glc>1</nthrds_glc>
<nthrds_wav>1</nthrds_wav>
<nthrds_cpl>1</nthrds_cpl>
</nthrds>
<rootpe>
<rootpe_atm>0</rootpe_atm>
<rootpe_lnd>0</rootpe_lnd>
<rootpe_rof>0</rootpe_rof>
<rootpe_ice>0</rootpe_ice>
<rootpe_ocn>0</rootpe_ocn>
<rootpe_glc>0</rootpe_glc>
<rootpe_wav>0</rootpe_wav>
<rootpe_cpl>0</rootpe_cpl>
</rootpe>
</pes>
</mach>
</grid>
<grid name="l%T31">
<mach name="any">
<pes pesize="any" compset="any">
<comment>none</comment>
<ntasks>
<ntasks_atm>-4</ntasks_atm>
<ntasks_lnd>-4</ntasks_lnd>
<ntasks_rof>-4</ntasks_rof>
<ntasks_ice>-4</ntasks_ice>
<ntasks_ocn>-4</ntasks_ocn>
<ntasks_glc>-4</ntasks_glc>
<ntasks_wav>-4</ntasks_wav>
<ntasks_cpl>-4</ntasks_cpl>
<ntasks_lnd>-4</ntasks_lnd>
</ntasks>
<nthrds>
<nthrds_atm>1</nthrds_atm>>
<nthrds_lnd>1</nthrds_lnd>
<nthrds_rof>1</nthrds_rof>
<nthrds_ice>1</nthrds_ice>
<nthrds_ocn>1</nthrds_ocn>
<nthrds_glc>1</nthrds_glc>
<nthrds_wav>1</nthrds_wav>
<nthrds_cpl>1</nthrds_cpl>
</nthrds>
<rootpe>
<rootpe_atm>0</rootpe_atm>
<rootpe_lnd>0</rootpe_lnd>
<rootpe_rof>0</rootpe_rof>
<rootpe_ice>0</rootpe_ice>
<rootpe_ocn>0</rootpe_ocn>
<rootpe_glc>0</rootpe_glc>
<rootpe_wav>0</rootpe_wav>
<rootpe_cpl>0</rootpe_cpl>
</rootpe>
</pes>
</mach>
</grid>
<grid name="l%10x15">
<mach name="any">
<pes pesize="any" compset="any">
<comment>none</comment>
<ntasks>
<ntasks_atm>-2</ntasks_atm>
<ntasks_lnd>-2</ntasks_lnd>
<ntasks_rof>-2</ntasks_rof>
<ntasks_ice>-2</ntasks_ice>
<ntasks_ocn>-2</ntasks_ocn>
<ntasks_glc>-2</ntasks_glc>
<ntasks_wav>-2</ntasks_wav>
<ntasks_cpl>-2</ntasks_cpl>
<ntasks_lnd>-2</ntasks_lnd>
</ntasks>
<nthrds>
<nthrds_atm>1</nthrds_atm>>
<nthrds_lnd>1</nthrds_lnd>
<nthrds_rof>1</nthrds_rof>
<nthrds_ice>1</nthrds_ice>
<nthrds_ocn>1</nthrds_ocn>
<nthrds_glc>1</nthrds_glc>
<nthrds_wav>1</nthrds_wav>
<nthrds_cpl>1</nthrds_cpl>
</nthrds>
<rootpe>
<rootpe_atm>0</rootpe_atm>
<rootpe_lnd>0</rootpe_lnd>
<rootpe_rof>0</rootpe_rof>
<rootpe_ice>0</rootpe_ice>
<rootpe_ocn>0</rootpe_ocn>
<rootpe_glc>0</rootpe_glc>
<rootpe_wav>0</rootpe_wav>
<rootpe_cpl>0</rootpe_cpl>
</rootpe>
</pes>
</mach>
</grid>
<grid name="l%10x15">
<mach name="derecho">
<pes pesize="any" compset="any">
<comment>none</comment>
<ntasks>
<ntasks_atm>-1</ntasks_atm>
<ntasks_lnd>-1</ntasks_lnd>
<ntasks_rof>-1</ntasks_rof>
<ntasks_ice>-1</ntasks_ice>
<ntasks_ocn>-1</ntasks_ocn>
<ntasks_glc>-1</ntasks_glc>
<ntasks_wav>-1</ntasks_wav>
<ntasks_cpl>-1</ntasks_cpl>
<ntasks_lnd>-1</ntasks_lnd>
</ntasks>
<nthrds>
<nthrds_atm>1</nthrds_atm>
<nthrds_lnd>1</nthrds_lnd>
<nthrds_rof>1</nthrds_rof>
<nthrds_ice>1</nthrds_ice>
<nthrds_ocn>1</nthrds_ocn>
<nthrds_glc>1</nthrds_glc>
<nthrds_wav>1</nthrds_wav>
<nthrds_cpl>1</nthrds_cpl>
</nthrds>
<rootpe>
<rootpe_atm>0</rootpe_atm>
<rootpe_lnd>0</rootpe_lnd>
<rootpe_rof>0</rootpe_rof>
<rootpe_ice>0</rootpe_ice>
<rootpe_ocn>0</rootpe_ocn>
<rootpe_glc>0</rootpe_glc>
<rootpe_wav>0</rootpe_wav>
<rootpe_cpl>0</rootpe_cpl>
</rootpe>
</pes>
</mach>
</grid>
<grid name="l%10x15">
<mach name="hobart|izumi">
<pes pesize="any" compset="any">
<comment>none</comment>
<ntasks>
<ntasks_atm>-1</ntasks_atm>
<ntasks_lnd>-1</ntasks_lnd>
<ntasks_rof>-1</ntasks_rof>
<ntasks_ice>-1</ntasks_ice>
<ntasks_ocn>-1</ntasks_ocn>
<ntasks_glc>-1</ntasks_glc>
<ntasks_wav>-1</ntasks_wav>
<ntasks_cpl>-1</ntasks_cpl>
<ntasks_lnd>-1</ntasks_lnd>
</ntasks>
<nthrds>
<nthrds_atm>1</nthrds_atm>>
<nthrds_lnd>1</nthrds_lnd>
<nthrds_rof>1</nthrds_rof>
<nthrds_ice>1</nthrds_ice>
<nthrds_ocn>1</nthrds_ocn>
<nthrds_glc>1</nthrds_glc>
<nthrds_wav>1</nthrds_wav>
<nthrds_cpl>1</nthrds_cpl>
</nthrds>
<rootpe>
<rootpe_atm>0</rootpe_atm>
<rootpe_lnd>0</rootpe_lnd>
<rootpe_rof>0</rootpe_rof>
<rootpe_ice>0</rootpe_ice>
<rootpe_ocn>0</rootpe_ocn>
<rootpe_glc>0</rootpe_glc>
<rootpe_wav>0</rootpe_wav>
<rootpe_cpl>0</rootpe_cpl>
</rootpe>
</pes>
</mach>
</grid>
<overrides>
<grid name="any" >
<mach name="any" >
<pes pesize="any" compset="CISM1">
<ntasks>
<ntasks_glc>1</ntasks_glc>
</ntasks>
<nthrds>
<nthrds_glc>1</nthrds_glc>
</nthrds>
</pes>
</mach>
</grid>
</overrides>
</config_pes>

View File

@ -0,0 +1,81 @@
<?xml version="1.0"?>
<!--
The following CLM-specific system tests are defined here:
LII CLM initial condition interpolation test
LVG Verify that adding virtual glacier columns doesn't change answers
SSP smoke CLM spinup test (only valid for CLM compsets with CLM45)
do an initial spin test (setting CLM_ACCELERATED_SPINUP to on)
write restarts at the end of the run
short term archiving is on
do a hybrid non-spinup simulation run from the restart files generated in the first phase
-->
<config_test>
<test NAME="LII">
<DESC>CLM initial condition interpolation test (requires configuration with non-blank finidat)</DESC>
<INFO_DBUG>1</INFO_DBUG>
<DOUT_S>FALSE</DOUT_S>
<CONTINUE_RUN>FALSE</CONTINUE_RUN>
<REST_OPTION>never</REST_OPTION>
<HIST_OPTION>$STOP_OPTION</HIST_OPTION>
<HIST_N>$STOP_N</HIST_N>
</test>
<test NAME="LII2FINIDATAREAS">
<DESC>CLM initial condition interpolation test using finidat_areas (requires configuration with non-blank finidat)</DESC>
<INFO_DBUG>1</INFO_DBUG>
<DOUT_S>FALSE</DOUT_S>
<CONTINUE_RUN>FALSE</CONTINUE_RUN>
<REST_OPTION>never</REST_OPTION>
<HIST_OPTION>$STOP_OPTION</HIST_OPTION>
<HIST_N>$STOP_N</HIST_N>
</test>
<test NAME="LVG">
<DESC>CLM test: Verify that adding virtual glacier columns doesn't change answers</DESC>
<INFO_DBUG>1</INFO_DBUG>
<DOUT_S>FALSE</DOUT_S>
<CONTINUE_RUN>FALSE</CONTINUE_RUN>
<REST_OPTION>never</REST_OPTION>
<!-- Need HIST_OPTION=never for this test because we expect answer changes
in the l2x fields that are separated by elevation class. So for this
test, we just ensure that there are no answer changes in
gridcell-average CLM fields, via comparison of the CLM history
files. This means that, for this test to be effective, it needs to be
done with a testmod that produces at least one CLM history file, which
should only contain gridcell-average fields. (If we had a way to
exclude individual fields from the list of compared fields, then we
could compare cpl hist files, excluding certain l2x fields.) -->
<HIST_OPTION>never</HIST_OPTION>
</test>
<test NAME="LCISO">
<DESC>CTSM Land model test to ensure Carbon isotopes on or off does NOT change answers</DESC>
<INFO_DBUG>1</INFO_DBUG>
<DOUT_S>FALSE</DOUT_S>
<CONTINUE_RUN>FALSE</CONTINUE_RUN>
<REST_OPTION>never</REST_OPTION>
<HIST_OPTION>$STOP_OPTION</HIST_OPTION>
<HIST_N>$STOP_N</HIST_N>
</test>
<test NAME="SSP">
<DESC>smoke CLM spinup test (only valid for CLM45 or CLM50 compsets)</DESC>
<INFO_DBUG>1</INFO_DBUG>
<STOP_OPTION>ndays</STOP_OPTION>
<RUN_TYPE>startup</RUN_TYPE>
<STOP_N>4</STOP_N>
<DOUT_S>FALSE</DOUT_S>
<CONTINUE_RUN>FALSE</CONTINUE_RUN>
<HIST_OPTION>$STOP_OPTION</HIST_OPTION>
<HIST_N>$STOP_N</HIST_N>
</test>
</config_test>

View File

@ -0,0 +1,37 @@
<?xml version= "1.0"?>
<expectedFails>
<category name="aux_clm">
<entry issue="#158" >FAIL ERS_Lm20_Mmpi-serial.1x1_smallvilleIA.I2000Clm50BgcCropQianGs.derecho_intel.clm-monthly RUN</entry>
<entry issue="#442" >FAIL SMS.f10_f10_musgs.I2000Clm50BgcCrop.hobart_pgi.clm-crop RUN</entry>
<entry issue="#442" >FAIL SMS_D.f10_f10_musgs.I2000Clm50BgcCrop.hobart_pgi.clm-crop RUN</entry>
<entry issue="#840" >FAIL PEPEM_Ld1.f10_f10_musgs.I2000Clm50BgcCrop.hobart_intel.clm-crop RUN</entry>
<entry issue="#1637" >FAIL SMS.f10_f10_musgs.I2000Clm50BgcCrop.izumi_pgi.clm-crop RUN</entry>
<entry issue="#1637" >FAIL SMS_D.f10_f10_musgs.I2000Clm50BgcCrop.izumi_pgi.clm-crop RUN</entry>
<entry issue="#2289" >FAIL ERP_P180x2_D.f19_g17.I2000Clm50SpRtmFl.derecho_intel.clm-default RUN</entry>
<entry issue="#2289" >FAIL ERP_P180x2_D_Ld5.f19_g17.I2000Clm50Sp.derecho_intel.clm-default RUN</entry>
<entry issue="#2289" >FAIL ERP_P180x2_D_Ld5.f19_g17_gl4.I1850Clm50BgcCropG.derecho_intel.clm-default RUN</entry>
<entry issue="#2289" >FAIL ERP_P180x2_D_Ld5.f19_g17_gl4.I1850Clm50BgcCropG.derecho_intel.clm-default RUN</entry>
<entry issue="#2289" >FAIL ERS_Ly3_P128x2.f10_f10_musgs.IHistClm50BgcCropG.derecho_intel.clm-cropMonthOutput RUN</entry>
<entry issue="#2289" >FAIL ERP_P64x2_Lm25.f10_f10_musgs.I2000Clm50BgcDvCrop.derecho_intel.clm-monthly RUN</entry>
<entry issue="#2289" >FAIL ERP_P128x2_Lm36.f10_f10_musgs.I2000Clm50BgcCrop.derecho_intel.clm-clm50cropIrrigMonth_interp RUN</entry>
<entry issue="#2289" >FAIL ERP_P128x2_Ly3.f10_f10_musgs.I2000Clm50BgcCrop.derecho_intel.clm-irrig_o3_reduceOutput RUN</entry>
<entry issue="#2289" >FAIL ERP_Ly3_P128x2.f10_f10_musgs.IHistClm50BgcCrop.derecho_intel.clm-cropMonthOutput RUN</entry>
<entry issue="#2289" >FAIL ERP_P128x2_Lm25.f10_f10_musgs.I2000Clm50BgcDvCrop.derecho_intel.clm-monthly RUN</entry>
<entry issue="#2296" >FAIL ERS_D_Ld5_P512x3.f19_g16.I2000Clm50SpGs.derecho_intel.clm-waccmx_offline RUN</entry>
<entry issue="#2296" >FAIL ERP_P180x2_D.f19_g17.I2000Clm50SpRtmFl.derecho_intel.clm-default RUN</entry>
<entry issue="#2296" >FAIL ERP_P180x2_D_Ld5.f19_g17.I2000Clm50BgcDvCrop.derecho_intel.clm-crop RUN</entry>
<entry issue="#2296" >FAIL LII2FINIDATAREAS_D_P384x2_Ld1.f09_g16_gl4.I1850Clm50BgcCrop.derecho_intel.clm-compatible_finidat_f09 RUN</entry>
<entry issue="#2296" >FAIL ERP_D_Ld3_P64x2.f10_f10_musgs.I2000Clm50BgcCruGs.derecho_intel.clm-default RUN</entry>
</category>
<category name="fates">
<entry issue="NGEET/fates/#559" >FAIL SMS_Lm3_D_Mmpi-serial.1x1_brazil.I2000Clm50FatesCruGs.derecho_intel.clm-FatesHydro RUN</entry>
<entry issue="667" >FAIL ERS_D_Ld5.1x1_brazil.I2000Clm50FatesCruGs.derecho_intel.clm-FatesHydro COMPARE_base_rest</entry>
<entry issue="667" >FAIL ERS_D_Ld5.1x1_brazil.I2000Clm50FatesCruGs.hobart_nag.clm-FatesHydro RUN</entry>
<entry issue="667" >FAIL ERS_D_Ld5.1x1_brazil.I2000Clm50FatesCruGs.izumi_nag.clm-FatesHydro RUN</entry>
<entry issue="NGEET/fates/#510" >FAIL SMS_Lm3_D_Mmpi-serial.1x1_brazil.I2000Clm50FatesCruGs.hobart_nag.clm-FatesHydro MEMLEAK</entry>
<entry issue="NGEET/fates/#508" >FAIL SMS_Lm3_D_Mmpi-serial.1x1_brazil.I2000Clm50FatesCruGs.izumi_nag.clm-FatesHydro RUN</entry>
<entry issue="NGEET/fates/#508" >FAIL SMS_Lm3_D_Mmpi-serial.1x1_brazil.I2000Clm50FatesCruGs.derecho_intel.clm-FatesHydro RUN</entry>
</category>
</expectedFails>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1 @@
../40default

View File

@ -0,0 +1,3 @@
hist_fincl1 += 'GDD0', 'GDD8', 'GDD10',
'GDD020', 'GDD820', 'GDD1020',
'GDDPLANT', 'GDDTSOI', 'A5TMIN', 'A10TMIN'

View File

@ -0,0 +1,3 @@
# Turn fire emission driver namelist off in case clm4_0 is being used
./xmlchange CLM_BLDNML_OPTS="-no-fire_emis" --append

View File

@ -0,0 +1,25 @@
wrtdia = .true.
hist_dov2xy = .true.,.false.
! Even though only 2 history tapes are defined here, set ndens to 1 for up to 6 history
! tapes, for the sake of mods that extend these default mods and may add other history tapes
hist_ndens = 1,1,1,1,1,1
hist_nhtfrq =-24,-8
hist_mfilt = 1,1
hist_fincl1 = 'TRAFFICFLUX', 'SNOWLIQ:A','SNOWICE:A'
hist_fincl2 = 'TG','TBOT','FIRE','FIRA','FLDS','FSDS',
'FSR','FSA','FGEV','FSH','FGR','TSOI',
'ERRSOI','SABV','SABG',
'FSDSVD','FSDSND','FSDSVI','FSDSNI',
'FSRVD','FSRND','FSRVI','FSRNI',
'TSA','FCTR','FCEV','QBOT','RH2M','H2OSOI',
'H2OSNO','SOILLIQ','SOILICE',
'TSA_U', 'TSA_R',
'TREFMNAV_U', 'TREFMNAV_R',
'TREFMXAV_U', 'TREFMXAV_R',
'TG_U', 'TG_R',
'RH2M_U', 'RH2M_R',
'QRUNOFF_U', 'QRUNOFF_R',
'SoilAlpha_U',
'SWup', 'LWup', 'URBAN_AC', 'URBAN_HEAT'

Some files were not shown because too many files have changed in this diff Show More