Skip to content

Transition CCPP framework from ccpp-prebuild to ccpp-capgen v1#695

Open
climbfuji wants to merge 35 commits into
NCAR:mainfrom
climbfuji:feature/capgen-ng
Open

Transition CCPP framework from ccpp-prebuild to ccpp-capgen v1#695
climbfuji wants to merge 35 commits into
NCAR:mainfrom
climbfuji:feature/capgen-ng

Conversation

@climbfuji

@climbfuji climbfuji commented May 29, 2026

Copy link
Copy Markdown
Collaborator

Description

This PR updates the CCPP framework code generator from ccpp-prebuild to ccpp-capgen v1. The large update of the ccpp-framework code also requires changes in ccpp-physics and ccpp-scm.

The most important changes in CCPP-SCM are:

  • Update of CMake build system: the top-level CMakeLists.txt now drives the build and is invoked from scm/bin via cmake ../...
  • CCPP metadata changes in ccpp-scm due to a much simpler and cleaner handling of DDTs, bug fixes of inconsistencies between Fortran and Metadata, and the new type = control metadata tables.
  • Update of CCPP API (calls to ccpp_* in the SCM host model code).

Dependencies

Testing

  • CI
  • Manual testing on @climbfuji's devbox with gcc@14.2.1

Comment thread ccpp/framework-symlink/capgen-ng Outdated

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ignore this, for my development only

Comment thread ccpp/CMakeLists.txt Outdated
Comment thread ccpp/CMakeLists.txt Outdated
climbfuji and others added 3 commits June 1, 2026 09:00
Changes to get the SCM tests to run:
* clm_lake was included in a SDF, but not used. In the Cap, there is a (new?) check to see if the active conditions are met before calling the scheme. This was causing a runtime error. CLM Lake returns if not turned on, so having this new runtime check beforehand triggered the failure before entering the scheme. I removed the unused CLM Lake from the SDF and it worked fine.
* Remove GFS_v16_debug SDFs from test list. (I see these were removed from the CCPP SCM?)
* Add snippet to ccpp/CMakeLists to build only requested SDFs (i.e., -DCCPP_SUITES).
* Uncomment and test 32-bit and Intel oneAPI in CMakeLists.
…; fix metadata-fortran inconsistencies, fix GitHub actions take 1
@dustinswales

dustinswales commented Jun 3, 2026

Copy link
Copy Markdown
Member

@climbfuji Looks like most of the tests are B4B, the only exception are the GNU release (optimized) tests. Could this be from compilation flag changes (e.g., Adding -fPIC)? The differences appear to be rounding errors for the GFS based tests, whereas the HRRR_gf and WoFs tests show non-negligible differences. For example:
HRRR_gf q:
Screenshot 2026-06-03 at 9 36 38 AM
HRRR_gf u-wind.
Screenshot 2026-06-03 at 9 36 15 AM

Full set of difference plots are stored as artifacts here

@climbfuji

Copy link
Copy Markdown
Collaborator Author

@climbfuji Looks like most of the tests are B4B, the only exception are the GNU release (optimized) tests. Could this be from compilation flag changes (e.g., Adding -fPIC)? The differences appear to be rounding errors for the GFS based tests, whereas the HRRR_gf and WoFs tests show non-negligible differences. For example: HRRR_gf q: Screenshot 2026-06-03 at 9 36 38 AM HRRR_gf u-wind. Screenshot 2026-06-03 at 9 36 15 AM

Full set of difference plots are stored as artifacts here

Thanks for doing this comparison. The NEPTUNE runs are also not b4b identical. I think this is predominantly because the caps look different and the compiler optimizes the code differently.

But for the two suites you mentioned, what do they have in common that the other suites don't have?

I am certain that the much stricter validator and code generator helped identify and fix a few actual bugs.

@grantfirl

Copy link
Copy Markdown
Collaborator

@dustinswales @climbfuji GNU release RTs for the SCM have been changing results basically every PR. It seems like something is just not reproducible or otherwise fishy with the environment. I wouldn't base any decisions on whether GNU release tests are b4b or not.

@dustinswales

Copy link
Copy Markdown
Member

@dustinswales @climbfuji GNU release RTs for the SCM have been changing results basically every PR. It seems like something is just not reproducible or otherwise fishy with the environment. I wouldn't base any decisions on whether GNU release tests are b4b or not.

@grantfirl Thanks. I thought it was an odd result.
@climbfuji The HRRR/WoFs suites are quite different than the GFS suites:
Screenshot 2026-06-03 at 11 30 13 AM

In any event... I've seen enough to warrant trying capgen-ng in the UFS. Any objections @climbfuji?

@climbfuji

Copy link
Copy Markdown
Collaborator Author

No objections at all, please go ahead. I can also help out if you share a working branch and/or a checkout on Ursa, for example. I expect we'll have to fiddle a bit with the physics called from the dycore ...

@climbfuji

Copy link
Copy Markdown
Collaborator Author

@dustinswales @grantfirl Looks like we'll have a clean pass through all CI tests in a few minutes.

@climbfuji

Copy link
Copy Markdown
Collaborator Author

@dustinswales @grantfirl I think this is good now. We've got the tendencies and C3 updates in this branch (updated today from main), and the tests all pass.

@dustinswales

Copy link
Copy Markdown
Member

@dustinswales @grantfirl I think this is good now. We've got the tendencies and C3 updates in this branch (updated today from main), and the tests all pass.

@climbfuji Thanks for these bug fixes.
(I apologize for my slow response. I'm in the MPAS workshop this week)

@climbfuji climbfuji changed the title DRAFT: Update to capgen-ng Transition CCPP framework from ccpp-prebuild to ccpp-capgen v1 Jun 30, 2026
@climbfuji climbfuji force-pushed the feature/capgen-ng branch from 50fa6f8 to fa33ff6 Compare June 30, 2026 22:25
@climbfuji climbfuji marked this pull request as ready for review June 30, 2026 22:25
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants