NCAR / ccpp-scm

CCPP Single Column Model
Other
13 stars 50 forks source link

V6 release sdfs/namelists #317

Closed grantfirl closed 2 years ago

grantfirl commented 2 years ago

This pull request accomplishes the following tasks:

grantfirl commented 2 years ago

Looks good, but a question for my own benefit: what is the deal with all of these "*_ps" suites? They seem to be identical to the main suite but missing some surface schemes?

You've correctly identified the difference! They are suites with the surface schemes removed in favor of using data for surface fluxes and a special CCPP scheme that backs out some variables needed by PBL schemes from the specified surface fluxes. Many SCM cases like to use specified surface fluxes since it removes a rather large degree of freedom for folks interested in how the atmospheric physics (only) responds to a given set of forcing.

The way the code is set up is for the run script to use the right SDF (the special *_ps ones) if someone requests to run a case with specified surface fluxes. This is transparent to the user who doesn't need to explicitly tell the code to use the special suite. I'm not in love with how I implemented this and there are certainly ways to do this so as not to have to maintain two different SDFs...

grantfirl commented 2 years ago

Looks good, but a question for my own benefit: what is the deal with all of these "*_ps" suites? They seem to be identical to the main suite but missing some surface schemes?

You've correctly identified the difference! They are suites with the surface schemes removed in favor of using data for surface fluxes and a special CCPP scheme that backs out some variables needed by PBL schemes from the specified surface fluxes. Many SCM cases like to use specified surface fluxes since it removes a rather large degree of freedom for folks interested in how the atmospheric physics (only) responds to a given set of forcing.

The way the code is set up is for the run script to use the right SDF (the special *_ps ones) if someone requests to run a case with specified surface fluxes. This is transparent to the user who doesn't need to explicitly tell the code to use the special suite. I'm not in love with how I implemented this and there are certainly ways to do this so as not to have to maintain two different SDFs...

I figured I'd write this down for posterity (mainly for my own benefit) before I forgot...

I think that maybe a cleaner way of doing this would be to have one SDF for each suite, but to have it differ from the FV3 SDFs by having 2 extra groups -- one that gets called when surface schemes should be called and one that gets called when surface fluxes are specified. This way, it could just be handled in the SCM Fortran by using the CCPP API group calling functionality rather than all of the run script nonsense with duplicate SDFs that we're using now.