-
Notifications
You must be signed in to change notification settings - Fork 120
Revise canopy interception schemes #469
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
Open
zhongwangwei
wants to merge
9
commits into
CoLM-SYSU:master
Choose a base branch
from
zhongwangwei:master
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Fully revised CLM4.5, CLM5, Noah-MP, MATSIRO, VIC, and JULES canopy interception schemes for improved physical consistency and phase conservation. Major changes include: (1) strict separation and conservation of rain/snow storage and release, (2) improved drainage and unloading logic based on official model documentation and source code, (3) enhanced documentation and bug fixes for mass balance and storage updates, and (4) addition of a minimum precipitation threshold for numerical stability. These updates address previous issues with phase change handling and ensure closer alignment with reference model implementations.
Introduced the MaxWaterInt variable to the list of local variables in the leaf interception subroutine, likely in preparation for additional logic or calculations involving maximum water interception.
Introduce interception balance validation and multiple scheme fixes to prevent canopy water mass-balance drifts and improve debug diagnostics. - Add INTERCEPTION_BALANCE_TOL parameter and new check_interception_balance(scheme_name, ...) subroutine that validates component consistency (ldew == ldew_rain+ldew_snow), non-negativity, and flux consistency (qintr == qintr_rain+qintr_snow). Called in CoLMDEBUG blocks for CoLM2014, CoLM202x, CLM4, CLM5, NoahMP, MATSIRO, VIC, and JULES. - Ensure ldew is resynchronized with its rain/snow components at entry (ldew = ldew_rain + ldew_snow) for multiple schemes to avoid initialization/restart inconsistencies. - Adopt CoLM2014 pattern of keeping ldew as the sum of components after updates; remove duplicate/incorrect in-place ldew arithmetic in several schemes and update component-wise additions where appropriate. - NoahMP: release canopy water separately by phase and zero per-phase storages when vegetation disappears to preserve phase conservation. - VIC: fix per-vegetation ↔ grid-scale conversions by consistently using sigf_safe, scale throughfall (tex_*) appropriately, and adjust throughfall/excess handling when snow melts. - JULES: make snow unloading continuous (not conditional on snowfall), drain excess after phase change (cap rain/snow capacities), and include drained xsc contributions in ground precipitation fluxes. - MATSIRO & other scheme-specific corrections: resync ldew after weighted updates and remove duplicate updates. These changes are targeted at improving numerical robustness and making CoLMDEBUG checks meaningful by catching and reporting interception bookkeeping errors early.
Revise MOD_LeafInterception.F90 to correctly handle canopy interception and preserve rain/snow phase conservation. Changes: separate handling of ldew_rain/ldew_snow and preserve phase when vegetation disappears; refactor interception math (ppi/ppl, xsc_rain/xsc_snow, tti/tex calculation) and compute pg and qintr from separated components; add post-interception drainage to clamp ldew_rain and ldew_snow to canopy capacities; add bounds check for can_ratio (clamp to [0,1]) and a debug consistency check; update background unloading rate to JULES value (2.31e-6 s^-1). These fixes prevent unphysical phase conversion and overflow in discrete timesteps and improve physical consistency of throughfall/interception calculations.
Clamp negative precipitation inputs and harden JULES canopy interception logic. Changes include: non-negative clamping of rain/snow/irrigation inputs to avoid mass-balance failures; explicit separation and preservation of liquid/solid canopy storage (ldew_rain / ldew_snow) and updated comment clarifying ldew_snow is frozen water; apply vegetation fraction (sigf) scaling to operate physics on vegetated area and rescale states back to grid-average; compute grid-scale precipitation/storage references (p0_l, w_l) and robust mass-balance checks; ensure continuous snow unloading (background + melt) independent of current snowfall; refine melt/freeze rate math and drain excess after phase change; small refactors and numeric stability fixes (epsilon, tiny, safe sigf). Also added revision history notes and various comment fixes.
Implement JULES-consistent canopy snow behavior: add wind-dependent snow unloading (constant + wind term), clamp negative canopy state, and compute melt/freezing using precomputed dimensionless factors to avoid large intermediate products. Annotate unused/readonly interface args and unit comments, make small numerical and type fixes (use r8 literals, EPSILON), limit EXP() argument to avoid underflow, and allow negative phase-separated interception rates to represent canopy release. Also ensure non-vegetated branch clamps raw precipitation before adding stored water to preserve mass balance.
Add branches for DEF_Interception_scheme == 7 (JULES) and == 8 (CoLM202x) in MOD_LeafTemperaturePC.F90. Each branch applies the same evaporation logic used for other schemes: reduce ldew_rain by evplwet*deltim when possible, otherwise zero ldew_rain and subtract evaporation from ldew_snow, then update ldew. This prevents an abort for these scheme values and ensures consistent interception evaporation behavior.
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Revise canopy interception schemes