/// <summary> /// Reset this organ's state at emergence. /// </summary> /// <param name="emergingWt">The amount of emerging biomass (kg/ha).</param> /// <param name="developingWt">The amount of developing biomass (kg/ha).</param> /// <param name="matureWt">The amount of developing biomass (kg/ha).</param> /// <param name="deadWt">The amount of developing biomass (kg/ha).</param> public void ResetEmergence(double emergingWt, double developingWt, double matureWt, double deadWt) { EmergingTissue.ResetTo(emergingWt, emergingWt * NConcOptimum); DevelopingTissue.ResetTo(developingWt, developingWt * NConcOptimum); MatureTissue.ResetTo(matureWt, matureWt * NConcOptimum); DeadTissue.ResetTo(deadWt, deadWt * NConcOptimum); }
/// <summary>Computes the DM and N amounts turned over for all tissues.</summary> /// <param name="turnoverRate">The turnover rate for each tissue</param> public void CalculateTissueTurnover(double[] turnoverRate) { EmergingTissue.DoTissueTurnover(turnoverRate[0], DevelopingTissue, NConcOptimum); DevelopingTissue.DoTissueTurnover(turnoverRate[0], MatureTissue, NConcOptimum); MatureTissue.DoTissueTurnover(turnoverRate[0], DeadTissue, NConcOptimum); DeadTissue.DoTissueTurnover(turnoverRate[0], null, NConcMinimum); }
/// <summary> /// Reset this organ's state at emergence. /// </summary> /// <param name="emergingWt">The amount of emerging biomass (kg/ha).</param> /// <param name="developingWt">The amount of developing biomass (kg/ha).</param> /// <param name="matureWt">The amount of developing biomass (kg/ha).</param> /// <param name="deadWt">The amount of developing biomass (kg/ha).</param> public void ResetEmergence(double emergingWt, double developingWt, double matureWt, double deadWt) { EmergingTissue.Reset(emergingWt, emergingWt * NConcOptimum); DevelopingTissue.Reset(developingWt, developingWt * NConcOptimum); MatureTissue.Reset(matureWt, matureWt * NConcOptimum); DeadTissue.Reset(deadWt, deadWt * NConcOptimum); // Tissue states have changed so recalculate our states. CalculateStates(); }
/// <summary>Set this organ's biomass state.</summary> /// <param name="emergingWt">The DM amount of emerging biomass (kg/ha).</param> /// <param name="emergingN">The amount of N in emerging biomass (kg/ha).</param> /// <param name="developingWt">The DM amount of developing biomass (kg/ha).</param> /// <param name="developingN">The amount of N in developing biomass (kg/ha).</param> /// <param name="matureWt">The DM amount of developing biomass (kg/ha).</param> /// <param name="matureN">The amount of N in developing biomass (kg/ha).</param> /// <param name="deadWt">The DM amount of developing biomass (kg/ha).</param> /// <param name="deadN">The amount of N in developing biomass (kg/ha).</param> public void SetBiomassState(double emergingWt, double emergingN, double developingWt, double developingN, double matureWt, double matureN, double deadWt, double deadN) { EmergingTissue.SetBiomass(emergingWt, emergingN); DevelopingTissue.SetBiomass(developingWt, developingN); MatureTissue.SetBiomass(matureWt, matureN); DeadTissue.SetBiomass(deadWt, deadN); // Tissue states have changed so recalculate our states. CalculateStates(); }
/// <summary>Kills part of the organ (transfer DM and N to dead tissue).</summary> /// <param name="fractionToRemove">The fraction to kill in each tissue</param> public void KillOrgan(double fractionToRemove) { if (MathUtilities.IsGreaterThan(1.0 - fractionToRemove, 0)) { for (int t = 0; t < Tissue.Length - 1; t++) { DeadTissue.AddBiomass(Tissue[t].DM.Wt * fractionToRemove, Tissue[t].DM.N * fractionToRemove); Tissue[t].AddBiomass(-Tissue[t].DM.Wt * fractionToRemove, -Tissue[t].DM.N * fractionToRemove); } } // Tissue states have changed so recalculate our states. CalculateStates(); }
/// <summary>Kills part of the organ (transfer DM and N to dead tissue).</summary> /// <param name="fractionToRemove">The fraction to kill in each tissue</param> public void DoKillOrgan(double fractionToRemove = 1.0) { if (MathUtilities.IsGreaterThan(1.0 - fractionToRemove, 0)) { double fractionRemaining = 1.0 - fractionToRemove; for (int t = 0; t < Tissue.Length - 1; t++) { DeadTissue.AddBiomass(Tissue[t].DM.Wt * fractionToRemove, Tissue[t].DM.N * fractionToRemove); Tissue[t].RemoveBiomass(fractionToRemove, 0.0); } } else { for (int t = 0; t < Tissue.Length - 1; t++) { DeadTissue.AddBiomass(Tissue[t].DM.Wt, Tissue[t].DM.N); Tissue[t].Reset(); } } }
/// <summary>Updates each tissue, make changes in DM and N effective.</summary> /// <returns>A flag whether mass balance was maintained or not</returns> public bool Update() { // save current state double previousDM = DMTotal; double previousN = NTotal; // update all tissues EmergingTissue.Update(); DevelopingTissue.Update(); MatureTissue.Update(); DeadTissue.Update(); CalculateStates(); // check mass balance bool dmIsOk = MathUtilities.FloatsAreEqual(previousDM + DMGrowth - DMDetached, DMTotal, 0.000001); bool nIsOk = MathUtilities.FloatsAreEqual(previousN + NGrowth - NLuxuryRemobilised - NSenescedRemobilised - NDetached, NTotal, 0.000001); return(dmIsOk || nIsOk); }