LogiHEAD: Identify Selection of Array Elements

Information mostly gleaned from LibECL's ecl_kw_magic.h.
This commit is contained in:
Bård Skaflestad
2019-04-02 18:09:25 +02:00
parent eb30732444
commit 9fe4b23dcb
3 changed files with 116 additions and 34 deletions

View File

@@ -568,6 +568,7 @@ if(ENABLE_ECL_OUTPUT)
opm/output/eclipse/VectorItems/connection.hpp
opm/output/eclipse/VectorItems/group.hpp
opm/output/eclipse/VectorItems/intehead.hpp
opm/output/eclipse/VectorItems/logihead.hpp
opm/output/eclipse/VectorItems/msw.hpp
opm/output/eclipse/VectorItems/well.hpp
opm/output/eclipse/AggregateGroupData.hpp

View File

@@ -0,0 +1,48 @@
/*
Copyright (c) 2019 Equinor ASA
This file is part of the Open Porous Media project (OPM).
OPM is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
OPM is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with OPM. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef OPM_OUTPUT_ECLIPSE_VECTOR_LOGIHEAD_HPP
#define OPM_OUTPUT_ECLIPSE_VECTOR_LOGIHEAD_HPP
#include <vector>
namespace Opm { namespace RestartIO { namespace Helpers { namespace VectorItems {
// This is a subset of the items in src/opm/output/eclipse/LogiHEAD.cpp .
// Promote items from that list to this in order to make them public.
enum logihead : std::vector<bool>::size_type {
IsLiveOil = 0, // Oil phase w/dissolved gas
IsWetGas = 1, // Gas phase w/vaporised oil
DirKr = 2, // Directional relative permeability
E100RevKr = 3, // Reversible rel. perm. (E100)
E100Radial = 4, // Radial model (E100)
E300Radial = 3, // Radial model (E300, others)
E300RevKr = 4, // Reversible rel. perm. (E300, others)
Hyster = 6, // Enable hysteresis
DualPoro = 14, // Enable dual porosity
EndScale = 16, // Enable end-point scaling
DirEPS = 17, // Directional end-point scaling
RevEPS = 18, // Reversible end-point scaling
AltEPS = 19, // Alternative (3-pt) end-point scaling
ConstCo = 38, // Constant oil compressibility (PVCDO)
HasMSWells = 75, // Whether or not model has MS Wells.
};
}}}} // Opm::RestartIO::Helpers::VectorItems
#endif // OPM_OUTPUT_ECLIPSE_VECTOR_LOGIHEAD_HPP

View File

@@ -1,16 +1,39 @@
#include <opm/output/eclipse/LogiHEAD.hpp>
#include <opm/output/eclipse/VectorItems/logihead.hpp>
#include <utility>
#include <vector>
namespace VI = ::Opm::RestartIO::Helpers::VectorItems;
enum index : std::vector<int>::size_type {
lh_000 = 0 , // TRUE
lh_001 = 1 , // TRUE
lh_002 = 2 , // FALSE
lh_003 = 3 , // FALSE Flag set to FALSE for a non-radial model, TRUE for a radial model (ECLIPSE 300 and other simulators)
lh_004 = 4 , // FALSE Flag set to FALSE for a non-radial model, TRUE for a radial model (ECLIPSE 100)
// Flag to signify live oil (dissolved gas) PVT
IsLiveOil = VI::logihead::IsLiveOil,
// Flag to signify wet gas (vaporised oil) PVT
IsWetGas = VI::logihead::IsWetGas,
// Flag to signify directional relative permeability.
DirKr = VI::logihead::DirKr,
// ECLIPSE 100 flag for reversible rel.perm.
E100RevKr = VI::logihead::E100RevKr,
// ECLIPSE 100 flag for radial geometry.
E100Radial = VI::logihead::E100Radial,
// ECLIPSE 300 flag for radial geometry.
E300Radial = VI::logihead::E300Radial,
// ECLIPSE 300 flag for reversible rel.perm.
E300RevKr = VI::logihead::E300RevKr,
lh_005 = 5 , // FALSE
lh_006 = 6 , // FALSE Flag set to FALSE when no hysteresis, TRUE when hysteresis option is used
// Flag to enable hysteresis
Hyster = VI::logihead::Hyster,
lh_007 = 7 , // FALSE
lh_008 = 8 , // FALSE
lh_009 = 9 , // FALSE
@@ -18,12 +41,24 @@ lh_010 = 10 , // FALSE
lh_011 = 11 , // FALSE
lh_012 = 12 , // FALSE
lh_013 = 13 , // FALSE
lh_014 = 14 , // FALSE Flag for dual porosity model
// Flag to activate dual porosity.
DualPoro = VI::logihead::DualPoro,
lh_015 = 15 , // FALSE
lh_016 = 16 , // TRUE
lh_017 = 17 , // FALSE
lh_018 = 18 , // TRUE
lh_019 = 19 , //
// Flag to activate saturation function end-point scaling.
EndScale = VI::logihead::EndScale,
// Flag to activate directional end-point scaling.
DirEPS = VI::logihead::DirEPS,
// Flag to activate reversible end-point scaling. Typically True.
RevEPS = VI::logihead::RevEPS, // TRUE
// Flag to activate alternative end-point scaling (3-pt option)
AltEPS = VI::logihead::AltEPS,
lh_020 = 20 , // FALSE
lh_021 = 21 , // FALSE
lh_022 = 22 , // FALSE
@@ -42,7 +77,10 @@ lh_034 = 34 , // FALSE
lh_035 = 35 , // FALSE
lh_036 = 36 , // FALSE
lh_037 = 37 , //
lh_038 = 38 , // FALSE
// Flag to signify constant oil compressibility
ConstCo = VI::logihead::ConstCo,
lh_039 = 39 , // FALSE
lh_040 = 40 , // FALSE
lh_041 = 41 , // FALSE
@@ -79,7 +117,10 @@ lh_071 = 71 , // FALSE
lh_072 = 72 , // FALSE
lh_073 = 73 , // FALSE
lh_074 = 74 , // FALSE
lh_075 = 75 , // TRUE If segmented well model is used
// TRUE if segmented well model is used
HasMSWells = VI::logihead::HasMSWells,
lh_076 = 76 , // TRUE
lh_077 = 77 , // FALSE
lh_078 = 78 , // FALSE
@@ -126,10 +167,10 @@ lh_118 = 118 , // FALSE
lh_119 = 119 , // FALSE
lh_120 = 120 , // FALSE
// ---------------------------------------------------------------------
// ---------------------------------------------------------------------
// ---------------------------------------------------------------------
// ---------------------------------------------------------------------
LOGIHEAD_NUMBER_OF_ITEMS // MUST be last element of enum.
LOGIHEAD_NUMBER_OF_ITEMS // MUST be last element of enum.
};
// =====================================================================
@@ -142,25 +183,17 @@ Opm::RestartIO::LogiHEAD::LogiHEAD()
Opm::RestartIO::LogiHEAD&
Opm::RestartIO::LogiHEAD::
variousParam(const bool e300_radial, const bool e100_radial, const int nswlmx, const bool enableHyster)
variousParam(const bool e300_radial,
const bool e100_radial,
const int nswlmx,
const bool enableHyster)
{
this -> data_[lh_000] = true;
this -> data_[lh_001] = true;
this -> data_[lh_003] = e300_radial;
this -> data_[lh_004] = e100_radial;
this -> data_[lh_006] = enableHyster;
//this -> data_[lh_016] = true;
//this -> data_[lh_018] = true;
//this -> data_[lh_031] = true;
//this -> data_[lh_044] = true;
this -> data_[lh_075] = nswlmx >= 1; // True if MS Wells exist.
//this -> data_[lh_076] = true;
//this -> data_[lh_087] = true;
//this -> data_[lh_099] = true;
//this -> data_[lh_113] = true;
//this -> data_[lh_114] = true;
//this -> data_[lh_115] = true;
//this -> data_[lh_117] = true;
this -> data_[IsLiveOil] = true;
this -> data_[IsWetGas] = true;
this -> data_[E300Radial] = e300_radial;
this -> data_[E100Radial] = e100_radial;
this -> data_[Hyster] = enableHyster;
this -> data_[HasMSWells] = nswlmx >= 1; // True if MS Wells exist.
return *this;
}