public void ConvertYPCropReportSpecToAPSIM() { // NB: This is a real YP crop report XML file from 2014. string cropReportFileName = Path.Combine(filesDirectory, "CropReport.xml"); // Create a YieldProphet object from our file. YieldProphet spec = YieldProphetUtility.YieldProphetFromFile(cropReportFileName); // Create an APSIM spec List <APSIMSpec> simulations = YieldProphetToAPSIM.ToAPSIM(spec); Assert.AreEqual(simulations.Count, 5); Assert.AreEqual(simulations[0].Name, "ThisYear"); Assert.AreEqual(simulations[1].Name, "Base"); Assert.AreEqual(simulations[2].Name, "NUnlimited"); Assert.AreEqual(simulations[3].Name, "NUnlimitedFromToday"); Assert.AreEqual(simulations[4].Name, "Next10DaysDry"); Assert.AreEqual(simulations[0].StartDate, new DateTime(2014, 3, 25)); Assert.AreEqual(simulations[0].EndDate, new DateTime(2014, 6, 1)); Assert.AreEqual(simulations[0].Management.Count, 8); Assert.IsTrue(simulations[0].Management[0] is Sow); Assert.AreEqual((simulations[0].Management[0] as Sow).Date, new DateTime(2014, 4, 1)); Assert.AreEqual((simulations[0].Management[0] as Sow).Crop, "Wheat"); Assert.IsTrue(simulations[0].Management[1] is Fertilise); Assert.IsTrue(simulations[0].Management[2] is Fertilise); Assert.IsTrue(simulations[0].Management[3] is Fertilise); Assert.IsTrue(simulations[0].Management[4] is Tillage); Assert.IsTrue(simulations[0].Management[5] is ResetWater); Assert.IsTrue(simulations[0].Management[6] is ResetSurfaceOrganicMatter); Assert.IsTrue(simulations[0].Management[7] is ResetNitrogen); Assert.AreEqual(simulations[0].ObservedData, null); }
public void ConvertOldYPToNew() { // Get our file name string fileName = Path.Combine(filesDirectory, "TestConverter.xml"); // Create a YieldProphet object from our file. YieldProphet spec = YieldProphetUtility.YieldProphetFromFile(fileName); Assert.AreEqual(spec.Paddock.Count, 2); Assert.AreEqual(spec.Paddock[0].Name, "2011;mcvp;Grain Filling Baudin"); Assert.AreEqual(spec.Paddock[0].StartSeasonDate, new DateTime(2011, 4, 1)); Assert.AreEqual(spec.Paddock[0].Management.Count, 6); Assert.IsTrue(spec.Paddock[0].Management[0] is Sow); Assert.AreEqual((spec.Paddock[0].Management[0] as Sow).Date, new DateTime(2011, 6, 23)); Assert.AreEqual((spec.Paddock[0].Management[0] as Sow).Crop, "Barley"); Assert.IsTrue(spec.Paddock[0].Management[1] is Fertilise); Assert.IsTrue(spec.Paddock[0].Management[2] is Fertilise); Assert.IsTrue(spec.Paddock[0].Management[3] is Irrigate); Assert.IsTrue(spec.Paddock[0].Management[4] is Tillage); Assert.IsTrue(spec.Paddock[0].Management[5] is StubbleRemoved); Assert.AreEqual(spec.Paddock[0].Samples.Count, 1); Assert.AreEqual(spec.Paddock[0].ObservedData.Rows.Count, 3); Assert.AreEqual(spec.Paddock[0].ObservedData.Rows[0]["Rain"], 50.0f); Assert.AreEqual(spec.Paddock[0].ObservedData.Rows[1]["Rain"], 0.0f); Assert.AreEqual(spec.Paddock[0].ObservedData.Rows[2]["Rain"], 80.0f); Assert.AreEqual((spec.Paddock[1].Management[0] as Sow).Date, new DateTime(2011, 7, 23)); Assert.AreEqual((spec.Paddock[1].Management[1] as Fertilise).Date, new DateTime(2011, 7, 23)); }
/// <summary> /// Adds a YieldProphet job to the APSIM cloud. Job is zipped. /// </summary> /// <param name="job">The job bytes.</param> /// <returns>The unique job name.</returns> public string AddAsZIP(byte[] job) { string newJobName = DateTime.Now.ToString("yyyy-MM-dd (HH-mm-ss)"); string tempZipFile = Path.GetTempFileName() + ".zip"; File.WriteAllBytes(tempZipFile, job); YieldProphet yieldProphet = YieldProphetUtility.YieldProphetFromFile(tempZipFile); string xml = YieldProphetUtility.YieldProphetToXML(yieldProphet); AddAsXML(newJobName, xml); return(newJobName); }
/// <summary>Runs APSIM on the given xml file and makes sure no errors.</summary> /// <param name="xmlFileName">Name of the XML file.</param> private static void RunAPSIM(string xmlFileName) { // Create a YieldProphet object from our file. YieldProphet spec = YieldProphetUtility.YieldProphetFromFile(xmlFileName); foreach (Paddock paddock in spec.Paddock) { paddock.NowDate = new DateTime(2015, 3, 31); } // Create an APSIM spec List <APSIMSpec> simulations = YieldProphetToAPSIM.ToAPSIM(spec); // Now create all the files. APSIMFiles.Create(simulations, workingDirectory); // Make sure we got a .apsim file. string apsimFileName = Path.Combine(workingDirectory, "YieldProphet.apsim"); XmlDocument doc = new XmlDocument(); doc.Load(apsimFileName); List <XmlNode> simulationNodes = Utility.Xml.ChildNodes(doc.DocumentElement, ""); Assert.AreEqual(simulationNodes.Count, 6); Assert.AreEqual(Utility.Xml.NameAttr(simulationNodes[0]), "ThisYear"); Assert.AreEqual(Utility.Xml.NameAttr(simulationNodes[1]), "Base"); Assert.AreEqual(Utility.Xml.NameAttr(simulationNodes[2]), "NUnlimited"); Assert.AreEqual(Utility.Xml.NameAttr(simulationNodes[3]), "NUnlimitedFromToday"); Assert.AreEqual(Utility.Xml.NameAttr(simulationNodes[4]), "Next10DaysDry"); Assert.AreEqual(Utility.Xml.NameAttr(simulationNodes[5]), "Factorials"); doc.DocumentElement.RemoveChild(simulationNodes[1]); doc.DocumentElement.RemoveChild(simulationNodes[2]); doc.DocumentElement.RemoveChild(simulationNodes[3]); doc.DocumentElement.RemoveChild(simulationNodes[4]); doc.Save(apsimFileName); Process p = Utility.Process.RunProcess(@"D:\APSIM\Model\Apsim.exe", apsimFileName, workingDirectory); string errors = Utility.Process.CheckProcessExitedProperly(p); Assert.IsFalse(errors.Contains("Fail")); StreamReader reader = new StreamReader(Path.Combine(workingDirectory, "ThisYear_1.sum")); string sumFileContents = reader.ReadToEnd(); reader.Close(); Assert.IsFalse(sumFileContents.Contains("APSIM Fatal Error")); }
public void ConvertYPValidationSpecToAPSIM() { // NB: This is a real YP validation XML file from 2004. string validationFileName = Path.Combine(filesDirectory, "TestValidation.xml"); // Create a YieldProphet object from our file. YieldProphet spec = YieldProphetUtility.YieldProphetFromFile(validationFileName); // Run the files. List <APSIMSpec> simulations = YieldProphetToAPSIM.ToAPSIM(spec); Assert.AreEqual(simulations.Count, 2); Assert.AreEqual(simulations[0].Name, "2004;A and R Weidemann;Wep 1"); Assert.AreEqual(simulations[1].Name, "2004;A and R Weidemann;Wep 2"); Assert.AreEqual(simulations[0].StartDate, new DateTime(2004, 4, 1)); Assert.AreEqual(simulations[0].EndDate, new DateTime(2005, 1, 26)); Assert.AreEqual(simulations[0].Management.Count, 6); Assert.IsTrue(simulations[0].Management[0] is Sow); Assert.AreEqual((simulations[0].Management[0] as Sow).Date, new DateTime(2004, 6, 6)); Assert.AreEqual((simulations[0].Management[0] as Sow).Crop, "Wheat"); Assert.IsTrue(simulations[0].Management[1] is Fertilise); Assert.IsTrue(simulations[0].Management[2] is Fertilise); Assert.IsTrue(simulations[0].Management[3] is ResetWater); Assert.IsTrue(simulations[0].Management[4] is ResetSurfaceOrganicMatter); Assert.IsTrue(simulations[0].Management[5] is ResetNitrogen); Assert.AreEqual(simulations[0].ObservedData.Rows.Count, 275); Assert.AreEqual(simulations[0].Samples.Count, 1); Assert.AreEqual(simulations[0].Samples[0].SWUnits, Sample.SWUnitsEnum.Gravimetric); Assert.AreEqual(simulations[0].Samples[0].NO3Units, Sample.NUnitsEnum.ppm); Assert.AreEqual(simulations[0].Samples[0].NH4Units, Sample.NUnitsEnum.ppm); Assert.AreEqual(simulations[0].Samples[0].PHUnits, Sample.PHSampleUnitsEnum.CaCl2); Assert.AreEqual(simulations[0].Samples[0].OCUnits, Sample.OCSampleUnitsEnum.WalkleyBlack); Assert.IsTrue(Utility.Math.AreEqual(simulations[0].Soil.Samples[0].Thickness, new double[] { 100.0, 300.0, 300.0, 300.0 })); Assert.IsTrue(Utility.Math.AreEqual(simulations[0].Soil.Samples[0].SW, new double[] { 0.139, 0.247, 0.215, 0.191 })); Assert.IsTrue(Utility.Math.AreEqual(simulations[0].Soil.Samples[0].NH4, new double[] { 1.1, 0.5, 0.5, 0.5 })); Assert.IsTrue(Utility.Math.AreEqual(simulations[0].Soil.Samples[0].NO3, new double[] { 3, 3, 1.8, 0.5 })); Assert.IsTrue(Utility.Math.AreEqual(simulations[0].Soil.Samples[0].OC, new double[] { 1.2, double.NaN, double.NaN, double.NaN })); Assert.IsTrue(Utility.Math.AreEqual(simulations[0].Soil.Samples[0].EC, new double[] { 0.09, 0.19, 0.24, 0.3 })); Assert.IsTrue(Utility.Math.AreEqual(simulations[0].Soil.Samples[0].PH, new double[] { 6, 7.9, 8.4, 8.5 })); Assert.IsTrue(Utility.Math.AreEqual(simulations[0].Soil.Samples[0].CL, new double[] { 29, 11, 10, 10 })); }
/// <summary> /// Adds the job to the APSIM cloud. /// </summary> /// <param name="yieldProphet">The job specification.</param> /// <returns>The unique job name.</returns> public string Add(YieldProphet yieldProphet) { DateTime nowDate = DateTime.Now; if (yieldProphet.Paddock.Count > 0 && yieldProphet.Paddock[0].NowDate != DateTime.MinValue) { nowDate = yieldProphet.Paddock[0].NowDate; } foreach (Paddock paddock in yieldProphet.Paddock) { paddock.NowDate = nowDate; } string newJobName = DateTime.Now.ToString("yyyy-MM-dd (HH-mm-ss) ") + yieldProphet.ReportName; string xml = YieldProphetUtility.YieldProphetToXML(yieldProphet); AddAsXML(newJobName, xml); return(newJobName); }
/// <summary>Uploads a job specified by the the yield prophet.</summary> /// <param name="fileName">The name of the file.</param> private void UploadYieldProphet(string fileName) { YieldProphet yieldProphet = YieldProphetUtility.YieldProphetFromFile(fileName); DateTime nowDate = DateTime.Now; if (NowEditBox.Text != "") { nowDate = DateTime.ParseExact(NowEditBox.Text, "d/M/yyyy", CultureInfo.InvariantCulture); } foreach (Paddock paddock in yieldProphet.Paddock) { paddock.NowDate = nowDate; } using (JobsService.JobsClient jobsService = new JobsService.JobsClient()) { jobsService.Add(yieldProphet); } }
public void GenerateWeatherFile50Years() { // name of old style validation xml file. // NB: This is a real YP validation XML file from 2004. string fileName = Path.Combine(filesDirectory, "TestValidation.xml"); // Create a YieldProphet object from our YP xml file YieldProphet spec = YieldProphetUtility.YieldProphetFromFile(fileName); // Read in the rainfall data Utility.ApsimTextFile observedDataFile = new Utility.ApsimTextFile(); observedDataFile.Open(Path.Combine(filesDirectory, "TestValidation.rain")); DataTable observedData = observedDataFile.ToTable(); observedDataFile.Close(); // Write the weather file. string rainFileName = Path.Combine(workingDirectory, spec.Paddock[0].Name) + ".met"; WeatherFile weatherFiles = new WeatherFile(); weatherFiles.CreateLongTerm(rainFileName, spec.Paddock[0].StationNumber, spec.Paddock[0].StartSeasonDate, spec.Paddock[0].StartSeasonDate.AddDays(300), new DateTime(2004, 6, 1), observedData, 50); Assert.AreEqual(weatherFiles.FilesCreated.Length, 50); Assert.AreEqual(Path.GetFileName(weatherFiles.FilesCreated[0]), "2004;A and R Weidemann;Wep 11954.met"); Utility.ApsimTextFile weatherFile = new Utility.ApsimTextFile(); weatherFile.Open(Path.Combine(workingDirectory, weatherFiles.FilesCreated[0])); DataTable weatherData = weatherFile.ToTable(); weatherFile.Close(); Assert.AreEqual(weatherData.Rows.Count, 301); Assert.AreEqual(weatherData.Rows[0]["codes"], "SSSO"); Assert.AreEqual(weatherData.Rows[61]["codes"], "SSSO"); Assert.AreEqual(weatherData.Rows[62]["codes"], "HHHH"); }
public void YPToAPSIMSpecTests_EnsureLongtermWorks() { YieldProphet yp = new YieldProphet() { Paddock = new List <Paddock>() { new Paddock() { Name = "NameOfPaddock", StartSeasonDate = new DateTime(2016, 4, 1), NowDate = new DateTime(2016, 7, 1), SoilWaterSampleDate = new DateTime(2016, 3, 1), SoilNitrogenSampleDate = new DateTime(2016, 6, 1), StationNumber = 41023, StationName = "Toowoomba", RunType = Paddock.RunTypeEnum.LongTerm, StubbleMass = 100, StubbleType = "Wheat", Samples = new List <Sample>() { new Sample() { Thickness = new double[] { 100, 300, 300, 300 }, NO3 = new double[] { 34, 6.9, 3.1, 1.8 }, NH4 = new double[] { 5.5, 1.8, 1.8, 1.5 }, SW = new double[] { 0.13, 0.18, 0.20, 0.24 }, SWUnits = Sample.SWUnitsEnum.Gravimetric } }, SoilPath = "Soils/Australia/Victoria/Wimmera/Clay (Rupanyup North No742)", Management = new List <Management>() { new Sow() { Crop = "Wheat", Date = new DateTime(2016, 5, 1) } } } } }; List <APSIMSpecification> simulations = YieldProphetToAPSIM.ToAPSIM(yp); Assert.AreEqual(simulations.Count, 1); Assert.AreEqual(simulations[0].Name, "NameOfPaddock"); Assert.AreEqual(simulations[0].StartDate, new DateTime(1957, 1, 1)); Assert.AreEqual(simulations[0].EndDate, new DateTime(2016, 6, 30)); Assert.AreEqual(simulations[0].RunType, APSIMSpecification.RunTypeEnum.Normal); Assert.AreEqual(simulations[0].Management.Count, 5); Assert.IsTrue(simulations[0].Management[0] is ResetWater); Assert.AreEqual(simulations[0].Management[0].Date, new DateTime(2016, 3, 1)); Assert.IsTrue(simulations[0].Management[0].IsEveryYear); Assert.IsTrue(simulations[0].Management[1] is ResetSurfaceOrganicMatter); Assert.AreEqual(simulations[0].Management[1].Date, new DateTime(2016, 3, 1)); Assert.IsTrue(simulations[0].Management[1].IsEveryYear); Assert.IsTrue(simulations[0].Management[2] is ResetNitrogen); Assert.AreEqual(simulations[0].Management[2].Date, new DateTime(2016, 5, 1)); Assert.IsTrue(simulations[0].Management[2].IsEveryYear); Assert.IsTrue(simulations[0].Management[3] is Sow); Assert.AreEqual(simulations[0].Management[3].Date, new DateTime(2016, 5, 1)); Assert.IsTrue(simulations[0].Management[3].IsEveryYear); Assert.IsTrue(simulations[0].Management[4] is ResetNitrogen); Assert.AreEqual(simulations[0].Management[4].Date, new DateTime(2016, 6, 1)); Assert.IsTrue(simulations[0].Management[4].IsEveryYear); Assert.IsNotNull(simulations[0].SoilPath); Assert.AreEqual(simulations[0].Samples.Count, 1); Assert.AreEqual(simulations[0].Samples[0].Thickness, yp.Paddock[0].Samples[0].Thickness); Assert.AreEqual(simulations[0].Samples[0].NO3, yp.Paddock[0].Samples[0].NO3); Assert.AreEqual(simulations[0].Samples[0].NH4, yp.Paddock[0].Samples[0].NH4); Assert.AreEqual(simulations[0].Samples[0].SW, yp.Paddock[0].Samples[0].SW); Assert.AreEqual(simulations[0].Samples[0].SWUnits, Sample.SWUnitsEnum.Gravimetric); }