My Project
Loading...
Searching...
No Matches
Aquifetp.hpp
1/*
2 Copyright (C) 2017 TNO
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_AQUIFERFETP_HPP
21#define OPM_AQUIFERFETP_HPP
22
23/*
24 The Aquiferfetp which stands for AquiferFetkovich is a data container object meant to hold the data for the fetkovich aquifer model.
25 This includes the logic for parsing as well as the associated tables. It is meant to be used by opm-grid and opm-simulators in order to
26 implement the Fetkovich analytical aquifer model in OPM Flow.
27*/
28
29#include <cstddef>
30#include <optional>
31#include <vector>
32
33namespace Opm {
34 class Deck;
35 class DeckRecord;
36 class TableManager;
37}
38
39namespace Opm { namespace RestartIO {
40 class RstAquifer;
41}} // Opm::RestartIO
42
43namespace Opm {
44
45class Aquifetp {
46 public:
47
49 {
50 friend class Aquifetp;
51
52 AQUFETP_data() = default;
53 AQUFETP_data(const DeckRecord& record, const TableManager& tables);
54 AQUFETP_data(const int aquiferID_,
55 const int pvttableID_,
56 const double J_,
57 const double C_t_,
58 const double V0_,
59 const double d0_,
60 const double p0_,
61 const double t0_);
62
63 int aquiferID{};
64 int pvttableID{};
65
66 double prod_index{};
67 double total_compr{};
68 double initial_watvolume{};
69 double datum_depth{};
70
71 std::optional<double> initial_pressure{};
72 std::optional<double> initial_temperature{};
73
74 static AQUFETP_data serializationTestObject();
75
76 double timeConstant() const { return this->time_constant_; }
77 double waterDensity() const { return this->water_density_; }
78 double waterViscosity() const { return this->water_viscosity_; }
79
80 bool operator==(const AQUFETP_data& other) const;
81
82 void finishInitialisation(const TableManager& tables);
83
84 template<class Serializer>
85 void serializeOp(Serializer& serializer)
86 {
87 serializer(this->aquiferID);
88 serializer(this->pvttableID);
89 serializer(this->prod_index);
90 serializer(this->total_compr);
91 serializer(this->initial_watvolume);
92 serializer(this->datum_depth);
93 serializer(this->initial_pressure);
94 serializer(this->initial_temperature);
95 serializer(this->time_constant_);
96 serializer(this->water_density_);
97 serializer(this->water_viscosity_);
98 }
99
100 private:
101 double time_constant_{};
102 double water_density_{};
103 double water_viscosity_{};
104 };
105
106 Aquifetp() = default;
107 Aquifetp(const TableManager& tables, const Deck& deck);
108 explicit Aquifetp(const std::vector<Aquifetp::AQUFETP_data>& data);
109
110 void loadFromRestart(const RestartIO::RstAquifer& rst,
111 const TableManager& tables);
112
113 static Aquifetp serializationTestObject();
114
115 const std::vector<Aquifetp::AQUFETP_data>& data() const;
116
117 std::size_t size() const;
118 std::vector<Aquifetp::AQUFETP_data>::const_iterator begin() const;
119 std::vector<Aquifetp::AQUFETP_data>::const_iterator end() const;
120 bool operator==(const Aquifetp& other) const;
121
122 bool hasAquifer(const int aquID) const;
123
124 template<class Serializer>
125 void serializeOp(Serializer& serializer)
126 {
127 serializer(m_aqufetp);
128 }
129
130private:
131 std::vector<Aquifetp::AQUFETP_data> m_aqufetp;
132};
133}
134
135
136#endif
Definition Aquifetp.hpp:45
Definition DeckRecord.hpp:32
Definition Deck.hpp:49
Definition aquifer.hpp:45
Class for (de-)serializing.
Definition Serializer.hpp:84
Definition TableManager.hpp:66
This class implements a small container which holds the transmissibility mulitpliers for all the face...
Definition Exceptions.hpp:30
Definition Aquifetp.hpp:49