ED2 switches

Finite canopy radius (CROWN_MOD)

Calculating crown area

Crown area comes from @dietze_2008_capturing. Crown area calculated by allometry in utils/allometry.f90:L633 (inside subroutine area_indices), as min(1, nplant * dbh2ca(dbh, hite, sla, pft)). dbh2ca is defined in utils/allometry.f90:L373 as:

ca = b1Ca[pft] * dbh ^ b2Ca[pft]

Note that crown area is restricted such that "Local LAI / Crown area" is never less than one (i.e you cannot have more crown area than leaf area index -- your maximum crown area is the leaf area index):

loclai = sla * size2bl(dbh, hite, pft)
ca = min(loclai, ca)

where size2bl is the leaf biomass allometry (so leaf biomass; therefore, sla * size2bl gives LAI).

The allometry coefficients b1Ca and b2Ca have the following defaults (from init/ed_params.f90:L3055):

Note that only tropical PFTs are affected by the allometry model (IALLOM); coefficient adjustments are wrapped in if (is_tropical(pft)).

If two cohorts are fused, their crown areas are summed, up to a maximum of 1 (in utils/fuse_fiss_utils.f90:L2932).

Radiative transfer

In src/dynamics/radiate_driver.f90:L550: If disabled, set canopy crown area for all patches to 1. If enabled, set finite crown areas for each cohort.

Crown area array (for each cohort) is passed to the various radiative transfer models (see ICANRAD parameter). Inside the RTMs, it is the cai variable.

The following sections focus on the contributions of finite canopy radius to radiative transfer calculations. For the full descriptions, consult the "Canopy radiative transfer" module section.

Two-stream

In the two-stream model, crown area is used to correct mu_bar (average inverse optical depth per unit leaf and stem area) for crown area (resulting variable mu):

mu = -etai / log(1 - cai + cai * exp(-etai / (cai * mu_bar)))

where etai is the total area index (TAI = LAI * clumping factor + WAI) of the layer.

(If cai = 1, this simplifies to just mu_bar).

In the longwave (thermal), crown area is also used as a linear scaling of the blackbody emissivity.

In the shortwave two-stream model, the crown area correction also happens for direct radiation (mu0):

mu0 = -etai / log(1 - cai + cai * exp((-proj_area * etai) / (cai * czen)))

where czen is the cosine of the solar zenith angle (radians) and proj_area is the projected area, calculated as a function of leaf orientation angle (orient):

phi1 = 0.5 - orient * (0.633 + 0.33 * orient)
phi2 = 0.877 * (1 - 2 * phi1)
proj_area = phi1 + phi2 * czen

These calculations follow CLM 4.5 [@clm45_note] (section 3.1, eq. 3.3), which in turn is based on @sellers_1985_canopy. This is described in more detail in the canopy radiative transfer section.

Multiple-scatter

In the multiple-scatter model [@zhao_2005_multiple; @zhao_2006_modeling], crown area is used calculate the exposed total area index (TAI) of each layer (locetai):

locetai = etai / cai

Crown area is also used to adjust the layer transmittance coefficient for beam radiation (tau_beam):

lambda = proj_area / mu
tau_beam = (1 - cai) + cai * exp(-lambda * locetai)

A similar correction is applied to diffuse radiation, but the contribution from each hemisphere has to be integrated. This uses the analytical solution for that integral.

d1 = phi1 * locetai
d2 = phi2 * locetai
tau_diff = (1 - cai) - cai * exp(-d1 * d2) * (d1^2 * exp(d1) * eifun(-d1) + (d1 - 1))

where eifun is the exponential integral function.

Plant hydraulics

Source: dynamcs/plant_hydro.f90.

Subroutine plant_hydro_driver: Crown area for each cohort calculated as crown_area / nplant, then passed to calc_plant_water_flux (as variable crown_area).

Calculate the root area index (RAI) at each depth:

RAI = broot_d * SRA * root_frac / (4 * crown_area)

where SRA is the PFT specific root area parameter, and root_frac is the fraction of roots in that layer (function of PFT parameter root_beta and depth).

Calculate the soil-root water conductance at each depth:

gw_cond = (4 * crown_area) * soil_cond * sqrt(RAI) / (pi * dslz)

where soil_cond is soil conductivity at that depth and dslz is the soil layer thickness. This is based on @katul_2003_relationship.

Canopy turbulence

In file dynamics/canopy_struct_dynamics.f90, subroutine canopy_turbulence.

Crown area used in calculation of the wind profile extinction coefficients.

#-- dynamics/canopy_struct_dynamics.f90:L470 --
extinct_full = crown_area * exp(-0.25 * lai / crown_area) + (1 - crown_area)
extinct_full = crown_area * exp(-0.5 * lai / crown_area) + (1 - crown_area)
veg_wind = max(ugbmin, uh[i - 1] * extinct_half)
uh[i] = uh[i - 1] * extinct_full

Note that there is a copy of the same calculation performed in double precision (subroutine canopy_turbulence8) later in the file.

Crown area is also used to calculate the open canopy fraction of each cohort by subroutine update_patch_derived_props (file utils/update_derived_props.f90:L43). That subroutine is in turn called by subroutine structural_growth_eq_0 (file dynamics/structural_growth.f90). This open canopy fraction is used to calculate the canopy roughness (rough).

rough = snow_rough * snowfac_can +
    (soil_rough * opencan_frac + veg_rough * (1 - opencan_frac)) *
    (1 - snowfac_can)

Open canopy fraction is also used to calculate the net ground conductance (ggnet):

ggnet = ggbare * ggveg / (ggveg + ggbare * (1 - opencan_frac))

Nitrogen limitation of photosynthesis (N_PLANT_LIM)

Calculating N supply and demand for live tissue growth

Basically, N limitation places a limit on the fraction of stomata that are open (due to N limitation; cpatch%fsn).

Calculating changes in live biomass (subroutines dbalive_dt and dbalive_dt_eq_0 in dynamics/growth_balive.f90).

If plant limitation enabled, call subroutine potential_N_uptake to see what would happen if stomata were open. This sets the value of potential N uptake (N_uptake_pot).

If no limitation, set fraction of open stomata (from N limitation; fsn) to 1. Otherwise, calculate N limitation factor.

#- dynamics/growth_balive.f90:L293
nitrogen_supply = plant_N_supply_scale * broot * mineralized_soil_N
fsn = nitrogen_supply / (nitrogen_supply + N_uptake_pot)

Initialization from near bare ground

Subroutines near_bare_ground_init and near_barea_ground_big_leaf_init (in init/ed_nbg_init.f90):

If there is N limitation, initialize as follows:

If no N limitation, set all of these to zero.

Nitrogen limitation of decomposition (N_DECOMP_LIM)

Calculation of N immobilization factor (subroutine resp_f_decomp, in dynamics/soil_respiration.f90).

N decomposition limitation affects the decomposition fraction (csite%f_decomp). If no limitation, this is set to 1.

If limitation, calculate similarly to plant (supply relative to demand):

#-- dynamics/soil_respiration.f90:L226
Lc = exp(-3 * structural_soil_L / structural_soil_C)

N_immobilization_demand = A_decomp * Lc * decay_rate_stsc * structural_soil_C *
  ((1 - r_stsc) / c2n_slow - 1 / c2n_structural)

f_decomp = N_immobil_supply_scale * mineralized_soil_N / 
  (N_immobilization_demand + N_immobil_supply_scale * mineralized_soil_N)

Whether N decomposition limitation is enabled also affects decay rate of slow carbon pool if using DECOMP_SCHEME = 2. With N limitation, decay rate is 100.2 year^-1^; otherwise, 0.2 year^-1^.

Old notes

ED modules

NOTE: Not a real section; just brainstorming notes for now Details about these sub-models will probably makes their way into the methods and/or appendices.

High priority

These are switches that I understand (more-or-less), and that I think will be most relevant to FoRTe.

Medium priority

These are switches that may be relevant to FoRTE, but may be harder to pull off.

Lower priority

These are processes that I think will not have huge impacts, are farther-removed from the FoRTE project goals, or are things I simply don't understand very well (particularly all the micro-meteorology stuff).

Almost-certainly omit

These configurations are almost certainly irrelevant to the goals of this paper or will not apply at UMBS (e.g. grass or tropical species). Mostly for reference.



ashiklom/fortebaseline documentation built on May 9, 2020, 1:56 a.m.