Beispiel #1
0
 private void OnPhaseChanged(object sender, PhaseChangedType phaseChange)
 {
     if (phaseChange.StageName == LeafInitialisationStage)
     {
         LeafInitialised = true;
     }
 }
Beispiel #2
0
    public void OnPhaseChanged(PhaseChangedType PhenologyChange)
    {
        if (PhenologyChange.NewPhaseName == "GerminationToEmergence")
        {
            RootDepth = InitialRootDepth;
        }
        else if (PhenologyChange.NewPhaseName == "EmergenceToEndOfJuvenile")
        {
            Live.StructuralWt = InitialWt * Population.Density;
            Live.StructuralN  = InitialNConcentration * Live.StructuralWt;

            // initial root length (mm/mm^2)
            double initial_root_length = Live.Wt / Conversions.sm2smm * SpecificRootLength;

            // initial root length density (mm/mm^3)
            double rld = MathUtility.Divide(initial_root_length, RootDepth, 0.0);

            int deepest_layer = FindLayerNo(RootDepth);

            for (int layer = 0; layer <= deepest_layer; layer++)
            {
                RootLength[layer] = rld * dlayer[layer] * RootProportion(layer, RootDepth);
            }

            Util.Debug("Root.InitGreen.StructuralWt=%f", Live.StructuralWt);
            Util.Debug("Root.InitGreen.StructuralN=%f", Live.StructuralN);
            Util.Debug("Root.InitRootLength=%f", MathUtility.Sum(RootLength));
        }
    }
Beispiel #3
0
 private void OnPhaseChanged(object sender, PhaseChangedType phaseChange)
 {
     if (phaseChange.EventStageName == ResetStageName)
     {
         AccumulatedValue = 0.0;
     }
 }
Beispiel #4
0
 private void OnPhaseChanged(object sender, PhaseChangedType phaseChange)
 {
     if (phaseChange.StageName == LeafInitialisationStage)
     {
         leavesInitialised = true;
         dayofEmergence    = true;
     }
 }
Beispiel #5
0
 public void OnPhaseChanged(PhaseChangedType PhaseChange)
 {
     Console.WriteLine(Clock.Today.ToString("d MMMM yyyy") + " - " + Phenology.CurrentPhase.Start);
     if (Leaf != null)
     {
         Console.WriteLine("                            LAI = " + Leaf.LAI.ToString("f2") + " (m^2/m^2)");
         Console.WriteLine("           Above Ground Biomass = " + AboveGround.Wt.ToString("f2") + " (g/m^2)");
     }
 }
Beispiel #6
0
 private void OnPhaseChanged(PhaseChangedType PhenologyChange)
 {
     if (PhenologyChange.NewPhaseName == "EmergenceToEndOfJuvenile")
     {
         Live.StructuralWt = InitialWt * Population.Density;
         Live.StructuralN  = InitialNConcentration * Live.StructuralWt;
         Util.Debug("meal.InitGreen.StructuralWt=%f", Live.StructuralWt);
         Util.Debug("meal.InitGreen.StructuralN=%f", Live.StructuralN);
     }
 }
Beispiel #7
0
 private void OnPhaseChanged(object sender, PhaseChangedType phaseChange)
 {
     if (phaseChange.NewPhaseName == "EmergenceToEndOfJuvenile")
     {
         Live.StructuralWt = InitialWt * Population.Density;
         Live.StructuralN  = InitialNConcentration * Live.StructuralWt;
         Util.Debug("Stem.InitGreen.StructuralWt=%f", Live.StructuralWt);
         Util.Debug("Stem.InitGreen.StructuralN=%f", Live.StructuralN);
     }
 }
Beispiel #8
0
    public void OnPhaseChanged(PhaseChangedType PhenologyChange)
    {
        if (PhenologyChange.NewPhaseName == "EmergenceToEndOfJuvenile")
        {
            Live.StructuralWt = InitialWt * Population.Density;
            Live.StructuralN  = InitialNConcentration * Live.StructuralWt;

            InitialiseAreas();
        }
    }
Beispiel #9
0
 private void OnPhaseChanged(object sender, PhaseChangedType phaseChange)
 {
     //Put the first data member into the list on the day that moving average is to start being calculated
     if (phaseChange.StageName == StageToStartMovingAverage)
     {
         AccumulatedValues.Add(ChildFunction.Value());
         InitialisedToday = true;
         Calculate        = true;
     }
 }
Beispiel #10
0
        private void OnPhaseChanged(PhaseChangedType PhaseChange)
        {
            string message = Phenology.CurrentPhase.Start + "\r\n";

            if (Leaf != null)
            {
                message += "  LAI = " + Leaf.LAI.ToString("f2") + " (m^2/m^2)" + "\r\n";
                message += "  Above Ground Biomass = " + AboveGround.Wt.ToString("f2") + " (g/m^2)" + "\r\n";
            }
            Summary.WriteMessage(this, message);
        }
Beispiel #11
0
        private void OnPhaseChanged(object sender, PhaseChangedType phaseChange)
        {
            if (phaseChange.StageName == SetEvent)
            {
                preEvent = false;
            }

            if (phaseChange.StageName == ReSetEvent)
            {
                preEvent = true;
            }
        }
Beispiel #12
0
        private void OnPhaseChanged(object sender, PhaseChangedType phaseChange)
        {
            if (phaseChange.EventStageName == SetEvent)
            {
                OnSetEvent();
            }

            if (phaseChange.EventStageName == ReSetEvent)
            {
                OnReSetEvent();
            }
        }
Beispiel #13
0
        private void OnPhaseChanged(PhaseChangedType PhaseChange)
        {
            if (PhaseChange.EventStageName == SetEvent)
            {
                OnSetEvent();
            }

            if (PhaseChange.EventStageName == ReSetEvent)
            {
                OnReSetEvent();
            }
        }
Beispiel #14
0
 private void OnPhaseChanged(object sender, PhaseChangedType phaseChange)
 {
     if (phaseChange.StageName == structure.CohortInitialisationStage)
     {
         structure.PrimaryBudNo = Plant.SowingData.BudNumber;
     }
     if (phaseChange.StageName == structure.LeafInitialisationStage)
     {
         structure.PrimaryBudNo  = Plant.SowingData.BudNumber * FractionOfBudBurst.Value();
         structure.TotalStemPopn = structure.MainStemPopn;
     }
 }
Beispiel #15
0
        private void OnPhaseChanged(object sender, PhaseChangedType phaseChange)
        {
            if (phaseChange.StageName == SetEvent)
            {
                _Value = PostEventValue.Value();
            }

            if (phaseChange.StageName == ReSetEvent)
            {
                _Value = PreEventValue.Value();
            }
        }
Beispiel #16
0
 private void OnPhaseChanged(object sender, PhaseChangedType phaseChange)
 {
     if (sender == this && Phenology != null && Canopy != null && AboveGround != null)
     {
         string message = Phenology.CurrentPhase.Start + "\r\n";
         if (Canopy != null)
         {
             message += "  LAI = " + Canopy.LAI.ToString("f2") + " (m^2/m^2)" + "\r\n";
             message += "  Above Ground Biomass = " + AboveGround.Wt.ToString("f2") + " (g/m^2)" + "\r\n";
         }
         Summary.WriteMessage(this, message);
     }
 }
Beispiel #17
0
        private void OnPhaseChanged(object sender, PhaseChangedType phaseChange)
        {
            if (phaseChange.StageName == CohortInitialisationStage)
            {
                InitialiseLeafCohorts?.Invoke(this, new EventArgs());
                cohortsInitialised = true;
            }

            if (phaseChange.StageName == LeafInitialisationStage)
            {
                NextLeafProportion = 1.0;
                DoLeafInitilisation();
            }
        }
Beispiel #18
0
 private void OnPhaseChanged(object sender, PhaseChangedType phaseChange)
 {
     if (sender == this && Leaf != null && AboveGround != null)
     {
         string message = Phenology.CurrentPhase.Start + "\r\n";
         if (Leaf != null)
         {
             message += "  LAI = " + Leaf.LAI.ToString("f2") + " (m^2/m^2)" + "\r\n";
             message += "  Above Ground Biomass = " + AboveGround.Wt.ToString("f2") + " (g/m^2)" + "\r\n";
         }
         summary.WriteMessage(this, message);
         if (Phenology.CurrentPhase.Start == "Flowering" && Flowering != null)
         {
             Flowering.Invoke(this, null);
         }
     }
 }
Beispiel #19
0
    private void OnPhaseChanged(PhaseChangedType Data)
    {
        if (SWStress != null && NStress != null)
        {
            PhenologyEventToday   = true;
            AverageStressMessage += String.Format("    {0,40}{1,13:F3}{2,13:F3}{3,13:F3}{4,13:F3}\r\n",
                                                  Data.OldPhaseName,
                                                  1 - SWStress.PhotoAverage, 1 - SWStress.ExpansionAverage,
                                                  1 - NStress.PhotoAverage, 1 - NStress.GrainAverage);
            SWStress.ResetAverage();
            NStress.ResetAverage();
        }

        if (Data.NewPhaseName.Contains("FloweringTo"))
        {
            FloweringDate = Today;
        }
        else if (Data.NewPhaseName.Contains("MaturityTo"))
        {
            MaturityDate = Today;
        }
    }
Beispiel #20
0
    /// <summary>
    /// Respond to a remove biomass event.
    /// </summary>
    internal void OnRemoveBiomass(double removeBiomPheno)
    {
        string existingStage = CurrentStageName;

        if (RewindDueToBiomassRemoved != null)
        {
            FractionBiomassRemoved = removeBiomPheno; // The RewindDueToBiomassRemoved function will use this.

            double ttCritical       = TTInAboveGroundPhase;
            double removeFractPheno = RewindDueToBiomassRemoved.Value;
            double removeTTPheno    = ttCritical * removeFractPheno;

            string msg;
            msg  = "Phenology change:-\r\n";
            msg += "    Fraction DM removed  = " + removeBiomPheno.ToString() + "\r\n";
            msg += "    Fraction TT removed  = " + removeFractPheno.ToString() + "\r\n";
            msg += "    Critical TT          = " + ttCritical.ToString() + "\r\n";
            msg += "    Remove TT            = " + removeTTPheno.ToString() + "\r\n";

            double ttRemaining = removeTTPheno;
            for (int i = Phases.Count - 1; i >= 0; i--)
            {
                Phase Phase = Phases[i];
                if (Phase.TTinPhase > 0)
                {
                    double ttCurrentPhase = Phase.TTinPhase;
                    if (ttRemaining > ttCurrentPhase)
                    {
                        Phase.ResetPhase();
                        ttRemaining       -= ttCurrentPhase;
                        CurrentPhaseIndex -= 1;
                        if (CurrentPhaseIndex < 4)  //FIXME - hack to stop onEmergence being fired which initialises biomass parts
                        {
                            CurrentPhaseIndex = 4;
                            break;
                        }
                    }
                    else
                    {
                        Phase.Add(-ttRemaining);
                        // Return fraction of thermal time we are through the current
                        // phenological phase (0-1)
                        //double frac = Phase.FractionComplete;
                        //if (frac > 0.0 && frac < 1.0)  // Don't skip out of this stage - some have very low targets, eg 1.0 in "maturity"
                        //    currentStage = frac + floor(currentStage);

                        break;
                    }
                }
                else
                { // phase is empty - not interested in it
                }
            }
            Stage = (CurrentPhaseIndex + 1) + CurrentPhase.FractionComplete;

            if (existingStage != CurrentStageName)
            {
                PhaseChangedType PhaseChangedData = new PhaseChangedType();
                PhaseChangedData.OldPhaseName = existingStage;
                PhaseChangedData.NewPhaseName = CurrentPhase.Name;
                PhaseChanged.Invoke(PhaseChangedData);
                MyPaddock.Publish(CurrentPhase.Start);
            }
        }
    }