My Project
Loading...
Searching...
No Matches
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, // =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