public override bool OnEnd(object data)
        {
            HDFGlue tool = new HDFGlue();
             tool.AppName = "convert.2.hdf5.exe";
             tool.AppPath = @"..\Run.1\convert\";
             tool.WorkingDirectory = @"..\Run.1\convert\";

             bool res = true;
             MohidRunEngineData mre = (MohidRunEngineData)data;
             string cumulativeFolder = @"..\cumulative\";

             tool.Output = cumulativeFolder + "basin.refevtp.hdf5";
             tool.Is3DFile = false;
             tool.FilesToGlue.Clear();

             System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(mre.storeFolder.Path);
             foreach (System.IO.DirectoryInfo g in dir.GetDirectories())
             {

            if (System.IO.File.Exists(g.FullName + System.IO.Path.DirectorySeparatorChar + "basin.refevtp.hdf5"))
               tool.FilesToGlue.Add(g.FullName + System.IO.Path.DirectorySeparatorChar + "basin.refevtp.hdf5");
             }
             if (tool.FilesToGlue.Count > 0)
            if (tool.Glue() != 0) res = false;
             return res;
        }
        protected bool GenerateMeteoFiles()
        {
            DateTime simStartDate = mre.sim.Start,
                  simEndDate = mre.sim.End,
                  simStart = simStartDate.AddSeconds(1),
                  startsim,
                  endsim;
             string dateStr;
             int counter;
             string mm5NewFilesFolder;
             FileName file = new FileName();
             bool found_file = false;
             System.IO.FileInfo fi;
             Dictionary<string, KeywordData> meteoFolderList;

             filesToGlue.Clear();

             if (root.NodeData.ContainsKey("new.mm5.folder")) mm5NewFilesFolder = root["new.mm5.folder"].AsFilePath().Path;
             else mm5NewFilesFolder = "";

             //--------------------------------------------------------------------------------------------------------------
             //1. Loads the list of folders to look for the meteo files.
             //--------------------------------------------------------------------------------------------------------------
             ConfigNode foldersListNode = root.ChildNodes.Find(FindFoldersListBlocks);
             if (foldersListNode == null)
             {
            //If the list of folders were not provided, looks for the meteo.folder keyword.
            //If the keyword is also missing, uses a default folder, that in this case will be 'H'
            meteoFolderList = new Dictionary<string, KeywordData>();
            meteoFolderList.Add("1", root["meteo.folder", @"H:\"]);
             }
             else
             {
            meteoFolderList = foldersListNode.NodeData;
             }
             //--------------------------------------------------------------------------------------------------------------

             Console.WriteLine("Sim start date   : {0}", simStartDate.ToString("yyyy/MM/dd HH:mm:ss"));
             Console.WriteLine("Sim enddate      : {0}", simEndDate.ToString("yyyy/MM/dd HH:mm:ss"));
             Console.WriteLine("Sim lenght (days): {0}", mre.sim.SimLenght);
             //Console.WriteLine("Generating Meteo file from {0} to {1}", startsim.ToString("yyyy/MM/dd HH:mm:ss"), mre.sim.End.ToString("yyyy/MM/dd HH:mm:ss"));

             bool skipInterpolation = root["skip.interpolation", false].AsBool();

             //This will ensure that the first hour of simulation is included in the meteo file.
             startsim = simStart.AddHours(-5);
             endsim = startsim.AddHours(5);

             //--------------------------------------------------------------------------------------------------------------
             //2. Find the required files. The meteo file must contain data for the entire simulation period
             //--------------------------------------------------------------------------------------------------------------
             bool isFirstInstant;

             Console.WriteLine("Folder where meteo files are: {0}", root["meteo.folder", @"H:\"].AsString());
             Console.WriteLine("");
             Console.WriteLine("Looking for files...");
             Console.WriteLine("");

             int maxSkips = root["max.skips", 10].AsInt();
             int numberOfSkips = 0;
             List<string> requiredFiles = new List<string>();

             Console.WriteLine("The folowing folders will be used on searching meteo files:");
             counter = 0;
             foreach (KeywordData folder in meteoFolderList.Values)
             {
            counter++;
            Console.WriteLine("  {0}. {1}", counter, folder.AsFilePath().Path);
             }
             Console.WriteLine("");

             isFirstInstant = true;
             file.FullPath = "";
             while (startsim < mre.sim.End || !found_file)
             {
            dateStr = startsim.ToString("yyyyMMddHH") + "_" + endsim.ToString("yyyyMMddHH");
            Console.WriteLine("Looking for {0}", @"D3_" + dateStr + ".hdf5");
            foreach (KeywordData folder in meteoFolderList.Values)
            {
               found_file = false;
               file.FullPath = folder.AsFilePath().Path + @"D3_" + dateStr + ".hdf5";

               if (System.IO.File.Exists(file.FullPath))
               {
                  fi = new System.IO.FileInfo(file.FullPath);
                  if (fi.Length > 2000000)
                  {
                     Console.WriteLine("  Found at {0}", folder.AsFilePath().Path);
                     if (!skipInterpolation)
                     {
                        try
                        {
                           Console.Write("  Interpolating file....");
                           if (!InterpolateMeteoFile(file))
                           {
                              Console.WriteLine("[failed]");
                              continue;
                           }
                           else
                              Console.WriteLine("[ok]");
                        }
                        catch (Exception ex)
                        {
                           Console.WriteLine("[exception]");
                           Console.WriteLine("  Message returned: {0}", ex.Message);
                           continue;
                        }
                     }
                     else
                     {
                        filesToGlue.Add(file.FullPath);
                     }

                     found_file = true;
                     break;
                  }
               }
            }

            ////try to find the file (the period) in the "monthly" files in mohid land
            //if (!found_file && mm5NewFilesFolder != "")
            //{
            //   pathToFilesToGlue = root["mm5.months.folder"].AsFilePath().Path +
            //                       startsim.ToString("yyyy") + @"\";
            //   monthly_file = "MM5-D3-Portugal-" + startsim.ToString("yyyy-MM") + ".hdf5";

            //   if (System.IO.File.Exists(pathToFilesToGlue + monthly_file))
            //   {
            //      //find block with info for extractor
            //      ConfigNode extractorNode = root.ChildNodes.Find(FindHDFExtractorBlocks);
            //      if (extractorNode != null)
            //      {
            //         ExternalApp extractorTool = new ExternalApp();

            //         replace_list.Clear();
            //         replace_list["<<input.hdf>>"] = pathToFilesToGlue + monthly_file;
            //         replace_list["<<output.hdf>>"] = mm5NewFilesFolder + @"D3_" + dateStr + ".hdf5";
            //         replace_list["<<start>>"] = startsim.ToString("yyyy MM dd HH 00 00");
            //         replace_list["<<end>>"] = endsim.ToString("yyyy MM dd HH 00 00");

            //         string template = extractorNode["template", mre.sim.SimDirectory.Path + @"templates\tools\extractor.template"].AsString();
            //         string action = extractorNode["config.file.name", "extractor.cfg"].AsString();

            //         Console.WriteLine("Extracting template {0}.", action);

            //         TextFile.Replace(template, extractorNode["working.folder", @"..\tools\extraction\"].AsFilePath().Path + action, ref replace_list);

            //         extractorTool.WorkingDirectory = extractorNode["working.folder", @"..\tools\extraction\"].AsFilePath().Path;
            //         extractorTool.Executable = root["extractor.exe", @"..\tools\extraction\extractor.exe"].AsString();
            //         extractorTool.CheckSuccessMethod = CheckSuccessMethod.DEFAULTOUTPUT;
            //         extractorTool.TextToCheck = "successfully terminated";
            //         extractorTool.SearchTextOrder = SearchTextOrder.FROMEND;
            //         extractorTool.Wait = true;

            //         bool result = extractorTool.Run();
            //         if (!result)
            //         {
            //            Console.WriteLine("Extraction failed.");
            //         }
            //         else
            //         {
            //            requiredFiles.Add(mm5NewFilesFolder + file);
            //            found_file = true;
            //         }
            //      }
            //   }
            //}

            if (!found_file)
            {
               Console.WriteLine("  Not found!", file);

               if ((++numberOfSkips) > maxSkips)
               {
                  Console.WriteLine("Max number of skips reached during meteo creation file.");
                  return false;
               }

               if (isFirstInstant) //first file in the list
               {
                  Console.WriteLine("Going backward...");
                  endsim = startsim.AddHours(-1);
                  startsim = startsim.AddHours(-6);

                  continue;
               }
               else
               {
                  Console.WriteLine("Skipping for the next file...");
                  startsim = endsim.AddHours(1);
                  endsim = startsim.AddHours(5);
               }
            }
            else if (isFirstInstant && numberOfSkips > 0)
            {
               numberOfSkips = 0;
               counter = 0;

               startsim = simStart.AddHours(1);
               endsim = startsim.AddHours(5);
            }
            else if (startsim > mre.sim.End)
            {
               numberOfSkips = 0;
               break;
            }
            else
            {
               numberOfSkips = 0;
               startsim = endsim.AddHours(1);
               endsim = startsim.AddHours(5);
            }

            if (isFirstInstant && found_file)
               isFirstInstant = false;
             }
             //--------------------------------------------------------------------------------------------------------------

             //Now the interpolated files are glued
             HDFGlue glueTool = new HDFGlue(filesToGlue);
             glueTool.AppName = root["glue.exe.name", "glue.exe"].AsString();
             glueTool.AppPath = root["glue.exe.path", @"..\tools\glue\"].AsString();
             glueTool.WorkingDirectory = root["glue.working.folder", @"..\tools\glue\"].AsString();
             glueTool.Output = outputPath + outputName;
             glueTool.Is3DFile = false;
             glueTool.ThrowExceptionOnError = true;

             Console.WriteLine("Gluing files...");

             if (glueTool.Glue() != 0)
             {
            Console.WriteLine("Glue failed.");
            return false;
             }

             //Delete all the files in the temp directory
             try
             {
            System.IO.DirectoryInfo directory = new DirectoryInfo(@"..\tools\interpolation\temp\");
            foreach (System.IO.FileInfo fileToDelete in directory.GetFiles())
               fileToDelete.Delete();
             }
             catch (Exception ex)
             {
            Console.WriteLine("Was not possible to empty the temp directory due to an exception.");
            Console.WriteLine("Message returned was: {0}", ex.Message);
             }

             //Saves the created meteo file in the folder
             if (!FileTools.CopyFile(root["local.boundary.conditions"].AsFilePath(), generalBoundary, "meteo.hdf5", Files.CopyOptions.OVERWRIGHT))
             {
            Console.WriteLine("Was not possible to copy the meteo file to the meteo storage folder.");
            return false;
             }

             return true;
        }
        protected bool Glue(DateTime start, DateTime end, List<string> list)
        {
            try
             {
            HDFGlue tool_glue = new HDFGlue();

            tool_glue.Reset();

            tool_glue.FilesToGlue = list;

            tool_glue.AppName = fGlueExe;
            tool_glue.AppPath = fGlueExePath;
            tool_glue.WorkingDirectory = fGlueWorkingFolder;
            tool_glue.Output = fOutputPath + fOutputTag + start.ToString("yyyyMMddHH") + "_" + end.ToString("yyyyMMddHH") + ".hdf5";
            tool_glue.Is3DFile = false;
            tool_glue.ThrowExceptionOnError = true;

            tool_glue.Glue();
             }
             catch (Exception ex)
             {
            fLastException = ex;
            return false;
             }

             return true;
        }
        protected bool GenerateMeteoFiles(MohidRunEngineData mre)
        {
            //bool result = true;
             DateTime simStartDate = mre.sim.Start;
             DateTime startsim;
             DateTime endsim;
             string dateStr;
             DateTime simStart = simStartDate.AddSeconds(1);
             int counter;
             string file;
             bool found_file;
             System.IO.FileInfo fi;

             //First is required the glue of two files
             HDFGlue tool = new HDFGlue();
             tool.AppName = "glue.exe";
             tool.AppPath = @"..\tools\glue\";
             tool.WorkingDirectory = @"..\tools\glue\";
             tool.Output = @"..\" + mre.sim.SimDirectory.Path + @"local.data\boundary.conditions\mm5.glued.hdf5";
             tool.Is3DFile = false;

             startsim = simStart.AddHours(-5);
             endsim = startsim.AddHours(5);

             Console.WriteLine("Sim start: {0}", simStartDate.ToString("yyyy/MM/dd HH:mm:ss"));
             Console.WriteLine("Generating Meteo file from {0} to {1}", startsim.ToString("yyyy/MM/dd HH:mm:ss"), startsim.AddHours(11).ToString("yyyy/MM/dd HH:mm:ss"));
             Console.WriteLine("Gluing files...");
             for (counter = 0; counter < 57; counter++)
             {
            found_file = false;

            dateStr = startsim.ToString("yyyyMMddHH") + "_" + endsim.ToString("yyyyMMddHH");
            file = @"H:\mm5_6h\" + startsim.ToString("yyyy") + @"\D3_" + dateStr + ".hdf5";
            if (System.IO.File.Exists(file))
            {
               fi = new System.IO.FileInfo(file);
               if (fi.Length > 2000000)
                  found_file = true;
            }

            if (!found_file && startsim.Year == 2008)
            {
               file = @"H:\mm5_6h\2008_ANL\D3_" + dateStr + ".hdf5";
               if (System.IO.File.Exists(file))
               {
                  fi = new System.IO.FileInfo(file);
                  if (fi.Length > 2000000)
                     found_file = true;
               }
            }

            if (!found_file)
            {
               file = @"\\DATACENTER\alexandria3\modelos\Meteo_IST\mm5_6h\D3_" + dateStr + ".hdf5";
               if (System.IO.File.Exists(file))
               {
                  fi = new System.IO.FileInfo(file);
                  if (fi.Length > 2000000)
                     found_file = true;
               }
            }

            if (!found_file)
            {
               Console.WriteLine("The file 'D3_{0}.hdf5' was not found.", dateStr);
               return false;
            }
            else
            {
               tool.FilesToGlue.Add(file);
               //Console.WriteLine("Adding {0} to the list of files to be glued.", @"H:\mm5_6h\" + startsim.ToString("yyyy") + @"\D3_" + dateStr + ".hdf5");
               startsim = endsim.AddHours(1);
               endsim = startsim.AddHours(5);
            }
             }

             tool.ThrowExceptionOnError = true;
             if (tool.Glue() != 0) return false;

             Dictionary<string, string> replace_list = new Dictionary<string, string>();
             replace_list["<<glued>>"] = @"..\" + mre.sim.SimDirectory.Path + @"local.data\boundary.conditions\";
             replace_list["<<father>>"] = @"..\..\general.data\digital.terrain\";
             replace_list["<<dest>>"] = @"..\..\general.data\boundary.conditions\" + mre.sim.Start.ToString("yyyyMMdd.HHmmss") + "-" + mre.sim.End.ToString("yyyyMMdd.HHmmss") + @"\";
             replace_list["<<model>>"] = @"..\..\general.data\digital.terrain\";
             TextFile.Replace(mre.sim.SimDirectory.Path + @"templates\tools\convert.to.HDF5.action.template", @"..\tools\interpolation\converttoHDF5action.dat", ref replace_list);

             //Now, do the "extraction"
             //if (!FileTools.CopyFile(new FileName(mre.sim.SimDirectory.Path + @"templates\tools\convert.to.HDF5.action.template"), new FileName(@"..\tools\interpolation\converttoHDF5action.dat"), CopyOptions.OVERWRIGHT))
             //   return false;

             ExternalApp app = new ExternalApp();

             app.Executable = @"..\tools\interpolation\interpolation.exe";
             app.WorkingDirectory = @"..\tools\interpolation\";
             app.CheckSuccessMethod = CheckSuccessMethod.DEFAULTOUTPUT;
             app.TextToCheck = "successfully terminated";
             app.SearchTextOrder = SearchTextOrder.FROMEND;
             app.Wait = true;
             Console.WriteLine("Interpolating meteo file to model grid...");
             return app.Run();
        }
        protected bool Glue(DateTime start, DateTime end, List<string> list, ConfigNode log_entry)
        {
            try
             {
            string output = fOutputPath + fOutputTag + start.ToString("yyyyMMddHH") + "_" + end.ToString("yyyyMMddHH") + ".hdf5";

            if (fLogExecution)
               log_entry.NodeData["glue.exception"].Set("");

            if (!fOverwrite)
            {
               if (File.Exists(output))
               {
                  if (fLogExecution)
                     log_entry.NodeData["output.file"].Set("[exists] " + output);
                  return true;
               }
            }

            if (fLogExecution)
               log_entry.NodeData["output.file"].Set(output);

            HDFGlue tool_glue = new HDFGlue();

            tool_glue.Reset();

            tool_glue.FilesToGlue = list;

            tool_glue.AppName = fGlueExe;
            tool_glue.AppPath = fGlueExePath;
            tool_glue.WorkingDirectory = fGlueWorkingFolder;
            tool_glue.Output = output;
            tool_glue.Is3DFile = false;
            tool_glue.ThrowExceptionOnError = true;

            tool_glue.Glue();
             }
             catch (Exception ex)
             {
            fLastException = ex;
            if (fLogExecution)
               log_entry.NodeData["glue.exception"].Set(ex.Message);
            return false;
             }

             return true;
        }
        public ScriptV11()
        {
            exception_raised = false;

             tool = new ExternalApp();
             files_to_glue = new List<FileName>();
             replace_list = new Dictionary<string, string>();
             tools_blocks = new Dictionary<string, ConfigNode>();
             practices_block = null;

             save_data_files = true;

             tool_fillmatrix_info = null;
             tool_interpolate_info = null;
             tool_glue_info = null;
             tool_jointimeseries_info = null;

             meteo_block = null;
             meteo_sources_blocks = null;
             meteo_file_name = null;
             meteo_backup_files = false;
             meteo_store_path = null;
             meteo_backup_interpolated_files = false;
             meteo_store_int_path = null;
             meteo_interpolation_path = null;
             meteo_max_contiguous_skips = 8;
             meteo_task = false;
             tool_glue = new HDFGlue();

             standard_names = true;

             basin_evtp_output_filename = null;
             basin_evtp_ftp_template = null;
             ftp_address = "";
             path_on_ftp = "";
             glue_basin_evtp = false;
             send_basin_to_ftp = false;
             glue_all_basin_evtp = false;
             basin_evtp_list = null;
             basin_evtp_file_name = "";
        }
        protected bool GenerateMeteoFiles(MohidRunEngineData mre)
        {
            DateTime simStartDate = mre.sim.Start;
             DateTime startsim;
             DateTime endsim;
             string dateStr;
             DateTime simStart = simStartDate.AddSeconds(1);
             int counter;
             string file, outputPath, outputName;
             bool found_file;
             System.IO.FileInfo fi;

             ConfigNode node = mre.cfg.Root.ChildNodes.Find(FindScriptBlocks);
             if (node == null)
             {
            Console.WriteLine("Node 'script.data' was not found in the config file.");
            return false;
             }

             //First is required the glue of the files
             HDFGlue tool = new HDFGlue();
             tool.AppName = node["glue.exe.name", "glue.exe"].AsString();
             tool.AppPath = node["glue.exe.path", @"..\tools\glue\"].AsString();
             tool.WorkingDirectory = node["glue.working.folder", @"..\tools\glue\"].AsString();
             outputPath = node["glue.output.path", @"..\" + mre.sim.SimDirectory.Path + @"local.data\boundary.conditions\"].AsString();
             outputName = node["glue.output.name", "mm5.glued.hdf5"].AsString();
             tool.Output = outputPath + outputName;
             tool.Is3DFile = false;

             //This will ensure that the first hour of simulation is included in the meteo file.
             startsim = simStart.AddHours(-5);
             endsim = startsim.AddHours(5);
             int maxSkips = node["max.skips", 10].AsInt();
             int numberOfSkips = 0;

             Console.WriteLine("Sim start: {0}", simStartDate.ToString("yyyy/MM/dd HH:mm:ss"));
             Console.WriteLine("Generating Meteo file from {0} to {1}", startsim.ToString("yyyy/MM/dd HH:mm:ss"), mre.sim.End.ToString("yyyy/MM/dd HH:mm:ss"));
             Console.WriteLine("Sim lenght: {0}", mre.sim.SimLenght);

             int numberOfFiles = (int)(mre.sim.SimLenght * 4 + 1.0);
             Console.WriteLine("Expected number of 6 hours files to look: {0}", numberOfFiles);
             Console.WriteLine("Folder where meteo files are: {0}", node["meteo.folder", @"H:\"].AsString());
             Console.WriteLine("");
             Console.WriteLine("Looking for files...");
             Console.WriteLine("");
             for (counter = 0; counter < numberOfFiles; counter++)
             {
            found_file = false;

            dateStr = startsim.ToString("yyyyMMddHH") + "_" + endsim.ToString("yyyyMMddHH");
            file = node["meteo.folder", @"H:\"].AsString() + @"D3_" + dateStr + ".hdf5";

            if (System.IO.File.Exists(file))
            {
               fi = new System.IO.FileInfo(file);
               if (fi.Length > 2000000)
               {
                  found_file = true;
                  tool.FilesToGlue.Add(file);
               }
            }

            if (!found_file)
            {
               Console.WriteLine("File '{0}' was not found.", file);

               if (counter + 1 == numberOfFiles)
               {
                  counter--;
                  numberOfSkips++;
                  if (numberOfSkips > maxSkips)
                  {
                     Console.WriteLine("Max number of skips reached during meteo creation file.");
                     return false;
                  }
               }
            }

            startsim = endsim.AddHours(1);
            endsim = startsim.AddHours(5);
             }

             Console.WriteLine("Gluing files...");

             tool.ThrowExceptionOnError = true;
             if (tool.Glue() != 0)
             {
            Console.WriteLine("Glue failed.");
            return false;
             }

             Dictionary<string, string> replace_list = new Dictionary<string, string>();
             replace_list["<<glued>>"] = outputPath;
             replace_list["<<father>>"] = node["father.grid", @"..\..\general.data\digital.terrain\"].AsString();
             replace_list["<<dest>>"] = node["hdf.output.path", @"..\..\general.data\boundary.conditions\"].AsString() + mre.sim.Start.ToString("yyyyMMdd.HHmmss") + "-" + mre.sim.End.ToString("yyyyMMdd.HHmmss") + @"\";
             replace_list["<<model>>"] = node["model.grid", @"..\..\general.data\digital.terrain\"].AsString();

             string template = node["template", mre.sim.SimDirectory.Path + @"templates\tools\convert.to.HDF5.action.template"].AsString();
             string action = node["action.file",  @"..\tools\interpolation\converttoHDF5action.dat"].AsString();

             TextFile.Replace(template, action, ref replace_list);

             ExternalApp app = new ExternalApp();

             app.WorkingDirectory = node["interpolation.working.folder", @"..\tools\interpolation\"].AsString();
             app.Executable = node["interpolation.exe", @"..\tools\interpolation\interpolation.exe"].AsString();
             app.CheckSuccessMethod = CheckSuccessMethod.DEFAULTOUTPUT;
             app.TextToCheck = "successfully terminated";
             app.SearchTextOrder = SearchTextOrder.FROMEND;
             app.Wait = true;
             Console.WriteLine("Interpolating meteo file to model grid...");
             bool result = app.Run();
             if (!result)
             {
            Console.WriteLine("Interpolation failed.");
            return false;
             }

             //Saves the created meteo file in the folder
             if (!FileTools.CopyFile(new FilePath(replace_list["<<dest>>"]), new FilePath(orig.Path), "meteo.hdf5", Files.CopyOptions.OVERWRIGHT))
             {
            Console.WriteLine("Was not possible to copy the meteo file to the meteo storage folder.");
            return false;
             }

             return true;
        }
        protected bool GenerateAlternativeMeteoFilesToForecast(DateTime simStartDate)
        {
            //bool result = true;
             DateTime startsim;
             DateTime endsim;
             string dateStr;
             DateTime simStart = simStartDate.AddSeconds(1);

             char pd = System.IO.Path.DirectorySeparatorChar;

             //First is required the glue of two files
             HDFGlue tool = new HDFGlue();
             tool.AppName = "glue.exe";
             tool.AppPath = System.IO.Path.Combine("..", "tools", "glue");
             tool.WorkingDirectory = tool.AppPath;
             tool.Output = "meteo.glued.hdf5";
             tool.Is3DFile = false;

             startsim = simStart.AddHours(-5);
             endsim = startsim.AddHours(5);
             dateStr = startsim.ToString("yyyyMMddHH") + "_" + endsim.ToString("yyyyMMddHH");
             tool.FilesToGlue.Add("\\\\ftpserver\\ftp.mohid.com\\LocalUser\\meteoIST\\mm5_6h\\D3_" + dateStr + ".hdf5");
             startsim = endsim.AddHours(1);
             endsim = startsim.AddHours(5);
             dateStr = startsim.ToString("yyyyMMddHH") + "_" + endsim.ToString("yyyyMMddHH");
             tool.FilesToGlue.Add("\\\\ftpserver\\ftp.mohid.com\\LocalUser\\meteoIST\\mm5_6h\\D3_" + dateStr + ".hdf5");
             tool.ThrowExceptionOnError = true;
             if (tool.Glue() != 0) return false;

             //Now, do the "extraction"
             if (!FileTools.CopyFile(new FileName(@".."+ pd + "templates" + pd + "tools" + pd + "ConvertToHDF5Action-2.template"), new FileName(@".." + pd + "tools" + pd + "interpolation" + pd + "ConvertToHDF5Action.dat"), CopyOptions.OVERWRIGHT))
            return false;

             ExternalApp app = new ExternalApp();

             app.Executable = @".." + pd + "tools" + pd + "interpolation" + pd + "interpolation.exe";
             app.WorkingDirectory = @".." + pd + "tools" + pd + "interpolation" + pd;
             app.CheckSuccessMethod = CheckSuccessMethod.DEFAULTOUTPUT;
             app.TextToCheck = "successfully terminated";
             app.SearchTextOrder = SearchTextOrder.FROMEND;
             app.Wait = true;

             return app.Run();
        }
        protected bool GlueFiles(FileName file_to_process)
        {
            bool result = true;
             bool glue_now = true;
             string output;

             try
             {
            //if (actual_index == 1)
            //{
            //   store_files_for_glue = true;
            //}

            Console.WriteLine("    Actual index = {0}", actual_index);
            Console.Write("    Marking file for GLUE.............");
            if (store_files_for_glue)
            {
               if (actual_index >= starting_hour)
               {
                  string file_name;

                  //if (process_hdf)
                  //   file_name = file_to_process.Path + file_to_process.Name.Substring(0, file_to_process.Name.Length - output_tag.Length) + "." + file_to_process.Extension;
                  //else
                     file_name = file_to_process.FullPath;

                  files_to_glue.Add(new FileName(file_name));
                  Console.WriteLine("[OK]");
               }
               else
                  Console.WriteLine("[FALSE]");

               //actual_index++;

               if (files_to_glue.Count >= hours_to_glue)
               {
                  Console.WriteLine("    ----------------------------------");
                  Console.Write("    Starting GLUE.");
                  string path;

                  if (glue_on_separeted_folders)
                     path = store_glue_folder.Path + last_store_name;
                  else
                     path = store_glue_folder.Path;

                  //output = path + last_store_name + ".hdf5";

                  string first = files_to_glue[0].Name.Substring(files_to_glue[0].Name.Length - 10, 10);
                  string last = files_to_glue[files_to_glue.Count - 1].Name.Substring(files_to_glue[files_to_glue.Count - 1].Name.Length - 10, 10);
                  output = path + files_to_glue[0].Name.Substring(0, files_to_glue[0].Name.Length - 21) + "_" + first + "_" + last + ".hdf5";

                  Console.WriteLine("");
                  Console.WriteLine("=> {0} = {1}", files_to_glue[0].Name, first);
                  Console.WriteLine("=> {0} = {1}", files_to_glue[files_to_glue.Count - 1].Name, last);
                  Console.WriteLine("=> {0}", output);

                  //Console.ReadKey();

                  Console.Write("    Output file: {0}", last_store_name + ".hdf5");
                  if (!System.IO.Directory.Exists(path))
                     System.IO.Directory.CreateDirectory(path);

                  if (!replace_glued_files)
                     if (System.IO.File.Exists(output))
                        glue_now = false;

                  files_temp.Clear();
                  foreach (FileName f in files_to_glue)
                  {
                     files_temp.Add(f.FullPath);
                  }
                  HDFGlue glueTool = new HDFGlue(files_temp);

                  glueTool.AppName = glue_exe.FullName;
                  glueTool.AppPath = glue_exe.Path;
                  glueTool.WorkingDirectory = working_folder.Path;
                  glueTool.Output = output;
                  glueTool.Is3DFile = false;
                  glueTool.ThrowExceptionOnError = true;
                  glueTool.Verbose = true;

                  if (glue_now)
                  {
                     Console.WriteLine("    ----------------------------------");
                     Console.WriteLine("    glueTool.AppName: {0}", glueTool.AppName);
                     Console.WriteLine("    glueTool.AppPath: {0}", glueTool.AppPath);
                     Console.WriteLine("    glueTool.WorkingDirectory: {0}", glueTool.WorkingDirectory);
                     Console.WriteLine("    ----------------------------------");
                     Console.WriteLine("List of files to glue:");
                     foreach (FileName file in files_to_glue)
                        Console.WriteLine("  {0}", file.Name);
                     Console.Write("    Gluing actual folder files........");

                     if (glueTool.Glue() != 0)
                     {
                        result = false;
                     }
                     else
                        result = true;

                     if (result)
                        Console.WriteLine("[OK]");
                     else
                     {
                        Console.WriteLine("[FAIL]");
                     }
                  }

                  files_to_glue.Clear();
                  store_files_for_glue = false;

                  if (result && glue_all)
                  {
                     if (first_glue)
                     {
                        Console.Write("    Gluing final file.................");
                        System.IO.File.Copy(output, store_glue_folder.Path + "glued.hdf5", true);
                        Console.WriteLine("[OK]");
                        first_glue = false;
                     }
                     else
                     {
                        Console.Write("    Gluing final file.................");
                        files_temp.Add(store_glue_folder.Path + "glued.hdf5");
                        files_temp.Add(output);
                        glueTool.FilesToGlue = files_temp;
                        glueTool.Output = working_folder.Path + "new_glued.hdf5";

                        if (glueTool.Glue() != 0)
                           result = false;

                        if (result)
                           Console.WriteLine("[OK]");
                        else
                           Console.WriteLine("[FAIL]");

                        if (result)
                        {
                           Console.Write("    Replacing final file..............");
                           System.IO.File.Copy(working_folder.Path + "new_glued.hdf5", store_glue_folder.Path + "glued.hdf5", true);
                           Console.WriteLine("[OK]");
                        }

                        files_to_glue.Clear();
                     }
                  }
                  Console.WriteLine("    ----------------------------------");
               }
            }
            else
               Console.WriteLine("[FALSE]");
             }
             catch (Exception ex)
             {
            last_exception = ex;
            files_to_glue.Clear();
            Console.WriteLine("[FAIL]");
            Console.WriteLine("    ----------------------------------");
            result = false;
             }

             //Console.ReadKey();
             return result;
        }
Exemple #10
0
        public override bool OnSimStart(object data)
        {
            MohidRunEngineData mre = (MohidRunEngineData)data;

             //bool result = true;
             DateTime startsim;
             DateTime endsim;
             string dateStr;
             DateTime simStart = mre.sim.Start;
             int counter;

             //First is required the glue of two files
             HDFGlue tool = new HDFGlue();

             tool.AppName = "ConvertToHdf5_release_single.exe";
             tool.AppPath = @"..\tools\Convert 2 HDF\";
             tool.WorkingDirectory = @"..\tools\Convert 2 HDF\";
             tool.Output = @"mm5.glued.hdf5";
             tool.Is3DFile = false;

             startsim = simStart.AddHours(-5);
             endsim = startsim.AddHours(5);

             string file_to_glue, path;
             int tentatives;
             bool must_find_another;

             for (counter = 0; counter < 5; counter++)
             {
            tentatives = 3;
            must_find_another = true;

            while (must_find_another)
            {
               dateStr = startsim.ToString("yyyyMMddHH") + "_" + endsim.ToString("yyyyMMddHH");
               file_to_glue = @"D3_" + dateStr + ".hdf5";
               path = @"Q:\";

               if (System.IO.File.Exists(path + file_to_glue))
               {
                  must_find_another = false;
                  tool.FilesToGlue.Add(path + file_to_glue);

                  startsim = endsim.AddHours(1);
                  endsim = startsim.AddHours(5);
               }
               else
               {
                  tentatives--;

                  if (tentatives == 0)
                     return false;

                  if (counter == 0)
                  {
                     startsim = startsim.AddHours(-6);
                     endsim = startsim.AddHours(-1);
                  }
                  else
                  {
                     startsim = endsim.AddHours(1);
                     endsim = startsim.AddHours(5);
                  }
               }
            }
             }

             tool.ThrowExceptionOnError = true;
             if (tool.Glue() != 0)
            return false;

             FileName template = new FileName(mre.sim.SimDirectory.Path + @"templates\tools\interpolate.template");
             FileName griddata = new FileName(mre.sim.SimDirectory.Path + @"templates\tools\grid.data.dat");

             //Now, do the "extraction"
             if (!FileTools.CopyFile(template, new FileName(@"..\tools\convert 2 hdf\converttoHDF5action.dat"), CopyOptions.OVERWRIGHT))
            return false;
             if (!FileTools.CopyFile(griddata, new FileName(@"..\tools\convert 2 hdf\grid.data.dat"), CopyOptions.OVERWRIGHT))
            return false;

             ExternalApp app = new ExternalApp();

             app.Executable = @"..\tools\convert 2 hdf\ConvertToHdf5_release_double.exe";
             app.WorkingDirectory = @"..\tools\convert 2 hdf\";
             app.CheckSuccessMethod = CheckSuccessMethod.DEFAULTOUTPUT;
             app.TextToCheck = "successfully terminated";
             app.SearchTextOrder = SearchTextOrder.FROMEND;
             app.Wait = true;

             if (!app.Run())
            return false;

             if (!FileTools.CopyFile(new FileName(@"..\tools\convert 2 hdf\meteo.mm5.hdf5"), new FileName(mre.sim.SimDirectory.Path + @"local data\meteo.mm5.hdf5"), CopyOptions.OVERWRIGHT))
            return false;

             return true;
        }
        protected bool GenerateMeteoFiles(DateTime start, DateTime end)
        {
            DateTime simStartDate =start,
                  simEndDate = end,
                  simStart = simStartDate.AddSeconds(1),
                  startsim,
                  endsim;
             string dateStr;
             int counter;
             string mm5NewFilesFolder;
             FileName file = new FileName();
             bool found_file = false;
             System.IO.FileInfo fi;
             Dictionary<string, KeywordData> meteoFolderList;

             filesToGlue.Clear();

             if (root.NodeData.ContainsKey("new.mm5.folder")) mm5NewFilesFolder = root["new.mm5.folder"].AsFilePath().Path;
             else mm5NewFilesFolder = "";

             //--------------------------------------------------------------------------------------------------------------
             //1. Loads the list of folders to look for the meteo files.
             //--------------------------------------------------------------------------------------------------------------
             ConfigNode foldersListNode = root.ChildNodes.Find(FindFoldersListBlocks);
             if (foldersListNode == null)
             {
            //If the list of folders were not provided, looks for the meteo.folder keyword.
            //If the keyword is also missing, uses a default folder, that in this case will be 'H'
            meteoFolderList = new Dictionary<string, KeywordData>();
            meteoFolderList.Add("1", root["meteo.folder"]);
             }
             else
             {
            meteoFolderList = foldersListNode.NodeData;
             }
             //--------------------------------------------------------------------------------------------------------------

             Console.WriteLine("Sim start date   : {0}", simStartDate.ToString("yyyy/MM/dd HH:mm:ss"));
             Console.WriteLine("Sim enddate      : {0}", simEndDate.ToString("yyyy/MM/dd HH:mm:ss"));

             //Console.WriteLine("Generating Meteo file from {0} to {1}", startsim.ToString("yyyy/MM/dd HH:mm:ss"), mre.sim.End.ToString("yyyy/MM/dd HH:mm:ss"));

             bool skipInterpolation = root["skip.interpolation", false].AsBool();

             //This will ensure that the first hour of simulation is included in the meteo file.
             startsim = simStart.AddHours(-5);
             endsim = startsim.AddHours(5);

             //--------------------------------------------------------------------------------------------------------------
             //2. Find the required files. The meteo file must contain data for the entire simulation period
             //--------------------------------------------------------------------------------------------------------------
             bool isFirstInstant;

             Console.WriteLine("Folder where meteo files are: {0}", root["meteo.folder"].AsString());
             Console.WriteLine("");
             Console.WriteLine("Looking for files...");
             Console.WriteLine("");

             int maxSkips = root["max.skips", 10].AsInt();
             int numberOfSkips = 0;
             List<string> requiredFiles = new List<string>();

             Console.WriteLine("The folowing folders will be used on searching meteo files:");
             counter = 0;
             foreach (KeywordData folder in meteoFolderList.Values)
             {
            counter++;
            Console.WriteLine("  {0}. {1}", counter, folder.AsFilePath().Path);
             }
             Console.WriteLine("");

             isFirstInstant = true;
             file.FullPath = "";
             while (startsim < end || !found_file)
             {
            dateStr = startsim.ToString("yyyyMMddHH") + "_" + endsim.ToString("yyyyMMddHH");
            Console.WriteLine("Looking for {0}", @"D3_" + dateStr + ".hdf5");
            foreach (KeywordData folder in meteoFolderList.Values)
            {
               found_file = false;
               file.FullPath = folder.AsFilePath().Path + @"D3_" + dateStr + ".hdf5";

               if (System.IO.File.Exists(file.FullPath))
               {
                  fi = new System.IO.FileInfo(file.FullPath);
                  if (fi.Length > 2000000)
                  {
                     Console.WriteLine("  Found at {0}", folder.AsFilePath().Path);
                     if (!skipInterpolation)
                     {
                        try
                        {
                           Console.Write("  Interpolating file....");
                           if (!InterpolateMeteoFile(file))
                           {
                              Console.WriteLine("[failed]");
                              continue;
                           }
                           else
                              Console.WriteLine("[ok]");
                        }
                        catch (Exception ex)
                        {
                           Console.WriteLine("[exception]");
                           Console.WriteLine("  Message returned: {0}", ex.Message);
                           continue;
                        }
                     }
                     else
                     {
                        filesToGlue.Add(file.FullPath);
                     }

                     found_file = true;
                     break;
                  }
               }
            }

            if (!found_file)
            {
               Console.WriteLine("  Not found!", file);

               if ((++numberOfSkips) > maxSkips)
               {
                  Console.WriteLine("Max number of skips reached during meteo creation file.");
                  return false;
               }

               if (isFirstInstant) //first file in the list
               {
                  Console.WriteLine("Going backward...");
                  endsim = startsim.AddHours(-1);
                  startsim = startsim.AddHours(-6);

                  continue;
               }
               else
               {
                  Console.WriteLine("Skipping for the next file...");
                  startsim = endsim.AddHours(1);
                  endsim = startsim.AddHours(5);
               }
            }
            else if (isFirstInstant && numberOfSkips > 0)
            {
               numberOfSkips = 0;
               counter = 0;

               startsim = simStart.AddHours(1);
               endsim = startsim.AddHours(5);
            }
            else if (startsim > end)
            {
               numberOfSkips = 0;
               break;
            }
            else
            {
               numberOfSkips = 0;
               startsim = endsim.AddHours(1);
               endsim = startsim.AddHours(5);
            }

            if (isFirstInstant && found_file)
               isFirstInstant = false;
             }
             //--------------------------------------------------------------------------------------------------------------

             //Now the interpolated files are glued
             HDFGlue glueTool = new HDFGlue(filesToGlue);
             glueTool.AppName = root["glue.exe.name"].AsString();
             glueTool.AppPath = root["glue.exe.path"].AsString();
             glueTool.WorkingDirectory = root["glue.working.folder"].AsString();
             glueTool.Output = outputPath + outputName;
             glueTool.Is3DFile = false;
             glueTool.ThrowExceptionOnError = true;

             Console.WriteLine("Gluing files...");

             if (glueTool.Glue() != 0)
             {
            Console.WriteLine("Glue failed.");
            return false;
             }

             //Delete all the files in the temp directory
             try
             {
            System.IO.DirectoryInfo directory = new DirectoryInfo(tempFolder);
            foreach (System.IO.FileInfo fileToDelete in directory.GetFiles())
               fileToDelete.Delete();
             }
             catch (Exception ex)
             {
            Console.WriteLine("Was not possible to empty the temp directory due to an exception.");
            Console.WriteLine("Message returned was: {0}", ex.Message);
             }

             return true;
        }
        public bool Reset()
        {
            last_exception = null;

             tools_blocks = new Dictionary<string, ConfigNode>();
             tool_interpolate_info = null;
             tool_glue_info = null;

             replace_list = new Dictionary<string, string>();
             tool = new ExternalApp();
             tool_glue = new HDFGlue();

             interval = new DateInterval();

             return true;
        }
        protected bool GenerateMeteoFiles(MohidRunEngineData mre)
        {
            DateTime simStartDate = mre.sim.Start;
             DateTime startsim;
             DateTime endsim;
             string dateStr;
             DateTime simStart = simStartDate.AddSeconds(1);
             int counter;
             string file, outputPath, outputName, tempFolder;
             bool found_file;
             System.IO.FileInfo fi;
             HDFGlue glueTool = new HDFGlue();
             ExternalApp interpolateTool = new ExternalApp();

             ConfigNode node = mre.cfg.Root.ChildNodes.Find(FindScriptBlocks);
             if (node == null)
             {
            Console.WriteLine("Node 'script.data' was not found in the config file.");
            return false;
             }

             //This will ensure that the first hour of simulation is included in the meteo file.
             startsim = simStart.AddHours(-5);
             endsim = startsim.AddHours(5);

             Console.WriteLine("Sim start: {0}", simStartDate.ToString("yyyy/MM/dd HH:mm:ss"));
             Console.WriteLine("Generating Meteo file from {0} to {1}", startsim.ToString("yyyy/MM/dd HH:mm:ss"), mre.sim.End.ToString("yyyy/MM/dd HH:mm:ss"));
             Console.WriteLine("Sim lenght: {0}", mre.sim.SimLenght);

             //Get some important input from the script block in config file
             outputPath = node["glue.output.path", @"..\" + mre.sim.SimDirectory.Path + @"local.data\boundary.conditions\"].AsString();
             outputName = node["glue.output.name", "meteo.hdf5"].AsString();
             tempFolder = node["interpolation.folder", @".\temp\"].AsString();

             //First, find the required files.
             int numberOfFiles = (int)(mre.sim.SimLenght * 4 + 1.0);
             Console.WriteLine("Expected number of 6 hours files to look: {0}", numberOfFiles);
             Console.WriteLine("Folder where meteo files are: {0}", node["meteo.folder", @"H:\"].AsString());
             Console.WriteLine("");
             Console.WriteLine("Looking for files...");
             Console.WriteLine("");

             int maxSkips = node["max.skips", 10].AsInt();
             int numberOfSkips = 0;
             List<string> requiredFiles = new List<string>();

             for (counter = 0; counter < numberOfFiles; counter++)
             {
            found_file = false;

            dateStr = startsim.ToString("yyyyMMddHH") + "_" + endsim.ToString("yyyyMMddHH");
            file = node["meteo.folder", @"H:\"].AsString() + @"D3_" + dateStr + ".hdf5";

            if (System.IO.File.Exists(file))
            {
               fi = new System.IO.FileInfo(file);
               if (fi.Length > 2000000)
               {
                  found_file = true;
                  requiredFiles.Add(file);
               }
            }

            if (!found_file)
            {
               Console.WriteLine("File '{0}' was not found.", file);

               if (counter + 1 == numberOfFiles)
               {
                  counter--;
                  numberOfSkips++;
                  if (numberOfSkips > maxSkips)
                  {
                     Console.WriteLine("Max number of skips reached during meteo creation file.");
                     return false;
                  }
               }
            }

            startsim = endsim.AddHours(1);
            endsim = startsim.AddHours(5);
             }

             //Now the files were found, they will be interpolated to the model's grid
             Console.WriteLine("Interpolating meteo file to model grid...");
             Dictionary<string, string> replace_list = new Dictionary<string, string>();
             FileName f_name = new FileName();
             string path = node["glue.input.folder", @"..\interpolation\temp\"].AsString();
             bool skipInterpolation = node["skip.interpolation", false].AsBool();

             foreach (string f in requiredFiles)
             {
            f_name.FullPath = f;
            glueTool.FilesToGlue.Add(path + f_name.FullName);

            if (!skipInterpolation)
            {

               replace_list["<<input.hdf>>"] = f;
               replace_list["<<father.grid>>"] = node["father.grid", @"..\..\general.data\digital.terrain\mm5.dat"].AsString();
               replace_list["<<output.hdf>>"] = tempFolder + f_name.FullName;
               replace_list["<<model.grid>>"] = node["model.grid", @"..\..\general.data\digital.terrain\grid.dat"].AsString();

               string template = node["template", mre.sim.SimDirectory.Path + @"templates\tools\convert.to.HDF5.action.template"].AsString();
               string action = node["action.file", @"..\tools\interpolation\converttoHDF5action.dat"].AsString();

               TextFile.Replace(template, action, ref replace_list);

               interpolateTool.WorkingDirectory = node["interpolation.working.folder", @"..\tools\interpolation\"].AsString();
               interpolateTool.Executable = node["interpolation.exe", @"..\tools\interpolation\interpolation.exe"].AsString();
               interpolateTool.CheckSuccessMethod = CheckSuccessMethod.DEFAULTOUTPUT;
               interpolateTool.TextToCheck = "successfully terminated";
               interpolateTool.SearchTextOrder = SearchTextOrder.FROMEND;
               interpolateTool.Wait = true;

               bool result = interpolateTool.Run();
               if (!result)
               {
                  Console.WriteLine("Interpolation failed.");
                  return false;
               }
            }
             }

             //Now the interpolated files are glued
             glueTool.AppName = node["glue.exe.name", "glue.exe"].AsString();
             glueTool.AppPath = node["glue.exe.path", @"..\tools\glue\"].AsString();
             glueTool.WorkingDirectory = node["glue.working.folder", @"..\tools\glue\"].AsString();
             glueTool.Output = outputPath + outputName;
             glueTool.Is3DFile = false;
             glueTool.ThrowExceptionOnError = true;

             Console.WriteLine("Gluing files...");

             if (glueTool.Glue() != 0)
             {
            Console.WriteLine("Glue failed.");
            return false;
             }

             //Saves the created meteo file in the folder
             if (!FileTools.CopyFile(node["local.boundary.folder", @"..\actual\local.data\boundary.conditions\"].AsFilePath(), new FilePath(orig.Path), "meteo.hdf5", Files.CopyOptions.OVERWRIGHT))
             {
            Console.WriteLine("Was not possible to copy the meteo file to the meteo storage folder.");
            return false;
             }

             //Delete all the files in the temp directory
             try
             {
            System.IO.DirectoryInfo directory = new DirectoryInfo(@"..\tools\interpolation\temp\");
            foreach (System.IO.FileInfo fileToDelete in directory.GetFiles())
               fileToDelete.Delete();
             }
             catch (Exception ex)
             {
            Console.WriteLine("Was not possible to empty the temp directory due to an exception.");
            Console.WriteLine("Message returned was: {0}", ex.Message);
             }

             return true;
        }
Exemple #14
0
        public bool GenerateCumulative(MohidRunEngineData mre)
        {
            HDFGlue tool = new HDFGlue();
             tool.AppName = "glue.exe";
             tool.AppPath = @"..\tools\glue\";
             tool.WorkingDirectory = @"..\tools\glue\";

             bool res = true;

             FilePath pathToGlue = new FilePath(mre.storeFolder.Path + mre.sim.Start.ToString("yyyyMMdd.HHmmss") + "-" + mre.sim.End.ToString("yyyyMMdd.HHmmss"));
             FileName toGlue = new FileName();
             toGlue.Path = mre.storeFolder.Path + mre.sim.Start.ToString("yyyyMMdd.HHmmss") + "-" + mre.sim.End.ToString("yyyyMMdd.HHmmss");
             FilePath destinationFolder = new FilePath(@"..\cumulative\");
             FilePath workingFolder = new FilePath(tool.WorkingDirectory);

             toGlue.FullName = "basin.hdf5";
             if (!GlueFiles(tool, false, workingFolder, destinationFolder, toGlue, mre))
            return false;

             toGlue.FullName = "basin.refevtp.hdf5";
             Console.WriteLine("{0}", toGlue.FullPath);
             if (!GlueFiles(tool, false, workingFolder, destinationFolder, toGlue, mre))
            return false;

             toGlue.FullName = "basin.evtp.hdf5";
             Console.WriteLine("{0}", toGlue.FullPath);
             if (!GlueFiles(tool, false, workingFolder, destinationFolder, toGlue, mre))
            return false;

             //toGlue.FullName = "porous.media.hdf5";
             //Console.WriteLine("{0}", toGlue.FullPath);
             //if (!GlueFiles(tool, true, workingFolder, destinationFolder, toGlue, mre))
             //   return false;

             toGlue.FullName = "drainage.network.hdf5";
             Console.WriteLine("{0}", toGlue.FullPath);
             if (!GlueFiles(tool, false, workingFolder, destinationFolder, toGlue, mre))
            return false;

             toGlue.FullName = "runoff.hdf5";
             Console.WriteLine("{0}", toGlue.FullPath);
             if (!GlueFiles(tool, false, workingFolder, destinationFolder, toGlue, mre))
            return false;

             toGlue.FullName = "atmosphere.hdf5";
             Console.WriteLine("{0}", toGlue.FullPath);
             if (!GlueFiles(tool, false, workingFolder, destinationFolder, toGlue, mre))
            return false;

             //tool.FilesToGlue.Clear();
             //tool.Output = cumulativeFolder + "atmosphere.hdf5";
             //foreach (System.IO.DirectoryInfo g in dir.GetDirectories())
             //{
             //   if (System.IO.File.Exists(g.FullName + "\\atmosphere.hdf5"))
             //      tool.FilesToGlue.Add(g.FullName + "\\atmosphere.hdf5");
             //}
             //if (tool.FilesToGlue.Count > 0)
             //   if (tool.Glue() != 0)
             //      res = false;

             if (!SendToFTPOnEnd(mre))
            res = false;

             return res;
        }
Exemple #15
0
        protected bool GlueFiles(HDFGlue glue, bool is3D, FilePath workingFolder, FilePath destinationFolder, FileName toGlue, MohidRunEngineData mre)
        {
            glue.Output = @"..\..\cumulative\" + toGlue.FullName;
             glue.Is3DFile = false;
             glue.FilesToGlue.Clear();

             //Console.WriteLine("Checking if '{0}' exists", destinationFolder.Path + toGlue.FullName);
             if (!System.IO.File.Exists(destinationFolder.Path + toGlue.FullName))
             {
            //if (!FileTools.CopyFile(toGlue, new FileName(destinationFolder.Path + toGlue.FullName), CopyOptions.OVERWRIGHT))
            //   return false;

            System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(mre.storeFolder.Path);
            foreach (System.IO.DirectoryInfo g in dir.GetDirectories())
            {
               if (System.IO.File.Exists(g.FullName + System.IO.Path.DirectorySeparatorChar + toGlue.FullName))
               {
                  //Console.WriteLine("File '{0}' exists", g.FullName + "\\" + toGlue.FullName);
                  glue.FilesToGlue.Add(g.FullName + System.IO.Path.DirectorySeparatorChar + toGlue.FullName);
               }
               else
               {
                  //Console.WriteLine("File '{0}' DO NOT exists", g.FullName + "\\" + toGlue.FullName);
               }
            }
            //Console.WriteLine("Found {0} files to GLUE.", glue.FilesToGlue.Count.ToString());
            if (glue.FilesToGlue.Count > 0)
               if (glue.Glue() != 0)
                  return false;

            return true;
             }

             if (!FileTools.CopyFile(new FileName(destinationFolder.Path + toGlue.FullName), new FileName(workingFolder.Path + toGlue.FullName), CopyOptions.OVERWRIGHT))
            return false;

             glue.FilesToGlue.Add(toGlue.FullName);
             glue.FilesToGlue.Add(".." + System.IO.Path.DirectorySeparatorChar + toGlue.FullPath);

             if (glue.Glue() != 0)
            return false;

             return true;
        }
        protected bool GenerateMeteoFilesFromSources()
        {
            try
             {
            DateTime simStartDate = mre.sim.Start,
                     simEndDate = mre.sim.End,
                     simStart = simStartDate.AddSeconds(1),
                     startsim,
                     endsim;
            FileName file = new FileName();
            string input_start_tag;
            string input_end_tag;
            bool found_file = false;
            System.IO.FileInfo fi;
            Dictionary<string, KeywordData> meteoFolderList;
            string dateStr;
            int maxSkips = root["max.skips", 10].AsInt();
            int numberOfSkips = 0;
            List<string> requiredFiles = new List<string>();
            bool isFirstInstant;
            long minimum_size;

            List<ConfigNode> sources = root.ChildNodes.FindAll(delegate(ConfigNode to_match) { return to_match.Name == "meteo.source"; });
            bool skipInterpolation = root["skip.interpolation", false].AsBool();

            if (sources == null)
               return false;
            if (sources.Count <= 0)
               return false;

            filesToGlue.Clear();

            //This will ensure that the first hour of simulation is included in the meteo file.
            startsim = simStart.AddHours(-5);
            endsim = startsim.AddHours(5);

            Console.WriteLine("Sim start date   : {0}", simStartDate.ToString("yyyy/MM/dd HH:mm:ss"));
            Console.WriteLine("Sim enddate      : {0}", simEndDate.ToString("yyyy/MM/dd HH:mm:ss"));
            Console.WriteLine("Sim lenght (days): {0}", mre.sim.SimLenght);

            isFirstInstant = true;
            file.FullPath = "";
            while (startsim < mre.sim.End || !found_file)
            {
               dateStr = startsim.ToString("yyyyMMddHH") + "_" + endsim.ToString("yyyyMMddHH");

               Console.WriteLine("Looking for file {0}", "*" + dateStr + "*");

               foreach (ConfigNode src in sources)
               {
                  input_start_tag = src["input.start.tag", "D3_"].AsString();
                  input_end_tag = src["input.end.tag", ""].AsString();
                  minimum_size = src["minimum.size", 2000000].AsLong();

                  ConfigNode folders_list = src.ChildNodes.Find(delegate(ConfigNode to_match) { return to_match.Name == "meteo.folders.list"; });
                  if (folders_list == null)
                  {
                     //If the list of folders were not provided, looks for the meteo.folder keyword.
                     //If the keyword is also missing, uses a default folder, that in this case will be 'H'
                     meteoFolderList = new Dictionary<string, KeywordData>();
                     meteoFolderList.Add("1", root["meteo.folder", @"H:\"]);
                  }
                  else
                  {
                     meteoFolderList = folders_list.NodeData;
                  }

                  foreach (KeywordData folder in meteoFolderList.Values)
                  {
                     found_file = false;
                     file.FullPath = folder.AsFilePath().Path + input_start_tag + dateStr + input_end_tag + ".hdf5";

                     if (System.IO.File.Exists(file.FullPath))
                     {
                        fi = new System.IO.FileInfo(file.FullPath);
                        if (fi.Length > minimum_size)
                        {
                           Console.WriteLine("  Found at {0} [{1}]", folder.AsFilePath().Path, src["name", ""].AsString());
                           if (!skipInterpolation)
                           {
                              try
                              {
                                 Console.Write("  Interpolating file....");
                                 if (!InterpolateMeteoFile(file, src))
                                 {
                                    Console.WriteLine("[failed]");
                                    continue;
                                 }
                                 else
                                    Console.WriteLine("[ok]");
                              }
                              catch (Exception ex)
                              {
                                 Console.WriteLine("[exception]");
                                 Console.WriteLine("  Message returned: {0}", ex.Message);
                                 continue;
                              }
                           }
                           else
                           {
                              filesToGlue.Add(file.FullPath);
                           }

                           found_file = true;
                           break;
                        }
                     }
                  }

                  if (found_file) break;
               }

               if (!found_file)
               {
                  Console.WriteLine("  Not found!", file);

                  if ((++numberOfSkips) > maxSkips)
                  {
                     Console.WriteLine("Max number of skips reached during meteo creation file.");
                     return false;
                  }

                  if (isFirstInstant) //first file in the list
                  {
                     Console.WriteLine("Going backward...");
                     endsim = startsim.AddHours(-1);
                     startsim = startsim.AddHours(-6);

                     continue;
                  }
                  else
                  {
                     Console.WriteLine("Skipping for the next file...");
                     startsim = endsim.AddHours(1);
                     endsim = startsim.AddHours(5);
                  }
               }
               else if (isFirstInstant && numberOfSkips > 0)
               {
                  numberOfSkips = 0;

                  startsim = simStart.AddHours(1);
                  endsim = startsim.AddHours(5);
               }
               else if (startsim > mre.sim.End)
               {
                  numberOfSkips = 0;
                  break;
               }
               else
               {
                  numberOfSkips = 0;
                  startsim = endsim.AddHours(1);
                  endsim = startsim.AddHours(5);
               }

               if (isFirstInstant && found_file)
                  isFirstInstant = false;
            }

            //Now the interpolated files are glued
            HDFGlue glueTool = new HDFGlue(filesToGlue);
            glueTool.AppName = root["glue.exe.name", "glue.exe"].AsString();
            glueTool.AppPath = root["glue.exe.path", @"..\tools\glue\"].AsString();
            glueTool.WorkingDirectory = root["glue.working.folder", @"..\tools\glue\"].AsString();
            glueTool.Output = outputPath + outputName;
            glueTool.Is3DFile = false;
            glueTool.ThrowExceptionOnError = true;

            Console.WriteLine("Gluing files...");

            if (glueTool.Glue() != 0)
            {
               Console.WriteLine("Glue failed.");
               return false;
            }

            //Delete all the files in the temp directory
            try
            {
               System.IO.DirectoryInfo directory = new DirectoryInfo(@"..\tools\interpolation\temp\");
               foreach (System.IO.FileInfo fileToDelete in directory.GetFiles())
                  fileToDelete.Delete();
            }
            catch (Exception ex)
            {
               Console.WriteLine("Was not possible to empty the temp directory due to an exception.");
               Console.WriteLine("Message returned was: {0}", ex.Message);
            }

            //Saves the created meteo file in the folder
            if (!FileTools.CopyFile(root["local.boundary.conditions"].AsFilePath(), generalBoundary, "meteo.hdf5", Files.CopyOptions.OVERWRIGHT))
            {
               Console.WriteLine("Was not possible to copy the meteo file to the meteo storage folder.");
               return false;
            }

            return true;
             }
             catch
             {
            return false;
             }
        }
        public ScriptV1()
        {
            exception_raised = false;

             tool = new ExternalApp();
             files_to_glue = new List<FileName>();
             replace_list = new Dictionary<string, string>();
             tools_blocks = new Dictionary<string, ConfigNode>();
             practices_block = null;

             tool_fillmatrix_info = null;
             tool_interpolate_info = null;
             tool_glue_info = null;
             tool_jointimeseries_info = null;

             meteo_block = null;
             meteo_sources_blocks = null;
             meteo_file_name = null;
             meteo_backup_files = false;
             meteo_store_path = null;
             meteo_backup_interpolated_files = false;
             meteo_store_int_path = null;
             meteo_interpolation_path = null;
             meteo_max_contiguous_skips = 8;
             meteo_task = false;
             tool_glue = new HDFGlue();

             standard_names = true;
        }
        protected bool GlueFilesAsMM5(FileName file_to_process)
        {
            bool result = true;
             bool glue_now = true;
             string output;

             try
             {

            //if (last_stored_path != store_path.Path)
            //{
            //   last_stored_path = store_path.Path;
            //   actual_index = 1;
            //}
            if ((actual_index >= 2 && actual_index <= 7 && first_glue_as_mm5) ||
               (actual_index >= 8 && actual_index <= 13 && second_glue_as_mm5))
            {
               string file_name;

               if (process_hdf)
                  file_name = file_to_process.Path + file_to_process.Name.Substring(0, file_to_process.Name.Length - output_tag.Length) + "." + file_to_process.Extension;
               else
                  file_name = file_to_process.FullPath;

               files_to_glue.Add(new FileName(file_name));
            }
            else
               files_to_glue.Clear();

            //actual_index++;

            if (files_to_glue.Count == 6)
            {
               string path;

               if (glue_on_separeted_folders)
                  path = store_glue_folder.Path + last_store_name;
               else
                  path = store_glue_folder.Path;

               //Console.WriteLine("{0}", store_glue_folder.Path);
               //Console.WriteLine("{0}", last_store_name);
               //Console.WriteLine("{0}", files_to_glue[0]);
               //Console.WriteLine("{0}", files_to_glue[0].Substring(files_to_glue[0].Length-10-output_tag.Length, 10));

               //string first = files_to_glue[0].Name.Substring(files_to_glue[0].Name.Length-10-output_tag.Length, 10);
               //string last = files_to_glue[5].Name.Substring(files_to_glue[5].Name.Length-10-output_tag.Length, 10);

               string first = files_to_glue[0].Name.Substring(files_to_glue[0].Name.Length - 10, 10);
               string last = files_to_glue[5].Name.Substring(files_to_glue[5].Name.Length - 10, 10);

               output = path + files_to_glue[0].Name.Substring(0, files_to_glue[0].Name.Length - 21) + "_" + first + "_" + last + ".hdf5";

               if (!System.IO.Directory.Exists(path))
                  System.IO.Directory.CreateDirectory(path);

               if (!replace_glued_files)
                  if (System.IO.File.Exists(output))
                     glue_now = false;

               files_temp.Clear();
               foreach (FileName f in files_to_glue)
               {
                  files_temp.Add(f.FullPath);
               }

               HDFGlue glueTool = new HDFGlue(files_temp);

               glueTool.AppName = glue_exe.FullName;
               glueTool.AppPath = glue_exe.Path;
               glueTool.WorkingDirectory = working_folder.Path;
               glueTool.Output = output;
               glueTool.Is3DFile = false;
               glueTool.ThrowExceptionOnError = false;
               glueTool.Verbose = false;

               if (glue_now)
               {
                  Console.WriteLine("    ----------------------------------");
                  Console.Write("    Gluing actual folder files as mm5.");

                  if (glueTool.Glue() != 0)
                     result = false;

                  if (result)
                     Console.WriteLine("[OK]");
                  else
                     Console.WriteLine("[FAIL]");
               }

               files_to_glue.Clear();
               store_files_for_glue = false;

               if (result && glue_all)
               {
                  if (first_glue)
                  {
                     Console.Write("    Gluing final file.................");
                     System.IO.File.Copy(output, store_glue_folder.Path + "glued.hdf5", true);
                     Console.WriteLine("[OK]");
                     first_glue = false;
                  }
                  else
                  {
                     Console.Write("    Gluing final file.................");
                     files_temp.Clear();
                     files_temp.Add(store_glue_folder.Path + "glued.hdf5");
                     files_temp.Add(output);
                     glueTool.FilesToGlue = files_temp;
                     glueTool.Output = working_folder.Path + "new_glued.hdf5";

                     if (glueTool.Glue() != 0)
                        result = false;

                     if (result)
                        Console.WriteLine("[OK]");
                     else
                        Console.WriteLine("[FAIL]");

                     if (result)
                     {
                        Console.Write("    Replacing final file..............");
                        System.IO.File.Copy(working_folder.Path + "new_glued.hdf5", store_glue_folder.Path + "glued.hdf5", true);
                        Console.WriteLine("[OK]");
                     }

                     files_to_glue.Clear();
                  }
               }
               Console.WriteLine("    ----------------------------------");
            }
             }
             catch (Exception ex)
             {
            last_exception = ex;
            files_to_glue.Clear();
            Console.WriteLine("[FAIL]");
            Console.WriteLine("    ----------------------------------");
            result = false;
             }

             return result;
        }