19 #ifndef OPM_IO_ESMRY_HPP
20 #define OPM_IO_ESMRY_HPP
25 #include <unordered_map>
30 #include <opm/common/utility/FileSystem.hpp>
31 #include <opm/common/utility/TimeService.hpp>
32 #include <opm/io/eclipse/SummaryNode.hpp>
34 namespace Opm {
namespace EclIO {
36 using ArrSourceEntry = std::tuple<std::string, std::string, int, uint64_t>;
37 using TimeStepEntry = std::tuple<int, int, uint64_t>;
38 using RstEntry = std::tuple<std::string, int>;
45 explicit ESmry(
const std::string& filename,
bool loadBaseRunData=
false);
47 int numberOfVectors()
const {
return nVect; }
49 bool hasKey(
const std::string& key)
const;
51 const std::vector<float>& get(
const std::string& name)
const;
52 const std::vector<float>& get(
const SummaryNode& node)
const;
53 std::vector<time_point> dates()
const;
55 std::vector<float> get_at_rstep(
const std::string& name)
const;
56 std::vector<float> get_at_rstep(
const SummaryNode& node)
const;
57 std::vector<time_point> dates_at_rstep()
const;
59 void LoadData(
const std::vector<std::string>& vectList)
const;
60 void LoadData()
const;
62 bool make_esmry_file();
64 time_point startdate()
const {
return startdat; }
66 const std::vector<std::string>& keywordList()
const;
67 std::vector<std::string> keywordList(
const std::string& pattern)
const;
68 const std::vector<SummaryNode>& summaryNodeList()
const;
70 int timestepIdxAtReportstepStart(
const int reportStep)
const;
72 size_t numberOfTimeSteps()
const {
return nTstep; }
74 const std::string& get_unit(
const std::string& name)
const;
75 const std::string& get_unit(
const SummaryNode& node)
const;
77 void write_rsm(std::ostream&)
const;
78 void write_rsm_file(std::optional<filesystem::path> = std::nullopt)
const;
80 bool all_steps_available();
84 filesystem::path inputFileName;
85 RstEntry restart_info;
87 int nI, nJ, nK, nSpecFiles;
91 std::vector<bool> formattedFiles;
92 std::vector<std::string> dataFileList;
93 mutable std::vector<std::vector<float>> vectorData;
94 mutable std::vector<bool> vectorLoaded;
95 std::vector<TimeStepEntry> timeStepList;
96 std::vector<TimeStepEntry> miniStepList;
97 std::vector<std::map<int, int>> arrayPos;
98 std::vector<std::string> keyword;
99 std::map<std::string, int> keyword_index;
100 std::vector<int> nParamsSpecFile;
102 std::vector<std::vector<std::string>> keywordListSpecFile;
104 std::vector<int> seqIndex;
105 std::vector<int> mini_steps;
107 void ijk_from_global_index(
int glob,
int &i,
int &j,
int &k)
const;
109 std::vector<SummaryNode> summaryNodes;
110 std::unordered_map<std::string, std::string> kwunits;
114 std::vector<std::string> checkForMultipleResultFiles(
const filesystem::path& rootN,
bool formatted)
const;
116 void getRstString(
const std::vector<std::string>& restartArray,
117 filesystem::path& pathRst,
118 filesystem::path& rootN)
const;
120 void updatePathAndRootName(filesystem::path& dir, filesystem::path& rootN)
const;
123 std::string makeKeyString(
const std::string& keyword,
const std::string& wgname,
int num,
124 const std::optional<Opm::EclIO::lgr_info>
lgr_info)
const;
126 std::string unpackNumber(
const SummaryNode&)
const;
130 void write_block(std::ostream &,
bool write_dates,
const std::vector<std::string>& time_column,
const std::vector<SummaryNode>&)
const;
132 template <
typename T>
133 std::vector<T> rstep_vector(
const std::vector<T>& full_vector)
const {
134 std::vector<T> result;
135 result.reserve(seqIndex.size());
137 for (
const auto& ind : seqIndex){
138 result.push_back(full_vector[ind]);
144 std::vector<std::tuple <std::string, uint64_t>> getListOfArrays(std::string filename,
bool formatted);
145 std::vector<int> makeKeywPosVector(
int speInd)
const;
146 std::string read_string_from_disk(std::fstream& fileH, uint64_t size)
const;
148 void read_ministeps_from_disk();
149 int read_ministep_formatted(std::fstream& fileH);
154 inline std::ostream& operator<<(std::ostream& os,
const Opm::EclIO::ESmry& smry) {
This class implements a small container which holds the transmissibility mulitpliers for all the face...
Definition: Exceptions.hpp:29
Definition: SummaryNode.hpp:37
Definition: SummaryNode.hpp:32