first commit
This commit is contained in:
commit
b144ce570d
31
.config_files.xml
Normal file
31
.config_files.xml
Normal 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
6
.gitattributes
vendored
Normal 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
29
.github/ISSUE_TEMPLATE/01_bug_report.md
vendored
Normal 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.]
|
36
.github/ISSUE_TEMPLATE/02_support_needed.md
vendored
Normal file
36
.github/ISSUE_TEMPLATE/02_support_needed.md
vendored
Normal 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.]
|
7
.github/ISSUE_TEMPLATE/03_science_discussion.md
vendored
Normal file
7
.github/ISSUE_TEMPLATE/03_science_discussion.md
vendored
Normal 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
7
.github/ISSUE_TEMPLATE/04_other.md
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
---
|
||||
name: Other
|
||||
about: Other issues (enhancement, cleanup, documentation, etc.)
|
||||
|
||||
---
|
||||
|
||||
|
20
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal file
20
.github/PULL_REQUEST_TEMPLATE.md
vendored
Normal 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
118
.gitignore
vendored
Normal 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
2
.lfsconfig
Normal file
@ -0,0 +1,2 @@
|
||||
[lfs]
|
||||
fetchexclude = *
|
7
.zenodo.json
Normal file
7
.zenodo.json
Normal file
@ -0,0 +1,7 @@
|
||||
{
|
||||
"creators": [
|
||||
{
|
||||
"name": "CTSM Development Team"
|
||||
}
|
||||
]
|
||||
}
|
49
CODE_OF_CONDUCT.md
Normal file
49
CODE_OF_CONDUCT.md
Normal 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
48
CONTRIBUTING.md
Normal 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
71
CTSMMasterChecklist
Normal 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
45
Externals.cfg
Normal 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
10
Externals_CLM.cfg
Normal 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
34
LICENSE
Normal 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
144
README
Normal 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
59
README.md
Normal file
@ -0,0 +1,59 @@
|
||||
# CTSM
|
||||
|
||||
[](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
124
README_EXTERNALS.rst
Normal 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
4669
bld/CLMBuildNamelist.pm
Executable file
File diff suppressed because it is too large
Load Diff
72
bld/README
Normal file
72
bld/README
Normal 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
23
bld/build-namelist
Executable 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
198
bld/config_files/clm_phys_vers.pm
Executable 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();
|
||||
}
|
7
bld/config_files/config_defaults.xml
Normal file
7
bld/config_files/config_defaults.xml
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0"?>
|
||||
|
||||
<?xml-stylesheet type="text/xsl" href="config_definition.xsl" ?>
|
||||
|
||||
<config_definition>
|
||||
|
||||
</config_definition>
|
9
bld/config_files/config_defaults_1x1_mexicocityMEX.xml
Normal file
9
bld/config_files/config_defaults_1x1_mexicocityMEX.xml
Normal 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>
|
10
bld/config_files/config_defaults_1x1_numaIA.xml
Normal file
10
bld/config_files/config_defaults_1x1_numaIA.xml
Normal 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>
|
10
bld/config_files/config_defaults_1x1_smallvilleIA.xml
Normal file
10
bld/config_files/config_defaults_1x1_smallvilleIA.xml
Normal 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>
|
9
bld/config_files/config_defaults_1x1_vancouverCAN.xml
Normal file
9
bld/config_files/config_defaults_1x1_vancouverCAN.xml
Normal 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>
|
72
bld/config_files/config_definition.xsl
Normal file
72
bld/config_files/config_definition.xsl
Normal 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>
|
115
bld/config_files/config_definition_clm4_0.xml
Normal file
115
bld/config_files/config_definition_clm4_0.xml
Normal 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>
|
45
bld/config_files/config_definition_clm4_5.xml
Normal file
45
bld/config_files/config_definition_clm4_5.xml
Normal 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
756
bld/configure
vendored
Executable 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
13
bld/env_run.xml
Normal 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
358
bld/listDefaultNamelist.pl
Executable 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
244
bld/namelist_files/LogMessages.pm
Executable 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();
|
||||
}
|
236
bld/namelist_files/checkmapfiles.ncl
Normal file
236
bld/namelist_files/checkmapfiles.ncl
Normal 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
|
||||
|
56
bld/namelist_files/createMkSrfEntry.py
Executable file
56
bld/namelist_files/createMkSrfEntry.py
Executable 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 )
|
||||
|
||||
|
||||
|
||||
|
46
bld/namelist_files/history_fields.xsl
Normal file
46
bld/namelist_files/history_fields.xsl
Normal 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>
|
177
bld/namelist_files/namelist_defaults.xsl
Normal file
177
bld/namelist_files/namelist_defaults.xsl
Normal 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>
|
1009
bld/namelist_files/namelist_defaults_clm4_0.xml
Normal file
1009
bld/namelist_files/namelist_defaults_clm4_0.xml
Normal file
File diff suppressed because it is too large
Load Diff
9
bld/namelist_files/namelist_defaults_clm4_0_tools.xml
Normal file
9
bld/namelist_files/namelist_defaults_clm4_0_tools.xml
Normal 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>
|
2698
bld/namelist_files/namelist_defaults_clm4_5.xml
Normal file
2698
bld/namelist_files/namelist_defaults_clm4_5.xml
Normal file
File diff suppressed because it is too large
Load Diff
9
bld/namelist_files/namelist_defaults_drv.xml
Normal file
9
bld/namelist_files/namelist_defaults_drv.xml
Normal 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>
|
30
bld/namelist_files/namelist_defaults_drydep.xml
Normal file
30
bld/namelist_files/namelist_defaults_drydep.xml
Normal 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>
|
22
bld/namelist_files/namelist_defaults_fire_emis.xml
Normal file
22
bld/namelist_files/namelist_defaults_fire_emis.xml
Normal 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>
|
116
bld/namelist_files/namelist_defaults_overall.xml
Normal file
116
bld/namelist_files/namelist_defaults_overall.xml
Normal 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>
|
36
bld/namelist_files/namelist_defaults_usr_files.xml
Normal file
36
bld/namelist_files/namelist_defaults_usr_files.xml
Normal 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>
|
363
bld/namelist_files/namelist_definition.xsl
Normal file
363
bld/namelist_files/namelist_definition.xsl
Normal 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>
|
822
bld/namelist_files/namelist_definition_clm4_0.xml
Normal file
822
bld/namelist_files/namelist_definition_clm4_0.xml
Normal 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>
|
2575
bld/namelist_files/namelist_definition_clm4_5.xml
Normal file
2575
bld/namelist_files/namelist_definition_clm4_5.xml
Normal file
File diff suppressed because it is too large
Load Diff
17
bld/namelist_files/namelist_definition_drv.xml
Normal file
17
bld/namelist_files/namelist_definition_drv.xml
Normal 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>
|
||||
|
131
bld/namelist_files/namelist_definition_drv_flds.xml
Normal file
131
bld/namelist_files/namelist_definition_drv_flds.xml
Normal 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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
@ -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>
|
49
bld/namelist_files/use_cases/1850_control.xml
Normal file
49
bld/namelist_files/use_cases/1850_control.xml
Normal 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>
|
59
bld/namelist_files/use_cases/1850_noanthro_control.xml
Normal file
59
bld/namelist_files/use_cases/1850_noanthro_control.xml
Normal 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>
|
58
bld/namelist_files/use_cases/1850_smyle_control.xml
Normal file
58
bld/namelist_files/use_cases/1850_smyle_control.xml
Normal 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>
|
39
bld/namelist_files/use_cases/2000_control.xml
Normal file
39
bld/namelist_files/use_cases/2000_control.xml
Normal 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>
|
39
bld/namelist_files/use_cases/2010_control.xml
Normal file
39
bld/namelist_files/use_cases/2010_control.xml
Normal 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>
|
68
bld/namelist_files/use_cases/20thC_smyle_transient.xml
Normal file
68
bld/namelist_files/use_cases/20thC_smyle_transient.xml
Normal 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>
|
56
bld/namelist_files/use_cases/20thC_transient.xml
Normal file
56
bld/namelist_files/use_cases/20thC_transient.xml
Normal 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>
|
@ -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>
|
@ -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>
|
@ -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>
|
29
bld/namelist_files/use_cases/2100_SSP3-7.0_control.xml
Normal file
29
bld/namelist_files/use_cases/2100_SSP3-7.0_control.xml
Normal 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>
|
39
bld/namelist_files/use_cases/README
Normal file
39
bld/namelist_files/use_cases/README
Normal 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).
|
25
bld/namelist_files/use_cases/stdurbpt_pd.xml
Normal file
25
bld/namelist_files/use_cases/stdurbpt_pd.xml
Normal 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
317
bld/queryDefaultNamelist.pl
Executable 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
161
bld/queryDefaultXML.pm
Normal 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
|
218
bld/unit_testers/NMLTest/CompFiles.pm
Normal file
218
bld/unit_testers/NMLTest/CompFiles.pm
Normal 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
|
1540
bld/unit_testers/build-namelist_test.pl
Executable file
1540
bld/unit_testers/build-namelist_test.pl
Executable file
File diff suppressed because it is too large
Load Diff
3
bld/unit_testers/myuser_nl_clm
Normal file
3
bld/unit_testers/myuser_nl_clm
Normal 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"
|
||||
/
|
54
bld/unit_testers/xFail/expectedClmTestFails.xml
Normal file
54
bld/unit_testers/xFail/expectedClmTestFails.xml
Normal 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>
|
668
bld/unit_testers/xFail/expectedFail.pm
Executable file
668
bld/unit_testers/xFail/expectedFail.pm
Executable 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;
|
128
bld/unit_testers/xFail/wrapClmTests.pl
Executable file
128
bld/unit_testers/xFail/wrapClmTests.pl
Executable 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);
|
37
cime_config/SystemTests/lciso.py
Normal file
37
cime_config/SystemTests/lciso.py
Normal 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'")
|
||||
|
||||
|
56
cime_config/SystemTests/lii.py
Normal file
56
cime_config/SystemTests/lii.py
Normal 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.")
|
||||
|
76
cime_config/SystemTests/lii2finidatareas.py
Normal file
76
cime_config/SystemTests/lii2finidatareas.py
Normal 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'")
|
37
cime_config/SystemTests/lvg.py
Normal file
37
cime_config/SystemTests/lvg.py
Normal 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'")
|
||||
|
100
cime_config/SystemTests/ssp.py
Normal file
100
cime_config/SystemTests/ssp.py
Normal 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
52
cime_config/buildcpp
Normal 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
118
cime_config/buildlib
Executable 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
270
cime_config/buildnml
Executable 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()
|
24
cime_config/config_archive.xml
Normal file
24
cime_config/config_archive.xml
Normal 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>
|
274
cime_config/config_component.xml
Normal file
274
cime_config/config_component.xml
Normal 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>
|
539
cime_config/config_compsets.xml
Normal file
539
cime_config/config_compsets.xml
Normal 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
987
cime_config/config_pes.xml
Normal 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>
|
81
cime_config/config_tests.xml
Normal file
81
cime_config/config_tests.xml
Normal 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>
|
37
cime_config/testdefs/ExpectedTestFails.xml
Normal file
37
cime_config/testdefs/ExpectedTestFails.xml
Normal 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>
|
2043
cime_config/testdefs/testlist_clm.xml
Normal file
2043
cime_config/testdefs/testlist_clm.xml
Normal file
File diff suppressed because it is too large
Load Diff
@ -0,0 +1 @@
|
||||
../40default
|
@ -0,0 +1,3 @@
|
||||
hist_fincl1 += 'GDD0', 'GDD8', 'GDD10',
|
||||
'GDD020', 'GDD820', 'GDD1020',
|
||||
'GDDPLANT', 'GDDTSOI', 'A5TMIN', 'A10TMIN'
|
@ -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
|
||||
|
25
cime_config/testdefs/testmods_dirs/clm/40default/user_nl_clm
Normal file
25
cime_config/testdefs/testmods_dirs/clm/40default/user_nl_clm
Normal 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
Loading…
x
Reference in New Issue
Block a user