There are many variables related to runoff generated in ELM/CLM. These fluxes are then passed to MOSART with different names, need to be very clear what do they mean.
The hydrologic processes for CLM 4.5 are clearly represented in below diagram. I got it from Gautam but don’t know if he made it. (more here for CLM 5).

Basically, the runoff generated by ELM has three parts in a simulation with fixed landuse: 1) surface runoff, 2) subsurface runoff, and 3) glacier, wetland, and lakes (GWL) for water balance.
1) Surface runoff is qflx_surf + qflx_h2osfc_surf at column level or qflx_rofliq_qsur_grc + qflx_rofliq_qsurp_grc at grid level. The first term is called “surface runoff”, which is excess water from soil saturation (QOVER in ELM output); the second term is called surface water runoff, which is the outflow from surface water storage such as pond (QH2OSFC in ELM output). It is very confusing by looking at the two names in the output.
2) Subsurface runoff is qflx_drain + qflx_drain_perched at column level or qflx_rofliq_qsub_grc + qflx_rofliq_qsubp_grc at grid level. The first term is called “sub-surface drainage” (QDRAI in ELM output); the second term is called “perched wt drainage” (QDRAI_PERCH in ELM output). These two terms are pretty straightforward.
3) GWL runoff (QRGWL in ELM output) is the glacier, wetland and lakes water balance residual component which is not routed in MOSART
The sum of the three terms is QRUNOFF in ELM output file. These three terms are passed to MOSART for routing and named QSUR_LIQ, QSUB_LIQ, and QGWL_LIQ in MOSART’s output file. The fluxes that enters MOSART channels for routing in E3SM V1 are the sum of QSUR_LIQ and QSUB_LIQ where QSUR_LIQ = ELM-QOVER+ELM-QH2OSFC; QSUB_LIQ = ELM-QDRAI+ELM-QDRAI_PERCH.
If the ELM simulation is a transient run (i.e. the landuse fraction updates every year), then there will be an additional term QFLX_LIQ_DYNBAL (liq dynamic land cover change conversion runoff flux) that ensures the water mass conservation when landuse change happens. More details can be found here. Note that this term could introduce negative runoff as well. In this case, QRUNOFF = QOVER + QH2OSFC + QDRAI + QDRAI_PERCH + QRGWL - QFLX_LIQ_DYNBAL.
Below is a plot that breaks all the runoff components of a random January in a transient run.

how ELM partitions water into runoff
In the current ELM source, runoff generation is controlled by a sequence of hydrology routines: canopy interception, snow water movement, surface runoff, infiltration, soil water movement, and drainage. This is useful to keep in mind because not all runoff means the soil column is full. Some water can be routed to fast runoff before it has a chance to become stored soil water.
At the canopy top, rain and snow are first separated into canopy interception and throughfall. For vegetated snow-free canopy, the intercepted fraction is
fpi = 0.25 * (1 - exp(-0.5 * (ELAI + ESAI)))
The canopy storage capacity is
h2ocanmx = dewmx * (ELAI + ESAI)
Here fpi is the precipitation interception fraction by the canopy, ELAI is exposed leaf area index, and ESAI is exposed stem area index. dewmx is the maximum canopy water storage per unit leaf/stem area, so h2ocanmx is the total canopy water holding capacity. Larger ELAI + ESAI increases both interception and canopy storage.
Any canopy water above this capacity becomes canopy drip. Throughfall plus canopy drip becomes qflx_prec_grnd_rain and qflx_prec_grnd_snow. If vegetation is snow-covered, the code skips canopy interception and sends rain/snow directly to the ground.
After snow processes, the liquid water arriving at the soil surface is qflx_top_soil. The first fast runoff pathway is saturation-excess surface runoff:
fsat = wtfact * exp(-0.5 * fover * zwt)
qflx_surf = fsat * qflx_top_soil
Here fsat is the saturated contributing-area fraction, zwt is water table depth, and fover controls how quickly saturated area declines as the water table gets deeper. qflx_top_soil is the liquid water flux arriving at the soil surface after canopy and snow processes, and qflx_surf is the immediate saturation-excess surface runoff flux. wtfact comes from FMAX in the surface dataset. So FMAX is not soil porosity and not the maximum water storage of the soil. It is the maximum saturated contributing-area fraction. Reducing FMAX reduces the fraction of the surface that immediately contributes to QOVER, leaving more water available for infiltration.
The remaining water is split between exposed soil and surface-water storage:
qflx_in_soil = (1 - FH2OSFC) * (qflx_top_soil - qflx_surf)
qflx_in_h2osfc = FH2OSFC * (qflx_top_soil - qflx_surf)
FH2OSFC is the fraction of the column covered by surface-water storage. qflx_in_soil is the part of the remaining water that is allowed to enter the soil infiltration calculation. qflx_in_h2osfc is the part routed to surface-water storage, which can later produce QH2OSFC.
The default maximum infiltration rate is controlled mainly by near-surface saturated hydraulic conductivity and ice impedance:
qinmax = (1 - fsat) * minval(10**(-e_ice * icefrac(1:3)) * hksat(1:3))
qinmax is the maximum infiltration rate. hksat(1:3) is the saturated hydraulic conductivity of the top three soil layers, icefrac(1:3) is the ice-filled fraction of those layers, and e_ice controls how strongly soil ice reduces infiltration. The minval means the least conductive of the top three layers can limit infiltration.
One quick namelist-only sensitivity test is use_modified_infil = .true., which removes the (1 - fsat) multiplier from this default non-VIC infiltration capacity calculation. This is a global algorithm change, so it is useful as a sensitivity test but should be interpreted carefully.
Therefore, if a dry arid gridcell still produces too much fast runoff during rainfall events, hksat in the top few soil layers is often a more direct knob than porosity. Increasing watsat increases storage capacity once water is in the soil, but it does not by itself guarantee that incoming water will infiltrate.
Water that does infiltrate enters the top boundary of the soil water solver as qflx_infl. ELM does not directly partition rainfall into each soil layer. It solves vertical redistribution through the soil column using hydraulic conductivity, matric potential, layer thickness, soil ice, and root water uptake.
Subsurface runoff is generated later as drainage/baseflow. In the default non-VIC hydrology, the TOPMODEL-style baseflow term is
rsub_top_max = min(10 * sin(slope), rsub_top_globalmax)
rsub_top = imped * rsub_top_max * exp(-zwt / hkdepth)
rsub_top is the TOPMODEL-style baseflow or subsurface drainage rate. rsub_top_max is its local upper limit, slope is the topographic slope, imped is the soil-ice impedance factor, and hkdepth is the decay depth for saturated hydraulic conductivity. rsub_top_globalmax is read from the ELM parameter file and defaults to 10 if missing. In contrast, FMAX, fover, fdrain, pc, soil texture, and topographic controls are surface-data fields. So for sensitivity tests: reduce FMAX if QOVER is too high, increase near-surface hksat if infiltration-excess runoff is too high, reduce rsub_top_globalmax if QDRAI is too high, and increase watsat only if soil storage capacity itself is the limiting factor.
some other highlights/comments
- In default, irrigation is added directly on the ground, bypassing the canopy.
- There’s a elevation standard deviation term (STD_ELEV) in ELM surface data to describe the microtopology in the grid, which is used to dynamically calculate the fraction of surface water storage (FH2OSFC) over the grid.
- CLM 4.5 history field names can be found here.
- In current hydrology scheme, there’s a pre-defined term
qflx_floodtaking flood flux from the river model (RTM) and re-applied it on top of the soil, this can be re-activated when coupling ELM and MOSART in terms of flood inundation. Not sure if we can directly add inundated water intoH2OSFChere.
Loading comments...