-
Notifications
You must be signed in to change notification settings - Fork 64
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add CCPP register phase #582
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is great work! Unfortunately, I don't have any way to test this, therefore relying on CI.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for addressing my comments! I'll leave the PR unapproved for now, since it is still in draft mode and I don't have any other tests than what is in CI. Once it is ready for review and others have tested it successfully, I'll approve.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I still don't have a way to test this in NEPTUNE or the UFS, but my comments were addressed, all CI tests pass, and this capability is really important to have. For NEPTUNE, we are primarily interested in getting namelist information from the register
phase so that we can setup the output variable registry before going through the ESMF/NUOPC init phase and the subsequent CCPP init phase.
I do have a question, though. The CCPP technical documentation (https://github.com/ncar/ccpp-doc) is for ccpp_prebuild only, and none of the new capabilities developed for capgen are captured in any kind of documentation. Would it make sense to start a feature/capgen branch in ccpp-doc (if we want to keep documenting CCPP in this form), or in some other ways while these new features are being added? It seems daunting to write documentation from scratch after capgen was implemented in the UFS and all other models using prebuild at the moment. Maybe we can discuss this at the next CCPP framework meeting @mkavulich ?
@climbfuji yes, I think discussing capgen documentation is a crucial topic to discuss! I've added it to next week's agenda. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks great @peverwhee! Just had a few comments/recommendations but otherwise nothing major.
We talked about the CMake/python test harnesses around capgen so I'll create an issue to template those files and we can address those in another PR if needed.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
These changes look good to me, just a few tiny things.
And thanks for adding the testing for this new phase!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks for taking care of those comments @peverwhee, looks good to me!
Tag name (required for release branches): Originator(s): peverwhee Description (include the issue title, and the keyword ['closes', 'fixes', 'resolves'] followed by the issue number): 1. Adds call to new CCPP register phase brought in with framework PR [#582](NCAR/ccpp-framework#582) 2. Uses the full error message returned from the exception handled when xmllint is called (updated in framework PR [#586](NCAR/ccpp-framework#586)) 3. Adds `inverse_exner_function_wrt_surface_pressure` as possible input variable name for exner for backwards compatibility with old converted snapshots closes #215 (add optional register phase) closes #286 (Improve error message returned by XML linter) Describe any changes made to build system: None Describe any changes made to the namelist: None List any changes to the defaults for the input datasets (e.g. boundary datasets): None List all files eliminated and why: None List all files added and what they do: None List all existing files that have been modified, and describe the changes: (Helpful git command: `git diff --name-status development...<your_branch_name>`) M .gitmodules - brings in new CCPP framework tag M src/control/cam_comp.F90 M src/physics/utils/phys_comp.F90 - Adds call to new CCPP register phase in the generated cap M src/data/generate_registry_data.py - Uses full error message returned from xmllint M src/data/registry.xml - add backwards-compatible exner name If there are new failures (compared to the `test/existing-test-failures.txt` file), have them OK'd by the gatekeeper, note them here, and add them to the file. If there are baseline differences, include the test and the reason for the diff. What is the nature of the change? Roundoff? derecho/intel/aux_sima: all pass derecho/gnu/aux_sima: all pass If this changes climate describe any run(s) done to evaluate the new climate in enough detail that it(they) could be reproduced: N/A CAM-SIMA date used for the baseline comparison tests if different than latest: --------- Co-authored-by: Courtney Peverley <courtneyp@izumi.cgd.ucar.edu>
Overview
This PR adds a new phase, register, that can be called by a host model and used by schemes to perform any set up that needs to happen BEFORE the grid is established.
NOTE: this PR also removes the old
dynamic_constituent_routine
metadata implementation for runtime constituents.Description
I have implemented it as an "optional" phase, by which I mean that it is not required that a host model call this phase (though I'm happy to be overruled!). As a result, the register phase does not change the CCPP "state" (but will produce an error if it is called after the
init
phase).More:
Dynamic/run-time constituent handling:
ccpp_constituent_properties_t
variable required):dynamic_constituents_for_<scheme>
<suite>_dynamic_constituents
, which are then used to pack and initialize the module level constituents object<host>_constituents_obj
.Generated host cap code examples
Misc notes
Since this phase is called before the grid is initialized, variables are not allocated at this time (that still happens in
init
) and no variables with horizontal and vertical dimensions can be passed in.UI Changes
User interface changes?: Yes, but they're optional
If a host model wishes to utilize schemes' register phases, they must add a call to
<host_model>_ccpp_physics_register(suite_name, errmsg, errflg)
Testing
test removed: removed unit tests for dyn_const_routines (old implementation of runtime constituent handling) - all pass
unit tests: Removed old dynamic constituents testing - all pass
system tests: Updated capgen and advection tests to include register phases (with and without dynamic constituents)
manual testing:
Fixes:
closes #572