ESCOMP / atmospheric_physics

CCPP-enabled Atmospheric Physics
Apache License 2.0
4 stars 19 forks source link

wet-to-dry conversion not CCPP compliant #48

Closed gold2718 closed 1 year ago

gold2718 commented 2 years ago

The routines, wet_to_dry_run and dry_to_wet_run are not CCPP compliant because they use the same variable (and therefore same standard name) for both the wet and the dry state.

In addition, these routines use optional arguments which are not supported by the CCPP Framework.

The output variables of these routines need to be separate from the associated input state variable.

To avoid the use of optional arguments, separate routines need to be provided for water vapor and standard water species. In addition, to allow conversion of other constituents and groups of constituents, a routine that takes an array of constituents as input should be provided. One issue here is how to define the input and output arrays. Currently, we do not have a naming scheme for a constituent array that would distinguish 'dry' from 'wet' (or 'moist', are we even going to support 'moist'?†) and there will always elements of these arrays which are not convertible between 'wet' and 'dry'.

One possibility is to try and use the framework to generate code to keep track of the state of variables inside a constituent array. A companion constituent property array could be required that would keep track of the state of each of the variables, however, there is no easy way to track variables which are separate indices into the constituent array. Ideas?

† In CAM, we determine 'wet' via a namelist variable specifying the water species which participate in the 'wet air mass'. However, the CCPP standard name rules distinguished between _wrt_moist_air and _wrt_total_mass (see rule 5). My inclination is to go with _wrt_total_mass as that is how we will usually use the variables. Thoughts?

gold2718 commented 2 years ago

Another benefit of having a companion constituent properties array as an input, is that it would provide the source for the constituent information (e.g., cnst_name, mixing ratio info). This would be an input to schemes such as qneg.