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
26namespace 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