harvest - PIK-LPJmL/LPJmL GitHub Wiki
[[TOC]]
Harvest is the annual carbon removed from managed land either as yields or as residuals. Harvested carbon leaves the LPJmL carbon cycle and is assumed to respire to the atmosphere.
Daily assimilation is allocated to harvestable storage organs (e.g. cereal grain) and three other pools (roots, leafs, stems). Heat units (hsum) are accumulated daily for each CFT until maturity is reached, i.e. when hsum equals the CFT-specific prescribed Phenologocal Heat Units PHU or if the maximum length of growing period hlimit is reached (winter crops are allowed to grow 90 days more) (see CFT-Phenology). Harvest occurs at maturity, the storage organs are removed and their carbon content is assumed to respire within the same year. The carbon of the roots is added to the belowground litter pool. The actual date is fixed as harvest date (hdate), the harvested CFT is deleted from the pftlist and stored irrigation water is returned to the river system.
Residue management:
At harvest, 10% of leaf and stem litter are directly assigned to above
ground litter pool. Remaining residue carbon pools can be told to be
removed (bool parameter in param.par), but by default they remain on the
field as aboveground biomass.
CFTFRAC (code variable: cftfrac): CFT cell
fraction, is written to output in harvest.c
PFT_HARVEST (code variable: pft_harvest.harvest): CFT-specific
harvested carbon from storage organs [gC/m²/yr], 16 rainfed, 16
irrigated bands
PFT_RHARVEST (code variable: pft_harvest.residual): CFT-specific
harvested residual carbon [gC/m²/yr]
HARVEST (code variable: flux_harvest): total harvested carbon
[gC/m²/yr], including storage organs, harvested residuals,
residuals_burnt and residuals_burntinfield
RHARVEST_BURNT (code variable: flux_rharvest_burnt): residuals burnt
carbon [gC/m²/yr]
RHARVEST_BURNT_IN_FIELD (code variable:
flux_rharvest_burnt_in_field): residuals field burnt
carbon[gC/m²/yr]
Residue Management:
RESIDUES_FIRE is a bool macro defined in crop.h, # TO DO # should be
extracted from the code and redirected to lpjml.conf or param.par if
this is actually still in use by anyone.
If RESIDUALS_FIRE is FALSE (current default), residuals_burnt and
residuals_burntinfield are set to 0. Otherwise, a fraction (code
comment: “Yevich’s data”) of leaf and stem carbon pool is assigned.
src/crop/harvest_crop.c:
void harvest_crop(Output *output, /* Output data */
Stand *stand, /* pointer to crop stand */
Pft *pft, /* PFT variables */
int npft, /* number of natural PFTs */
int ncft, /* number of crop PFTs */
Bool pft_output_scaled /* pft-specific output scaled with
stand->frac (TRUE/FALSE) */
)
{
Pftcroppar *croppar;
Harvest harvest;
Pftcrop *crop;
Irrigation *data;
Real fuelratio,bifratio,factor;
data=stand->data;
crop=pft->data;
stand->soil.litter.ag[pft->litter].trait.leaf+=(crop->ind.leaf+crop->ind.pool)*RESIDUES_IN_SOIL;
if(!RESIDUES_FIRE)
{
harvest.residuals_burnt=harvest.residuals_burntinfield=0;
factor=(1-RESIDUES_IN_SOIL);
}
else
{
fuelratio=stand->cell->ml.manage.regpar->fuelratio; /* burn outside of field */
bifratio=stand->cell->ml.manage.regpar->bifratio; /* burn in field */
if(bifratio+fuelratio>(1-RESIDUES_IN_SOIL))
{
bifratio*=(1-RESIDUES_IN_SOIL);
fuelratio*=(1-RESIDUES_IN_SOIL);
}
factor=1-RESIDUES_IN_SOIL-fuelratio-bifratio;
harvest.residuals_burnt=(crop->ind.leaf+crop->ind.pool)*fuelratio;
harvest.residuals_burntinfield=(crop->ind.leaf+crop->ind.pool)*bifratio;
}
if(param.remove_residuals)
harvest.residual=(crop->ind.leaf+crop->ind.pool)*factor;
else
{
stand->soil.litter.ag[pft->litter].trait.leaf+=(crop->ind.leaf+crop->ind.pool)*factor;
harvest.residual=0;
}
harvest.harvest=crop->ind.so;
stand->soil.litter.bg[pft->litter]+=crop->ind.root;
if(pft_output_scaled)
{
output->pft_harvest[pft->par->id-npft+data->irrigation*(ncft+NGRASS+NBIOMASSTYPE)].harvest+=harvest.harvest*stand->frac;
output->pft_harvest[pft->par->id-npft+data->irrigation*(ncft+NGRASS+NBIOMASSTYPE)].residual+=(harvest.residual+harvest.residuals_burnt+harvest.residuals_burntinfield)*stand->frac;
}
else
{
output->pft_harvest[pft->par->id-npft+data->irrigation*(ncft+NGRASS+NBIOMASSTYPE)].harvest+=harvest.harvest;
output->pft_harvest[pft->par->id-npft+data->irrigation*(ncft+NGRASS+NBIOMASSTYPE)].residual+=(harvest.residual+harvest.residuals_burnt+harvest.residuals_burntinfield);
}
/* harvested area */
output->cftfrac[pft->par->id-npft+data->irrigation*(ncft+NGRASS+NBIOMASSTYPE)]+=stand->frac;
output->flux_harvest+=(harvest.harvest+harvest.residual+harvest.residuals_burnt+harvest.residuals_burntinfield)*stand->frac;
output->flux_rharvest_burnt+=harvest.residuals_burnt*stand->frac;
output->flux_rharvest_burnt_in_field+=harvest.residuals_burntinfield*stand->frac;
croppar=pft->par->data;
if(data->irrigation)
stand->cell->ml.cropdates[pft->par->id-npft].fallow_irrig=croppar->fallow_days;
else
stand->cell->ml.cropdates[pft->par->id-npft].fallow=croppar->fallow_days;
} /* of 'harvest_crop' */
Werner von Bloh, Sibyll Schaphoff
allocation and phenology, residue management, carbon pools, bioenergy, harvest index