internal static void GenerateControlFiles(string destinationFilePath, DateTime startDate, DateTime endDate, byte timeStep, UEBPackageRequest uebPkgRequest) { TimeSeriesFiles timeSeriesFiles = new TimeSeriesFiles(); //TODO: check the destinationFilePath exists // destinationFilePath value should be E:\CIWaterData\Temp when testing on localhost if (Directory.Exists(destinationFilePath) == false) { string errMsg = destinationFilePath + " was not found for creating UEB control files."; _logger.Error(errMsg); throw new Exception(errMsg); } try { //create the Overallcontrol.dat file CreateOverallControlFile(destinationFilePath, uebPkgRequest); //create the param.dat file //CreateParameterFile(destinationFilePath); //create the siteinital.dat file CreateSiteInitialFile(destinationFilePath, uebPkgRequest); //create the inputcontrol.dat file CreateInputControlFile(destinationFilePath, uebPkgRequest, timeSeriesFiles); //create the netCDFFileList.dat file //CreateNetCCDFFileListFile(destinationFilePath); // due to format change as suggested by Tseganeh // create dat files listing each of the timeseries netcdf files CreateNetCDFTimeSeriesListFiles(destinationFilePath, uebPkgRequest, timeSeriesFiles); //create the outputcontrol.dat file //CreateOutputControlFile(destinationFilePath); //create the aggregatedoutputcontrol.dat file //CreateAggregatedOutputControlFile(destinationFilePath); } catch (Exception ex) { string errMsg = "Failed to create UEB control files.\n"; errMsg += ex.Message; _logger.Fatal(errMsg); throw new Exception(errMsg); } }
private HttpResponseMessage CreateUEBpackageZipFile(string packageID, DateTime startDate, DateTime endDate, byte timeStep, UEBPackageRequest uebPkgRequest) { HttpResponseMessage response = new HttpResponseMessage(); try { if (Directory.Exists(_sourceFilePath) == false) { string errMsg = string.Format("UEB package source file path ({0}) doesn't exist.", _sourceFilePath); logger.Error(errMsg); response.StatusCode = HttpStatusCode.NotFound; response.Content = new StringContent(errMsg); return response; } else if (Directory.GetFiles(_sourceFilePath).Length == 0) { string errMsg = string.Format("There are no files to be zipped in the specified directory ({0}).", _sourceFilePath); logger.Error(errMsg); response.StatusCode = HttpStatusCode.NotFound; response.Content = new StringContent(errMsg); return response; } if (Directory.Exists(_targetPackageDirPath) == false) { Directory.CreateDirectory(_targetPackageDirPath); } if (Directory.Exists(_targetTempPackageFilePath) == false) { Directory.CreateDirectory(_targetTempPackageFilePath); } else { DirectoryInfo dir = new DirectoryInfo(_targetTempPackageFilePath); dir.Delete(true); Directory.CreateDirectory(_targetTempPackageFilePath); // create the model output sub directory if necessary SetModelOutputFolder(uebPkgRequest); if (string.IsNullOrEmpty(uebPkgRequest.OutputFolderName) == false) { string modeOutputSubDir = Path.Combine(_targetTempPackageFilePath, uebPkgRequest.OutputFolderName); Directory.CreateDirectory(modeOutputSubDir); } } // create the control files (.dat files) UEBFileManager.GenerateControlFiles(_sourceFilePath, startDate, endDate, timeStep, uebPkgRequest); // copy selected files from the source dir to the temp package dir DirectoryInfo sourceFilesDir = new DirectoryInfo(_sourceFilePath); string[] files = Directory.GetFiles(_sourceFilePath); string fileName = string.Empty; string destFile = string.Empty; foreach (string file in files) { if (Path.GetExtension(file) == ".nc" || Path.GetExtension(file) == ".dat") { // Use static Path methods to extract only the file name from the path. fileName = Path.GetFileName(file); destFile = Path.Combine(_targetTempPackageFilePath, fileName); // Copy the file and overwrite destination file if they already exist. File.Copy(file, destFile, true); // delete the file at the source directory File.Delete(file); } } //create a zip file of all files that are part of the model package string zipUEBPackage = Path.Combine(_targetPackageDirPath, _packageZipFileName); if (File.Exists(zipUEBPackage)) { File.Delete(zipUEBPackage); } ZipFile.CreateFromDirectory(_targetTempPackageFilePath, zipUEBPackage); } catch (Exception ex) { logger.Fatal(ex.Message); response.StatusCode = HttpStatusCode.InternalServerError; response.Content = new StringContent(ex.Message); return response; } string msg = "UEB package creation was successful for job id:" + packageID; logger.Info(msg); response.StatusCode = HttpStatusCode.OK; response.Content = new StringContent(msg); return response; }
private void SetModelOutputFolder(UEBPackageRequest uebPkgRequest) { // TODO: see PK Weekly progress folder in onenote for date5/23/2013 // the requirements for retrieving folder (inclding subfolder name) for each of the // file specified in the outputcontrol file // The following logic at this point gets the folder name from the first file specfied it ouputcontrol file // and is also not getting any subfolders string outputControlFile = Path.Combine(_clientPackageRequestDirPath, uebPkgRequest.OutputControlFileName); string data = string.Empty; int fileLineCount = 0; char[] splitChar = new char[] { '\\' }; using (StreamReader sr = new StreamReader(outputControlFile)) { while (sr.EndOfStream == false) { fileLineCount++; data = sr.ReadLine(); if (fileLineCount == 3) { string[] splitStrings = data.Split(splitChar); if (splitStrings.Length > 0) { uebPkgRequest.OutputFolderName = splitStrings[0]; } break; } } } }
private string ValidateUEBPackageRequest(UEBPackageRequest uebPkgRequest) { bool isInputError = false; // validate simulation start and end dates StringBuilder errMsg = new StringBuilder("Invalid UEB Build Request:"); errMsg.AppendLine(); if (uebPkgRequest.StartDate > uebPkgRequest.EndDate) { errMsg.AppendLine("Simulation end date needs to be a date after start date."); isInputError = true; } List<byte> validTimeStepValues = new List<byte> { 1, 2, 3, 4, 6 }; // validate timeStep if (validTimeStepValues.Contains(uebPkgRequest.TimeStep) == false) { errMsg.AppendLine("Time step needs to be one of the following values:"); errMsg.AppendLine("1, 2, 3, 4, 6"); isInputError = true; } // validate grid cell size if (uebPkgRequest.GridCellSize < 100) { errMsg.AppendLine("Grid cell size must be at least 100 meters."); isInputError = true; } // validate watershed buffer size if (uebPkgRequest.BufferSize < 100) { errMsg.AppendLine("Watershed buffer size must be at least 100 meters."); isInputError = true; } // check the domain file exists if(string.IsNullOrEmpty(uebPkgRequest.DomainFileName)) { errMsg.AppendLine("Domain file is missing in the request."); isInputError = true; } else { string domainFile = Path.Combine(_clientPackageRequestDirPath, uebPkgRequest.DomainFileName); if (File.Exists(domainFile) == false) { errMsg.AppendLine("Domain file is missing in the request."); isInputError = true; } } // check the parameters file exists if (string.IsNullOrEmpty(uebPkgRequest.ModelParametersFileName)) { errMsg.AppendLine("Model parameters file is missing in the request."); isInputError = true; } else { string paramFile = Path.Combine(_clientPackageRequestDirPath, uebPkgRequest.ModelParametersFileName); if (File.Exists(paramFile) == false) { errMsg.AppendLine("Model parameters file is missing in the request."); isInputError = true; } } // check the output control file exists if (string.IsNullOrEmpty(uebPkgRequest.OutputControlFileName)) { errMsg.AppendLine("Output control file is missing in the request."); isInputError = true; } else { string outputControlFile = Path.Combine(_clientPackageRequestDirPath, uebPkgRequest.OutputControlFileName); if (File.Exists(outputControlFile) == false) { errMsg.AppendLine("Output control file is missing in the request."); isInputError = true; } } // check the aggregated output control file exists if (string.IsNullOrEmpty(uebPkgRequest.AggregatedOutputControlFileName)) { errMsg.AppendLine("Aggregated output control file is missing in the request."); isInputError = true; } else { string aggOutputControlFile = Path.Combine(_clientPackageRequestDirPath, uebPkgRequest.AggregatedOutputControlFileName); if (File.Exists(aggOutputControlFile) == false) { errMsg.AppendLine("Aggregated output control file is missing in the request."); isInputError = true; } } if (isInputError) { return errMsg.ToString(); } else { return string.Empty; } }
//string destFiePath, DateTime startDate, DateTime endDate, byte timeStep, UEBPackageRequest uebPkgRequest private static void CreateInputControlFile(string destFiePath, UEBPackageRequest uebPkgRequest, TimeSeriesFiles timeSeriesFiles) { // TODO: remove magic strings used in this method //create the inputcontrol.dat file string fileName = "inputcontrol.dat"; string fileToWriteTo = Path.Combine(destFiePath, fileName); DateTime startDate = uebPkgRequest.StartDate; DateTime endDate = uebPkgRequest.EndDate; byte timeStep = uebPkgRequest.TimeStep; using (StreamWriter sw = new StreamWriter(fileToWriteTo)) { sw.WriteLine("Input Control file"); string dateFormat = "yyyy MM dd hh.mm"; sw.WriteLine(startDate.ToString(dateFormat)); // yyyy mm dd hh.mm (starting Date) sw.WriteLine(endDate.ToString(dateFormat)); // yyyy mm dd hh.mm (ending Date) sw.WriteLine(timeStep); // time step //TODO: Check how can we avoid hard coding this UTC time offset value sw.WriteLine("6.00"); // UTC time offset sw.WriteLine("Ta: Air temperature (always required)"); if (uebPkgRequest.TimeSeriesInputs.is_ta_compute) { sw.WriteLine("1"); // variable flag value for SCTC type variable sw.WriteLine("Talist.dat;X:x;Y:y;time:time;D:T;range:-20,40"); // this is the new format suggested by Tseganeh timeSeriesFiles.TaFileName = "Talist.dat"; } else if(uebPkgRequest.TimeSeriesInputs.is_ta_constant) { sw.WriteLine("2"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.TimeSeriesInputs.ta_constant_value); // value of ta variable } else if (uebPkgRequest.TimeSeriesInputs.ta_grid_file_name.EndsWith(".nc")) { sw.WriteLine("1"); // variable flag value for SCTC type variable sw.WriteLine("Talist.dat;" + uebPkgRequest.TimeSeriesInputs.ta_grid_file_format + ";range:-20,40"); timeSeriesFiles.TaFileName = "Talist.dat"; } else if(string.IsNullOrEmpty(uebPkgRequest.TimeSeriesInputs.ta_text_file_name) == false) { sw.WriteLine("0"); // variable flag value for SCTC type variable sw.Write(uebPkgRequest.TimeSeriesInputs.ta_text_file_name); } sw.WriteLine("Prec: Precipitation (always required)"); if (uebPkgRequest.TimeSeriesInputs.is_prec_compute) { sw.WriteLine("1"); // variable flag value for SCTC type variable sw.WriteLine("Preclist.dat;X:x;Y:y;time:time;D:Prec"); // this is the new format suggested by Tseganeh timeSeriesFiles.PrecFileName = "Preclist.dat"; } else if (uebPkgRequest.TimeSeriesInputs.is_prec_constant) { sw.WriteLine("2"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.TimeSeriesInputs.prec_constant_value); // value of prec variable } else if (uebPkgRequest.TimeSeriesInputs.prec_grid_file_name.EndsWith(".nc")) { sw.WriteLine("1"); // variable flag value for SCTC type variable sw.WriteLine("Preclist.dat;" + uebPkgRequest.TimeSeriesInputs.prec_grid_file_format); timeSeriesFiles.PrecFileName = "Preclist.dat"; } else if (string.IsNullOrEmpty(uebPkgRequest.TimeSeriesInputs.prec_text_file_name) == false) { sw.WriteLine("0"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.TimeSeriesInputs.prec_text_file_name); } sw.WriteLine("v: Wind speed (always required)"); if (uebPkgRequest.TimeSeriesInputs.is_v_compute) { sw.WriteLine("1"); // variable flag value for SCTC type variable sw.WriteLine("Vlist.dat;X:x;Y:y;time:time;D:V"); // this is the new format suggested by Tseganeh timeSeriesFiles.VFileName = "Vlist.dat"; } else if (uebPkgRequest.TimeSeriesInputs.is_v_constant) { sw.WriteLine("2"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.TimeSeriesInputs.v_constant_value); // value of v variable } else if (uebPkgRequest.TimeSeriesInputs.v_grid_file_name.EndsWith(".nc")) { sw.WriteLine("1"); // variable flag value for SCTC type variable sw.WriteLine("Vlist.dat;" + uebPkgRequest.TimeSeriesInputs.v_grid_file_format); timeSeriesFiles.VFileName = "Vlist.dat"; } else if (string.IsNullOrEmpty(uebPkgRequest.TimeSeriesInputs.v_text_file_name) == false) { sw.WriteLine("0"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.TimeSeriesInputs.v_text_file_name); } sw.WriteLine("RH: Relative humidity (always required)"); if (uebPkgRequest.TimeSeriesInputs.is_rh_compute) { sw.WriteLine("1"); // variable flag value for SCTC type variable sw.WriteLine("RHlist.dat;X:x;Y:y;time:time;D:rh"); // this is the new format suggested by Tseganeh timeSeriesFiles.RhFileName = "RHlist.dat"; } else if (uebPkgRequest.TimeSeriesInputs.is_rh_constant) { sw.WriteLine("2"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.TimeSeriesInputs.rh_constant_value); // value of rh variable } else if (uebPkgRequest.TimeSeriesInputs.rh_grid_file_name.EndsWith(".nc")) { sw.WriteLine("1"); // variable flag value for SCTC type variable sw.WriteLine("RHlist.dat;" + uebPkgRequest.TimeSeriesInputs.rh_grid_file_format); // this is the new format suggested by Tseganeh timeSeriesFiles.RhFileName = "RHlist.dat"; } else if (string.IsNullOrEmpty(uebPkgRequest.TimeSeriesInputs.rh_text_file_name) == false) { sw.WriteLine("0"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.TimeSeriesInputs.rh_text_file_name); } if (uebPkgRequest.TimeSeriesInputs.is_snowalb_compute == false) { if (uebPkgRequest.TimeSeriesInputs.is_snowalb_constant) { sw.WriteLine("Snowalb: Snow albedo (0-1). (only required if ireadalb=1) The albedo of the snow surface to be used when the internal albedo calculations are to be overridden"); sw.WriteLine("2"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.TimeSeriesInputs.snowalb_constant_value); } else if (uebPkgRequest.TimeSeriesInputs.snowalb_grid_file_name.EndsWith(".nc")) { sw.WriteLine("1"); // variable flag value for SCTC type variable sw.WriteLine("Snowalblist.dat;" + uebPkgRequest.TimeSeriesInputs.snowalb_grid_file_format); // this is the new format suggested by Tseganeh timeSeriesFiles.SnowalbFileName = "Snowalblist.dat"; } else if (string.IsNullOrEmpty(uebPkgRequest.TimeSeriesInputs.snowalb_text_file_name) == false) { sw.WriteLine("0"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.TimeSeriesInputs.snowalb_text_file_name); } } if (uebPkgRequest.TimeSeriesInputs.is_qg_constant) { sw.WriteLine("Qg: : Ground heat flux (kJ/m2/hr)"); sw.WriteLine("2"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.TimeSeriesInputs.qg_constant_value); } else if (uebPkgRequest.TimeSeriesInputs.qg_grid_file_name.EndsWith(".nc")) { sw.WriteLine("1"); // variable flag value for SCTC type variable sw.WriteLine("Qglist.dat;" + uebPkgRequest.TimeSeriesInputs.snowalb_grid_file_format); // this is the new format suggested by Tseganeh timeSeriesFiles.QgFileName = "Qglist.dat"; } else if (string.IsNullOrEmpty(uebPkgRequest.TimeSeriesInputs.qg_text_file_name) == false) { sw.WriteLine("0"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.TimeSeriesInputs.qg_text_file_name); } } _logger.Info(fileName + " file was created."); }
private static void CreateSiteInitialFile(string destFiePath, UEBPackageRequest uebPkgRequest) { // TODO: remove magic strings used in this method //first read the atmos pressure value from the text file string fileName = UEB.UEBSettings.WATERSHED_ATMOSPHERIC_PRESSURE_FILE_NAME; // "ws_atom_pres.txt"; float atomPresValue; string fileToReadFrom =Path.Combine(destFiePath, fileName); using (StreamReader sr = new StreamReader(fileToReadFrom)) { //read the one line of text in this file string data = sr.ReadLine(); bool success = float.TryParse(data, out atomPresValue); if (success == false) { atomPresValue = 74051; // default value } } fileName = "siteinitial.dat"; string fileToWriteTo = Path.Combine(destFiePath, fileName); using (StreamWriter sw = new StreamWriter(fileToWriteTo)) { sw.WriteLine("Site and Initial Condition Input Variables"); sw.WriteLine("USic: Energy content initial condition (kg m-3)"); if (uebPkgRequest.SiteInitialConditions.is_usic_constant) { sw.WriteLine("0"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.SiteInitialConditions.usic_constant_value); } else { sw.WriteLine("1"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.SiteInitialConditions.usic_grid_file_name + ";" + uebPkgRequest.SiteInitialConditions.usic_grid_file_format); } sw.WriteLine("WSis: Snow water equivalent initial condition (m)"); if (uebPkgRequest.SiteInitialConditions.is_wsis_constant) { sw.WriteLine("0"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.SiteInitialConditions.wsis_constant_value); } else { sw.WriteLine("1"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.SiteInitialConditions.wsis_grid_file_name + ";" + uebPkgRequest.SiteInitialConditions.wsis_grid_file_format); } sw.WriteLine("Tic: Surface dimensionless age initial condition"); if (uebPkgRequest.SiteInitialConditions.is_tic_constant) { sw.WriteLine("0"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.SiteInitialConditions.tic_constant_value); } else { sw.WriteLine("1"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.SiteInitialConditions.tic_grid_file_name + ";" + uebPkgRequest.SiteInitialConditions.tic_grid_file_format); } sw.WriteLine("WCic: Snow water equivalent dimensionless age initial condition (m) "); if (uebPkgRequest.SiteInitialConditions.is_wcic_constant) { sw.WriteLine("0"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.SiteInitialConditions.wcic_constant_value); } else { sw.WriteLine("1"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.SiteInitialConditions.wcic_grid_file_name + ";" + uebPkgRequest.SiteInitialConditions.wcic_grid_file_format); } sw.WriteLine("df: Drift factor multiplier"); if (uebPkgRequest.SiteInitialConditions.is_df_constant) { sw.WriteLine("0"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.SiteInitialConditions.df_constant_value); } else { sw.WriteLine("1"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.SiteInitialConditions.df_grid_file_name + ";" + uebPkgRequest.SiteInitialConditions.df_grid_file_format); } sw.WriteLine("apr: Average atmospheric pressure"); if (uebPkgRequest.SiteInitialConditions.is_apr_derive_from_elevation) { sw.WriteLine("0"); // variable flag value for SCTC type variable sw.WriteLine(atomPresValue); } else if(uebPkgRequest.SiteInitialConditions.is_apr_constant) { sw.WriteLine("0"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.SiteInitialConditions.apr_constant_value); } else { sw.WriteLine("1"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.SiteInitialConditions.apr_grid_file_name + ";" + uebPkgRequest.SiteInitialConditions.apr_grid_file_format); } sw.WriteLine("Aep: Albedo extinction coefficient"); if (uebPkgRequest.SiteInitialConditions.is_aep_constant) { sw.WriteLine("0"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.SiteInitialConditions.aep_constant_value); } else { sw.WriteLine("1"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.SiteInitialConditions.aep_grid_file_name + ";" + uebPkgRequest.SiteInitialConditions.aep_grid_file_format); } sw.WriteLine("cc: Canopy coverage fraction"); if (uebPkgRequest.SiteInitialConditions.is_cc_derive_from_NLCD) { sw.WriteLine("1"); // variable flag value for SVTC type variable sw.WriteLine(UEB.UEBSettings.WATERSHED_NLCD_CC_NETCDF_FILE_NAME + ";X:x;Y:y;D:cc"); //netcdf file taht contains data for cc } else if (uebPkgRequest.SiteInitialConditions.is_cc_constant) { sw.WriteLine("0"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.SiteInitialConditions.cc_constant_value); } else { sw.WriteLine("1"); // variable flag value for SVTC type variable sw.WriteLine(uebPkgRequest.SiteInitialConditions.cc_grid_file_name + ";" + uebPkgRequest.SiteInitialConditions.cc_grid_file_format); } sw.WriteLine("hcan: Canopy height"); if (uebPkgRequest.SiteInitialConditions.is_hcan_derive_from_NLCD) { sw.WriteLine("1"); // variable flag value for SVTC type variable sw.WriteLine(UEB.UEBSettings.WATERSHED_NLCD_HC_NETCDF_FILE_NAME + ";X:x;Y:y;D:hcan"); //netcdf file that contains data for hcan } else if (uebPkgRequest.SiteInitialConditions.is_hcan_constant) { sw.WriteLine("0"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.SiteInitialConditions.hcan_constant_value); } else { sw.WriteLine("1"); // variable flag value for SVTC type variable sw.WriteLine(uebPkgRequest.SiteInitialConditions.hcan_grid_file_name + ";" + uebPkgRequest.SiteInitialConditions.hcan_grid_file_format); } sw.WriteLine("lai: Leaf area index"); if (uebPkgRequest.SiteInitialConditions.is_lai_derive_from_NLCD) { sw.WriteLine("1"); // variable flag value for SVTC type variable sw.WriteLine(UEB.UEBSettings.WATERSHED_NLCD_LAI_NETCDF_FILE_NAME + ";X:x;Y:y;D:lai"); //netcdf file that contains data for lai } else if (uebPkgRequest.SiteInitialConditions.is_lai_constant) { sw.WriteLine("0"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.SiteInitialConditions.lai_constant_value); } else { sw.WriteLine("1"); // variable flag value for SVTC type variable sw.WriteLine(uebPkgRequest.SiteInitialConditions.lai_grid_file_name + ";" + uebPkgRequest.SiteInitialConditions.lai_grid_file_format); } sw.WriteLine("ycage: Forest age flag for wind speed profile parameterization"); if (uebPkgRequest.SiteInitialConditions.is_ycage_derive_from_NLCD) { sw.WriteLine("1"); // variable flag value for SVTC type variable sw.WriteLine(UEB.UEBSettings.WATERSHED_NLCD_YCAGE_NETCDF_FILE_NAME + ";X:x;Y:y;D:ycage"); //netcdf file that contains data for ycage } else if (uebPkgRequest.SiteInitialConditions.is_ycage_constant) { sw.WriteLine("0"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.SiteInitialConditions.ycage_constant_value); } else { sw.WriteLine("1"); // variable flag value for SVTC type variable sw.WriteLine(uebPkgRequest.SiteInitialConditions.ycage_grid_file_name + ";" + uebPkgRequest.SiteInitialConditions.ycage_grid_file_format); } sw.WriteLine("Sbar: Maximum snow load held per unit branch area"); if (uebPkgRequest.SiteInitialConditions.is_sbar_constant) { sw.WriteLine("0"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.SiteInitialConditions.sbar_constant_value); } else { sw.WriteLine("1"); // variable flag value for SVTC type variable sw.WriteLine(uebPkgRequest.SiteInitialConditions.sbar_grid_file_name + ";" + uebPkgRequest.SiteInitialConditions.sbar_grid_file_format); } sw.WriteLine("slope: A 2-D grid that contains the slope at each grid point"); if (uebPkgRequest.SiteInitialConditions.is_slope_derive_from_elevation) { sw.WriteLine("1"); // variable flag value for SVTC type variable sw.WriteLine(UEB.UEBSettings.WATERSHED_SLOPE_NETCDF_FILE_NAME + ";X:x;Y:y;D:slope"); //netcdf file that contains data for slope } else if (uebPkgRequest.SiteInitialConditions.is_slope_constant) { sw.WriteLine("0"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.SiteInitialConditions.slope_constant_value); } else { sw.WriteLine("1"); // variable flag value for SVTC type variable sw.WriteLine(uebPkgRequest.SiteInitialConditions.slope_grid_file_name + ";" + uebPkgRequest.SiteInitialConditions.slope_grid_file_format); } sw.WriteLine("aspect: A 2-D grid that contains the aspect at each grid point"); if (uebPkgRequest.SiteInitialConditions.is_aspect_derive_from_elevation) { sw.WriteLine("1"); // variable flag value for SVTC type variable sw.WriteLine(UEB.UEBSettings.WATERSHED_ASPECT_NETCDF_FILE_NAME + ";X:x;Y:y;D:aspect"); //netcdf file that contains data for aspect } else if (uebPkgRequest.SiteInitialConditions.is_aspect_constant) { sw.WriteLine("0"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.SiteInitialConditions.aspect_constant_value); } else { sw.WriteLine("1"); // variable flag value for SVTC type variable sw.WriteLine(uebPkgRequest.SiteInitialConditions.aspect_grid_file_name + ";" + uebPkgRequest.SiteInitialConditions.aspect_grid_file_format); } if (uebPkgRequest.SiteInitialConditions.is_latitude_derive_from_projection) { // There may not be lat gridded file in which case there // would be ws-lat.txt file that contains a single value for the whole ws grid // so we need to process that and write to the file in three line format with // variable type = 0 fileName = UEB.UEBSettings.WATERSHED_LATITUDE_FILE_NAME_WITHOUT_EXTENSION + ".nc"; string fileToCheck = destFiePath + @"\" + fileName; if (File.Exists(fileToCheck)) { sw.WriteLine("latitude: A 2-D grid that contains the latitude at each grid point"); sw.WriteLine("1"); // variable flag value for SVTC type variable sw.WriteLine(fileName + ";X:x;Y:y;D:latitude"); //netcdf file that contains data for latitude } else { fileName = "lat.txt"; fileToReadFrom = destFiePath + @"\" + fileName; string data = GetSingleDataValueInFile(fileToReadFrom); float latitude; bool success = float.TryParse(data, out latitude); if (!success) { string errMsg = "No valid latitude data for the watershed was found: " + data; _logger.Fatal("errMsg"); throw new Exception(errMsg); } else { sw.WriteLine("latitude: Latidue of the watershed at grid mid point"); sw.WriteLine("0"); // variable flag value for SCTC type variable sw.WriteLine(latitude); // value of latitude variable } } } else if (uebPkgRequest.SiteInitialConditions.is_latitude_constant) { sw.WriteLine("0"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.SiteInitialConditions.latitude_constant_value); } else { sw.WriteLine("1"); // variable flag value for SVTC type variable sw.WriteLine(uebPkgRequest.SiteInitialConditions.latitude_grid_file_name + ";" + uebPkgRequest.SiteInitialConditions.latitude_grid_file_format); } sw.WriteLine("subalb: Albedo (fraction 0-1) of the substrate beneath the snow (ground, or glacier)"); if (uebPkgRequest.SiteInitialConditions.is_subalb_constant) { sw.WriteLine("0"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.SiteInitialConditions.subalb_constant_value); } else { sw.WriteLine("1"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.SiteInitialConditions.subalb_grid_file_name + ";" + uebPkgRequest.SiteInitialConditions.subalb_grid_file_format); } sw.WriteLine("subtype: Type of beneath snow substrate encoded as (0 = Ground/Non Glacier, 1=Clean Ice/glacier, 2= Debris covered ice/glacier, 3= Glacier snow accumulation zone)"); if (uebPkgRequest.SiteInitialConditions.is_subtype_constant) { sw.WriteLine("0"); // variable flag value for SCTC type variable //sw.WriteLine("0"); //default value, later need to get this value form a user uploaded siteinitial input file sw.WriteLine(uebPkgRequest.SiteInitialConditions.subtype_constant_value); } else { sw.WriteLine("1"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.SiteInitialConditions.subtype_grid_file_name + ";" + uebPkgRequest.SiteInitialConditions.subtype_grid_file_format); } sw.WriteLine("gsurf: The fraction of surface melt that runs off (e.g. from a glacier)"); if (uebPkgRequest.SiteInitialConditions.is_gsurf_constant) { sw.WriteLine("0"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.SiteInitialConditions.gsurf_constant_value); } else { sw.WriteLine("1"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.SiteInitialConditions.gsurf_grid_file_name + ";" + uebPkgRequest.SiteInitialConditions.gsurf_grid_file_format); } sw.WriteLine("b01: Bristow-Campbell B for January (1)"); sw.WriteLine("0"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.BristowCambellBValues.b01); sw.WriteLine("b02: Bristow-Campbell B for Feb (2)"); sw.WriteLine("0"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.BristowCambellBValues.b02); sw.WriteLine("b03: Bristow-Campbell B for Mar (3)"); sw.WriteLine("0"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.BristowCambellBValues.b03); sw.WriteLine("b04: Bristow-Campbell B for Apr (4)"); sw.WriteLine("0"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.BristowCambellBValues.b04); sw.WriteLine("b05: Bristow-Campbell B for May (5)"); sw.WriteLine("0"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.BristowCambellBValues.b05); sw.WriteLine("b06: Bristow-Campbell B for June (6)"); sw.WriteLine("0"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.BristowCambellBValues.b06); sw.WriteLine("b07: Bristow-Campbell B for July (7)"); sw.WriteLine("0"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.BristowCambellBValues.b07); sw.WriteLine("b08: Bristow-Campbell B for Aug (8)"); sw.WriteLine("0"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.BristowCambellBValues.b08); sw.WriteLine("b09: Bristow-Campbell B for Sep (9)"); sw.WriteLine("0"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.BristowCambellBValues.b09); sw.WriteLine("b10: Bristow-Campbell B for Oct (10)"); sw.WriteLine("0"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.BristowCambellBValues.b10); sw.WriteLine("b11: Bristow-Campbell B for Nov (11)"); sw.WriteLine("0"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.BristowCambellBValues.b11); sw.WriteLine("b12: Bristow-Campbell B for Dec (12)"); sw.WriteLine("0"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.BristowCambellBValues.b12); sw.WriteLine("ts_last: degree celcius"); sw.WriteLine("0"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.SiteInitialConditions.ts_last_constant_value); if (uebPkgRequest.SiteInitialConditions.is_longitude_derive_from_projection) { // there may not be lon gridded file in which case there // would be ws-lon.txt file that contains a single value for the whole ws grid // so we need to process that and write to the file in three line format with // variable type = 0 fileName = UEB.UEBSettings.WATERSHED_LONGITIDUE_FILE_NAME_WITHOUT_EXTENSION + ".nc"; string fileToCheck = Path.Combine(destFiePath, fileName); if (File.Exists(fileToCheck)) { sw.WriteLine("longitude: A 2-D grid that contains the longitude at each grid point"); sw.WriteLine("1"); // variable flag value for SVTC type variable sw.WriteLine(fileName + ";X:x;Y:y;D:longitude"); //netcdf file that contains data for lon } else { fileName = "lon.txt"; fileToReadFrom = Path.Combine(destFiePath, fileName); string data = GetSingleDataValueInFile(fileToReadFrom); float longitidue; bool success = float.TryParse(data, out longitidue); if (!success) { string errMsg = "No valid longitidue data for the watershed was found: " + data; _logger.Fatal("errMsg"); throw new Exception(errMsg); } else { sw.WriteLine("longitidue: Longitidue of the watershed at grid mid point"); sw.WriteLine("0"); // variable flag value for SCTC type variable sw.WriteLine(longitidue); // value of latitude variable } } } else if (uebPkgRequest.SiteInitialConditions.is_longitude_constant) { sw.WriteLine("0"); // variable flag value for SCTC type variable sw.WriteLine(uebPkgRequest.SiteInitialConditions.longitude_constant_value); } else { sw.WriteLine("1"); // variable flag value for SVTC type variable sw.WriteLine(uebPkgRequest.SiteInitialConditions.longitude_grid_file_name + uebPkgRequest.SiteInitialConditions.longitude_grid_file_format); } } _logger.Info(fileName + " file was created."); }
private static void CreateOverallControlFile(string destFiePath, UEBPackageRequest uebPkgrequest) { // TODO: remove magic strings used in thei method string fileName = "Overallcontrol.dat"; string fileToWriteTo = Path.Combine(destFiePath, fileName); using (StreamWriter sw = new StreamWriter(fileToWriteTo)) { sw.WriteLine("UEBGrid Model Driver"); sw.WriteLine(uebPkgrequest.ModelParametersFileName); sw.WriteLine("siteinitial.dat"); sw.WriteLine("inputcontrol.dat"); sw.WriteLine(uebPkgrequest.OutputControlFileName); if (uebPkgrequest.DomainFileName.EndsWith(".nc")) { sw.WriteLine(uebPkgrequest.DomainFileName + ";" + uebPkgrequest.DomainGridFileFormat); } else { sw.WriteLine(UEB.UEBSettings.WATERSHED_NETCDF_FILE_NAME + ";X:x;Y:y;D:watershed"); // this file is part of the UEB pacakge creation } sw.WriteLine(uebPkgrequest.AggregatedOutputControlFileName); sw.WriteLine(UEB.UEBSettings.MODEL_OUTPUT_FOLDER_NAME + @"\AggregatedOutput.dat"); // this is where the UEB output will be written. no need for us to generate this file } _logger.Info(fileName + " file was created."); }
private static void CreateNetCDFTimeSeriesListFiles(string destFiePath, UEBPackageRequest uebPkgRequest, TimeSeriesFiles timeSeriesFiles) { string fileToWriteTo = string.Empty; if (string.IsNullOrEmpty(timeSeriesFiles.TaFileName) == false) { fileToWriteTo = Path.Combine(destFiePath, timeSeriesFiles.TaFileName); using (StreamWriter sw = new StreamWriter(fileToWriteTo)) { if (uebPkgRequest.TimeSeriesInputs.is_ta_compute) { sw.WriteLine(UEB.UEBSettings.WATERSHED_MULTIPLE_TEMP_NETCDF_FILE_NAME); } else if (uebPkgRequest.TimeSeriesInputs.ta_grid_file_name.EndsWith(".nc")) { sw.WriteLine(uebPkgRequest.TimeSeriesInputs.ta_grid_file_name); } else if (string.IsNullOrEmpty(uebPkgRequest.TimeSeriesInputs.ta_text_file_name) == false) { sw.WriteLine(uebPkgRequest.TimeSeriesInputs.ta_text_file_name); } } _logger.Info(timeSeriesFiles.TaFileName + " file was created."); } if (string.IsNullOrEmpty(timeSeriesFiles.PrecFileName) == false) { fileToWriteTo = Path.Combine(destFiePath, timeSeriesFiles.PrecFileName); using (StreamWriter sw = new StreamWriter(fileToWriteTo)) { if (uebPkgRequest.TimeSeriesInputs.is_prec_compute) { sw.WriteLine(UEB.UEBSettings.WATERSHED_MULTIPLE_PRECP_NETCDF_FILE_NAME); } else if (uebPkgRequest.TimeSeriesInputs.prec_grid_file_name.EndsWith(".nc")) { sw.WriteLine(uebPkgRequest.TimeSeriesInputs.prec_grid_file_name); } else if (string.IsNullOrEmpty(uebPkgRequest.TimeSeriesInputs.prec_text_file_name) == false) { sw.WriteLine(uebPkgRequest.TimeSeriesInputs.prec_text_file_name); } } _logger.Info(timeSeriesFiles.PrecFileName + " file was created."); } if (string.IsNullOrEmpty(timeSeriesFiles.VFileName) == false) { fileToWriteTo = Path.Combine(destFiePath, timeSeriesFiles.VFileName); using (StreamWriter sw = new StreamWriter(fileToWriteTo)) { if (uebPkgRequest.TimeSeriesInputs.is_v_compute) { sw.WriteLine(UEB.UEBSettings.WATERSHED_MULTIPLE_WIND_NETCDF_FILE_NAME); } else if (uebPkgRequest.TimeSeriesInputs.v_grid_file_name.EndsWith(".nc")) { sw.WriteLine(uebPkgRequest.TimeSeriesInputs.v_grid_file_name); } else if (string.IsNullOrEmpty(uebPkgRequest.TimeSeriesInputs.v_text_file_name) == false) { sw.WriteLine(uebPkgRequest.TimeSeriesInputs.v_text_file_name); } } _logger.Info(timeSeriesFiles.VFileName + " file was created."); } if (string.IsNullOrEmpty(timeSeriesFiles.RhFileName) == false) { fileToWriteTo = Path.Combine(destFiePath, timeSeriesFiles.RhFileName); using (StreamWriter sw = new StreamWriter(fileToWriteTo)) { if (uebPkgRequest.TimeSeriesInputs.is_rh_compute) { sw.WriteLine(UEB.UEBSettings.WATERSHED_MULTIPLE_RH_NETCDF_FILE_NAME); } else if (uebPkgRequest.TimeSeriesInputs.rh_grid_file_name.EndsWith(".nc")) { sw.WriteLine(uebPkgRequest.TimeSeriesInputs.rh_grid_file_name); } else if (string.IsNullOrEmpty(uebPkgRequest.TimeSeriesInputs.rh_text_file_name) == false) { sw.WriteLine(uebPkgRequest.TimeSeriesInputs.rh_text_file_name); } } _logger.Info(timeSeriesFiles.RhFileName + " file was created."); } if (string.IsNullOrEmpty(timeSeriesFiles.SnowalbFileName) == false) { fileToWriteTo = Path.Combine(destFiePath, timeSeriesFiles.SnowalbFileName); using (StreamWriter sw = new StreamWriter(fileToWriteTo)) { if (uebPkgRequest.TimeSeriesInputs.snowalb_grid_file_name.EndsWith(".nc")) { sw.WriteLine(uebPkgRequest.TimeSeriesInputs.snowalb_grid_file_name); } else if (string.IsNullOrEmpty(uebPkgRequest.TimeSeriesInputs.snowalb_text_file_name) == false) { sw.WriteLine(uebPkgRequest.TimeSeriesInputs.snowalb_text_file_name); } } _logger.Info(timeSeriesFiles.SnowalbFileName + " file was created."); } if (string.IsNullOrEmpty(timeSeriesFiles.QgFileName) == false) { fileToWriteTo = Path.Combine(destFiePath, timeSeriesFiles.QgFileName); using (StreamWriter sw = new StreamWriter(fileToWriteTo)) { if (uebPkgRequest.TimeSeriesInputs.qg_grid_file_name.EndsWith(".nc")) { sw.WriteLine(uebPkgRequest.TimeSeriesInputs.qg_grid_file_name); } else if (string.IsNullOrEmpty(uebPkgRequest.TimeSeriesInputs.qg_text_file_name) == false) { sw.WriteLine(uebPkgRequest.TimeSeriesInputs.qg_text_file_name); } } _logger.Info(timeSeriesFiles.QgFileName + " file was created."); } }