From @billsacks on March 17, 2017 20:38
Currently, the CLM driver loop looks like this, in terms of pieces relevant to this issue:
-
Compute pre-dynlu gridcell-level water mass
-
Adjust column areas via dynamic landunits
-
Compute post-dynlu gridcell-level water mass
-
Compute adjustment fluxes based on difference between pre- and post-dynlu gridcell-level water mass
-
Compute pre-physics column-level water mass
-
Do physics
-
Compute post-physics column-level water mass
-
Do column-level balance checks using the pre- and post-physics column-level water mass and the relevant fluxes
As long as you trust:
-
that the calculation of the dynlu adjustment fluxes is done correctly, and
-
that the column-level fluxes used in the column-level balance checks correctly mirror the relevant gridcell-level fluxes
then you can convince yourself that this sequence ensures gridcell-level conservation.
However, it would be more robust and more reassuring if we performed gridcell-level water conservation checks, bracketing essentially the entire driver run loop (including dynamic landunits adjustments as well as the physics). Ideally, the fluxes considered in these gridcell-level checks would be the actual fluxes received by and sent from CLM (gridcell-level precipitation, runoff, etc.). This last point is particularly important for runoff, which is now split into a few different terms, and it seems easy for some term to accidentally not be included in any of the runoff terms sent to the coupler - so we should do these gridcell-level balance checks using the runoff terms that are actually sent to the coupler.
The sequence would then look like:
-
Compute beginning gridcell-level water mass
-
Adjust column areas via dynamic landunits
-
Compute post-dynlu gridcell-level water mass
-
Compute adjustment fluxes based on difference between pre- and post-dynlu gridcell-level water mass
-
Compute pre-physics column-level water mass
-
Do physics
-
Compute post-physics column-level water mass; also average this to the gridcell level
-
Do column-level balance checks using the pre- and post-physics column-level water mass and the relevant fluxes
-
Do gridcell-level balance checks using the beginning gridcell-level water mass and ending gridcell-level water mass. For this check, ideally use the gridcell-level fluxes that are passed to and from CLM
Note that this plan still maintains the column-level balance checks: These are useful for seeing which column(s) have balance errors. But it's possible that we could avoid doing these in general, and just drill down to the column-level if a gridcell-level balance check fails.
Copied from original issue: NCAR/CLM#3
From @billsacks on March 17, 2017 20:38
Currently, the CLM driver loop looks like this, in terms of pieces relevant to this issue:
Compute pre-dynlu gridcell-level water mass
Adjust column areas via dynamic landunits
Compute post-dynlu gridcell-level water mass
Compute adjustment fluxes based on difference between pre- and post-dynlu gridcell-level water mass
Compute pre-physics column-level water mass
Do physics
Compute post-physics column-level water mass
Do column-level balance checks using the pre- and post-physics column-level water mass and the relevant fluxes
As long as you trust:
that the calculation of the dynlu adjustment fluxes is done correctly, and
that the column-level fluxes used in the column-level balance checks correctly mirror the relevant gridcell-level fluxes
then you can convince yourself that this sequence ensures gridcell-level conservation.
However, it would be more robust and more reassuring if we performed gridcell-level water conservation checks, bracketing essentially the entire driver run loop (including dynamic landunits adjustments as well as the physics). Ideally, the fluxes considered in these gridcell-level checks would be the actual fluxes received by and sent from CLM (gridcell-level precipitation, runoff, etc.). This last point is particularly important for runoff, which is now split into a few different terms, and it seems easy for some term to accidentally not be included in any of the runoff terms sent to the coupler - so we should do these gridcell-level balance checks using the runoff terms that are actually sent to the coupler.
The sequence would then look like:
Compute beginning gridcell-level water mass
Adjust column areas via dynamic landunits
Compute post-dynlu gridcell-level water mass
Compute adjustment fluxes based on difference between pre- and post-dynlu gridcell-level water mass
Compute pre-physics column-level water mass
Do physics
Compute post-physics column-level water mass; also average this to the gridcell level
Do column-level balance checks using the pre- and post-physics column-level water mass and the relevant fluxes
Do gridcell-level balance checks using the beginning gridcell-level water mass and ending gridcell-level water mass. For this check, ideally use the gridcell-level fluxes that are passed to and from CLM
Note that this plan still maintains the column-level balance checks: These are useful for seeing which column(s) have balance errors. But it's possible that we could avoid doing these in general, and just drill down to the column-level if a gridcell-level balance check fails.
Copied from original issue: NCAR/CLM#3