diff --git a/Models/AgPasture/PastureSpecies.cs b/Models/AgPasture/PastureSpecies.cs index 104c78502b..efc861240d 100644 --- a/Models/AgPasture/PastureSpecies.cs +++ b/Models/AgPasture/PastureSpecies.cs @@ -227,13 +227,15 @@ public string[] CultivarNames /// The number of buds (optional) /// The row configuration. /// The number of seeds sown. + /// tillering method (-1, 0, 1). + /// Fertile Tiller Number. /// /// For AgPasture species the sow parameters are not used, the command to sow simply enables the plant to grow. This is done /// by setting the plant status to 'alive'. From this point germination processes takes place and eventually emergence occurs. /// At emergence, plant DM is set to its default minimum value, allocated according to EmergenceFractions and with /// optimum N concentration. Plant height and root depth are set to their minimum values. /// - public void Sow(string cultivar, double population, double depth, double rowSpacing, double maxCover = 1, double budNumber = 1, double rowConfig = 1, double seeds = 0) + public void Sow(string cultivar, double population, double depth, double rowSpacing, double maxCover = 1, double budNumber = 1, double rowConfig = 1, double seeds = 0, int tillering = 0, double ftn = 0.0) { if (isAlive) mySummary.WriteMessage(this, " Cannot sow the pasture species \"" + Name + "\", as it is already growing", MessageType.Warning); diff --git a/Models/Core/IPlant.cs b/Models/Core/IPlant.cs index 0f49790b77..ab2d70e706 100644 --- a/Models/Core/IPlant.cs +++ b/Models/Core/IPlant.cs @@ -38,7 +38,9 @@ public interface IPlant : IModel /// The bud number. /// The bud number. /// The number of seeds sown (/m2). - void Sow(string cultivar, double population, double depth, double rowSpacing, double maxCover = 1, double budNumber = 1, double rowConfig = 1, double seeds = 0); + /// tillering method (-1, 0, 1). + /// Fertile Tiller Number. + void Sow(string cultivar, double population, double depth, double rowSpacing, double maxCover = 1, double budNumber = 1, double rowConfig = 1, double seeds = 0, int tillering = 0, double ftn = 0.0); /// Returns true if the crop is ready for harvesting bool IsReadyForHarvesting { get; } diff --git a/Models/Functions/Senescence/LightSenescenceFunction.cs b/Models/Functions/Senescence/LightSenescenceFunction.cs index 0fcb92b8aa..36aff9456a 100644 --- a/Models/Functions/Senescence/LightSenescenceFunction.cs +++ b/Models/Functions/Senescence/LightSenescenceFunction.cs @@ -43,7 +43,6 @@ virtual protected void OnPlantSowing(object sender, SowingParameters data) totalLaiEqlbLight = 0; avgLaiEquilibLight = 0; laiEqlbLightTodayQ = new Queue(); - } /// Called when [EndCrop]. @@ -54,7 +53,7 @@ private void OnPlantEnding(object sender, EventArgs e) { totalLaiEqlbLight = 0; avgLaiEquilibLight = 0; - laiEqlbLightTodayQ.Clear(); + laiEqlbLightTodayQ?.Clear(); } /// Gets the value. diff --git a/Models/Functions/Senescence/WaterSenescenceFunction.cs b/Models/Functions/Senescence/WaterSenescenceFunction.cs index aba3254f0b..b63af41dcc 100644 --- a/Models/Functions/Senescence/WaterSenescenceFunction.cs +++ b/Models/Functions/Senescence/WaterSenescenceFunction.cs @@ -62,7 +62,7 @@ private void OnPlantEnding(object sender, EventArgs e) { totalLaiEquilibWater = 0.0; avLaiEquilibWater = 0.0; - laiEquilibWaterQ.Clear(); + laiEquilibWaterQ?.Clear(); } /// Gets the value. diff --git a/Models/G_Range/G_Range.cs b/Models/G_Range/G_Range.cs index dd875e9978..07ed6ec828 100644 --- a/Models/G_Range/G_Range.cs +++ b/Models/G_Range/G_Range.cs @@ -99,7 +99,9 @@ public IBiomass AboveGround /// The bud number. /// The bud number. /// The number of seeds sown. - public void Sow(string cultivar, double population, double depth, double rowSpacing, double maxCover = 1, double budNumber = 1, double rowConfig = 1, double seeds = 0 ) { } + /// tillering method (-1, 0, 1). + /// Fertile Tiller Number. + public void Sow(string cultivar, double population, double depth, double rowSpacing, double maxCover = 1, double budNumber = 1, double rowConfig = 1, double seeds = 0, int tillering = 0, double ftn = 0.0) { } /// Returns true if the crop is ready for harvesting public bool IsReadyForHarvesting { get { return false; } } diff --git a/Models/PMF/Interfaces/ITilleringMethod.cs b/Models/PMF/Interfaces/ITilleringMethod.cs index c02efef8e2..946573271e 100644 --- a/Models/PMF/Interfaces/ITilleringMethod.cs +++ b/Models/PMF/Interfaces/ITilleringMethod.cs @@ -21,5 +21,11 @@ public interface ITilleringMethod : IModel /// Calculate the actual Area for the Culms double CalcActualLeafArea(double dltStressedLAI); + + /// Fertile tiller Number (at harvest) + double FertileTillerNumber { get; set; } + /// Current Number of Tillers + double CurrentTillerNumber { get; set; } + } } diff --git a/Models/PMF/OilPalm/OilPalm.cs b/Models/PMF/OilPalm/OilPalm.cs index 07ded5f40a..cb48515327 100644 --- a/Models/PMF/OilPalm/OilPalm.cs +++ b/Models/PMF/OilPalm/OilPalm.cs @@ -788,8 +788,10 @@ private void OnSimulationCommencing(object sender, EventArgs e) /// The bud number. /// The row configuration. /// The number of seeds sown. + /// tillering method (-1, 0, 1). + /// Fertile Tiller Number. /// Cultivar not specified on sow line. - public void Sow(string cultivar, double population, double depth, double rowSpacing, double maxCover = 1, double budNumber = 1, double rowConfig = 1, double seeds = 0) + public void Sow(string cultivar, double population, double depth, double rowSpacing, double maxCover = 1, double budNumber = 1, double rowConfig = 1, double seeds = 0, int tillering = 0, double ftn = 0.0) { SowingData = new SowingParameters(); SowingData.Population = population; diff --git a/Models/PMF/Organs/SorghumLeaf.cs b/Models/PMF/Organs/SorghumLeaf.cs index 004f2d2eef..128224ed41 100644 --- a/Models/PMF/Organs/SorghumLeaf.cs +++ b/Models/PMF/Organs/SorghumLeaf.cs @@ -28,7 +28,7 @@ public class SorghumLeaf : Model, IHasWaterDemand, IOrgan, IArbitration, IOrganD { /// The plant [Link] - private Plant plant = null; //todo change back to private + private Plant plant = null; [Link] private ISummary summary = null; @@ -148,9 +148,14 @@ public SorghumLeaf() /// Gets the canopy type. Should return null if no canopy present. public string CanopyType => plant.PlantType; - /// Gets or sets the R50. - [Description("Tillering Method: 0 = Fixed - uses FTN, 1 = Dynamic")] - public int TilleringMethod { get; set; } = 0; + /// Gets the Tillering Method. + [Description("Tillering Method: -1 = Rule of Thumb, 0 = FixedTillering - uses FertileTillerNumber, 1 = DynamicTillering")] + public int TilleringMethod { get; set; } + + /// Determined by the tillering method chosen. + /// If TilleringMethod == FixedTillering then this value needs to be set by the user. + [Description("")] + public double FertileTillerNumber { get; set; } /// The initial biomass dry matter weight [Description("Initial leaf dry matter weight")] @@ -959,8 +964,7 @@ private void OnPhaseChanged(object sender, PhaseChangedType phaseChange) if (phaseChange.StageName == LeafInitialisationStage) { leafInitialised = true; - culms.TilleringMethod = TilleringMethod; - + Live.StructuralWt = InitialDMWeight * SowingDensity; Live.StorageWt = 0.0; LAI = InitialLAI * SowingDensity.ConvertSqM2SqMM(); diff --git a/Models/PMF/Plant.cs b/Models/PMF/Plant.cs index 4306eefa9d..9409829cc3 100644 --- a/Models/PMF/Plant.cs +++ b/Models/PMF/Plant.cs @@ -346,7 +346,9 @@ private void EndOfDay(object sender, EventArgs e) /// The bud number. /// SkipRow configuration. /// The number of seeds sown (/m2). - public void Sow(string cultivar, double population, double depth, double rowSpacing, double maxCover = 1, double budNumber = 1, double rowConfig = 0, double seeds = 0) + /// tillering method (-1, 0, 1). + /// Fertile Tiller Number. + public void Sow(string cultivar, double population, double depth, double rowSpacing, double maxCover = 1, double budNumber = 1, double rowConfig = 0, double seeds = 0, int tillering = 0, double ftn = 0.0) { SowingDate = clock.Today; @@ -360,10 +362,18 @@ public void Sow(string cultivar, double population, double depth, double rowSpac SowingData.RowSpacing = rowSpacing; SowingData.SkipType = rowConfig; SowingData.Seeds = seeds; + SowingData.TilleringMethod = tillering; + SowingData.FTN = ftn; if (SowingData.Seeds != 0 && SowingData.Population != 0) throw new Exception("Cannot specify both plant population and number of seeds when sowing."); + if (SowingData.TilleringMethod < -1 || SowingData.TilleringMethod > 1) + throw new Exception("Invalid TilleringMethod set in sowingData."); + + if (SowingData.TilleringMethod != 0 && SowingData.FTN > 0.0) + throw new Exception("Cannot set a FertileTillerNumber when TilleringMethod is not set to FixedTillering."); + if (rowConfig == 0) { // No skip row diff --git a/Models/PMF/SimpleTree/SimpleTree.cs b/Models/PMF/SimpleTree/SimpleTree.cs index 750885420d..690e63ff60 100644 --- a/Models/PMF/SimpleTree/SimpleTree.cs +++ b/Models/PMF/SimpleTree/SimpleTree.cs @@ -310,7 +310,9 @@ public void SetActualNitrogenUptakes(List info) /// The bud number. /// The row configuration. /// The number of seeds sown. - public void Sow(string cultivar, double population, double depth, double rowSpacing, double maxCover = 1, double budNumber = 1, double rowConfig = 1, double seeds = 0) + /// tillering method (-1, 0, 1). + /// Fertile Tiller Number. + public void Sow(string cultivar, double population, double depth, double rowSpacing, double maxCover = 1, double budNumber = 1, double rowConfig = 1, double seeds = 0, int tillering = 0, double ftn = 0.0) { } diff --git a/Models/PMF/SowingParameters.cs b/Models/PMF/SowingParameters.cs index c3915bf218..e15fe86cd7 100644 --- a/Models/PMF/SowingParameters.cs +++ b/Models/PMF/SowingParameters.cs @@ -48,5 +48,12 @@ public class SowingParameters : EventArgs /// The skip plant seed density adjustment public double SkipDensityScale { get; set; } = 1; + + /// Tillering Method to set Fixed or dynamic tillering + /// Tillering Method: -1 = Rule of Thumb, 0 = FixedTillering - uses FTN, 1 = DynamicTillering + public int TilleringMethod { get; set; } = 0; + + /// Fertile Tiller Number + public double FTN { get; set; } = 0.0; } } diff --git a/Models/PMF/Structure/LeafCulms.cs b/Models/PMF/Structure/LeafCulms.cs index ed05fe889f..cd4c63e4b0 100644 --- a/Models/PMF/Structure/LeafCulms.cs +++ b/Models/PMF/Structure/LeafCulms.cs @@ -25,8 +25,12 @@ namespace Models.PMF.Struct [PresenterName("UserInterface.Presenters.PropertyPresenter")] public class LeafCulms : Model { - /// Tillering Method that uses a fixed number of tillers - [Link(Type = LinkType.Child, ByName = true)] + /// The parent Plant + [Link] + Plant plant = null; + + /// Tillering Method that uses a fixed number of tillers + [Link(Type = LinkType.Child, ByName = true)] private ITilleringMethod fixedTillering = null; /// Tillering Method that manages number of tillers dynamically @@ -60,11 +64,14 @@ public class LeafCulms : Model [Link(Type = LinkType.Child, ByName = true)] private IFunction leafNoAtEmergence = null; - /// Enables Tillering method to be controlled via script - public double TilleringMethod { get; set; } + /// Set through Sowing Event + public int TilleringMethod { get; set; } private ITilleringMethod tillering => TilleringMethod == 0 ? fixedTillering : dynamicTillering; + /// FertileTillerNumber is determined by the tillering method chosen + public double FertileTillerNumber { get => tillering.FertileTillerNumber; } + /// Subsequent tillers are slightly smaller - adjust that size using a percentage [Link(Type = LinkType.Child, ByName = true)] public IFunction VerticalTillerAdjustment = null; @@ -92,7 +99,7 @@ public class LeafCulms : Model public List Culms; /// Total TT required to get from emergence to floral init. - [JsonIgnore] + [JsonIgnore] public double TTTargetFI { get; private set; } /// Constructor. @@ -166,5 +173,18 @@ public double getLeafAppearanceRate(double remainingLeaves) return appearanceRate1.Value(); } - } + /// Called when crop is sowed + /// The sender. + /// The instance containing the event data. + [EventSubscribe("PlantSowing")] + protected void OnPlantSowing(object sender, SowingParameters data) + { + if (data.Plant == plant) + { + //sets which tillering method to reference via tillering + TilleringMethod = data.TilleringMethod; + } + } + + } } diff --git a/Models/PMF/Structure/Tillering/DynamicTillering.cs b/Models/PMF/Structure/Tillering/DynamicTillering.cs index 935ce29142..426202855a 100644 --- a/Models/PMF/Structure/Tillering/DynamicTillering.cs +++ b/Models/PMF/Structure/Tillering/DynamicTillering.cs @@ -9,6 +9,7 @@ using System; using System.Collections.Generic; using System.Linq; +using Newtonsoft.Json; namespace Models.PMF.Struct { @@ -71,9 +72,18 @@ public class DynamicTillering : Model, ITilleringMethod /// Number of potential Fertile Tillers at harvest public double CalculatedTillerNumber { get; private set; } - - /// Actual Number of Fertile Tillers - public double FertileTillerNumber { get; private set; } + /// Current Number of Tillers + public double CurrentTillerNumber { get; set; } + /// Current Number of Tillers + public double DltTillerNumber { get; set; } + + /// Actual Number of Fertile Tillers + [JsonIgnore] + public double FertileTillerNumber + { + get => CurrentTillerNumber; + set { throw new Exception("Cannot set the FertileTillerNumber for Dynamic Tillering. Make sure you set TilleringMethod before FertileTillerNmber"); } + } /// Supply Demand Ratio used to calculate Tiller No public double SupplyDemandRatio { get; private set; } @@ -81,7 +91,7 @@ public class DynamicTillering : Model, ITilleringMethod private int flagStage; private int floweringStage; private int endJuvenilePhase; - private double tillersAdded; + //private double tillersAdded; private int startThermalQuotientLeafNo = 3; private int endThermalQuotientLeafNo = 5; private double plantsPerMetre; @@ -191,7 +201,7 @@ void AddInitialTillers() if (CalculatedTillerNumber > 3) //initiate T2:2 & T3:1 { InitiateTiller(2, 1, 2); - tillersAdded = 1; // Reporting. + CurrentTillerNumber = 1; // Reporting. } } @@ -201,7 +211,7 @@ double calcTillerAppearance(int newLeafNo, int currentLeafNo) //and the newleaf is greater than 3 // get number of tillers added so far - if (tillersAdded >= FertileTillerNumber) return 0.0; + if (CurrentTillerNumber >= CalculatedTillerNumber) return 0.0; // calculate linear LAI - plantsPerMeter is calculated at sowing //tpla is LAI/density - remove x density from plantspermetre calc? linearLAI = plantsPerMetre * (leaf.LAI + leaf.SenescedLai) / 10000.0; @@ -209,7 +219,7 @@ double calcTillerAppearance(int newLeafNo, int currentLeafNo) if (linearLAI < maxLAIForTillerAddition.Value()) { var appRate = culms.getLeafAppearanceRate(5); - return Math.Min(phenology.thermalTime.Value() / appRate, CalculatedTillerNumber - tillersAdded); + return Math.Min(phenology.thermalTime.Value() / appRate, CalculatedTillerNumber - CurrentTillerNumber); } return 0.0; } @@ -226,7 +236,7 @@ void InitiateTiller(int tillerNumber, double fractionToAdd, double initialLeaf) newCulm.CulmNo = tillerNumber; newCulm.CurrentLeafNo = initialLeaf; - newCulm.VertAdjValue = culms.MaxVerticalTillerAdjustment.Value() + (tillersAdded * culms.VerticalTillerAdjustment.Value()); + newCulm.VertAdjValue = culms.MaxVerticalTillerAdjustment.Value() + (CurrentTillerNumber * culms.VerticalTillerAdjustment.Value()); newCulm.Proportion = fractionToAdd; newCulm.FinalLeafNo = culms.Culms[0].FinalLeafNo; //newCulm.calcLeafAppearance(); @@ -252,8 +262,8 @@ private void AddTillerProportion(double fractionToAdd) { InitiateTiller(lastCulm.CulmNo + 1, tillerFraction - 1.0, 1); } - - tillersAdded += fractionToAdd; + DltTillerNumber = fractionToAdd; + CurrentTillerNumber += fractionToAdd; } /// calculate the potential leaf area @@ -279,7 +289,7 @@ public double CalcActualLeafArea(double dltStressedLAI) var tillerLaiToReduce = calcCeaseTillerSignal(dltStressedLAI - laiReductionForSLA); - bool moreToAdd = (tillersAdded < CalculatedTillerNumber) && (linearLAI < maxLAIForTillerAddition.Value()); + bool moreToAdd = (CurrentTillerNumber < CalculatedTillerNumber) && (linearLAI < maxLAIForTillerAddition.Value()); double nLeaves = culms.Culms.First().CurrentLeafNo; if (nLeaves > 7 && !moreToAdd && tillerLaiToReduce > 0.0) @@ -382,14 +392,13 @@ void reduceAllTillersProportionately(double laiReduction) [EventSubscribe("PlantSowing")] protected void OnPlantSowing(object sender, SowingParameters data) { - if (data.Plant == plant) + if (data.Plant == plant && leaf.TilleringMethod == 1) { radiationAverages = new List(); plantsPerMetre = data.RowSpacing / 1000.0 * data.SkipDensityScale; - //plantsPerMetre = data.Population * data.RowSpacing / 1000.0 * data.SkipDensityScale; - - FertileTillerNumber = data.BudNumber; - tillersAdded = 0.0; + //plantsPerMetre = data.Population * data.RowSpacing / 1000.0 * data.SkipDensityScale; + CurrentTillerNumber = 0.0; + CalculatedTillerNumber = 0.0; } } } diff --git a/Models/PMF/Structure/Tillering/FixedTillering.cs b/Models/PMF/Structure/Tillering/FixedTillering.cs index 5c00a9b4cb..4709be8012 100644 --- a/Models/PMF/Structure/Tillering/FixedTillering.cs +++ b/Models/PMF/Structure/Tillering/FixedTillering.cs @@ -25,9 +25,9 @@ public class FixedTillering : Model, ITilleringMethod Plant plant = null; /// - /// Link to clock (used for FTN calculations at time of sowing). - /// - [Link] + /// Link to clock (used for FTN calculations at time of sowing). + /// + [Link] private IClock clock = null; /// @@ -57,11 +57,12 @@ public class FixedTillering : Model, ITilleringMethod Phenology phenology = null; /// Number of Fertile Tillers at Harvest - public double FertileTillerNumber { get; private set; } + public double FertileTillerNumber { get; set; } + /// Current Number of Tillers + public double CurrentTillerNumber { get; set; } - private int floweringStage; + private int floweringStage; private int endJuvenilePhase; - private double tillersAdded; private bool beforeFlowering() { @@ -142,7 +143,7 @@ void calcTillerAppearance(int newLeafNo, int currentLeafNo) if (newLeafNo < 3) return; //don't add before leaf 3 //if there are still more tillers to add and the newleaf is greater than 3 - if (tillersAdded >= FertileTillerNumber) return; + if (CurrentTillerNumber >= FertileTillerNumber) return; //tiller emergence is more closely aligned with tip apearance, but we don't track tip, so will use ligule appearance //could also use Thermal Time calcs if needed @@ -166,8 +167,8 @@ void calcTillerAppearance(int newLeafNo, int currentLeafNo) } else { - if (FertileTillerNumber - tillersAdded < 1) - fraction = FertileTillerNumber - tillersAdded; + if (FertileTillerNumber - CurrentTillerNumber < 1) + fraction = FertileTillerNumber - CurrentTillerNumber; } AddTiller(leafAppearance, currentLeafNo, fraction); } @@ -180,8 +181,8 @@ void calcTillerAppearance(int newLeafNo, int currentLeafNo) private void AddTiller(double leafAtAppearance, double Leaves, double fractionToAdd) { double fraction = 1; - if (FertileTillerNumber - tillersAdded < 1) - fraction = FertileTillerNumber - tillersAdded; + if (FertileTillerNumber - CurrentTillerNumber < 1) + fraction = FertileTillerNumber - CurrentTillerNumber; // get number of tillers // add fractionToAdd @@ -206,7 +207,7 @@ private void AddTiller(double leafAtAppearance, double Leaves, double fractionTo //T6 = 7 leaves newCulm.CulmNo = culms.Culms.Count; newCulm.CurrentLeafNo = 0;//currentLeaf); - newCulm.VertAdjValue = culms.MaxVerticalTillerAdjustment.Value() + (tillersAdded * culms.VerticalTillerAdjustment.Value()); + newCulm.VertAdjValue = culms.MaxVerticalTillerAdjustment.Value() + (CurrentTillerNumber * culms.VerticalTillerAdjustment.Value()); newCulm.Proportion = fraction; newCulm.FinalLeafNo = culms.Culms[0].FinalLeafNo; //newCulm.calcLeafAppearance(); @@ -219,7 +220,7 @@ private void AddTiller(double leafAtAppearance, double Leaves, double fractionTo { culms.Culms.Last().Proportion = fraction; } - tillersAdded += fractionToAdd; + CurrentTillerNumber += fractionToAdd; } /// Called when crop is sowed @@ -230,11 +231,11 @@ protected void OnPlantSowing(object sender, SowingParameters data) { if (data.Plant == plant) { - if (plant.SowingData.BudNumber == -1) + if (data.TilleringMethod == -1) FertileTillerNumber = CalculateFtn(); else - FertileTillerNumber = data.BudNumber; - tillersAdded = 0.0; + FertileTillerNumber = data.FTN; + CurrentTillerNumber = 0.0; } } diff --git a/Models/Sugarcane/Sugarcane.cs b/Models/Sugarcane/Sugarcane.cs index bc563941a7..06a043a84b 100644 --- a/Models/Sugarcane/Sugarcane.cs +++ b/Models/Sugarcane/Sugarcane.cs @@ -12127,7 +12127,9 @@ public void SetActualNitrogenUptakes(List info) /// The bud number. /// The row configuration. /// The number of seeds sown. - public void Sow(string cultivar, double population, double depth, double rowSpacing, double maxCover = 1, double budNumber = 1, double rowConfig = 1, double seeds = 0) + /// tillering method (-1, 0, 1). + /// Fertile Tiller Number. + public void Sow(string cultivar, double population, double depth, double rowSpacing, double maxCover = 1, double budNumber = 1, double rowConfig = 1, double seeds = 0, int tillering = 0, double ftn = 0.0) { SowNewPlant(population, depth, cultivar); } diff --git a/Prototypes/C4Maize/C4Maize.apsimx b/Prototypes/C4Maize/C4Maize.apsimx index 7755f979a1..8e27a6532c 100644 --- a/Prototypes/C4Maize/C4Maize.apsimx +++ b/Prototypes/C4Maize/C4Maize.apsimx @@ -1,7 +1,7 @@ { "$type": "Models.Core.Simulations, Models", - "ExplorerWidth": 339, - "Version": 150, + "ExplorerWidth": 388, + "Version": 151, "Name": "Simulations", "Children": [ { @@ -5033,6 +5033,7 @@ { "$type": "Models.PMF.Organs.SorghumLeaf, Models", "TilleringMethod": 0, + "FertileTillerNumber": 0.0, "InitialDMWeight": 0.01, "InitialLAI": 380.0, "InitialSLN": 1.7, @@ -5091,7 +5092,7 @@ "$type": "Models.PMF.Struct.LeafCulms, Models", "dltLeafNo": 0.0, "Culms": [], - "TilleringMethod": 0.0, + "TilleringMethod": 0, "FinalLeafNo": 0.0, "dltPotentialLAI": 0.0, "dltStressedLAI": 0.0, @@ -5100,7 +5101,8 @@ { "$type": "Models.PMF.Struct.DynamicTillering, Models", "CalculatedTillerNumber": 0.0, - "FertileTillerNumber": 0.0, + "CurrentTillerNumber": 0.0, + "DltTillerNumber": 0.0, "SupplyDemandRatio": 0.0, "Name": "DynamicTillering", "Children": [ @@ -5239,6 +5241,7 @@ { "$type": "Models.PMF.Struct.FixedTillering, Models", "FertileTillerNumber": 0.0, + "CurrentTillerNumber": 0.0, "Name": "FixedTillering", "Children": [ { @@ -13994,7 +13997,7 @@ "Children": [ { "$type": "Models.Manager, Models", - "Code": "using Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\n double ftn = 0.0;\n double maxCover = 1.0;\n crop.Sow(Cultivar, population, Depth, RowSpacing, maxCover, ftn, 0);\r\n }\r\n }\r\n }\r\n}\r\n", + "Code": "using Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\n crop.Sow(Cultivar, population, Depth, RowSpacing,rowConfig:0);\r\n }\r\n }\r\n }\r\n}\r\n", "Parameters": [ { "Key": "Date", @@ -23324,7 +23327,7 @@ "Children": [ { "$type": "Models.Manager, Models", - "Code": "using Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n double ftn = 0.0;\r\n double maxCover = 1.0;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, maxCover, ftn, 0);\r\n }\r\n }\r\n }\r\n}\r\n", + "Code": "using Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing,rowConfig:0);\r\n }\r\n }\r\n }\r\n}\r\n", "Parameters": [ { "Key": "Date", @@ -23932,7 +23935,7 @@ "Children": [ { "$type": "Models.Manager, Models", - "Code": "using Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n double ftn = 0.0;\r\n double maxCover = 1.0;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, maxCover, ftn, 0);\r\n }\r\n }\r\n }\r\n}\r\n", + "Code": "using Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, rowConfig:0);\r\n }\r\n }\r\n }\r\n}\r\n", "Parameters": [ { "Key": "Date", @@ -30796,7 +30799,7 @@ "Children": [ { "$type": "Models.Manager, Models", - "Code": "using Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n double ftn = 0.0;\r\n double maxCover = 1.0;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, maxCover, ftn, 0);\r\n }\r\n }\r\n }\r\n}\r\n", + "Code": "using Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, rowConfig:0);\r\n }\r\n }\r\n }\r\n}\r\n", "Parameters": [ { "Key": "Date", @@ -31486,7 +31489,7 @@ "Children": [ { "$type": "Models.Manager, Models", - "Code": "using Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n double ftn = 0.0;\r\n double maxCover = 1.0;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, maxCover, ftn, 0);\r\n }\r\n }\r\n }\r\n}\r\n", + "Code": "using Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, rowConfig:0);\r\n }\r\n }\r\n }\r\n}\r\n", "Parameters": [ { "Key": "Date", @@ -32339,7 +32342,7 @@ "Children": [ { "$type": "Models.Manager, Models", - "Code": "using Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n double ftn = 0.0;\r\n double maxCover = 1.0;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, maxCover, ftn, 0);\r\n }\r\n }\r\n }\r\n}\r\n", + "Code": "using Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, rowConfig:0);\r\n }\r\n }\r\n }\r\n}\r\n", "Parameters": [ { "Key": "Date", @@ -33167,7 +33170,7 @@ "Children": [ { "$type": "Models.Manager, Models", - "Code": "using Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n double ftn = 0.0;\r\n double maxCover = 1.0;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, maxCover, ftn, 0);\r\n }\r\n }\r\n }\r\n}\r\n", + "Code": "using Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, rowConfig:0);\r\n }\r\n }\r\n }\r\n}\r\n", "Parameters": [ { "Key": "Date", @@ -33794,7 +33797,7 @@ { "$type": "Models.Operation, Models", "Date": "1985-10-29", - "Action": "[C4Maize].Sow(population:2.53, cultivar:\"Katumani\", depth:50, rowSpacing:500, budNumber:0);", + "Action": "[C4Maize].Sow(population:2.53, cultivar:\"Katumani\", depth:50, rowSpacing:500, rowConfig:0);", "Enabled": true }, { @@ -34325,7 +34328,7 @@ { "$type": "Models.Operation, Models", "Date": "1985-10-29", - "Action": "[C4Maize].Sow(population:6.23, cultivar:\"Katumani\", depth:50, rowSpacing:500, budNumber:0);", + "Action": "[C4Maize].Sow(population:6.23, cultivar:\"Katumani\", depth:50, rowSpacing:500, rowConfig:0);", "Enabled": true }, { @@ -34821,7 +34824,7 @@ { "$type": "Models.Operation, Models", "Date": "1985-10-29", - "Action": "[C4Maize].Sow(population:6.29, cultivar:\"Katumani\", depth:50, rowSpacing:500, budNumber:0);", + "Action": "[C4Maize].Sow(population:6.29, cultivar:\"Katumani\", depth:50, rowSpacing:500, rowConfig:0);", "Enabled": true }, { @@ -35329,7 +35332,7 @@ { "$type": "Models.Operation, Models", "Date": "1985-10-29", - "Action": "[C4Maize].Sow(population:2.40, cultivar:\"Katumani\", depth:50, rowSpacing:500, budNumber:0);", + "Action": "[C4Maize].Sow(population:2.40, cultivar:\"Katumani\", depth:50, rowSpacing:500, rowConfig:0);", "Enabled": true }, { @@ -35848,7 +35851,7 @@ { "$type": "Models.Operation, Models", "Date": "1985-10-29", - "Action": "[C4Maize].Sow(population:6.17, cultivar:\"Katumani\", depth:50, rowSpacing:500, budNumber:0);", + "Action": "[C4Maize].Sow(population:6.17, cultivar:\"Katumani\", depth:50, rowSpacing:500, rowConfig:0);", "Enabled": true }, { @@ -36313,7 +36316,7 @@ { "$type": "Models.Operation, Models", "Date": "1985-10-29", - "Action": "[C4Maize].Sow(population:2.09, cultivar:\"Katumani\", depth:50, rowSpacing:500, budNumber:0);", + "Action": "[C4Maize].Sow(population:2.09, cultivar:\"Katumani\", depth:50, rowSpacing:500, rowConfig:0);", "Enabled": true }, { @@ -36778,7 +36781,7 @@ { "$type": "Models.Operation, Models", "Date": "1985-10-29", - "Action": "[C4Maize].Sow(population:2.34, cultivar:\"Katumani\", depth:50, rowSpacing:500, budNumber:0);", + "Action": "[C4Maize].Sow(population:2.34, cultivar:\"Katumani\", depth:50, rowSpacing:500, rowConfig:0);", "Enabled": true }, { @@ -37185,7 +37188,7 @@ { "$type": "Models.Operation, Models", "Date": "1985-10-29", - "Action": "[C4Maize].Sow(population:6.04, cultivar:\"Katumani\", depth:50, rowSpacing:500, budNumber:0);", + "Action": "[C4Maize].Sow(population:6.04, cultivar:\"Katumani\", depth:50, rowSpacing:500, rowConfig:0);", "Enabled": true }, { @@ -37638,7 +37641,7 @@ { "$type": "Models.Operation, Models", "Date": "1985-10-29", - "Action": "[C4Maize].Sow(population:2.16, cultivar:\"Katumani\", depth:50, rowSpacing:500, budNumber:0);", + "Action": "[C4Maize].Sow(population:2.16, cultivar:\"Katumani\", depth:50, rowSpacing:500, rowConfig:0);", "Enabled": true }, { @@ -38057,7 +38060,7 @@ { "$type": "Models.Operation, Models", "Date": "1985-10-29", - "Action": "[C4Maize].Sow(population:6.23, cultivar:\"Katumani\", depth:50, rowSpacing:500, budNumber:0);", + "Action": "[C4Maize].Sow(population:6.23, cultivar:\"Katumani\", depth:50, rowSpacing:500, rowConfig:0);", "Enabled": true }, { @@ -38487,7 +38490,7 @@ { "$type": "Models.Operation, Models", "Date": "1985-10-29", - "Action": "[C4Maize].Sow(population:5.61, cultivar:\"Katumani\", depth:50, rowSpacing:500, budNumber:0);", + "Action": "[C4Maize].Sow(population:5.61, cultivar:\"Katumani\", depth:50, rowSpacing:500, rowConfig:0);", "Enabled": true }, { @@ -38906,7 +38909,7 @@ { "$type": "Models.Operation, Models", "Date": "1985-10-29", - "Action": "[C4Maize].Sow(population:2.09, cultivar:\"Katumani\", depth:50, rowSpacing:500, budNumber:0);", + "Action": "[C4Maize].Sow(population:2.09, cultivar:\"Katumani\", depth:50, rowSpacing:500, rowConfig:0);", "Enabled": true }, { @@ -39359,7 +39362,7 @@ { "$type": "Models.Operation, Models", "Date": "1985-10-29", - "Action": "[C4Maize].Sow(population:2.16, cultivar:\"Katumani\", depth:50, rowSpacing:500, budNumber:0);", + "Action": "[C4Maize].Sow(population:2.16, cultivar:\"Katumani\", depth:50, rowSpacing:500, rowConfig:0);", "Enabled": true }, { @@ -39812,7 +39815,7 @@ { "$type": "Models.Operation, Models", "Date": "1985-10-29", - "Action": " [C4Maize].Sow(population:5.3, cultivar:\"Katumani\", depth:50, rowSpacing:500, budNumber:0);", + "Action": " [C4Maize].Sow(population:5.3, cultivar:\"Katumani\", depth:50, rowSpacing:500, rowConfig:0);", "Enabled": true }, { @@ -40265,7 +40268,7 @@ { "$type": "Models.Operation, Models", "Date": "1985-10-29", - "Action": "[C4Maize].Sow(population:2.16, cultivar:\"Katumani\", depth:50, rowSpacing:500, budNumber:0);", + "Action": "[C4Maize].Sow(population:2.16, cultivar:\"Katumani\", depth:50, rowSpacing:500, rowConfig:0);", "Enabled": true }, { @@ -40707,7 +40710,7 @@ { "$type": "Models.Operation, Models", "Date": "1985-10-29", - "Action": "[C4Maize].Sow(population:6.48, cultivar:\"Katumani\", depth:50, rowSpacing:500, budNumber:0);", + "Action": "[C4Maize].Sow(population:6.48, cultivar:\"Katumani\", depth:50, rowSpacing:500, rowConfig:0);", "Enabled": true }, { @@ -41172,7 +41175,7 @@ { "$type": "Models.Operation, Models", "Date": "1985-10-29", - "Action": "[C4Maize].Sow(population:4.25, cultivar:\"Katumani\", depth:50, rowSpacing:500, budNumber:0);", + "Action": "[C4Maize].Sow(population:4.25, cultivar:\"Katumani\", depth:50, rowSpacing:500, rowConfig:0);", "Enabled": true }, { @@ -41591,7 +41594,7 @@ { "$type": "Models.Operation, Models", "Date": "1985-10-29", - "Action": "[C4Maize].Sow(population:2.03, cultivar:\"Katumani\", depth:50, rowSpacing:500, budNumber:0);", + "Action": "[C4Maize].Sow(population:2.03, cultivar:\"Katumani\", depth:50, rowSpacing:500, rowConfig:0);", "Enabled": true }, { @@ -41975,7 +41978,7 @@ { "$type": "Models.Operation, Models", "Date": "1985-10-29", - "Action": "[C4Maize].Sow(population:2.22, cultivar:\"Katumani\", depth:50, rowSpacing:500, budNumber:0);", + "Action": "[C4Maize].Sow(population:2.22, cultivar:\"Katumani\", depth:50, rowSpacing:500, rowConfig:0);", "Enabled": true }, { @@ -42371,7 +42374,7 @@ { "$type": "Models.Operation, Models", "Date": "1985-10-29", - "Action": "[C4Maize].Sow(population:4.87, cultivar:\"Katumani\", depth:50, rowSpacing:500, budNumber:0);", + "Action": "[C4Maize].Sow(population:4.87, cultivar:\"Katumani\", depth:50, rowSpacing:500, rowConfig:0);", "Enabled": true }, { @@ -42778,7 +42781,7 @@ { "$type": "Models.Operation, Models", "Date": "1985-10-29", - "Action": "[C4Maize].Sow(population:2.34, cultivar:\"Katumani\", depth:50, rowSpacing:500, budNumber:0);", + "Action": "[C4Maize].Sow(population:2.34, cultivar:\"Katumani\", depth:50, rowSpacing:500, rowConfig:0);", "Enabled": true }, { @@ -43251,7 +43254,7 @@ { "$type": "Models.Operation, Models", "Date": "1985-10-29", - "Action": "[C4Maize].Sow(population:2.22, cultivar:\"Katumani\", depth:50, rowSpacing:500, budNumber:0);", + "Action": "[C4Maize].Sow(population:2.22, cultivar:\"Katumani\", depth:50, rowSpacing:500, rowConfig:0);", "Enabled": true }, { @@ -43713,7 +43716,7 @@ { "$type": "Models.Operation, Models", "Date": "1985-10-29", - "Action": "[C4Maize].Sow(population:6.54, cultivar:\"Katumani\", depth:50, rowSpacing:500, budNumber:0);", + "Action": "[C4Maize].Sow(population:6.54, cultivar:\"Katumani\", depth:50, rowSpacing:500, rowConfig:0);", "Enabled": true }, { @@ -44209,7 +44212,7 @@ { "$type": "Models.Operation, Models", "Date": "1985-10-29", - "Action": "[C4Maize].Sow(population:6.54, cultivar:\"Katumani\", depth:50, rowSpacing:500, budNumber:0);", + "Action": "[C4Maize].Sow(population:6.54, cultivar:\"Katumani\", depth:50, rowSpacing:500, rowConfig:0);", "Enabled": true }, { @@ -45257,7 +45260,7 @@ { "$type": "Models.Operation, Models", "Date": "1985-12-18", - "Action": "[C4Maize].Sow(population:6.67, cultivar:\"Katumani\", depth:50, rowSpacing:500, budNumber:0);", + "Action": "[C4Maize].Sow(population:6.67, cultivar:\"Katumani\", depth:50, rowSpacing:500, rowConfig:0);", "Enabled": true }, { @@ -45679,7 +45682,7 @@ { "$type": "Models.Operation, Models", "Date": "1985-12-18", - "Action": "[C4Maize].Sow(population:6.3, cultivar:\"Katumani\", depth:50, rowSpacing:500, budNumber:0);", + "Action": "[C4Maize].Sow(population:6.3, cultivar:\"Katumani\", depth:50, rowSpacing:500, rowConfig:0);", "Enabled": true }, { @@ -46170,7 +46173,7 @@ { "$type": "Models.Operation, Models", "Date": "1985-12-18", - "Action": "[C4Maize].Sow(population:6.48, cultivar:\"Katumani\", depth:50, rowSpacing:500, budNumber:0);", + "Action": "[C4Maize].Sow(population:6.48, cultivar:\"Katumani\", depth:50, rowSpacing:500, rowConfig:0);", "Enabled": true }, { @@ -46661,7 +46664,7 @@ { "$type": "Models.Operation, Models", "Date": "1985-12-18", - "Action": "[C4Maize].Sow(population:6.39, cultivar:\"Katumani\", depth:50, rowSpacing:500, budNumber:0);", + "Action": "[C4Maize].Sow(population:6.39, cultivar:\"Katumani\", depth:50, rowSpacing:500, rowConfig:0);", "Enabled": true }, { @@ -47074,7 +47077,7 @@ { "$type": "Models.Operation, Models", "Date": "1985-12-18", - "Action": "[C4Maize].Sow(population:2.22, cultivar:\"Katumani\", depth:50, rowSpacing:500, budNumber:0);", + "Action": "[C4Maize].Sow(population:2.22, cultivar:\"Katumani\", depth:50, rowSpacing:500, rowConfig:0);", "Enabled": true }, { @@ -47565,7 +47568,7 @@ { "$type": "Models.Operation, Models", "Date": "1985-12-18", - "Action": "[C4Maize].Sow(population:2.13, cultivar:\"Katumani\", depth:50, rowSpacing:500, budNumber:0);", + "Action": "[C4Maize].Sow(population:2.13, cultivar:\"Katumani\", depth:50, rowSpacing:500, rowConfig:0);", "Enabled": true }, { @@ -48079,7 +48082,7 @@ { "$type": "Models.Operation, Models", "Date": "1985-12-18", - "Action": "[C4Maize].Sow(population:2.22, cultivar:\"Katumani\", depth:50, rowSpacing:500, budNumber:0);", + "Action": "[C4Maize].Sow(population:2.22, cultivar:\"Katumani\", depth:50, rowSpacing:500, rowConfig:0);", "Enabled": true }, { @@ -48593,7 +48596,7 @@ { "$type": "Models.Operation, Models", "Date": "1985-12-18", - "Action": "[C4Maize].Sow(population:2.22, cultivar:\"Katumani\", depth:50, rowSpacing:500, budNumber:0);", + "Action": "[C4Maize].Sow(population:2.22, cultivar:\"Katumani\", depth:50, rowSpacing:500, rowConfig:0);", "Enabled": true }, { @@ -49064,7 +49067,7 @@ { "$type": "Models.Operation, Models", "Date": "1985-12-18", - "Action": "[C4Maize].Sow(population:2.22, cultivar:\"Katumani\", depth:50, rowSpacing:500, budNumber:0);", + "Action": "[C4Maize].Sow(population:2.22, cultivar:\"Katumani\", depth:50, rowSpacing:500, rowConfig:0);", "Enabled": true }, { @@ -49555,7 +49558,7 @@ { "$type": "Models.Operation, Models", "Date": "1985-12-18", - "Action": "[C4Maize].Sow(population:2.22, cultivar:\"Katumani\", depth:50, rowSpacing:500, budNumber:0);", + "Action": "[C4Maize].Sow(population:2.22, cultivar:\"Katumani\", depth:50, rowSpacing:500, rowConfig:0);", "Enabled": true }, { @@ -50046,7 +50049,7 @@ { "$type": "Models.Operation, Models", "Date": "1985-12-18", - "Action": "[C4Maize].Sow(population:2.22, cultivar:\"Katumani\", depth:50, rowSpacing:500, budNumber:0);", + "Action": "[C4Maize].Sow(population:2.22, cultivar:\"Katumani\", depth:50, rowSpacing:500, rowConfig:0);", "Enabled": true }, { @@ -50514,7 +50517,7 @@ { "$type": "Models.Operation, Models", "Date": "1985-12-18", - "Action": "[C4Maize].Sow(population:2.22, cultivar:\"Katumani\", depth:50, rowSpacing:500, budNumber:0);", + "Action": "[C4Maize].Sow(population:2.22, cultivar:\"Katumani\", depth:50, rowSpacing:500, rowConfig:0);", "Enabled": true }, { @@ -51028,7 +51031,7 @@ { "$type": "Models.Operation, Models", "Date": "1985-12-18", - "Action": "[C4Maize].Sow(population:6.57, cultivar:\"Katumani\", depth:50, rowSpacing:500, budNumber:0);", + "Action": "[C4Maize].Sow(population:6.57, cultivar:\"Katumani\", depth:50, rowSpacing:500, rowConfig:0);", "Enabled": true }, { @@ -51519,7 +51522,7 @@ { "$type": "Models.Operation, Models", "Date": "1985-12-18", - "Action": "[C4Maize].Sow(population:6.48, cultivar:\"Katumani\", depth:50, rowSpacing:500, budNumber:0);", + "Action": "[C4Maize].Sow(population:6.48, cultivar:\"Katumani\", depth:50, rowSpacing:500, rowConfig:0);", "Enabled": true }, { @@ -51964,7 +51967,7 @@ { "$type": "Models.Operation, Models", "Date": "1985-12-18", - "Action": "[C4Maize].Sow(population:6.3, cultivar:\"Katumani\", depth:50, rowSpacing:500, budNumber:0);", + "Action": "[C4Maize].Sow(population:6.3, cultivar:\"Katumani\", depth:50, rowSpacing:500, rowConfig:0);", "Enabled": true }, { @@ -52409,7 +52412,7 @@ { "$type": "Models.Operation, Models", "Date": "1985-12-18", - "Action": "[C4Maize].Sow(population:6.76, cultivar:\"Katumani\", depth:50, rowSpacing:500, budNumber:0);", + "Action": "[C4Maize].Sow(population:6.76, cultivar:\"Katumani\", depth:50, rowSpacing:500, rowConfig:0);", "Enabled": true }, { @@ -53532,7 +53535,7 @@ "Children": [ { "$type": "Models.Manager, Models", - "Code": "using Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n double ftn = 0.0;\r\n double maxCover = 1.0;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, maxCover, ftn, 0);\r\n }\r\n }\r\n }\r\n}\r\n", + "Code": "using Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, rowConfig:0);\r\n }\r\n }\r\n }\r\n}\r\n", "Parameters": [ { "Key": "Date", @@ -55095,7 +55098,7 @@ "Children": [ { "$type": "Models.Manager, Models", - "Code": "using Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n double ftn = 0.0;\r\n double maxCover = 1.0;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, maxCover, ftn, 0);\r\n }\r\n }\r\n }\r\n}\r\n", + "Code": "using Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, rowConfig:0);\r\n }\r\n }\r\n }\r\n}\r\n", "Parameters": [ { "Key": "Date", @@ -55721,7 +55724,7 @@ "Children": [ { "$type": "Models.Manager, Models", - "Code": "using Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n double ftn = 0.0;\r\n double maxCover = 1.0;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, maxCover, ftn, 0);\r\n }\r\n }\r\n }\r\n}\r\n", + "Code": "using Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, rowConfig:0);\r\n }\r\n }\r\n }\r\n}\r\n", "Parameters": [ { "Key": "Date", @@ -56479,11 +56482,11 @@ "Children": [ { "$type": "Models.Manager, Models", - "Code": "using Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n double ftn = 0.0;\r\n double maxCover = 1.0;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, maxCover, ftn, 0);\r\n }\r\n }\r\n }\r\n}\r\n", + "Code": "using Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, rowConfig:0);\r\n }\r\n }\r\n }\r\n}\r\n", "Parameters": [ { "Key": "Date", - "Value": "1990-08-28" + "Value": "08/28/1990 00:00:00" }, { "Key": "Density", @@ -57273,7 +57276,7 @@ "Children": [ { "$type": "Models.Manager, Models", - "Code": "using Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n double ftn = 0.0;\r\n double maxCover = 1.0;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, maxCover, ftn, 0);\r\n }\r\n }\r\n }\r\n}\r\n", + "Code": "using Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, rowConfig:0);\r\n }\r\n }\r\n }\r\n}\r\n", "Parameters": [ { "Key": "Date", @@ -58097,7 +58100,7 @@ "Children": [ { "$type": "Models.Manager, Models", - "Code": "using Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n double ftn = 0.0;\r\n double maxCover = 1.0;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, maxCover, ftn, 0);\r\n }\r\n }\r\n }\r\n}\r\n", + "Code": "using Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, rowConfig:0);\r\n }\r\n }\r\n }\r\n}\r\n", "Parameters": [ { "Key": "Date", @@ -59006,7 +59009,7 @@ "Children": [ { "$type": "Models.Manager, Models", - "Code": "using Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n double ftn = 0.0;\r\n double maxCover = 1.0;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, maxCover, ftn, 0);\r\n }\r\n }\r\n }\r\n}\r\n", + "Code": "using Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, rowConfig:0);\r\n }\r\n }\r\n }\r\n}\r\n", "Parameters": [ { "Key": "Date", @@ -61293,7 +61296,7 @@ "Children": [ { "$type": "Models.Manager, Models", - "Code": "using Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n double ftn = 0.0;\r\n double maxCover = 1.0;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, maxCover, ftn, 0);\r\n }\r\n }\r\n }\r\n}\r\n", + "Code": "using Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, rowConfig:0);\r\n }\r\n }\r\n }\r\n}\r\n", "Parameters": [ { "Key": "Date", @@ -62110,7 +62113,7 @@ "Children": [ { "$type": "Models.Manager, Models", - "Code": "using Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n double ftn = 0.0;\r\n double maxCover = 1.0;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, maxCover, ftn, 0);\r\n }\r\n }\r\n }\r\n}\r\n", + "Code": "using Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, rowConfig:0);\r\n }\r\n }\r\n }\r\n}\r\n", "Parameters": [ { "Key": "Date", @@ -62712,7 +62715,7 @@ "Children": [ { "$type": "Models.Manager, Models", - "Code": "using Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n double ftn = 0.0;\r\n double maxCover = 1.0;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, maxCover, ftn, 0);\r\n }\r\n }\r\n }\r\n}\r\n", + "Code": "using Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, rowConfig:0);\r\n }\r\n }\r\n }\r\n}\r\n", "Parameters": [ { "Key": "Date", diff --git a/Tests/UnderReview/Sorghum/Met/Gatton_Tiller_x_Density.met b/Tests/UnderReview/Sorghum/Met/Gatton_Tiller_x_Density.met new file mode 100644 index 0000000000..679e39c210 --- /dev/null +++ b/Tests/UnderReview/Sorghum/Met/Gatton_Tiller_x_Density.met @@ -0,0 +1,134 @@ +[weather.met.weather] +!experiment number = 2 +!experiment = Gatton Tiller x Density +!station name = Gatton RS +latitude = -27.55 (DECIMAL DEGREES) +longitude = 152.33 (DECIMAL DEGREES) +tav = 19.51 (oC) ! annual average ambient temperature +amp = 10.55 (oC) ! annual amplitude in mean monthly temperature + +Year Day MAXT MINT RADN RAIN + () () () () () () +1998 296 28.92 11.06 25.37 0.0 +1998 297 29.43 13.6 23.09 0.0 +1998 298 22.59 13.74 6.08 0.0 +1998 299 30.26 18.93 19.49 5.8 +1998 300 33.12 19.75 27.71 0.2 +1998 301 33.12 19.75 30.69 0.2 +1998 302 26.31 17.54 26.03 1.8 +1998 303 24.02 16.48 9.14 2.2 +1998 304 30.84 17 24.08 2.8 +1998 305 24.27 16.75 16.38 0.2 +1998 306 24.81 13.09 28.44 1 +1998 307 25.31 10.55 29.76 0.0 +1998 308 28.1 7.97 30.58 0.0 +1998 309 29.34 13.58 25.55 0.0 +1998 310 30.69 13.42 27.87 0.0 +1998 311 30.58 15.37 29.22 0.0 +1998 312 32.09 13.86 24.01 0.0 +1998 313 28.87 20.63 13.01 0.0 +1998 314 26.28 16.59 14.24 0.0 +1998 315 30.27 11.77 22.88 0.0 +1998 316 24.62 18.32 8.5 0.0 +1998 317 22.66 17.76 8.21 0.8 +1998 318 29.99 19.24 26.9 21 +1998 319 30.65 17.99 27.77 0.0 +1998 320 30.99 16.45 27.54 0.0 +1998 321 29.64 15.34 23.32 0.0 +1998 322 27.55 14.55 18.69 0.0 +1998 323 25.69 12.6 27.11 5.2 +1998 324 26.5 11.6 25.74 0.0 +1998 325 28.08 11.84 27.69 0.0 +1998 326 31.12 16.01 20.31 0.0 +1998 327 32.38 15.5 29.27 9.6 +1998 328 31.46 16.56 14.24 0.2 +1998 329 25.22 17.06 17.83 43 +1998 330 26.79 15.88 26.86 9.4 +1998 331 27.2 12.7 27.24 0.2 +1998 332 30.14 16.5 21.78 0.0 +1998 333 26.82 17.42 28.39 13.8 +1998 334 30.84 16.01 33.73 0.0 +1998 335 27.18 13.33 25.61 0.0 +1998 336 27.71 14.68 30.99 0.0 +1998 337 32.11 13.28 32.17 0.0 +1998 338 35.74 14.64 29.19 0.0 +1998 339 32.33 17.43 25.65 0.0 +1998 340 31.22 17.04 29.62 0.0 +1998 341 32.84 17.94 29.24 0.0 +1998 342 30.67 20.4 23.26 0.0 +1998 343 30.17 17.58 28.85 0.0 +1998 344 29.84 18.55 24.06 0.0 +1998 345 28.65 19.11 19.45 0.0 +1998 346 28.56 17.52 24.31 0.0 +1998 347 28.74 17.13 20.74 0.0 +1998 348 31.64 18.34 29.04 0.0 +1998 349 31.42 16.15 26.57 0.0 +1998 350 31.92 18.81 28.77 29.8 +1998 351 33.6 19.54 26.18 4.2 +1998 352 31.48 23.19 16.25 0.0 +1998 353 30.56 19.61 21.75 9.8 +1998 354 32.03 19.83 22.06 13.8 +1998 355 32.99 23.01 19.01 7.6 +1998 356 28.3 20.93 20.27 0.2 +1998 357 27.51 16.05 20.09 0.0 +1998 358 27.13 20.75 19.92 0.6 +1998 359 30.78 16.41 23.05 8 +1998 360 34.02 17.94 23.68 0.2 +1998 361 39.43 20.11 27.13 0.0 +1998 362 36.72 18.18 27.55 0.0 +1998 363 32.53 22.33 20.35 0.0 +1998 364 31.05 21.88 15.08 0.0 +1998 365 27.01 23.23 9.55 0.0 +1999 1 24.56 19.5 6.74 3 +1999 2 22.93 19.64 7 21.8 +1999 3 27.43 19.08 13.98 20.6 +1999 4 28.23 20.77 14.72 0.2 +1999 5 28.12 20.38 21.05 9 +1999 6 30.13 19.01 24.75 3.8 +1999 7 30.92 18.44 25.71 0.0 +1999 8 32.94 17.99 26.52 0.0 +1999 9 34.83 19.93 23.43 0.0 +1999 10 29.34 20.41 17.22 79.2 +1999 11 33.48 19.45 26.73 5 +1999 12 31.32 22.41 15.75 0.2 +1999 13 33.7 21.55 23.92 1.2 +1999 14 33.79 22.8 23.45 0.0 +1999 15 29.44 21.36 18.62 0.0 +1999 16 30.76 16.75 23.87 0.6 +1999 17 29.84 17.6 23.77 0.0 +1999 18 30.07 20.03 27.7 0.0 +1999 19 30.73 16.79 24.69 0.0 +1999 20 31.72 19.08 25.4 0.0 +1999 21 30.59 20.92 22.12 0.8 +1999 22 31.18 17.42 29.22 0.2 +1999 23 31.79 15.49 28.96 0.0 +1999 24 33.9 18.05 27.33 0.0 +1999 25 29.29 21.14 12.11 0.0 +1999 26 31.39 22.95 21.64 0.0 +1999 27 31.68 19.12 22.38 0.0 +1999 28 32.48 21.52 20.9 0.2 +1999 29 33.95 21.23 23.16 0.2 +1999 30 33.98 20.43 19.54 7.6 +1999 31 31.21 21.41 15.39 3.2 +1999 32 24.72 20.88 6.98 4.8 +1999 33 27.24 19.89 16.36 13.2 +1999 34 28.94 19.37 26.48 0.0 +1999 35 29.31 17.75 22.97 0.0 +1999 36 32.78 16.47 30.52 0.0 +1999 37 32.86 19.59 25.99 0.0 +1999 38 27.8 20.64 8.85 0.0 +1999 39 24.76 21.99 3.44 23 +1999 40 25.18 20.33 9.63 103 +1999 41 28.61 21.03 23.02 8.2 +1999 42 26.61 18.3 17.54 0.4 +1999 43 28.61 17.52 23.21 0.6 +1999 44 30.76 19.13 27.1 0 +1999 45 31.57 19.08 27.25 0.0 +1999 46 33.59 20.51 28.5 0.0 +1999 47 37 21.6 24.11 0.0 +1999 48 33.98 23.96 23.1 0.0 +1999 49 38.19 21.25 26.83 0.0 +1999 50 29.11 20.76 18.31 0.0 +1999 51 27.45 15.81 19.87 0.0 +1999 52 27.77 15.75 18.86 0.0 + diff --git a/Tests/UnderReview/Sorghum/Sorghum.apsimx b/Tests/UnderReview/Sorghum/Sorghum.apsimx index 6596f792b5..792cf8e0f2 100644 --- a/Tests/UnderReview/Sorghum/Sorghum.apsimx +++ b/Tests/UnderReview/Sorghum/Sorghum.apsimx @@ -1,6 +1,6 @@ { "$type": "Models.Core.Simulations, Models", - "ExplorerWidth": 352, + "ExplorerWidth": 285, "Version": 151, "Name": "Simulations", "Children": [ @@ -3433,6 +3433,7 @@ { "$type": "Models.PMF.Organs.SorghumLeaf, Models", "TilleringMethod": 0, + "FertileTillerNumber": 0.0, "InitialDMWeight": 0.1, "InitialLAI": 200.0, "InitialSLN": 1.5, @@ -3499,7 +3500,7 @@ "$type": "Models.PMF.Struct.LeafCulms, Models", "dltLeafNo": 0.0, "Culms": [], - "TilleringMethod": 0.0, + "TilleringMethod": 0, "FinalLeafNo": 0.0, "dltPotentialLAI": 0.0, "dltStressedLAI": 0.0, @@ -3516,7 +3517,8 @@ { "$type": "Models.PMF.Struct.DynamicTillering, Models", "CalculatedTillerNumber": 0.0, - "FertileTillerNumber": 0.0, + "CurrentTillerNumber": 0.0, + "DltTillerNumber": 0.0, "SupplyDemandRatio": 0.0, "Name": "DynamicTillering", "Children": [ @@ -3655,6 +3657,7 @@ { "$type": "Models.PMF.Struct.FixedTillering, Models", "FertileTillerNumber": 0.0, + "CurrentTillerNumber": 0.0, "Name": "FixedTillering", "Children": [ { @@ -10098,7 +10101,7 @@ "Children": [ { "$type": "Models.Manager, Models", - "Code": "using APSIM.Shared.Utilities;\r\nusing Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; }\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Description(\"Enter skip row configuration : \")]\r\n public RowConfigurationType RowConfiguration { get; set; }\r\n\r\n [Description(\"Enter Fertile Tiller No. : \")]\r\n public double Ftn { get; set; }\r\n\r\n public enum RowConfigurationType \r\n {\r\n solid, single, _double /*replaces double*/\r\n }\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, budNumber: Ftn, rowConfig: (double)RowConfiguration);\r\n }\r\n }\r\n }\r\n}\r\n", + "Code": "using APSIM.Shared.Utilities;\r\nusing Models.PMF;\r\nusing Models.Core;\r\nusing System;\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; }\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Description(\"Enter skip row configuration : \")]\r\n public RowConfigurationType RowConfiguration { get; set; }\r\n\r\n [Description(\"Tillering Method\")]\r\n public TilleringMethodType TilleringMethod { get; set; } = 0;\r\n\n [Description(\"Enter Fertile Tiller No. : \")]\r\n public double Ftn { get; set; }\r\n\r\n public enum TilleringMethodType \r\n {\r\n RuleOfThumb = -1,\n FixedTillering = 0,\n DynamicTillering = 1\r\n }\r\n public enum RowConfigurationType \r\n {\r\n Solid, SingleSkip, DoubleSkip\r\n }\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private Plant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\n crop.Sow(cultivar:Cultivar, population:population, depth:Depth, rowSpacing:RowSpacing, rowConfig: (double)RowConfiguration, tillering:(int)TilleringMethod, ftn:Ftn);\r\n }\r\n }\r\n }\r\n}\r\n", "Parameters": [ { "Key": "Cultivar", @@ -10126,7 +10129,11 @@ }, { "Key": "RowConfiguration", - "Value": "solid" + "Value": "Solid" + }, + { + "Key": "TilleringMethod", + "Value": "FixedTillering" } ], "Name": "SowingRule", @@ -24324,16 +24331,8 @@ "Children": [ { "$type": "Models.Manager, Models", - "Code": "using APSIM.Shared.Utilities;\r\nusing Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; }\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Description(\"Enter skip row configuration : \")]\r\n public RowConfigurationType RowConfiguration { get; set; }\r\n\r\n [Description(\"Enter Fertile Tiller No. : \")]\r\n public double Ftn { get; set; }\r\n\r\n public enum RowConfigurationType \r\n {\r\n solid, single, _double /*replaces double*/\r\n }\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, budNumber: Ftn, rowConfig: (double)RowConfiguration);\r\n }\r\n }\r\n }\r\n}\r\n", + "Code": "using APSIM.Shared.Utilities;\r\nusing Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; }\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Description(\"Enter skip row configuration : \")]\r\n public RowConfigurationType RowConfiguration { get; set; }\r\n\r\n [Description(\"Tillering Method\")]\n public TilleringMethodType TilleringMethod { get; set; } = 0;\n\n [Description(\"Enter Fertile Tiller No. : \")]\n public double Ftn { get; set; }\n\n public enum TilleringMethodType \n {\n RuleOfThumb = -1,\n FixedTillering = 0,\n DynamicTillering = 1\n }\n public enum RowConfigurationType \n {\n Solid, SingleSkip, DoubleSkip\n }\n\n [Link]\n private Zone paddock;\n\n [Link]\n private Clock clock;\n\n [Link]\n private Plant crop;\n\n [EventSubscribe(\"DoManagement\")]\n private void OnDoManagement(object sender, EventArgs e)\n {\n if (clock.Today == Date /* && isFallow */)\n {\n double population = Density * paddock.Area;\n crop.Sow(cultivar:Cultivar, population:population, depth:Depth, rowSpacing:RowSpacing, rowConfig: (double)RowConfiguration, tillering:(int)TilleringMethod, ftn:Ftn);\n }\n }\n }\r\n}\r\n", "Parameters": [ - { - "Key": "Cultivar", - "Value": "QL41xQL36" - }, - { - "Key": "Ftn", - "Value": "0" - }, { "Key": "Date", "Value": "01/09/1997 00:00:00" @@ -24346,13 +24345,25 @@ "Key": "Depth", "Value": "30" }, + { + "Key": "Cultivar", + "Value": "QL41xQL36" + }, { "Key": "RowSpacing", "Value": "500" }, { "Key": "RowConfiguration", - "Value": "solid" + "Value": "Solid" + }, + { + "Key": "TilleringMethod", + "Value": "FixedTillering" + }, + { + "Key": "Ftn", + "Value": "0" } ], "Name": "SowingRule", @@ -25067,16 +25078,8 @@ "Children": [ { "$type": "Models.Manager, Models", - "Code": "using APSIM.Shared.Utilities;\r\nusing Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; }\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Description(\"Enter skip row configuration : \")]\r\n public RowConfigurationType RowConfiguration { get; set; }\r\n\r\n [Description(\"Enter Fertile Tiller No. : \")]\r\n public double Ftn { get; set; }\r\n\r\n public enum RowConfigurationType \r\n {\r\n solid, single, _double /*replaces double*/\r\n }\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, budNumber: Ftn, rowConfig: (double)RowConfiguration);\r\n }\r\n }\r\n }\r\n}\r\n", + "Code": "using APSIM.Shared.Utilities;\r\nusing Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; }\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Description(\"Enter skip row configuration : \")]\r\n public RowConfigurationType RowConfiguration { get; set; }\r\n\r\n [Description(\"Tillering Method\")]\n public TilleringMethodType TilleringMethod { get; set; } = 0;\n\n [Description(\"Enter Fertile Tiller No. : \")]\n public double Ftn { get; set; }\n\n public enum TilleringMethodType \n {\n RuleOfThumb = -1,\n FixedTillering = 0,\n DynamicTillering = 1\n }\n public enum RowConfigurationType \n {\n Solid, SingleSkip, DoubleSkip\n }\n\n [Link]\n private Zone paddock;\n\n [Link]\n private Clock clock;\n\n [Link]\n private Plant crop;\n\n [EventSubscribe(\"DoManagement\")]\n private void OnDoManagement(object sender, EventArgs e)\n {\n if (clock.Today == Date /* && isFallow */)\n {\n double population = Density * paddock.Area;\n crop.Sow(cultivar:Cultivar, population:population, depth:Depth, rowSpacing:RowSpacing, rowConfig: (double)RowConfiguration, tillering:(int)TilleringMethod, ftn:Ftn);\n }\n }\n }\r\n}\r\n", "Parameters": [ - { - "Key": "Cultivar", - "Value": "QL41xQL36" - }, - { - "Key": "Ftn", - "Value": "0" - }, { "Key": "Date", "Value": "01/09/1997 00:00:00" @@ -25089,13 +25092,25 @@ "Key": "Depth", "Value": "15" }, + { + "Key": "Cultivar", + "Value": "QL41xQL36" + }, { "Key": "RowSpacing", "Value": "500" }, { "Key": "RowConfiguration", - "Value": "solid" + "Value": "Solid" + }, + { + "Key": "TilleringMethod", + "Value": "FixedTillering" + }, + { + "Key": "Ftn", + "Value": "0" } ], "Name": "SowingRule", @@ -25812,16 +25827,8 @@ "Children": [ { "$type": "Models.Manager, Models", - "Code": "using APSIM.Shared.Utilities;\r\nusing Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; }\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Description(\"Enter skip row configuration : \")]\r\n public RowConfigurationType RowConfiguration { get; set; }\r\n\r\n [Description(\"Enter Fertile Tiller No. : \")]\r\n public double Ftn { get; set; }\r\n\r\n public enum RowConfigurationType \r\n {\r\n solid, single, _double /*replaces double*/\r\n }\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, budNumber: Ftn, rowConfig: (double)RowConfiguration);\r\n }\r\n }\r\n }\r\n}\r\n", + "Code": "using APSIM.Shared.Utilities;\r\nusing Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; }\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Description(\"Enter skip row configuration : \")]\r\n public RowConfigurationType RowConfiguration { get; set; }\r\n\r\n [Description(\"Tillering Method\")]\n public TilleringMethodType TilleringMethod { get; set; } = 0;\n\n [Description(\"Enter Fertile Tiller No. : \")]\n public double Ftn { get; set; }\n\n public enum TilleringMethodType \n {\n RuleOfThumb = -1,\n FixedTillering = 0,\n DynamicTillering = 1\n }\n public enum RowConfigurationType \n {\n Solid, SingleSkip, DoubleSkip\n }\n\n [Link]\n private Zone paddock;\n\n [Link]\n private Clock clock;\n\n [Link]\n private Plant crop;\n\n [EventSubscribe(\"DoManagement\")]\n private void OnDoManagement(object sender, EventArgs e)\n {\n if (clock.Today == Date /* && isFallow */)\n {\n double population = Density * paddock.Area;\n crop.Sow(cultivar:Cultivar, population:population, depth:Depth, rowSpacing:RowSpacing, rowConfig: (double)RowConfiguration, tillering:(int)TilleringMethod, ftn:Ftn);\n }\n }\n }\r\n}\r\n", "Parameters": [ - { - "Key": "Cultivar", - "Value": "QL41xQL36" - }, - { - "Key": "Ftn", - "Value": "0" - }, { "Key": "Date", "Value": "01/09/1997 00:00:00" @@ -25834,13 +25841,25 @@ "Key": "Depth", "Value": "30" }, + { + "Key": "Cultivar", + "Value": "QL41xQL36" + }, { "Key": "RowSpacing", "Value": "500" }, { "Key": "RowConfiguration", - "Value": "solid" + "Value": "Solid" + }, + { + "Key": "TilleringMethod", + "Value": "FixedTillering" + }, + { + "Key": "Ftn", + "Value": "0" } ], "Name": "SowingRule", @@ -26576,8 +26595,12 @@ "Children": [ { "$type": "Models.Manager, Models", - "Code": "using APSIM.Shared.Utilities;\r\nusing Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Description(\"Enter skip row configuration : \")]\r\n public RowConfigurationType RowConfiguration { get; set; }\r\n\r\n [Description(\"Enter Fertile Tiller No. : \")]\r\n public double Ftn { get; set; }\r\n\r\n public enum RowConfigurationType \r\n {\r\n solid, single, _double /*replaces double*/\r\n }\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, budNumber: Ftn, rowConfig: (double)RowConfiguration);\r\n /*\r\n if (paddock_is_fallow() = 1 and today = date('[date]')) then\r\n [crop] sow plants =[density], sowing_depth = [depth], cultivar = [cultivar], row_spacing = [row_spacing], skip = [RowConfiguration], tiller_no_fertile = [ftn] ()\r\n endif\r\n */\r\n }\r\n }\r\n }\r\n}\r\n", + "Code": "using APSIM.Shared.Utilities;\r\nusing Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Description(\"Enter skip row configuration : \")]\r\n public RowConfigurationType RowConfiguration { get; set; }\r\n\r\n [Description(\"Tillering Method\")]\n public TilleringMethodType TilleringMethod { get; set; } = 0;\n\n [Description(\"Enter Fertile Tiller No. : \")]\n public double Ftn { get; set; }\n\n public enum TilleringMethodType \n {\n RuleOfThumb = -1,\n FixedTillering = 0,\n DynamicTillering = 1\n }\n public enum RowConfigurationType \n {\n Solid, SingleSkip, DoubleSkip\n }\n\n [Link]\n private Zone paddock;\n\n [Link]\n private Clock clock;\n\n [Link]\n private Plant crop;\n\n [EventSubscribe(\"DoManagement\")]\n private void OnDoManagement(object sender, EventArgs e)\n {\n if (clock.Today == Date /* && isFallow */)\n {\n double population = Density * paddock.Area;\n crop.Sow(cultivar:Cultivar, population:population, depth:Depth, rowSpacing:RowSpacing, rowConfig: (double)RowConfiguration, tillering:(int)TilleringMethod, ftn:Ftn);\n }\n }\n }\r\n}\r\n", "Parameters": [ + { + "Key": "Cultivar", + "Value": "Buster" + }, { "Key": "Date", "Value": "11/27/1997 00:00:00" @@ -26590,17 +26613,17 @@ "Key": "Depth", "Value": "30" }, - { - "Key": "Cultivar", - "Value": "Buster" - }, { "Key": "RowSpacing", "Value": "500" }, { "Key": "RowConfiguration", - "Value": "solid" + "Value": "Solid" + }, + { + "Key": "TilleringMethod", + "Value": "FixedTillering" }, { "Key": "Ftn", @@ -27320,7 +27343,7 @@ "Children": [ { "$type": "Models.Manager, Models", - "Code": "using APSIM.Shared.Utilities;\r\nusing Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Description(\"Enter skip row configuration : \")]\r\n public RowConfigurationType RowConfiguration { get; set; }\r\n\r\n [Description(\"Enter Fertile Tiller No. : \")]\r\n public double Ftn { get; set; }\r\n\r\n public enum RowConfigurationType \r\n {\r\n solid, single, _double /*replaces double*/\r\n }\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, budNumber: Ftn, rowConfig: (double)RowConfiguration);\r\n /*\r\n if (paddock_is_fallow() = 1 and today = date('[date]')) then\r\n [crop] sow plants =[density], sowing_depth = [depth], cultivar = [cultivar], row_spacing = [row_spacing], skip = [RowConfiguration], tiller_no_fertile = [ftn] ()\r\n endif\r\n */\r\n }\r\n }\r\n }\r\n}\r\n", + "Code": "using APSIM.Shared.Utilities;\r\nusing Models.PMF;\r\nusing Models.Core;\r\nusing System;\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Description(\"Enter skip row configuration : \")]\r\n public RowConfigurationType RowConfiguration { get; set; }\r\n\r\n [Description(\"Tillering Method\")]\n public TilleringMethodType TilleringMethod { get; set; } = 0;\n\n [Description(\"Enter Fertile Tiller No. : \")]\n public double Ftn { get; set; }\n\n public enum TilleringMethodType \n {\n RuleOfThumb = -1,\n FixedTillering = 0,\n DynamicTillering = 1\n }\n public enum RowConfigurationType \n {\n Solid, SingleSkip, DoubleSkip\n }\n\n [Link]\n private Zone paddock;\n\n [Link]\n private Clock clock;\n\n [Link]\n private Plant crop;\n\n [EventSubscribe(\"DoManagement\")]\n private void OnDoManagement(object sender, EventArgs e)\n {\n if (clock.Today == Date /* && isFallow */)\n {\n double population = Density * paddock.Area;\n crop.Sow(cultivar:Cultivar, population:population, depth:Depth, rowSpacing:RowSpacing, rowConfig: (double)RowConfiguration, tillering:(int)TilleringMethod, ftn:Ftn);\n }\n }\n }\r\n}\r\n", "Parameters": [ { "Key": "Date", @@ -27344,7 +27367,11 @@ }, { "Key": "RowConfiguration", - "Value": "solid" + "Value": "Solid" + }, + { + "Key": "TilleringMethod", + "Value": "FixedTillering" }, { "Key": "Ftn", @@ -28115,7 +28142,7 @@ "Children": [ { "$type": "Models.Manager, Models", - "Code": "using APSIM.Shared.Utilities;\r\nusing Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Description(\"Enter skip row configuration : \")]\r\n public RowConfigurationType RowConfiguration { get; set; }\r\n\r\n [Description(\"Enter Fertile Tiller No. : \")]\r\n public double Ftn { get; set; }\r\n\r\n public enum RowConfigurationType \r\n {\r\n solid, single, _double /*replaces double*/\r\n }\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, budNumber: Ftn, rowConfig: (double)RowConfiguration);\r\n /*\r\n if (paddock_is_fallow() = 1 and today = date('[date]')) then\r\n [crop] sow plants =[density], sowing_depth = [depth], cultivar = [cultivar], row_spacing = [row_spacing], skip = [RowConfiguration], tiller_no_fertile = [ftn] ()\r\n endif\r\n */\r\n }\r\n }\r\n }\r\n}\r\n", + "Code": "using APSIM.Shared.Utilities;\r\nusing Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Description(\"Enter skip row configuration : \")]\r\n public RowConfigurationType RowConfiguration { get; set; }\r\n\r\n [Description(\"Tillering Method\")]\n public TilleringMethodType TilleringMethod { get; set; } = 0;\n\n [Description(\"Enter Fertile Tiller No. : \")]\n public double Ftn { get; set; }\n\n public enum TilleringMethodType \n {\n RuleOfThumb = -1,\n FixedTillering = 0,\n DynamicTillering = 1\n }\n public enum RowConfigurationType \n {\n Solid, SingleSkip, DoubleSkip\n }\n\n [Link]\n private Zone paddock;\n\n [Link]\n private Clock clock;\n\n [Link]\n private Plant crop;\n\n [EventSubscribe(\"DoManagement\")]\n private void OnDoManagement(object sender, EventArgs e)\n {\n if (clock.Today == Date /* && isFallow */)\n {\n double population = Density * paddock.Area;\n crop.Sow(cultivar:Cultivar, population:population, depth:Depth, rowSpacing:RowSpacing, rowConfig: (double)RowConfiguration, tillering:(int)TilleringMethod, ftn:Ftn);\n }\n }\n }\r\n}\r\n", "Parameters": [ { "Key": "Date", @@ -28139,7 +28166,11 @@ }, { "Key": "RowConfiguration", - "Value": "solid" + "Value": "Solid" + }, + { + "Key": "TilleringMethod", + "Value": "FixedTillering" }, { "Key": "Ftn", @@ -28856,7 +28887,7 @@ "Children": [ { "$type": "Models.Manager, Models", - "Code": "using APSIM.Shared.Utilities;\r\nusing Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Description(\"Enter skip row configuration : \")]\r\n public RowConfigurationType RowConfiguration { get; set; }\r\n\r\n [Description(\"Enter Fertile Tiller No. : \")]\r\n public double Ftn { get; set; }\r\n\r\n public enum RowConfigurationType \r\n {\r\n solid, single, _double /*replaces double*/\r\n }\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, budNumber: Ftn, rowConfig: (double)RowConfiguration);\r\n /*\r\n if (paddock_is_fallow() = 1 and today = date('[date]')) then\r\n [crop] sow plants =[density], sowing_depth = [depth], cultivar = [cultivar], row_spacing = [row_spacing], skip = [RowConfiguration], tiller_no_fertile = [ftn] ()\r\n endif\r\n */\r\n }\r\n }\r\n }\r\n}\r\n", + "Code": "using APSIM.Shared.Utilities;\r\nusing Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } \r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Description(\"Enter skip row configuration : \")]\r\n public RowConfigurationType RowConfiguration { get; set; }\r\n\r\n [Description(\"Tillering Method : \")]\n public TilleringMethodType TilleringMethod { get; set; } = 0;\n\n [Description(\"Enter Fertile Tiller No. : \")]\n public double Ftn { get; set; }\n\n public enum TilleringMethodType \n {\n RuleOfThumb = -1,\n FixedTillering = 0,\n DynamicTillering = 1\n }\n public enum RowConfigurationType \n {\n Solid, SingleSkip, DoubleSkip\n }\n\n [Link]\n private Zone paddock;\n\n [Link]\n private Clock clock;\n\n [Link]\n private Plant crop;\n\n [EventSubscribe(\"DoManagement\")]\n private void OnDoManagement(object sender, EventArgs e)\n {\n if (clock.Today == Date)\n {\n double population = Density * paddock.Area;\n crop.Sow(cultivar:Cultivar, population:population, depth:Depth, rowSpacing:RowSpacing, rowConfig: (double)RowConfiguration, tillering:(int)TilleringMethod, ftn:Ftn);\n }\n }\n }\r\n}\r\n", "Parameters": [ { "Key": "Date", @@ -28880,7 +28911,11 @@ }, { "Key": "RowConfiguration", - "Value": "solid" + "Value": "Solid" + }, + { + "Key": "TilleringMethod", + "Value": "FixedTillering" }, { "Key": "Ftn", @@ -29724,7 +29759,7 @@ "Children": [ { "$type": "Models.Manager, Models", - "Code": "using APSIM.Shared.Utilities;\r\nusing Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Description(\"Enter skip row configuration : \")]\r\n public RowConfigurationType RowConfiguration { get; set; }\r\n\r\n [Description(\"Enter Fertile Tiller No. : \")]\r\n public double Ftn { get; set; }\r\n\r\n public enum RowConfigurationType \r\n {\r\n solid, single, _double /*replaces double*/\r\n }\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date )\r\n {\r\n double population = Density * paddock.Area;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, budNumber: Ftn, rowConfig: (double)RowConfiguration);\r\n }\r\n }\r\n }\r\n}\r\n", + "Code": "using APSIM.Shared.Utilities;\nusing Models.PMF;\nusing Models.Core;\nusing System;\n\nnamespace Models\n{\n [Serializable]\n public class Script : Model\n {\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\n public DateTime Date { get; set; }\n\n [Description(\"Enter sowing density (plants/m2) : \")]\n public double Density { get; set; }\n\n [Description(\"Enter sowing depth (mm) : \")]\n public double Depth { get; set; }\n\n [Description(\"Enter cultivar : \")]\n [Display(Type = DisplayType.CultivarName)]\n public string Cultivar { get; set; } \n\n [Description(\"Enter row spacing (mm) : \")]\n public double RowSpacing { get; set; }\n\n [Description(\"Enter skip row configuration : \")]\n public RowConfigurationType RowConfiguration { get; set; }\n\n [Description(\"Tillering Method : \")]\n public TilleringMethodType TilleringMethod { get; set; } = 0;\n\n [Description(\"Enter Fertile Tiller No. : \")]\n public double Ftn { get; set; }\n\n public enum TilleringMethodType \n {\n RuleOfThumb = -1,\n FixedTillering = 0,\n DynamicTillering = 1\n }\n public enum RowConfigurationType \n {\n Solid, SingleSkip, DoubleSkip\n }\n\n [Link]\n private Zone paddock;\n\n [Link]\n private Clock clock;\n\n [Link]\n private Plant crop;\n\n [EventSubscribe(\"DoManagement\")]\n private void OnDoManagement(object sender, EventArgs e)\n {\n if (clock.Today == Date)\n {\n double population = Density * paddock.Area;\n crop.Sow(cultivar:Cultivar, population:population, depth:Depth, rowSpacing:RowSpacing, rowConfig: (double)RowConfiguration, tillering:(int)TilleringMethod, ftn:Ftn);\n }\n }\n }\n}\n", "Parameters": [ { "Key": "Date", @@ -29748,7 +29783,11 @@ }, { "Key": "RowConfiguration", - "Value": "solid" + "Value": "Solid" + }, + { + "Key": "TilleringMethod", + "Value": "FixedTillering" }, { "Key": "Ftn", @@ -30614,8 +30653,12 @@ "Children": [ { "$type": "Models.Manager, Models", - "Code": "using APSIM.Shared.Utilities;\r\nusing Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Description(\"Enter skip row configuration : \")]\r\n public RowConfigurationType RowConfiguration { get; set; }\r\n\r\n [Description(\"Enter Fertile Tiller No. : \")]\r\n public double Ftn { get; set; }\r\n\r\n public enum RowConfigurationType \r\n {\r\n solid, single, _double /*replaces double*/\r\n }\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, budNumber: Ftn, rowConfig: (double)RowConfiguration);\r\n /*\r\n if (paddock_is_fallow() = 1 and today = date('[date]')) then\r\n [crop] sow plants =[density], sowing_depth = [depth], cultivar = [cultivar], row_spacing = [row_spacing], skip = [RowConfiguration], tiller_no_fertile = [ftn] ()\r\n endif\r\n */\r\n }\r\n }\r\n }\r\n}\r\n", + "Code": "using APSIM.Shared.Utilities;\nusing Models.PMF;\nusing Models.Core;\nusing System;\n\nnamespace Models\n{\n [Serializable]\n public class Script : Model\n {\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\n public DateTime Date { get; set; }\n\n [Description(\"Enter sowing density (plants/m2) : \")]\n public double Density { get; set; }\n\n [Description(\"Enter sowing depth (mm) : \")]\n public double Depth { get; set; }\n\n [Description(\"Enter cultivar : \")]\n [Display(Type = DisplayType.CultivarName)]\n public string Cultivar { get; set; } \n\n [Description(\"Enter row spacing (mm) : \")]\n public double RowSpacing { get; set; }\n\n [Description(\"Enter skip row configuration : \")]\n public RowConfigurationType RowConfiguration { get; set; }\n\n [Description(\"Tillering Method : \")]\n public TilleringMethodType TilleringMethod { get; set; } = 0;\n\n [Description(\"Enter Fertile Tiller No. : \")]\n public double Ftn { get; set; }\n\n public enum TilleringMethodType \n {\n RuleOfThumb = -1,\n FixedTillering = 0,\n DynamicTillering = 1\n }\n public enum RowConfigurationType \n {\n Solid, SingleSkip, DoubleSkip\n }\n\n [Link]\n private Zone paddock;\n\n [Link]\n private Clock clock;\n\n [Link]\n private Plant crop;\n\n [EventSubscribe(\"DoManagement\")]\n private void OnDoManagement(object sender, EventArgs e)\n {\n if (clock.Today == Date)\n {\n double population = Density * paddock.Area;\n crop.Sow(cultivar:Cultivar, population:population, depth:Depth, rowSpacing:RowSpacing, rowConfig: (double)RowConfiguration, tillering:(int)TilleringMethod, ftn:Ftn);\n }\n }\n }\n}\n", "Parameters": [ + { + "Key": "Cultivar", + "Value": "M35-1" + }, { "Key": "Date", "Value": "10/07/1996 00:00:00" @@ -30626,11 +30669,7 @@ }, { "Key": "Depth", - "Value": "0.5" - }, - { - "Key": "Cultivar", - "Value": "M35-1" + "Value": "30" }, { "Key": "RowSpacing", @@ -30638,7 +30677,11 @@ }, { "Key": "RowConfiguration", - "Value": "solid" + "Value": "Solid" + }, + { + "Key": "TilleringMethod", + "Value": "FixedTillering" }, { "Key": "Ftn", @@ -31802,16 +31845,8 @@ "Children": [ { "$type": "Models.Manager, Models", - "Code": "using APSIM.Shared.Utilities;\r\nusing Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Description(\"Enter skip row configuration : \")]\r\n public RowConfigurationType RowConfiguration { get; set; }\r\n\r\n [Description(\"Enter Fertile Tiller No. : \")]\r\n public double Ftn { get; set; }\r\n\r\n public enum RowConfigurationType \r\n {\r\n solid, single, _double /*replaces double*/\r\n }\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, budNumber: Ftn, rowConfig: (double)RowConfiguration);\r\n /*\r\n if (paddock_is_fallow() = 1 and today = date('[date]')) then\r\n [crop] sow plants =[density], sowing_depth = [depth], cultivar = [cultivar], row_spacing = [row_spacing], skip = [RowConfiguration], tiller_no_fertile = [ftn] ()\r\n endif\r\n */\r\n }\r\n }\r\n }\r\n}\r\n", + "Code": "using APSIM.Shared.Utilities;\nusing Models.PMF;\nusing Models.Core;\nusing System;\n\nnamespace Models\n{\n [Serializable]\n public class Script : Model\n {\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\n public DateTime Date { get; set; }\n\n [Description(\"Enter sowing density (plants/m2) : \")]\n public double Density { get; set; }\n\n [Description(\"Enter sowing depth (mm) : \")]\n public double Depth { get; set; }\n\n [Description(\"Enter cultivar : \")]\n [Display(Type = DisplayType.CultivarName)]\n public string Cultivar { get; set; } \n\n [Description(\"Enter row spacing (mm) : \")]\n public double RowSpacing { get; set; }\n\n [Description(\"Enter skip row configuration : \")]\n public RowConfigurationType RowConfiguration { get; set; }\n\n [Description(\"Tillering Method : \")]\n public TilleringMethodType TilleringMethod { get; set; } = 0;\n\n [Description(\"Enter Fertile Tiller No. : \")]\n public double Ftn { get; set; }\n\n public enum TilleringMethodType \n {\n RuleOfThumb = -1,\n FixedTillering = 0,\n DynamicTillering = 1\n }\n public enum RowConfigurationType \n {\n Solid, SingleSkip, DoubleSkip\n }\n\n [Link]\n private Zone paddock;\n\n [Link]\n private Clock clock;\n\n [Link]\n private Plant crop;\n\n [EventSubscribe(\"DoManagement\")]\n private void OnDoManagement(object sender, EventArgs e)\n {\n if (clock.Today == Date)\n {\n double population = Density * paddock.Area;\n crop.Sow(cultivar:Cultivar, population:population, depth:Depth, rowSpacing:RowSpacing, rowConfig: (double)RowConfiguration, tillering:(int)TilleringMethod, ftn:Ftn);\n }\n }\n }\n}\n", "Parameters": [ - { - "Key": "Cultivar", - "Value": "Buster" - }, - { - "Key": "Ftn", - "Value": "0" - }, { "Key": "Date", "Value": "11/29/1995 00:00:00" @@ -31824,13 +31859,25 @@ "Key": "Depth", "Value": "20" }, + { + "Key": "Cultivar", + "Value": "Buster" + }, { "Key": "RowSpacing", "Value": "500" }, { "Key": "RowConfiguration", - "Value": "solid" + "Value": "Solid" + }, + { + "Key": "TilleringMethod", + "Value": "FixedTillering" + }, + { + "Key": "Ftn", + "Value": "0" } ], "Name": "SowingRule", @@ -32422,16 +32469,8 @@ "Children": [ { "$type": "Models.Manager, Models", - "Code": "using APSIM.Shared.Utilities;\r\nusing Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Description(\"Enter skip row configuration : \")]\r\n public RowConfigurationType RowConfiguration { get; set; }\r\n\r\n [Description(\"Enter Fertile Tiller No. : \")]\r\n public double Ftn { get; set; }\r\n\r\n public enum RowConfigurationType \r\n {\r\n solid, single, _double /*replaces double*/\r\n }\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, budNumber: Ftn, rowConfig: (double)RowConfiguration);\r\n /*\r\n if (paddock_is_fallow() = 1 and today = date('[date]')) then\r\n [crop] sow plants =[density], sowing_depth = [depth], cultivar = [cultivar], row_spacing = [row_spacing], skip = [RowConfiguration], tiller_no_fertile = [ftn] ()\r\n endif\r\n */\r\n }\r\n }\r\n }\r\n}\r\n", + "Code": "using APSIM.Shared.Utilities;\nusing Models.PMF;\nusing Models.Core;\nusing System;\n\nnamespace Models\n{\n [Serializable]\n public class Script : Model\n {\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\n public DateTime Date { get; set; }\n\n [Description(\"Enter sowing density (plants/m2) : \")]\n public double Density { get; set; }\n\n [Description(\"Enter sowing depth (mm) : \")]\n public double Depth { get; set; }\n\n [Description(\"Enter cultivar : \")]\n [Display(Type = DisplayType.CultivarName)]\n public string Cultivar { get; set; } \n\n [Description(\"Enter row spacing (mm) : \")]\n public double RowSpacing { get; set; }\n\n [Description(\"Enter skip row configuration : \")]\n public RowConfigurationType RowConfiguration { get; set; }\n\n [Description(\"Tillering Method : \")]\n public TilleringMethodType TilleringMethod { get; set; } = 0;\n\n [Description(\"Enter Fertile Tiller No. : \")]\n public double Ftn { get; set; }\n\n public enum TilleringMethodType \n {\n RuleOfThumb = -1,\n FixedTillering = 0,\n DynamicTillering = 1\n }\n public enum RowConfigurationType \n {\n Solid, SingleSkip, DoubleSkip\n }\n\n [Link]\n private Zone paddock;\n\n [Link]\n private Clock clock;\n\n [Link]\n private Plant crop;\n\n [EventSubscribe(\"DoManagement\")]\n private void OnDoManagement(object sender, EventArgs e)\n {\n if (clock.Today == Date)\n {\n double population = Density * paddock.Area;\n crop.Sow(cultivar:Cultivar, population:population, depth:Depth, rowSpacing:RowSpacing, rowConfig: (double)RowConfiguration, tillering:(int)TilleringMethod, ftn:Ftn);\n }\n }\n }\n}\n", "Parameters": [ - { - "Key": "Cultivar", - "Value": "Buster" - }, - { - "Key": "Ftn", - "Value": "0.4" - }, { "Key": "Date", "Value": "10/11/1996 00:00:00" @@ -32444,13 +32483,25 @@ "Key": "Depth", "Value": "20" }, + { + "Key": "Cultivar", + "Value": "Buster" + }, { "Key": "RowSpacing", "Value": "500" }, { "Key": "RowConfiguration", - "Value": "solid" + "Value": "Solid" + }, + { + "Key": "TilleringMethod", + "Value": "FixedTillering" + }, + { + "Key": "Ftn", + "Value": "0.4" } ], "Name": "SowingRule", @@ -33088,16 +33139,8 @@ "Children": [ { "$type": "Models.Manager, Models", - "Code": "using APSIM.Shared.Utilities;\r\nusing Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Description(\"Enter skip row configuration : \")]\r\n public RowConfigurationType RowConfiguration { get; set; }\r\n\r\n [Description(\"Enter Fertile Tiller No. : \")]\r\n public double Ftn { get; set; }\r\n\r\n public enum RowConfigurationType \r\n {\r\n solid, single, _double /*replaces double*/\r\n }\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, budNumber: Ftn, rowConfig: (double)RowConfiguration);\r\n /*\r\n if (paddock_is_fallow() = 1 and today = date('[date]')) then\r\n [crop] sow plants =[density], sowing_depth = [depth], cultivar = [cultivar], row_spacing = [row_spacing], skip = [RowConfiguration], tiller_no_fertile = [ftn] ()\r\n endif\r\n */\r\n }\r\n }\r\n }\r\n}\r\n", + "Code": "using APSIM.Shared.Utilities;\nusing Models.PMF;\nusing Models.Core;\nusing System;\n\nnamespace Models\n{\n [Serializable]\n public class Script : Model\n {\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\n public DateTime Date { get; set; }\n\n [Description(\"Enter sowing density (plants/m2) : \")]\n public double Density { get; set; }\n\n [Description(\"Enter sowing depth (mm) : \")]\n public double Depth { get; set; }\n\n [Description(\"Enter cultivar : \")]\n [Display(Type = DisplayType.CultivarName)]\n public string Cultivar { get; set; } \n\n [Description(\"Enter row spacing (mm) : \")]\n public double RowSpacing { get; set; }\n\n [Description(\"Enter skip row configuration : \")]\n public RowConfigurationType RowConfiguration { get; set; }\n\n [Description(\"Tillering Method : \")]\n public TilleringMethodType TilleringMethod { get; set; } = 0;\n\n [Description(\"Enter Fertile Tiller No. : \")]\n public double Ftn { get; set; }\n\n public enum TilleringMethodType \n {\n RuleOfThumb = -1,\n FixedTillering = 0,\n DynamicTillering = 1\n }\n public enum RowConfigurationType \n {\n Solid, SingleSkip, DoubleSkip\n }\n\n [Link]\n private Zone paddock;\n\n [Link]\n private Clock clock;\n\n [Link]\n private Plant crop;\n\n [EventSubscribe(\"DoManagement\")]\n private void OnDoManagement(object sender, EventArgs e)\n {\n if (clock.Today == Date)\n {\n double population = Density * paddock.Area;\n crop.Sow(cultivar:Cultivar, population:population, depth:Depth, rowSpacing:RowSpacing, rowConfig: (double)RowConfiguration, tillering:(int)TilleringMethod, ftn:Ftn);\n }\n }\n }\n}\n", "Parameters": [ - { - "Key": "Cultivar", - "Value": "Buster" - }, - { - "Key": "Ftn", - "Value": "0.5" - }, { "Key": "Date", "Value": "01/06/1997 00:00:00" @@ -33110,13 +33153,25 @@ "Key": "Depth", "Value": "25" }, + { + "Key": "Cultivar", + "Value": "Buster" + }, { "Key": "RowSpacing", "Value": "500" }, { "Key": "RowConfiguration", - "Value": "solid" + "Value": "Solid" + }, + { + "Key": "TilleringMethod", + "Value": "FixedTillering" + }, + { + "Key": "Ftn", + "Value": "0.5" } ], "Name": "SowingRule", @@ -33844,16 +33899,8 @@ "Children": [ { "$type": "Models.Manager, Models", - "Code": "using APSIM.Shared.Utilities;\r\nusing Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Description(\"Enter skip row configuration : \")]\r\n public RowConfigurationType RowConfiguration { get; set; }\r\n\r\n [Description(\"Enter Fertile Tiller No. : \")]\r\n public double Ftn { get; set; }\r\n\r\n public enum RowConfigurationType \r\n {\r\n solid, single, _double /*replaces double*/\r\n }\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, budNumber: Ftn, rowConfig: (double)RowConfiguration);\r\n /*\r\n if (paddock_is_fallow() = 1 and today = date('[date]')) then\r\n [crop] sow plants =[density], sowing_depth = [depth], cultivar = [cultivar], row_spacing = [row_spacing], skip = [RowConfiguration], tiller_no_fertile = [ftn] ()\r\n endif\r\n */\r\n }\r\n }\r\n }\r\n}\r\n", + "Code": "using APSIM.Shared.Utilities;\nusing Models.PMF;\nusing Models.Core;\nusing System;\n\nnamespace Models\n{\n [Serializable]\n public class Script : Model\n {\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\n public DateTime Date { get; set; }\n\n [Description(\"Enter sowing density (plants/m2) : \")]\n public double Density { get; set; }\n\n [Description(\"Enter sowing depth (mm) : \")]\n public double Depth { get; set; }\n\n [Description(\"Enter cultivar : \")]\n [Display(Type = DisplayType.CultivarName)]\n public string Cultivar { get; set; } \n\n [Description(\"Enter row spacing (mm) : \")]\n public double RowSpacing { get; set; }\n\n [Description(\"Enter skip row configuration : \")]\n public RowConfigurationType RowConfiguration { get; set; }\n\n [Description(\"Tillering Method : \")]\n public TilleringMethodType TilleringMethod { get; set; } = 0;\n\n [Description(\"Enter Fertile Tiller No. : \")]\n public double Ftn { get; set; }\n\n public enum TilleringMethodType \n {\n RuleOfThumb = -1,\n FixedTillering = 0,\n DynamicTillering = 1\n }\n public enum RowConfigurationType \n {\n Solid, SingleSkip, DoubleSkip\n }\n\n [Link]\n private Zone paddock;\n\n [Link]\n private Clock clock;\n\n [Link]\n private Plant crop;\n\n [EventSubscribe(\"DoManagement\")]\n private void OnDoManagement(object sender, EventArgs e)\n {\n if (clock.Today == Date)\n {\n double population = Density * paddock.Area;\n crop.Sow(cultivar:Cultivar, population:population, depth:Depth, rowSpacing:RowSpacing, rowConfig: (double)RowConfiguration, tillering:(int)TilleringMethod, ftn:Ftn);\n }\n }\n }\n}\n", "Parameters": [ - { - "Key": "Cultivar", - "Value": "Buster" - }, - { - "Key": "Ftn", - "Value": "0" - }, { "Key": "Date", "Value": "12/04/1997 00:00:00" @@ -33866,13 +33913,25 @@ "Key": "Depth", "Value": "25" }, + { + "Key": "Cultivar", + "Value": "Buster" + }, { "Key": "RowSpacing", "Value": "500" }, { "Key": "RowConfiguration", - "Value": "solid" + "Value": "Solid" + }, + { + "Key": "TilleringMethod", + "Value": "FixedTillering" + }, + { + "Key": "Ftn", + "Value": "0" } ], "Name": "SowingRule", @@ -34784,16 +34843,8 @@ "Children": [ { "$type": "Models.Manager, Models", - "Code": "using APSIM.Shared.Utilities;\r\nusing Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Description(\"Enter skip row configuration : \")]\r\n public RowConfigurationType RowConfiguration { get; set; }\r\n\r\n [Description(\"Enter Fertile Tiller No. : \")]\r\n public double Ftn { get; set; }\r\n\r\n public enum RowConfigurationType \r\n {\r\n solid, single, _double /*replaces double*/\r\n }\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, budNumber: Ftn, rowConfig: (double)RowConfiguration);\r\n /*\r\n if (paddock_is_fallow() = 1 and today = date('[date]')) then\r\n [crop] sow plants =[density], sowing_depth = [depth], cultivar = [cultivar], row_spacing = [row_spacing], skip = [RowConfiguration], tiller_no_fertile = [ftn] ()\r\n endif\r\n */\r\n }\r\n }\r\n }\r\n}\r\n", + "Code": "using APSIM.Shared.Utilities;\nusing Models.PMF;\nusing Models.Core;\nusing System;\n\nnamespace Models\n{\n [Serializable]\n public class Script : Model\n {\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\n public DateTime Date { get; set; }\n\n [Description(\"Enter sowing density (plants/m2) : \")]\n public double Density { get; set; }\n\n [Description(\"Enter sowing depth (mm) : \")]\n public double Depth { get; set; }\n\n [Description(\"Enter cultivar : \")]\n [Display(Type = DisplayType.CultivarName)]\n public string Cultivar { get; set; } \n\n [Description(\"Enter row spacing (mm) : \")]\n public double RowSpacing { get; set; }\n\n [Description(\"Enter skip row configuration : \")]\n public RowConfigurationType RowConfiguration { get; set; }\n\n [Description(\"Tillering Method : \")]\n public TilleringMethodType TilleringMethod { get; set; } = 0;\n\n [Description(\"Enter Fertile Tiller No. : \")]\n public double Ftn { get; set; }\n\n public enum TilleringMethodType \n {\n RuleOfThumb = -1,\n FixedTillering = 0,\n DynamicTillering = 1\n }\n public enum RowConfigurationType \n {\n Solid, SingleSkip, DoubleSkip\n }\n\n [Link]\n private Zone paddock;\n\n [Link]\n private Clock clock;\n\n [Link]\n private Plant crop;\n\n [EventSubscribe(\"DoManagement\")]\n private void OnDoManagement(object sender, EventArgs e)\n {\n if (clock.Today == Date)\n {\n double population = Density * paddock.Area;\n crop.Sow(cultivar:Cultivar, population:population, depth:Depth, rowSpacing:RowSpacing, rowConfig: (double)RowConfiguration, tillering:(int)TilleringMethod, ftn:Ftn);\n }\n }\n }\n}\n", "Parameters": [ - { - "Key": "Cultivar", - "Value": "Buster" - }, - { - "Key": "Ftn", - "Value": "0" - }, { "Key": "Date", "Value": "11/11/1998 00:00:00" @@ -34806,13 +34857,25 @@ "Key": "Depth", "Value": "30" }, + { + "Key": "Cultivar", + "Value": "Buster" + }, { "Key": "RowSpacing", "Value": "500" }, { "Key": "RowConfiguration", - "Value": "solid" + "Value": "Solid" + }, + { + "Key": "TilleringMethod", + "Value": "FixedTillering" + }, + { + "Key": "Ftn", + "Value": "0" } ], "Name": "SowingRule", @@ -35277,10 +35340,10 @@ "Children": [ { "$type": "Models.Memo, Models", - "Text": "Experiment: LE20\n\nDescription: LE20 - Density\n\nStart Date: 9/11/1998\n\nEnd Date: 7/03/1999\n\n|SimulationName |Density |\n|---------------|---------------|\n|Density_1 | 2 plants/m2 |\n|Density_2 | 4 plants/m2 |\n|Density_2 | 8 plants/m2 |\n|Density_3 |16 plants/m2 |\n", + "Text": "Dynamic Tillering is still under development.\n\nExperiment: LE20\n\nDescription: LE20 - Density\n\nStart Date: 9/11/1998\n\nEnd Date: 7/03/1999\n\n|SimulationName |Density |\n|---------------|---------------|\n|Density_1 | 2 plants/m2 |\n|Density_2 | 4 plants/m2 |\n|Density_2 | 8 plants/m2 |\n|Density_3 |16 plants/m2 |\n", "Name": "LE20 Description", "Children": [], - "Enabled": true, + "Enabled": false, "ReadOnly": false }, { @@ -35292,13 +35355,13 @@ "Specifications": [ "[SowingRule].Script.Cultivar = Buster", "[SowingRule].Script.Density = 2", - "[Leaf].TilleringMethod = 1" + "[Leaf].TilleringMethod = 2" ], "Paths": null, "Values": null, "Name": "Density_1", "Children": [], - "Enabled": true, + "Enabled": false, "ReadOnly": false }, { @@ -35306,13 +35369,13 @@ "Specifications": [ "[SowingRule].Script.Cultivar = Buster", "[SowingRule].Script.Density = 4", - "[Leaf].TilleringMethod = 1" + "[Leaf].TilleringMethod = 2" ], "Paths": null, "Values": null, "Name": "Density_2", "Children": [], - "Enabled": true, + "Enabled": false, "ReadOnly": false }, { @@ -35320,13 +35383,13 @@ "Specifications": [ "[SowingRule].Script.Cultivar = Buster", "[SowingRule].Script.Density = 8", - "[Leaf].TilleringMethod = 1" + "[Leaf].TilleringMethod = 2" ], "Paths": null, "Values": null, "Name": "Density_3", "Children": [], - "Enabled": true, + "Enabled": false, "ReadOnly": false }, { @@ -35334,17 +35397,17 @@ "Specifications": [ "[SowingRule].Script.Cultivar = Buster", "[SowingRule].Script.Density = 16", - "[Leaf].TilleringMethod = 1" + "[Leaf].TilleringMethod = 2" ], "Paths": null, "Values": null, "Name": "Density_4", "Children": [], - "Enabled": true, + "Enabled": false, "ReadOnly": false } ], - "Enabled": true, + "Enabled": false, "ReadOnly": false }, { @@ -35355,11 +35418,11 @@ "Children": [ { "$type": "Models.Clock, Models", - "Start": "1998-11-09T00:00:00", - "End": "1999-03-07T00:00:00", + "Start": "1998-10-23T00:00:00", + "End": "1999-02-21T00:00:00", "Name": "Clock", "Children": [], - "Enabled": true, + "Enabled": false, "ReadOnly": false }, { @@ -35367,24 +35430,24 @@ "Verbosity": 100, "Name": "Summary", "Children": [], - "Enabled": true, + "Enabled": false, "ReadOnly": false }, { "$type": "Models.Climate.Weather, Models", "ConstantsFile": null, - "FileName": "Met\\LE19.met", - "ExcelWorkSheetName": null, + "FileName": "Met\\Gatton_Tiller_x_Density.met", + "ExcelWorkSheetName": "", "Name": "Weather", "Children": [], - "Enabled": true, + "Enabled": false, "ReadOnly": false }, { "$type": "Models.Soils.Arbitrator.SoilArbitrator, Models", "Name": "SoilArbitrator", "Children": [], - "Enabled": true, + "Enabled": false, "ReadOnly": false }, { @@ -35404,7 +35467,7 @@ "GroupByVariableName": null, "Name": "DailyReport", "Children": [], - "Enabled": true, + "Enabled": false, "ReadOnly": false }, { @@ -35416,7 +35479,7 @@ "GroupByVariableName": null, "Name": "HarvestReport", "Children": [], - "Enabled": true, + "Enabled": false, "ReadOnly": false }, { @@ -35427,16 +35490,12 @@ "Children": [ { "$type": "Models.Manager, Models", - "Code": "using APSIM.Shared.Utilities;\r\nusing Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Description(\"Enter skip row configuration : \")]\r\n public RowConfigurationType RowConfiguration { get; set; }\r\n\r\n [Description(\"Enter Fertile Tiller No. : \")]\r\n public double Ftn { get; set; }\r\n\r\n public enum RowConfigurationType \r\n {\r\n solid, single, _double /*replaces double*/\r\n }\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, budNumber: Ftn, rowConfig: (double)RowConfiguration);\r\n }\r\n }\r\n }\r\n}\r\n", + "Code": "using APSIM.Shared.Utilities;\nusing Models.PMF;\nusing Models.Core;\nusing System;\n\nnamespace Models\n{\n [Serializable]\n public class Script : Model\n {\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\n public DateTime Date { get; set; }\n\n [Description(\"Enter sowing density (plants/m2) : \")]\n public double Density { get; set; }\n\n [Description(\"Enter sowing depth (mm) : \")]\n public double Depth { get; set; }\n\n [Description(\"Enter cultivar : \")]\n [Display(Type = DisplayType.CultivarName)]\n public string Cultivar { get; set; } \n\n [Description(\"Enter row spacing (mm) : \")]\n public double RowSpacing { get; set; }\n\n [Description(\"Enter skip row configuration : \")]\n public RowConfigurationType RowConfiguration { get; set; }\n\n [Description(\"Tillering Method : \")]\n public TilleringMethodType TilleringMethod { get; set; } = 0;\n\n [Description(\"Enter Fertile Tiller No. : \")]\n public double Ftn { get; set; }\n\n public enum TilleringMethodType \n {\n RuleOfThumb = -1,\n FixedTillering = 0,\n DynamicTillering = 1\n }\n public enum RowConfigurationType \n {\n Solid, SingleSkip, DoubleSkip\n }\n\n [Link]\n private Zone paddock;\n\n [Link]\n private Clock clock;\n\n [Link]\n private Plant crop;\n\n [EventSubscribe(\"DoManagement\")]\n private void OnDoManagement(object sender, EventArgs e)\n {\n if (clock.Today == Date)\n {\n double population = Density * paddock.Area;\n crop.Sow(cultivar:Cultivar, population:population, depth:Depth, rowSpacing:RowSpacing, rowConfig: (double)RowConfiguration, tillering:(int)TilleringMethod, ftn:Ftn);\n }\n }\n }\n}\n", "Parameters": [ { "Key": "Cultivar", "Value": "Buster" }, - { - "Key": "Ftn", - "Value": "0" - }, { "Key": "Date", "Value": "10/23/1998 00:00:00" @@ -35455,11 +35514,19 @@ }, { "Key": "RowConfiguration", - "Value": "solid" + "Value": "Solid" + }, + { + "Key": "TilleringMethod", + "Value": "DynamicTillering" + }, + { + "Key": "Ftn", + "Value": "0" } ], "Name": "SowingRule", - "Enabled": true, + "Enabled": false, "ReadOnly": false }, { @@ -35467,25 +35534,25 @@ "Code": "using Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n\r\n public class Script : Model\r\n {\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoCalculations(object sender, EventArgs e)\r\n {\r\n if (crop.IsReadyForHarvesting)\r\n {\r\n crop.Harvest();\r\n crop.EndCrop();\r\n }\r\n }\r\n }\r\n}\r\n", "Parameters": [], "Name": "HarvestingRule", - "Enabled": true, + "Enabled": false, "ReadOnly": false } ], - "Enabled": true, + "Enabled": false, "ReadOnly": false }, { "$type": "Models.Fertiliser, Models", "ResourceName": "Fertiliser", "Name": "Fertiliser", - "Enabled": true, + "Enabled": false, "ReadOnly": false }, { "$type": "Models.Irrigation, Models", "Name": "Irrigation", "Children": [], - "Enabled": true, + "Enabled": false, "ReadOnly": false }, { @@ -35500,7 +35567,7 @@ ], "Name": "FertiliserSchedule", "Children": [], - "Enabled": true, + "Enabled": false, "ReadOnly": false }, { @@ -35887,7 +35954,7 @@ ], "Name": "IrrigationSchedule", "Children": [], - "Enabled": true, + "Enabled": false, "ReadOnly": false }, { @@ -35908,7 +35975,7 @@ } ], "Name": "Automatic irrigation based on water deficit", - "Enabled": true, + "Enabled": false, "ReadOnly": false }, { @@ -35923,14 +35990,14 @@ "ReferenceHeight": 2.0, "Name": "MicroClimate", "Children": [], - "Enabled": true, + "Enabled": false, "ReadOnly": false }, { "$type": "Models.PMF.Plant, Models", "ResourceName": "Sorghum", "Name": "Sorghum", - "Enabled": true, + "Enabled": false, "ReadOnly": false }, { @@ -35943,7 +36010,7 @@ "InitialCNR": 80.0, "ResourceName": "SurfaceOrganicMatter", "Name": "SurfaceOrganicMatter", - "Enabled": true, + "Enabled": false, "ReadOnly": false }, { @@ -36077,11 +36144,11 @@ "XFMetadata": null, "Name": "SorghumSoil", "Children": [], - "Enabled": true, + "Enabled": false, "ReadOnly": false } ], - "Enabled": true, + "Enabled": false, "ReadOnly": false }, { @@ -36121,21 +36188,21 @@ "KLAT": null, "ResourceName": "WaterBalance", "Name": "SoilWater", - "Enabled": true, + "Enabled": false, "ReadOnly": false }, { "$type": "Models.Soils.Nutrients.Nutrient, Models", "ResourceName": "Nutrient", "Name": "Nutrient", - "Enabled": true, + "Enabled": false, "ReadOnly": false }, { "$type": "Models.Soils.CERESSoilTemperature, Models", "Name": "Temperature", "Children": [], - "Enabled": true, + "Enabled": false, "ReadOnly": false }, { @@ -36199,7 +36266,7 @@ "FOMMetadata": null, "Name": "Organic", "Children": [], - "Enabled": true, + "Enabled": false, "ReadOnly": false }, { @@ -36251,7 +36318,7 @@ "PHMetadata": null, "Name": "Chemical", "Children": [], - "Enabled": true, + "Enabled": false, "ReadOnly": false }, { @@ -36288,7 +36355,7 @@ "PHUnits": 0, "Name": "Initial Soil", "Children": [], - "Enabled": true, + "Enabled": false, "ReadOnly": false }, { @@ -36299,23 +36366,23 @@ "RelativeTo": null, "Name": "Initial water", "Children": [], - "Enabled": true, + "Enabled": false, "ReadOnly": false } ], - "Enabled": true, + "Enabled": false, "ReadOnly": false } ], - "Enabled": true, + "Enabled": false, "ReadOnly": false } ], - "Enabled": true, + "Enabled": false, "ReadOnly": false } ], - "Enabled": true, + "Enabled": false, "ReadOnly": false }, { @@ -36494,7 +36561,7 @@ "Children": [ { "$type": "Models.Manager, Models", - "Code": "using APSIM.Shared.Utilities;\r\nusing Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\n \t[Link(ByName = true)] private Operations fertiliserSchedule;\n \t[Link] private ISummary summary;\n\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Description(\"Enter skip row configuration : \")]\r\n public RowConfigurationType RowConfiguration { get; set; }\r\n\r\n public double Ftn\n {\n get\n {\n if (fertiliserSchedule.Operation.Count == 3)\n {\n\t\t\t\t\tif (Cultivar == \"CSH13R\")\n\t\t\t\t\t\treturn 0.2;\n\t\t\t\t\telse\n\t\t\t\t\t\treturn 0.9; \n }\n else\n \treturn 0;\n }\n }\r\n\r\n public enum RowConfigurationType \r\n {\r\n solid, single, _double /*replaces double*/\r\n }\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, budNumber: Ftn, rowConfig: (double)RowConfiguration);\r\n /*\r\n if (paddock_is_fallow() = 1 and today = date('[date]')) then\r\n [crop] sow plants =[density], sowing_depth = [depth], cultivar = [cultivar], row_spacing = [row_spacing], skip = [RowConfiguration], tiller_no_fertile = [ftn] ()\r\n endif\r\n */\r\n }\r\n }\r\n }\r\n}\r\n", + "Code": "using APSIM.Shared.Utilities;\nusing Models.PMF;\nusing Models.Core;\nusing System;\nusing Models.PMF.Organs;\n\nnamespace Models\n{\n [Serializable]\n public class Script : Model\n {\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\n public DateTime Date { get; set; }\n\n [Description(\"Enter sowing density (plants/m2) : \")]\n public double Density { get; set; }\n\n [Description(\"Enter sowing depth (mm) : \")]\n public double Depth { get; set; }\n\n [Description(\"Enter cultivar : \")]\n [Display(Type = DisplayType.CultivarName)]\n public string Cultivar { get; set; } \n\n [Description(\"Enter row spacing (mm) : \")]\n public double RowSpacing { get; set; }\n\n [Description(\"Enter skip row configuration : \")]\n public RowConfigurationType RowConfiguration { get; set; }\n\n [Description(\"Tillering Method : \")]\n public TilleringMethodType TilleringMethod { get; set; } = 0;\n\n [Description(\"Enter Fertile Tiller No. : \")]\n public double Ftn { get; set; }\n\n public enum TilleringMethodType \n {\n RuleOfThumb = -1,\n FixedTillering = 0,\n DynamicTillering = 1\n }\n public enum RowConfigurationType \n {\n Solid, SingleSkip, DoubleSkip\n }\n\n [Link]\n private Zone paddock;\n\n [Link]\n private Clock clock;\n\n [Link]\n private Plant crop;\n \t\n \t[Link(ByName = true)] \n \tprivate Operations fertiliserSchedule;\n\n [EventSubscribe(\"DoManagement\")]\n private void OnDoManagement(object sender, EventArgs e)\n {\n if (clock.Today == Date)\n {\n \tdouble tmpFtn = Ftn;\n if(TilleringMethod == TilleringMethodType.FixedTillering)\n {\n \t//hack to set fixed tillers inside of experiment\n \tif (fertiliserSchedule.Operation.Count == 3)\n \t{\n \t\tif(Cultivar == \"CSH13R\")\n \t\t{\n\t\t \ttmpFtn = 0.2;\n \t\t}\n \t\telse\n \t\t{\n\t\t \ttmpFtn = 0.9;\n \t\t}\n \t}\n } \n crop.Sow(cultivar:Cultivar, population:Density, depth:Depth, rowSpacing:RowSpacing, rowConfig: (double)RowConfiguration, tillering:(int)TilleringMethod, ftn:tmpFtn);\n }\n }\n }\n}\n", "Parameters": [ { "Key": "Cultivar", @@ -36518,7 +36585,15 @@ }, { "Key": "RowConfiguration", - "Value": "solid" + "Value": "Solid" + }, + { + "Key": "TilleringMethod", + "Value": "FixedTillering" + }, + { + "Key": "Ftn", + "Value": "0" } ], "Name": "SowingRule", diff --git a/Tests/UnderReview/Sorghum/SorghumExample.apsimx b/Tests/UnderReview/Sorghum/SorghumExample.apsimx index 6d3631328c..a958211806 100644 --- a/Tests/UnderReview/Sorghum/SorghumExample.apsimx +++ b/Tests/UnderReview/Sorghum/SorghumExample.apsimx @@ -1,7 +1,7 @@ { "$type": "Models.Core.Simulations, Models", "ExplorerWidth": 300, - "Version": 150, + "Version": 151, "Name": "Simulations", "Children": [ { @@ -28,7 +28,7 @@ "Children": [ { "$type": "Models.Memo, Models", - "Text": "Hammer, G.L., McLean, G, Brider, J, Holzworth, D\n\nThe APSIM-sorghum model is based on a framework of the physiological determinants of crop growth and development (Charles-Edwards, 1982) and is focused at organ scale. It generates the phenotype of a crop as a consequence of underlying physiological processes (Fig. 1) by using the concept of supply and demand balances for light, carbon, water, and nitrogen (Hammer et al., 2001b).\nThe approach is focused around quantifying capture and use of radiation, water, and nitrogen within a framework that predicts the dynamics of crop development and the realized growth of major organs based on their potential growth and whether the supply of carbohydrate and nitrogen can satisfy this potential. Demand for resources is defined by potential organ growth and potential supply by resource capture (Monteith, 1977; Passioura, 1983; Monteith, 1986) (Fig. 1).\n\nArbitration rules and organ level responses are invoked when resource capture cannot satisfy demand. The APSIM-sorghum model retains some features and concepts of earlier models (Sinclair, 1986; Rosenthal et al., 1989; Birch et al., 1990; Sinclair and Amir, 1992; Chapman et al., 1993; Hammer and Muchow, 1994), but has been adapted and redesigned to generate a more explanatory approach to the modeling of the underlying physiology (Hammer et al., 2006).\n\n![Schematic representation of crop growth and development dynamics (a) and crop nitrogen dynamics (b) in Agricultural Production System sIMulator (APSIM)-sorghum model. Connection points between the two schematics are shown by theshaded boxes. After Hammer et al. (2010). SLN, specific leaf nitrogen](SorghumModel.png)\n\n**Crop Nitrogen Dynamics**\n\nCrop N dynamics are modeled based on a physiological approach that accounts for the fact that the bulk of reduced N present in leaves is associated with photosynthesis structures and enzymes (Grindlay, 1997) (Fig. 1b). The rate of light-saturated net photosynthesis has been shown to be a linear function of the amount of leaf N per unit leaf area (specific leaf nitrogen [SLN]), until a species-specific maximum rate of photosynthesis has been reached (Sinclair and Horie,1989; Anten et al., 1995; Grindlay, 1997). Expressing crop N demand relative to canopy expansion thus provides a physiological link between crop N status, light interception, and dry mater accumulation. In addition, the cardinal SLN values for new leaf growth and for leaf death in response to N deficiency are independent of growth stage (van Oosterom et al., 2010a).\n\nDuring the pre-anthesis period, only stems (including rachis) and leaves are expanding, and their N demand is met in a hierarchical fashion (van Oosterom etal., 2010a). First, structural N demand of the stem (and rachis) is met, as structural stem mass is required to support leaf growth. Structural stem N demand is represented by the minimum stem N concentration. If insufficient N has been taken up to meet structural stem N requirement, N can be translocated from leaves by dilution or, in extreme cases of early season N deficiency, by leaf senescence. Second, the N demand of expanding new leaves will be met, and this is determined from their critical SLN. Any additional N uptake will first be allocated to leaves to meet their target SLN and then to stem. For leaves, this N uptake represents \"luxury\" uptake that can occur after full expansion of a leaf, and which does not affect growth and development (van Oosterom et al., 2010a). This hierarchical allocation of N is consistent with observations that under N stress are relatively larger proportion of N is allocated to the leaves (van Oosterom et al.,2010a). Hence, pre-anthesis N allocation ratios are a consequence of model dynamics, rather than a model input.\n\nAfter anthesis, grain becomes the major sink for N, and grain N demand is determined as the product of grain number and N demand per grain. During the first part of grain filling, N demand per grain is constant and independent of grain growth rate and N status of the crop (van Oosterom et al., 2010b). At this time endosperm cells are dividing, so that the accumulation of structural (metabolic) proteins in the grain is the key driver. During the second half of grain filling,grain N demand is linked with grain growth rate as cell division and simultaneous storage of carbohydrate and proteins assumes a greater role (Martre et al.,2006). Grain protein content can thus vary depending on the N supply–demand balance and the carbohydrate supply to the grain. Grain N demand is initially met through stem (plus rachis) N translocation, and if this becomes insufficient,then N translocation from leaf can occur. Maximum N translocation rates from stem and per unit leaf area are a function of the N status of these organs, so that sink demand determines the amount of leaf area that is senescing at any one time(van Oosterom et al., 2010b). The source regulation of N translocation follows a first-order kinetic relationship that is representative of enzyme activity. Leaf SLN thus declines to its structural (minimum) level, and the amount of leaf area senesced, in the absence of other factors that can affect senescence, such as water limitation and shading, depends on the N supply–demand balance.\n\nThe daily rate of crop N uptake is the minimum of demand for N by the crop and potential supply of N from the soil and senescing leaves, capped at a maximum N uptake rate (van Oosterom et al., 2010a). Potential N supply from the soil depends on the available soil N through the profile and on the extent to which roots have explored the soil. N supply from the soil is calculated from the combination of passive uptake, through massflow of N taken up with the transpiration stream, and active uptake (van Keulen and Seligman, 1987). Soil N transformations and their modeling in APSIM have been detailed by Probert et al. (1998).", + "Text": "Hammer, G.L., McLean, G., Brider, J., van Oosterom, E., Wu, A., Holzworth, D.\n\nThe APSIM-sorghum model is based on a framework of the physiological determinants of crop growth and development (Charles-Edwards, 1982) and is focused at organ scale. It generates the phenotype of a crop as a consequence of underlying physiological processes (Fig. 1) by using the concept of supply and demand balances for light, carbon, water, and nitrogen (Hammer et al., 2001b).\nThe approach is focused around quantifying capture and use of radiation, water, and nitrogen within a framework that predicts the dynamics of crop development and the realized growth of major organs based on their potential growth and whether the supply of carbohydrate and nitrogen can satisfy this potential. Demand for resources is defined by potential organ growth and potential supply by resource capture (Monteith, 1977; Passioura, 1983; Monteith, 1986) (Fig. 1).\n\nArbitration rules and organ level responses are invoked when resource capture cannot satisfy demand. The APSIM-sorghum model retains some features and concepts of earlier models (Sinclair, 1986; Rosenthal et al., 1989; Birch et al., 1990; Sinclair and Amir, 1992; Chapman et al., 1993; Hammer and Muchow, 1994), but has been adapted and redesigned to generate a more explanatory approach to the modeling of the underlying physiology (Hammer et al., 2006).\n\n![Schematic representation of crop growth and development dynamics (a) and crop nitrogen dynamics (b) in Agricultural Production System sIMulator (APSIM)-sorghum model. Connection points between the two schematics are shown by theshaded boxes. After Hammer et al. (2010). SLN, specific leaf nitrogen](SorghumModel.png)\n\n**Crop Nitrogen Dynamics**\n\nCrop N dynamics are modeled based on a physiological approach that accounts for the fact that the bulk of reduced N present in leaves is associated with photosynthesis structures and enzymes (Grindlay, 1997) (Fig. 1b). The rate of light-saturated net photosynthesis has been shown to be a linear function of the amount of leaf N per unit leaf area (specific leaf nitrogen [SLN]), until a species-specific maximum rate of photosynthesis has been reached (Sinclair and Horie,1989; Anten et al., 1995; Grindlay, 1997). Expressing crop N demand relative to canopy expansion thus provides a physiological link between crop N status, light interception, and dry mater accumulation. In addition, the cardinal SLN values for new leaf growth and for leaf death in response to N deficiency are independent of growth stage (van Oosterom et al., 2010a).\n\nDuring the pre-anthesis period, only stems (including rachis) and leaves are expanding, and their N demand is met in a hierarchical fashion (van Oosterom etal., 2010a). First, structural N demand of the stem (and rachis) is met, as structural stem mass is required to support leaf growth. Structural stem N demand is represented by the minimum stem N concentration. If insufficient N has been taken up to meet structural stem N requirement, N can be translocated from leaves by dilution or, in extreme cases of early season N deficiency, by leaf senescence. Second, the N demand of expanding new leaves will be met, and this is determined from their critical SLN. Any additional N uptake will first be allocated to leaves to meet their target SLN and then to stem. For leaves, this N uptake represents \"luxury\" uptake that can occur after full expansion of a leaf, and which does not affect growth and development (van Oosterom et al., 2010a). This hierarchical allocation of N is consistent with observations that under N stress are relatively larger proportion of N is allocated to the leaves (van Oosterom et al.,2010a). Hence, pre-anthesis N allocation ratios are a consequence of model dynamics, rather than a model input.\n\nAfter anthesis, grain becomes the major sink for N, and grain N demand is determined as the product of grain number and N demand per grain. During the first part of grain filling, N demand per grain is constant and independent of grain growth rate and N status of the crop (van Oosterom et al., 2010b). At this time endosperm cells are dividing, so that the accumulation of structural (metabolic) proteins in the grain is the key driver. During the second half of grain filling,grain N demand is linked with grain growth rate as cell division and simultaneous storage of carbohydrate and proteins assumes a greater role (Martre et al.,2006). Grain protein content can thus vary depending on the N supply–demand balance and the carbohydrate supply to the grain. Grain N demand is initially met through stem (plus rachis) N translocation, and if this becomes insufficient,then N translocation from leaf can occur. Maximum N translocation rates from stem and per unit leaf area are a function of the N status of these organs, so that sink demand determines the amount of leaf area that is senescing at any one time(van Oosterom et al., 2010b). The source regulation of N translocation follows a first-order kinetic relationship that is representative of enzyme activity. Leaf SLN thus declines to its structural (minimum) level, and the amount of leaf area senesced, in the absence of other factors that can affect senescence, such as water limitation and shading, depends on the N supply–demand balance.\n\nThe daily rate of crop N uptake is the minimum of demand for N by the crop and potential supply of N from the soil and senescing leaves, capped at a maximum N uptake rate (van Oosterom et al., 2010a). Potential N supply from the soil depends on the available soil N through the profile and on the extent to which roots have explored the soil. N supply from the soil is calculated from the combination of passive uptake, through massflow of N taken up with the transpiration stream, and active uptake (van Keulen and Seligman, 1987). Soil N transformations and their modeling in APSIM have been detailed by Probert et al. (1998).", "Name": "Introduction", "Children": [], "Enabled": true, @@ -327,8 +327,8 @@ "Children": [ { "$type": "Models.Memo, Models", - "Text": "Phenology is simulated through a number of development stages by using a thermal time approach (Muchow and Carberry, 1990; Hammer and Muchow, 1994),\nwith the temperature response characterized by a base (Tb), optimum (Topt), and maximum (Tm) temperature. Hammer et al. (1993) and Carberry et al. (1993) reported values of Tb, Topt, and Tm for sorghum of 11, 32, and 42°C, respectively.\nThe thermal time target for the phase between emergence and panicle initiation is also a function of day length (Hammer et al., 1989; Ravi Kumar et al., 2009), and its duration, when divided by the plastochron (°Cd per leaf), determines total leaf number once an allowance for leaf initials in the embryo has been included.\nTotal leaf number multiplied by the phyllochron (°Cd per leaf) determines the thermal time to reach flag leaf stage, which is thus an emergent property of the model. The duration of the phases between the stages of flag leaf, anthesis, and start and end of grain filling are also simulated through thermal time targets (Muchow and Carberry, 1990; Hammer and Muchow, 1994; Ravi Kumar et al., 2009). Drought stress and N stress can both reduce the leaf appearance rate and hence delay phenology during the vegetative stages (Craufurd et al., 1993; van Oosterom et al., 2010a).\n", - "Name": "memo", + "Text": "Phenology is simulated through a number of development stages by using a thermal time approach (Muchow and Carberry, 1990; Hammer and Muchow, 1994),\nwith the temperature response characterized by a base (Tb), optimum (Topt), and maximum (Tm) temperature. Hammer et al. (1993) and Carberry et al. (1993) reported values of Tb, Topt, and Tm for sorghum of 11, 32, and 42°C, respectively.\nThe thermal time target for the phase between emergence and panicle initiation is also a function of day length (Hammer et al., 1989; Ravi Kumar et al., 2009), and its duration, when divided by the plastochron (°Cd per leaf), determines total leaf number once an allowance for leaf initials in the embryo has been included.\n\nTotal leaf number multiplied by the phyllochron (°Cd per leaf) determines the thermal time to reach flag leaf stage, which is thus an emergent property of the model. The duration of the phases between the stages of flag leaf, anthesis, and start and end of grain filling are also simulated through thermal time targets (Muchow and Carberry, 1990; Hammer and Muchow, 1994; Ravi Kumar et al., 2009). Drought stress and N stress can both reduce the leaf appearance rate and hence delay phenology during the vegetative stages (Craufurd et al., 1993; van Oosterom et al., 2010a).\n", + "Name": "Description", "Children": [], "Enabled": true, "ReadOnly": false @@ -1487,7 +1487,7 @@ "Children": [ { "$type": "Models.Memo, Models", - "Text": "Maximum grain number is a function of the change in plant biomass between panicle initiation and start grain filling (Rosenthal et al., 1989), while grain size is determined by grain growth rate, effective grain filling period, and redistribution of assimilates post-anthesis (Heiniger et al., 1997b). If grain mass demand for a day exceeds the daily increase in biomass, the shortfall will first be met through translocation from stem and, if that is insufficient to meet demand of the grain, through translocation from leaves, accelerating their senescence. Conversely, if the daily increase in biomass exceeds the grain mass demand, the excess biomass production is allocated to the stem.", + "Text": "Maximum grain number is a function of the change in plant biomass between panicle initiation and start grain filling (Rosenthal et al., 1989), while grain size is determined by grain growth rate, effective grain filling period, and redistribution of assimilates post-anthesis (Heiniger et al., 1997b). If grain mass demand for a day exceeds the daily increase in biomass, the shortfall will first be met through translocation from stem and, if that is insufficient to meet demand of the grain, through translocation from leaves, accelerating their senescence. Conversely, if the daily increase in biomass exceeds the grain mass demand, the excess biomass production is allocated to the stem.", "Name": "Introduction", "Children": [], "Enabled": true, @@ -3280,6 +3280,7 @@ { "$type": "Models.PMF.Organs.SorghumLeaf, Models", "TilleringMethod": 0, + "FertileTillerNumber": 0.0, "InitialDMWeight": 0.1, "InitialLAI": 200.0, "InitialSLN": 1.5, @@ -3334,20 +3335,37 @@ "DltSenescedLaiAge": 0.0, "Name": "Leaf", "Children": [ + { + "$type": "Models.Memo, Models", + "Text": "Aboveground biomass accumulation is simulated as the minimum of light-limited or water-limited growth. In the absence of water limitation, biomass accumulation is the product of the amount of intercepted radiation (IR) and its conversion efficiency, the radiation use efficiency (RUE). The fraction of incident radiation intercepted is a function of the LAI and the canopy extinction coefficient(k), which is a measure of canopy structure (Lafarge and Hammer, 2002). The effects of N supply on crop growth are implicitly incorporated in this approach. Nitrogen limitation will reduce leaf area growth and hence LAI and IR. It can also reduce RUE, which is a function of the N status of the leaves (Muchow and Sinclair, 1994; Sinclair and Amir, 1992). Sinclair and Muchow (1998) reviewed studies that had measured RUE in many crops and noted a consistent value of 1.25 g MJ−1 for triple dwarf sorghum under optimum growing conditions.\n\nUnder water limitation, above ground biomass accumulation is the product of realized transpiration and its conversion efficiency, biomass produced per unitof water transpired, or transpiration efficiency (TE). It is necessary to adjust TE to allow for the prevailing vapor pressure deficit (vpd) (Tanner and Sinclair, 1983;Kemanian et al., 2005). Numerous studies in sorghum (Tanner and Sinclair, 1983; Hammer et al., 1997) have found a standard value of 9 Pa for the TE coefficient insorghum, so that at a vpd of 2 kPa a TE of 4.5 gm−2 mm−1 results. As RUE and TE are based on aboveground biomass only, root mass is not explicitly modeled, but is added to the aboveground biomass accumulation according to a root/shoot ratio that declines with successive growth stages of the crop.", + "Name": "Introduction", + "Children": [], + "Enabled": true, + "ReadOnly": false + }, { "$type": "Models.PMF.Struct.LeafCulms, Models", "dltLeafNo": 0.0, "Culms": [], - "TilleringMethod": 0.0, + "TilleringMethod": 0, "FinalLeafNo": 0.0, "dltPotentialLAI": 0.0, "dltStressedLAI": 0.0, "Name": "LeafCulms", "Children": [ + { + "$type": "Models.Memo, Models", + "Text": "Tillers \n\nFixed Tillering\nDynamic Tillering\n", + "Name": "Introduction", + "Children": [], + "Enabled": true, + "ReadOnly": false + }, { "$type": "Models.PMF.Struct.DynamicTillering, Models", "CalculatedTillerNumber": 0.0, - "FertileTillerNumber": 0.0, + "CurrentTillerNumber": 0.0, + "DltTillerNumber": 0.0, "SupplyDemandRatio": 0.0, "Name": "DynamicTillering", "Children": [ @@ -3486,6 +3504,7 @@ { "$type": "Models.PMF.Struct.FixedTillering, Models", "FertileTillerNumber": 0.0, + "CurrentTillerNumber": 0.0, "Name": "FixedTillering", "Children": [ { @@ -7737,7 +7756,7 @@ "Children": [ { "$type": "Models.PMF.OrganBiomassRemovalType, Models", - "FractionLiveToRemove": 0.5, + "FractionLiveToRemove": 0.0, "FractionDeadToRemove": 0.0, "FractionLiveToResidue": 0.1, "FractionDeadToResidue": 0.0, @@ -9076,7 +9095,7 @@ "Children": [ { "$type": "Models.Manager, Models", - "Code": "using Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n\r\n public class Script : Model\r\n {\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"EndOfDay\")]\r\n private void OnDoCalculations(object sender, EventArgs e)\r\n {\r\n if (crop.IsReadyForHarvesting)\r\n {\r\n crop.Harvest();\r\n crop.EndCrop();\r\n }\r\n /*\r\n \r\n\r\n if [crop].StageName = 'harvest_ripe' or [crop].plant_status = 'dead' then\r\n [crop] harvest\r\n [crop] end_crop\r\n endif\r\n\r\n \r\n */\r\n }\r\n }\r\n}\r\n", + "Code": "using Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n\r\n public class Script : Model\r\n {\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"EndOfDay\")]\r\n private void OnDoCalculations(object sender, EventArgs e)\r\n {\r\n if (crop.IsReadyForHarvesting)\r\n {\r\n crop.Harvest();\r\n crop.EndCrop();\r\n }\r\n }\r\n }\r\n}\r\n", "Parameters": [], "Name": "Harvesting rule", "Enabled": true, @@ -9084,7 +9103,7 @@ }, { "$type": "Models.Manager, Models", - "Code": "using Models.Interfaces;\nusing APSIM.Shared.Utilities;\nusing Models.Utilities;\nusing Models.Soils;\nusing Models.PMF;\nusing Models.Core;\nusing System;\nusing Models.Climate;\n\nnamespace Models\n{\n [Serializable]\n public class Script : Model\n {\n [Link] private Clock Clock;\n [Link] private Fertiliser Fertiliser;\n [Link] private Summary Summary;\n [Link] private Soil Soil;\n private Accumulator accumulatedRain;\n [Link]\n private ISoilWater waterBalance;\n \n [Description(\"Crop\")]\n public IPlant Crop { get; set; }\n\n [Description(\"Start of sowing window (d-mmm)\")]\n public string StartDate { get; set; }\n\n [Description(\"End of sowing window (d-mmm)\")]\n public string EndDate { get; set; }\n\n [Description(\"Minimum extractable soil water for sowing (mm)\")]\n public double MinESW { get; set; }\n\n [Description(\"Accumulated rainfall required for sowing (mm)\")]\n public double MinRain { get; set; }\n\n [Description(\"Duration of rainfall accumulation (d)\")]\n public int RainDays { get; set; }\n\n [Display(Type = DisplayType.CultivarName)]\n [Description(\"Cultivar to be sown\")]\n public string CultivarName { get; set; }\n\n [Description(\"Sowing depth (mm)\")]\n public double SowingDepth { get; set; }\n\n [Description(\"Row spacing (mm)\")]\n public double RowSpacing { get; set; }\n\n [Description(\"Plant population (/m2)\")]\n public double Population { get; set; }\n \n \n [EventSubscribe(\"StartOfSimulation\")]\n private void OnSimulationCommencing(object sender, EventArgs e)\n {\n accumulatedRain = new Accumulator(this, \"[Weather].Rain\", RainDays);\n }\n\n [EventSubscribe(\"DoManagement\")]\n private void OnDoManagement(object sender, EventArgs e)\n {\n accumulatedRain.Update();\n \n if (DateUtilities.WithinDates(StartDate, Clock.Today, EndDate) &&\n !Crop.IsAlive &&\n MathUtilities.Sum(waterBalance.ESW) > MinESW &&\n accumulatedRain.Sum > MinRain)\n {\n Crop.Sow(population: Population, cultivar: CultivarName, depth: SowingDepth, rowSpacing: RowSpacing); \n }\n }\n }\n}\n", + "Code": "using Models.Interfaces;\nusing APSIM.Shared.Utilities;\nusing Models.Utilities;\nusing Models.Soils;\nusing Models.PMF;\nusing Models.Core;\nusing System;\nusing Models.Climate;\n\nnamespace Models\n{\n [Serializable]\n public class Script : Model\n {\n [Link] private Clock Clock;\n [Link] private Fertiliser Fertiliser;\n [Link] private Summary Summary;\n [Link] private Soil Soil;\n [Link] private Zone paddock;\n private Accumulator accumulatedRain;\n [Link]\n private ISoilWater waterBalance;\n \n [Description(\"Crop\")]\n public Plant Crop { get; set; }\n\n [Description(\"Start of sowing window (d-mmm)\")]\n public string StartDate { get; set; }\n\n [Description(\"End of sowing window (d-mmm)\")]\n public string EndDate { get; set; }\n\n [Description(\"Minimum extractable soil water for sowing (mm)\")]\n public double MinESW { get; set; }\n\n [Description(\"Accumulated rainfall required for sowing (mm)\")]\n public double MinRain { get; set; }\n\n [Description(\"Duration of rainfall accumulation (d)\")]\n public int RainDays { get; set; }\n\n [Display(Type = DisplayType.CultivarName)]\n [Description(\"Cultivar to be sown\")]\n public string CultivarName { get; set; }\n\n [Description(\"Sowing depth (mm)\")]\n public double SowingDepth { get; set; }\n\n [Description(\"Row spacing (mm)\")]\n public double RowSpacing { get; set; }\n\n [Description(\"Sowing Density (/m2)\")]\n public double Density { get; set; }\n \n [Description(\"Enter skip row configuration : \")]\n public RowConfigurationType RowConfiguration { get; set; }\n\n [Description(\"Tillering Method\")]\n public TilleringMethodType TilleringMethod { get; set; } = 0;\n\n [Description(\"Enter Fertile Tiller No. : \")]\n public double Ftn { get; set; }\n\n public enum TilleringMethodType \n {\n RuleOfThumb = -1,\n FixedTillering = 0,\n DynamicTillering = 1\n }\n public enum RowConfigurationType \n {\n Solid, SingleSkip, DoubleSkip\n }\n \n [EventSubscribe(\"StartOfSimulation\")]\n private void OnSimulationCommencing(object sender, EventArgs e)\n {\n accumulatedRain = new Accumulator(this, \"[Weather].Rain\", RainDays);\n }\n\n [EventSubscribe(\"DoManagement\")]\n private void OnDoManagement(object sender, EventArgs e)\n {\n accumulatedRain.Update();\n \n if (DateUtilities.WithinDates(StartDate, Clock.Today, EndDate) &&\n !Crop.IsAlive &&\n MathUtilities.Sum(waterBalance.ESW) > MinESW &&\n accumulatedRain.Sum > MinRain)\n {\n double population = Density * paddock.Area;\n Crop.Sow(cultivar:CultivarName, population:population, depth:SowingDepth, rowSpacing:RowSpacing, rowConfig: (double)RowConfiguration, tillering:(int)TilleringMethod, ftn:Ftn);\n }\n }\n }\n}\n", "Parameters": [ { "Key": "Crop", @@ -9123,11 +9142,23 @@ "Value": "750" }, { - "Key": "Population", - "Value": "6" + "Key": "RowConfiguration", + "Value": "Solid" + }, + { + "Key": "TilleringMethod", + "Value": "FixedTillering" + }, + { + "Key": "Ftn", + "Value": "0" + }, + { + "Key": "Density", + "Value": "10" } ], - "Name": "Sow using a variable rule", + "Name": "SowingRule", "Enabled": true, "ReadOnly": false } @@ -9639,10 +9670,6 @@ "$type": "Models.Manager, Models", "Code": "using Models.PMF;\nusing Models.Core;\nusing System;\nnamespace Models\n{\n [Serializable]\n public class Script : Model\n {\n [Link] Clock Clock;\n [Link] Fertiliser Fertiliser;\n \n [Description(\"Crop to be fertilised\")]\n public IPlant Crop { get; set; }\n\n [Description(\"Type of fertiliser to apply? \")] \n public Fertiliser.Types FertiliserType { get; set; }\n \n [Description(\"Amount of fertiliser to be applied (kg/ha)\")]\n public double Amount { get; set; }\n \n [EventSubscribe(\"Sowing\")]\n private void OnSowing(object sender, EventArgs e)\n {\n Model crop = sender as Model;\n if (Crop != null && crop.Name.ToLower() == (Crop as IModel).Name.ToLower())\n Fertiliser.Apply(Amount: Amount, Type: FertiliserType);\n }\n }\n}\n", "Parameters": [ - { - "Key": "Amount", - "Value": "160" - }, { "Key": "Crop", "Value": "[Sorghum]" @@ -9650,6 +9677,10 @@ { "Key": "FertiliserType", "Value": "UreaN" + }, + { + "Key": "Amount", + "Value": "160" } ], "Name": "Fertilise at sowing", diff --git a/Tests/UnderReview/Sorghum/SorghumPlausibilityRuns.apsimx b/Tests/UnderReview/Sorghum/SorghumPlausibilityRuns.apsimx index 018b051715..89796d4800 100644 --- a/Tests/UnderReview/Sorghum/SorghumPlausibilityRuns.apsimx +++ b/Tests/UnderReview/Sorghum/SorghumPlausibilityRuns.apsimx @@ -1,6 +1,6 @@ { "$type": "Models.Core.Simulations, Models", - "ExplorerWidth": 300, + "ExplorerWidth": 285, "Version": 151, "Name": "Simulations", "Children": [ @@ -3302,6 +3302,7 @@ { "$type": "Models.PMF.Organs.SorghumLeaf, Models", "TilleringMethod": 0, + "FertileTillerNumber": 0.0, "InitialDMWeight": 0.1, "InitialLAI": 200.0, "InitialSLN": 1.5, @@ -3360,7 +3361,7 @@ "$type": "Models.PMF.Struct.LeafCulms, Models", "dltLeafNo": 0.0, "Culms": [], - "TilleringMethod": 0.0, + "TilleringMethod": 0, "FinalLeafNo": 0.0, "dltPotentialLAI": 0.0, "dltStressedLAI": 0.0, @@ -3369,7 +3370,8 @@ { "$type": "Models.PMF.Struct.DynamicTillering, Models", "CalculatedTillerNumber": 0.0, - "FertileTillerNumber": 0.0, + "CurrentTillerNumber": 0.0, + "DltTillerNumber": 0.0, "SupplyDemandRatio": 0.0, "Name": "DynamicTillering", "Children": [ @@ -3508,6 +3510,7 @@ { "$type": "Models.PMF.Struct.FixedTillering, Models", "FertileTillerNumber": 0.0, + "CurrentTillerNumber": 0.0, "Name": "FixedTillering", "Children": [ { @@ -9060,9 +9063,46 @@ }, { "$type": "Models.Factorial.Factor, Models", - "Specification": "[SowingRule].Script.RowConfiguration = 0,1,2", + "Specification": "", "Name": "Skip", - "Children": [], + "Children": [ + { + "$type": "Models.Factorial.CompositeFactor, Models", + "Specifications": [ + "[SowingRule].Script.RowConfiguration = 0" + ], + "Paths": null, + "Values": null, + "Name": "Solid", + "Children": [], + "Enabled": true, + "ReadOnly": false + }, + { + "$type": "Models.Factorial.CompositeFactor, Models", + "Specifications": [ + "[SowingRule].Script.RowConfiguration = 1" + ], + "Paths": null, + "Values": null, + "Name": "SingleSkip", + "Children": [], + "Enabled": true, + "ReadOnly": false + }, + { + "$type": "Models.Factorial.CompositeFactor, Models", + "Specifications": [ + "[SowingRule].Script.RowConfiguration = 2" + ], + "Paths": null, + "Values": null, + "Name": "DoubleSkip", + "Children": [], + "Enabled": true, + "ReadOnly": false + } + ], "Enabled": true, "ReadOnly": false } @@ -9171,7 +9211,7 @@ "Children": [ { "$type": "Models.Manager, Models", - "Code": "using APSIM.Shared.Utilities;\r\nusing Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Description(\"Enter skip row configuration : \")]\r\n public RowConfigurationType RowConfiguration { get; set; }\r\n\r\n [Description(\"Enter Fertile Tiller No. : \")]\r\n public double Ftn { get; set; }\r\n\r\n public enum RowConfigurationType \r\n {\r\n solid, single, _double /*replaces double*/\r\n }\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, budNumber: Ftn, rowConfig: (double)RowConfiguration + 1);\r\n /*\r\n if (paddock_is_fallow() = 1 and today = date('[date]')) then\r\n [crop] sow plants =[density], sowing_depth = [depth], cultivar = [cultivar], row_spacing = [row_spacing], skip = [RowConfiguration], tiller_no_fertile = [ftn] ()\r\n endif\r\n */\r\n }\r\n }\r\n }\r\n}\r\n", + "Code": "using APSIM.Shared.Utilities;\r\nusing Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Description(\"Enter skip row configuration : \")]\r\n public RowConfigurationType RowConfiguration { get; set; }\r\n\r\n [Description(\"Tillering Method\")]\n public TilleringMethodType TilleringMethod { get; set; } = 0;\n\n [Description(\"Enter Fertile Tiller No. : \")]\n public double Ftn { get; set; }\n\n public enum TilleringMethodType \n {\n RuleOfThumb = -1,\n FixedTillering = 0,\n DynamicTillering = 1\n }\n public enum RowConfigurationType \n {\n Solid, SingleSkip, DoubleSkip\n }\n\n [Link]\n private Zone paddock;\n\n [Link]\n private Clock clock;\n\n [Link]\n private Plant crop;\n\n [EventSubscribe(\"DoManagement\")]\n private void OnDoManagement(object sender, EventArgs e)\n {\n if (clock.Today == Date /* && isFallow */)\n {\n double population = Density * paddock.Area;\n crop.Sow(cultivar:Cultivar, population:population, depth:Depth, rowSpacing:RowSpacing, rowConfig: (double)RowConfiguration, tillering:(int)TilleringMethod, ftn:Ftn);\n }\n }\n }\n\r\n}\r\n", "Parameters": [ { "Key": "Date", @@ -9195,7 +9235,11 @@ }, { "Key": "RowConfiguration", - "Value": "solid" + "Value": "Solid" + }, + { + "Key": "TilleringMethod", + "Value": "FixedTillering" }, { "Key": "Ftn", @@ -9719,7 +9763,7 @@ "YFieldName": "Sorghum.Leaf.LAI", "X2FieldName": null, "Y2FieldName": null, - "ShowInLegend": false, + "ShowInLegend": true, "IncludeSeriesNameInLegend": false, "Cumulative": false, "CumulativeX": false, @@ -9783,7 +9827,7 @@ "YFieldName": "Sorghum.Leaf.CoverGreen", "X2FieldName": null, "Y2FieldName": null, - "ShowInLegend": false, + "ShowInLegend": true, "IncludeSeriesNameInLegend": false, "Cumulative": false, "CumulativeX": false, @@ -10095,7 +10139,7 @@ "Children": [ { "$type": "Models.Manager, Models", - "Code": "using APSIM.Shared.Utilities;\r\nusing Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } // QL41xQL36\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Description(\"Enter skip row configuration : \")]\r\n public RowConfigurationType RowConfiguration { get; set; }\r\n\r\n [Description(\"Enter Fertile Tiller No. : \")]\r\n public double Ftn { get; set; }\r\n\r\n public enum RowConfigurationType \r\n {\r\n solid, single, _double /*replaces double*/\r\n }\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, budNumber: Ftn, rowConfig: (double)RowConfiguration + 1);\r\n /*\r\n if (paddock_is_fallow() = 1 and today = date('[date]')) then\r\n [crop] sow plants =[density], sowing_depth = [depth], cultivar = [cultivar], row_spacing = [row_spacing], skip = [RowConfiguration], tiller_no_fertile = [ftn] ()\r\n endif\r\n */\r\n }\r\n }\r\n }\r\n}\r\n", + "Code": "using APSIM.Shared.Utilities;\nusing Models.PMF;\nusing Models.Core;\nusing System;\n\nnamespace Models\n{\n [Serializable]\n public class Script : Model\n {\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\n public DateTime Date { get; set; }\n\n [Description(\"Enter sowing density (plants/m2) : \")]\n public double Density { get; set; }\n\n [Description(\"Enter sowing depth (mm) : \")]\n public double Depth { get; set; }\n\n [Description(\"Enter cultivar : \")]\n [Display(Type = DisplayType.CultivarName)]\n public string Cultivar { get; set; }\n\n [Description(\"Enter row spacing (mm) : \")]\n public double RowSpacing { get; set; }\n\n [Description(\"Enter skip row configuration : \")]\n public RowConfigurationType RowConfiguration { get; set; }\n\n [Description(\"Tillering Method\")]\n public TilleringMethodType TilleringMethod { get; set; } = 0;\n\n [Description(\"Enter Fertile Tiller No. : \")]\n public double Ftn { get; set; }\n\n public enum TilleringMethodType \n {\n RuleOfThumb = -1,\n FixedTillering = 0,\n DynamicTillering = 1\n }\n public enum RowConfigurationType \n {\n Solid, SingleSkip, DoubleSkip\n }\n\n [Link]\n private Zone paddock;\n\n [Link]\n private Clock clock;\n\n [Link]\n private Plant crop;\n\n [EventSubscribe(\"DoManagement\")]\n private void OnDoManagement(object sender, EventArgs e)\n {\n if (clock.Today == Date /* && isFallow */)\n {\n double population = Density * paddock.Area;\n crop.Sow(cultivar:Cultivar, population:population, depth:Depth, rowSpacing:RowSpacing, rowConfig: (double)RowConfiguration, tillering:(int)TilleringMethod, ftn:Ftn);\n }\n }\n }\n}\n", "Parameters": [ { "Key": "Date", @@ -10119,7 +10163,11 @@ }, { "Key": "RowConfiguration", - "Value": "solid" + "Value": "Solid" + }, + { + "Key": "TilleringMethod", + "Value": "FixedTillering" }, { "Key": "Ftn", @@ -10842,7 +10890,7 @@ "Children": [ { "$type": "Models.Manager, Models", - "Code": "using Models.Interfaces;\nusing APSIM.Shared.Utilities;\nusing Models.Utilities;\nusing Models.Soils;\nusing Models.PMF;\nusing Models.Core;\nusing System;\nusing Models.Climate;\n\nnamespace Models\n{\n [Serializable]\n public class Script : Model\n {\n [Link] private Clock Clock;\n [Link] private Fertiliser Fertiliser;\n [Link] private Summary Summary;\n [Link] private Soil Soil;\n private Accumulator accumulatedRain;\n [Link]\n private ISoilWater waterBalance;\n \n [Description(\"Crop\")]\n public IPlant Crop { get; set; }\n\n [Description(\"Start of sowing window (d-mmm)\")]\n public string StartDate { get; set; }\n\n [Description(\"End of sowing window (d-mmm)\")]\n public string EndDate { get; set; }\n\n [Description(\"Minimum extractable soil water for sowing (mm)\")]\n public double MinESW { get; set; }\n\n [Description(\"Accumulated rainfall required for sowing (mm)\")]\n public double MinRain { get; set; }\n\n [Description(\"Duration of rainfall accumulation (d)\")]\n public int RainDays { get; set; }\n\n [Display(Type = DisplayType.CultivarName)]\n [Description(\"Cultivar to be sown\")]\n public string CultivarName { get; set; }\n\n [Description(\"Sowing depth (mm)\")]\n public double SowingDepth { get; set; }\n\n [Description(\"Row spacing (mm)\")]\n public double RowSpacing { get; set; }\n\n [Description(\"Plant population (/m2)\")]\n public double Population { get; set; }\n \n \n [EventSubscribe(\"StartOfSimulation\")]\n private void OnSimulationCommencing(object sender, EventArgs e)\n {\n accumulatedRain = new Accumulator(this, \"[Weather].Rain\", RainDays);\n }\n\n [EventSubscribe(\"DoManagement\")]\n private void OnDoManagement(object sender, EventArgs e)\n {\n accumulatedRain.Update();\n \n if (DateUtilities.WithinDates(StartDate, Clock.Today, EndDate) &&\n !Crop.IsAlive &&\n MathUtilities.Sum(waterBalance.ESW) > MinESW &&\n accumulatedRain.Sum > MinRain)\n {\n Crop.Sow(population: Population, cultivar: CultivarName, depth: SowingDepth, rowSpacing: RowSpacing); \n }\n }\n }\n}\n", + "Code": "using Models.Interfaces;\nusing APSIM.Shared.Utilities;\nusing Models.Utilities;\nusing Models.Soils;\nusing Models.PMF;\nusing Models.PMF.Organs;\nusing Models.Core;\nusing System;\nusing Models.Climate;\n\nnamespace Models\n{\n [Serializable]\n public class Script : Model\n {\n [Link] private Clock Clock;\n [Link] private Fertiliser Fertiliser;\n [Link] private Summary Summary;\n [Link] private Soil Soil;\n private Accumulator accumulatedRain;\n [Link]\n private ISoilWater waterBalance;\n [Link]\n private Zone paddock;\n \n [Description(\"Crop\")]\n public Plant Crop { get; set; }\n\n [Description(\"Start of sowing window (d-mmm)\")]\n public string StartDate { get; set; }\n\n [Description(\"End of sowing window (d-mmm)\")]\n public string EndDate { get; set; }\n\n [Description(\"Minimum extractable soil water for sowing (mm)\")]\n public double MinESW { get; set; }\n\n [Description(\"Accumulated rainfall required for sowing (mm)\")]\n public double MinRain { get; set; }\n\n [Description(\"Duration of rainfall accumulation (d)\")]\n public int RainDays { get; set; }\n\n [Display(Type = DisplayType.CultivarName)]\n [Description(\"Cultivar to be sown\")]\n public string CultivarName { get; set; }\n\n [Description(\"Sowing depth (mm)\")]\n public double SowingDepth { get; set; }\n\n [Description(\"Row spacing (mm)\")]\n public double RowSpacing { get; set; }\n\n [Description(\"Plant population (/m2)\")]\n public double Population { get; set; }\n \n [EventSubscribe(\"StartOfSimulation\")]\n private void OnSimulationCommencing(object sender, EventArgs e)\n {\n accumulatedRain = new Accumulator(this, \"[Weather].Rain\", RainDays);\n }\n\n [EventSubscribe(\"DoManagement\")]\n private void OnDoManagement(object sender, EventArgs e)\n {\n accumulatedRain.Update();\n \n if (DateUtilities.WithinDates(StartDate, Clock.Today, EndDate) &&\n !Crop.IsAlive &&\n MathUtilities.Sum(waterBalance.ESW) > MinESW &&\n accumulatedRain.Sum > MinRain)\n {\n //planting multiple crops will need \n var sorghumLeaf = (Crop.Leaf as SorghumLeaf);\n sorghumLeaf.MicroClimateSetting = 1;\n \n double population = Population * paddock.Area;\n Crop.Sow(cultivar:CultivarName, population:population, depth:SowingDepth, rowSpacing:RowSpacing);\n }\n }\n }\n}\n", "Parameters": [ { "Key": "Crop", @@ -11839,22 +11887,6 @@ "$type": "Models.Factorial.Permutation, Models", "Name": "Permutation", "Children": [ - { - "$type": "Models.Memo, Models", - "Text": "Factor setup is maybe a bit counter-intuitive - we could do it without the CompositeFactors. The reason it was done this way is so that the graph series names come out better when varying by irrigation/fertiliser.", - "Name": "Memo", - "Children": [], - "Enabled": true, - "ReadOnly": false - }, - { - "$type": "Models.Factorial.Factor, Models", - "Specification": "[SowingRule].Script.Cultivar = Buster,M35-1", - "Name": "Cv", - "Children": [], - "Enabled": false, - "ReadOnly": false - }, { "$type": "Models.Factorial.Factor, Models", "Specification": "", @@ -12113,11 +12145,11 @@ "Children": [ { "$type": "Models.Manager, Models", - "Code": "using APSIM.Shared.Utilities;\r\nusing Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public string Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; } \r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Description(\"Enter skip row configuration : \")]\r\n public RowConfigurationType RowConfiguration { get; set; }\r\n\r\n [Description(\"Enter Fertile Tiller No. : \")]\r\n public double Ftn { get; set; }\r\n\r\n public enum RowConfigurationType \r\n {\r\n solid, single, _double /*replaces double*/\r\n }\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n\t\t\tvar sowDate = DateTime.Parse(Date);\n\t\t\tif(SameDate(sowDate, clock.Today))\n //if (clock.Today == sowDate /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, budNumber: Ftn, rowConfig: (double)RowConfiguration);\r\n /*\r\n if (paddock_is_fallow() = 1 and today = date('[date]')) then\r\n [crop] sow plants =[density], sowing_depth = [depth], cultivar = [cultivar], row_spacing = [row_spacing], skip = [RowConfiguration], tiller_no_fertile = [ftn] ()\r\n endif\r\n */\r\n }\r\n }\n private bool SameDate(DateTime d1, DateTime d2)\n {\n return d1.DayOfYear == d2.DayOfYear;\n }\n\r\n }\r\n}\r\n", + "Code": "using APSIM.Shared.Utilities;\nusing Models.PMF;\nusing Models.Core;\nusing System;\nusing Models.PMF.Organs;\n\nnamespace Models\n{\n [Serializable]\n public class Script : Model\n {\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\n public DateTime Date { get; set; }\n\n [Description(\"Enter sowing density (plants/m2) : \")]\n public double Density { get; set; }\n\n [Description(\"Enter sowing depth (mm) : \")]\n public double Depth { get; set; }\n\n [Description(\"Enter cultivar : \")]\n [Display(Type = DisplayType.CultivarName)]\n public string Cultivar { get; set; }\n\n [Description(\"Enter row spacing (mm) : \")]\n public double RowSpacing { get; set; }\n\n [Description(\"Enter skip row configuration : \")]\n public RowConfigurationType RowConfiguration { get; set; }\n\n [Description(\"Tillering Method\")]\n public TilleringMethodType TilleringMethod { get; set; } = 0;\n\n [Description(\"Enter Fertile Tiller No. : \")]\n public double Ftn { get; set; }\n\n public enum TilleringMethodType \n {\n RuleOfThumb = -1,\n FixedTillering = 0,\n DynamicTillering = 1\n }\n public enum RowConfigurationType \n {\n Solid, SingleSkip, DoubleSkip\n }\n\n [Link]\n private Zone paddock;\n\n [Link]\n private Clock clock;\n\n [Link]\n private Plant crop;\n\n [EventSubscribe(\"DoManagement\")]\n private void OnDoManagement(object sender, EventArgs e)\n {\n\t\t\tif(SameDate(Date, clock.Today))\n {\n double population = Density * paddock.Area;\n crop.Sow(cultivar:Cultivar, population:population, depth:Depth, rowSpacing:RowSpacing, rowConfig: (double)RowConfiguration, tillering:(int)TilleringMethod, ftn:Ftn);\n }\n }\n\n private bool SameDate(DateTime d1, DateTime d2)\n {\n return d1.DayOfYear == d2.DayOfYear;\n }\n }\n}\n", "Parameters": [ { "Key": "Date", - "Value": "25-jul" + "Value": "07/01/2020 00:00:00" }, { "Key": "Density", @@ -12137,7 +12169,11 @@ }, { "Key": "RowConfiguration", - "Value": "solid" + "Value": "Solid" + }, + { + "Key": "TilleringMethod", + "Value": "FixedTillering" }, { "Key": "Ftn", @@ -13072,7 +13108,7 @@ }, { "$type": "Models.Manager, Models", - "Code": "using Models.Interfaces;\nusing System;\nusing Models.Core;\nusing Models.PMF;\nusing Models.Soils;\nusing Models.Soils.Nutrients;\nusing Models.Utilities;\nusing APSIM.Shared.Utilities;\nusing Models.Climate;\n\nnamespace Models\n{\n [Serializable]\n public class Script : Model\n {\n [Link] private Clock Clock;\n [Link] private Fertiliser Fertiliser;\n [Link] private Summary Summary;\n [Link] private Plant Sorghum;\n [Link] private Soil Soil;\n private Accumulator accumulatedRain;\n [Link]\n private ISoilWater waterBalance;\n \n [Description(\"Start of sowing window (d-mmm)\")]\n public string StartDate { get; set;}\n [Description(\"End of sowing window (d-mmm)\")]\n public string EndDate { get; set;}\n [Description(\"Minimum extractable soil water for sowing (mm)\")]\n public double MinESW { get; set;}\n [Description(\"Accumulated rainfall required for sowing (mm)\")]\n public double MinRain { get; set;}\n [Description(\"Duration of rainfall accumulation (d)\")]\n public int RainDays { get; set;}\n [Description(\"Cultivar to be sown\")]\n [Display(Type=DisplayType.CultivarName)]\n public string CultivarName { get; set;}\n [Description(\"Sowing depth (mm)\")]\n public double SowingDepth { get; set;} \n [Description(\"Row spacing (mm)\")]\n public double RowSpacing { get; set;} \n [Description(\"Plant population (/m2)\")]\n public double Population { get; set;} \n \n \n [EventSubscribe(\"StartOfSimulation\")]\n private void OnSimulationCommencing(object sender, EventArgs e)\n {\n accumulatedRain = new Accumulator(this, \"[Weather].Rain\", RainDays);\n }\n \n\n [EventSubscribe(\"DoManagement\")]\n private void OnDoManagement(object sender, EventArgs e)\n {\n accumulatedRain.Update();\n \n if (DateUtilities.WithinDates(StartDate,Clock.Today,EndDate) &&\n !Sorghum.IsAlive &&\n MathUtilities.Sum(waterBalance.ESW) > MinESW &&\n accumulatedRain.Sum > MinRain)\n {\n Sorghum.Sow(population:Population, cultivar:CultivarName, depth:SowingDepth, rowSpacing:RowSpacing); \n }\n \n }\n \n }\n}\n", + "Code": "using Models.Interfaces;\nusing System;\nusing Models.Core;\nusing Models.PMF;\nusing Models.Soils;\nusing Models.Soils.Nutrients;\nusing Models.Utilities;\nusing APSIM.Shared.Utilities;\nusing Models.Climate;\n\nnamespace Models\n{\n [Serializable]\n public class Script : Model\n {\n [Link] private Clock Clock;\n [Link] private Fertiliser Fertiliser;\n [Link] private Summary Summary;\n [Link] private Plant Sorghum;\n [Link] private Soil Soil;\n [Link] private Zone paddock;\n private Accumulator accumulatedRain;\n [Link]\n private ISoilWater waterBalance;\n \n [Description(\"Start of sowing window (d-mmm)\")]\n public string StartDate { get; set;}\n [Description(\"End of sowing window (d-mmm)\")]\n public string EndDate { get; set;}\n [Description(\"Minimum extractable soil water for sowing (mm)\")]\n public double MinESW { get; set;}\n [Description(\"Accumulated rainfall required for sowing (mm)\")]\n public double MinRain { get; set;}\n [Description(\"Duration of rainfall accumulation (d)\")]\n public int RainDays { get; set;}\n [Description(\"Cultivar to be sown\")]\n [Display(Type=DisplayType.CultivarName)]\n public string CultivarName { get; set;}\n [Description(\"Sowing depth (mm)\")]\n public double SowingDepth { get; set;} \n [Description(\"Row spacing (mm)\")]\n public double RowSpacing { get; set;} \n [Description(\"Plant population (/m2)\")]\n public double Population { get; set;} \n \n \n [EventSubscribe(\"StartOfSimulation\")]\n private void OnSimulationCommencing(object sender, EventArgs e)\n {\n accumulatedRain = new Accumulator(this, \"[Weather].Rain\", RainDays);\n }\n \n\n [EventSubscribe(\"DoManagement\")]\n private void OnDoManagement(object sender, EventArgs e)\n {\n accumulatedRain.Update();\n \n if (DateUtilities.WithinDates(StartDate,Clock.Today,EndDate) &&\n !Sorghum.IsAlive &&\n MathUtilities.Sum(waterBalance.ESW) > MinESW &&\n accumulatedRain.Sum > MinRain)\n {\n double population = Population * paddock.Area;\n Sorghum.Sow(cultivar:CultivarName, population:population, depth:SowingDepth, rowSpacing:RowSpacing);\n }\n }\n \n }\n}\n", "Parameters": [ { "Key": "StartDate", diff --git a/Tests/UnderReview/Sorghum/dcaps.apsimx b/Tests/UnderReview/Sorghum/dcaps.apsimx index 8f01278e8e..3a60e0c523 100644 --- a/Tests/UnderReview/Sorghum/dcaps.apsimx +++ b/Tests/UnderReview/Sorghum/dcaps.apsimx @@ -1,7 +1,7 @@ { "$type": "Models.Core.Simulations, Models", "ExplorerWidth": 285, - "Version": 150, + "Version": 151, "Name": "Simulations", "Children": [ { @@ -3280,6 +3280,7 @@ { "$type": "Models.PMF.Organs.SorghumLeaf, Models", "TilleringMethod": 0, + "FertileTillerNumber": 0.0, "InitialDMWeight": 0.1, "InitialLAI": 200.0, "InitialSLN": 1.5, @@ -3338,7 +3339,7 @@ "$type": "Models.PMF.Struct.LeafCulms, Models", "dltLeafNo": 0.0, "Culms": [], - "TilleringMethod": 0.0, + "TilleringMethod": 0, "FinalLeafNo": 0.0, "dltPotentialLAI": 0.0, "dltStressedLAI": 0.0, @@ -3347,7 +3348,8 @@ { "$type": "Models.PMF.Struct.DynamicTillering, Models", "CalculatedTillerNumber": 0.0, - "FertileTillerNumber": 0.0, + "CurrentTillerNumber": 0.0, + "DltTillerNumber": 0.0, "SupplyDemandRatio": 0.0, "Name": "DynamicTillering", "Children": [ @@ -3486,6 +3488,7 @@ { "$type": "Models.PMF.Struct.FixedTillering, Models", "FertileTillerNumber": 0.0, + "CurrentTillerNumber": 0.0, "Name": "FixedTillering", "Children": [ { @@ -9351,7 +9354,7 @@ "Children": [ { "$type": "Models.Manager, Models", - "Code": "using APSIM.Shared.Utilities;\r\nusing Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; }\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Description(\"Enter skip row configuration : \")]\r\n public RowConfigurationType RowConfiguration { get; set; }\r\n\r\n [Description(\"Enter Fertile Tiller No. : \")]\r\n public double Ftn { get; set; }\r\n\r\n public enum RowConfigurationType \r\n {\r\n solid, single, _double /*replaces double*/\r\n }\r\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n crop.Sow(Cultivar, population, Depth, RowSpacing, budNumber: Ftn, rowConfig: (double)RowConfiguration);\r\n }\r\n }\r\n }\r\n}\r\n", + "Code": "using APSIM.Shared.Utilities;\r\nusing Models.PMF;\r\nusing Models.Core;\r\nusing System;\r\n\r\nnamespace Models\r\n{\r\n [Serializable]\r\n public class Script : Model\r\n {\r\n [Description(\"Enter sowing date (dd/mm/yyyy) : \")]\r\n public DateTime Date { get; set; }\r\n\r\n [Description(\"Enter sowing density (plants/m2) : \")]\r\n public double Density { get; set; }\r\n\r\n [Description(\"Enter sowing depth (mm) : \")]\r\n public double Depth { get; set; }\r\n\r\n [Description(\"Enter cultivar : \")]\r\n [Display(Type = DisplayType.CultivarName)]\r\n public string Cultivar { get; set; }\r\n\r\n [Description(\"Enter row spacing (mm) : \")]\r\n public double RowSpacing { get; set; }\r\n\r\n [Description(\"Enter skip row configuration : \")]\n public RowConfigurationType RowConfiguration { get; set; }\n\n [Description(\"Tillering Method\")]\n public TilleringMethodType TilleringMethod { get; set; } = 0;\n\n [Description(\"Enter Fertile Tiller No. : \")]\n public double Ftn { get; set; }\n\n public enum TilleringMethodType \n {\n RuleOfThumb = -1,\n FixedTillering = 0,\n DynamicTillering = 1\n }\n public enum RowConfigurationType \n {\n Solid, SingleSkip, DoubleSkip\n }\n\r\n [Link]\r\n private Zone paddock;\r\n\r\n [Link]\r\n private Clock clock;\r\n\r\n [Link]\r\n private IPlant crop;\r\n\r\n [EventSubscribe(\"DoManagement\")]\r\n private void OnDoManagement(object sender, EventArgs e)\r\n {\r\n if (clock.Today == Date /* && isFallow */)\r\n {\r\n double population = Density * paddock.Area;\r\n crop.Sow(cultivar:Cultivar, population:population, depth:Depth, rowSpacing:RowSpacing, rowConfig: (double)RowConfiguration, tillering:(int)TilleringMethod, ftn:Ftn);\n }\r\n }\r\n }\r\n}\r\n", "Parameters": [ { "Key": "Cultivar", @@ -9379,7 +9382,11 @@ }, { "Key": "RowConfiguration", - "Value": "solid" + "Value": "Solid" + }, + { + "Key": "TilleringMethod", + "Value": "FixedTillering" } ], "Name": "SowingRule",