My Project
aquifer.hpp
1 /*
2  Copyright (c) 2021 Equinor ASA
3  Copyright (c) 2019 Equinor ASA
4 
5  This file is part of the Open Porous Media project (OPM).
6 
7  OPM is free software: you can redistribute it and/or modify
8  it under the terms of the GNU General Public License as published by
9  the Free Software Foundation, either version 3 of the License, or
10  (at your option) any later version.
11 
12  OPM is distributed in the hope that it will be useful,
13  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  GNU General Public License for more details.
16 
17  You should have received a copy of the GNU General Public License
18  along with OPM. If not, see <http://www.gnu.org/licenses/>.
19 */
20 
21 #ifndef OPM_OUTPUT_ECLIPSE_VECTOR_AQUIFER_HPP
22 #define OPM_OUTPUT_ECLIPSE_VECTOR_AQUIFER_HPP
23 
24 #include <vector>
25 
26 namespace Opm { namespace RestartIO { namespace Helpers { namespace VectorItems {
27 
28  namespace IAnalyticAquifer {
29  enum index : std::vector<int>::size_type {
30  NumAquiferConn = 0, // Number of active aquifer connections for this aquifer
31  WatPropTable = 1, // PVT number (ACUCT(10) or AQUFETP(7))
32 
33  CTInfluenceFunction = 9, // AQUCT(11)
34  TypeRelated1 = 10, // =1 for CT, =0 for FETP
35 
36  Unknown_1 = 11, // Unknown item. =1 in all cases seen thus far.
37  };
38 
39  namespace Value {
40  enum ModelType : int {
41  Fetkovich = 0,
42  CarterTracy = 1,
43  };
44  } // Value
45  } // IAnalyticAquifer
46 
47  namespace IAnalyticAquiferConn {
48  enum index : std::vector<int>::size_type {
49  Index_I = 0, // One-based I index of connecting cell
50  Index_J = 1, // One-based J index of connecting cell
51  Index_K = 2, // One-based K index of connecting cell
52  ActiveIndex = 3, // One-based columnar active index of connecting cell
53  FaceDirection = 4, // Direction of connecting face
54  };
55 
56  namespace Value {
57  enum FaceDirection {
58  IMinus = 1, IPlus = 2, JMinus = 3, JPlus = 4, KMinus = 5, KPlus = 6,
59  };
60  } // Value
61  } // IAnalyticAquiferConn
62 
63  namespace INumericAquifer {
64  enum index : std::vector<int>::size_type {
65  AquiferID = 0, // ID of numeric aquifer
66  Cell_I = 1, // I coordinate of aquifer cell
67  Cell_J = 2, // J coordinate of aquifer cell
68  Cell_K = 3, // K coordinate of aquifer cell
69  PVTTableID = 4, // PVT Table ID of numeric aquifer
70  SatFuncID = 5, // Saturation function ID of numeric aquifer
71  };
72  } // INumericAquifer
73 
74  namespace RNumericAquifer {
75  enum index : std::vector<double>::size_type {
76  Area = 0, // Aquifer inflow area, AQUNUM(5)
77  Length = 1, // Aquifer length, AQUNUM(6)
78  Porosity = 2, // Aquifer porosity, AQUNUM(7)
79  Permeability = 3, // Aquifer permeability, AQUNUM(8)
80  Depth = 4, // Aquifer depth, AQUNUM(9)
81  Pressure = 5, // Aquifer pressure, AQUNUM(10)
82 
83  Unknown_1 = 6, // Unknown item, = 1.0
84  Unknown_2 = 7, // Unknown item, = 1.0
85  Unknown_3 = 8, // Unknown item, = 1.0
86 
87  PoreVolume = 9, // Total aquifer pore-volume (= Area * Length * Porosity)
88 
89  FlowRate = 10, // Aquifer inflow rate (ANQR:N)
90  ProdVolume = 11, // Total liquid volume produced from aquifer (AQNT:N)
91  DynPressure = 12, // Dynamic aquifer pressure (ANQP:N)
92  };
93  } // RNumericAquifer
94 
95  namespace SAnalyticAquifer {
96  enum index : std::vector<float>::size_type {
97  Compressibility = 0, // Total aquifer compressibility (AQUCT(6), AQUFETP(5))
98 
99  FetInitVol = 1, // Initial aquifer volume (AQUFETP(4))
100  FetProdIndex = 2, // Aquifer productivity index (AQUFETP(6))
101  FetTimeConstant = 3, // Fetkovich Aquifer time constant (Compressibility * InitVol / ProdIndex)
102 
103  CTRadius = 1, // CT aquifer external radius (AQUCT(7))
104  CTPermeability = 2, // CT aquifer permeability (AQUCT(4))
105  CTPorosity = 3, // CT aquifer porosity (AQUCT(5))
106 
107  InitPressure = 4, // Initial aquifer pressure (AQUCT(3), AQUFETP(3))
108  DatumDepth = 5, // Aquifer datum depth (AQUCT(2), AQUFETP(2))
109 
110  CTThickness = 6, // CT aquifer thickness (AQUCT(8))
111  CTAngle = 7, // CT aquifer angle of influence (AQUCT(9) / 360.0)
112  CTWatMassDensity = 8, // Water density at reservoir conditions
113  CTWatViscosity = 9, // Water viscosity at reservoir conditions
114  };
115  } // SAnalyticAquifer
116 
117  namespace SAnalyticAquiferConn {
118  enum index : std::vector<float>::size_type {
119  InfluxFraction = 0, // Connection's fraction of total aquifer influx coefficient
120  FaceAreaToInfluxCoeff = 1, // Connection's effective face area divided by aquifer's total influx coefficient
121  };
122  } // SAnalyticAquiferConn
123 
124  namespace XAnalyticAquifer {
125  enum index : std::vector<double>::size_type {
126  FlowRate = 0, // Aquifer rate (AAQR:N)
127  Pressure = 1, // Dynamic aquifer pressure (AAQP:N)
128  ProdVolume = 2, // Liquid volume produced from aquifer (into reservoir, AAQT:N)
129  TotalInfluxCoeff = 3, // Total aquifer influx coefficient across all aquifer connections
130 
131  CTRecipTimeConst = 4, // Reciprocal time constant for CT aquifer
132  CTInfluxConstant = 5, // Influx constant "beta" for CT aquifer
133 
134  CTDimensionLessTime = 8, // Dimensionless time for CT aquifer (AAQTD:N)
135  CTDimensionLessPressure = 9, // Dimensionless pressure for CT aquifer (AAQPD:N)
136  };
137  } // XAnalyticAquifer
138 
139 }}}} // Opm::RestartIO::Helpers::VectorItems
140 
141 #endif // OPM_OUTPUT_ECLIPSE_VECTOR_AQUIFER_HPP
This class implements a small container which holds the transmissibility mulitpliers for all the face...
Definition: Exceptions.hpp:29