示例#1
0
        static void ComputeStage(IFileSystem iFileSystem, ILogger iLogger,
                                 IProcessLauncher iProcess, IEnvironment iEnvironment, IDatabase iDatabase,
                                 WrfConfiguration config, PhysicsConfigurationProcessed physicsConfig)
        {
            DateTime runStartTime = DateTime.Now;
            string   runId        = Guid.NewGuid().ToString().Replace("-", "");

            iLogger.LogLine("Updating physics parameters...");
            NamelistHelper.UpdatePhysicsParameters(config, physicsConfig, iFileSystem);
            iLogger.LogLine("...done");

            iLogger.LogLine("Changing directory to real directory...");
            FileSystemHelper.SetCurrentDirectoryToWRFDirectory(config, iFileSystem);
            iLogger.LogLine("...done");

            iLogger.LogLine("Launching real.exe...");
            ProcessHelper.MpiRunRealExecutable(config, iProcess);
            iLogger.LogLine("...done");

            iLogger.LogLine($"Launching wrf.exe against mp_physics={physicsConfig.MpPhysics}");
            ProcessHelper.MpiRunWrfExecutable(config, iProcess);
            iLogger.LogLine("...done");

            iLogger.LogLine("Locating the WrfOut file...");
            string wrfOutFile =
                FileSystemHelper.RetrievePathToWrfOutFile(config, iFileSystem);

            iLogger.LogLine($"...found at {wrfOutFile}.");

            iLogger.LogLine("Retrieving scripts to run...");
            string[] scripts = FileSystemHelper.RetrieveNclScriptsToRun(config, iFileSystem);
            iLogger.LogLine($"...found {scripts.Length} scripts: {string.Join(",", scripts)}");

            //string wrfOutFile = @"C:\Users\Ben\Desktop\wrfout";

            DateTime      runEndTime   = DateTime.Now;
            INetCDFReader netCdfReader = new NetCDFReader(wrfOutFile);

            DatabaseHelper.CreateRunRecord(netCdfReader, iDatabase,
                                           runStartTime, runEndTime, runId);

            LatLongRect latLongRect = ConfigurationHelper.ParseLatLongRect(config);

            DatabaseHelper.RecordVariables(netCdfReader, iDatabase,
                                           runId, latLongRect.UpperLeftLong, latLongRect.LowerRightLong,
                                           latLongRect.LowerRightLat, latLongRect.UpperLeftLat);

            foreach (string script in scripts)
            {
                iLogger.LogLine($"Launching NCL against {script}...");
                ProcessHelper.NclRunScript(config, iProcess, script, wrfOutFile);
                iLogger.LogLine("...done");

                ProcessHelper.MakeVideoWithFFMPEG(config, iProcess, script, runId);
            }
        }
示例#2
0
        public void TestSavingContentInWPSNamelist()
        {
            IFileSystem      fileSystem = new MockWPSNamelistFileSystem();
            WrfConfiguration config     = new WrfConfiguration();

            config.WRFNamelist = "";
            NamelistHelper.UpdateDatesInWPSNamelist(config, new DateTime(1980, 5, 26),
                                                    new DateTime(1981, 5, 26), fileSystem);

            string result = fileSystem.ReadFileContent("getresult");

            Assert.IsTrue(result.Contains("start_date = '1980-05-26_00:00:00'"));
        }
示例#3
0
        public void TestSavingContentInWrfNamelist()
        {
            IFileSystem      fileSystem = new MockWRFNamelistFileSystem();
            WrfConfiguration config     = new WrfConfiguration();

            config.WPSNamelist = "";
            NamelistHelper.UpdateDatesInWRFNamelist(config,
                                                    new DateTime(1980, 5, 26, 1, 0, 0, 0),
                                                    new DateTime(1981, 6, 27, 2, 0, 0, 0),
                                                    fileSystem);

            string result = fileSystem.ReadFileContent("getresult");

            Assert.IsTrue(result.Contains("start_year = 1980"));
            Assert.IsTrue(result.Contains("start_month = 5"));
            Assert.IsTrue(result.Contains("start_day = 26"));
            Assert.IsTrue(result.Contains("start_hour = 1"));

            Assert.IsTrue(result.Contains("end_year = 1981"));
            Assert.IsTrue(result.Contains("end_month = 6"));
            Assert.IsTrue(result.Contains("end_day = 27"));
            Assert.IsTrue(result.Contains("end_hour = 2"));
        }
示例#4
0
        static void PrepStage(IFileSystem iFileSystem, INetwork iDownloader,
                              ILogger iLogger, IProcessLauncher iProcess, WrfConfiguration config)
        {
            iLogger.Log("Cleaning data directory...");
            FileSystemHelper.CleanDataDirectory(config, iFileSystem);
            iLogger.LogLine("...done");

            iLogger.LogLine("Downloading GFS product page...");
            string productPageContent = DownloadHelper.DownloadString(
                config.GFSProductUrl, iDownloader);

            iLogger.LogLine("...done");

            iLogger.Log("Finding GFS products to use...");

            string gfsProductDirectory = PageParsingHelper.FindDirectoryNameForLatestGFSEntry(
                productPageContent);
            string gfsProductUrl = UrlHelper.Join(config.GFSProductUrl, gfsProductDirectory);
            string pageContent   = DownloadHelper.DownloadString(
                gfsProductUrl, iDownloader);
            List <string> productsToDownload = new List <string>();

            for (;;)
            {
                productsToDownload = PageParsingHelper.FindAllGFSOneDegreePGRB2Files(pageContent);
                if (productsToDownload.Count != 93 && config.ForceLatestGFSData)
                {
                    iLogger.Log($"...forcing latest GFS data, not enough yet ({productsToDownload.Count})...");
                    Thread.Sleep(1000 * 60);
                    pageContent = DownloadHelper.DownloadString(
                        gfsProductUrl, iDownloader);
                }
                else if (productsToDownload.Count != 93 && !config.ForceLatestGFSData)
                {
                    iLogger.Log($"...falling back to previous run, incorrect asset count of...{productsToDownload.Count}");
                    gfsProductDirectory = PageParsingHelper.FindDirectoryNameForSecondToLastGFSEntry(
                        productPageContent);
                    gfsProductUrl = UrlHelper.Join(config.GFSProductUrl, gfsProductDirectory);
                    pageContent   = DownloadHelper.DownloadString(
                        gfsProductUrl, iDownloader);
                    productsToDownload =
                        PageParsingHelper.FindAllGFSOneDegreePGRB2Files(pageContent);
                    break;
                }
                else
                {
                    iLogger.Log($"...the latest is ready!...");
                    break;
                }
            }
            iLogger.LogLine($"...done. Found {productsToDownload.Count} items at {gfsProductUrl}.");

            iLogger.LogLine("Downloading the products...");
            DownloadHelper.DownloadGFSProductsToDataDirectory(gfsProductUrl, productsToDownload,
                                                              config, iDownloader, iLogger);
            iLogger.LogLine("...done");

            iLogger.LogLine("Cleaning intermediary files before run...");
            FileSystemHelper.RemoveTempFilesInWPSDirectory(config, iFileSystem, iLogger);
            FileSystemHelper.RemoveTempFilesInWRFDirectory(config, iFileSystem, iLogger);
            iLogger.LogLine("...done");

            iLogger.LogLine("Finding first and last GFS files that were downloaded...");
            DateTime startDate, endDate;

            ProcessHelper.UseWgrib2ToFindStartAndEndDatesOnWGribFiles(config, out startDate, out endDate,
                                                                      iProcess, iFileSystem);
            iLogger.LogLine($"...done. First grib file is {startDate}, and last is {endDate}");

            iLogger.LogLine($"Updating the start/end dates in the {config.WPSNamelist} file.");
            NamelistHelper.UpdateDatesInWPSNamelist(config,
                                                    startDate, endDate, iFileSystem);
            iLogger.LogLine("...done");

            iLogger.LogLine("Updating the start/end dates in the WRF namelist.config file.");
            NamelistHelper.UpdateDatesInWRFNamelist(config,
                                                    startDate, endDate, iFileSystem);
            iLogger.LogLine("...done");

            iLogger.LogLine("Setting current working directory to WPS directory...");
            FileSystemHelper.SetCurrentDirectoryToWPSDirectory(config, iFileSystem);
            iLogger.LogLine("...done");

            iLogger.LogLine("Launching geogrid.exe");
            ProcessHelper.UseGeogridToProcessTerrestrialData(config, iProcess);
            iLogger.LogLine("...done");

            iLogger.LogLine("Setting up symlinks through CSH script...");
            ProcessHelper.UseLinkGribToCreateSymbolicLinks(config, iProcess);
            iLogger.LogLine("...done");

            iLogger.LogLine("Using ungrib to unpackage GRIB files....");
            ProcessHelper.UseUngribToUnpackageGRIBFiles(config, iProcess);
            iLogger.LogLine("...done");

            iLogger.LogLine("Use metrgrid to horizontally interpolate data...");
            ProcessHelper.UseMetgridToHorizontallyInterpolateData(config, iProcess);
            iLogger.LogLine("...done");

            iLogger.LogLine("Creating symlinks in Real directory...");
            FileSystemHelper.CreateMetEmSymlinksInRealDirectory(config, iFileSystem);
            iLogger.LogLine("...done");
        }