opm-common
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, // =0 for FETP, =1 for CT, =2 for FLUX
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  ConstantFlux = 2,
44  };
45  } // Value
46  } // IAnalyticAquifer
47 
48  namespace IAnalyticAquiferConn {
49  enum index : std::vector<int>::size_type {
50  Index_I = 0, // One-based I index of connecting cell
51  Index_J = 1, // One-based J index of connecting cell
52  Index_K = 2, // One-based K index of connecting cell
53  ActiveIndex = 3, // One-based columnar active index of connecting cell
54  FaceDirection = 4, // Direction of connecting face
55  };
56 
57  namespace Value {
58  enum FaceDirection {
59  IMinus = 1, IPlus = 2, JMinus = 3, JPlus = 4, KMinus = 5, KPlus = 6,
60  };
61  } // Value
62  } // IAnalyticAquiferConn
63 
64  namespace INumericAquifer {
65  enum index : std::vector<int>::size_type {
66  AquiferID = 0, // ID of numeric aquifer
67  Cell_I = 1, // I coordinate of aquifer cell
68  Cell_J = 2, // J coordinate of aquifer cell
69  Cell_K = 3, // K coordinate of aquifer cell
70  PVTTableID = 4, // PVT Table ID of numeric aquifer
71  SatFuncID = 5, // Saturation function ID of numeric aquifer
72  };
73  } // INumericAquifer
74 
75  namespace RNumericAquifer {
76  enum index : std::vector<double>::size_type {
77  Area = 0, // Aquifer inflow area, AQUNUM(5)
78  Length = 1, // Aquifer length, AQUNUM(6)
79  Porosity = 2, // Aquifer porosity, AQUNUM(7)
80  Permeability = 3, // Aquifer permeability, AQUNUM(8)
81  Depth = 4, // Aquifer depth, AQUNUM(9)
82  Pressure = 5, // Aquifer pressure, AQUNUM(10)
83 
84  Unknown_1 = 6, // Unknown item, = 1.0
85  Unknown_2 = 7, // Unknown item, = 1.0
86  Unknown_3 = 8, // Unknown item, = 1.0
87 
88  PoreVolume = 9, // Total aquifer pore-volume (= Area * Length * Porosity)
89 
90  FlowRate = 10, // Aquifer inflow rate (ANQR:N)
91  ProdVolume = 11, // Total liquid volume produced from aquifer (AQNT:N)
92  DynPressure = 12, // Dynamic aquifer pressure (ANQP:N)
93  };
94  } // RNumericAquifer
95 
96  namespace SAnalyticAquifer {
97  enum index : std::vector<float>::size_type {
98  Compressibility = 0, // Total aquifer compressibility (AQUCT(6), AQUFETP(5))
99 
100  ConstFluxValue = 0, // Constant flux aquifer's flux value (AQUFLUX(2))
101 
102  FetInitVol = 1, // Initial aquifer volume (AQUFETP(4))
103  FetProdIndex = 2, // Aquifer productivity index (AQUFETP(6))
104  FetTimeConstant = 3, // Fetkovich Aquifer time constant (Compressibility * InitVol / ProdIndex)
105 
106  CTRadius = 1, // CT aquifer external radius (AQUCT(7))
107  CTPermeability = 2, // CT aquifer permeability (AQUCT(4))
108  CTPorosity = 3, // CT aquifer porosity (AQUCT(5))
109 
110  InitPressure = 4, // Initial aquifer pressure (AQUCT(3), AQUFETP(3))
111  DatumDepth = 5, // Aquifer datum depth (AQUCT(2), AQUFETP(2))
112 
113  CTThickness = 6, // CT aquifer thickness (AQUCT(8))
114  CTAngle = 7, // CT aquifer angle of influence (AQUCT(9) / 360.0)
115  CTWatMassDensity = 8, // Water density at reservoir conditions
116  CTWatViscosity = 9, // Water viscosity at reservoir conditions
117  };
118  } // SAnalyticAquifer
119 
120  namespace SAnalyticAquiferConn {
121  enum index : std::vector<float>::size_type {
122  InfluxFraction = 0, // Connection's fraction of total aquifer influx coefficient
123  FaceAreaToInfluxCoeff = 1, // Connection's effective face area divided by aquifer's total influx coefficient
124  };
125  } // SAnalyticAquiferConn
126 
127  namespace XAnalyticAquifer {
128  enum index : std::vector<double>::size_type {
129  FlowRate = 0, // Aquifer rate (AAQR:N)
130  Pressure = 1, // Dynamic aquifer pressure (AAQP:N)
131  ProdVolume = 2, // Liquid volume produced from aquifer (into reservoir, AAQT:N)
132  TotalInfluxCoeff = 3, // Total aquifer influx coefficient across all aquifer connections
133 
134  CTRecipTimeConst = 4, // Reciprocal time constant for CT aquifer
135  CTInfluxConstant = 5, // Influx constant "beta" for CT aquifer
136 
137  CTDimensionLessTime = 8, // Dimensionless time for CT aquifer (AAQTD:N)
138  CTDimensionLessPressure = 9, // Dimensionless pressure for CT aquifer (AAQPD:N)
139  };
140  } // XAnalyticAquifer
141 
142 }}}} // Opm::RestartIO::Helpers::VectorItems
143 
144 #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:30