Update opm-common based on 2020.04 branch

Use branch https://github.com/CeetronSolutions/opm-common/commits/windows-fixes-2020.04
Update from 34ff4827569bb04190743e7aae3404794ccd188a
This commit is contained in:
Magne Sjaastad 2020-08-28 08:14:56 +02:00
parent 011174153e
commit df2a6fb9d9
275 changed files with 4982 additions and 12846 deletions

View File

@ -100,11 +100,8 @@ if(ENABLE_ECL_INPUT)
src/opm/parser/eclipse/EclipseState/Schedule/Action/ActionValue.cpp src/opm/parser/eclipse/EclipseState/Schedule/Action/ActionValue.cpp
src/opm/parser/eclipse/EclipseState/Schedule/Action/ASTNode.cpp src/opm/parser/eclipse/EclipseState/Schedule/Action/ASTNode.cpp
src/opm/parser/eclipse/EclipseState/Schedule/Action/Condition.cpp src/opm/parser/eclipse/EclipseState/Schedule/Action/Condition.cpp
src/opm/parser/eclipse/EclipseState/Schedule/Action/State.cpp
src/opm/parser/eclipse/EclipseState/Schedule/ArrayDimChecker.cpp src/opm/parser/eclipse/EclipseState/Schedule/ArrayDimChecker.cpp
src/opm/parser/eclipse/EclipseState/Schedule/Events.cpp src/opm/parser/eclipse/EclipseState/Schedule/Events.cpp
src/opm/parser/eclipse/EclipseState/Schedule/GasLiftOpt.cpp
src/opm/parser/eclipse/EclipseState/Schedule/Group/GPMaint.cpp
src/opm/parser/eclipse/EclipseState/Schedule/Group/Group.cpp src/opm/parser/eclipse/EclipseState/Schedule/Group/Group.cpp
src/opm/parser/eclipse/EclipseState/Schedule/Group/GuideRate.cpp src/opm/parser/eclipse/EclipseState/Schedule/Group/GuideRate.cpp
src/opm/parser/eclipse/EclipseState/Schedule/Group/GuideRateConfig.cpp src/opm/parser/eclipse/EclipseState/Schedule/Group/GuideRateConfig.cpp
@ -118,12 +115,9 @@ if(ENABLE_ECL_INPUT)
src/opm/parser/eclipse/EclipseState/Schedule/MSW/Compsegs.cpp src/opm/parser/eclipse/EclipseState/Schedule/MSW/Compsegs.cpp
src/opm/parser/eclipse/EclipseState/Schedule/MSW/Segment.cpp src/opm/parser/eclipse/EclipseState/Schedule/MSW/Segment.cpp
src/opm/parser/eclipse/EclipseState/Schedule/MSW/WellSegments.cpp src/opm/parser/eclipse/EclipseState/Schedule/MSW/WellSegments.cpp
src/opm/parser/eclipse/EclipseState/Schedule/MSW/AICD.cpp src/opm/parser/eclipse/EclipseState/Schedule/MSW/updatingConnectionsWithSegments.cpp
src/opm/parser/eclipse/EclipseState/Schedule/MSW/SICD.cpp src/opm/parser/eclipse/EclipseState/Schedule/MSW/SpiralICD.cpp
src/opm/parser/eclipse/EclipseState/Schedule/MSW/Valve.cpp src/opm/parser/eclipse/EclipseState/Schedule/MSW/Valve.cpp
src/opm/parser/eclipse/EclipseState/Schedule/Network/Branch.cpp
src/opm/parser/eclipse/EclipseState/Schedule/Network/ExtNetwork.cpp
src/opm/parser/eclipse/EclipseState/Schedule/Network/Node.cpp
src/opm/parser/eclipse/EclipseState/Schedule/OilVaporizationProperties.cpp src/opm/parser/eclipse/EclipseState/Schedule/OilVaporizationProperties.cpp
src/opm/parser/eclipse/EclipseState/Schedule/RFTConfig.cpp src/opm/parser/eclipse/EclipseState/Schedule/RFTConfig.cpp
src/opm/parser/eclipse/EclipseState/Schedule/RPTConfig.cpp src/opm/parser/eclipse/EclipseState/Schedule/RPTConfig.cpp
@ -161,7 +155,6 @@ if(ENABLE_ECL_INPUT)
src/opm/parser/eclipse/EclipseState/Tables/TableColumn.cpp src/opm/parser/eclipse/EclipseState/Tables/TableColumn.cpp
src/opm/parser/eclipse/EclipseState/Tables/TableContainer.cpp src/opm/parser/eclipse/EclipseState/Tables/TableContainer.cpp
src/opm/parser/eclipse/EclipseState/Tables/TableIndex.cpp src/opm/parser/eclipse/EclipseState/Tables/TableIndex.cpp
src/opm/parser/eclipse/EclipseState/Tables/TLMixpar.cpp
src/opm/parser/eclipse/EclipseState/Tables/TableManager.cpp src/opm/parser/eclipse/EclipseState/Tables/TableManager.cpp
src/opm/parser/eclipse/EclipseState/Tables/TableSchema.cpp src/opm/parser/eclipse/EclipseState/Tables/TableSchema.cpp
src/opm/parser/eclipse/EclipseState/Tables/Tables.cpp src/opm/parser/eclipse/EclipseState/Tables/Tables.cpp
@ -169,7 +162,6 @@ if(ENABLE_ECL_INPUT)
src/opm/parser/eclipse/EclipseState/Tables/Rock2dtrTable.cpp src/opm/parser/eclipse/EclipseState/Tables/Rock2dtrTable.cpp
src/opm/parser/eclipse/EclipseState/Tables/PvtwsaltTable.cpp src/opm/parser/eclipse/EclipseState/Tables/PvtwsaltTable.cpp
src/opm/parser/eclipse/EclipseState/Tables/BrineDensityTable.cpp src/opm/parser/eclipse/EclipseState/Tables/BrineDensityTable.cpp
src/opm/parser/eclipse/EclipseState/Tables/RwgsaltTable.cpp
src/opm/parser/eclipse/EclipseState/Tables/SolventDensityTable.cpp src/opm/parser/eclipse/EclipseState/Tables/SolventDensityTable.cpp
src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQASTNode.cpp src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQASTNode.cpp
src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQParams.cpp src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQParams.cpp
@ -199,6 +191,7 @@ if(ENABLE_ECL_INPUT)
src/opm/parser/eclipse/Units/Dimension.cpp src/opm/parser/eclipse/Units/Dimension.cpp
src/opm/parser/eclipse/Units/UnitSystem.cpp src/opm/parser/eclipse/Units/UnitSystem.cpp
src/opm/parser/eclipse/Utility/Functional.cpp src/opm/parser/eclipse/Utility/Functional.cpp
src/opm/parser/eclipse/Utility/Stringview.cpp
) )
@ -343,7 +336,6 @@ if(ENABLE_ECL_INPUT)
tests/parser/MultiRegTests.cpp tests/parser/MultiRegTests.cpp
tests/parser/MultisegmentWellTests.cpp tests/parser/MultisegmentWellTests.cpp
tests/parser/MULTREGTScannerTests.cpp tests/parser/MULTREGTScannerTests.cpp
tests/parser/NetworkTests.cpp
tests/parser/OrderedMapTests.cpp tests/parser/OrderedMapTests.cpp
tests/parser/ParseContextTests.cpp tests/parser/ParseContextTests.cpp
tests/parser/ParseContext_EXIT1.cpp tests/parser/ParseContext_EXIT1.cpp
@ -393,7 +385,6 @@ if(ENABLE_ECL_OUTPUT)
tests/test_AggregateConnectionData.cpp tests/test_AggregateConnectionData.cpp
tests/test_AggregateUDQData.cpp tests/test_AggregateUDQData.cpp
tests/test_ArrayDimChecker.cpp tests/test_ArrayDimChecker.cpp
tests/test_data_GuideRateValue.cpp
tests/test_EclipseIO.cpp tests/test_EclipseIO.cpp
tests/test_DoubHEAD.cpp tests/test_DoubHEAD.cpp
tests/test_InteHEAD.cpp tests/test_InteHEAD.cpp
@ -437,8 +428,6 @@ if(ENABLE_ECL_OUTPUT)
tests/SPE1CASE1A.SMSPEC tests/SPE1CASE1A.SMSPEC
tests/SPE9_CP_PACKED.DATA tests/SPE9_CP_PACKED.DATA
tests/SOFR_TEST.DATA tests/SOFR_TEST.DATA
tests/UDQ_BASE.DATA
tests/UDQ_RESTART.DATA
tests/UDQ_TEST_WCONPROD_IUAD-2.DATA tests/UDQ_TEST_WCONPROD_IUAD-2.DATA
tests/UDQ_ACTIONX_TEST1.DATA tests/UDQ_ACTIONX_TEST1.DATA
tests/UDQ_ACTIONX_TEST1_U.DATA tests/UDQ_ACTIONX_TEST1_U.DATA
@ -487,8 +476,6 @@ if(ENABLE_ECL_INPUT)
#examples/opmi.cpp #examples/opmi.cpp
#examples/opmpack.cpp #examples/opmpack.cpp
#examples/opmhash.cpp #examples/opmhash.cpp
#examples/wellgraph.cpp
#examples/make_lodsmry.cpp
) )
endif() endif()
@ -501,7 +488,6 @@ if(ENABLE_ECL_INPUT)
examples/opmi.cpp examples/opmi.cpp
examples/opmpack.cpp examples/opmpack.cpp
examples/opmhash.cpp examples/opmhash.cpp
examples/make_lodsmry.cpp
) )
endif() endif()
@ -548,6 +534,7 @@ if(ENABLE_ECL_INPUT)
list(APPEND PUBLIC_HEADER_FILES list(APPEND PUBLIC_HEADER_FILES
opm/io/eclipse/SummaryNode.hpp opm/io/eclipse/SummaryNode.hpp
opm/json/JsonObject.hpp opm/json/JsonObject.hpp
opm/parser/eclipse/Utility/Stringview.hpp
opm/parser/eclipse/Utility/Functional.hpp opm/parser/eclipse/Utility/Functional.hpp
opm/parser/eclipse/Utility/Typetools.hpp opm/parser/eclipse/Utility/Typetools.hpp
opm/parser/eclipse/Generator/KeywordGenerator.hpp opm/parser/eclipse/Generator/KeywordGenerator.hpp
@ -603,11 +590,8 @@ if(ENABLE_ECL_INPUT)
opm/parser/eclipse/EclipseState/Tables/SpecrockTable.hpp opm/parser/eclipse/EclipseState/Tables/SpecrockTable.hpp
opm/parser/eclipse/EclipseState/Tables/PvtwsaltTable.hpp opm/parser/eclipse/EclipseState/Tables/PvtwsaltTable.hpp
opm/parser/eclipse/EclipseState/Tables/BrineDensityTable.hpp opm/parser/eclipse/EclipseState/Tables/BrineDensityTable.hpp
opm/parser/eclipse/EclipseState/Tables/PermfactTable.hpp
opm/parser/eclipse/EclipseState/Tables/RwgsaltTable.hpp
opm/parser/eclipse/EclipseState/Tables/SaltvdTable.hpp
opm/parser/eclipse/EclipseState/Tables/SaltpvdTable.hpp
opm/parser/eclipse/EclipseState/Tables/SolventDensityTable.hpp opm/parser/eclipse/EclipseState/Tables/SolventDensityTable.hpp
opm/parser/eclipse/EclipseState/Tables/SaltvdTable.hpp
opm/parser/eclipse/EclipseState/Tables/PlydhflfTable.hpp opm/parser/eclipse/EclipseState/Tables/PlydhflfTable.hpp
opm/parser/eclipse/EclipseState/Tables/PlymwinjTable.hpp opm/parser/eclipse/EclipseState/Tables/PlymwinjTable.hpp
opm/parser/eclipse/EclipseState/Tables/PlyshlogTable.hpp opm/parser/eclipse/EclipseState/Tables/PlyshlogTable.hpp
@ -617,7 +601,6 @@ if(ENABLE_ECL_INPUT)
opm/parser/eclipse/EclipseState/Tables/SpecheatTable.hpp opm/parser/eclipse/EclipseState/Tables/SpecheatTable.hpp
opm/parser/eclipse/EclipseState/Tables/SgcwmisTable.hpp opm/parser/eclipse/EclipseState/Tables/SgcwmisTable.hpp
opm/parser/eclipse/EclipseState/Tables/Sof2Table.hpp opm/parser/eclipse/EclipseState/Tables/Sof2Table.hpp
opm/parser/eclipse/EclipseState/Tables/TLMixpar.hpp
opm/parser/eclipse/EclipseState/Tables/TableManager.hpp opm/parser/eclipse/EclipseState/Tables/TableManager.hpp
opm/parser/eclipse/EclipseState/Tables/SwfnTable.hpp opm/parser/eclipse/EclipseState/Tables/SwfnTable.hpp
opm/parser/eclipse/EclipseState/Tables/EnptvdTable.hpp opm/parser/eclipse/EclipseState/Tables/EnptvdTable.hpp
@ -627,8 +610,6 @@ if(ENABLE_ECL_INPUT)
opm/parser/eclipse/EclipseState/Tables/JFunc.hpp opm/parser/eclipse/EclipseState/Tables/JFunc.hpp
opm/parser/eclipse/EclipseState/Tables/TableIndex.hpp opm/parser/eclipse/EclipseState/Tables/TableIndex.hpp
opm/parser/eclipse/EclipseState/Tables/PvtgTable.hpp opm/parser/eclipse/EclipseState/Tables/PvtgTable.hpp
opm/parser/eclipse/EclipseState/Tables/PvtgwTable.hpp
opm/parser/eclipse/EclipseState/Tables/PvtgwoTable.hpp
opm/parser/eclipse/EclipseState/Tables/Tabdims.hpp opm/parser/eclipse/EclipseState/Tables/Tabdims.hpp
opm/parser/eclipse/EclipseState/Tables/TableSchema.hpp opm/parser/eclipse/EclipseState/Tables/TableSchema.hpp
opm/parser/eclipse/EclipseState/Tables/RocktabTable.hpp opm/parser/eclipse/EclipseState/Tables/RocktabTable.hpp
@ -685,12 +666,7 @@ if(ENABLE_ECL_INPUT)
opm/parser/eclipse/EclipseState/Schedule/Action/Condition.hpp opm/parser/eclipse/EclipseState/Schedule/Action/Condition.hpp
opm/parser/eclipse/EclipseState/Schedule/Action/ASTNode.hpp opm/parser/eclipse/EclipseState/Schedule/Action/ASTNode.hpp
opm/parser/eclipse/EclipseState/Schedule/Action/PyAction.hpp opm/parser/eclipse/EclipseState/Schedule/Action/PyAction.hpp
opm/parser/eclipse/EclipseState/Schedule/Action/State.hpp
opm/parser/eclipse/EclipseState/Schedule/ArrayDimChecker.hpp opm/parser/eclipse/EclipseState/Schedule/ArrayDimChecker.hpp
opm/parser/eclipse/EclipseState/Schedule/GasLiftOpt.hpp
opm/parser/eclipse/EclipseState/Schedule/Network/Branch.hpp
opm/parser/eclipse/EclipseState/Schedule/Network/ExtNetwork.hpp
opm/parser/eclipse/EclipseState/Schedule/Network/Node.hpp
opm/parser/eclipse/EclipseState/Schedule/TimeMap.hpp opm/parser/eclipse/EclipseState/Schedule/TimeMap.hpp
opm/parser/eclipse/EclipseState/Schedule/VFPInjTable.hpp opm/parser/eclipse/EclipseState/Schedule/VFPInjTable.hpp
opm/parser/eclipse/EclipseState/Schedule/VFPProdTable.hpp opm/parser/eclipse/EclipseState/Schedule/VFPProdTable.hpp
@ -717,7 +693,6 @@ if(ENABLE_ECL_INPUT)
opm/parser/eclipse/EclipseState/Schedule/Schedule.hpp opm/parser/eclipse/EclipseState/Schedule/Schedule.hpp
opm/parser/eclipse/EclipseState/Schedule/ScheduleTypes.hpp opm/parser/eclipse/EclipseState/Schedule/ScheduleTypes.hpp
opm/parser/eclipse/EclipseState/Schedule/Tuning.hpp opm/parser/eclipse/EclipseState/Schedule/Tuning.hpp
opm/parser/eclipse/EclipseState/Schedule/Group/GPMaint.hpp
opm/parser/eclipse/EclipseState/Schedule/Group/GTNode.hpp opm/parser/eclipse/EclipseState/Schedule/Group/GTNode.hpp
opm/parser/eclipse/EclipseState/Schedule/Group/Group.hpp opm/parser/eclipse/EclipseState/Schedule/Group/Group.hpp
opm/parser/eclipse/EclipseState/Schedule/Group/GuideRate.hpp opm/parser/eclipse/EclipseState/Schedule/Group/GuideRate.hpp
@ -733,8 +708,8 @@ if(ENABLE_ECL_INPUT)
opm/parser/eclipse/EclipseState/Schedule/MSW/Segment.hpp opm/parser/eclipse/EclipseState/Schedule/MSW/Segment.hpp
opm/parser/eclipse/EclipseState/Schedule/MSW/Segment.hpp opm/parser/eclipse/EclipseState/Schedule/MSW/Segment.hpp
opm/parser/eclipse/EclipseState/Schedule/MSW/WellSegments.hpp opm/parser/eclipse/EclipseState/Schedule/MSW/WellSegments.hpp
opm/parser/eclipse/EclipseState/Schedule/MSW/AICD.hpp opm/parser/eclipse/EclipseState/Schedule/MSW/updatingConnectionsWithSegments.hpp
opm/parser/eclipse/EclipseState/Schedule/MSW/SICD.hpp opm/parser/eclipse/EclipseState/Schedule/MSW/SpiralICD.hpp
opm/parser/eclipse/EclipseState/SimulationConfig/ThresholdPressure.hpp opm/parser/eclipse/EclipseState/SimulationConfig/ThresholdPressure.hpp
opm/parser/eclipse/EclipseState/SimulationConfig/BCConfig.hpp opm/parser/eclipse/EclipseState/SimulationConfig/BCConfig.hpp
opm/parser/eclipse/EclipseState/SimulationConfig/RockConfig.hpp opm/parser/eclipse/EclipseState/SimulationConfig/RockConfig.hpp
@ -789,10 +764,9 @@ if(ENABLE_ECL_OUTPUT)
opm/io/eclipse/rst/well.hpp opm/io/eclipse/rst/well.hpp
opm/output/data/Aquifer.hpp opm/output/data/Aquifer.hpp
opm/output/data/Cells.hpp opm/output/data/Cells.hpp
opm/output/data/GuideRateValue.hpp
opm/output/data/Groups.hpp
opm/output/data/Solution.hpp opm/output/data/Solution.hpp
opm/output/data/Wells.hpp opm/output/data/Wells.hpp
opm/output/data/Groups.hpp
opm/output/eclipse/VectorItems/aquifer.hpp opm/output/eclipse/VectorItems/aquifer.hpp
opm/output/eclipse/VectorItems/connection.hpp opm/output/eclipse/VectorItems/connection.hpp
opm/output/eclipse/VectorItems/group.hpp opm/output/eclipse/VectorItems/group.hpp
@ -837,6 +811,5 @@ endif()
if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC") if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
list( APPEND PUBLIC_HEADER_FILES list( APPEND PUBLIC_HEADER_FILES
cross-platform/windows/Substitutes.hpp cross-platform/windows/Substitutes.hpp
cross-platform/PortableEndian.hpp
) )
endif() endif()

View File

@ -1952,13 +1952,11 @@ GLIFTOPT::GLIFTOPT( ) : ParserKeyword("GLIFTOPT")
{ {
ParserItem item("MAX_LIFT_GAS_SUPPLY", ParserItem::itype::DOUBLE); ParserItem item("MAX_LIFT_GAS_SUPPLY", ParserItem::itype::DOUBLE);
item.setDefault( double(-100000000000000000000.000000) ); item.setDefault( double(-100000000000000000000.000000) );
item.push_backDimension("GasSurfaceVolume/Time");
record.addItem(item); record.addItem(item);
} }
{ {
ParserItem item("MAX_TOTAL_GAS_RATE", ParserItem::itype::DOUBLE); ParserItem item("MAX_TOTAL_GAS_RATE", ParserItem::itype::DOUBLE);
item.setDefault( double(-100000000000000000000.000000) ); item.setDefault( double(-100000000000000000000.000000) );
item.push_backDimension("GasSurfaceVolume/Time");
record.addItem(item); record.addItem(item);
} }
addRecord( record ); addRecord( record );
@ -2168,7 +2166,6 @@ GPMAINT::GPMAINT( ) : ParserKeyword("GPMAINT")
} }
{ {
ParserItem item("FIP_FAMILY", ParserItem::itype::STRING); ParserItem item("FIP_FAMILY", ParserItem::itype::STRING);
item.setDefault( std::string("FIPNUM") );
record.addItem(item); record.addItem(item);
} }
{ {
@ -2194,7 +2191,6 @@ const std::string GPMAINT::GROUP::itemName = "GROUP";
const std::string GPMAINT::FLOW_TARGET::itemName = "FLOW_TARGET"; const std::string GPMAINT::FLOW_TARGET::itemName = "FLOW_TARGET";
const std::string GPMAINT::REGION::itemName = "REGION"; const std::string GPMAINT::REGION::itemName = "REGION";
const std::string GPMAINT::FIP_FAMILY::itemName = "FIP_FAMILY"; const std::string GPMAINT::FIP_FAMILY::itemName = "FIP_FAMILY";
const std::string GPMAINT::FIP_FAMILY::defaultValue = "FIPNUM";
const std::string GPMAINT::PRESSURE_TARGET::itemName = "PRESSURE_TARGET"; const std::string GPMAINT::PRESSURE_TARGET::itemName = "PRESSURE_TARGET";
const std::string GPMAINT::PROP_CONSTANT::itemName = "PROP_CONSTANT"; const std::string GPMAINT::PROP_CONSTANT::itemName = "PROP_CONSTANT";
const std::string GPMAINT::TIME_CONSTANT::itemName = "TIME_CONSTANT"; const std::string GPMAINT::TIME_CONSTANT::itemName = "TIME_CONSTANT";

View File

@ -310,18 +310,15 @@ LIFTOPT::LIFTOPT( ) : ParserKeyword("LIFTOPT")
ParserRecord record; ParserRecord record;
{ {
ParserItem item("INCREMENT_SIZE", ParserItem::itype::DOUBLE); ParserItem item("INCREMENT_SIZE", ParserItem::itype::DOUBLE);
item.push_backDimension("GasSurfaceVolume/Time");
record.addItem(item); record.addItem(item);
} }
{ {
ParserItem item("MIN_ECONOMIC_GRADIENT", ParserItem::itype::DOUBLE); ParserItem item("MIN_ECONOMIC_GRADIENT", ParserItem::itype::DOUBLE);
item.push_backDimension("LiquidSurfaceVolume/GasSurfaceVolume");
record.addItem(item); record.addItem(item);
} }
{ {
ParserItem item("MIN_INTERVAL_BETWEEN_GAS_LIFT_OPTIMIZATIONS", ParserItem::itype::DOUBLE); ParserItem item("MIN_INTERVAL_BETWEEN_GAS_LIFT_OPTIMIZATIONS", ParserItem::itype::DOUBLE);
item.setDefault( double(0) ); item.setDefault( double(0) );
item.push_backDimension("Time");
record.addItem(item); record.addItem(item);
} }
{ {

View File

@ -625,11 +625,6 @@ NODEPROP::NODEPROP( ) : ParserKeyword("NODEPROP")
item.setDefault( std::string("NO") ); item.setDefault( std::string("NO") );
record.addItem(item); record.addItem(item);
} }
{
ParserItem item("ADD_GAS_LIFT_GAS", ParserItem::itype::STRING);
item.setDefault( std::string("NO") );
record.addItem(item);
}
{ {
ParserItem item("CHOKE_GROUP", ParserItem::itype::STRING); ParserItem item("CHOKE_GROUP", ParserItem::itype::STRING);
record.addItem(item); record.addItem(item);
@ -651,8 +646,6 @@ const std::string NODEPROP::NAME::itemName = "NAME";
const std::string NODEPROP::PRESSURE::itemName = "PRESSURE"; const std::string NODEPROP::PRESSURE::itemName = "PRESSURE";
const std::string NODEPROP::AS_CHOKE::itemName = "AS_CHOKE"; const std::string NODEPROP::AS_CHOKE::itemName = "AS_CHOKE";
const std::string NODEPROP::AS_CHOKE::defaultValue = "NO"; const std::string NODEPROP::AS_CHOKE::defaultValue = "NO";
const std::string NODEPROP::ADD_GAS_LIFT_GAS::itemName = "ADD_GAS_LIFT_GAS";
const std::string NODEPROP::ADD_GAS_LIFT_GAS::defaultValue = "NO";
const std::string NODEPROP::CHOKE_GROUP::itemName = "CHOKE_GROUP"; const std::string NODEPROP::CHOKE_GROUP::itemName = "CHOKE_GROUP";
const std::string NODEPROP::SOURCE_SINK_GROUP::itemName = "SOURCE_SINK_GROUP"; const std::string NODEPROP::SOURCE_SINK_GROUP::itemName = "SOURCE_SINK_GROUP";
const std::string NODEPROP::NETWORK_VALUE_TYPE::itemName = "NETWORK_VALUE_TYPE"; const std::string NODEPROP::NETWORK_VALUE_TYPE::itemName = "NETWORK_VALUE_TYPE";

View File

@ -318,7 +318,7 @@ OPERATER::OPERATER( ) : ParserKeyword("OPERATER")
{ {
ParserRecord record; ParserRecord record;
{ {
ParserItem item("TARGET_ARRAY", ParserItem::itype::STRING); ParserItem item("RESULT_ARRAY", ParserItem::itype::STRING);
record.addItem(item); record.addItem(item);
} }
{ {
@ -352,7 +352,7 @@ OPERATER::OPERATER( ) : ParserKeyword("OPERATER")
} }
} }
const std::string OPERATER::keywordName = "OPERATER"; const std::string OPERATER::keywordName = "OPERATER";
const std::string OPERATER::TARGET_ARRAY::itemName = "TARGET_ARRAY"; const std::string OPERATER::RESULT_ARRAY::itemName = "RESULT_ARRAY";
const std::string OPERATER::REGION_NUMBER::itemName = "REGION_NUMBER"; const std::string OPERATER::REGION_NUMBER::itemName = "REGION_NUMBER";
const std::string OPERATER::OPERATION::itemName = "OPERATION"; const std::string OPERATER::OPERATION::itemName = "OPERATION";
const std::string OPERATER::ARRAY_PARAMETER::itemName = "ARRAY_PARAMETER"; const std::string OPERATER::ARRAY_PARAMETER::itemName = "ARRAY_PARAMETER";

View File

@ -646,17 +646,19 @@ const int PERMAVE::EXPO_2::defaultValue = -1;
PERMFACT::PERMFACT( ) : ParserKeyword("PERMFACT") PERMFACT::PERMFACT( ) : ParserKeyword("PERMFACT")
{ {
setSizeType(OTHER_KEYWORD_IN_DECK); setSizeType(SLASH_TERMINATED);
initSizeKeyword("EQLDIMS","NTEQUL",0);
addValidSectionName("PROPS"); addValidSectionName("PROPS");
clearDeckNames(); clearDeckNames();
addDeckName("PERMFACT"); addDeckName("PERMFACT");
{ {
ParserRecord record; ParserRecord record;
{ {
ParserItem item("DATA", ParserItem::itype::DOUBLE); ParserItem item("POROSITY", ParserItem::itype::DOUBLE);
item.setSizeType(ParserItem::item_size::ALL);
item.push_backDimension("1"); item.push_backDimension("1");
record.addItem(item);
}
{
ParserItem item("PERMFACTMULT", ParserItem::itype::DOUBLE);
item.push_backDimension("1"); item.push_backDimension("1");
record.addItem(item); record.addItem(item);
} }
@ -664,7 +666,8 @@ PERMFACT::PERMFACT( ) : ParserKeyword("PERMFACT")
} }
} }
const std::string PERMFACT::keywordName = "PERMFACT"; const std::string PERMFACT::keywordName = "PERMFACT";
const std::string PERMFACT::DATA::itemName = "DATA"; const std::string PERMFACT::POROSITY::itemName = "POROSITY";
const std::string PERMFACT::PERMFACTMULT::itemName = "PERMFACTMULT";
PERMJFUN::PERMJFUN( ) : ParserKeyword("PERMJFUN") PERMJFUN::PERMJFUN( ) : ParserKeyword("PERMJFUN")

View File

@ -2193,16 +2193,26 @@ RWGSALT::RWGSALT( ) : ParserKeyword("RWGSALT")
{ {
setSizeType(OTHER_KEYWORD_IN_DECK); setSizeType(OTHER_KEYWORD_IN_DECK);
initSizeKeyword("TABDIMS","NTPVT",0); initSizeKeyword("TABDIMS","NTPVT",0);
setTableCollection( true );
addValidSectionName("PROPS"); addValidSectionName("PROPS");
clearDeckNames(); clearDeckNames();
addDeckName("RWGSALT"); addDeckName("RWGSALT");
{ {
ParserRecord record; ParserRecord record;
{
ParserItem item("RESERVOIR_PRESSURE", ParserItem::itype::DOUBLE);
item.push_backDimension("Pressure");
record.addItem(item);
}
{
ParserItem item("SALT_CONCENTRATION", ParserItem::itype::DOUBLE);
item.setSizeType(ParserItem::item_size::ALL);
item.push_backDimension("Mass/Length*Length*Length");
record.addItem(item);
}
{ {
ParserItem item("DATA", ParserItem::itype::DOUBLE); ParserItem item("DATA", ParserItem::itype::DOUBLE);
item.setSizeType(ParserItem::item_size::ALL); item.setSizeType(ParserItem::item_size::ALL);
item.push_backDimension("Pressure");
item.push_backDimension("Mass/Length*Length*Length");
item.push_backDimension("OilDissolutionFactor"); item.push_backDimension("OilDissolutionFactor");
record.addItem(item); record.addItem(item);
} }
@ -2210,6 +2220,8 @@ RWGSALT::RWGSALT( ) : ParserKeyword("RWGSALT")
} }
} }
const std::string RWGSALT::keywordName = "RWGSALT"; const std::string RWGSALT::keywordName = "RWGSALT";
const std::string RWGSALT::RESERVOIR_PRESSURE::itemName = "RESERVOIR_PRESSURE";
const std::string RWGSALT::SALT_CONCENTRATION::itemName = "SALT_CONCENTRATION";
const std::string RWGSALT::DATA::itemName = "DATA"; const std::string RWGSALT::DATA::itemName = "DATA";

View File

@ -1542,7 +1542,7 @@ const std::string SOLVDIMS::data::itemName = "data";
SOLVDIRS::SOLVDIRS( ) : ParserKeyword("SOLVDIRS") SOLVDIRS::SOLVDIRS( ) : ParserKeyword("SOLVDIRS")
{ {
setFixedSize( (size_t) 1); setSizeType(SLASH_TERMINATED);
addValidSectionName("GRID"); addValidSectionName("GRID");
clearDeckNames(); clearDeckNames();
addDeckName("SOLVDIRS"); addDeckName("SOLVDIRS");

View File

@ -2652,7 +2652,7 @@ WELTARG::WELTARG( ) : ParserKeyword("WELTARG")
record.addItem(item); record.addItem(item);
} }
{ {
ParserItem item("NEW_VALUE", ParserItem::itype::UDA); ParserItem item("NEW_VALUE", ParserItem::itype::DOUBLE);
record.addItem(item); record.addItem(item);
} }
addRecord( record ); addRecord( record );
@ -4193,62 +4193,61 @@ WSEGAICD::WSEGAICD( ) : ParserKeyword("WSEGAICD")
record.addItem(item); record.addItem(item);
} }
{ {
ParserItem item("SEG1", ParserItem::itype::INT); ParserItem item("SEGMENT1", ParserItem::itype::INT);
item.setDefault( 0 );
record.addItem(item); record.addItem(item);
} }
{ {
ParserItem item("SEG2", ParserItem::itype::INT); ParserItem item("SEGMENT2", ParserItem::itype::INT);
item.setDefault( 0 );
record.addItem(item); record.addItem(item);
} }
{ {
ParserItem item("STRENGTH", ParserItem::itype::DOUBLE); ParserItem item("AICD_STRENGTH", ParserItem::itype::DOUBLE);
item.push_backDimension("Pressure*Time*Time/GeometricVolume*GeometricVolume"); item.setDefault( double(0) );
record.addItem(item); record.addItem(item);
} }
{ {
ParserItem item("LENGTH", ParserItem::itype::DOUBLE); ParserItem item("ICD_LENGTH", ParserItem::itype::DOUBLE);
item.setDefault( double(12.000000) ); item.setDefault( double(12.000000) );
item.push_backDimension("Length"); item.push_backDimension("Length");
record.addItem(item); record.addItem(item);
} }
{ {
ParserItem item("DENSITY_CALI", ParserItem::itype::DOUBLE); ParserItem item("RHO", ParserItem::itype::DOUBLE);
item.setDefault( double(1000.250000) ); item.setDefault( double(1000.250000) );
item.push_backDimension("Density"); item.push_backDimension("Mass/Length*Length*Length");
record.addItem(item); record.addItem(item);
} }
{ {
ParserItem item("VISCOSITY_CALI", ParserItem::itype::DOUBLE); ParserItem item("VISCOSITY", ParserItem::itype::DOUBLE);
item.setDefault( double(1.450000) ); item.setDefault( double(1.450000) );
item.push_backDimension("Viscosity"); item.push_backDimension("Viscosity");
record.addItem(item); record.addItem(item);
} }
{ {
ParserItem item("CRITICAL_VALUE", ParserItem::itype::DOUBLE); ParserItem item("WATER_LIMIT", ParserItem::itype::DOUBLE);
item.setDefault( double(0.500000) ); item.setDefault( double(0.500000) );
item.push_backDimension("1");
record.addItem(item); record.addItem(item);
} }
{ {
ParserItem item("WIDTH_TRANS", ParserItem::itype::DOUBLE); ParserItem item("TRANSITION_WIDTH", ParserItem::itype::DOUBLE);
item.setDefault( double(0.050000) ); item.setDefault( double(0.050000) );
item.push_backDimension("1");
record.addItem(item); record.addItem(item);
} }
{ {
ParserItem item("MAX_VISC_RATIO", ParserItem::itype::DOUBLE); ParserItem item("MAX_SOMETHING", ParserItem::itype::DOUBLE);
item.setDefault( double(5.000000) ); item.setDefault( double(5.000000) );
item.push_backDimension("1");
record.addItem(item); record.addItem(item);
} }
{ {
ParserItem item("METHOD_SCALING_FACTOR", ParserItem::itype::INT); ParserItem item("SCALING_METHOD", ParserItem::itype::INT);
item.setDefault( -1 ); item.setDefault( -1 );
record.addItem(item); record.addItem(item);
} }
{ {
ParserItem item("MAX_ABS_RATE", ParserItem::itype::DOUBLE); ParserItem item("MAX_QICD", ParserItem::itype::DOUBLE);
item.push_backDimension("GeometricVolume/Time"); item.push_backDimension("ReservoirVolume/Time");
record.addItem(item); record.addItem(item);
} }
{ {
@ -4260,7 +4259,7 @@ WSEGAICD::WSEGAICD( ) : ParserKeyword("WSEGAICD")
record.addItem(item); record.addItem(item);
} }
{ {
ParserItem item("STATUS", ParserItem::itype::STRING); ParserItem item("ICD_FLAG", ParserItem::itype::STRING);
item.setDefault( std::string("OPEN") ); item.setDefault( std::string("OPEN") );
record.addItem(item); record.addItem(item);
} }
@ -4280,7 +4279,7 @@ WSEGAICD::WSEGAICD( ) : ParserKeyword("WSEGAICD")
record.addItem(item); record.addItem(item);
} }
{ {
ParserItem item("OIL_VISC_FRACTION", ParserItem::itype::DOUBLE); ParserItem item("OIL_VSIC_FRACTION", ParserItem::itype::DOUBLE);
item.setDefault( double(1.000000) ); item.setDefault( double(1.000000) );
record.addItem(item); record.addItem(item);
} }
@ -4299,36 +4298,39 @@ WSEGAICD::WSEGAICD( ) : ParserKeyword("WSEGAICD")
} }
const std::string WSEGAICD::keywordName = "WSEGAICD"; const std::string WSEGAICD::keywordName = "WSEGAICD";
const std::string WSEGAICD::WELL::itemName = "WELL"; const std::string WSEGAICD::WELL::itemName = "WELL";
const std::string WSEGAICD::SEG1::itemName = "SEG1"; const std::string WSEGAICD::SEGMENT1::itemName = "SEGMENT1";
const std::string WSEGAICD::SEG2::itemName = "SEG2"; const int WSEGAICD::SEGMENT1::defaultValue = 0;
const std::string WSEGAICD::STRENGTH::itemName = "STRENGTH"; const std::string WSEGAICD::SEGMENT2::itemName = "SEGMENT2";
const std::string WSEGAICD::LENGTH::itemName = "LENGTH"; const int WSEGAICD::SEGMENT2::defaultValue = 0;
const double WSEGAICD::LENGTH::defaultValue = 12.000000; const std::string WSEGAICD::AICD_STRENGTH::itemName = "AICD_STRENGTH";
const std::string WSEGAICD::DENSITY_CALI::itemName = "DENSITY_CALI"; const double WSEGAICD::AICD_STRENGTH::defaultValue = 0.000000;
const double WSEGAICD::DENSITY_CALI::defaultValue = 1000.250000; const std::string WSEGAICD::ICD_LENGTH::itemName = "ICD_LENGTH";
const std::string WSEGAICD::VISCOSITY_CALI::itemName = "VISCOSITY_CALI"; const double WSEGAICD::ICD_LENGTH::defaultValue = 12.000000;
const double WSEGAICD::VISCOSITY_CALI::defaultValue = 1.450000; const std::string WSEGAICD::RHO::itemName = "RHO";
const std::string WSEGAICD::CRITICAL_VALUE::itemName = "CRITICAL_VALUE"; const double WSEGAICD::RHO::defaultValue = 1000.250000;
const double WSEGAICD::CRITICAL_VALUE::defaultValue = 0.500000; const std::string WSEGAICD::VISCOSITY::itemName = "VISCOSITY";
const std::string WSEGAICD::WIDTH_TRANS::itemName = "WIDTH_TRANS"; const double WSEGAICD::VISCOSITY::defaultValue = 1.450000;
const double WSEGAICD::WIDTH_TRANS::defaultValue = 0.050000; const std::string WSEGAICD::WATER_LIMIT::itemName = "WATER_LIMIT";
const std::string WSEGAICD::MAX_VISC_RATIO::itemName = "MAX_VISC_RATIO"; const double WSEGAICD::WATER_LIMIT::defaultValue = 0.500000;
const double WSEGAICD::MAX_VISC_RATIO::defaultValue = 5.000000; const std::string WSEGAICD::TRANSITION_WIDTH::itemName = "TRANSITION_WIDTH";
const std::string WSEGAICD::METHOD_SCALING_FACTOR::itemName = "METHOD_SCALING_FACTOR"; const double WSEGAICD::TRANSITION_WIDTH::defaultValue = 0.050000;
const int WSEGAICD::METHOD_SCALING_FACTOR::defaultValue = -1; const std::string WSEGAICD::MAX_SOMETHING::itemName = "MAX_SOMETHING";
const std::string WSEGAICD::MAX_ABS_RATE::itemName = "MAX_ABS_RATE"; const double WSEGAICD::MAX_SOMETHING::defaultValue = 5.000000;
const std::string WSEGAICD::SCALING_METHOD::itemName = "SCALING_METHOD";
const int WSEGAICD::SCALING_METHOD::defaultValue = -1;
const std::string WSEGAICD::MAX_QICD::itemName = "MAX_QICD";
const std::string WSEGAICD::FLOW_RATE_EXPONENT::itemName = "FLOW_RATE_EXPONENT"; const std::string WSEGAICD::FLOW_RATE_EXPONENT::itemName = "FLOW_RATE_EXPONENT";
const std::string WSEGAICD::VISC_EXPONENT::itemName = "VISC_EXPONENT"; const std::string WSEGAICD::VISC_EXPONENT::itemName = "VISC_EXPONENT";
const std::string WSEGAICD::STATUS::itemName = "STATUS"; const std::string WSEGAICD::ICD_FLAG::itemName = "ICD_FLAG";
const std::string WSEGAICD::STATUS::defaultValue = "OPEN"; const std::string WSEGAICD::ICD_FLAG::defaultValue = "OPEN";
const std::string WSEGAICD::OIL_FLOW_FRACTION::itemName = "OIL_FLOW_FRACTION"; const std::string WSEGAICD::OIL_FLOW_FRACTION::itemName = "OIL_FLOW_FRACTION";
const double WSEGAICD::OIL_FLOW_FRACTION::defaultValue = 1.000000; const double WSEGAICD::OIL_FLOW_FRACTION::defaultValue = 1.000000;
const std::string WSEGAICD::WATER_FLOW_FRACTION::itemName = "WATER_FLOW_FRACTION"; const std::string WSEGAICD::WATER_FLOW_FRACTION::itemName = "WATER_FLOW_FRACTION";
const double WSEGAICD::WATER_FLOW_FRACTION::defaultValue = 1.000000; const double WSEGAICD::WATER_FLOW_FRACTION::defaultValue = 1.000000;
const std::string WSEGAICD::GAS_FLOW_FRACTION::itemName = "GAS_FLOW_FRACTION"; const std::string WSEGAICD::GAS_FLOW_FRACTION::itemName = "GAS_FLOW_FRACTION";
const double WSEGAICD::GAS_FLOW_FRACTION::defaultValue = 1.000000; const double WSEGAICD::GAS_FLOW_FRACTION::defaultValue = 1.000000;
const std::string WSEGAICD::OIL_VISC_FRACTION::itemName = "OIL_VISC_FRACTION"; const std::string WSEGAICD::OIL_VSIC_FRACTION::itemName = "OIL_VSIC_FRACTION";
const double WSEGAICD::OIL_VISC_FRACTION::defaultValue = 1.000000; const double WSEGAICD::OIL_VSIC_FRACTION::defaultValue = 1.000000;
const std::string WSEGAICD::WATER_VISC_FRACTION::itemName = "WATER_VISC_FRACTION"; const std::string WSEGAICD::WATER_VISC_FRACTION::itemName = "WATER_VISC_FRACTION";
const double WSEGAICD::WATER_VISC_FRACTION::defaultValue = 1.000000; const double WSEGAICD::WATER_VISC_FRACTION::defaultValue = 1.000000;
const std::string WSEGAICD::GAS_VISC_FRACTION::itemName = "GAS_VISC_FRACTION"; const std::string WSEGAICD::GAS_VISC_FRACTION::itemName = "GAS_VISC_FRACTION";

View File

@ -1647,7 +1647,6 @@ namespace ParserKeywords {
class FIP_FAMILY { class FIP_FAMILY {
public: public:
static const std::string itemName; static const std::string itemName;
static const std::string defaultValue;
}; };
class PRESSURE_TARGET { class PRESSURE_TARGET {

View File

@ -484,12 +484,6 @@ namespace ParserKeywords {
static const std::string defaultValue; static const std::string defaultValue;
}; };
class ADD_GAS_LIFT_GAS {
public:
static const std::string itemName;
static const std::string defaultValue;
};
class CHOKE_GROUP { class CHOKE_GROUP {
public: public:
static const std::string itemName; static const std::string itemName;

View File

@ -223,7 +223,7 @@ namespace ParserKeywords {
OPERATER(); OPERATER();
static const std::string keywordName; static const std::string keywordName;
class TARGET_ARRAY { class RESULT_ARRAY {
public: public:
static const std::string itemName; static const std::string itemName;
}; };

View File

@ -417,7 +417,12 @@ namespace ParserKeywords {
PERMFACT(); PERMFACT();
static const std::string keywordName; static const std::string keywordName;
class DATA { class POROSITY {
public:
static const std::string itemName;
};
class PERMFACTMULT {
public: public:
static const std::string itemName; static const std::string itemName;
}; };

View File

@ -1504,6 +1504,16 @@ namespace ParserKeywords {
RWGSALT(); RWGSALT();
static const std::string keywordName; static const std::string keywordName;
class RESERVOIR_PRESSURE {
public:
static const std::string itemName;
};
class SALT_CONCENTRATION {
public:
static const std::string itemName;
};
class DATA { class DATA {
public: public:
static const std::string itemName; static const std::string itemName;

View File

@ -3110,64 +3110,67 @@ namespace ParserKeywords {
static const std::string itemName; static const std::string itemName;
}; };
class SEG1 { class SEGMENT1 {
public:
static const std::string itemName;
};
class SEG2 {
public:
static const std::string itemName;
};
class STRENGTH {
public:
static const std::string itemName;
};
class LENGTH {
public:
static const std::string itemName;
static const double defaultValue;
};
class DENSITY_CALI {
public:
static const std::string itemName;
static const double defaultValue;
};
class VISCOSITY_CALI {
public:
static const std::string itemName;
static const double defaultValue;
};
class CRITICAL_VALUE {
public:
static const std::string itemName;
static const double defaultValue;
};
class WIDTH_TRANS {
public:
static const std::string itemName;
static const double defaultValue;
};
class MAX_VISC_RATIO {
public:
static const std::string itemName;
static const double defaultValue;
};
class METHOD_SCALING_FACTOR {
public: public:
static const std::string itemName; static const std::string itemName;
static const int defaultValue; static const int defaultValue;
}; };
class MAX_ABS_RATE { class SEGMENT2 {
public:
static const std::string itemName;
static const int defaultValue;
};
class AICD_STRENGTH {
public:
static const std::string itemName;
static const double defaultValue;
};
class ICD_LENGTH {
public:
static const std::string itemName;
static const double defaultValue;
};
class RHO {
public:
static const std::string itemName;
static const double defaultValue;
};
class VISCOSITY {
public:
static const std::string itemName;
static const double defaultValue;
};
class WATER_LIMIT {
public:
static const std::string itemName;
static const double defaultValue;
};
class TRANSITION_WIDTH {
public:
static const std::string itemName;
static const double defaultValue;
};
class MAX_SOMETHING {
public:
static const std::string itemName;
static const double defaultValue;
};
class SCALING_METHOD {
public:
static const std::string itemName;
static const int defaultValue;
};
class MAX_QICD {
public: public:
static const std::string itemName; static const std::string itemName;
}; };
@ -3182,7 +3185,7 @@ namespace ParserKeywords {
static const std::string itemName; static const std::string itemName;
}; };
class STATUS { class ICD_FLAG {
public: public:
static const std::string itemName; static const std::string itemName;
static const std::string defaultValue; static const std::string defaultValue;
@ -3206,7 +3209,7 @@ namespace ParserKeywords {
static const double defaultValue; static const double defaultValue;
}; };
class OIL_VISC_FRACTION { class OIL_VSIC_FRACTION {
public: public:
static const std::string itemName; static const std::string itemName;
static const double defaultValue; static const double defaultValue;

View File

@ -153,12 +153,6 @@ if (OPM_ENABLE_PYTHON)
endif() endif()
endif() endif()
# Add dependency of Shlwapi.lib for Windows platforms
if (CMAKE_CXX_COMPILER_ID STREQUAL "MSVC")
target_link_libraries(opmcommon Shlwapi)
endif()
# all setup common to the OPM library modules is done here # all setup common to the OPM library modules is done here
include (OpmLibMain) include (OpmLibMain)
@ -199,11 +193,15 @@ if(ENABLE_ECL_INPUT)
# test_util/summary.cpp # test_util/summary.cpp
# ) # )
#foreach(target compareECL convertECL summary) #add_executable(test_esmry_lod
# test_util/test_esmry_lod.cpp
# )
#foreach(target compareECL convertECL summary test_esmry_lod)
# target_link_libraries(${target} opmcommon) # target_link_libraries(${target} opmcommon)
# install(TARGETS ${target} DESTINATION bin) # install(TARGETS ${target} DESTINATION bin)
#endforeach() #endforeach()
# Add the tests # Add the tests
set(_libs opmcommon set(_libs opmcommon
${Boost_UNIT_TEST_FRAMEWORK_LIBRARY}) ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY})
@ -261,11 +259,10 @@ if (OPM_ENABLE_PYTHON)
list(APPEND _opmcommon_include_dirs ${_ecl_include_dirs}) list(APPEND _opmcommon_include_dirs ${_ecl_include_dirs})
string(REPLACE ";" ":" _setup_include_dirs "${_opmcommon_include_dirs}") string(REPLACE ";" ":" _setup_include_dirs "${_opmcommon_include_dirs}")
get_target_property(_opmcommon_lib_dirs opmcommon LINK_DIRECTORIES)
if (CMAKE_PREFIX_PATH) if (CMAKE_PREFIX_PATH)
list(APPEND _opmcommon_lib_dirs ${PROJECT_BINARY_DIR}/lib ${CMAKE_PREFIX_PATH}/${CMAKE_INSTALL_LIBDIR}) set(_opmcommon_lib_dirs ${PROJECT_BINARY_DIR}/lib ${CMAKE_PREFIX_PATH}/${CMAKE_INSTALL_LIBDIR})
else() else()
list(APPEND _opmcommon_lib_dirs ${PROJECT_BINARY_DIR}/lib) set(_opmcommon_lib_dirs ${PROJECT_BINARY_DIR}/lib)
endif() endif()
string(REPLACE ";" ":" _setup_lib_dirs "${_opmcommon_lib_dirs}") string(REPLACE ";" ":" _setup_lib_dirs "${_opmcommon_lib_dirs}")
@ -291,11 +288,6 @@ if (OPM_ENABLE_PYTHON)
set( _rpath_arg "") set( _rpath_arg "")
endif() endif()
set(opm-common_PYTHON_PACKAGE_VERSION ${OPM_PYTHON_PACKAGE_VERSION_TAG})
# Generate versioned setup.py
configure_file (${PROJECT_SOURCE_DIR}/python/setup.py.in ${PROJECT_BINARY_DIR}/python/setup.py)
file(COPY ${PROJECT_SOURCE_DIR}/python/README.md DESTINATION ${PROJECT_BINARY_DIR}/python)
execute_process(COMMAND ${PYTHON_EXECUTABLE} target_name.py execute_process(COMMAND ${PYTHON_EXECUTABLE} target_name.py
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/python WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/python
OUTPUT_VARIABLE python_lib_target) OUTPUT_VARIABLE python_lib_target)
@ -303,19 +295,19 @@ if (OPM_ENABLE_PYTHON)
add_custom_target(copy_python ALL add_custom_target(copy_python ALL
COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/python/install.py ${PROJECT_SOURCE_DIR}/python ${PROJECT_BINARY_DIR} 0) COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_SOURCE_DIR}/python/install.py ${PROJECT_SOURCE_DIR}/python ${PROJECT_BINARY_DIR} 0)
add_custom_command(OUTPUT python/opm/${python_lib_target} add_custom_command(OUTPUT python/python/opm/${python_lib_target}
DEPENDS ${PYTHON_CXX_DEPENDS} DEPENDS ${PYTHON_CXX_DEPENDS}
DEPENDS copy_python DEPENDS copy_python
COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_BINARY_DIR}/python/setup.py COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_BINARY_DIR}/python/setup.py
build build
build_ext build_ext
--build-lib=${PROJECT_BINARY_DIR}/python --build-lib=${PROJECT_BINARY_DIR}/python/python/opm
--library-dirs=${_setup_lib_dirs} --library-dirs=${_setup_lib_dirs}
${_rpath_arg} ${_rpath_arg}
--include-dirs=${_setup_include_dirs} --include-dirs=${_setup_include_dirs}
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/python WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/python
COMMENT "Building python bindings at python/opm/${python_lib_target}") COMMENT "Building python bindings")
add_custom_target(opmcommon_python ALL DEPENDS python/opm/${python_lib_target}) add_custom_target(opmcommon_python ALL DEPENDS python/python/opm/${python_lib_target})
add_dependencies(opmcommon_python opmcommon) add_dependencies(opmcommon_python opmcommon)
# The install target is based on manually copying the python file tree to the # The install target is based on manually copying the python file tree to the
@ -330,7 +322,7 @@ if (OPM_ENABLE_PYTHON)
# setup.py install manually - optionally with the generated script # setup.py install manually - optionally with the generated script
# setup-install.sh - and completely bypass cmake in the installation phase. # setup-install.sh - and completely bypass cmake in the installation phase.
if (OPM_INSTALL_PYTHON) if (OPM_INSTALL_PYTHON)
install( CODE "execute_process(COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_BINARY_DIR}/python/install.py ${PROJECT_BINARY_DIR}/python/opm ${DEST_PREFIX}${CMAKE_INSTALL_PREFIX}/${PYTHON_INSTALL_PREFIX} 1)") install( CODE "execute_process(COMMAND ${PYTHON_EXECUTABLE} ${PROJECT_BINARY_DIR}/python/install.py ${PROJECT_BINARY_DIR}/python/python/opm ${DEST_PREFIX}${CMAKE_INSTALL_PREFIX}/${PYTHON_INSTALL_PREFIX} 1)")
endif() endif()
# Observe that if the opmcommon library has been built as a shared library the # Observe that if the opmcommon library has been built as a shared library the
@ -338,11 +330,11 @@ if (OPM_ENABLE_PYTHON)
# testing. # testing.
add_test(NAME python_tests add_test(NAME python_tests
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/python WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/python
COMMAND ${CMAKE_COMMAND} -E env LD_LIBRARY_PATH=${PROJECT_BINARY_DIR}/lib ${PYTHON_EXECUTABLE} setup.py build_ext --dry-run --build-lib ${PROJECT_BINARY_DIR}/python test COMMAND ${CMAKE_COMMAND} -E env LD_LIBRARY_PATH=${PROJECT_BINARY_DIR}/lib ${PYTHON_EXECUTABLE} setup.py build_ext --dry-run --build-lib ${PROJECT_BINARY_DIR}/python/python/opm test
) )
set_target_properties(opmcommon PROPERTIES POSITION_INDEPENDENT_CODE ON) set_target_properties(opmcommon PROPERTIES POSITION_INDEPENDENT_CODE ON)
set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES ${PROJECT_BINARY_DIR}/python) set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES ${PROJECT_BINARY_DIR}/python/python)
# ------------------------------------------------------------------------- # -------------------------------------------------------------------------
# Let cmake configure some small shell scripts which can be used to simplify # Let cmake configure some small shell scripts which can be used to simplify
@ -352,11 +344,6 @@ if (OPM_ENABLE_PYTHON)
DESTINATION ${PROJECT_BINARY_DIR} DESTINATION ${PROJECT_BINARY_DIR}
FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE ) FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE )
configure_file(python/setup-package.sh.in tmp/setup-package.sh)
file( COPY ${PROJECT_BINARY_DIR}/tmp/setup-package.sh
DESTINATION ${PROJECT_BINARY_DIR}
FILE_PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE )
configure_file(python/setup-test.sh.in tmp/setup-test.sh) configure_file(python/setup-test.sh.in tmp/setup-test.sh)
file( COPY ${PROJECT_BINARY_DIR}/tmp/setup-test.sh file( COPY ${PROJECT_BINARY_DIR}/tmp/setup-test.sh
DESTINATION ${PROJECT_BINARY_DIR} DESTINATION ${PROJECT_BINARY_DIR}

View File

@ -100,11 +100,8 @@ if(ENABLE_ECL_INPUT)
src/opm/parser/eclipse/EclipseState/Schedule/Action/ActionValue.cpp src/opm/parser/eclipse/EclipseState/Schedule/Action/ActionValue.cpp
src/opm/parser/eclipse/EclipseState/Schedule/Action/ASTNode.cpp src/opm/parser/eclipse/EclipseState/Schedule/Action/ASTNode.cpp
src/opm/parser/eclipse/EclipseState/Schedule/Action/Condition.cpp src/opm/parser/eclipse/EclipseState/Schedule/Action/Condition.cpp
src/opm/parser/eclipse/EclipseState/Schedule/Action/State.cpp
src/opm/parser/eclipse/EclipseState/Schedule/ArrayDimChecker.cpp src/opm/parser/eclipse/EclipseState/Schedule/ArrayDimChecker.cpp
src/opm/parser/eclipse/EclipseState/Schedule/Events.cpp src/opm/parser/eclipse/EclipseState/Schedule/Events.cpp
src/opm/parser/eclipse/EclipseState/Schedule/GasLiftOpt.cpp
src/opm/parser/eclipse/EclipseState/Schedule/Group/GPMaint.cpp
src/opm/parser/eclipse/EclipseState/Schedule/Group/Group.cpp src/opm/parser/eclipse/EclipseState/Schedule/Group/Group.cpp
src/opm/parser/eclipse/EclipseState/Schedule/Group/GuideRate.cpp src/opm/parser/eclipse/EclipseState/Schedule/Group/GuideRate.cpp
src/opm/parser/eclipse/EclipseState/Schedule/Group/GuideRateConfig.cpp src/opm/parser/eclipse/EclipseState/Schedule/Group/GuideRateConfig.cpp
@ -118,12 +115,9 @@ if(ENABLE_ECL_INPUT)
src/opm/parser/eclipse/EclipseState/Schedule/MSW/Compsegs.cpp src/opm/parser/eclipse/EclipseState/Schedule/MSW/Compsegs.cpp
src/opm/parser/eclipse/EclipseState/Schedule/MSW/Segment.cpp src/opm/parser/eclipse/EclipseState/Schedule/MSW/Segment.cpp
src/opm/parser/eclipse/EclipseState/Schedule/MSW/WellSegments.cpp src/opm/parser/eclipse/EclipseState/Schedule/MSW/WellSegments.cpp
src/opm/parser/eclipse/EclipseState/Schedule/MSW/AICD.cpp src/opm/parser/eclipse/EclipseState/Schedule/MSW/updatingConnectionsWithSegments.cpp
src/opm/parser/eclipse/EclipseState/Schedule/MSW/SICD.cpp src/opm/parser/eclipse/EclipseState/Schedule/MSW/SpiralICD.cpp
src/opm/parser/eclipse/EclipseState/Schedule/MSW/Valve.cpp src/opm/parser/eclipse/EclipseState/Schedule/MSW/Valve.cpp
src/opm/parser/eclipse/EclipseState/Schedule/Network/Branch.cpp
src/opm/parser/eclipse/EclipseState/Schedule/Network/ExtNetwork.cpp
src/opm/parser/eclipse/EclipseState/Schedule/Network/Node.cpp
src/opm/parser/eclipse/EclipseState/Schedule/OilVaporizationProperties.cpp src/opm/parser/eclipse/EclipseState/Schedule/OilVaporizationProperties.cpp
src/opm/parser/eclipse/EclipseState/Schedule/RFTConfig.cpp src/opm/parser/eclipse/EclipseState/Schedule/RFTConfig.cpp
src/opm/parser/eclipse/EclipseState/Schedule/RPTConfig.cpp src/opm/parser/eclipse/EclipseState/Schedule/RPTConfig.cpp
@ -161,7 +155,6 @@ if(ENABLE_ECL_INPUT)
src/opm/parser/eclipse/EclipseState/Tables/TableColumn.cpp src/opm/parser/eclipse/EclipseState/Tables/TableColumn.cpp
src/opm/parser/eclipse/EclipseState/Tables/TableContainer.cpp src/opm/parser/eclipse/EclipseState/Tables/TableContainer.cpp
src/opm/parser/eclipse/EclipseState/Tables/TableIndex.cpp src/opm/parser/eclipse/EclipseState/Tables/TableIndex.cpp
src/opm/parser/eclipse/EclipseState/Tables/TLMixpar.cpp
src/opm/parser/eclipse/EclipseState/Tables/TableManager.cpp src/opm/parser/eclipse/EclipseState/Tables/TableManager.cpp
src/opm/parser/eclipse/EclipseState/Tables/TableSchema.cpp src/opm/parser/eclipse/EclipseState/Tables/TableSchema.cpp
src/opm/parser/eclipse/EclipseState/Tables/Tables.cpp src/opm/parser/eclipse/EclipseState/Tables/Tables.cpp
@ -169,7 +162,6 @@ if(ENABLE_ECL_INPUT)
src/opm/parser/eclipse/EclipseState/Tables/Rock2dtrTable.cpp src/opm/parser/eclipse/EclipseState/Tables/Rock2dtrTable.cpp
src/opm/parser/eclipse/EclipseState/Tables/PvtwsaltTable.cpp src/opm/parser/eclipse/EclipseState/Tables/PvtwsaltTable.cpp
src/opm/parser/eclipse/EclipseState/Tables/BrineDensityTable.cpp src/opm/parser/eclipse/EclipseState/Tables/BrineDensityTable.cpp
src/opm/parser/eclipse/EclipseState/Tables/RwgsaltTable.cpp
src/opm/parser/eclipse/EclipseState/Tables/SolventDensityTable.cpp src/opm/parser/eclipse/EclipseState/Tables/SolventDensityTable.cpp
src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQASTNode.cpp src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQASTNode.cpp
src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQParams.cpp src/opm/parser/eclipse/EclipseState/Schedule/UDQ/UDQParams.cpp
@ -199,6 +191,7 @@ if(ENABLE_ECL_INPUT)
src/opm/parser/eclipse/Units/Dimension.cpp src/opm/parser/eclipse/Units/Dimension.cpp
src/opm/parser/eclipse/Units/UnitSystem.cpp src/opm/parser/eclipse/Units/UnitSystem.cpp
src/opm/parser/eclipse/Utility/Functional.cpp src/opm/parser/eclipse/Utility/Functional.cpp
src/opm/parser/eclipse/Utility/Stringview.cpp
) )
@ -343,7 +336,6 @@ if(ENABLE_ECL_INPUT)
tests/parser/MultiRegTests.cpp tests/parser/MultiRegTests.cpp
tests/parser/MultisegmentWellTests.cpp tests/parser/MultisegmentWellTests.cpp
tests/parser/MULTREGTScannerTests.cpp tests/parser/MULTREGTScannerTests.cpp
tests/parser/NetworkTests.cpp
tests/parser/OrderedMapTests.cpp tests/parser/OrderedMapTests.cpp
tests/parser/ParseContextTests.cpp tests/parser/ParseContextTests.cpp
tests/parser/ParseContext_EXIT1.cpp tests/parser/ParseContext_EXIT1.cpp
@ -393,7 +385,6 @@ if(ENABLE_ECL_OUTPUT)
tests/test_AggregateConnectionData.cpp tests/test_AggregateConnectionData.cpp
tests/test_AggregateUDQData.cpp tests/test_AggregateUDQData.cpp
tests/test_ArrayDimChecker.cpp tests/test_ArrayDimChecker.cpp
tests/test_data_GuideRateValue.cpp
tests/test_EclipseIO.cpp tests/test_EclipseIO.cpp
tests/test_DoubHEAD.cpp tests/test_DoubHEAD.cpp
tests/test_InteHEAD.cpp tests/test_InteHEAD.cpp
@ -437,8 +428,6 @@ if(ENABLE_ECL_OUTPUT)
tests/SPE1CASE1A.SMSPEC tests/SPE1CASE1A.SMSPEC
tests/SPE9_CP_PACKED.DATA tests/SPE9_CP_PACKED.DATA
tests/SOFR_TEST.DATA tests/SOFR_TEST.DATA
tests/UDQ_BASE.DATA
tests/UDQ_RESTART.DATA
tests/UDQ_TEST_WCONPROD_IUAD-2.DATA tests/UDQ_TEST_WCONPROD_IUAD-2.DATA
tests/UDQ_ACTIONX_TEST1.DATA tests/UDQ_ACTIONX_TEST1.DATA
tests/UDQ_ACTIONX_TEST1_U.DATA tests/UDQ_ACTIONX_TEST1_U.DATA
@ -487,8 +476,6 @@ if(ENABLE_ECL_INPUT)
#examples/opmi.cpp #examples/opmi.cpp
#examples/opmpack.cpp #examples/opmpack.cpp
#examples/opmhash.cpp #examples/opmhash.cpp
#examples/wellgraph.cpp
#examples/make_lodsmry.cpp
) )
endif() endif()
@ -501,7 +488,6 @@ if(ENABLE_ECL_INPUT)
examples/opmi.cpp examples/opmi.cpp
examples/opmpack.cpp examples/opmpack.cpp
examples/opmhash.cpp examples/opmhash.cpp
examples/make_lodsmry.cpp
) )
endif() endif()
@ -548,6 +534,7 @@ if(ENABLE_ECL_INPUT)
list(APPEND PUBLIC_HEADER_FILES list(APPEND PUBLIC_HEADER_FILES
opm/io/eclipse/SummaryNode.hpp opm/io/eclipse/SummaryNode.hpp
opm/json/JsonObject.hpp opm/json/JsonObject.hpp
opm/parser/eclipse/Utility/Stringview.hpp
opm/parser/eclipse/Utility/Functional.hpp opm/parser/eclipse/Utility/Functional.hpp
opm/parser/eclipse/Utility/Typetools.hpp opm/parser/eclipse/Utility/Typetools.hpp
opm/parser/eclipse/Generator/KeywordGenerator.hpp opm/parser/eclipse/Generator/KeywordGenerator.hpp
@ -603,11 +590,8 @@ if(ENABLE_ECL_INPUT)
opm/parser/eclipse/EclipseState/Tables/SpecrockTable.hpp opm/parser/eclipse/EclipseState/Tables/SpecrockTable.hpp
opm/parser/eclipse/EclipseState/Tables/PvtwsaltTable.hpp opm/parser/eclipse/EclipseState/Tables/PvtwsaltTable.hpp
opm/parser/eclipse/EclipseState/Tables/BrineDensityTable.hpp opm/parser/eclipse/EclipseState/Tables/BrineDensityTable.hpp
opm/parser/eclipse/EclipseState/Tables/PermfactTable.hpp
opm/parser/eclipse/EclipseState/Tables/RwgsaltTable.hpp
opm/parser/eclipse/EclipseState/Tables/SaltvdTable.hpp
opm/parser/eclipse/EclipseState/Tables/SaltpvdTable.hpp
opm/parser/eclipse/EclipseState/Tables/SolventDensityTable.hpp opm/parser/eclipse/EclipseState/Tables/SolventDensityTable.hpp
opm/parser/eclipse/EclipseState/Tables/SaltvdTable.hpp
opm/parser/eclipse/EclipseState/Tables/PlydhflfTable.hpp opm/parser/eclipse/EclipseState/Tables/PlydhflfTable.hpp
opm/parser/eclipse/EclipseState/Tables/PlymwinjTable.hpp opm/parser/eclipse/EclipseState/Tables/PlymwinjTable.hpp
opm/parser/eclipse/EclipseState/Tables/PlyshlogTable.hpp opm/parser/eclipse/EclipseState/Tables/PlyshlogTable.hpp
@ -617,7 +601,6 @@ if(ENABLE_ECL_INPUT)
opm/parser/eclipse/EclipseState/Tables/SpecheatTable.hpp opm/parser/eclipse/EclipseState/Tables/SpecheatTable.hpp
opm/parser/eclipse/EclipseState/Tables/SgcwmisTable.hpp opm/parser/eclipse/EclipseState/Tables/SgcwmisTable.hpp
opm/parser/eclipse/EclipseState/Tables/Sof2Table.hpp opm/parser/eclipse/EclipseState/Tables/Sof2Table.hpp
opm/parser/eclipse/EclipseState/Tables/TLMixpar.hpp
opm/parser/eclipse/EclipseState/Tables/TableManager.hpp opm/parser/eclipse/EclipseState/Tables/TableManager.hpp
opm/parser/eclipse/EclipseState/Tables/SwfnTable.hpp opm/parser/eclipse/EclipseState/Tables/SwfnTable.hpp
opm/parser/eclipse/EclipseState/Tables/EnptvdTable.hpp opm/parser/eclipse/EclipseState/Tables/EnptvdTable.hpp
@ -627,8 +610,6 @@ if(ENABLE_ECL_INPUT)
opm/parser/eclipse/EclipseState/Tables/JFunc.hpp opm/parser/eclipse/EclipseState/Tables/JFunc.hpp
opm/parser/eclipse/EclipseState/Tables/TableIndex.hpp opm/parser/eclipse/EclipseState/Tables/TableIndex.hpp
opm/parser/eclipse/EclipseState/Tables/PvtgTable.hpp opm/parser/eclipse/EclipseState/Tables/PvtgTable.hpp
opm/parser/eclipse/EclipseState/Tables/PvtgwTable.hpp
opm/parser/eclipse/EclipseState/Tables/PvtgwoTable.hpp
opm/parser/eclipse/EclipseState/Tables/Tabdims.hpp opm/parser/eclipse/EclipseState/Tables/Tabdims.hpp
opm/parser/eclipse/EclipseState/Tables/TableSchema.hpp opm/parser/eclipse/EclipseState/Tables/TableSchema.hpp
opm/parser/eclipse/EclipseState/Tables/RocktabTable.hpp opm/parser/eclipse/EclipseState/Tables/RocktabTable.hpp
@ -685,12 +666,7 @@ if(ENABLE_ECL_INPUT)
opm/parser/eclipse/EclipseState/Schedule/Action/Condition.hpp opm/parser/eclipse/EclipseState/Schedule/Action/Condition.hpp
opm/parser/eclipse/EclipseState/Schedule/Action/ASTNode.hpp opm/parser/eclipse/EclipseState/Schedule/Action/ASTNode.hpp
opm/parser/eclipse/EclipseState/Schedule/Action/PyAction.hpp opm/parser/eclipse/EclipseState/Schedule/Action/PyAction.hpp
opm/parser/eclipse/EclipseState/Schedule/Action/State.hpp
opm/parser/eclipse/EclipseState/Schedule/ArrayDimChecker.hpp opm/parser/eclipse/EclipseState/Schedule/ArrayDimChecker.hpp
opm/parser/eclipse/EclipseState/Schedule/GasLiftOpt.hpp
opm/parser/eclipse/EclipseState/Schedule/Network/Branch.hpp
opm/parser/eclipse/EclipseState/Schedule/Network/ExtNetwork.hpp
opm/parser/eclipse/EclipseState/Schedule/Network/Node.hpp
opm/parser/eclipse/EclipseState/Schedule/TimeMap.hpp opm/parser/eclipse/EclipseState/Schedule/TimeMap.hpp
opm/parser/eclipse/EclipseState/Schedule/VFPInjTable.hpp opm/parser/eclipse/EclipseState/Schedule/VFPInjTable.hpp
opm/parser/eclipse/EclipseState/Schedule/VFPProdTable.hpp opm/parser/eclipse/EclipseState/Schedule/VFPProdTable.hpp
@ -717,7 +693,6 @@ if(ENABLE_ECL_INPUT)
opm/parser/eclipse/EclipseState/Schedule/Schedule.hpp opm/parser/eclipse/EclipseState/Schedule/Schedule.hpp
opm/parser/eclipse/EclipseState/Schedule/ScheduleTypes.hpp opm/parser/eclipse/EclipseState/Schedule/ScheduleTypes.hpp
opm/parser/eclipse/EclipseState/Schedule/Tuning.hpp opm/parser/eclipse/EclipseState/Schedule/Tuning.hpp
opm/parser/eclipse/EclipseState/Schedule/Group/GPMaint.hpp
opm/parser/eclipse/EclipseState/Schedule/Group/GTNode.hpp opm/parser/eclipse/EclipseState/Schedule/Group/GTNode.hpp
opm/parser/eclipse/EclipseState/Schedule/Group/Group.hpp opm/parser/eclipse/EclipseState/Schedule/Group/Group.hpp
opm/parser/eclipse/EclipseState/Schedule/Group/GuideRate.hpp opm/parser/eclipse/EclipseState/Schedule/Group/GuideRate.hpp
@ -733,8 +708,8 @@ if(ENABLE_ECL_INPUT)
opm/parser/eclipse/EclipseState/Schedule/MSW/Segment.hpp opm/parser/eclipse/EclipseState/Schedule/MSW/Segment.hpp
opm/parser/eclipse/EclipseState/Schedule/MSW/Segment.hpp opm/parser/eclipse/EclipseState/Schedule/MSW/Segment.hpp
opm/parser/eclipse/EclipseState/Schedule/MSW/WellSegments.hpp opm/parser/eclipse/EclipseState/Schedule/MSW/WellSegments.hpp
opm/parser/eclipse/EclipseState/Schedule/MSW/AICD.hpp opm/parser/eclipse/EclipseState/Schedule/MSW/updatingConnectionsWithSegments.hpp
opm/parser/eclipse/EclipseState/Schedule/MSW/SICD.hpp opm/parser/eclipse/EclipseState/Schedule/MSW/SpiralICD.hpp
opm/parser/eclipse/EclipseState/SimulationConfig/ThresholdPressure.hpp opm/parser/eclipse/EclipseState/SimulationConfig/ThresholdPressure.hpp
opm/parser/eclipse/EclipseState/SimulationConfig/BCConfig.hpp opm/parser/eclipse/EclipseState/SimulationConfig/BCConfig.hpp
opm/parser/eclipse/EclipseState/SimulationConfig/RockConfig.hpp opm/parser/eclipse/EclipseState/SimulationConfig/RockConfig.hpp
@ -789,10 +764,9 @@ if(ENABLE_ECL_OUTPUT)
opm/io/eclipse/rst/well.hpp opm/io/eclipse/rst/well.hpp
opm/output/data/Aquifer.hpp opm/output/data/Aquifer.hpp
opm/output/data/Cells.hpp opm/output/data/Cells.hpp
opm/output/data/GuideRateValue.hpp
opm/output/data/Groups.hpp
opm/output/data/Solution.hpp opm/output/data/Solution.hpp
opm/output/data/Wells.hpp opm/output/data/Wells.hpp
opm/output/data/Groups.hpp
opm/output/eclipse/VectorItems/aquifer.hpp opm/output/eclipse/VectorItems/aquifer.hpp
opm/output/eclipse/VectorItems/connection.hpp opm/output/eclipse/VectorItems/connection.hpp
opm/output/eclipse/VectorItems/group.hpp opm/output/eclipse/VectorItems/group.hpp

View File

@ -20,6 +20,7 @@ set(genkw_SOURCES src/opm/json/JsonObject.cpp
src/opm/parser/eclipse/Parser/raw/StarToken.cpp src/opm/parser/eclipse/Parser/raw/StarToken.cpp
src/opm/parser/eclipse/Units/Dimension.cpp src/opm/parser/eclipse/Units/Dimension.cpp
src/opm/parser/eclipse/Units/UnitSystem.cpp src/opm/parser/eclipse/Units/UnitSystem.cpp
src/opm/parser/eclipse/Utility/Stringview.cpp
src/opm/common/OpmLog/OpmLog.cpp src/opm/common/OpmLog/OpmLog.cpp
src/opm/common/OpmLog/Logger.cpp src/opm/common/OpmLog/Logger.cpp
src/opm/common/OpmLog/StreamLog.cpp src/opm/common/OpmLog/StreamLog.cpp

View File

@ -33,7 +33,8 @@ find_opm_package (
# test program # test program
"#include <dune/geometry/quadraturerules.hh> "#include <dune/geometry/quadraturerules.hh>
int main (void) { int main (void) {
Dune::GeometryType gt = Dune::GeometryTypes::quadrilateral; Dune::GeometryType gt;
gt.makeQuadrilateral();
Dune::QuadratureRules<double, 2>::rule(gt, 2).size(); Dune::QuadratureRules<double, 2>::rule(gt, 2).size();
return 0; return 0;
} }

View File

@ -106,13 +106,8 @@ macro (find_and_append_package_to prefix name)
# if we're told not to look for the package, pretend it was never found # if we're told not to look for the package, pretend it was never found
if (CMAKE_DISABLE_FIND_PACKAGE_${name}) if (CMAKE_DISABLE_FIND_PACKAGE_${name})
# If required send an error set (${name}_FOUND FALSE)
cmake_parse_arguments(FIND "REQUIRED" "" "" ${ARGN} ) set (${NAME}_FOUND FALSE)
set (${name}_FOUND FALSE)
set (${NAME}_FOUND FALSE)
if (FIND_REQUIRED)
message(SEND_ERROR "package ${name} but disable with CMAKE_DISABLE_FIND_PACKAGE_${name}")
endif ()
else () else ()
# List of components might differ for every module. Therefore we will # List of components might differ for every module. Therefore we will
# need to research for a library multiple times. _search_components # need to research for a library multiple times. _search_components

View File

@ -62,10 +62,7 @@ include (UseOptimization)
# turn on all warnings; this must be done before adding any # turn on all warnings; this must be done before adding any
# dependencies, in case they alter the list of warnings # dependencies, in case they alter the list of warnings
option(OPM_DISABLE_WARNINGS "Disable warning flags" OFF) include (UseWarnings)
if(NOT OPM_DISABLE_WARNINGS)
include (UseWarnings)
endif()
# parallel programming # parallel programming
include (UseOpenMP) include (UseOpenMP)

View File

@ -115,34 +115,26 @@ macro (find_opm_package module deps header lib defs prog conf)
# without config.h # without config.h
config_cmd_line (${module}_CMD_CONFIG ${module}_CONFIG_VARS) config_cmd_line (${module}_CMD_CONFIG ${module}_CONFIG_VARS)
if(prog) # check that we can compile a small test-program
# check that we can compile a small test-program include (CMakePushCheckState)
include (CMakePushCheckState) cmake_push_check_state ()
cmake_push_check_state () include (CheckCXXSourceCompiles)
include (CheckCXXSourceCompiles) # only add these if they are actually found; otherwise it won't
# only add these if they are actually found; otherwise it won't # compile and the variable won't be set
# compile and the variable won't be set append_found (${module}_INCLUDE_DIRS CMAKE_REQUIRED_INCLUDES)
append_found (${module}_INCLUDE_DIRS CMAKE_REQUIRED_INCLUDES) append_found (${module}_LIBRARIES CMAKE_REQUIRED_LIBRARIES)
append_found (${module}_LIBRARIES CMAKE_REQUIRED_LIBRARIES) # since we don't have any config.h yet
# since we don't have any config.h yet list (APPEND CMAKE_REQUIRED_DEFINITIONS ${${module}_DEFINITIONS})
list (APPEND CMAKE_REQUIRED_DEFINITIONS ${${module}_DEFINITIONS}) list (APPEND CMAKE_REQUIRED_DEFINITIONS ${${module}_CMD_CONFIG})
list (APPEND CMAKE_REQUIRED_DEFINITIONS ${${module}_CMD_CONFIG}) check_cxx_source_compiles ("${prog}" HAVE_${MODULE})
check_cxx_source_compiles ("${prog}" HAVE_${MODULE}) cmake_pop_check_state ()
cmake_pop_check_state ()
else(prog)
if(${module}_FOUND)
# No test code provided, mark compilation as successful
# if module was founf
set(HAVE_${MODULE} 1)
endif(${module}_FOUND)
endif(prog)
# write status message in the same manner as everyone else # write status message in the same manner as everyone else
include (FindPackageHandleStandardArgs) include (FindPackageHandleStandardArgs)
find_package_handle_standard_args ( find_package_handle_standard_args (
${module} ${module}
DEFAULT_MSG DEFAULT_MSG
${module}_INCLUDE_DIRS ${module}_LIBRARIES ${module}_FOUND ${module}_ALL_PREREQS HAVE_${MODULE} ${module}_INCLUDE_DIRS ${module}_LIBRARIES ${module}_FOUND ${module}_ALL_PREREQS
) )
# some genius that coded the FindPackageHandleStandardArgs figured out # some genius that coded the FindPackageHandleStandardArgs figured out

View File

@ -24,16 +24,9 @@ if (cmake_build_type_upper_ MATCHES DEBUG)
"#define PROJECT_VERSION_NAME \"${${project}_LABEL}\"\n" "#define PROJECT_VERSION_NAME \"${${project}_LABEL}\"\n"
"#define PROJECT_VERSION_HASH \"debug\"\n" "#define PROJECT_VERSION_HASH \"debug\"\n"
"#define PROJECT_VERSION \"${${project}_LABEL} (debug)\"\n" "#define PROJECT_VERSION \"${${project}_LABEL} (debug)\"\n"
"#define BUILD_TIMESTAMP \"${build_timestamp}\"\n"
"#endif // OPM_GENERATED_OPM_VERSION_HEADER_INCLUDED\n" "#endif // OPM_GENERATED_OPM_VERSION_HEADER_INCLUDED\n"
) )
# Write header file with build timestamp
file (WRITE "${PROJECT_BINARY_DIR}/project-timestamp.h"
"#ifndef OPM_GENERATED_OPM_TIMESTAMP_HEADER_INCLUDED\n"
"#define OPM_GENERATED_OPM_TIMESTAMP_HEADER_INCLUDED\n"
"#define BUILD_TIMESTAMP \"${build_timestamp}\"\n"
"#endif // OPM_GENERATED_OPM_TIMESTAMP_HEADER_INCLUDED\n"
)
else () else ()
if (NOT GIT_FOUND) if (NOT GIT_FOUND)
find_package (Git) find_package (Git)
@ -50,15 +43,9 @@ else ()
"#define PROJECT_VERSION_NAME \"${${project}_LABEL}\"\n" "#define PROJECT_VERSION_NAME \"${${project}_LABEL}\"\n"
"#define PROJECT_VERSION_HASH \"unknown git version\"\n" "#define PROJECT_VERSION_HASH \"unknown git version\"\n"
"#define PROJECT_VERSION \"${${project}_LABEL} (unknown git version)\"\n" "#define PROJECT_VERSION \"${${project}_LABEL} (unknown git version)\"\n"
"#define BUILD_TIMESTAMP \"${build_timestamp}\"\n"
"#endif // OPM_GENERATED_OPM_VERSION_HEADER_INCLUDED\n" "#endif // OPM_GENERATED_OPM_VERSION_HEADER_INCLUDED\n"
) )
# Write header file with build timestamp
file (WRITE "${PROJECT_BINARY_DIR}/project-timestamp.h"
"#ifndef OPM_GENERATED_OPM_TIMESTAMP_HEADER_INCLUDED\n"
"#define OPM_GENERATED_OPM_TIMESTAMP_HEADER_INCLUDED\n"
"#define BUILD_TIMESTAMP \"${build_timestamp}\"\n"
"#endif // OPM_GENERATED_OPM_TIMESTAMP_HEADER_INCLUDED\n"
)
else () else ()
add_custom_target (update-version ALL add_custom_target (update-version ALL
COMMAND ${CMAKE_COMMAND} COMMAND ${CMAKE_COMMAND}

View File

@ -56,6 +56,7 @@ file (WRITE "${PROJECT_BINARY_DIR}/project-version.tmp"
"#define PROJECT_VERSION_NAME \"${PROJECT_LABEL}\"\n" "#define PROJECT_VERSION_NAME \"${PROJECT_LABEL}\"\n"
"#define PROJECT_VERSION_HASH \"${sha1}\"\n" "#define PROJECT_VERSION_HASH \"${sha1}\"\n"
"#define PROJECT_VERSION \"${PROJECT_LABEL} (${sha1})\"\n" "#define PROJECT_VERSION \"${PROJECT_LABEL} (${sha1})\"\n"
"#define BUILD_TIMESTAMP \"${build_timestamp}\"\n"
"#endif // OPM_GENERATED_OPM_VERSION_HEADER_INCLUDED\n" "#endif // OPM_GENERATED_OPM_VERSION_HEADER_INCLUDED\n"
) )
@ -65,11 +66,3 @@ file (WRITE "${PROJECT_BINARY_DIR}/project-version.tmp"
execute_process (COMMAND execute_process (COMMAND
${CMAKE_COMMAND} -E copy_if_different "${PROJECT_BINARY_DIR}/project-version.tmp" "${PROJECT_BINARY_DIR}/project-version.h" ${CMAKE_COMMAND} -E copy_if_different "${PROJECT_BINARY_DIR}/project-version.tmp" "${PROJECT_BINARY_DIR}/project-version.h"
) )
# Write header file with build timestamp
file (WRITE "${PROJECT_BINARY_DIR}/project-timestamp.h"
"#ifndef OPM_GENERATED_OPM_TIMESTAMP_HEADER_INCLUDED\n"
"#define OPM_GENERATED_OPM_TIMESTAMP_HEADER_INCLUDED\n"
"#define BUILD_TIMESTAMP \"${build_timestamp}\"\n"
"#endif // OPM_GENERATED_OPM_TIMESTAMP_HEADER_INCLUDED\n"
)

View File

@ -0,0 +1,16 @@
#ifndef PORTABLE_ENDIAN_H__
#define PORTABLE_ENDIAN_H__
#if (defined(_WIN16) || defined(_WIN32) || defined(_WIN64)) && !defined(__WINDOWS__)
# define __WINDOWS__
#endif
#if defined(__WINDOWS__)
#define __builtin_bswap16(x) _byteswap_ushort((x))
#define __builtin_bswap32(x) _byteswap_ulong((x))
#define __builtin_bswap64(x) _byteswap_uint64((x))
#endif
#endif // PORTABLE_ENDIAN_H__

View File

@ -1,4 +1,4 @@
opm-common (2019.04-pre~xenial) xenial; urgency=medium opm-common (2020.04-1~xenial) xenial; urgency=medium
* New release * New release

View File

@ -1,109 +0,0 @@
/*
Copyright 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/>.
*/
#include <iostream>
#include <getopt.h>
#include <string.h>
#include <stdio.h>
#include "config.h"
#if HAVE_OPENMP
#include <omp.h>
#endif
#include <opm/io/eclipse/ESmry.hpp>
#include <opm/io/eclipse/EclUtil.hpp>
#include <opm/common/utility/FileSystem.hpp>
static void printHelp() {
std::cout << "\nThis program create one or more lodsmry files, designed for effective load on the demand. \n"
<< "These files are created with input from the smspec and unsmry file. \n"
<< "\nIn addition, the program takes these options (which must be given before the arguments):\n\n"
<< "-f if LODSMRY file exist, this will be replaced. Default behaviour is that existing file is kept.\n"
<< "-n Maximum number of threads to be used if mulitple files should be created.\n"
<< "-h Print help and exit.\n\n";
}
int main(int argc, char **argv) {
int c = 0;
int max_threads [[maybe_unused]] = -1;
bool force = false;
while ((c = getopt(argc, argv, "fn:h")) != -1) {
switch (c) {
case 'f':
force = true;
break;
case 'h':
printHelp();
return 0;
case 'n':
max_threads = atoi(optarg);
break;
default:
return EXIT_FAILURE;
}
}
int argOffset = optind;
#if HAVE_OPENMP
int available_threads = omp_get_max_threads();
if (max_threads < 0)
max_threads = available_threads-2;
else if (max_threads > (available_threads - 1))
max_threads = available_threads-1;
if (max_threads > (argc-argOffset))
max_threads = argc-argOffset;
omp_set_num_threads(max_threads);
#endif
auto lap0 = std::chrono::system_clock::now();
#pragma omp parallel for
for (int f = argOffset; f < argc; f ++){
Opm::filesystem::path inputFileName = argv[f];
Opm::filesystem::path lodFileName = inputFileName.parent_path() / inputFileName.stem();
lodFileName = lodFileName += ".LODSMRY";
if (Opm::EclIO::fileExists(lodFileName) && (force))
remove (lodFileName);
Opm::EclIO::ESmry smryFile(argv[f]);
if (!smryFile.make_lodsmry_file()){
std::cout << "\n! Warning, smspec already have one lod file, existing kept use option -f to replace this" << std::endl;
}
}
auto lap1 = std::chrono::system_clock::now();
std::chrono::duration<double> elapsed_seconds1 = lap1-lap0;
std::cout << "\nruntime for creating " << (argc-argOffset) << " LODSMRY files: " << elapsed_seconds1.count() << " seconds\n" << std::endl;
return 0;
}

View File

@ -1,135 +0,0 @@
/*
Copyright 2013, 2020 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/>.
*/
#include <fstream>
#include <iomanip>
#include <chrono>
#include <opm/parser/eclipse/Parser/Parser.hpp>
#include <opm/parser/eclipse/Parser/ParseContext.hpp>
#include <opm/parser/eclipse/Parser/ErrorGuard.hpp>
#include <opm/parser/eclipse/Deck/Deck.hpp>
#include <opm/parser/eclipse/EclipseState/EclipseState.hpp>
#include <opm/parser/eclipse/EclipseState/EclipseState.hpp>
#include <opm/parser/eclipse/EclipseState/Schedule/Schedule.hpp>
#include <opm/parser/eclipse/Python/Python.hpp>
#include <opm/common/OpmLog/OpmLog.hpp>
#include <opm/common/OpmLog/StreamLog.hpp>
#include <opm/common/OpmLog/LogUtil.hpp>
#include <opm/common/utility/FileSystem.hpp>
inline void createDot(const Opm::Schedule& schedule, const std::string& casename)
{
std::cout << "Writing " << casename << ".gv .... "; std::cout.flush();
std::ofstream os(casename + ".gv");
os << "// This file was written by the 'wellgraph' utility from OPM.\n";
os << "// Find the source code at github.com/OPM.\n";
os << "// Convert output to PDF with 'dot -Tpdf " << casename << ".gv > " << casename << ".pdf'\n";
os << "strict digraph \"" << casename << "\"\n{\n";
const auto groupnames = schedule.groupNames();
const std::size_t last = schedule.getTimeMap().last();
// Group -> Group relations.
for (const auto& gn : groupnames) {
const auto& g = schedule.getGroup(gn, last);
const auto& children = g.groups();
if (!children.empty()) {
os << " \"" << gn << "\" -> {";
for (const auto& child : children) {
os << " \"" << child << '"';
}
os << " }\n";
}
}
// Group -> Well relations.
os << " node [shape=box]\n";
for (const auto& gn : groupnames) {
const auto& g = schedule.getGroup(gn, last);
const auto& children = g.wells();
if (!children.empty()) {
os << " \"" << gn << "\" -> {";
for (const auto& child : children) {
os << " \"" << child << '"';
}
os << " }\n";
}
}
// Color wells by injector or producer.
for (const auto& w : schedule.getWellsatEnd()) {
os << " \"" << w.name() << '"';
if (w.isProducer() && w.isInjector()) {
os << " [color=purple]\n";
} else if (w.isProducer()) {
os << " [color=red]\n";
} else {
os << " [color=blue]\n";
}
}
os << "}\n";
std::cout << "complete." << std::endl;
}
inline Opm::Schedule loadSchedule(const std::string& deck_file)
{
Opm::ParseContext parseContext({{Opm::ParseContext::PARSE_RANDOM_SLASH, Opm::InputError::IGNORE},
{Opm::ParseContext::PARSE_MISSING_DIMS_KEYWORD, Opm::InputError::WARN},
{Opm::ParseContext::SUMMARY_UNKNOWN_WELL, Opm::InputError::WARN},
{Opm::ParseContext::SUMMARY_UNKNOWN_GROUP, Opm::InputError::WARN}});
Opm::ErrorGuard errors;
Opm::Parser parser;
auto python = std::make_shared<Opm::Python>();
std::cout << "Loading and parsing deck: " << deck_file << " ..... "; std::cout.flush();
auto deck = parser.parseFile(deck_file, parseContext, errors);
std::cout << "complete.\n";
std::cout << "Creating EclipseState .... "; std::cout.flush();
Opm::EclipseState state( deck );
std::cout << "complete.\n";
std::cout << "Creating Schedule .... "; std::cout.flush();
Opm::Schedule schedule( deck, state, python);
std::cout << "complete." << std::endl;
return schedule;
}
int main(int argc, char** argv)
{
std::ostringstream os;
std::shared_ptr<Opm::StreamLog> string_log = std::make_shared<Opm::StreamLog>(os, Opm::Log::DefaultMessageTypes);
Opm::OpmLog::addBackend( "STRING" , string_log);
try {
for (int iarg = 1; iarg < argc; iarg++) {
const std::string filename = argv[iarg];
const auto sched = loadSchedule(filename);
const auto casename = Opm::filesystem::path(filename).stem();
createDot(sched, casename);
}
} catch (const std::exception& e) {
std::cout << "\n\n***** Caught an exception: " << e.what() << std::endl;
std::cout << "\n\n***** Printing log: "<< std::endl;
std::cout << os.str();
std::cout << "\n\n***** Exiting due to errors." << std::endl;
}
}

View File

@ -14,8 +14,6 @@
#include <opm/output/data/Solution.hpp> #include <opm/output/data/Solution.hpp>
#include <opm/output/data/Wells.hpp> #include <opm/output/data/Wells.hpp>
#include <opm/output/data/Groups.hpp>
#include <opm/parser/eclipse/Deck/UDAValue.hpp>
namespace Opm { namespace Opm {
@ -25,11 +23,6 @@ class ParseContext;
class Parser; class Parser;
class Python; class Python;
class SummaryState; class SummaryState;
namespace Action {
class State;
}
class msim { class msim {
public: public:
@ -38,18 +31,16 @@ public:
msim(const EclipseState& state); msim(const EclipseState& state);
Opm::UDAValue uda_val();
void well_rate(const std::string& well, data::Rates::opt rate, std::function<well_rate_function> func); void well_rate(const std::string& well, data::Rates::opt rate, std::function<well_rate_function> func);
void solution(const std::string& field, std::function<solution_function> func); void solution(const std::string& field, std::function<solution_function> func);
void run(Schedule& schedule, EclipseIO& io, bool report_only); void run(Schedule& schedule, EclipseIO& io, bool report_only);
void post_step(Schedule& schedule, Action::State& action_state, SummaryState& st, data::Solution& sol, data::Wells& well_data, data::GroupValues& group_data, size_t report_step); void post_step(Schedule& schedule, SummaryState& st, data::Solution& sol, data::Wells& well_data, size_t report_step);
private: private:
void run_step(const Schedule& schedule, Action::State& action_state, SummaryState& st, data::Solution& sol, data::Wells& well_data, data::GroupValues& group_data, size_t report_step, EclipseIO& io) const; void run_step(const Schedule& schedule, SummaryState& st, data::Solution& sol, data::Wells& well_data, size_t report_step, EclipseIO& io) const;
void run_step(const Schedule& schedule, Action::State& action_state, SummaryState& st, data::Solution& sol, data::Wells& well_data, data::GroupValues& group_data, size_t report_step, double dt, EclipseIO& io) const; void run_step(const Schedule& schedule, SummaryState& st, data::Solution& sol, data::Wells& well_data, size_t report_step, double dt, EclipseIO& io) const;
void output(Action::State& action_state, SummaryState& st, size_t report_step, bool substep, double seconds_elapsed, const data::Solution& sol, const data::Wells& well_data, const data::GroupValues& group_data, EclipseIO& io) const; void output(SummaryState& st, size_t report_step, bool substep, double seconds_elapsed, const data::Solution& sol, const data::Wells& well_data, EclipseIO& io) const;
void simulate(const Schedule& schedule, const SummaryState& st, data::Solution& sol, data::Wells& well_data, data::GroupValues& group_data, size_t report_step, double seconds_elapsed, double time_step) const; void simulate(const Schedule& schedule, const SummaryState& st, data::Solution& sol, data::Wells& well_data, size_t report_step, double seconds_elapsed, double time_step) const;
EclipseState state; EclipseState state;
std::map<std::string, std::map<data::Rates::opt, std::function<well_rate_function>>> well_rates; std::map<std::string, std::map<data::Rates::opt, std::function<well_rate_function>>> well_rates;

View File

@ -29,7 +29,6 @@
#include <opm/parser/eclipse/EclipseState/Schedule/SummaryState.hpp> #include <opm/parser/eclipse/EclipseState/Schedule/SummaryState.hpp>
#include <opm/parser/eclipse/EclipseState/Schedule/Action/ActionContext.hpp> #include <opm/parser/eclipse/EclipseState/Schedule/Action/ActionContext.hpp>
#include <opm/parser/eclipse/EclipseState/Schedule/Action/State.hpp>
#include <opm/parser/eclipse/Parser/Parser.hpp> #include <opm/parser/eclipse/Parser/Parser.hpp>
#include <opm/parser/eclipse/Parser/ParseContext.hpp> #include <opm/parser/eclipse/Parser/ParseContext.hpp>
#include <opm/parser/eclipse/Parser/ErrorGuard.hpp> #include <opm/parser/eclipse/Parser/ErrorGuard.hpp>
@ -45,41 +44,35 @@ void msim::run(Schedule& schedule, EclipseIO& io, bool report_only) {
const double week = 7 * 86400; const double week = 7 * 86400;
data::Solution sol; data::Solution sol;
SummaryState st(std::chrono::system_clock::from_time_t(schedule.getStartTime())); SummaryState st(std::chrono::system_clock::from_time_t(schedule.getStartTime()));
Action::State action_state;
Python python; Python python;
io.writeInitial(); io.writeInitial();
for (size_t report_step = 1; report_step < schedule.size(); report_step++) { for (size_t report_step = 1; report_step < schedule.size(); report_step++) {
data::Wells well_data; data::Wells well_data;
data::GroupValues group_data;
if (report_only) if (report_only)
run_step(schedule, action_state, st, sol, well_data, group_data, report_step, io); run_step(schedule, st, sol, well_data, report_step, io);
else { else {
double time_step = std::min(week, 0.5*schedule.stepLength(report_step - 1)); double time_step = std::min(week, 0.5*schedule.stepLength(report_step - 1));
run_step(schedule, action_state, st, sol, well_data, group_data, report_step, time_step, io); run_step(schedule, st, sol, well_data, report_step, time_step, io);
} }
post_step(schedule, action_state, st, sol, well_data, group_data, report_step); post_step(schedule, st, sol, well_data, report_step);
const auto& exit_status = schedule.exitStatus(); const auto& exit_status = schedule.exitStatus();
if (exit_status.has_value()) if (exit_status.has_value())
return; return;
} }
} }
UDAValue msim::uda_val() {
return UDAValue();
}
void msim::post_step(Schedule& schedule, SummaryState& st, data::Solution& /* sol */, data::Wells& /* well_data */, size_t report_step) {
void msim::post_step(Schedule& schedule, Action::State& action_state, SummaryState& st, data::Solution& /* sol */, data::Wells& /* well_data */, data::GroupValues& /* group_data */, size_t report_step) {
const auto& actions = schedule.actions(report_step); const auto& actions = schedule.actions(report_step);
if (actions.empty()) if (actions.empty())
return; return;
Action::Context context( st , schedule.getWListManager(report_step)); Action::Context context( st );
auto sim_time = schedule.simTime(report_step); auto sim_time = schedule.simTime(report_step);
for (const auto& action : actions.pending(action_state, sim_time)) { for (const auto& action : actions.pending(sim_time)) {
auto result = action->eval(context); auto result = action->eval(sim_time, context);
if (result) if (result)
schedule.applyAction(report_step, *action, result); schedule.applyAction(report_step, *action, result);
} }
@ -90,12 +83,12 @@ void msim::post_step(Schedule& schedule, Action::State& action_state, SummarySta
void msim::run_step(const Schedule& schedule, Action::State& action_state, SummaryState& st, data::Solution& sol, data::Wells& well_data, data::GroupValues& group_data, size_t report_step, EclipseIO& io) const { void msim::run_step(const Schedule& schedule, SummaryState& st, data::Solution& sol, data::Wells& well_data, size_t report_step, EclipseIO& io) const {
this->run_step(schedule, action_state, st, sol, well_data, group_data, report_step, schedule.stepLength(report_step - 1), io); this->run_step(schedule, st, sol, well_data, report_step, schedule.stepLength(report_step - 1), io);
} }
void msim::run_step(const Schedule& schedule, Action::State& action_state, SummaryState& st, data::Solution& sol, data::Wells& well_data, data::GroupValues& group_data, size_t report_step, double dt, EclipseIO& io) const { void msim::run_step(const Schedule& schedule, SummaryState& st, data::Solution& sol, data::Wells& well_data, size_t report_step, double dt, EclipseIO& io) const {
double start_time = schedule.seconds(report_step - 1); double start_time = schedule.seconds(report_step - 1);
double end_time = schedule.seconds(report_step); double end_time = schedule.seconds(report_step);
double seconds_elapsed = start_time; double seconds_elapsed = start_time;
@ -105,7 +98,9 @@ void msim::run_step(const Schedule& schedule, Action::State& action_state, Summa
if ((seconds_elapsed + time_step) > end_time) if ((seconds_elapsed + time_step) > end_time)
time_step = end_time - seconds_elapsed; time_step = end_time - seconds_elapsed;
this->simulate(schedule, st, sol, well_data, group_data, report_step, seconds_elapsed, time_step); this->simulate(schedule, st, sol, well_data, report_step, seconds_elapsed, time_step);
Opm::data::Group group_data;
seconds_elapsed += time_step; seconds_elapsed += time_step;
@ -118,24 +113,21 @@ void msim::run_step(const Schedule& schedule, Action::State& action_state, Summa
group_data, group_data,
{}); {});
this->output(action_state, this->output(st,
st,
report_step, report_step,
(seconds_elapsed < end_time), (seconds_elapsed < end_time),
seconds_elapsed, seconds_elapsed,
sol, sol,
well_data, well_data,
group_data,
io); io);
} }
} }
void msim::output(Action::State& action_state, SummaryState& st, size_t report_step, bool substep, double seconds_elapsed, const data::Solution& sol, const data::Wells& well_data, const data::GroupValues& group_data, EclipseIO& io) const { void msim::output(SummaryState& st, size_t report_step, bool substep, double seconds_elapsed, const data::Solution& sol, const data::Wells& well_data, EclipseIO& io) const {
RestartValue value(sol, well_data, group_data); RestartValue value(sol, well_data);
io.writeTimeStep(action_state, io.writeTimeStep(st,
st,
report_step, report_step,
substep, substep,
seconds_elapsed, seconds_elapsed,
@ -143,7 +135,7 @@ void msim::output(Action::State& action_state, SummaryState& st, size_t report_s
} }
void msim::simulate(const Schedule& schedule, const SummaryState& st, data::Solution& sol, data::Wells& well_data, data::GroupValues& /* group_data */, size_t report_step, double seconds_elapsed, double time_step) const { void msim::simulate(const Schedule& schedule, const SummaryState& st, data::Solution& sol, data::Wells& well_data, size_t report_step, double seconds_elapsed, double time_step) const {
for (const auto& sol_pair : this->solutions) { for (const auto& sol_pair : this->solutions) {
auto func = sol_pair.second; auto func = sol_pair.second;
func(this->state, schedule, sol, report_step, seconds_elapsed + time_step); func(this->state, schedule, sol, report_step, seconds_elapsed + time_step);

View File

@ -43,7 +43,7 @@ namespace Opm
{ {
OPM_THROW(std::runtime_error, "Maximum number of iterations exceeded: " << maxiter << "\n" OPM_THROW(std::runtime_error, "Maximum number of iterations exceeded: " << maxiter << "\n"
<< "Current interval is [" << std::min(x0, x1) << ", " << "Current interval is [" << std::min(x0, x1) << ", "
<< std::max(x0, x1) << "] abs(x0-x1) " << std::abs(x0-x1)); << std::max(x0, x1) << "]");
return -1e100; // Never reached. return -1e100; // Never reached.
} }
}; };
@ -64,7 +64,7 @@ namespace Opm
OPM_REPORT; OPM_REPORT;
std::cerr << "Maximum number of iterations exceeded: " << maxiter std::cerr << "Maximum number of iterations exceeded: " << maxiter
<< ", current interval is [" << std::min(x0, x1) << ", " << ", current interval is [" << std::min(x0, x1) << ", "
<< std::max(x0, x1) << "] abs(x0-x1) " << std::abs(x0-x1); << std::max(x0, x1) << "]";
return 0.5*(x0 + x1); return 0.5*(x0 + x1);
} }
}; };
@ -124,7 +124,7 @@ namespace Opm
iterations_used = 0; iterations_used = 0;
// In every iteraton, x1 is the last point computed, // In every iteraton, x1 is the last point computed,
// and x0 is the last point computed that makes it a bracket. // and x0 is the last point computed that makes it a bracket.
while (fabs(x1 - x0) >= eps) { while (fabs(x1 - x0) >= 1e-9*eps) {
double xnew = regulaFalsiStep(x0, x1, f0, f1); double xnew = regulaFalsiStep(x0, x1, f0, f1);
double fnew = f(xnew); double fnew = f(xnew);
// cout << "xnew = " << xnew << " fnew = " << fnew << endl; // cout << "xnew = " << xnew << " fnew = " << fnew << endl;
@ -221,7 +221,7 @@ namespace Opm
iterations_used = 0; iterations_used = 0;
// In every iteraton, x1 is the last point computed, // In every iteraton, x1 is the last point computed,
// and x0 is the last point computed that makes it a bracket. // and x0 is the last point computed that makes it a bracket.
while (fabs(x1 - x0) >= eps) { while (fabs(x1 - x0) >= 1e-9*eps) {
double xnew = regulaFalsiStep(x0, x1, f0, f1); double xnew = regulaFalsiStep(x0, x1, f0, f1);
double fnew = f(xnew); double fnew = f(xnew);
// cout << "xnew = " << xnew << " fnew = " << fnew << endl; // cout << "xnew = " << xnew << " fnew = " << fnew << endl;
@ -327,7 +327,7 @@ namespace Opm
// and x0 is the last point computed that makes it a bracket. // and x0 is the last point computed that makes it a bracket.
double width = fabs(x1 - x0); double width = fabs(x1 - x0);
double contraction = 1.0; double contraction = 1.0;
while (width >= eps) { while (width >= 1e-9 * eps) {
// If we are contracting sufficiently to at least halve // If we are contracting sufficiently to at least halve
// the interval width in two iterations we use regula // the interval width in two iterations we use regula
// falsi. Otherwise, we take a bisection step to avoid // falsi. Otherwise, we take a bisection step to avoid

View File

@ -57,8 +57,6 @@ public:
void LoadData(const std::vector<std::string>& vectList) const; void LoadData(const std::vector<std::string>& vectList) const;
void LoadData() const; void LoadData() const;
bool make_lodsmry_file();
std::chrono::system_clock::time_point startdate() const { return startdat; } std::chrono::system_clock::time_point startdate() const { return startdat; }
const std::vector<std::string>& keywordList() const; const std::vector<std::string>& keywordList() const;
@ -67,7 +65,7 @@ public:
int timestepIdxAtReportstepStart(const int reportStep) const; int timestepIdxAtReportstepStart(const int reportStep) const;
size_t numberOfTimeSteps() const { return nTstep; } size_t numberOfTimeSteps() const { return timeStepList.size(); }
const std::string& get_unit(const std::string& name) const; const std::string& get_unit(const std::string& name) const;
const std::string& get_unit(const SummaryNode& node) const; const std::string& get_unit(const SummaryNode& node) const;
@ -76,11 +74,9 @@ public:
void write_rsm_file(std::optional<Opm::filesystem::path> = std::nullopt) const; void write_rsm_file(std::optional<Opm::filesystem::path> = std::nullopt) const;
private: private:
Opm::filesystem::path inputFileName, lodFileName; Opm::filesystem::path inputFileName;
int nI, nJ, nK, nSpecFiles; int nI, nJ, nK, nSpecFiles;
bool fromSingleRun, lodEnabeled; size_t nVect;
uint64_t lod_offset, lod_arr_size;
size_t nVect, nTstep;
std::vector<bool> formattedFiles; std::vector<bool> formattedFiles;
std::vector<std::string> dataFileList; std::vector<std::string> dataFileList;
@ -133,9 +129,6 @@ private:
std::vector<std::tuple <std::string, uint64_t>> getListOfArrays(std::string filename, bool formatted); std::vector<std::tuple <std::string, uint64_t>> getListOfArrays(std::string filename, bool formatted);
std::vector<int> makeKeywPosVector(int speInd) const; std::vector<int> makeKeywPosVector(int speInd) const;
std::string read_string_from_disk(std::fstream& fileH, uint64_t size) const;
void inspect_lodsmry();
void Load_from_lodsmry(const std::vector<int>& keywIndVect) const;
}; };
}} // namespace Opm::EclIO }} // namespace Opm::EclIO

View File

@ -23,8 +23,6 @@
#include <string> #include <string>
#include <tuple> #include <tuple>
#include <vector>
#include <functional>
namespace Opm { namespace EclIO { namespace Opm { namespace EclIO {
@ -33,8 +31,6 @@ namespace Opm { namespace EclIO {
float flipEndianFloat(float num); float flipEndianFloat(float num);
double flipEndianDouble(double num); double flipEndianDouble(double num);
bool isEOF(std::fstream* fileH); bool isEOF(std::fstream* fileH);
bool fileExists(const std::string& filename);
bool isFormatted(const std::string& filename);
std::tuple<int, int> block_size_data_binary(eclArrType arrType); std::tuple<int, int> block_size_data_binary(eclArrType arrType);
std::tuple<int, int, int> block_size_data_formatted(eclArrType arrType); std::tuple<int, int, int> block_size_data_formatted(eclArrType arrType);
@ -53,25 +49,6 @@ namespace Opm { namespace EclIO {
void readFormattedHeader(std::fstream& fileH, std::string& arrName, void readFormattedHeader(std::fstream& fileH, std::string& arrName,
int64_t &num, Opm::EclIO::eclArrType &arrType); int64_t &num, Opm::EclIO::eclArrType &arrType);
template<typename T, typename T2>
std::vector<T> readBinaryArray(std::fstream& fileH, const int64_t size, Opm::EclIO::eclArrType type,
std::function<T(T2)>& flip);
std::vector<int> readBinaryInteArray(std::fstream &fileH, const int64_t size);
std::vector<float> readBinaryRealArray(std::fstream& fileH, const int64_t size);
std::vector<double> readBinaryDoubArray(std::fstream& fileH, const int64_t size);
std::vector<bool> readBinaryLogiArray(std::fstream &fileH, const int64_t size);
std::vector<std::string> readBinaryCharArray(std::fstream& fileH, const int64_t size);
template<typename T>
std::vector<T> readFormattedArray(const std::string& file_str, const int size, int64_t fromPos,
std::function<T(const std::string&)>& process);
std::vector<int> readFormattedInteArray(const std::string& file_str, const int64_t size, int64_t fromPos);
std::vector<std::string> readFormattedCharArray(const std::string& file_str, const int64_t size, int64_t fromPos);
std::vector<float> readFormattedRealArray(const std::string& file_str, const int64_t size, int64_t fromPos);
std::vector<bool> readFormattedLogiArray(const std::string& file_str, const int64_t size, int64_t fromPos);
std::vector<double> readFormattedDoubArray(const std::string& file_str, const int64_t size, int64_t fromPos);
}} // namespace Opm::EclIO }} // namespace Opm::EclIO

View File

@ -25,7 +25,7 @@
#include <string> #include <string>
#include <unordered_set> #include <unordered_set>
namespace Opm { namespace EclIO { namespace Opm::EclIO {
struct SummaryNode { struct SummaryNode {
enum class Category { enum class Category {
@ -72,6 +72,6 @@ struct SummaryNode {
std::optional<std::string> display_number(number_renderer) const; std::optional<std::string> display_number(number_renderer) const;
}; };
}} // namespace Opm::EclIO } // namespace Opm::EclIO
#endif // OPM_IO_SUMMARYNODE_HPP #endif // OPM_IO_SUMMARYNODE_HPP

View File

@ -94,7 +94,6 @@ struct RstWell {
double gas_rate; double gas_rate;
double liquid_rate; double liquid_rate;
double void_rate; double void_rate;
double thp;
double flow_bhp; double flow_bhp;
double wct; double wct;
double gor; double gor;

View File

@ -30,26 +30,12 @@ namespace Json {
class JsonObject { class JsonObject {
public: public:
JsonObject();
explicit JsonObject(const Opm::filesystem::path& jsonFile ); explicit JsonObject(const Opm::filesystem::path& jsonFile );
explicit JsonObject(const std::string& inline_json); explicit JsonObject(const std::string& inline_json);
explicit JsonObject(const char * inline_json); explicit JsonObject(const char * inline_json);
explicit JsonObject(cJSON * root); explicit JsonObject(cJSON * root);
~JsonObject(); ~JsonObject();
void add(double value);
void add(int value);
void add(const std::string& value);
JsonObject add_array();
JsonObject add_object();
void add_item(const std::string& key, double value);
void add_item(const std::string& key, int value);
void add_item(const std::string& key, const std::string& value);
JsonObject add_array(const std::string& key);
JsonObject add_object(const std::string& key);
std::string dump() const;
bool has_item(const std::string& key) const; bool has_item(const std::string& key) const;
JsonObject get_array_item( size_t index ) const; JsonObject get_array_item( size_t index ) const;
JsonObject get_item(const std::string& key) const; JsonObject get_item(const std::string& key) const;

View File

@ -36,10 +36,10 @@ namespace data {
from the TargetType enum which indicates why they they have been from the TargetType enum which indicates why they they have been
added to the container - and where they are headed. added to the container - and where they are headed.
RESTART_SOLUTION : Cell-based quantities that are output to the RESTART_SOLUTION : Fields which represent primary variables, and
SOLUTION section of the restart file. ECLIPSE-compatible names. are reqired for restart. Typically pressure and
Many, but not necessarily all, of these quantities are required suturation. WIll end up in the SOLUTION section of the restart
for restarting the simulator. file.
RESTART_AUXILIARY : Fields with extra information, not required RESTART_AUXILIARY : Fields with extra information, not required
for restart. Examples of this include fluid in place values or for restart. Examples of this include fluid in place values or
@ -52,10 +52,6 @@ namespace data {
will not be output anywhere else. will not be output anywhere else.
INIT : Fields which should go to the INIT file. INIT : Fields which should go to the INIT file.
RESTART_OPM_EXTENDED: Cell-based quantities that are specific to
OPM-Flow. Output only to extended OPM restart files. Specifically
not output to ECLIPSE-compatible restart files.
*/ */
@ -64,7 +60,6 @@ namespace data {
RESTART_AUXILIARY, RESTART_AUXILIARY,
SUMMARY, SUMMARY,
INIT, INIT,
RESTART_OPM_EXTENDED,
}; };
/** /**

View File

@ -20,119 +20,63 @@
#ifndef OPM_OUTPUT_GROUPS_HPP #ifndef OPM_OUTPUT_GROUPS_HPP
#define OPM_OUTPUT_GROUPS_HPP #define OPM_OUTPUT_GROUPS_HPP
#include <algorithm>
#include <cstddef> #include <cstddef>
#include <initializer_list>
#include <map> #include <map>
#include <stdexcept> #include <stdexcept>
#include <string> #include <string>
#include <type_traits>
#include <unordered_map>
#include <vector> #include <vector>
#include <opm/output/data/GuideRateValue.hpp>
#include <opm/parser/eclipse/EclipseState/Schedule/Group/Group.hpp> #include <opm/parser/eclipse/EclipseState/Schedule/Group/Group.hpp>
namespace Opm { namespace data { namespace Opm {
struct GroupConstraints { namespace data {
struct currentGroupConstraints {
Opm::Group::ProductionCMode currentProdConstraint; Opm::Group::ProductionCMode currentProdConstraint;
Opm::Group::InjectionCMode currentGasInjectionConstraint; Opm::Group::InjectionCMode currentGasInjectionConstraint;
Opm::Group::InjectionCMode currentWaterInjectionConstraint; Opm::Group::InjectionCMode currentWaterInjectionConstraint;
template <class MessageBufferType> template <class MessageBufferType>
void write(MessageBufferType& buffer) const; void write(MessageBufferType& buffer) const;
template <class MessageBufferType> template <class MessageBufferType>
void read(MessageBufferType& buffer); void read(MessageBufferType& buffer);
bool operator==(const GroupConstraints& other) const inline currentGroupConstraints& set( Opm::Group::ProductionCMode cpc,
{ Opm::Group::InjectionCMode cgic,
return this->currentProdConstraint == other.currentProdConstraint && Opm::Group::InjectionCMode cwic);
this->currentGasInjectionConstraint == other.currentGasInjectionConstraint &&
this->currentWaterInjectionConstraint == other.currentWaterInjectionConstraint;
}
inline GroupConstraints& set(Opm::Group::ProductionCMode cpc,
Opm::Group::InjectionCMode cgic,
Opm::Group::InjectionCMode cwic);
}; };
struct GroupGuideRates {
GuideRateValue production{};
GuideRateValue injection{};
template <class MessageBufferType> class Group : public std::map<std::string, Opm::data::currentGroupConstraints> {
void write(MessageBufferType& buffer) const
{
this->production.write(buffer);
this->injection .write(buffer);
}
template <class MessageBufferType>
void read(MessageBufferType& buffer)
{
this->production.read(buffer);
this->injection .read(buffer);
}
bool operator==(const GroupGuideRates& other) const
{
return this->production == other.production
&& this->injection == other.injection;
}
};
struct GroupData {
GroupConstraints currentControl;
GroupGuideRates guideRates{};
template <class MessageBufferType>
void write(MessageBufferType& buffer) const
{
this->currentControl.write(buffer);
this->guideRates .write(buffer);
}
template <class MessageBufferType>
void read(MessageBufferType& buffer)
{
this->currentControl.read(buffer);
this->guideRates .read(buffer);
}
bool operator==(const GroupData& other) const
{
return this->currentControl == other.currentControl
&& this->guideRates == other.guideRates;
}
};
class GroupValues : public std::map<std::string, GroupData> {
public: public:
template <class MessageBufferType> template <class MessageBufferType>
void write(MessageBufferType& buffer) const void write(MessageBufferType& buffer) const {
{
unsigned int size = this->size(); unsigned int size = this->size();
buffer.write(size); buffer.write(size);
for (const auto& witr : *this) {
for (const auto& [gname, gdata] : *this) { const std::string& name = witr.first;
buffer.write(gname); buffer.write(name);
gdata .write(buffer); const auto& pi_constr = witr.second;
pi_constr.write(buffer);
} }
} }
template <class MessageBufferType> template <class MessageBufferType>
void read(MessageBufferType& buffer) void read(MessageBufferType& buffer) {
{ unsigned int size;
unsigned int size;
buffer.read(size); buffer.read(size);
for (size_t i = 0; i < size; ++i) { for (size_t i = 0; i < size; ++i) {
std::string name; std::string name;
buffer.read(name); buffer.read(name);
currentGroupConstraints cgc;
auto gdata = GroupData{}; cgc.read(buffer);
gdata.read(buffer); this->emplace(name, cgc);
this->emplace(name, gdata);
} }
} }
}; };
@ -140,28 +84,26 @@ namespace Opm { namespace data {
/* IMPLEMENTATIONS */ /* IMPLEMENTATIONS */
template <class MessageBufferType> template <class MessageBufferType>
void GroupConstraints::write(MessageBufferType& buffer) const { void currentGroupConstraints::write(MessageBufferType& buffer) const {
buffer.write(this->currentProdConstraint); buffer.write(this->currentProdConstraint);
buffer.write(this->currentGasInjectionConstraint); buffer.write(this->currentGasInjectionConstraint);
buffer.write(this->currentWaterInjectionConstraint); buffer.write(this->currentWaterInjectionConstraint);
} }
template <class MessageBufferType> template <class MessageBufferType>
void GroupConstraints::read(MessageBufferType& buffer) { void currentGroupConstraints::read(MessageBufferType& buffer) {
buffer.read(this->currentProdConstraint); buffer.read(this->currentProdConstraint);
buffer.read(this->currentGasInjectionConstraint); buffer.read(this->currentGasInjectionConstraint);
buffer.read(this->currentWaterInjectionConstraint); buffer.read(this->currentWaterInjectionConstraint);
} }
inline GroupConstraints&
GroupConstraints::set(Opm::Group::ProductionCMode cpc, inline currentGroupConstraints& currentGroupConstraints::set( Opm::Group::ProductionCMode cpc,
Opm::Group::InjectionCMode cgic, Opm::Group::InjectionCMode cgic,
Opm::Group::InjectionCMode cwic) Opm::Group::InjectionCMode cwic) {
{
this->currentGasInjectionConstraint = cgic; this->currentGasInjectionConstraint = cgic;
this->currentWaterInjectionConstraint = cwic; this->currentWaterInjectionConstraint = cwic;
this->currentProdConstraint = cpc; this->currentProdConstraint = cpc;
return *this; return *this;
} }

View File

@ -1,156 +0,0 @@
/*
Copyright (c) 2020 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_DATA_GUIDERATEVALUE_HPP
#define OPM_OUTPUT_DATA_GUIDERATEVALUE_HPP
#include <array>
#include <bitset>
#include <cstddef>
#include <stdexcept>
#include <string>
namespace Opm { namespace data {
class GuideRateValue {
public:
enum class Item : std::size_t {
Oil, Gas, Water, ResV,
// -- Must be last enumerator --
NumItems,
};
void clear()
{
this->mask_.reset();
this->value_.fill(0.0);
}
constexpr bool has(const Item p) const
{
const auto i = this->index(p);
return (i < Size) && this->mask_[i];
}
bool operator==(const GuideRateValue& vec) const
{
return (this->mask_ == vec.mask_)
&& (this->value_ == vec.value_);
}
double get(const Item p) const
{
if (! this->has(p)) {
throw std::invalid_argument {
"Request for Unset Item Value for " + this->itemName(p)
};
}
return this->value_[ this->index(p) ];
}
GuideRateValue& set(const Item p, const double value)
{
const auto i = this->index(p);
if (i >= Size) {
throw std::invalid_argument {
"Cannot Assign Item Value for Unsupported Item '"
+ this->itemName(p) + '\''
};
}
this->mask_.set(i);
this->value_[i] = value;
return *this;
}
GuideRateValue& operator+=(const GuideRateValue& rhs)
{
for (auto i = 0*Size; i < Size; ++i) {
if (rhs.mask_[i]) {
this->mask_.set(i);
this->value_[i] += rhs.value_[i];
}
}
return *this;
}
template <class MessageBufferType>
void write(MessageBufferType& buffer) const
{
auto maskrep = this->mask_.to_ullong();
buffer.write(maskrep);
for (const auto& x : this->value_) {
buffer.write(x);
}
}
template <class MessageBufferType>
void read(MessageBufferType& buffer)
{
this->clear();
{
auto mask = 0ull;
buffer.read(mask);
this->mask_ = std::bitset<Size>(mask);
}
for (auto& x : this->value_) {
buffer.read(x);
}
}
private:
enum { Size = static_cast<std::size_t>(Item::NumItems) };
std::bitset<Size> mask_{};
std::array<double, Size> value_{};
constexpr std::size_t index(const Item p) const noexcept
{
return static_cast<std::size_t>(p);
}
std::string itemName(const Item p) const
{
switch (p) {
case Item::Oil: return "Oil";
case Item::Gas: return "Gas";
case Item::Water: return "Water";
case Item::ResV: return "ResV";
case Item::NumItems:
return "Out of bounds (NumItems)";
}
return "Unknown (" + std::to_string(this->index(p)) + ')';
}
};
}} // namespace Opm::data
#endif // OPM_OUTPUT_DATA_GUIDERATEVALUE_HPP

View File

@ -30,8 +30,6 @@
#include <unordered_map> #include <unordered_map>
#include <vector> #include <vector>
#include <opm/output/data/GuideRateValue.hpp>
#include <opm/parser/eclipse/EclipseState/Schedule/Well/Well.hpp> #include <opm/parser/eclipse/EclipseState/Schedule/Well/Well.hpp>
namespace Opm { namespace Opm {
@ -68,7 +66,6 @@ namespace Opm {
well_potential_water = (1 << 14), well_potential_water = (1 << 14),
well_potential_oil = (1 << 15), well_potential_oil = (1 << 15),
well_potential_gas = (1 << 16), well_potential_gas = (1 << 16),
brine = (1 << 17),
}; };
using enum_size = std::underlying_type< opt >::type; using enum_size = std::underlying_type< opt >::type;
@ -120,7 +117,6 @@ namespace Opm {
double well_potential_water = 0.0; double well_potential_water = 0.0;
double well_potential_oil = 0.0; double well_potential_oil = 0.0;
double well_potential_gas = 0.0; double well_potential_gas = 0.0;
double brine = 0.0;
}; };
struct Connection { struct Connection {
@ -255,7 +251,6 @@ namespace Opm {
std::vector< Connection > connections; std::vector< Connection > connections;
std::unordered_map<std::size_t, Segment> segments; std::unordered_map<std::size_t, Segment> segments;
CurrentControl current_control; CurrentControl current_control;
GuideRateValue guide_rates{};
inline bool flowing() const noexcept; inline bool flowing() const noexcept;
template <class MessageBufferType> template <class MessageBufferType>
@ -296,8 +291,7 @@ namespace Opm {
control == well2.control && control == well2.control &&
connections == well2.connections && connections == well2.connections &&
segments == well2.segments && segments == well2.segments &&
current_control == well2.current_control && current_control == well2.current_control;
guide_rates == well2.guide_rates;
} }
}; };
@ -410,8 +404,7 @@ namespace Opm {
productivity_index_oil == rate.productivity_index_oil && productivity_index_oil == rate.productivity_index_oil &&
well_potential_water == rate.well_potential_water && well_potential_water == rate.well_potential_water &&
well_potential_oil == rate.well_potential_oil && well_potential_oil == rate.well_potential_oil &&
well_potential_gas == rate.well_potential_gas && well_potential_gas == rate.well_potential_gas;
brine == rate.brine;
} }
@ -443,7 +436,6 @@ namespace Opm {
case opt::well_potential_water: return this->well_potential_water; case opt::well_potential_water: return this->well_potential_water;
case opt::well_potential_oil: return this->well_potential_oil; case opt::well_potential_oil: return this->well_potential_oil;
case opt::well_potential_gas: return this->well_potential_gas; case opt::well_potential_gas: return this->well_potential_gas;
case opt::brine: return this->brine;
} }
throw std::invalid_argument( throw std::invalid_argument(
@ -490,7 +482,6 @@ namespace Opm {
buffer.write(this->well_potential_water); buffer.write(this->well_potential_water);
buffer.write(this->well_potential_oil); buffer.write(this->well_potential_oil);
buffer.write(this->well_potential_gas); buffer.write(this->well_potential_gas);
buffer.write(this->brine);
} }
template <class MessageBufferType> template <class MessageBufferType>
@ -547,7 +538,6 @@ namespace Opm {
} }
this->current_control.write(buffer); this->current_control.write(buffer);
this->guide_rates.write(buffer);
} }
template <class MessageBufferType> template <class MessageBufferType>
@ -570,7 +560,6 @@ namespace Opm {
buffer.read(this->well_potential_water); buffer.read(this->well_potential_water);
buffer.read(this->well_potential_oil); buffer.read(this->well_potential_oil);
buffer.read(this->well_potential_gas); buffer.read(this->well_potential_gas);
buffer.read(this->brine);
} }
template <class MessageBufferType> template <class MessageBufferType>
@ -640,7 +629,6 @@ namespace Opm {
} }
this->current_control.read(buffer); this->current_control.read(buffer);
this->guide_rates.read(buffer);
} }
}} // Opm::data }} // Opm::data

View File

@ -41,10 +41,6 @@ namespace Opm {
class Schedule; class Schedule;
class UDQInput; class UDQInput;
class UDQActive; class UDQActive;
namespace Action {
class State;
}
} // Opm } // Opm
@ -56,11 +52,10 @@ class AggregateActionxData
public: public:
explicit AggregateActionxData(const std::vector<int>& actDims); explicit AggregateActionxData(const std::vector<int>& actDims);
void captureDeclaredActionxData( const Opm::Schedule& sched, void captureDeclaredActionxData( const Opm::Schedule& sched,
const Opm::Action::State& action_state, const Opm::SummaryState& st,
const Opm::SummaryState& st, const std::vector<int>& actDims,
const std::vector<int>& actDims, const std::size_t simStep);
const std::size_t simStep);
const std::vector<int>& getIACT() const const std::vector<int>& getIACT() const
{ {

View File

@ -74,12 +74,8 @@ public:
"GOPT", "GWPT", "GGPT", "GVPT", "GWIT", "GOPT", "GWPT", "GGPT", "GVPT", "GWIT",
"GGIT", "GVIT", "GGIT", "GVIT",
"GOPTH", "GWPTH", "GGPTH", "GOPTH", "GWPTH", "GGPTH",
"GWITH", "GGITH", "GWITH", "GGITH"};
"GOPGR", "GWPGR", "GGPGR", "GVPGR",
"GOIGR", "GWIGR", "GGIGR",
};
// Note: guide rates don't exist at the FIELD level.
const std::vector<std::string> restart_field_keys = {"FOPP", "FWPP", "FOPR", "FWPR", "FGPR", const std::vector<std::string> restart_field_keys = {"FOPP", "FWPP", "FOPR", "FWPR", "FGPR",
"FVPR", "FWIR", "FGIR", "FWCT", "FGOR", "FVPR", "FWIR", "FGIR", "FWCT", "FGOR",
"FOPT", "FWPT", "FGPT", "FVPT", "FWIT", "FOPT", "FWPT", "FGPT", "FVPT", "FWIT",
@ -105,13 +101,6 @@ public:
{"GVIT", 17}, {"GVIT", 17},
{"GOPP", 22}, {"GOPP", 22},
{"GWPP", 23}, {"GWPP", 23},
{"GOPGR", 85},
{"GWPGR", 86},
{"GGPGR", 87},
{"GVPGR", 88},
{"GOIGR", 89},
{"GWIGR", 91},
{"GGIGR", 93},
{"GOPTH", 135}, {"GOPTH", 135},
{"GWPTH", 139}, {"GWPTH", 139},
{"GWITH", 140}, {"GWITH", 140},
@ -132,26 +121,6 @@ public:
{inj_cmode_enum::SALE, 0}, {inj_cmode_enum::SALE, 0},
}; };
// Note: guide rates don't exist at the FIELD level.
const std::map<int, inj_cmode_enum> ICntlModeToiCMode = {
{0, inj_cmode_enum::NONE},
{1, inj_cmode_enum::RATE},
{2, inj_cmode_enum::RESV},
{3, inj_cmode_enum::REIN},
{4, inj_cmode_enum::VREP}, };
using p_cmode = Opm::Group::ProductionCMode;
const std::map<int, p_cmode> PCntlModeToPCMode = {
{0, p_cmode::NONE},
{1, p_cmode::ORAT},
{2, p_cmode::WRAT},
{3, p_cmode::GRAT},
{4, p_cmode::LRAT},
{9, p_cmode::CRAT},
{5, p_cmode::RESV},
{6, p_cmode::PRBL},
};
const std::map<std::string, size_t> fieldKeyToIndex = { const std::map<std::string, size_t> fieldKeyToIndex = {
{"FOPR", 0}, {"FOPR", 0},
{"FWPR", 1}, {"FWPR", 1},

View File

@ -94,12 +94,12 @@ void captureDeclaredUDQData(const Opm::Schedule& sched,
{ {
return this->dUDW_.data(); return this->dUDW_.data();
} }
const std::vector<double>& getDUDG() const const std::vector<double>& getDUDG() const
{ {
return this->dUDG_.data(); return this->dUDG_.data();
} }
const std::vector<double>& getDUDF() const const std::vector<double>& getDUDF() const
{ {
return this->dUDF_.data(); return this->dUDF_.data();
@ -127,10 +127,10 @@ private:
/// Aggregate 'DUDW' array (Double Precision) for all UDQ data. (Dimension = max no wells * noOfUDQ's) /// Aggregate 'DUDW' array (Double Precision) for all UDQ data. (Dimension = max no wells * noOfUDQ's)
WindowedArray<double> dUDW_; WindowedArray<double> dUDW_;
/// Aggregate 'DUDG' array (Double Precision) for all UDQ data. (Dimension = (max no groups + 1) * noOfUDQ's) /// Aggregate 'DUDG' array (Double Precision) for all UDQ data. (Dimension = (max no groups + 1) * noOfUDQ's)
WindowedArray<double> dUDG_; WindowedArray<double> dUDG_;
/// Aggregate 'DUDF' array (Double Precision) for all UDQ data. (Dimension = Number of FU - UDQ's, with value equal to the actual constraint) /// Aggregate 'DUDF' array (Double Precision) for all UDQ data. (Dimension = Number of FU - UDQ's, with value equal to the actual constraint)
WindowedArray<double> dUDF_; WindowedArray<double> dUDF_;

View File

@ -33,9 +33,6 @@ namespace Opm {
class Schedule; class Schedule;
class SummaryState; class SummaryState;
class UnitSystem; class UnitSystem;
namespace Action {
class State;
}
} // Opm } // Opm
namespace Opm { namespace data { namespace Opm { namespace data {
@ -43,18 +40,22 @@ namespace Opm { namespace data {
}} // Opm::data }} // Opm::data
namespace Opm { namespace RestartIO { namespace Helpers { namespace Opm { namespace RestartIO { namespace Helpers {
struct ActionResStatus {
std::vector<Opm::Action::Result> result;
std::vector<std::string> name;
};
class AggregateWellData class AggregateWellData
{ {
public: public:
explicit AggregateWellData(const std::vector<int>& inteHead); explicit AggregateWellData(const std::vector<int>& inteHead);
void captureDeclaredWellData(const Schedule& sched, void captureDeclaredWellData(const Schedule& sched,
const UnitSystem& units, const UnitSystem& units,
const std::size_t sim_step, const std::size_t sim_step,
const ::Opm::Action::State& action_state, const ::Opm::SummaryState& smry,
const ::Opm::SummaryState& smry, const std::vector<int>& inteHead);
const std::vector<int>& inteHead);
void captureDynamicWellData(const Opm::Schedule& sched, void captureDynamicWellData(const Opm::Schedule& sched,
const std::size_t sim_step, const std::size_t sim_step,
@ -85,8 +86,8 @@ namespace Opm { namespace RestartIO { namespace Helpers {
return this->zWell_.data(); return this->zWell_.data();
} }
private: private:
/// Aggregate 'IWEL' array (Integer) for all wells. /// Aggregate 'IWEL' array (Integer) for all wells.
WindowedArray<int> iWell_; WindowedArray<int> iWell_;

View File

@ -45,7 +45,7 @@ class EclipseState;
class Schedule; class Schedule;
class SummaryConfig; class SummaryConfig;
class SummaryState; class SummaryState;
namespace Action { class State; }
/*! /*!
* \brief A class to write the reservoir state and the well state of a * \brief A class to write the reservoir state and the well state of a
* blackoil simulation to disk using the Eclipse binary format. * blackoil simulation to disk using the Eclipse binary format.
@ -174,8 +174,7 @@ public:
* hardcoded static map misc_units in Summary.cpp. * hardcoded static map misc_units in Summary.cpp.
*/ */
void writeTimeStep( const Action::State& action_state, void writeTimeStep( const SummaryState& st,
const SummaryState& st,
int report_step, int report_step,
bool isSubstep, bool isSubstep,
double seconds_elapsed, double seconds_elapsed,
@ -221,7 +220,7 @@ public:
missing, if the bool is false missing keywords will be ignored missing, if the bool is false missing keywords will be ignored
(there will *not* be an empty vector in the return value). (there will *not* be an empty vector in the return value).
*/ */
RestartValue loadRestart(Action::State& action_state, SummaryState& summary_state, const std::vector<RestartKey>& solution_keys, const std::vector<RestartKey>& extra_keys = {}) const; RestartValue loadRestart(SummaryState& summary_state, const std::vector<RestartKey>& solution_keys, const std::vector<RestartKey>& extra_keys = {}) const;
const out::Summary& summary(); const out::Summary& summary();
EclipseIO( const EclipseIO& ) = delete; EclipseIO( const EclipseIO& ) = delete;

View File

@ -46,12 +46,6 @@ namespace Opm { namespace EclIO { namespace OutputStream {
}}} }}}
namespace Opm { namespace Action {
class State;
}}
/* /*
The two free functions RestartIO::save() and RestartIO::load() can The two free functions RestartIO::save() and RestartIO::load() can
be used to save and load reservoir and well state from restart be used to save and load reservoir and well state from restart
@ -82,14 +76,12 @@ namespace Opm { namespace RestartIO {
const EclipseState& es, const EclipseState& es,
const EclipseGrid& grid, const EclipseGrid& grid,
const Schedule& schedule, const Schedule& schedule,
const Action::State& action_state,
const SummaryState& sumState, const SummaryState& sumState,
bool write_double = false); bool write_double = false);
RestartValue load(const std::string& filename, RestartValue load(const std::string& filename,
int report_step, int report_step,
Action::State& action_state,
SummaryState& summary_state, SummaryState& summary_state,
const std::vector<RestartKey>& solution_keys, const std::vector<RestartKey>& solution_keys,
const EclipseState& es, const EclipseState& es,

View File

@ -28,7 +28,6 @@
#include <opm/output/data/Aquifer.hpp> #include <opm/output/data/Aquifer.hpp>
#include <opm/output/data/Solution.hpp> #include <opm/output/data/Solution.hpp>
#include <opm/output/data/Wells.hpp> #include <opm/output/data/Wells.hpp>
#include <opm/output/data/Groups.hpp>
namespace Opm { namespace Opm {
@ -71,11 +70,10 @@ namespace Opm {
using ExtraVector = std::vector<std::pair<RestartKey, std::vector<double>>>; using ExtraVector = std::vector<std::pair<RestartKey, std::vector<double>>>;
data::Solution solution; data::Solution solution;
data::Wells wells; data::Wells wells;
data::GroupValues groups;
ExtraVector extra; ExtraVector extra;
std::vector<data::AquiferData> aquifer; std::vector<data::AquiferData> aquifer;
RestartValue(data::Solution sol, data::Wells wells_arg, data::GroupValues groups_arg); RestartValue(data::Solution sol, data::Wells wells_arg);
RestartValue() {} RestartValue() {}
@ -91,7 +89,6 @@ namespace Opm {
{ {
return solution == val2.solution && return solution == val2.solution &&
wells == val2.wells && wells == val2.wells &&
groups == val2.groups &&
extra == val2.extra; extra == val2.extra;
} }
}; };

View File

@ -38,7 +38,7 @@ namespace Opm {
namespace Opm { namespace data { namespace Opm { namespace data {
class WellRates; class WellRates;
class GroupValues; class Group;
}} // namespace Opm::data }} // namespace Opm::data
namespace Opm { namespace out { namespace Opm { namespace out {
@ -65,7 +65,7 @@ public:
const EclipseState& es, const EclipseState& es,
const Schedule& schedule, const Schedule& schedule,
const data::WellRates& well_solution, const data::WellRates& well_solution,
const data::GroupValues& group_solution, const data::Group& group_solution,
const GlobalProcessParameters& single_values, const GlobalProcessParameters& single_values,
const RegionParameters& region_values = {}, const RegionParameters& region_values = {},
const BlockValues& block_values = {}) const; const BlockValues& block_values = {}) const;

View File

@ -34,10 +34,6 @@ namespace Opm { namespace RestartIO { namespace Helpers { namespace VectorItems
}; };
enum inj_index : std::vector<float>::size_type { enum inj_index : std::vector<float>::size_type {
oilSurfRateLimit = 10, // Group's oil surface volume injection rate target/limit
oilResRateLimit = 11, // Group's oil reservoir volume injection rate target/limit
oilReinjectionLimit = 12, // Group's oil reinjection fraction target/limit
oilVoidageLimit = 13, // Group's oil voidage injection fraction target/limit
waterSurfRateLimit = 15, //i Group's water surface volume injection rate target/limit waterSurfRateLimit = 15, //i Group's water surface volume injection rate target/limit
waterResRateLimit = 16, // Group's water reservoir volume injection rate target/limit waterResRateLimit = 16, // Group's water reservoir volume injection rate target/limit
waterReinjectionLimit = 17, // Group's water reinjection fraction target/limit waterReinjectionLimit = 17, // Group's water reinjection fraction target/limit
@ -78,26 +74,6 @@ namespace Opm { namespace RestartIO { namespace Helpers { namespace VectorItems
OilPrPot = 22, // Group's oil production potential OilPrPot = 22, // Group's oil production potential
WatPrPot = 23, // Group's water production potential WatPrPot = 23, // Group's water production potential
OilPrGuideRate = 85, // Group's producer guide rate for oil.
WatPrGuideRate = 86, // Group's producer guide rate for water.
GasPrGuideRate = 87, // Group's producer guide rate for gas.
VoidPrGuideRate = 88, // Group's producer guide rate for reservoir voidage volume.
OilInjGuideRate = 89, // Group's injection guide rate for oil.
WatInjGuideRate = 91, // Group's injection guide rate for water.
WatInjGuideRate_2 = 92, // Second copy of group's injection guide rate for water.
// Not fully characterised.
GasInjGuideRate = 93, // Groups injection guide rate for gas.
OilPrGuideRate_2 = 127, // Second copy of group's producer guide rate for oil.
// Not fully characterised.
WatPrGuideRate_2 = 128, // Second copy of group's producer guide rate for water.
// Not fully characterised.
GasPrGuideRate_2 = 129, // Second copy of group's producer guide rate for gas.
// Not fully characterised.
VoidPrGuideRate_2 = 130, // Second copy of group's producer guide rate for
// reservoir voidage volume. Not fully characterised.
HistOilPrTotal = 135, // Group's total cumulative oil HistOilPrTotal = 135, // Group's total cumulative oil
// production (observed/historical rates) // production (observed/historical rates)
HistWatPrTotal = 139, // Group's total cumulative water HistWatPrTotal = 139, // Group's total cumulative water

View File

@ -55,8 +55,6 @@ namespace Opm { namespace RestartIO { namespace Helpers { namespace VectorItems
GasFlowFract = 10, // Normalised Gas flow rate fraction GasFlowFract = 10, // Normalised Gas flow rate fraction
Pressure = 11, // Segment pressure Pressure = 11, // Segment pressure
item31 = 30, // Very close to Normalised Water flow rate fraction - value used pr today
item40 = 39, // Unknown item40 = 39, // Unknown
ValveLength = 40, // Length of valve ValveLength = 40, // Length of valve

View File

@ -43,7 +43,7 @@ namespace Opm { namespace RestartIO { namespace Helpers { namespace VectorItems
// simulation deck (WCONINJE, WCONPROD). // simulation deck (WCONINJE, WCONPROD).
item18 = 17, // Unknown item18 = 17, // Unknown
XFlow = 22, XFlow = 22,
item25 = 24, // Unknown item25 = 24, // Unknown
item32 = 31, // Unknown item32 = 31, // Unknown
item48 = 47, // Unknown item48 = 47, // Unknown
@ -113,11 +113,10 @@ namespace Opm { namespace RestartIO { namespace Helpers { namespace VectorItems
BHPTarget = 6, // Well's bottom hole pressure target BHPTarget = 6, // Well's bottom hole pressure target
DatumDepth = 9, // Well's reference depth for BHP DatumDepth = 9, // Well's reference depth for BHP
Alq_value = 10, // Well's artificial lift quantity
DrainageRadius = 17, // Well's drainage radius - item 7 from WELSPECS DrainageRadius = 17, // Well's drainage radius - item 7 from WELSPECS
EfficiencyFactor1 = 24, // Item2 from WEFAC; this value is repeated at two locations. EfficiencyFactor1 = 24, // Item2 from WEFAC; this value is repeated at two locations.
EfficiencyFactor2 = 31, // Item2 from WEFAC EfficiencyFactor2 = 31, //
HistLiqRateTarget = 33, // Well's historical/observed liquid HistLiqRateTarget = 33, // Well's historical/observed liquid
// rate target/limit // rate target/limit
@ -136,7 +135,7 @@ namespace Opm { namespace RestartIO { namespace Helpers { namespace VectorItems
GasPrRate = 2, // Well's gas production rate GasPrRate = 2, // Well's gas production rate
LiqPrRate = 3, // Well's liquid production rate LiqPrRate = 3, // Well's liquid production rate
VoidPrRate = 4, // Well's reservoir voidage production rate VoidPrRate = 4, // Well's reservoir voidage production rate
TubHeadPr = 5, // Well's tubing head pressure
FlowBHP = 6, // Well's flowing/producing bottom hole pressure FlowBHP = 6, // Well's flowing/producing bottom hole pressure
WatCut = 7, // Well's producing water cut WatCut = 7, // Well's producing water cut
GORatio = 8, // Well's producing gas/oil ratio GORatio = 8, // Well's producing gas/oil ratio
@ -158,12 +157,6 @@ namespace Opm { namespace RestartIO { namespace Helpers { namespace VectorItems
BHPTarget = 41, // Well's current BHP Target/Limit BHPTarget = 41, // Well's current BHP Target/Limit
PrimGuideRate = 48, // Well's "primary" guide rate (oil for producers,
// preferred phase for injectors)
WatPrGuideRate = 49, // Well's producer guide rate for water
GasPrGuideRate = 50, // Well's producer guide rate for gas
VoidPrGuideRate = 68, // Well's producer guide rate for reservoir voidag volume
HistOilPrTotal = 75, // Well's total cumulative oil production HistOilPrTotal = 75, // Well's total cumulative oil production
// (observed/historical rates) // (observed/historical rates)
HistWatPrTotal = 76, // Well's total cumulative water HistWatPrTotal = 76, // Well's total cumulative water
@ -176,15 +169,6 @@ namespace Opm { namespace RestartIO { namespace Helpers { namespace VectorItems
HistGasInjTotal = 82, // Well's total cumulative gas injection HistGasInjTotal = 82, // Well's total cumulative gas injection
// (observed/historical rates) // (observed/historical rates)
PrimGuideRate_2 = 91, // Second copy of well's primary guide rate.
// Not fully characterised.
WatPrGuideRate_2 = 92, // Second copy of well's producer guide rate for water.
// Not fully characterised.
GasPrGuideRate_2 = 93, // Second copy of well's producer guide rate for gas
// Not fully characterised.
VoidPrGuideRate_2 = 94, // Second copy of well's producer guide rate for reservoir voidage
// Not fully characterised.
WatVoidPrRate = 122, // Well's voidage production rate WatVoidPrRate = 122, // Well's voidage production rate
GasVoidPrRate = 123, // Well's voidage production rate GasVoidPrRate = 123, // Well's voidage production rate
}; };

View File

@ -26,7 +26,6 @@ namespace Opm {
class Schedule; class Schedule;
class EclipseGrid; class EclipseGrid;
class UnitSystem;
namespace RptIO { namespace RptIO {
@ -36,13 +35,12 @@ namespace Opm {
unsigned value, unsigned value,
const Schedule& schedule, const Schedule& schedule,
const EclipseGrid& grid, const EclipseGrid& grid,
const UnitSystem& unit_system,
std::size_t time_step std::size_t time_step
); );
namespace workers { namespace workers {
void write_WELSPECS(std::ostream&, unsigned, const Schedule&, const EclipseGrid& grid, const UnitSystem&, std::size_t); void write_WELSPECS(std::ostream&, unsigned, const Schedule&, const EclipseGrid& grid, std::size_t);
} } } } } }
#endif // OPM_WRITE_RPT_HPP #endif // OPM_WRITE_RPT_HPP

View File

@ -54,9 +54,6 @@ public:
double getSI() const; double getSI() const;
bool zero() const; bool zero() const;
//epsilon limit = 1.E-20 (~= 0.)
double epsilonLimit() const;
template<typename T> template<typename T>
bool is() const; bool is() const;
@ -68,7 +65,6 @@ public:
bool operator!=(const UDAValue& other) const; bool operator!=(const UDAValue& other) const;
UDAValue& operator=(double value); UDAValue& operator=(double value);
UDAValue& operator=(const std::string& value); UDAValue& operator=(const std::string& value);
void update_value(const UDAValue& other);
bool is_numeric() { return numeric_value; } bool is_numeric() { return numeric_value; }

View File

@ -38,10 +38,9 @@ namespace Opm {
static EclipseConfig serializeObject(); static EclipseConfig serializeObject();
InitConfig& init(); const InitConfig& init() const;
IOConfig& io(); IOConfig& io();
const IOConfig& io() const; const IOConfig& io() const;
const InitConfig& init() const;
const InitConfig& getInitConfig() const; const InitConfig& getInitConfig() const;
bool operator==(const EclipseConfig& data) const; bool operator==(const EclipseConfig& data) const;

View File

@ -77,8 +77,6 @@ namespace Opm {
IOConfig& getIOConfig(); IOConfig& getIOConfig();
const InitConfig& getInitConfig() const; const InitConfig& getInitConfig() const;
InitConfig& getInitConfig();
const SimulationConfig& getSimulationConfig() const; const SimulationConfig& getSimulationConfig() const;
virtual const EclipseGrid& getInputGrid() const; virtual const EclipseGrid& getInputGrid() const;

View File

@ -110,7 +110,6 @@ namespace Opm {
double getPinchThresholdThickness( ) const; double getPinchThresholdThickness( ) const;
PinchMode::ModeEnum getPinchOption( ) const; PinchMode::ModeEnum getPinchOption( ) const;
PinchMode::ModeEnum getMultzOption( ) const; PinchMode::ModeEnum getMultzOption( ) const;
PinchMode::ModeEnum getPinchGapMode( ) const;
MinpvMode::ModeEnum getMinpvMode() const; MinpvMode::ModeEnum getMinpvMode() const;
const std::vector<double>& getMinpvVector( ) const; const std::vector<double>& getMinpvVector( ) const;
@ -197,7 +196,6 @@ namespace Opm {
Value<double> m_pinch; Value<double> m_pinch;
PinchMode::ModeEnum m_pinchoutMode; PinchMode::ModeEnum m_pinchoutMode;
PinchMode::ModeEnum m_multzMode; PinchMode::ModeEnum m_multzMode;
PinchMode::ModeEnum m_pinchGapMode;
bool m_circle = false; bool m_circle = false;

View File

@ -28,9 +28,7 @@ namespace Opm {
enum ModeEnum { enum ModeEnum {
ALL = 1, ALL = 1,
TOPBOT = 2, TOPBOT = 2,
TOP = 3, TOP = 3
GAP = 4,
NOGAP = 5,
}; };
const std::string PinchMode2String(const ModeEnum enumValue); const std::string PinchMode2String(const ModeEnum enumValue);

View File

@ -19,50 +19,227 @@
#ifndef ECLIPSE_SATFUNCPROPERTY_INITIALIZERS_HPP #ifndef ECLIPSE_SATFUNCPROPERTY_INITIALIZERS_HPP
#define ECLIPSE_SATFUNCPROPERTY_INITIALIZERS_HPP #define ECLIPSE_SATFUNCPROPERTY_INITIALIZERS_HPP
#include <memory>
#include <string> #include <string>
#include <vector> #include <vector>
namespace Opm { namespace Opm {
class Phases; class Phases;
class TableManager; class TableManager;
}
namespace Opm { namespace satfunc { namespace satfunc {
struct RawTableEndPoints std::vector<double> SGLEndpoint(const TableManager&,
{ const Phases&,
struct { const std::vector<double>&,
std::vector<double> gas; const std::vector<int>&,
std::vector<double> water; const std::vector<int>&);
} connate;
struct { std::vector<double> ISGLEndpoint(const TableManager&,
std::vector<double> oil_in_gas; const Phases&,
std::vector<double> oil_in_water; const std::vector<double>&,
std::vector<double> gas; const std::vector<int>&,
std::vector<double> water; const std::vector<int>&);
} critical;
struct { std::vector<double> SGUEndpoint(const TableManager&,
std::vector<double> gas; const Phases&,
std::vector<double> water; const std::vector<double>&,
} maximum; const std::vector<int>&,
}; const std::vector<int>&);
std::shared_ptr<RawTableEndPoints> std::vector<double> ISGUEndpoint(const TableManager&,
getRawTableEndpoints(const Opm::TableManager& tm, const Phases&,
const Opm::Phases& phases, const std::vector<double>&,
const double tolcrit); const std::vector<int>&,
const std::vector<int>&);
std::vector<double> SWLEndpoint(const TableManager&,
const Phases&,
const std::vector<double>&,
const std::vector<int>&,
const std::vector<int>&);
std::vector<double> ISWLEndpoint(const TableManager&,
const Phases&,
const std::vector<double>&,
const std::vector<int>&,
const std::vector<int>&);
std::vector<double> SWUEndpoint(const TableManager&,
const Phases&,
const std::vector<double>&,
const std::vector<int>&,
const std::vector<int>&);
std::vector<double> ISWUEndpoint(const TableManager&,
const Phases&,
const std::vector<double>&,
const std::vector<int>&,
const std::vector<int>&);
std::vector<double> SGCREndpoint(const TableManager&,
const Phases&,
const std::vector<double>&,
const std::vector<int>&,
const std::vector<int>&);
std::vector<double> ISGCREndpoint(const TableManager&,
const Phases&,
const std::vector<double>&,
const std::vector<int>&,
const std::vector<int>&);
std::vector<double> SOWCREndpoint(const TableManager&,
const Phases&,
const std::vector<double>&,
const std::vector<int>&,
const std::vector<int>&);
std::vector<double> ISOWCREndpoint(const TableManager&,
const Phases&,
const std::vector<double>&,
const std::vector<int>&,
const std::vector<int>&);
std::vector<double> SOGCREndpoint(const TableManager&,
const Phases&,
const std::vector<double>&,
const std::vector<int>&,
const std::vector<int>&);
std::vector<double> ISOGCREndpoint(const TableManager&,
const Phases&,
const std::vector<double>&,
const std::vector<int>&,
const std::vector<int>&);
std::vector<double> SWCREndpoint(const TableManager&,
const Phases&,
const std::vector<double>&,
const std::vector<int>&,
const std::vector<int>&);
std::vector<double> ISWCREndpoint(const TableManager&,
const Phases&,
const std::vector<double>&,
const std::vector<int>&,
const std::vector<int>&);
std::vector<double> PCWEndpoint(const TableManager&,
const Phases&,
const std::vector<double>&,
const std::vector<int>&,
const std::vector<int>&);
std::vector<double> IPCWEndpoint(const TableManager&,
const Phases&,
const std::vector<double>&,
const std::vector<int>&,
const std::vector<int>&);
std::vector<double> PCGEndpoint(const TableManager&,
const Phases&,
const std::vector<double>&,
const std::vector<int>&,
const std::vector<int>&);
std::vector<double> IPCGEndpoint(const TableManager&,
const Phases&,
const std::vector<double>&,
const std::vector<int>&,
const std::vector<int>&);
std::vector<double> KRWEndpoint(const TableManager&,
const Phases&,
const std::vector<double>&,
const std::vector<int>&,
const std::vector<int>&);
std::vector<double> IKRWEndpoint(const TableManager&,
const Phases&,
const std::vector<double>&,
const std::vector<int>&,
const std::vector<int>&);
std::vector<double> KRWREndpoint(const TableManager&,
const Phases&,
const std::vector<double>&,
const std::vector<int>&,
const std::vector<int>&);
std::vector<double> IKRWREndpoint(const TableManager&,
const Phases&,
const std::vector<double>&,
const std::vector<int>&,
const std::vector<int>&);
std::vector<double> KROEndpoint(const TableManager&,
const Phases&,
const std::vector<double>&,
const std::vector<int>&,
const std::vector<int>&);
std::vector<double> IKROEndpoint(const TableManager&,
const Phases&,
const std::vector<double>&,
const std::vector<int>&,
const std::vector<int>&);
std::vector<double> KRORWEndpoint(const TableManager&,
const Phases&,
const std::vector<double>&,
const std::vector<int>&,
const std::vector<int>&);
std::vector<double> IKRORWEndpoint(const TableManager&,
const Phases&,
const std::vector<double>&,
const std::vector<int>&,
const std::vector<int>&);
std::vector<double> KRORGEndpoint(const TableManager&,
const Phases&,
const std::vector<double>&,
const std::vector<int>&,
const std::vector<int>&);
std::vector<double> IKRORGEndpoint(const TableManager&,
const Phases&,
const std::vector<double>&,
const std::vector<int>&,
const std::vector<int>&);
std::vector<double> KRGEndpoint(const TableManager&,
const Phases&,
const std::vector<double>&,
const std::vector<int>&,
const std::vector<int>&);
std::vector<double> IKRGEndpoint(const TableManager&,
const Phases&,
const std::vector<double>&,
const std::vector<int>&,
const std::vector<int>&);
std::vector<double> KRGREndpoint(const TableManager&,
const Phases&,
const std::vector<double>&,
const std::vector<int>&,
const std::vector<int>&);
std::vector<double> IKRGREndpoint(const TableManager&,
const Phases&,
const std::vector<double>&,
const std::vector<int>&,
const std::vector<int>&);
std::vector<double> init(const std::string& kewyord, std::vector<double> init(const std::string& kewyord,
const TableManager& tables, const TableManager& tables,
const Phases& phases, const Phases& phases,
const RawTableEndPoints& ep,
const std::vector<double>& cell_depth, const std::vector<double>& cell_depth,
const std::vector<int>& num, const std::vector<int>& num,
const std::vector<int>& endnum); const std::vector<int>& endnum);
}
}} // namespace Opm::satfunc }
#endif // ECLIPSE_SATFUNCPROPERTY_INITIALIZERS_HPP #endif // ECLIPSE_SATFUNCPROPERTY_INITIALIZERS_HPP

View File

@ -165,7 +165,7 @@ namespace Opm {
const std::string& getEclipseInputPath() const; const std::string& getEclipseInputPath() const;
void overrideNOSIM(bool nosim); void overrideNOSIM(bool nosim);
void consistentFileFlags();
std::string getRestartFileName(const std::string& restart_base, int report_step, bool output) const; std::string getRestartFileName(const std::string& restart_base, int report_step, bool output) const;

View File

@ -278,7 +278,6 @@ public:
const EclHysterConfig& hysterPar() const noexcept; const EclHysterConfig& hysterPar() const noexcept;
const Actdims& actdims() const noexcept; const Actdims& actdims() const noexcept;
const SatFuncControls& saturationFunctionControls() const noexcept; const SatFuncControls& saturationFunctionControls() const noexcept;
int nupcol() const noexcept;
bool operator==(const Runspec& data) const; bool operator==(const Runspec& data) const;
@ -306,7 +305,6 @@ private:
EclHysterConfig hystpar; EclHysterConfig hystpar;
Actdims m_actdims; Actdims m_actdims;
SatFuncControls m_sfuncctrl; SatFuncControls m_sfuncctrl;
int m_nupcol;
}; };

View File

@ -25,7 +25,6 @@
#include <map> #include <map>
#include <opm/parser/eclipse/EclipseState/Schedule/SummaryState.hpp> #include <opm/parser/eclipse/EclipseState/Schedule/SummaryState.hpp>
#include <opm/parser/eclipse/EclipseState/Schedule/Well/WListManager.hpp>
namespace Opm { namespace Opm {
namespace Action { namespace Action {
@ -38,7 +37,7 @@ namespace Action {
class Context { class Context {
public: public:
explicit Context(const SummaryState& summary_state, const WListManager& wlm); explicit Context(const SummaryState& summary_state);
/* /*
The get methods will first check the internal storage in the 'values' map The get methods will first check the internal storage in the 'values' map
@ -51,11 +50,9 @@ public:
void add(const std::string& func, double value); void add(const std::string& func, double value);
std::vector<std::string> wells(const std::string& func) const; std::vector<std::string> wells(const std::string& func) const;
const WListManager& wlist_manager() const;
private: private:
const SummaryState& summary_state; const SummaryState& summary_state;
const WListManager& wlm;
std::map<std::string, double> values; std::map<std::string, double> values;
}; };
} }

View File

@ -101,9 +101,9 @@ public:
void add_well(const std::string& well); void add_well(const std::string& well);
Result& operator|=(const Result& other); Result& operator|=(const Result& other);
Result& operator=(const Result& src); Result& operator=(const Result& src);
Result& operator&=(const Result& other); Result& operator&=(const Result& other);
private: private:
void assign(bool value); void assign(bool value);
bool result; bool result;

View File

@ -36,7 +36,6 @@ namespace Opm {
class DeckKeyword; class DeckKeyword;
namespace Action { namespace Action {
class State;
/* /*
The ActionX class internalizes the ACTIONX keyword. This keyword represents a The ActionX class internalizes the ACTIONX keyword. This keyword represents a
@ -72,15 +71,13 @@ public:
static ActionX serializeObject(); static ActionX serializeObject();
void addKeyword(const DeckKeyword& kw); void addKeyword(const DeckKeyword& kw);
bool ready(const State& state, std::time_t sim_time) const; bool ready(std::time_t sim_time) const;
Action::Result eval(const Action::Context& context) const; Action::Result eval(std::time_t sim_time, const Action::Context& context) const;
std::string name() const { return this->m_name; } std::string name() const { return this->m_name; }
size_t max_run() const { return this->m_max_run; } size_t max_run() const { return this->m_max_run; }
double min_wait() const { return this->m_min_wait; } double min_wait() const { return this->m_min_wait; }
std::size_t id() const;
void update_id(std::size_t id);
std::time_t start_time() const { return this->m_start_time; } std::time_t start_time() const { return this->m_start_time; }
std::vector<DeckKeyword>::const_iterator begin() const; std::vector<DeckKeyword>::const_iterator begin() const;
std::vector<DeckKeyword>::const_iterator end() const; std::vector<DeckKeyword>::const_iterator end() const;
@ -102,10 +99,11 @@ public:
serializer(m_max_run); serializer(m_max_run);
serializer(m_min_wait); serializer(m_min_wait);
serializer(m_start_time); serializer(m_start_time);
serializer(m_id);
serializer.vector(keywords); serializer.vector(keywords);
condition.serializeOp(serializer); condition.serializeOp(serializer);
serializer.vector(m_conditions); serializer.vector(m_conditions);
serializer(run_count);
serializer(last_run);
} }
private: private:
@ -113,11 +111,12 @@ private:
size_t m_max_run = 0; size_t m_max_run = 0;
double m_min_wait = 0.0; double m_min_wait = 0.0;
std::time_t m_start_time; std::time_t m_start_time;
std::size_t m_id = 0;
std::vector<DeckKeyword> keywords; std::vector<DeckKeyword> keywords;
Action::AST condition; Action::AST condition;
std::vector<Condition> m_conditions; std::vector<Condition> m_conditions;
mutable size_t run_count = 0;
mutable std::time_t last_run = 0;
}; };
} }

View File

@ -31,8 +31,6 @@
namespace Opm { namespace Opm {
namespace Action { namespace Action {
class State;
/* /*
The Actions class is a container of ACTIONX keywords. The main functionality The Actions class is a container of ACTIONX keywords. The main functionality
is to provide a list of ACTIONX keywords which are ready to be evaluated. is to provide a list of ACTIONX keywords which are ready to be evaluated.
@ -50,10 +48,10 @@ public:
bool empty() const; bool empty() const;
void add(const ActionX& action); void add(const ActionX& action);
void add(const PyAction& pyaction); void add(const PyAction& pyaction);
bool ready(const State& state, std::time_t sim_time) const; bool ready(std::time_t sim_time) const;
const ActionX& get(const std::string& name) const; const ActionX& get(const std::string& name) const;
const ActionX& get(std::size_t index) const; const ActionX& get(std::size_t index) const;
std::vector<const ActionX *> pending(const State& state, std::time_t sim_time) const; std::vector<const ActionX *> pending(std::time_t sim_time) const;
std::vector<const PyAction *> pending_python() const; std::vector<const PyAction *> pending_python() const;
std::vector<ActionX>::const_iterator begin() const; std::vector<ActionX>::const_iterator begin() const;

View File

@ -1,59 +0,0 @@
/*
Copyright 2020 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 ACTION_STATE_HPP
#define ACTION_STATE_HPP
#include <ctime>
#include <map>
namespace Opm {
namespace Action {
class ActionX;
class State {
struct RunState {
RunState(std::time_t sim_time) :
run_count(1),
last_run(sim_time)
{}
void add_run(std::time_t sim_time) {
this->last_run = sim_time;
this->run_count += 1;
}
std::size_t run_count;
std::time_t last_run;
};
public:
void add_run(const ActionX& action, std::time_t sim_time);
std::size_t run_count(const ActionX& action) const;
std::time_t run_time(const ActionX& action) const;
private:
std::map<std::pair<std::string, std::size_t>, RunState> run_state;
};
}
}
#endif

View File

@ -1,253 +0,0 @@
/*
Copyright 2020 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 GAS_LIFT_OPT_HPP
#define GAS_LIFT_OPT_HPP
#include <optional>
#include <string>
#include <map>
namespace Opm {
class GasLiftOpt {
public:
class Group {
public:
Group() = default;
Group(const std::string& name) :
m_name(name)
{}
const std::optional<double>& max_lift_gas() const {
return this->m_max_lift_gas;
}
void max_lift_gas(double value) {
if (value >= 0)
this->m_max_lift_gas = value;
}
const std::optional<double>& max_total_gas() const {
return this->m_max_total_gas;
}
void max_total_gas(double value) {
if (value >= 0)
this->m_max_total_gas = value;
}
const std::string& name() const {
return this->m_name;
}
template<class Serializer>
void serializeOp(Serializer& serializer)
{
serializer(m_name);
serializer(m_max_lift_gas);
serializer(m_max_total_gas);
}
static Group serializeObject() {
Group group;
group.m_name = "GR";
group.m_max_lift_gas = 100;
group.m_max_total_gas = 200;
return group;
}
bool operator==(const Group& other) const {
return this->m_name == other.m_name &&
this->m_max_lift_gas == other.m_max_lift_gas &&
this->m_max_total_gas == other.m_max_total_gas;
}
private:
std::string m_name;
std::optional<double> m_max_lift_gas;
std::optional<double> m_max_total_gas;
};
class Well {
public:
Well() = default;
Well(const std::string& name, bool use_glo) :
m_name(name),
m_use_glo(use_glo)
{}
const std::string& name() const {
return this->m_name;
}
bool use_glo() const {
return this->m_use_glo;
}
void max_rate(double value) {
this->m_max_rate = value;
}
/*
The semantics of the max_rate is quite complicated:
1. If the std::optional<double> has a value that value should be
used as the maximum rate and all is fine.
2. If the std::optional<double> does not a have well we must check
the value of Well::use_glo():
False: The maximum gas lift should have been set with WCONPROD /
WELTARG - this code does not provide a value in that case.
True: If the well should be controlled with gas lift optimization
the value to use should be the largest ALQ value in the wells
VFP table.
*/
const std::optional<double>& max_rate() const {
return this->m_max_rate;
}
void weight_factor(double value) {
if (this->m_use_glo)
this->m_weight = value;
}
double weight_factor() const {
return this->m_weight;
}
void inc_weight_factor(double value) {
if (this->m_use_glo)
this->m_inc_weight = value;
}
double inc_weight_factor() const {
return this->m_inc_weight;
}
void min_rate(double value) {
if (this->m_use_glo)
this->m_min_rate = value;
}
double min_rate() const {
return this->m_min_rate;
}
void alloc_extra_gas(bool value) {
if (this->m_use_glo)
this->m_alloc_extra_gas = value;
}
bool alloc_extra_gas() const {
return this->m_alloc_extra_gas;
}
template<class Serializer>
void serializeOp(Serializer& serializer)
{
serializer(m_name);
serializer(m_use_glo);
serializer(m_max_rate);
serializer(m_min_rate);
serializer(m_weight);
serializer(m_inc_weight);
serializer(m_alloc_extra_gas);
}
static Well serializeObject() {
Well well;
well.m_name = "WELL";
well.m_max_rate = 2000;
well.m_min_rate = 56;
well.m_use_glo = true;
well.m_weight = 1.25;
well.m_inc_weight = 0.25;
well.m_alloc_extra_gas = false;
return well;
}
bool operator==(const Well& other) const {
return this->m_name == other.m_name &&
this->m_max_rate == other.m_max_rate &&
this->m_min_rate == other.m_min_rate &&
this->m_use_glo == other.m_use_glo &&
this->m_weight == other.m_weight &&
this->m_inc_weight == other.m_inc_weight &&
this->m_alloc_extra_gas == other.m_alloc_extra_gas;
}
private:
std::string m_name;
std::optional<double> m_max_rate;
double m_min_rate = 0;
bool m_use_glo;
double m_weight = 1;
double m_inc_weight = 0;
bool m_alloc_extra_gas = false;
};
GasLiftOpt() = default;
const Group& group(const std::string& gname) const;
const Well& well(const std::string& wname) const;
double gaslift_increment() const;
void gaslift_increment(double gaslift_increment);
double min_eco_gradient() const;
void min_eco_gradient(double min_eco_gradient);
void min_wait(double min_wait);
void all_newton(double all_newton);
void add_group(const Group& group);
void add_well(const Well& well);
bool active() const;
static GasLiftOpt serializeObject();
bool operator==(const GasLiftOpt& other) const;
template<class Serializer>
void serializeOp(Serializer& serializer)
{
serializer(m_increment);
serializer(m_min_eco_gradient);
serializer(m_min_wait);
serializer(m_all_newton);
serializer.map(m_groups);
serializer.map(m_wells);
}
private:
double m_increment = 0;
double m_min_eco_gradient;
double m_min_wait;
bool m_all_newton = true;
std::map<std::string, GasLiftOpt::Group> m_groups;
std::map<std::string, GasLiftOpt::Well> m_wells;
};
}
#endif

View File

@ -1,75 +0,0 @@
/*
Copyright 2020 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 GPMAINT_HPP
#define GPMAINT_HPP
#include <optional>
#include <string>
namespace Opm {
class DeckRecord;
class GPMaint {
public:
enum class FlowTarget {
RESV_PROD = 0,
RESV_OINJ = 1,
RESV_WINJ = 2,
RESV_GINJ = 3,
SURF_OINJ = 4,
SURF_WINJ = 5,
SURF_GINJ = 6,
};
GPMaint() = default;
explicit GPMaint(const DeckRecord& record);
static GPMaint serializeObject();
double pressure_target() const;
double prop_constant() const;
double time_constant() const;
std::optional<std::pair<std::string, int>> region() const;
FlowTarget flow_target() const;
bool operator==(const GPMaint& other) const;
template<class Serializer>
void serializeOp(Serializer& serializer)
{
serializer(m_flow_target);
serializer(m_region_number);
serializer(m_region_name);
serializer(m_pressure_target);
serializer(m_prop_constant);
serializer(m_time_constant);
}
private:
static FlowTarget FlowTargetFromString(const std::string& stringvalue);
FlowTarget m_flow_target;
int m_region_number;
std::string m_region_name;
double m_pressure_target;
double m_prop_constant;
double m_time_constant;
};
}
#endif

View File

@ -41,8 +41,6 @@ public:
const std::string& parent_name() const; const std::string& parent_name() const;
const Group& group() const; const Group& group() const;
std::size_t level() const;
std::vector<const GTNode*> all_nodes() const;
private: private:
const Group m_group; const Group m_group;
std::size_t m_level; std::size_t m_level;

View File

@ -24,19 +24,15 @@
#include <map> #include <map>
#include <optional> #include <optional>
#include <string> #include <string>
#include <algorithm>
#include <opm/parser/eclipse/Deck/UDAValue.hpp> #include <opm/parser/eclipse/Deck/UDAValue.hpp>
#include <opm/parser/eclipse/EclipseState/Util/IOrderSet.hpp> #include <opm/parser/eclipse/EclipseState/Util/IOrderSet.hpp>
#include <opm/parser/eclipse/EclipseState/Runspec.hpp> #include <opm/parser/eclipse/EclipseState/Runspec.hpp>
#include <opm/parser/eclipse/EclipseState/Schedule/Group/GPMaint.hpp>
#include <opm/parser/eclipse/Units/UnitSystem.hpp> #include <opm/parser/eclipse/Units/UnitSystem.hpp>
namespace Opm { namespace Opm {
class SummaryState; class SummaryState;
class UDQConfig;
class UDQActive;
class Group { class Group {
public: public:
@ -118,7 +114,7 @@ struct GroupInjectionProperties {
UDAValue target_void_fraction; UDAValue target_void_fraction;
std::string reinj_group; std::string reinj_group;
std::string voidage_group; std::string voidage_group;
bool available_group_control = true; bool available_group_control;
static GroupInjectionProperties serializeObject(); static GroupInjectionProperties serializeObject();
@ -156,12 +152,6 @@ struct InjectionControls {
}; };
struct GroupProductionProperties { struct GroupProductionProperties {
GroupProductionProperties() = default;
GroupProductionProperties(const std::string& gname) :
name(gname)
{}
std::string name;
ProductionCMode cmode = ProductionCMode::NONE; ProductionCMode cmode = ProductionCMode::NONE;
ExceedAction exceed_action = ExceedAction::NONE; ExceedAction exceed_action = ExceedAction::NONE;
UDAValue oil_target; UDAValue oil_target;
@ -169,7 +159,7 @@ struct GroupProductionProperties {
UDAValue gas_target; UDAValue gas_target;
UDAValue liquid_target; UDAValue liquid_target;
double guide_rate; double guide_rate;
GuideRateTarget guide_rate_def = GuideRateTarget::NO_GUIDE_RATE; GuideRateTarget guide_rate_def;
double resv_target = 0; double resv_target = 0;
bool available_group_control = true; bool available_group_control = true;
static GroupProductionProperties serializeObject(); static GroupProductionProperties serializeObject();
@ -177,12 +167,10 @@ struct GroupProductionProperties {
int production_controls = 0; int production_controls = 0;
bool operator==(const GroupProductionProperties& other) const; bool operator==(const GroupProductionProperties& other) const;
bool operator!=(const GroupProductionProperties& other) const; bool operator!=(const GroupProductionProperties& other) const;
bool updateUDQActive(const UDQConfig& udq_config, UDQActive& active) const;
template<class Serializer> template<class Serializer>
void serializeOp(Serializer& serializer) void serializeOp(Serializer& serializer)
{ {
serializer(name);
serializer(cmode); serializer(cmode);
serializer(exceed_action); serializer(exceed_action);
oil_target.serializeOp(serializer); oil_target.serializeOp(serializer);
@ -206,7 +194,7 @@ struct ProductionControls {
double gas_target; double gas_target;
double liquid_target; double liquid_target;
double guide_rate; double guide_rate;
GuideRateTarget guide_rate_def = GuideRateTarget::NO_GUIDE_RATE; GuideRateTarget guide_rate_def;
double resv_target = 0; double resv_target = 0;
int production_controls = 0; int production_controls = 0;
bool has_control(ProductionCMode control) const; bool has_control(ProductionCMode control) const;
@ -265,9 +253,6 @@ struct ProductionControls {
bool has_control(InjectionCMode control) const; bool has_control(InjectionCMode control) const;
bool productionGroupControlAvailable() const; bool productionGroupControlAvailable() const;
bool injectionGroupControlAvailable(const Phase phase) const; bool injectionGroupControlAvailable(const Phase phase) const;
const std::optional<GPMaint>& gpmaint() const;
void set_gpmaint(GPMaint gpmaint);
void set_gpmaint();
bool operator==(const Group& data) const; bool operator==(const Group& data) const;
const Phase& topup_phase() const; const Phase& topup_phase() const;
@ -291,7 +276,6 @@ struct ProductionControls {
serializer.map(injection_properties); serializer.map(injection_properties);
production_properties.serializeOp(serializer); production_properties.serializeOp(serializer);
serializer(m_topup_phase); serializer(m_topup_phase);
serializer(m_gpmaint);
} }
private: private:
@ -313,9 +297,8 @@ private:
IOrderSet<std::string> m_groups; IOrderSet<std::string> m_groups;
std::map<Phase, GroupInjectionProperties> injection_properties; std::map<Phase, GroupInjectionProperties> injection_properties;
GroupProductionProperties production_properties; GroupProductionProperties production_properties{};
std::pair<Phase, bool> m_topup_phase{Phase::WATER, false}; std::pair<Phase, bool> m_topup_phase{Phase::WATER, false};
std::optional<GPMaint> m_gpmaint;
}; };
Group::GroupType operator |(Group::GroupType lhs, Group::GroupType rhs); Group::GroupType operator |(Group::GroupType lhs, Group::GroupType rhs);

View File

@ -1,69 +0,0 @@
/*
Copyright 2020 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 AICD_HPP_HEADER_INCLUDED
#define AICD_HPP_HEADER_INCLUDED
#include <map>
#include <utility>
#include <vector>
#include <string>
#include <opm/parser/eclipse/EclipseState/Schedule/MSW/SICD.hpp>
namespace Opm {
class DeckRecord;
class DeckKeyword;
class AutoICD : public SICD {
public:
AutoICD() = default;
AutoICD(const DeckRecord& record);
static AutoICD serializeObject();
// the function will return a map
// [
// "WELL1" : [<seg1, aicd1>, <seg2, aicd2> ...]
// ....
static std::map<std::string, std::vector<std::pair<int, AutoICD> > >
fromWSEGAICD(const DeckKeyword& wsegaicd);
bool operator==(const AutoICD& data) const;
template<class Serializer>
void serializeOp(Serializer& serializer)
{
AutoICD::serializeOp(serializer);
}
private:
double m_flow_rate_exponent;
double m_visc_exponent;
double m_oil_density_exponent;
double m_water_density_exponent;
double m_gas_density_exponent;
double m_oil_viscosity_exponent;
double m_water_viscosity_exponent;
double m_gas_viscosity_exponent;
};
}
#endif

View File

@ -20,16 +20,13 @@
#ifndef SEGMENT_HPP_HEADER_INCLUDED #ifndef SEGMENT_HPP_HEADER_INCLUDED
#define SEGMENT_HPP_HEADER_INCLUDED #define SEGMENT_HPP_HEADER_INCLUDED
#include <optional> #include <memory>
#include <variant>
#include <vector> #include <vector>
#include <opm/parser/eclipse/EclipseState/Schedule/MSW/Valve.hpp>
#include <opm/parser/eclipse/EclipseState/Schedule/MSW/SICD.hpp>
#include <opm/parser/eclipse/EclipseState/Schedule/MSW/AICD.hpp>
namespace Opm { namespace Opm {
class SpiralICD;
class Valve;
namespace RestartIO { namespace RestartIO {
struct RstSegment; struct RstSegment;
} }
@ -37,29 +34,6 @@ namespace Opm {
namespace Opm { namespace Opm {
/*
The current serialization of std::variant<> requires that all the types in
the variant have serializeOp() method, that is why this RegularSegment
type is introduced, ideally the icd variant should just have
std::monostate to represent the regular non ICD segment.
*/
struct RegularSegment : std::monostate {
template<class Serializer>
void serializeOp(Serializer&) {
}
static RegularSegment serializeObject() {
return RegularSegment();
}
bool operator==(const RegularSegment& ) {
return true;
}
};
class Segment { class Segment {
public: public:
@ -76,7 +50,7 @@ namespace Opm {
Segment(const Segment& src, double new_depth, double new_length); Segment(const Segment& src, double new_depth, double new_length);
Segment(const Segment& src, double new_volume); Segment(const Segment& src, double new_volume);
Segment(int segment_number_in, int branch_in, int outlet_segment_in, double length_in, double depth_in, Segment(int segment_number_in, int branch_in, int outlet_segment_in, double length_in, double depth_in,
double internal_diameter_in, double roughness_in, double cross_area_in, double volume_in, bool data_ready_in); double internal_diameter_in, double roughness_in, double cross_area_in, double volume_in, bool data_ready_in, SegmentType segment_type_in);
Segment(const RestartIO::RstSegment& rst_segment); Segment(const RestartIO::RstSegment& rst_segment);
static Segment serializeObject(); static Segment serializeObject();
@ -84,7 +58,6 @@ namespace Opm {
int segmentNumber() const; int segmentNumber() const;
int branchNumber() const; int branchNumber() const;
int outletSegment() const; int outletSegment() const;
double perfLength() const;
double totalLength() const; double totalLength() const;
double depth() const; double depth() const;
double internalDiameter() const; double internalDiameter() const;
@ -105,37 +78,13 @@ namespace Opm {
bool operator==( const Segment& ) const; bool operator==( const Segment& ) const;
bool operator!=( const Segment& ) const; bool operator!=( const Segment& ) const;
const SICD& spiralICD() const; const std::shared_ptr<SpiralICD>& spiralICD() const;
const AutoICD& autoICD() const; const Valve* valve() const;
const Valve& valve() const;
void updatePerfLength(double perf_length); void updateSpiralICD(const SpiralICD& spiral_icd);
void updateSpiralICD(const SICD& spiral_icd);
void updateAutoICD(const AutoICD& aicd);
void updateValve(const Valve& valve, const double segment_length); void updateValve(const Valve& valve, const double segment_length);
void updateValve(const Valve& valve);
void addInletSegment(const int segment_number); void addInletSegment(const int segment_number);
bool isRegular() const
{
return std::holds_alternative<RegularSegment>(this->m_icd);
}
inline bool isSpiralICD() const
{
return std::holds_alternative<SICD>(this->m_icd);
}
inline bool isAICD() const
{
return std::holds_alternative<AutoICD>(this->m_icd);
}
inline bool isValve() const
{
return std::holds_alternative<Valve>(this->m_icd);
}
template<class Serializer> template<class Serializer>
void serializeOp(Serializer& serializer) void serializeOp(Serializer& serializer)
{ {
@ -150,12 +99,12 @@ namespace Opm {
serializer(m_cross_area); serializer(m_cross_area);
serializer(m_volume); serializer(m_volume);
serializer(m_data_ready); serializer(m_data_ready);
serializer(m_perf_length); serializer(m_segment_type);
serializer(m_icd); serializer(m_spiral_icd);
serializer(m_valve);
} }
private: private:
void updateValve__(Valve& valve, const double segment_length);
// segment number // segment number
// it should work as a ID. // it should work as a ID.
int m_segment_number; int m_segment_number;
@ -201,8 +150,17 @@ namespace Opm {
// the volume will be updated at a final step. // the volume will be updated at a final step.
bool m_data_ready; bool m_data_ready;
std::optional<double> m_perf_length; // indicate the type of the segment
std::variant<RegularSegment, SICD, AutoICD, Valve> m_icd; // regular, spiral ICD, or Valve.
SegmentType m_segment_type;
// information related to SpiralICD. It is nullptr for segments are not
// spiral ICD type
std::shared_ptr<SpiralICD> m_spiral_icd;
// information related to sub-critical valve. It is nullptr for segments are not
// of type of Valve
std::shared_ptr<Valve> m_valve;
// We are not handling the length of segment projected onto the X-axis and Y-axis. // We are not handling the length of segment projected onto the X-axis and Y-axis.
// They are not used in the simulations and we are not supporting the plotting. // They are not used in the simulations and we are not supporting the plotting.
@ -210,6 +168,20 @@ namespace Opm {
// while they are not supported by the keyword at the moment. // while they are not supported by the keyword at the moment.
}; };
inline bool isRegular(const Segment& segment)
{
return segment.segmentType() == Segment::SegmentType::REGULAR;
}
inline bool isSpiralICD(const Segment& segment)
{
return segment.segmentType() == Segment::SegmentType::SICD;
}
inline bool isValve(const Segment& segment)
{
return segment.segmentType() == Segment::SegmentType::VALVE;
}
} }
#endif #endif

View File

@ -27,17 +27,18 @@
#include <string> #include <string>
#include <opm/parser/eclipse/EclipseState/Schedule/MSW/icd.hpp> #include <opm/parser/eclipse/EclipseState/Schedule/MSW/icd.hpp>
#include <opm/parser/eclipse/Deck/DeckRecord.hpp>
#include <opm/parser/eclipse/Deck/DeckKeyword.hpp>
namespace Opm { namespace Opm {
class SICD { class DeckRecord;
class DeckKeyword;
class SpiralICD {
public: public:
SICD(); SpiralICD();
explicit SICD(const DeckRecord& record); explicit SpiralICD(const DeckRecord& record);
SICD(double strength, SpiralICD(double strength,
double length, double length,
double densityCalibration, double densityCalibration,
double viscosityCalibration, double viscosityCalibration,
@ -49,13 +50,13 @@ namespace Opm {
ICDStatus status, ICDStatus status,
double scalingFactor); double scalingFactor);
static SICD serializeObject(); static SpiralICD serializeObject();
// the function will return a map // the function will return a map
// [ // [
// "WELL1" : [<seg1, sicd1>, <seg2, sicd2> ...] // "WELL1" : [<seg1, sicd1>, <seg2, sicd2> ...]
// .... // ....
static std::map<std::string, std::vector<std::pair<int, SICD> > > static std::map<std::string, std::vector<std::pair<int, SpiralICD> > >
fromWSEGSICD(const DeckKeyword& wsegsicd); fromWSEGSICD(const DeckKeyword& wsegsicd);
double maxAbsoluteRate() const; double maxAbsoluteRate() const;
@ -72,7 +73,7 @@ namespace Opm {
void updateScalingFactor(const double segment_length, const double completion_length); void updateScalingFactor(const double segment_length, const double completion_length);
double scalingFactor() const; double scalingFactor() const;
int ecl_status() const; int ecl_status() const;
bool operator==(const SICD& data) const; bool operator==(const SpiralICD& data) const;
template<class Serializer> template<class Serializer>
void serializeOp(Serializer& serializer) void serializeOp(Serializer& serializer)
@ -90,33 +91,6 @@ namespace Opm {
serializer(m_scaling_factor); serializer(m_scaling_factor);
} }
template<class ICD>
static std::map<std::string, std::vector<std::pair<int, ICD> > >
fromWSEG(const DeckKeyword& wseg) {
std::map<std::string, std::vector<std::pair<int, ICD> > > res;
for (const DeckRecord &record : wseg) {
const std::string well_name = record.getItem("WELL").getTrimmedString(0);
const int start_segment = record.getItem("SEG1").get<int>(0);
const int end_segment = record.getItem("SEG2").get<int>(0);
if (start_segment < 2 || end_segment < 2 || end_segment < start_segment) {
const std::string message = "Segment numbers " + std::to_string(start_segment) + " and "
+ std::to_string(end_segment) + " specified in WSEGSICD for well " +
well_name
+ " are illegal ";
throw std::invalid_argument(message);
}
const ICD spiral_icd(record);
for (int seg = start_segment; seg <= end_segment; seg++) {
res[well_name].push_back(std::make_pair(seg, spiral_icd));
}
}
return res;
}
private: private:
double m_strength; double m_strength;
double m_length; double m_length;

View File

@ -20,16 +20,14 @@
#ifndef SEGMENTSET_HPP_HEADER_INCLUDED #ifndef SEGMENTSET_HPP_HEADER_INCLUDED
#define SEGMENTSET_HPP_HEADER_INCLUDED #define SEGMENTSET_HPP_HEADER_INCLUDED
#include <map>
#include <set>
#include <vector> #include <vector>
#include <map>
#include <opm/parser/eclipse/EclipseState/Schedule/MSW/Segment.hpp> #include <opm/parser/eclipse/EclipseState/Schedule/MSW/Segment.hpp>
namespace Opm { namespace Opm {
class SICD; class SpiralICD;
class Valve; class Valve;
class WellConnections;
} }
namespace Opm { namespace Opm {
@ -86,7 +84,6 @@ namespace Opm {
const Segment& operator[](size_t idx) const; const Segment& operator[](size_t idx) const;
void orderSegments(); void orderSegments();
void updatePerfLength(const WellConnections& connections);
bool operator==( const WellSegments& ) const; bool operator==( const WellSegments& ) const;
bool operator!=( const WellSegments& ) const; bool operator!=( const WellSegments& ) const;
@ -94,10 +91,9 @@ namespace Opm {
double segmentLength(const int segment_number) const; double segmentLength(const int segment_number) const;
double segmentDepthChange(const int segment_number) const; double segmentDepthChange(const int segment_number) const;
std::vector<Segment> branchSegments(int branch) const; std::vector<Segment> branchSegments(int branch) const;
std::set<int> branches() const;
// it returns true if there is no error encountered during the update // it returns true if there is no error encountered during the update
bool updateWSEGSICD(const std::vector<std::pair<int, SICD> >& sicd_pairs); bool updateWSEGSICD(const std::vector<std::pair<int, SpiralICD> >& sicd_pairs);
bool updateWSEGVALV(const std::vector<std::pair<int, Valve> >& valve_pairs); bool updateWSEGVALV(const std::vector<std::pair<int, Valve> >& valve_pairs);
const std::vector<Segment>::const_iterator begin() const; const std::vector<Segment>::const_iterator begin() const;

View File

@ -28,6 +28,13 @@ enum class ICDStatus {
SHUT SHUT
}; };
template<typename T>
T from_int(int int_status);
template<typename T>
int to_int(T status);
} }
#endif #endif

View File

@ -0,0 +1,35 @@
/*
Copyright 2017 SINTEF Digital, Mathematics and Cybernetics.
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 UPDATING_CONNECTIONS_WITH_SEGMENTS
#define UPDATING_CONNECTIONS_WITH_SEGMENTS
#include <opm/parser/eclipse/Deck/DeckKeyword.hpp>
#include <opm/parser/eclipse/EclipseState/Grid/EclipseGrid.hpp>
#include <opm/parser/eclipse/EclipseState/Schedule/Well/WellConnections.hpp>
#include <opm/parser/eclipse/EclipseState/Schedule/MSW/WellSegments.hpp>
namespace Opm {
WellConnections * newConnectionsWithSegments(const DeckKeyword& compsegs, const WellConnections& input_connections,
const WellSegments& segments, const EclipseGrid& grid,
const ParseContext& parseContext, ErrorGuard& errors);
}
#endif

View File

@ -1,74 +0,0 @@
/*
Copyright 2020 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 NETWORK_BRANCH_HPP
#define NETWORK_BRANCH_HPP
#include <optional>
#include <string>
namespace Opm {
namespace Network {
class Branch {
public:
enum class AlqEQ {
OIL_DENSITY,
GAS_DENSITY,
ALQ_INPUT
};
static AlqEQ AlqEqfromString(const std::string& input_string);
Branch() = default;
Branch(const std::string& downtree_node, const std::string& uptree_node, int vfp_table, double alq);
Branch(const std::string& downtree_node, const std::string& uptree_node, int vfp_table, AlqEQ alq_eq);
const std::string& downtree_node() const;
const std::string& uptree_node() const;
std::optional<int> vfp_table() const;
AlqEQ alq_eq() const;
std::optional<double> alq_value() const;
static Branch serializeObject();
bool operator==(const Branch& other) const;
template<class Serializer>
void serializeOp(Serializer& serializer)
{
serializer(m_downtree_node);
serializer(m_uptree_node);
serializer(m_vfp_table);
serializer(m_alq_value);
serializer(m_alq_eq);
}
private:
std::string m_downtree_node;
std::string m_uptree_node;
int m_vfp_table;
std::optional<double> m_alq_value;
AlqEQ m_alq_eq;
};
}
}
#endif

View File

@ -1,67 +0,0 @@
/*
Copyright 2020 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 EXT_NETWORK_HPP
#define EXT_NETWORK_HPP
#include <map>
#include <optional>
#include <string>
#include <vector>
#include <opm/parser/eclipse/EclipseState/Schedule/Network/Branch.hpp>
#include <opm/parser/eclipse/EclipseState/Schedule/Network/Node.hpp>
namespace Opm {
namespace Network {
class ExtNetwork {
public:
ExtNetwork() = default;
bool active() const;
bool has_node(const std::string& name) const;
void add_node(Node node);
void add_branch(Branch branch);
void drop_branch(const std::string& uptree_node, const std::string& downtree_node);
const Node& node(const std::string& name) const;
const Node& root() const;
std::vector<Branch> downtree_branches(const std::string& node) const;
std::optional<Branch> uptree_branch(const std::string& node) const;
bool operator==(const ExtNetwork& other) const;
static ExtNetwork serializeObject();
template<class Serializer>
void serializeOp(Serializer& serializer)
{
serializer.vector(m_branches);
serializer.map(m_nodes);
}
private:
std::vector<Branch> m_branches;
std::map<std::string, Node> m_nodes;
};
}
}
#endif

View File

@ -1,64 +0,0 @@
/*
Copyright 2020 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 NETWORK_NODE_HPP
#define NETWORK_NODE_HPP
#include <optional>
#include <string>
namespace Opm {
namespace Network {
class Node {
public:
Node() = default;
Node(const std::string& name);
const std::string& name() const;
const std::optional<double>& terminal_pressure() const;
bool as_choke() const;
bool add_gas_lift_gas() const;
const std::optional<std::string>& target_group() const;
void terminal_pressure(double pressure);
void add_gas_lift_gas(bool add_gas);
void as_choke(const std::string& target_group);
static Node serializeObject();
bool operator==(const Node& other) const;
template<class Serializer>
void serializeOp(Serializer& serializer)
{
serializer(m_name);
serializer(m_terminal_pressure);
serializer(m_add_gas_lift_gas);
serializer(m_choke_target_group);
}
private:
std::string m_name;
std::optional<double> m_terminal_pressure;
std::optional<std::string> m_choke_target_group;
bool m_add_gas_lift_gas = false;
};
}
}
#endif

View File

@ -24,7 +24,6 @@
#include <opm/parser/eclipse/Parser/ParseContext.hpp> #include <opm/parser/eclipse/Parser/ParseContext.hpp>
#include <opm/parser/eclipse/EclipseState/IOConfig/RestartConfig.hpp> #include <opm/parser/eclipse/EclipseState/IOConfig/RestartConfig.hpp>
#include <opm/parser/eclipse/EclipseState/Schedule/GasLiftOpt.hpp>
#include <opm/parser/eclipse/EclipseState/Schedule/DynamicState.hpp> #include <opm/parser/eclipse/EclipseState/Schedule/DynamicState.hpp>
#include <opm/parser/eclipse/EclipseState/Schedule/DynamicVector.hpp> #include <opm/parser/eclipse/EclipseState/Schedule/DynamicVector.hpp>
#include <opm/parser/eclipse/EclipseState/Schedule/Events.hpp> #include <opm/parser/eclipse/EclipseState/Schedule/Events.hpp>
@ -41,7 +40,6 @@
#include <opm/parser/eclipse/EclipseState/Schedule/RFTConfig.hpp> #include <opm/parser/eclipse/EclipseState/Schedule/RFTConfig.hpp>
#include <opm/parser/eclipse/EclipseState/Schedule/VFPInjTable.hpp> #include <opm/parser/eclipse/EclipseState/Schedule/VFPInjTable.hpp>
#include <opm/parser/eclipse/EclipseState/Schedule/VFPProdTable.hpp> #include <opm/parser/eclipse/EclipseState/Schedule/VFPProdTable.hpp>
#include <opm/parser/eclipse/EclipseState/Schedule/Network/ExtNetwork.hpp>
#include <opm/parser/eclipse/EclipseState/Schedule/Well/Well.hpp> #include <opm/parser/eclipse/EclipseState/Schedule/Well/Well.hpp>
#include <opm/parser/eclipse/EclipseState/Schedule/Well/WellTestConfig.hpp> #include <opm/parser/eclipse/EclipseState/Schedule/Well/WellTestConfig.hpp>
#include <opm/parser/eclipse/EclipseState/Schedule/Action/Actions.hpp> #include <opm/parser/eclipse/EclipseState/Schedule/Action/Actions.hpp>
@ -202,16 +200,6 @@ namespace Opm
std::vector<std::string> groupNames(size_t timeStep) const; std::vector<std::string> groupNames(size_t timeStep) const;
std::vector<std::string> groupNames(const std::string& pattern) const; std::vector<std::string> groupNames(const std::string& pattern) const;
std::vector<std::string> groupNames() const; std::vector<std::string> groupNames() const;
/*
The restart_groups function returns a vector of groups pointers which
is organized as follows:
1. The number of elements is WELLDIMS::MAXGROUPS + 1
2. The elements are sorted according to group.insert_index().
3. If there are less than WELLDIMS::MAXGROUPS nullptr is used.
4. The very last element corresponds to the FIELD group.
*/
std::vector<const Group*> restart_groups(size_t timeStep) const;
void updateWell(std::shared_ptr<Well> well, size_t reportStep); void updateWell(std::shared_ptr<Well> well, size_t reportStep);
std::vector<std::string> changed_wells(size_t reportStep) const; std::vector<std::string> changed_wells(size_t reportStep) const;
@ -275,10 +263,6 @@ namespace Opm
void applyAction(size_t reportStep, const Action::ActionX& action, const Action::Result& result); void applyAction(size_t reportStep, const Action::ActionX& action, const Action::Result& result);
int getNupcol(size_t reportStep) const; int getNupcol(size_t reportStep) const;
const Network::ExtNetwork& network(std::size_t report_step) const;
const GasLiftOpt& glo(std::size_t report_step) const;
bool operator==(const Schedule& data) const; bool operator==(const Schedule& data) const;
std::shared_ptr<const Python> python() const; std::shared_ptr<const Python> python() const;
@ -321,8 +305,6 @@ namespace Opm
gconsump.serializeOp(serializer); gconsump.serializeOp(serializer);
global_whistctl_mode.template serializeOp<Serializer, false>(serializer); global_whistctl_mode.template serializeOp<Serializer, false>(serializer);
m_actions.serializeOp(serializer); m_actions.serializeOp(serializer);
m_network.serializeOp(serializer);
m_glo.serializeOp(serializer);
rft_config.serializeOp(serializer); rft_config.serializeOp(serializer);
m_nupcol.template serializeOp<Serializer, false>(serializer); m_nupcol.template serializeOp<Serializer, false>(serializer);
restart_config.serializeOp(serializer); restart_config.serializeOp(serializer);
@ -358,8 +340,6 @@ namespace Opm
DynamicState<std::shared_ptr<GConSump>> gconsump; DynamicState<std::shared_ptr<GConSump>> gconsump;
DynamicState<Well::ProducerCMode> global_whistctl_mode; DynamicState<Well::ProducerCMode> global_whistctl_mode;
DynamicState<std::shared_ptr<Action::Actions>> m_actions; DynamicState<std::shared_ptr<Action::Actions>> m_actions;
DynamicState<std::shared_ptr<Network::ExtNetwork>> m_network;
DynamicState<std::shared_ptr<GasLiftOpt>> m_glo;
RFTConfig rft_config; RFTConfig rft_config;
DynamicState<int> m_nupcol; DynamicState<int> m_nupcol;
RestartConfig restart_config; RestartConfig restart_config;
@ -387,8 +367,6 @@ namespace Opm
const UnitSystem& unit_system); const UnitSystem& unit_system);
DynamicState<std::shared_ptr<RPTConfig>> rpt_config; DynamicState<std::shared_ptr<RPTConfig>> rpt_config;
void updateNetwork(std::shared_ptr<Network::ExtNetwork> network, std::size_t report_step);
GTNode groupTree(const std::string& root_node, std::size_t report_step, std::size_t level, const std::optional<std::string>& parent_name) const; GTNode groupTree(const std::string& root_node, std::size_t report_step, std::size_t level, const std::optional<std::string>& parent_name) const;
void updateGroup(std::shared_ptr<Group> group, size_t reportStep); void updateGroup(std::shared_ptr<Group> group, size_t reportStep);
bool checkGroups(const ParseContext& parseContext, ErrorGuard& errors); bool checkGroups(const ParseContext& parseContext, ErrorGuard& errors);
@ -440,15 +418,9 @@ namespace Opm
void handleLINCOM( const DeckKeyword& keyword, size_t currentStep); void handleLINCOM( const DeckKeyword& keyword, size_t currentStep);
void handleWEFAC( const DeckKeyword& keyword, size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors); void handleWEFAC( const DeckKeyword& keyword, size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors);
void handleBRANPROP( const DeckKeyword& keyword, size_t currentStep);
void handleNODEPROP( const DeckKeyword& keyword, size_t currentStep);
void handleLIFTOPT(const DeckKeyword& keyword, std::size_t currentStep);
void handleGLIFTOPT(const DeckKeyword& keyword, std::size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors);
void handleWLIFTOPT(const DeckKeyword& keyword, std::size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors);
void handleTUNING( const DeckKeyword& keyword, size_t currentStep); void handleTUNING( const DeckKeyword& keyword, size_t currentStep);
void handlePYACTION( std::shared_ptr<const Python> python, const std::string& input_path, const DeckKeyword& keyword, size_t currentStep); void handlePYACTION( std::shared_ptr<const Python> python, const std::string& input_path, const DeckKeyword& keyword, size_t currentStep);
void handleNUPCOL( const DeckKeyword& keyword, size_t currentStep); void handleNUPCOL( const DeckKeyword& keyword, size_t currentStep);
void handleGPMAINT( const DeckKeyword& keyword, size_t currentStep, const ParseContext& parseContext, ErrorGuard& errors);
void handleGRUPTREE( const DeckKeyword& keyword, size_t currentStep, const UnitSystem& unit_system, const ParseContext& parseContext, ErrorGuard& errors); void handleGRUPTREE( const DeckKeyword& keyword, size_t currentStep, const UnitSystem& unit_system, const ParseContext& parseContext, ErrorGuard& errors);
void handleGRUPNET( const DeckKeyword& keyword, size_t currentStep, const UnitSystem& unit_system); void handleGRUPNET( const DeckKeyword& keyword, size_t currentStep, const UnitSystem& unit_system);
void handleWRFT( const DeckKeyword& keyword, size_t currentStep); void handleWRFT( const DeckKeyword& keyword, size_t currentStep);

View File

@ -20,13 +20,12 @@
#ifndef SUMMARY_STATE_H #ifndef SUMMARY_STATE_H
#define SUMMARY_STATE_H #define SUMMARY_STATE_H
#include <chrono>
#include <iosfwd>
#include <optional>
#include <string> #include <string>
#include <chrono>
#include <vector>
#include <unordered_map> #include <unordered_map>
#include <unordered_set> #include <unordered_set>
#include <vector> #include <iosfwd>
namespace Opm{ namespace Opm{
@ -63,8 +62,6 @@ namespace Opm{
st.has_well_var("OPY", "WGOR") => False st.has_well_var("OPY", "WGOR") => False
*/ */
class UDQSet;
class SummaryState { class SummaryState {
public: public:
typedef std::unordered_map<std::string, double>::const_iterator const_iterator; typedef std::unordered_map<std::string, double>::const_iterator const_iterator;
@ -76,10 +73,6 @@ public:
*/ */
void set(const std::string& key, double value); void set(const std::string& key, double value);
bool erase(const std::string& key);
bool erase_well_var(const std::string& well, const std::string& var);
bool erase_group_var(const std::string& group, const std::string& var);
bool has(const std::string& key) const; bool has(const std::string& key) const;
bool has_well_var(const std::string& well, const std::string& var) const; bool has_well_var(const std::string& well, const std::string& var) const;
bool has_group_var(const std::string& group, const std::string& var) const; bool has_group_var(const std::string& group, const std::string& var) const;
@ -88,19 +81,15 @@ public:
void update_well_var(const std::string& well, const std::string& var, double value); void update_well_var(const std::string& well, const std::string& var, double value);
void update_group_var(const std::string& group, const std::string& var, double value); void update_group_var(const std::string& group, const std::string& var, double value);
void update_elapsed(double delta); void update_elapsed(double delta);
void update_udq(const UDQSet& udq_set);
double get(const std::string&) const; double get(const std::string&) const;
double get(const std::string&, double) const;
double get_elapsed() const; double get_elapsed() const;
double get_well_var(const std::string& well, const std::string& var) const; double get_well_var(const std::string& well, const std::string& var) const;
double get_group_var(const std::string& group, const std::string& var) const; double get_group_var(const std::string& group, const std::string& var) const;
double get_well_var(const std::string& well, const std::string& var, double) const;
double get_group_var(const std::string& group, const std::string& var, double) const;
const std::vector<std::string>& wells() const; std::vector<std::string> wells() const;
std::vector<std::string> wells(const std::string& var) const; std::vector<std::string> wells(const std::string& var) const;
const std::vector<std::string>& groups() const; std::vector<std::string> groups() const;
std::vector<std::string> groups(const std::string& var) const; std::vector<std::string> groups(const std::string& var) const;
std::vector<char> serialize() const; std::vector<char> serialize() const;
void deserialize(const std::vector<char>& buffer); void deserialize(const std::vector<char>& buffer);
@ -116,12 +105,10 @@ private:
// The first key is the variable and the second key is the well. // The first key is the variable and the second key is the well.
std::unordered_map<std::string, std::unordered_map<std::string, double>> well_values; std::unordered_map<std::string, std::unordered_map<std::string, double>> well_values;
std::unordered_set<std::string> m_wells; std::unordered_set<std::string> m_wells;
mutable std::optional<std::vector<std::string>> well_names;
// The first key is the variable and the second key is the group. // The first key is the variable and the second key is the group.
std::unordered_map<std::string, std::unordered_map<std::string, double>> group_values; std::unordered_map<std::string, std::unordered_map<std::string, double>> group_values;
std::unordered_set<std::string> m_groups; std::unordered_set<std::string> m_groups;
mutable std::optional<std::vector<std::string>> group_names;
}; };

View File

@ -48,10 +48,10 @@ public:
udq(udq_arg), udq(udq_arg),
input_index(input_index_arg), input_index(input_index_arg),
use_index(use_index_arg), use_index(use_index_arg),
wgname(wgname_arg),
control(control_arg), control(control_arg),
uad_code(UDQ::uadCode(control_arg)), uad_code(UDQ::uadCode(control_arg)),
use_count(1), use_count(1)
wgname(wgname_arg)
{} {}
bool operator==(const Record& other) const { bool operator==(const Record& other) const {
@ -85,16 +85,12 @@ public:
std::string udq; std::string udq;
std::size_t input_index; std::size_t input_index;
std::size_t use_index = 0; std::size_t use_index = 0;
std::string wgname;
UDAControl control; UDAControl control;
int uad_code; int uad_code;
std::string wg_name() const;
std::size_t use_count; std::size_t use_count;
private:
// The wgname is need in the update process, but it should
// not be exported out.
std::string wgname;
}; };
class InputRecord { class InputRecord {
public: public:
InputRecord() : InputRecord() :

View File

@ -38,7 +38,6 @@ namespace Opm {
class DeckRecord; class DeckRecord;
class Deck; class Deck;
class SummaryState;
class UDQConfig { class UDQConfig {
public: public:
UDQConfig() = default; UDQConfig() = default;
@ -56,7 +55,6 @@ namespace Opm {
void add_assign(const std::string& quantity, const std::vector<std::string>& selector, double value); void add_assign(const std::string& quantity, const std::vector<std::string>& selector, double value);
void add_define(const std::string& quantity, const std::vector<std::string>& expression); void add_define(const std::string& quantity, const std::vector<std::string>& expression);
void eval(SummaryState& st) const;
std::vector<UDQDefine> definitions() const; std::vector<UDQDefine> definitions() const;
std::vector<UDQDefine> definitions(UDQVarType var_type) const; std::vector<UDQDefine> definitions(UDQVarType var_type) const;
std::vector<UDQInput> input() const; std::vector<UDQInput> input() const;

View File

@ -179,8 +179,6 @@ namespace UDQ {
std::string typeName(UDQVarType var_type); std::string typeName(UDQVarType var_type);
UDAKeyword keyword(UDAControl control); UDAKeyword keyword(UDAControl control);
int uadCode(UDAControl control); int uadCode(UDAControl control);
constexpr double restart_default = -0.3E+21;
} }
} }

View File

@ -95,7 +95,6 @@ public:
std::vector<double> defined_values() const; std::vector<double> defined_values() const;
std::size_t defined_size() const; std::size_t defined_size() const;
const std::string& name() const; const std::string& name() const;
void name(const std::string& name);
UDQVarType var_type() const; UDQVarType var_type() const;
private: private:
UDQSet() = default; UDQSet() = default;

View File

@ -24,7 +24,6 @@
#include <array> #include <array>
#include <vector> #include <vector>
#include <string>
namespace Opm { namespace Opm {

View File

@ -27,7 +27,6 @@
#include <memory> #include <memory>
#include <string> #include <string>
#include <vector> #include <vector>
#include <optional>
#include <opm/parser/eclipse/Parser/ParseContext.hpp> #include <opm/parser/eclipse/Parser/ParseContext.hpp>
#include <opm/parser/eclipse/EclipseState/Util/Value.hpp> #include <opm/parser/eclipse/EclipseState/Util/Value.hpp>
@ -95,6 +94,8 @@ namespace RestartIO {
const Direction direction, const Direction direction,
const CTFKind ctf_kind, const CTFKind ctf_kind,
const std::size_t sort_value, const std::size_t sort_value,
const double segDistStart,
const double segDistEnd,
const bool defaultSatTabId); const bool defaultSatTabId);
Connection(const RestartIO::RstConnection& rst_connection, const EclipseGrid& grid, const FieldPropsManager& fp); Connection(const RestartIO::RstConnection& rst_connection, const EclipseGrid& grid, const FieldPropsManager& fp);
@ -128,11 +129,13 @@ namespace RestartIO {
void updateSegment(int segment_number_arg, void updateSegment(int segment_number_arg,
double center_depth_arg, double center_depth_arg,
std::size_t compseg_insert_index, std::size_t compseg_insert_index,
const std::pair<double,double>& perf_range); double start,
double end);
std::size_t sort_value() const; std::size_t sort_value() const;
const bool& getDefaultSatTabId() const; const bool& getDefaultSatTabId() const;
void setDefaultSatTabId(bool id); void setDefaultSatTabId(bool id);
const std::optional<std::pair<double, double>>& perf_range() const; const double& getSegDistStart() const;
const double& getSegDistEnd() const;
std::string str() const; std::string str() const;
bool ctfAssignedFromInput() const bool ctfAssignedFromInput() const
{ {
@ -159,7 +162,8 @@ namespace RestartIO {
serializer(m_global_index); serializer(m_global_index);
serializer(m_ctfkind); serializer(m_ctfkind);
serializer(m_sort_value); serializer(m_sort_value);
serializer(m_perf_range); serializer(m_segDistStart);
serializer(m_segDistEnd);
serializer(m_defaultSatTabId); serializer(m_defaultSatTabId);
serializer(segment_number); serializer(segment_number);
} }
@ -232,7 +236,8 @@ namespace RestartIO {
*/ */
std::size_t m_sort_value; std::size_t m_sort_value;
std::optional<std::pair<double,double>> m_perf_range; double m_segDistStart;
double m_segDistEnd;
bool m_defaultSatTabId; bool m_defaultSatTabId;
// related segment number // related segment number

View File

@ -16,9 +16,6 @@
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with OPM. If not, see <http://www.gnu.org/licenses/>. along with OPM. If not, see <http://www.gnu.org/licenses/>.
*/ */
#ifndef WLIST_HPP
#define WLIST_HPP
#include <cstddef> #include <cstddef>
#include <unordered_set> #include <unordered_set>
#include <vector> #include <vector>
@ -54,5 +51,3 @@ private:
}; };
} }
#endif

View File

@ -16,9 +16,6 @@
You should have received a copy of the GNU General Public License You should have received a copy of the GNU General Public License
along with OPM. If not, see <http://www.gnu.org/licenses/>. along with OPM. If not, see <http://www.gnu.org/licenses/>.
*/ */
#ifndef WLISTMANAGER_HPP
#define WLISTMANAGER_HPP
#include <cstddef> #include <cstddef>
#include <map> #include <map>
#include <vector> #include <vector>
@ -41,7 +38,7 @@ public:
void delWell(const std::string& well); void delWell(const std::string& well);
bool operator==(const WListManager& data) const; bool operator==(const WListManager& data) const;
std::vector<std::string> wells(const std::string& wlist_pattern) const;
template<class Serializer> template<class Serializer>
void serializeOp(Serializer& serializer) void serializeOp(Serializer& serializer)
{ {
@ -53,4 +50,3 @@ private:
}; };
} }
#endif

View File

@ -49,7 +49,6 @@ struct WellInjectionProperties;
class WellProductionProperties; class WellProductionProperties;
class UDQActive; class UDQActive;
class UDQConfig; class UDQConfig;
class SICD;
namespace RestartIO { namespace RestartIO {
struct RstWell; struct RstWell;
@ -251,7 +250,7 @@ public:
static WellInjectionProperties serializeObject(); static WellInjectionProperties serializeObject();
void handleWELTARG(WELTARGCMode cmode, const UDAValue& new_arg, double SIFactorP); void handleWELTARG(WELTARGCMode cmode, double newValue, double SIFactorP);
void handleWCONINJE(const DeckRecord& record, bool availableForGroupControl, const std::string& well_name); void handleWCONINJE(const DeckRecord& record, bool availableForGroupControl, const std::string& well_name);
void handleWCONINJH(const DeckRecord& record, bool is_producer, const std::string& well_name); void handleWCONINJH(const DeckRecord& record, bool is_producer, const std::string& well_name);
bool hasInjectionControl(InjectorCMode controlModeArg) const { bool hasInjectionControl(InjectorCMode controlModeArg) const {
@ -382,7 +381,7 @@ public:
static bool effectiveHistoryProductionControl(ProducerCMode cmode); static bool effectiveHistoryProductionControl(ProducerCMode cmode);
void handleWCONPROD( const std::string& well, const DeckRecord& record); void handleWCONPROD( const std::string& well, const DeckRecord& record);
void handleWCONHIST( const DeckRecord& record); void handleWCONHIST( const DeckRecord& record);
void handleWELTARG( WELTARGCMode cmode, const UDAValue& new_arg, double SiFactorP); void handleWELTARG( WELTARGCMode cmode, double newValue, double SiFactorP);
void resetDefaultBHPLimit(); void resetDefaultBHPLimit();
void clearControls(); void clearControls();
ProductionControls controls(const SummaryState& st, double udq_default) const; ProductionControls controls(const SummaryState& st, double udq_default) const;
@ -539,7 +538,7 @@ public:
bool updateEconLimits(std::shared_ptr<WellEconProductionLimits> econ_limits); bool updateEconLimits(std::shared_ptr<WellEconProductionLimits> econ_limits);
bool updateProduction(std::shared_ptr<WellProductionProperties> production); bool updateProduction(std::shared_ptr<WellProductionProperties> production);
bool updateInjection(std::shared_ptr<WellInjectionProperties> injection); bool updateInjection(std::shared_ptr<WellInjectionProperties> injection);
bool updateWSEGSICD(const std::vector<std::pair<int, SICD> >& sicd_pairs); bool updateWSEGSICD(const std::vector<std::pair<int, SpiralICD> >& sicd_pairs);
bool updateWSEGVALV(const std::vector<std::pair<int, Valve> >& valve_pairs); bool updateWSEGVALV(const std::vector<std::pair<int, Valve> >& valve_pairs);
bool handleWELSEGS(const DeckKeyword& keyword); bool handleWELSEGS(const DeckKeyword& keyword);

View File

@ -54,6 +54,8 @@ namespace Opm {
const Connection::Direction direction = Connection::Direction::Z, const Connection::Direction direction = Connection::Direction::Z,
const Connection::CTFKind ctf_kind = Connection::CTFKind::DeckValue, const Connection::CTFKind ctf_kind = Connection::CTFKind::DeckValue,
const std::size_t seqIndex = 0, const std::size_t seqIndex = 0,
const double segDistStart= 0.0,
const double segDistEnd= 0.0,
const bool defaultSatTabId = true); const bool defaultSatTabId = true);
void loadCOMPDAT(const DeckRecord& record, const EclipseGrid& grid, const FieldPropsManager& field_properties); void loadCOMPDAT(const DeckRecord& record, const EclipseGrid& grid, const FieldPropsManager& field_properties);
@ -66,7 +68,6 @@ namespace Opm {
const Connection& getFromIJK(const int i, const int j, const int k) const; const Connection& getFromIJK(const int i, const int j, const int k) const;
const Connection& lowest() const; const Connection& lowest() const;
Connection& getFromIJK(const int i, const int j, const int k); Connection& getFromIJK(const int i, const int j, const int k);
double segment_perf_length(int segment) const;
const_iterator begin() const { return this->m_connections.begin(); } const_iterator begin() const { return this->m_connections.begin(); }
const_iterator end() const { return this->m_connections.end(); } const_iterator end() const { return this->m_connections.end(); }
@ -116,6 +117,8 @@ namespace Opm {
const Connection::Direction direction = Connection::Direction::Z, const Connection::Direction direction = Connection::Direction::Z,
const Connection::CTFKind ctf_kind = Connection::CTFKind::DeckValue, const Connection::CTFKind ctf_kind = Connection::CTFKind::DeckValue,
const std::size_t seqIndex = 0, const std::size_t seqIndex = 0,
const double segDistStart= 0.0,
const double segDistEnd= 0.0,
const bool defaultSatTabId = true); const bool defaultSatTabId = true);
void loadCOMPDAT(const DeckRecord& record, void loadCOMPDAT(const DeckRecord& record,

View File

@ -1,38 +0,0 @@
/*
Copyright (C) 2020 by Equinor.
Copyright (C) 2020 by TNO.
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_PARSER_PERMFACT_TABLE_HPP
#define OPM_PARSER_PERMFACT_TABLE_HPP
#include "SimpleTable.hpp"
namespace Opm {
class DeckItem;
class PermfactTable : public SimpleTable {
public:
PermfactTable( const DeckItem& item );
const TableColumn& getPorosityChangeColumn() const;
const TableColumn& getPermeabilityMultiplierColumn() const;
};
}
#endif

View File

@ -1,40 +0,0 @@
/*
Copyright (C) 2020 by Equinor
Copyright (C) 2020 by TNO
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_PARSER_PVTGW_TABLE_HPP
#define OPM_PARSER_PVTGW_TABLE_HPP
#include <opm/parser/eclipse/EclipseState/Tables/PvtxTable.hpp>
namespace Opm {
class DeckKeyword;
class PvtgwTable : public PvtxTable {
public:
PvtgwTable() = default;
PvtgwTable( const DeckKeyword& keyword, size_t tableIdx);
static PvtgwTable serializeObject();
bool operator==(const PvtgwTable& data) const;
};
}
#endif

View File

@ -1,40 +0,0 @@
/*
Copyright (C) 2020 by Equinor
Copyright (C) 2020 by TNO
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_PARSER_PVTGWO_TABLE_HPP
#define OPM_PARSER_PVTGWO_TABLE_HPP
#include <opm/parser/eclipse/EclipseState/Tables/PvtxTable.hpp>
namespace Opm {
class DeckKeyword;
class PvtgwoTable : public PvtxTable {
public:
PvtgwoTable() = default;
PvtgwoTable( const DeckKeyword& keyword, size_t tableIdx);
static PvtgwoTable serializeObject();
bool operator==(const PvtgwoTable& data) const;
};
}
#endif

View File

@ -1,58 +0,0 @@
/*
Copyright (C) 2020 by Equinor
Copyright (C) 2020 by TNO
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_PARSER_RWGSALT_TABLE_HPP
#define OPM_PARSER_RWGSALT_TABLE_HPP
#include <vector>
namespace Opm {
class DeckKeyword;
class RwgsaltTable {
public:
RwgsaltTable();
static RwgsaltTable serializeObject();
void init(const Opm::DeckRecord& record1);
size_t size() const;
std::vector<double> getPressureColumn() const;
std::vector<double> getSaltConcentrationColumn() const;
std::vector<double> getVaporizedWaterGasRatioColumn() const;
const std::vector<double>& getTableValues() const;
bool operator==(const RwgsaltTable& data) const;
template<class Serializer>
void serializeOp(Serializer& serializer)
{
serializer(m_tableValues);
}
protected:
std::vector <double> m_tableValues;
};
}
#endif

View File

@ -1,38 +0,0 @@
/*
Copyright (C) 2020 by Equinor.
Copyright (C) 2020 by TNO.
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_PARSER_SALTPVD_TABLE_HPP
#define OPM_PARSER_SALTPVD_TABLE_HPP
#include "SimpleTable.hpp"
namespace Opm {
class DeckItem;
class SaltpvdTable : public SimpleTable {
public:
SaltpvdTable( const DeckItem& item );
const TableColumn& getDepthColumn() const;
const TableColumn& getSaltpColumn() const;
};
}
#endif

View File

@ -1,81 +0,0 @@
/*
Copyright (C) 2020 Statoil 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 TLMIXPAR_HPP
#define TLMIXPAR_HPP
#include <cstddef>
#include <vector>
namespace Opm {
class Deck;
struct TLMixRecord {
double viscosity_parameter;
double density_parameter;
TLMixRecord() = default;
TLMixRecord(double v, double d) :
viscosity_parameter(v),
density_parameter(d)
{};
bool operator==(const TLMixRecord& other) const {
return this->viscosity_parameter == other.viscosity_parameter &&
this->density_parameter == other.density_parameter;
}
template<class Serializer>
void serializeOp(Serializer& serializer)
{
serializer(viscosity_parameter);
serializer(density_parameter);
}
};
class TLMixpar {
public:
TLMixpar() = default;
TLMixpar(const Deck& deck);
static TLMixpar serializeObject();
std::size_t size() const;
bool empty() const;
const TLMixRecord& operator[](const std::size_t index) const;
bool operator==(const TLMixpar& other) const {
return this->data == other.data;
}
template<class Serializer>
void serializeOp(Serializer& serializer)
{
serializer.vector(data);
}
private:
std::vector<TLMixRecord> data;
};
}
#endif

View File

@ -33,15 +33,12 @@
#include <opm/parser/eclipse/EclipseState/Tables/DenT.hpp> #include <opm/parser/eclipse/EclipseState/Tables/DenT.hpp>
#include <opm/parser/eclipse/EclipseState/Tables/PvtgTable.hpp> #include <opm/parser/eclipse/EclipseState/Tables/PvtgTable.hpp>
#include <opm/parser/eclipse/EclipseState/Tables/PvtgwTable.hpp>
#include <opm/parser/eclipse/EclipseState/Tables/PvtgwoTable.hpp>
#include <opm/parser/eclipse/EclipseState/Tables/PvtoTable.hpp> #include <opm/parser/eclipse/EclipseState/Tables/PvtoTable.hpp>
#include <opm/parser/eclipse/EclipseState/Tables/RocktabTable.hpp> #include <opm/parser/eclipse/EclipseState/Tables/RocktabTable.hpp>
#include <opm/parser/eclipse/EclipseState/Tables/Rock2dTable.hpp> #include <opm/parser/eclipse/EclipseState/Tables/Rock2dTable.hpp>
#include <opm/parser/eclipse/EclipseState/Tables/Rock2dtrTable.hpp> #include <opm/parser/eclipse/EclipseState/Tables/Rock2dtrTable.hpp>
#include <opm/parser/eclipse/EclipseState/Tables/PlyshlogTable.hpp> #include <opm/parser/eclipse/EclipseState/Tables/PlyshlogTable.hpp>
#include <opm/parser/eclipse/EclipseState/Tables/PvtwsaltTable.hpp> #include <opm/parser/eclipse/EclipseState/Tables/PvtwsaltTable.hpp>
#include <opm/parser/eclipse/EclipseState/Tables/RwgsaltTable.hpp>
#include <opm/parser/eclipse/EclipseState/Tables/BrineDensityTable.hpp> #include <opm/parser/eclipse/EclipseState/Tables/BrineDensityTable.hpp>
#include <opm/parser/eclipse/EclipseState/Tables/SolventDensityTable.hpp> #include <opm/parser/eclipse/EclipseState/Tables/SolventDensityTable.hpp>
#include <opm/parser/eclipse/EclipseState/Tables/StandardCond.hpp> #include <opm/parser/eclipse/EclipseState/Tables/StandardCond.hpp>
@ -60,7 +57,6 @@
#include <opm/parser/eclipse/EclipseState/Tables/SkprpolyTable.hpp> #include <opm/parser/eclipse/EclipseState/Tables/SkprpolyTable.hpp>
#include <opm/parser/eclipse/EclipseState/Tables/Eqldims.hpp> #include <opm/parser/eclipse/EclipseState/Tables/Eqldims.hpp>
#include <opm/parser/eclipse/EclipseState/Tables/Regdims.hpp> #include <opm/parser/eclipse/EclipseState/Tables/Regdims.hpp>
#include <opm/parser/eclipse/EclipseState/Tables/TLMixpar.hpp>
namespace Opm { namespace Opm {
@ -81,7 +77,7 @@ namespace Opm {
const Eqldims& getEqldims() const; const Eqldims& getEqldims() const;
const Aqudims& getAqudims() const; const Aqudims& getAqudims() const;
const Regdims& getRegdims() const; const Regdims& getRegdims() const;
const TLMixpar& getTLMixpar() const;
/* /*
WIll return max{ Tabdims::NTFIP , Regdims::NTFIP }. WIll return max{ Tabdims::NTFIP , Regdims::NTFIP }.
*/ */
@ -101,8 +97,6 @@ namespace Opm {
const TableContainer& getPbvdTables() const; const TableContainer& getPbvdTables() const;
const TableContainer& getPdvdTables() const; const TableContainer& getPdvdTables() const;
const TableContainer& getSaltvdTables() const; const TableContainer& getSaltvdTables() const;
const TableContainer& getSaltpvdTables() const;
const TableContainer& getPermfactTables() const;
const TableContainer& getEnkrvdTables() const; const TableContainer& getEnkrvdTables() const;
const TableContainer& getEnptvdTables() const; const TableContainer& getEnptvdTables() const;
const TableContainer& getImkrvdTables() const; const TableContainer& getImkrvdTables() const;
@ -137,8 +131,6 @@ namespace Opm {
const JFunc& getJFunc() const; const JFunc& getJFunc() const;
const std::vector<PvtgTable>& getPvtgTables() const; const std::vector<PvtgTable>& getPvtgTables() const;
const std::vector<PvtgwTable>& getPvtgwTables() const;
const std::vector<PvtgwoTable>& getPvtgwoTables() const;
const std::vector<PvtoTable>& getPvtoTables() const; const std::vector<PvtoTable>& getPvtoTables() const;
const std::vector<Rock2dTable>& getRock2dTables() const; const std::vector<Rock2dTable>& getRock2dTables() const;
const std::vector<Rock2dtrTable>& getRock2dtrTables() const; const std::vector<Rock2dtrTable>& getRock2dtrTables() const;
@ -152,7 +144,6 @@ namespace Opm {
std::size_t gas_comp_index() const; std::size_t gas_comp_index() const;
const PvtwTable& getPvtwTable() const; const PvtwTable& getPvtwTable() const;
const std::vector<PvtwsaltTable>& getPvtwSaltTables() const; const std::vector<PvtwsaltTable>& getPvtwSaltTables() const;
const std::vector<RwgsaltTable>& getRwgSaltTables() const;
const std::vector<BrineDensityTable>& getBrineDensityTables() const; const std::vector<BrineDensityTable>& getBrineDensityTables() const;
const std::vector<SolventDensityTable>& getSolventDensityTables() const; const std::vector<SolventDensityTable>& getSolventDensityTables() const;
@ -164,6 +155,7 @@ namespace Opm {
const PlmixparTable& getPlmixparTable() const; const PlmixparTable& getPlmixparTable() const;
const ShrateTable& getShrateTable() const; const ShrateTable& getShrateTable() const;
const Stone1exTable& getStone1exTable() const; const Stone1exTable& getStone1exTable() const;
const TlmixparTable& getTlmixparTable() const;
const WatdentTable& getWatdentTable() const; const WatdentTable& getWatdentTable() const;
const std::map<int, PlymwinjTable>& getPlymwinjTables() const; const std::map<int, PlymwinjTable>& getPlymwinjTables() const;
const std::map<int, SkprwatTable>& getSkprwatTables() const; const std::map<int, SkprwatTable>& getSkprwatTables() const;
@ -200,8 +192,6 @@ namespace Opm {
serializer(split.rockMax); serializer(split.rockMax);
serializer.map(split.rockMap); serializer.map(split.rockMap);
serializer.vector(m_pvtgTables); serializer.vector(m_pvtgTables);
serializer.vector(m_pvtgwTables);
serializer.vector(m_pvtgwoTables);
serializer.vector(m_pvtoTables); serializer.vector(m_pvtoTables);
serializer.vector(m_rock2dTables); serializer.vector(m_rock2dTables);
serializer.vector(m_rock2dtrTables); serializer.vector(m_rock2dtrTables);
@ -213,10 +203,10 @@ namespace Opm {
m_plmixparTable.serializeOp(serializer); m_plmixparTable.serializeOp(serializer);
m_shrateTable.serializeOp(serializer); m_shrateTable.serializeOp(serializer);
m_stone1exTable.serializeOp(serializer); m_stone1exTable.serializeOp(serializer);
m_tlmixparTable.serializeOp(serializer);
m_viscrefTable.serializeOp(serializer); m_viscrefTable.serializeOp(serializer);
m_watdentTable.serializeOp(serializer); m_watdentTable.serializeOp(serializer);
serializer.vector(m_pvtwsaltTables); serializer.vector(m_pvtwsaltTables);
serializer.vector(m_rwgsaltTables);
serializer.vector(m_bdensityTables); serializer.vector(m_bdensityTables);
serializer.vector(m_sdensityTables); serializer.vector(m_sdensityTables);
serializer.map(m_plymwinjTables); serializer.map(m_plymwinjTables);
@ -237,7 +227,6 @@ namespace Opm {
stcond.serializeOp(serializer); stcond.serializeOp(serializer);
serializer(m_gas_comp_index); serializer(m_gas_comp_index);
serializer(m_rtemp); serializer(m_rtemp);
m_tlmixpar.serializeOp(serializer);
if (!serializer.isSerializing()) { if (!serializer.isSerializing()) {
m_simpleTables = simpleTables; m_simpleTables = simpleTables;
if (split.plyshMax > 0) { if (split.plyshMax > 0) {
@ -331,22 +320,6 @@ namespace Opm {
assert(regionIdx == numTables); assert(regionIdx == numTables);
} }
template <class TableType>
void initRwgsaltTables(const Deck& deck, std::vector<TableType>& rwgtables ) {
size_t numTables = m_tabdims.getNumPVTTables();
rwgtables.resize(numTables);
const auto& keyword = deck.getKeyword("RWGSALT");
size_t regionIdx = 0;
for (const auto& record : keyword) {
rwgtables[regionIdx].init(record);
++regionIdx;
}
assert(regionIdx == numTables);
}
template <class TableType> template <class TableType>
void initBrineTables(const Deck& deck, std::vector<TableType>& brinetables ) { void initBrineTables(const Deck& deck, std::vector<TableType>& brinetables ) {
@ -491,8 +464,6 @@ namespace Opm {
std::map<std::string , TableContainer> m_simpleTables; std::map<std::string , TableContainer> m_simpleTables;
std::vector<PvtgTable> m_pvtgTables; std::vector<PvtgTable> m_pvtgTables;
std::vector<PvtgwTable> m_pvtgwTables;
std::vector<PvtgwoTable> m_pvtgwoTables;
std::vector<PvtoTable> m_pvtoTables; std::vector<PvtoTable> m_pvtoTables;
std::vector<Rock2dTable> m_rock2dTables; std::vector<Rock2dTable> m_rock2dTables;
std::vector<Rock2dtrTable> m_rock2dtrTables; std::vector<Rock2dtrTable> m_rock2dtrTables;
@ -504,10 +475,10 @@ namespace Opm {
PlmixparTable m_plmixparTable; PlmixparTable m_plmixparTable;
ShrateTable m_shrateTable; ShrateTable m_shrateTable;
Stone1exTable m_stone1exTable; Stone1exTable m_stone1exTable;
TlmixparTable m_tlmixparTable;
ViscrefTable m_viscrefTable; ViscrefTable m_viscrefTable;
WatdentTable m_watdentTable; WatdentTable m_watdentTable;
std::vector<PvtwsaltTable> m_pvtwsaltTables; std::vector<PvtwsaltTable> m_pvtwsaltTables;
std::vector<RwgsaltTable> m_rwgsaltTables;
std::vector<BrineDensityTable> m_bdensityTables; std::vector<BrineDensityTable> m_bdensityTables;
std::vector<SolventDensityTable> m_sdensityTables; std::vector<SolventDensityTable> m_sdensityTables;
std::map<int, PlymwinjTable> m_plymwinjTables; std::map<int, PlymwinjTable> m_plymwinjTables;
@ -518,7 +489,6 @@ namespace Opm {
Regdims m_regdims; Regdims m_regdims;
Eqldims m_eqldims; Eqldims m_eqldims;
Aqudims m_aqudims; Aqudims m_aqudims;
TLMixpar m_tlmixpar;
bool hasImptvd = false;// if deck has keyword IMPTVD bool hasImptvd = false;// if deck has keyword IMPTVD
bool hasEnptvd = false;// if deck has keyword ENPTVD bool hasEnptvd = false;// if deck has keyword ENPTVD

View File

@ -34,6 +34,7 @@
#include <opm/parser/eclipse/EclipseState/EclipseState.hpp> #include <opm/parser/eclipse/EclipseState/EclipseState.hpp>
#include <opm/parser/eclipse/Parser/ParserKeyword.hpp> #include <opm/parser/eclipse/Parser/ParserKeyword.hpp>
#include <opm/parser/eclipse/Utility/Stringview.hpp>
namespace Json { namespace Json {
class JsonObject; class JsonObject;
@ -84,8 +85,8 @@ namespace Opm {
bool hasKeyword( const std::string& ) const; bool hasKeyword( const std::string& ) const;
const ParserKeyword& getKeyword(const std::string& name) const; const ParserKeyword& getKeyword(const std::string& name) const;
bool isRecognizedKeyword( const std::string_view& deckKeywordName) const; bool isRecognizedKeyword( const string_view& deckKeywordName) const;
const ParserKeyword& getParserKeywordFromDeckName(const std::string_view& deckKeywordName) const; const ParserKeyword& getParserKeywordFromDeckName(const string_view& deckKeywordName) const;
std::vector<std::string> getAllDeckNames () const; std::vector<std::string> getAllDeckNames () const;
void loadKeywords(const Json::JsonObject& jsonKeywords); void loadKeywords(const Json::JsonObject& jsonKeywords);
@ -134,18 +135,18 @@ namespace Opm {
private: private:
bool hasWildCardKeyword(const std::string& keyword) const; bool hasWildCardKeyword(const std::string& keyword) const;
const ParserKeyword* matchingKeyword(const std::string_view& keyword) const; const ParserKeyword* matchingKeyword(const string_view& keyword) const;
void addDefaultKeywords(); void addDefaultKeywords();
// std::vector< std::unique_ptr< const ParserKeyword > > keyword_storage; // std::vector< std::unique_ptr< const ParserKeyword > > keyword_storage;
std::list<ParserKeyword> keyword_storage; std::list<ParserKeyword> keyword_storage;
// associative map of deck names and the corresponding ParserKeyword object // associative map of deck names and the corresponding ParserKeyword object
std::map< std::string_view, const ParserKeyword* > m_deckParserKeywords; std::map< string_view, const ParserKeyword* > m_deckParserKeywords;
// associative map of the parser internal names and the corresponding // associative map of the parser internal names and the corresponding
// ParserKeyword object for keywords which match a regular expression // ParserKeyword object for keywords which match a regular expression
std::map< std::string_view, const ParserKeyword* > m_wildCardKeywords; std::map< string_view, const ParserKeyword* > m_wildCardKeywords;
std::vector<std::pair<std::string,std::string>> code_keywords; std::vector<std::pair<std::string,std::string>> code_keywords;
}; };

View File

@ -39,6 +39,7 @@ namespace Opm {
class ErrorGuard; class ErrorGuard;
class ParserDoubleItem; class ParserDoubleItem;
class RawKeyword; class RawKeyword;
class string_view;
class ErrorGuard; class ErrorGuard;
/* /*
@ -90,10 +91,10 @@ namespace Opm {
static bool validInternalName(const std::string& name); static bool validInternalName(const std::string& name);
static bool validDeckName(const std::string_view& name); static bool validDeckName(const string_view& name);
bool hasMatchRegex() const; bool hasMatchRegex() const;
void setMatchRegex(const std::string& deckNameRegexp); void setMatchRegex(const std::string& deckNameRegexp);
bool matches(const std::string_view& ) const; bool matches(const string_view& ) const;
bool hasDimension() const; bool hasDimension() const;
void addRecord( ParserRecord ); void addRecord( ParserRecord );
void addDataRecord( ParserRecord ); void addDataRecord( ParserRecord );
@ -158,7 +159,7 @@ namespace Opm {
bool double_records = false; bool double_records = false;
std::string code_end; std::string code_end;
static bool validNameStart(const std::string_view& name); static bool validNameStart(const string_view& name);
void initDeckNames( const Json::JsonObject& jsonConfig ); void initDeckNames( const Json::JsonObject& jsonConfig );
void initSectionNames( const Json::JsonObject& jsonConfig ); void initSectionNames( const Json::JsonObject& jsonConfig );
void initMatchRegex( const Json::JsonObject& jsonObject ); void initMatchRegex( const Json::JsonObject& jsonObject );

View File

@ -74,7 +74,6 @@ namespace Opm {
gas_productivity_index, gas_productivity_index,
energy, energy,
icd_strength, icd_strength,
polymer_density,
_count // New entries must be added *before* this _count // New entries must be added *before* this
}; };

Some files were not shown because too many files have changed in this diff Show More