PecanProject / pecan

The Predictive Ecosystem Analyzer (PEcAn) is an integrated ecological bioinformatics toolbox.
www.pecanproject.org
Other
202 stars 234 forks source link

Sipnet Soil Inputs #1645

Open tonygardella opened 7 years ago

tonygardella commented 7 years ago

Add capability to write to Sipnet soil parameters.

Description

Extend Sipnet coupling scripts to be able to read in a Sipnet processed soil parameters and write out Sipnet parameters.

Possible Implementation

Examples of implementation can be found here from other model coupling scripts: Jules

annethomas commented 6 years ago

@mdietze You mentioned these Sipnet parameters for soil relevance: https://github.com/PecanProject/pecan/blob/develop/models/sipnet/inst/template.param#L57-L62 I've been looking at soilWFracInit, soilWHC, possibly waterRemoveFrac; immedEvapFrac and fastFlowFrac also seem relevant.

The soil2netcdf function calculates volume_fraction_of_water_in_soil_at_saturation, at field_capacity, and at wilting_point. Sipnet asks for soilWHC in cm ("precipitation equivalent"). My best guess is that this would be equivalent to volume_fraction at saturation, multiplied by depth or something to convert to cm, and then soilWFracInit would be volume_frac at field capacity converted to a fraction of the volume_frac at saturation. Based on Braswell et al 2005, waterRemoveFrac (Fraction of soil water removable in 1 day) is available water capacity, so the difference between field capacity and wilting point.

Questions:

  1. Is multiplying by depth (and converting from m) the correct way to get cm for soilWHC? If so do we want the rooting depth? Is that a parameter we can get from pecan?
  2. Should soilWHC actually be field capacity, and soilWFracInit be determined by something other than field capacity such as the initial climate?
  3. For immedEvapFrac, I know there are surface evaporation rates for soil types; is that something that's already calculated anywhere or should that be added to the soil calculations or implemented here?
  4. Not sure what the fastFlowFrac is.
  5. I'm assuming litter variables would be separate from the soil coupling?
mdietze commented 6 years ago
  1. That sounds right for soilWHC except the question is what depth to use? In most systems the relevant depth for available soil moisture is much deeper than the depth we have soil texture info for -- the exception being when the soil texture data indicate bedrock or hardpan. @ankurdesai how have you set soilWHC for sipnet in the past? For rooting depth, there's review papers on rooting depth distributions in the literature -- if that's not in the bety trait table it should be added.
  2. no, soilWHC is the saturation capacity, not the field capacity. As for soilWFracInit I don't think that should be set to field capacity. Strikes me as an IC parameter, not a soil physics parameter.
  3. Dunno. I think of evap as being driven by VPD and surface conductivity, with the latter being a function of windspeed and stand characteristics. If there's papers that include a soil texture component to that could you share those so we can evaluate them?
  4. Me neither. @ankurdesai ?
  5. litter hydraulics probably should go in here. Litter pool IC should go in the IC.

Bonus: I don't see how waterRemoveFrac could be equivalent to available capacity

annethomas commented 6 years ago
  1. soilWFracInit is definitely an IC parameter; we had put it on the shelf and kept the default. I wasn't sure if soil info was part of what we needed to determine the best value.

  2. I have an environmental biophysics textbook, An Introduction to Environmental Biophysics by Campbell and Norman 1998, with a table for cumulative evaporation (broken into surface and total) by texture. The text does describe VPD and hydraulic conductivity controlling evaporation. I would think immedEvapFrac is just the surface, and coarser particles hold less at the surface so immediate evaporation is lower. The table lists cumulative surface evaporation in mm as clay loam: 12, loam: 9, clay: 6, and sand: 3. Just a sampling of textures and no external citation so maybe not that useful.

  3. Don't we need litter data in order to calculate litter hydraulics? Where would that come from?

  4. waterRemoveFrac--Here's what I was basing that on, with f being waterRemoveFrac: "The potential transpiration (Tpot) — that is, the level of transpiration possible with moisture-saturated soil — depends on GPPpot (the level of photosynthesis without water stress) and WUE:

"WUE = KWUE/VPD "Tpot = GPPpot/WUE

"Tpot is then converted into units of cm H2O day-1. The total amount of water available to the plants over the course of a day (Wa) is a fraction (f) of the total amount of water in the soil (W). Actual transpiration (T) is then given by:

" T = Min(Tpot, Wa) " So it was pretty vague but I was interpreting "total amount of water available to plants" as available water capacity, which would be converted to fraction of total water. Not sure how the per day part would factor in.

annethomas commented 6 years ago

Also, f is listed as "Total fraction of water removable in one day" earlier in the Braswell paper.

ankurdesai commented 6 years ago

I'll have to jog my memory on the Sipnet parameters. Dave Moore might be faster at getting back. I'll think about it and get back to you on call tomorrow.

annethomas commented 6 years ago

waterRemoveFrac depends on plant physics, should ideally be pft. Too complicated. immedEvapFrac = interception (function of LAI) -- pft? fastFlowFrac = direct to drainage; soil hydraulic properties. Leave at default for now.

ankurdesai commented 6 years ago

Here's the comments in sipnet.c (open in Emacs for pretty printing!) typedef struct Parameters { // parameters read in from file: // initial state values: double plantWoodInit; // g C m^-2 ground area in wood (above-ground + roots) double laiInit; // initial leaf area, m^2 leaves m^-2 ground area (multiply by leafCSpWt to get initial plant leaf C) double litterInit; // g C m^-2 ground area double soilInit; // g C m^-2 ground area double litterWFracInit; // unitless: fraction of litterWHC double soilWFracInit; // unitless: fraction of soilWHC double snowInit; // cm water equiv.

// 7 parameters

// parameters:

// photosynthesis: double aMax; / max photosynthesis (nmol CO2 g^-1 leaf sec^-1) assuming max. possible par, all intercepted, no temp, water or vpd stress / double aMaxFrac; // avg. daily aMax as fraction of instantaneous double baseFolRespFrac; // basal foliage resp. rate, as % of max. net photosynth. rate double psnTMin, psnTOpt; // min and optimal temps at which net photosynthesis occurs (degrees C) double dVpdSlope, dVpdExp; // dVpd = 1 - dVpdSlope vpd^dVpdExp double halfSatPar; / par at which photosynthesis occurs at 1/2 theoretical maximum (Einsteins m^-2 ground area day^-1) */ double attenuation; // light attenuation coefficient

// 9 parameters

// phenology-related: double leafOnDay; // day when leaves appear double gddLeafOn; // with gdd-based phenology, gdd threshold for leaf appearance double soilTempLeafOn; // with soil temp-based phenology, soil temp threshold for leaf appearance double leafOffDay; // day when leaves disappear double leafGrowth; // add'l leaf growth at start of growing season (g C m^-2 ground) double fracLeafFall; // add'l fraction of leaves that fall at end of growing season double leafAllocation; // fraction of NPP allocated to leaf growth double leafTurnoverRate; / average turnover rate of leaves, in fraction per day NOTE: read in as per-year rate! */

// 8 parameters

// autotrophic respiration: double baseVegResp; / vegetation maintenance respiration at 0 degrees C (g C respired g^-1 plant C day^-1) NOTE: only counts plant wood C - leaves handled elsewhere (both above and below-ground: assumed for now to have same resp. rate) NOTE: read in as per-year rate! / double vegRespQ10; // scalar determining effect of temp on veg. resp. double growthRespFrac; // growth resp. as fraction of (GPP - woodResp - folResp) double frozenSoilFolREff; // amount that foliar resp. is shutdown if soil is frozen (0 = full shutdown, 1 = no shutdown) double frozenSoilThreshold; // soil temperature below which frozenSoilFolREff and frozenSoilEff kick in (degrees C)

// 5 parameters

// soil respiration: double litterBreakdownRate; / rate at which litter is converted to soil/respired at 0 degrees C and max soil moisture (g C broken down g^-1 litter C day^-1) NOTE: read in as per-year rate / double fracLitterRespired; / of the litter broken down, fraction respired (the rest is transferred to soil pool) / double baseSoilResp; / soil respiration at 0 degrees C and max soil moisture (g C respired g^-1 soil C day^-1) NOTE: read in as per-year rate! / double baseSoilRespCold; / soil respiration at 0 degrees C and max soil moisture when tsoil < coldSoilThreshold (g C respired g^-1 soil C day^-1) NOTE: read in as per-year rate! /

// 6 parameters

double soilRespQ10; // scalar determining effect of temp on soil resp. double soilRespQ10Cold; // scalar determining effect of temp on soil resp. when tsoil < coldSoilThreshold

double coldSoilThreshold; // temp. at which use baseSoilRespCold and soilRespQ10Cold (if SEASONAL_R_SOIL true) (degrees C) double E0; // E0 in Lloyd-Taylor soil respiration function double T0; // T0 in Lloyd-Taylor soil respiration function double soilRespMoistEffect; // scalar determining effect of moisture on soil resp.

// 8 parameters

// moisture-related: double waterRemoveFrac; / fraction of plant available soil water which can be removed in one day without water stress occurring / double frozenSoilEff; / fraction of water that's available if soil is frozen (0 = none available, 1 = all still avail.) NOTE: if frozenSoilEff = 0, then shut down psn. even if WATER_PSN = 0, if soil is frozen (if frozenSoilEff > 0, it has no effect if WATER_PSN = 0) / double wueConst; // water use efficiency constant double litterWHC; // litter (evaporative layer) water holding capacity (cm) double soilWHC; // soil (transpiration layer) water holding capacity (cm) double immedEvapFrac; // fraction of rain that is immediately intercepted & evaporated double fastFlowFrac; // fraction of water entering soil that goes directly to drainage double snowMelt; // rate at which snow melts (cm water equiv./degree C/day) double litWaterDrainRate; // rate at which litter water drains into lower layer when litter layer fully moisture-saturated (cm water/day) double rdConst; // scalar determining amount of aerodynamic resistance double rSoilConst1, rSoilConst2; / soil resistance = e^(rSoilConst1 - rSoilConst2 W1) where W1 = (litterWater/litterWHC) / double m_ballBerry ; // slope for the Ball Berry relationship double leafCSpWt; // g C m^-2 leaf area double cFracLeaf; // g leaf C * g^-1 leaf

double woodTurnoverRate; / average turnover rate of woody plant C, in fraction per day (leaf loss handled separately) NOTE: read in as per-year rate! /

// calculated parameters: double psnTMax; // degrees C - assumed symmetrical around psnTOpt

// 16-1 calculated= 15 parameters

// quality model parameters double qualityLeaf; // value for leaf litter quality double qualityWood; // value for wood litter quality double efficiency; // conversion efficiency of ingested carbon

// 4 parameters

double maxIngestionRate; // hr-1 - maximum ingestion rate of the microbe double halfSatIngestion; // mg C g-1 soil - half saturation ingestion rate of microbe double totNitrogen; // Percentage nitrogen in soil double microbeNC; // mg N / mg C - microbe N:C ratio // 5 parameters

double microbeInit; // mg C / g soil microbe initial carbon amount // 1 parameters

double fineRootFrac; // fraction of wood carbon allocated to fine roots double coarseRootFrac; // fraction of wood carbon that is coarse roots double fineRootAllocation; // fraction of NPP allocated to fine roots double woodAllocation; // fraction of NPP allocated to the roots double fineRootExudation; // fraction of GPP exuded to the soil double coarseRootExudation; // fraction of NPP exuded to the soil // 6 parameters

double fineRootTurnoverRate; // turnover of fine roots (per year rate) double coarseRootTurnoverRate; // turnover of coarse roots (per year rate) double baseFineRootResp; // base respiration rate of fine roots (per year rate) double baseCoarseRootResp; // base respiration rate of coarse roots (per year rate) double fineRootQ10; // Q10 of fine roots double coarseRootQ10; // Q10 of coarse roots // 6 parameters

double baseMicrobeResp; // base respiration rate of microbes double microbeQ10; // Q10 of coarse roots double microbePulseEff; // fraction of exudates that microbes immediately use. //Total parameters=7+9+8+5+14+15+4+5+1+5+6+3=81

// double soilBreakdownCoeff[NUMBER_SOIL_CARBON_POOLS]; // Rate coefficients if we do not have a multipool quality model

} Params;

annethomas commented 6 years ago

litter: can already pass organic soil to soil physics function; need to know thickness--has default bulk density, can use pool data (mass). Make sure order dependence is clear. (differs by model) Leave at default for now.

annethomas commented 6 years ago

SoilWHC: use a default depth for now and use soils data. (Can be done better)

annethomas commented 6 years ago

Thanks @ankurdesai !

annethomas commented 6 years ago

@mdietze @tonygardella Is there a pecan.xml tag for soil input files, or some other standard way of accessing them?

annethomas commented 6 years ago

Also, is it too late to have the soil coupling for sipnet for the UA? Sorry I got behind on that.

tonygardella commented 6 years ago

Soil coupling is not a focus before AGU.

github-actions[bot] commented 4 years ago

This issue is stale because it has been open 365 days with no activity.