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); } }
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'")); }
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")); }
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"); }