Exemple #1
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"));
        }
Exemple #2
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");
        }