private void OnCLEMInitialiseActivity(object sender, EventArgs e) { fileCrop = Apsim.Child(Simulation, ModelNameFileCrop) as FileCrop; if (fileCrop == null) { throw new ApsimXException(this, String.Format("Unable to locate model for crop input file {0} (under Simulation) referred to in {1}", this.ModelNameFileCrop, this.Name)); } switch (Store) { case StoresForCrops.HumanFoodStore: LinkedResourceItem = Resources.GetResourceItem(this, typeof(HumanFoodStore), StoreItemName, OnMissingResourceActionTypes.ReportErrorAndStop, OnMissingResourceActionTypes.ReportErrorAndStop) as IResourceType; break; case StoresForCrops.AnimalFoodStore: LinkedResourceItem = Resources.GetResourceItem(this, typeof(AnimalFoodStore), StoreItemName, OnMissingResourceActionTypes.ReportErrorAndStop, OnMissingResourceActionTypes.ReportErrorAndStop) as IResourceType; break; case StoresForCrops.GrazeFoodStore: LinkedResourceItem = Resources.GetResourceItem(this, typeof(GrazeFoodStore), StoreItemName, OnMissingResourceActionTypes.ReportErrorAndStop, OnMissingResourceActionTypes.ReportErrorAndStop) as IResourceType; break; case StoresForCrops.ProductStore: LinkedResourceItem = Resources.GetResourceItem(this, typeof(ProductStore), StoreItemName, OnMissingResourceActionTypes.ReportErrorAndStop, OnMissingResourceActionTypes.ReportErrorAndStop) as IResourceType; break; default: throw new Exception(String.Format("Store {0} is not supported for {1}", Enum.GetName(typeof(StoresForCrops), Store), this.Name)); } parentManagementActivity = (CropActivityManageCrop)this.Parent; // Retrieve harvest data from the forage file for the entire run. HarvestData = fileCrop.GetCropDataForEntireRun(parentManagementActivity.LinkedLandItem.SoilType, CropName, Clock.StartDate, Clock.EndDate).OrderBy(a => a.Year * 100 + a.Month).ToList <CropDataType>(); if ((HarvestData == null) || (HarvestData.Count == 0)) { throw new ApsimXException(this, String.Format("Unable to locate in crop file {0} any harvest data for SoilType {1}, CropName {2} between the dates {3} and {4}", fileCrop.FileName, parentManagementActivity.LinkedLandItem.SoilType, CropName, Clock.StartDate, Clock.EndDate)); } IsTreeCrop = (TreesPerHa == 0) ? false : true; //using this boolean just makes things more readable. UnitsToHaConverter = (parentManagementActivity.LinkedLandItem.Parent as Land).UnitsOfAreaToHaConversion; }
private void OnCLEMInitialiseActivity(object sender, EventArgs e) { // activity is performed in CLEMDoCutAndCarry not CLEMGetResources this.AllocationStyle = ResourceAllocationStyle.Manual; fileCrop = Apsim.ChildrenRecursively(Simulation).Where(a => a.Name == ModelNameFileCrop).FirstOrDefault() as FileCrop; if (fileCrop == null) { throw new ApsimXException(this, String.Format("Unable to locate model for crop input file [x={0}] referred to in [a={1}]", this.ModelNameFileCrop, this.Name)); } LinkedResourceItem = Resources.GetResourceItem(this, StoreItemName, OnMissingResourceActionTypes.ReportErrorAndStop, OnMissingResourceActionTypes.ReportErrorAndStop) as IResourceType; if ((LinkedResourceItem as Model).Parent.GetType() == typeof(GrazeFoodStore)) { (LinkedResourceItem as GrazeFoodStoreType).Manager = (Parent as IPastureManager); } // look up tree until we find a parent to allow nested crop products for rotate vs mixed cropping/products parentManagementActivity = Apsim.Parent(this, typeof(CropActivityManageCrop)) as CropActivityManageCrop; // Retrieve harvest data from the forage file for the entire run. HarvestData = fileCrop.GetCropDataForEntireRun(parentManagementActivity.LinkedLandItem.SoilType, CropName, Clock.StartDate, Clock.EndDate).OrderBy(a => a.Year * 100 + a.Month).ToList <CropDataType>(); if ((HarvestData == null) || (HarvestData.Count == 0)) { Summary.WriteWarning(this, String.Format("Unable to locate any harvest data in [x={0}] using [x={1}] for soil type [{2}] and crop name [{3}] between the dates [{4}] and [{5}]", fileCrop.Name, fileCrop.FileName, parentManagementActivity.LinkedLandItem.SoilType, CropName, Clock.StartDate.ToShortDateString(), Clock.EndDate.ToShortDateString())); } IsTreeCrop = (TreesPerHa == 0) ? false : true; //using this boolean just makes things more readable. UnitsToHaConverter = (parentManagementActivity.LinkedLandItem.Parent as Land).UnitsOfAreaToHaConversion; // locate a cut and carry limiter associated with this event. limiter = LocateCutAndCarryLimiter(this); // set manager of graze food store if linked }