/// <summary> /// Set the plant leaf area index. /// </summary> /// <param name="deltaLAI">Delta LAI.</param> public void ReduceCanopy(double deltaLAI) { var leaf = Organs.FirstOrDefault(o => o is ICanopy) as ICanopy; var lai = leaf.LAI; if (lai > 0) { leaf.LAI = lai - deltaLAI; } }
/// <summary> /// Remove biomass from an organ. /// </summary> /// <param name="organName">Name of organ.</param> /// <param name="biomassRemoveType">Name of event that triggered this biomass remove call.</param> /// <param name="biomassToRemove">Biomass to remove.</param> public void RemoveBiomass(string organName, string biomassRemoveType, OrganBiomassRemovalType biomassToRemove) { var organ = Organs.FirstOrDefault(o => o.Name.Equals(organName, StringComparison.InvariantCultureIgnoreCase)); if (organ == null) { throw new Exception("Cannot find organ to remove biomass from. Organ: " + organName); } organ.RemoveBiomass(biomassRemoveType, biomassToRemove); // Also need to reduce LAI if canopy. if (organ is ICanopy) { var totalFractionToRemove = biomassToRemove.FractionLiveToRemove + biomassToRemove.FractionLiveToResidue; var leaf = Organs.FirstOrDefault(o => o is ICanopy) as ICanopy; var lai = leaf.LAI; ReduceCanopy(lai * totalFractionToRemove); } }