示例#1
0
        public static int Main(string[] args)
        {
            try {
                UI.TextWriter = Console.Out;

                Assembly       assembly       = Assembly.GetExecutingAssembly();
                VersionRelease versionRelease = new VersionRelease(assembly);
                UI.WriteLine("Landis-II {0}", versionRelease);
                UI.WriteLine("Copyright 2004-2005 University of Wisconsin");
                UI.WriteLine();

                if (args.Length == 0)
                {
                    UI.WriteLine("Error: No scenario file specified.");
                    return(1);
                }
                if (args.Length > 1)
                {
                    UI.WriteLine("Error: Extra argument(s) on command line:");
                    StringBuilder argsList = new StringBuilder();
                    argsList.Append(" ");
                    for (int i = 1; i < args.Length; ++i)
                    {
                        argsList.AppendFormat(" {0}", args[i]);
                    }
                    UI.WriteLine(argsList.ToString());
                    return(1);
                }

                string                 appDir    = Application.Directory;
                PlugIns.Dataset        plugIns   = new PlugIns.Dataset(Path.Combine(appDir, "plug-ins.xml"));
                RasterIO.DriverManager driverMgr = new RasterIO.DriverManager(Path.Combine(appDir, "raster-drivers.xml"));
                Model model = new Model(plugIns, driverMgr);
                model.Run(args[0]);
                return(0);
            }
            catch (ApplicationException exc) {
                UI.WriteLine(exc.Message);
                return(1);
            }
            catch (Exception exc) {
                UI.WriteLine("Internal error occurred within the program:");
                UI.WriteLine("  {0}", exc.Message);
                if (exc.InnerException != null)
                {
                    UI.WriteLine("  {0}", exc.InnerException.Message);
                }
                UI.WriteLine();
                UI.WriteLine("Stack trace:");
                UI.WriteLine(exc.StackTrace);
                return(1);
            }
        }
示例#2
0
        //---------------------------------------------------------------------

        public static int Main(string[] args)
        {
            try {
                Assembly       coreAssembly   = Assembly.GetAssembly(typeof(Landis.PlugIns.PlugInInfo));
                VersionRelease versionRelease = new VersionRelease(coreAssembly);
                Console.WriteLine("Landis-II {0}", versionRelease);

                Assembly myAssembly = Assembly.GetExecutingAssembly();
                versionRelease = new VersionRelease(myAssembly);
                Console.WriteLine("Extensions Administration Tool {0}", versionRelease);

                Console.WriteLine("Copyright 2005-2006 University of Wisconsin");
                Console.WriteLine();

                ICommand command = ParseArgs(args);
                InstallingExtension = command is InstallCommand;
                if (command != null)
                {
                    command.Execute();
                }
                return(0);
            }
            catch (ApplicationException exc) {
                Console.WriteLine(exc.Message);
                return(1);
            }
            catch (Exception exc) {
                Console.WriteLine("Internal error occurred within the program:");
                Console.WriteLine("  {0}", exc.Message);
                if (exc.InnerException != null)
                {
                    Console.WriteLine("  {0}", exc.InnerException.Message);
                }
                Console.WriteLine();
                Console.WriteLine("Stack trace:");
                Console.WriteLine(exc.StackTrace);
                return(1);
            }
        }
        public static int Main(string[] args)
        {
            try {
                Assembly       assembly       = Assembly.GetExecutingAssembly();
                VersionRelease versionRelease = new VersionRelease(assembly);
                Console.WriteLine("Probability of Establishment Calculator {0}", versionRelease);
                Console.WriteLine("Copyright 2004-2006 University of Wisconsin");
                Console.WriteLine();

                if (args.Length > 1)
                {
                    Console.WriteLine("Error: No parameters need be specified at this point.");
                    Console.WriteLine("Error: Argument(s) on command line:");
                    StringBuilder argsList = new StringBuilder();
                    argsList.Append(" ");
                    for (int i = 1; i < args.Length; ++i)
                    {
                        argsList.AppendFormat(" {0}", args[i]);
                    }
                    Console.WriteLine(argsList.ToString());
                    return(1);
                }

                string appDir    = Application.Directory;
                string inputFile = args[0];

                ParameterParser parser     = new ParameterParser();
                IParameters     parameters = Data.Load <IParameters>(inputFile, parser);

                ISpeciesData[] SpeciesDataset = parameters.SpeciesDataset;

                UI.WriteLine("Opening Pest Calculator log file \"{0}\" ...", parameters.LogFileName);
                StreamWriter log = Data.CreateTextFile(parameters.LogFileName);
                log.AutoFlush = true;

                UI.WriteLine("Opening Pest Calculator output file \"{0}\" ...", parameters.TableLogFileName);
                StreamWriter log2 = Data.CreateTextFile(parameters.TableLogFileName);
                log2.AutoFlush = true;

                Console.WriteLine("Begin calculating species establishment probabilities.");

                double[,,] establishProbs = new double[parameters.EcoregionTable.Count, 50, parameters.Timestep];

                foreach (EcoregionData ecoData in parameters.EcoregionTable)
                {
                    IMonthlyWeather[] ecoClimate = new IMonthlyWeather[12];
                    for (int mo = 0; mo < 12; mo++)
                    {
                        ecoClimate[mo] = parameters.MonthlyWeatherTable[ecoData.Index, mo];
                    }

                    for (int t = 1; t <= parameters.Timestep; t++)
                    {
                        //Initialize identical weather and soils for all species.
                        Weather annualWeather = new Weather(ecoData.Latitude, ecoData.Longitude);
                        annualWeather.InitializeWeather(ecoClimate, t);

                        Soils soils = new Soils(ecoData.FieldCapacity, ecoData.WiltingPoint);
                        soils.InitializeSoilMoisture(annualWeather, 1968);

                        log.WriteLine(annualWeather.Write());
                        log.WriteLine(soils.Write());

                        for (int spp = 0; spp < 50; spp++)
                        {
                            if (parameters.SpeciesDataset[spp] == null)
                            {
                                break;
                            }

                            ISpeciesData sppData = SpeciesDataset[spp];

                            double tempMultiplier       = annualWeather.BotkinDegreeDayMultiplier(sppData.MaxGDD, sppData.MinGDD);
                            double chillDayMultiplier   = annualWeather.SykesMinimumGDDMultiplier(sppData);
                            double soilMultiplier       = soils.SoilMoistureMultiplier(annualWeather, sppData.AllowableDrought);
                            double nitrogenMultiplier   = soils.SoilNitrogenMultiplier(ecoData.BaseSoilN, sppData.NTolerance);
                            double minJanTempMultiplier = annualWeather.MinJanuaryTempModifier(sppData.MinJanTemp);

                            log.Write("Spp = {0},", sppData.Name);
                            log.Write(" TempMultiplier(Botkin) = {0:0.00},", tempMultiplier);
                            log.Write(" MinJanTempMultiplier = {0:0.00},", minJanTempMultiplier);
                            log.Write(" SoilMultiplier = {0:0.00}.", soilMultiplier);
                            log.Write(" ChillDayMultiplier = {0:0.00}.", chillDayMultiplier);
                            log.WriteLine(" NMultiplier = {0:0.00}.", nitrogenMultiplier);

                            // Liebig's Law of the Minimum is applied to the four multipliers for each year:
                            double minMultiplier = System.Math.Min(tempMultiplier, soilMultiplier);
                            minMultiplier = System.Math.Min(nitrogenMultiplier, minMultiplier);
                            minMultiplier = System.Math.Min(minJanTempMultiplier, minMultiplier);

                            establishProbs[ecoData.Index, spp, t - 1] = minMultiplier;
                        }

                        annualWeather = null;
                        soils         = null;
                    }   // end timesteps
                } //end ecoregions

                //Write header information with ecoregion numbers:
                foreach (EcoregionData ecoData in parameters.EcoregionTable)
                {
                    log2.Write("{0}   ", ecoData.Number);
                }
                log2.WriteLine("");


                for (int spp = 0; spp < 50; spp++)
                {
                    if (parameters.SpeciesDataset[spp] == null)
                    {
                        break;
                    }

                    log2.Write("{0}", parameters.SpeciesDataset[spp].Name);


                    foreach (EcoregionData ecoData in parameters.EcoregionTable)
                    {
                        double outputValue = 0.0;
                        if (parameters.Timestep == 1)
                        {
                            outputValue = establishProbs[ecoData.Index, spp, 0];
                        }

                        if (parameters.MultiyearAnalysis == SummaryType.Average && parameters.Timestep > 1)
                        {
                            for (int t = 0; t < parameters.Timestep; t++)
                            {
                                outputValue += establishProbs[ecoData.Index, spp, t];
                            }
                            outputValue /= parameters.Timestep;
                        }
                        if (parameters.MultiyearAnalysis == SummaryType.Minimum && parameters.Timestep > 1)
                        {
                            for (int t = 0; t < parameters.Timestep; t++)
                            {
                                outputValue = System.Math.Min(establishProbs[ecoData.Index, spp, t], outputValue);
                            }
                        }
                        if (parameters.MultiyearAnalysis == SummaryType.Median && parameters.Timestep > 1)
                        {
                            int      aLength = parameters.Timestep;
                            double[] probs   = new double[aLength];
                            for (int t = 0; t < parameters.Timestep; t++)
                            {
                                probs[t] = establishProbs[ecoData.Index, spp, t];
                            }

                            Array.Sort(probs);
                            int index = (int)System.Math.Floor((double)aLength / 2.0);

                            if (aLength % 2 == 1)
                            {
                                outputValue = probs[index];
                            }
                            if (aLength % 2 == 0)
                            {
                                outputValue = (double)(probs[index] + probs[index - 1]) / 2.0;
                            }
                        }
                        log2.Write("  {0:0.000}", outputValue);
                    }
                    log2.WriteLine("");
                }

                return(0);
            }
            catch (ApplicationException exc) {
                Console.WriteLine(exc.Message);
                return(1);
            }
            catch (Exception exc) {
                Console.WriteLine("Internal error occurred within the program:");
                Console.WriteLine("  {0}", exc.Message);
                if (exc.InnerException != null)
                {
                    Console.WriteLine("  {0}", exc.InnerException.Message);
                }
                Console.WriteLine();
                Console.WriteLine("Stack trace:");
                Console.WriteLine(exc.StackTrace);
                return(1);
            }
        }