Пример #1
0
 private void OnPlantEnding(object sender, EventArgs e)
 {
     if (Wt > 0.0)
     {
         Detached.Add(Live);
         Detached.Add(Dead);
         SurfaceOrganicMatter.Add(Wt * 10, N * 10, 0, Plant.CropType, Name);
     }
     Clear();
 }
Пример #2
0
        private void OnPlantEnding(object sender, EventArgs e)
        {
            Biomass total = Live + Dead;

            if (total.Wt > 0.0)
            {
                Detached.Add(Live);
                Detached.Add(Dead);
                SurfaceOrganicMatter.Add(total.Wt * 10, total.N * 10, 0, Plant.CropType, Name);
            }
            Clear();
        }
Пример #3
0
        protected void OnDoActualPlantGrowth(object sender, EventArgs e)
        {
            if (Plant.IsAlive)
            {
                Biomass Loss = new Biomass();
                Loss.StructuralWt    = Live.StructuralWt * SenescenceRate;
                Loss.NonStructuralWt = Live.NonStructuralWt * SenescenceRate;
                Loss.StructuralN     = Live.StructuralN * SenescenceRate;
                Loss.NonStructuralN  = Live.NonStructuralN * SenescenceRate;

                Live.StructuralWt    -= Loss.StructuralWt;
                Live.NonStructuralWt -= Loss.NonStructuralWt;
                Live.StructuralN     -= Loss.StructuralN;
                Live.NonStructuralN  -= Loss.NonStructuralN;

                Dead.StructuralWt    += Loss.StructuralWt;
                Dead.NonStructuralWt += Loss.NonStructuralWt;
                Dead.StructuralN     += Loss.StructuralN;
                Dead.NonStructuralN  += Loss.NonStructuralN;

                double DetachedFrac = 0;
                if (DetachmentRateFunction != null)
                {
                    DetachedFrac = DetachmentRateFunction.Value;
                }
                if (DetachedFrac > 0.0)
                {
                    double DetachedWt = Dead.Wt * DetachedFrac;
                    double DetachedN  = Dead.N * DetachedFrac;

                    Dead.StructuralWt    *= (1 - DetachedFrac);
                    Dead.StructuralN     *= (1 - DetachedFrac);
                    Dead.NonStructuralWt *= (1 - DetachedFrac);
                    Dead.NonStructuralN  *= (1 - DetachedFrac);
                    Dead.MetabolicWt     *= (1 - DetachedFrac);
                    Dead.MetabolicN      *= (1 - DetachedFrac);

                    if (DetachedWt > 0)
                    {
                        SurfaceOrganicMatter.Add(DetachedWt * 10, DetachedN * 10, 0, Plant.CropType, Name);
                    }
                }

                if (DryMatterContent != null)
                {
                    LiveFWt = Live.Wt / DryMatterContent.Value;
                }
            }
        }
Пример #4
0
        /// <summary>
        /// Populate the AddFaecesType object
        /// </summary>
        /// <param name="iPaddID"></param>
        /// <param name="aValue"></param>
        /// <returns></returns>
        private bool PopulateFaeces(int iPaddID, SurfaceOrganicMatter.AddFaecesType aValue)
        {
            int N = (int)GrazType.TOMElement.N;
            int P = (int)GrazType.TOMElement.P;
            int S = (int)GrazType.TOMElement.S;
            bool result = false;

            FModel.ReturnExcretion(iPaddID, out FExcretion);

            if (FExcretion.dDefaecations > 0)
            {
                aValue.Defaecations = FExcretion.dDefaecations;
                aValue.VolumePerDefaecation = FExcretion.dDefaecationVolume;
                aValue.AreaPerDefaecation = FExcretion.dDefaecationArea;
                aValue.Eccentricity = FExcretion.dDefaecationEccentricity;
                aValue.OMWeight = FExcretion.OrgFaeces.DM;
                aValue.OMN = FExcretion.OrgFaeces.Nu[N];
                aValue.OMP = FExcretion.OrgFaeces.Nu[P];
                aValue.OMS = FExcretion.OrgFaeces.Nu[S];
                aValue.OMAshAlk = FExcretion.OrgFaeces.AshAlk;
                aValue.NO3N = FExcretion.InOrgFaeces.Nu[N] * FExcretion.dFaecalNO3Propn;
                aValue.NH4N = FExcretion.InOrgFaeces.Nu[N] * (1.0 - FExcretion.dFaecalNO3Propn);
                aValue.POXP = FExcretion.InOrgFaeces.Nu[P];
                aValue.SO4S = FExcretion.InOrgFaeces.Nu[S];
                result = true;
            }
            return result;
        }