opm-common
FilterCake.hpp
1 /*
2  Copyright 2023 Equinor.
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 #ifndef OPM_FILTERCAKE_HPP
21 #define OPM_FILTERCAKE_HPP
22 
23 #include <string>
24 #include <optional>
25 
26 namespace Opm {
27 
28  class DeckRecord;
29  class KeywordLocation;
30 
31  struct FilterCake {
32 
33  enum class FilterCakeGeometry {
34  LINEAR,
35  RADIAL,
36  LINRAD,
37  NONE,
38  };
39 
40  static FilterCakeGeometry filterCakeGeometryFromString(const std::string& str, const KeywordLocation& location);
41  static std::string filterCakeGeometryToString(const FilterCakeGeometry& geometry);
42 
43  FilterCakeGeometry geometry{FilterCakeGeometry::NONE};
44  double perm{0.};
45  double poro{0.};
46  std::optional<double> radius;
47  std::optional<double> flow_area;
48  // skin factor multiplier
49  // it is controlled by keyword WINJCLN
50  mutable double sf_multiplier{1.};
51 
52  FilterCake() = default;
53 
54  explicit FilterCake(const DeckRecord& record, const KeywordLocation& location);
55 
56  template<class Serializer>
57  void serializeOp(Serializer& serializer) {
58  serializer(geometry);
59  serializer(perm);
60  serializer(poro);
61  serializer(radius);
62  serializer(flow_area);
63  serializer(sf_multiplier);
64  }
65 
66  static FilterCake serializationTestObject();
67 
68  bool operator==(const FilterCake& other) const;
69 
70  void applyCleanMultiplier(const double factor);
71 
72  static std::string filterCakeToString(const FilterCake& fc);
73  };
74 
75 }
76 
77 #endif //OPM_FILTERCAKE_HPP
Definition: KeywordLocation.hpp:27
This class implements a small container which holds the transmissibility mulitpliers for all the face...
Definition: Exceptions.hpp:30
Definition: FilterCake.hpp:31
Definition: DeckRecord.hpp:32
Class for (de-)serializing.
Definition: Serializer.hpp:94