public void CreateEmSymlinks() { WrfConfiguration config = new WrfConfiguration(); config.WPSDirectory = "/home/brush/Downloads/wrf/WPS"; config.WRFDirectory = "/home/brush/Downloads/wrf/WRFV3/test/em_real"; MockWPSFileSystemWithMetEmFiles fs = new MockWPSFileSystemWithMetEmFiles(); FileSystemHelper.CreateMetEmSymlinksInRealDirectory(config, fs); Assert.AreEqual(129, fs.SymLinksCreated.Count); foreach (string symlink in fs.SymLinksCreated) { Assert.IsTrue(symlink.Contains("met_em")); } return; }
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"); }