opm-common
FromWSEG.hpp
1 /*
2  Copyright 2020 Equinor ASA.
3 
4  This file is part of the Open Porous Media project (OPM).
5 
6  OPM is free software: you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation, either version 3 of the License, or
9  (at your option) any later version.
10 
11  OPM is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  GNU General Public License for more details.
15 
16  You should have received a copy of the GNU General Public License
17  along with OPM. If not, see <http://www.gnu.org/licenses/>.
18 */
19 
20 
21 #ifndef FROM_WSEG_HPP
22 #define FROM_WSEG_HPP
23 
24 #include <opm/input/eclipse/Deck/DeckKeyword.hpp>
25 
26 #include <map>
27 #include <string>
28 #include <vector>
29 
30 namespace Opm {
31 
32 template<class ICD>
33 std::map<std::string, std::vector<std::pair<int, ICD> > >
34 fromWSEG(const DeckKeyword& wseg) {
35  std::map<std::string, std::vector<std::pair<int, ICD> > > res;
36 
37  for (const DeckRecord &record : wseg) {
38  const std::string well_name = record.getItem("WELL").getTrimmedString(0);
39 
40  const int start_segment = record.getItem("SEGMENT1").get<int>(0);
41  const int end_segment = record.getItem("SEGMENT2").get<int>(0);
42 
43  if (start_segment < 2 || end_segment < 2 || end_segment < start_segment) {
44  const std::string message = "Segment numbers " + std::to_string(start_segment) + " and "
45  + std::to_string(end_segment) + " specified in WSEGSICD for well " +
46  well_name
47  + " are illegal ";
48  throw std::invalid_argument(message);
49  }
50 
51  const ICD spiral_icd(record);
52  for (int seg = start_segment; seg <= end_segment; seg++) {
53  res[well_name].push_back(std::make_pair(seg, spiral_icd));
54  }
55  }
56  return res;
57 }
58 
59 }
60 
61 #endif
This class implements a small container which holds the transmissibility mulitpliers for all the face...
Definition: Exceptions.hpp:30