Esempio n. 1
0
        private static void SimulationEngineExecute(ProjectHLK project, string outputs, int cores, HowLeakyOutputType outputType, int?targetindex, Action onSuccess = null)
        {
            var controller = new SimulationController();
            var myprogress = new GlobalProgress(project.Simulations.Count);

            myprogress.StartSimulations();
            var tokenSource      = new CancellationTokenSource();
            CancellationToken ct = tokenSource.Token;

            project.OutputsCSV = outputs;
            project.AddConsoleOutput("Running simulations... please wait...");
            //var runSimulationsTask = Task.Run(() => Controller.Execute(CurrentProject, MyProgress));
            var taskList = new System.Collections.Generic.List <Task>();

            taskList.Add(Task.Factory.StartNew(delegate
            {
                controller.Execute(project, tokenSource, cores, targetindex, outputType, myprogress);
            }, tokenSource.Token)); // Pass same token to StartNew.
            Task.WaitAll(taskList.ToArray());
        }
Esempio n. 2
0
        static void Main(string[] args)
        {
            try
            {
                if (args != null && args.Length > 0 && args[0].Contains(".hlk"))
                {
                    var consoleoutput  = new ConsoleOutputLogger(true);
                    var argstrings     = string.Join(",", args);
                    var inputspath     = args[0];
                    var deleteExisting = argstrings.Contains("-x");
                    var outputdaily    = argstrings.Contains("-d");
                    var outputmonthly  = argstrings.Contains("-m");
                    var outputyear     = argstrings.Contains("-y");
                    var type           = outputyear ? HowLeakyOutputType.YearlyCsv:(outputmonthly?HowLeakyOutputType.MonthlyCsv: HowLeakyOutputType.DailyCsv);
                    var outputscsv     = GetOutputsCSV(args);
                    var cores          = GetCores(args);
                    var controller     = new SimulationController();
                    var project        = new ProjectHLK();
                    project.Open(consoleoutput, inputspath);
                    try
                    {
                        project.AddConsoleOutput("Preparing to rerun all simulations...");
                        project.AddConsoleOutput($"Outputs will be saved in {project.OutputsDirectory}...");
                        if (deleteExisting)
                        {
                            if (Directory.Exists(project.OutputsDirectory))
                            {
                                var files = Directory.GetFiles(project.OutputsDirectory, "*.hlkbinout", SearchOption.AllDirectories).ToList();
                                if (files.Count > 0)
                                {
                                    project.AddConsoleOutput($"Please wait... deleting {files.Count} existing binary output files");
                                    foreach (var file in files)
                                    {
                                        File.Delete(file);
                                    }
                                }
                                var files2 = Directory.GetFiles(project.OutputsDirectory, "*.csv", SearchOption.AllDirectories).ToList();
                                if (files2.Count > 0)
                                {
                                    project.AddConsoleOutput($"Please wait... deleting {files2.Count} existing csv output files");
                                    foreach (var file in files2)
                                    {
                                        File.Delete(file);
                                    }
                                }
                            }
                        }

                        SimulationEngineExecute(project, outputscsv, cores, type, null);
                    }
                    catch (Exception ex)
                    {
                        project.AddErrorOutput(ex.ToString());
                    }
                }
                else
                {
                    Console.WriteLine("Input parameters not configured correctly. Use:");
                    Console.WriteLine("   howleakyconsole \"<projectname.hlk>\" -<optional parameters>");
                    Console.WriteLine("Optional parameters include:");
                    Console.WriteLine("   -x : delete existing outputs");
                    Console.WriteLine("   -d : include daily outputs");
                    Console.WriteLine("   -m : include monthly outputs");
                    Console.WriteLine("   -y : include yearly outputs");
                    Console.WriteLine("   -c : number of processing cores");
                    Console.WriteLine("   -o : outputs list in csv format");
                    Console.WriteLine("Examples:");
                    Console.WriteLine("    howleakyconsole \"D:\\HLProjects\\project.hlk\" -m -c1 -o\"Rain,SoilEvap\"");
                    Console.WriteLine("    howleakyconsole \"..\\myvalidation.hlk\" -m -o\"Rain,Runoff,DeepDrainage\"");
                    Console.WriteLine(" ");
                    Console.WriteLine("Outputs include:");
                    Console.WriteLine("     Climate'");
                    Console.WriteLine("         Rainfall mm - use 'Rain'");
                    Console.WriteLine("         Maximum temperature oC - use 'MaxTemp'");
                    Console.WriteLine("         Minimum temperatures oC - use 'MinTemp'");
                    Console.WriteLine("         Pan evaporation mm - use 'PanEvap'");
                    Console.WriteLine("         Solar radiation MJ/m2/day - use 'SolarRadiation'");
                    Console.WriteLine("     Water-balance'");

                    Console.WriteLine("         Runoff mm - use 'Runoff'");
                    Console.WriteLine("         Soil evaporation mm - use 'SoilEvap'");
                    Console.WriteLine("         Transpiration mm - use 'Transpiration'");
                    Console.WriteLine("         Evapotranspiration mm - use 'EvapoTransp'");
                    Console.WriteLine("         Deep drainage mm - use 'DeepDrainage'");
                    Console.WriteLine("         Overflow mm - use 'Overflow'");
                    Console.WriteLine("         Potential soil evaporation mm - use 'PotSoilEvap'");
                    Console.WriteLine("         Irrigation mm - use 'Irrigation'");
                    Console.WriteLine("         Runoff from Irrigation mm - use 'RunoffFromIrrigation'");
                    Console.WriteLine("         Runoff from rainfall mm - use 'RunoffFromRainfall'");
                    Console.WriteLine("         Lateral flow mm - use 'LateralFlow'");
                    Console.WriteLine("         Volume balance error % - use 'VBE'");
                    Console.WriteLine("         Runoff Curve No - use 'RunoffCurveNo'");
                    Console.WriteLine("         Runoff Rention No - use 'RunoffRetentionNumber'");
                    Console.WriteLine("         Layer 1 Sat Index - use 'Layer1SatIndex'");

                    Console.WriteLine("     Soil'");
                    Console.WriteLine("         Hillslope erosion t/ha - use 'HillSlopeErosion'");
                    Console.WriteLine("         Off-site sediment delivery t/ha - use 'OffSiteSedDelivery'");
                    Console.WriteLine("         Total available soil water mm - use 'TotalSoilWater'");
                    Console.WriteLine("         Soil water deficit mm - use 'SoilWaterDeficit'");
                    Console.WriteLine("         Total crop residue kg/ha - use 'TotalCropResidue'");
                    Console.WriteLine("         Total Residue Cover % - use 'TotalResidueCover'");
                    Console.WriteLine("         Total Cover % - use 'TotalCoverAllCrops'");
                    Console.WriteLine("         Layer Outputs: Available soil water mm - use 'SoilWater'");
                    Console.WriteLine("         Layer Outputs: Drainage mm - use 'Drainage'");

                    Console.WriteLine("     Crops'");

                    Console.WriteLine("         Days since planting days - use 'DaysSincePlanting'");
                    Console.WriteLine("         Leaf Area Index (if applicable)  - use 'LAI'");
                    Console.WriteLine("         Crop cover % - use 'GreenCover'");
                    Console.WriteLine("         Residue cover % - use 'ResidueCover'");
                    Console.WriteLine("         Total cover % - use 'TotalCover'");
                    Console.WriteLine("         Crop residue kg/ha - use 'ResidueAmount'");
                    Console.WriteLine("         Dry matter kg/ha - use 'DryMatter'");
                    Console.WriteLine("         Root depth mm - use 'RootDepth'");
                    Console.WriteLine("         Yield t/ha - use 'Yield'");
                    Console.WriteLine("         Potential transpiration mm - use 'PotTranspiration'");
                    Console.WriteLine("         Growth regulator - use 'GrowthRegulator'");
                    Console.WriteLine("         Water Stress Index - use 'WaterStressIndex'");
                    Console.WriteLine("         Temperature Stress Index - use 'TempStressIndex'");
                    Console.WriteLine("         In-crop rainfall mm - use 'CropRainfall'");
                    Console.WriteLine("         In-crop irrigation mm - use 'CropIrrigation'");
                    Console.WriteLine("         In-crop runoff mm - use 'CropRunoff'");
                    Console.WriteLine("         In-crop soil evaporation mm - use 'SoilEvaporation'");
                    Console.WriteLine("         In-crop Transpiration mm - use 'CropTranspiration'");
                    Console.WriteLine("         In-crop evapotranspiration mm - use 'CropEvapoTranspiration'");
                    Console.WriteLine("         In-crop Drainage - use 'Crop - use 'mm - use 'CropDrainage'");
                    Console.WriteLine("         In-crop LateralFlow - use 'Crop - use 'mm - use 'CropLateralFlow'");
                    Console.WriteLine("         In-crop Overflow - use 'Crop - use 'mm - use 'CropOverflow'");
                    Console.WriteLine("         In-crop SoilErosion - use 'Crop - use 'mm - use 'CropSoilErosion'");
                    Console.WriteLine("         In-crop SedimentDelivery - use 'Crop - use 'mm - use 'CropSedimentDelivery'");
                    Console.WriteLine("         PlantingCount - use 'Crop - use 'mm - use 'PlantingCount'");
                    Console.WriteLine("         HarvestCount - use 'Crop - use 'mm - use 'HarvestCount'");
                    Console.WriteLine("         CropDeathCount - use 'Crop - use 'mm - use 'CropDeathCount'");
                    Console.WriteLine("         FallowCount - use 'Crop - use 'mm - use 'FallowCount'");

                    Console.WriteLine("     Irrigation'");

                    Console.WriteLine("         IrrigationRunoff mm - use 'IrrigationRunoff'");
                    Console.WriteLine("         IrrigationApplied mm - use 'IrrigationApplied'");
                    Console.WriteLine("         IrrigationInfiltration mm - use 'IrrigationInfiltration'");
                    Console.WriteLine("         Evaporation losses ML - use 'RingTankEvaporationLosses'");
                    Console.WriteLine("         Seepage losses ML - use 'RingTankSeepageLosses'");
                    Console.WriteLine("         Overtopping losses ML - use 'RingTankOvertoppingLosses'");
                    Console.WriteLine("         Irrigation losses ML - use 'RingTankIrrigationLosses'");
                    Console.WriteLine("         Total losses ML - use 'RingTankTotalLosses'");
                    Console.WriteLine("         Captured runoff inflow ML - use 'RingTankRunoffCaptureInflow'");
                    Console.WriteLine("         Rainfall inflow ML - use 'RingTankRainfalInflow'");
                    Console.WriteLine("         Effective additional inflow ML - use 'RingTankEffectiveAdditionalInflow'");
                    Console.WriteLine("         Total additional inflow ML - use 'RingTankTotalAdditionalInflow'");
                    Console.WriteLine("         Total inflow ML - use 'RingTankTotalInflow'");
                    Console.WriteLine("         Ineffective additional inflow ML - use 'RingTankIneffectiveAdditionalInflow'");
                    Console.WriteLine("         Storage volume ML - use 'RingTankStorageVolume'");
                    Console.WriteLine("         Irrigation storage level % - use 'RingTankStorageLevel'");

                    Console.WriteLine("     Phosphorus'");
                    Console.WriteLine("         Particulate concentration mg/L - use 'ParticulateConc'");
                    Console.WriteLine("         Dissolved concentration mg/L - use 'DissolvedConc'");
                    Console.WriteLine("         Bioavailable particulate P concentration mg/L - use 'BioAvailParticPConc'");
                    Console.WriteLine("         Bioavailable P concentration mg/L - use 'BioAvailPConc'");
                    Console.WriteLine("         Total P concentration mg/L - use 'TotalPConc'");
                    Console.WriteLine("         Particulate P export kg/ha - use 'ParticPExport'");
                    Console.WriteLine("         Dissolved export kg/ha - use 'PhosExportDissolve'");
                    Console.WriteLine("         Bioavailable particulate P export kg/ha - use 'BioAvailParticPExport'");
                    Console.WriteLine("         Total bioavailable export kg/ha - use 'TotalBioAvailExport'");
                    Console.WriteLine("         Total phosphorus export kg/ha - use 'TotalP'");
                    Console.WriteLine("         PPHLC kg/ha - use 'PPHLC'");

                    Console.WriteLine("     Pesticides'");
                    Console.WriteLine("         Applied pest on veg g/ha - use 'AppliedPestOnVeg'");
                    Console.WriteLine("         Applied pest on stubble g/ha - use 'AppliedPestOnStubble'");
                    Console.WriteLine("         Applied pest on soil g/ha - use 'AppliedPestOnSoil'");
                    Console.WriteLine("         Pest on veg g/ha - use 'PestOnVeg'");
                    Console.WriteLine("         Pest on stubble g/ha - use 'PestOnStubble'");
                    Console.WriteLine("         Pest in soil g/ha - use 'PestInSoil'");
                    Console.WriteLine("         Pest soil conc. mg/kg - use 'PestSoilConc'");
                    Console.WriteLine("         Pest sediment phase conc. mg/kg - use 'PestSedPhaseConc'");
                    Console.WriteLine("         Pest water phase conc. ug/L - use 'PestWaterPhaseConc'");
                    Console.WriteLine("         Pest runoff conc. ug/L - use 'PestRunoffConc'");
                    Console.WriteLine("         Pest lost in runoff water g/ha - use 'PestLostInRunoffWater'");
                    Console.WriteLine("         Pest lost in runoff sediment g/ha - use 'PestLostInRunoffSediment'");
                    Console.WriteLine("         Total pest lost in runoff g/ha - use 'TotalPestLostInRunoff'");
                    Console.WriteLine("         Pest lost in leaching g/ha - use 'PestLostInLeaching'");
                    Console.WriteLine("         Pest losses as percent of last input % - use 'PestLossesPercentOfInput'");

                    Console.WriteLine("     Nitrates'");
                    Console.WriteLine("         Dissolved NO3 N in Runoff mg/L - use 'NO3NDissolvedInRunoff'");
                    Console.WriteLine("         NO3 Runoff Load kg/ha - use 'NO3NRunoffLoad'");
                    Console.WriteLine("         Dissolved NO3 N in Leaching mg/L - use 'NO3NDissolvedLeaching'");
                    Console.WriteLine("         NO3 N Leaching Load kg/ha - use 'NO3NLeachingLoad'");
                    Console.WriteLine("         Particulate N in Runoff kg/ha - use 'ParticNInRunoff'");
                    Console.WriteLine("         PNHLC kg/ha - use 'PNHLCa'");
                    Console.WriteLine("         NO3 N Store (top layer) kg/ha - use 'NO3NStoreTopLayer'");
                    Console.WriteLine("         NO3 N Store (bot layer) kg/ha - use 'NO3NStoreBotLayer'");
                    Console.WriteLine("         Total N Store (top layer) kg/ha - use 'TotalNStoreTopLayer'");
                    Console.WriteLine("         Drainage in NO3 period mm - use 'DrainageInNO3Period'");
                    Console.WriteLine("         Runoff in NO3 period mm - use 'RunoffInNO3Period'");

                    Console.WriteLine("     Solutes'");
                    Console.WriteLine("         Total Soil Solute kg/ha - use 'TotalSoilSolute'");
                    Console.WriteLine("         Total Soil Water Solute (Concentration) mg/L_soil-water - use '??'");
                    Console.WriteLine("         Layer Solute (Load) kg/ha - use 'LayerSoluteLoad'");
                    Console.WriteLine("         Layer Solute (Concentration) mg/L_soil-water - use 'LayerSoluteConcmgPerL'");
                    Console.WriteLine("         Layer Solute (Concentration) mg/kg soil - use 'LayerSoluteConcmgPerkg'");
                    Console.WriteLine("         Leachate Solute Concentration mg/L soil-water - use 'LeachateSoluteConcmgPerL'");
                    Console.WriteLine("         Leachate Solute Load kg/ha - use 'LeachateSoluteLoadkgPerha'");
                }
            }
            catch (Exception ex)
            {
                Console.Write($"{ex}");
            }
        }