-
Notifications
You must be signed in to change notification settings - Fork 34
Updates for CCPP version 7 release #73
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from 6 commits
Commits
Show all changes
17 commits
Select commit
Hold shift + click to select a range
cdce261
Fix a few warnings, start on updating Overview, including update refe…
mkavulich 6703d3e
More revisions to Overview, add GFS as glossary entry, update suite t…
mkavulich 0035b39
Fix links, update suite descriptions
mkavulich 4bf9955
- Updating more links and references to v6 (temporary links will nee…
mkavulich cca5d03
Add details about new MPI requirements, disallowing pointers
mkavulich 04456ba
Fix whitespace at end of lines
mkavulich 53f3cbb
Address Ligia's comments, clarify that NRL also contributes to Framew…
mkavulich 4cdb72d
- Fix links/formatting/spelling
mkavulich 1175991
Add more details about optional arguments, some formatting fixes
mkavulich fa2c907
Update full paths to files in physics repository, include links to li…
mkavulich eb5c71d
Apply @climbfuji suggestions from code review
mkavulich 72ae00b
Update CCPPtechnical/source/Overview.rst
mkavulich f50405b
Update Scidoc links
mkavulich f6f6811
Missed this old update: suite GFS_v16beta --> GFS_v16
mkavulich 6d93169
Update link to modules list
mkavulich bb9968e
Update scidoc example
mkavulich 86b28d0
Update github links for release
mkavulich File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,5 +1,5 @@ | ||
| .. _AddNewSchemes: | ||
|
|
||
| **************************************** | ||
| Connecting a scheme to CCPP | ||
| **************************************** | ||
|
|
@@ -20,7 +20,7 @@ There are a few steps that can be taken to prepare a scheme for addition to CCPP | |
| Implementing a scheme in CCPP | ||
| ============================= | ||
|
|
||
| There are, broadly speaking, two approaches for connecting an existing physics scheme to the CCPP Framework: | ||
| There are, broadly speaking, two approaches for connecting an existing physics scheme to the CCPP Framework: | ||
|
|
||
| 1. Refactor the existing scheme to CCPP format standards, using ``pre_`` and ``post_`` :term:`interstitial schemes <interstitial scheme>` to interface to and from the existing scheme if necessary. | ||
| 2. Create a driver scheme as an interface from the existing scheme's Fortran module to the CCPP Framework. | ||
|
|
@@ -33,11 +33,11 @@ Method 1 is the preferred method of adapting a scheme to CCPP. This involves mak | |
|
|
||
| While method 1 is preferred, there are cases where method 1 may not be possible: for example, in schemes that are shared with other, non-CCPP hosts, and so require specialized, model-specific drivers, and might be beholden to different coding standards required by another model. In cases such as this, method 2 may be employed. | ||
|
|
||
| Method 2 involves fewer changes to the original scheme's Fortran module: A CCPP-compliant driver module (see :numref:`Chapter %s <CompliantPhysParams>`) handles defining the inputs to and outputs from the scheme module in terms of state variables, constants, and tendencies provided by the model as defined in the scheme's .meta file. The calculation of variables that are not available directly from the model, and conversion of scheme output back into the variables expected by CCPP, should be handled by interstitial schemes (``schemename_pre`` and ``schemename_post``). While this method puts most CCPP-required features in the driver and interstitial subroutines, the original scheme must still be updated to remove STOP statements, common blocks, or any other disallowed features as listed in :numref:`Section %s <CodingRules>`. | ||
| Method 2 involves fewer changes to the original scheme's Fortran module: A CCPP-compliant driver module (see :numref:`Chapter %s <CompliantPhysParams>`) handles defining the inputs to and outputs from the scheme module in terms of state variables, constants, and tendencies provided by the model as defined in the scheme's .meta file. The calculation of variables that are not available directly from the model, and conversion of scheme output back into the variables expected by CCPP, should be handled by interstitial schemes (``schemename_pre`` and ``schemename_post``). While this method puts most CCPP-required features in the driver and interstitial subroutines, the original scheme must still be updated to remove STOP statements, common blocks, or any other disallowed features as listed in :numref:`Section %s <CodingRules>`. | ||
|
|
||
| For both methods, optional interstitial schemes can be used for code that can not be handled within the scheme itself. For example, if different code needs to be run for coupling with other schemes or in different orders (e.g. because of dependencies on other schemes and/or the order the scheme is run in the :term:`SDF`), or if variables needed by the scheme must be derived from variables provided by the host. See :numref:`Chapter %s <CompliantPhysParams>` for more details on primary and interstitial schemes. | ||
|
|
||
| .. note:: Depending on the complexity of the scheme and how it works together with other schemes, multiple interstitial schemes may be necessary. | ||
| .. note:: Depending on the complexity of the scheme and how it works together with other schemes, multiple interstitial schemes may be necessary. | ||
|
|
||
| ------------------------------ | ||
| Adding new variables to CCPP | ||
|
|
@@ -61,7 +61,7 @@ For variables that can be set via namelist, the ``GFS_control_type`` Derived Dat | |
|
|
||
| If information from the previous timestep is needed, it is important to identify if the host model provides this information, or if it needs to be stored as a special variable. For example, in the Model for Prediction Across Scales (MPAS), variables containing the values of several quantities in the preceding timesteps are available. When that is not the case, as in the :term:`UFS Atmosphere`, interstitial schemes are needed to access these quantities. | ||
|
|
||
| .. note:: As an example, the reader is referred to the `GF convective scheme <https://dtcenter.ucar.edu/GMTB/v6.0.0/sci_doc/_c_u__g_f.html>`_, which makes use of interstitials to obtain the previous timestep information. | ||
| .. note:: As an example, the reader is referred to the `Grell-Freidas convective scheme <https://dtcenter.ucar.edu/GMTB/v7.0.0p/sci_doc/_c_u__g_f.html>`_, which makes use of interstitials to obtain the previous timestep information. | ||
|
|
||
| Consider allocating the new variable only when needed (i.e. when the new scheme is used and/or when a certain control flag is set). If this is a viable option, following the existing examples in ``CCPP_typedefs.F90`` and ``GFS_typedefs.meta`` for allocating the variable and setting the ``active`` attribute in the metadata correctly. | ||
|
|
||
|
|
@@ -70,14 +70,14 @@ Incorporating a scheme into CCPP | |
| ---------------------------------- | ||
| The new scheme and any interstitials will need to be added to the CCPP prebuild configuration file. Add the new scheme to the Python dictionary in ``ccpp-scm/ccpp/config/ccpp_prebuild_config.py`` using the same path as the existing schemes: | ||
|
|
||
| .. code-block:: | ||
| .. code-block:: | ||
|
|
||
| SCHEME_FILES = [ ... | ||
| '../some_relative_path/existing_scheme.F90', | ||
| '../some_relative_path/new_scheme.F90', | ||
| ...] | ||
|
|
||
| .. note:: Different host models will have different prebuild config files. For example, the :term:`UFS Atmosphere's <UFS Atmosphere>` config file is located at ``ufs-weather-model/FV3/ccpp/config/ccpp_prebuild_config.py`` | ||
| .. note:: Different host models will have different prebuild config files. For example, the :term:`UFS Atmosphere's <UFS Atmosphere>` config file is located at ``ufs-weather-model/FV3/ccpp/config/ccpp_prebuild_config.py`` | ||
|
|
||
| The source code and ``.meta`` files for the new scheme should be placed in the same location as existing schemes in the CCPP: in the ccpp-physics repository under the ``physics/`` directory. | ||
|
|
||
|
|
@@ -113,7 +113,7 @@ Some tips for debugging problems: | |
| * Make sure to use an uppercase suffix ``.F90`` to enable C preprocessing. | ||
| * A scheme called GFS_debug (GFS_debug.F90) may be added to the SDF where needed to print state variables and interstitial variables. If needed, edit the scheme beforehand to add new variables that need to be printed. | ||
| * Check the ``ccpp_prebuild.py`` script for success/failure and associated messages; run the prebuild script with the --debug and --verbose flags. See :numref:`Chapter %s <ConstructingSuite>` for more details | ||
| * Compile code in DEBUG mode (see section 2.3 of the `SCM User's Guide <https://github.com/NCAR/ccpp-scm/blob/main/scm/doc/TechGuide/main.pdf>`_, run through debugger if necessary (gdb, Allinea DDT, totalview, …). | ||
| * Compile code in DEBUG mode (see section 4.3 of the `SCM User's Guide <https://ccpp-scm.readthedocs.io/en/latest/chap_quick.html#compiling-scm-with-ccpp>`_, run through debugger if necessary (gdb, Allinea DDT, totalview, …). | ||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Note that this will require a change before the release, to refer to v7
mkavulich marked this conversation as resolved.
Outdated
|
||
| * Use memory check utilities such as ``valgrind``. | ||
| * Double-check the metadata file associated with your scheme to make sure that all information, including standard names and units, correspond to the correct local variables. | ||
|
|
||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.