Merged from upstream/master
This commit is contained in:
@@ -31,13 +31,14 @@ if (CMAKE_SIZEOF_VOID_P)
|
||||
math (EXPR _BITS "8 * ${CMAKE_SIZEOF_VOID_P}")
|
||||
endif (CMAKE_SIZEOF_VOID_P)
|
||||
|
||||
string(REGEX REPLACE "${PROJECT_SOURCE_DIR}/?(.*)" "\\1" BUILD_DIR_SUFFIX "${PROJECT_BINARY_DIR}")
|
||||
|
||||
find_library (CJSON_LIBRARY
|
||||
NAMES "cjson"
|
||||
HINTS "${CJSON_ROOT}"
|
||||
PATHS "${PROJECT_BINARY_DIR}/../opm-parser"
|
||||
"${PROJECT_BINARY_DIR}/../opm-parser-build"
|
||||
"${PROJECT_BINARY_DIR}/../../opm-parser/build"
|
||||
"${PROJECT_BINARY_DIR}/../../opm-parser/cmake-build"
|
||||
"${PROJECT_BINARY_DIR}/../opm-parser${BUILD_DIR_SUFFIX}"
|
||||
"${PROJECT_BINARY_DIR}/../../opm-parser/${BUILD_DIR_SUFFIX}"
|
||||
PATH_SUFFIXES "lib" "lib${_BITS}" "lib/${CMAKE_LIBRARY_ARCHITECTURE}"
|
||||
"opm/json"
|
||||
DOC "Path to cjson library archive/shared object files"
|
||||
|
||||
@@ -144,6 +144,12 @@ Utility/GruptreeWrapper.hpp
|
||||
Utility/WelspecsWrapper.hpp
|
||||
Utility/PvtgOuterTable.hpp
|
||||
Utility/EquilWrapper.hpp
|
||||
Utility/EndscaleWrapper.hpp
|
||||
Utility/ScalecrsWrapper.hpp
|
||||
Utility/EnptvdTable.hpp
|
||||
Utility/EnkrvdTable.hpp
|
||||
Utility/RocktabTable.hpp
|
||||
Utility/RockTable.hpp
|
||||
)
|
||||
|
||||
add_library(buildParser ${rawdeck_source} ${build_parser_source} ${deck_source} ${unit_source})
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
|
||||
#include <algorithm>
|
||||
#include <iostream>
|
||||
#include <cmath>
|
||||
|
||||
namespace Opm {
|
||||
|
||||
|
||||
@@ -101,15 +101,15 @@ BOOST_AUTO_TEST_CASE(PushBackMultiple) {
|
||||
|
||||
BOOST_AUTO_TEST_CASE(PushBackDimension) {
|
||||
DeckDoubleItem item("HEI");
|
||||
std::shared_ptr<Dimension> activeDimension(new Dimension("L" , 100));
|
||||
std::shared_ptr<Dimension> defaultDimension(new Dimension("L" , 10));
|
||||
std::shared_ptr<Dimension> activeDimension(new Dimension("Length" , 100));
|
||||
std::shared_ptr<Dimension> defaultDimension(new Dimension("Length" , 10));
|
||||
|
||||
item.push_backDimension( activeDimension , defaultDimension);
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(PushBackDimensionInvalidType) {
|
||||
DeckIntItem item("HEI");
|
||||
std::shared_ptr<Dimension> dim(new Dimension("L" , 100));
|
||||
std::shared_ptr<Dimension> dim(new Dimension("Length" , 100));
|
||||
BOOST_CHECK_THROW( item.push_backDimension( dim , dim ) , std::invalid_argument );
|
||||
}
|
||||
|
||||
@@ -127,7 +127,7 @@ BOOST_AUTO_TEST_CASE(GetSIWithoutDimensionThrows) {
|
||||
|
||||
BOOST_AUTO_TEST_CASE(GetSISingleDimensionCorrect) {
|
||||
DeckDoubleItem item("HEI");
|
||||
std::shared_ptr<Dimension> dim(new Dimension("L" , 100));
|
||||
std::shared_ptr<Dimension> dim(new Dimension("Length" , 100));
|
||||
|
||||
item.push_backMultiple(1 , 100 );
|
||||
item.push_backDimension( dim , dim );
|
||||
@@ -139,8 +139,8 @@ BOOST_AUTO_TEST_CASE(GetSISingleDimensionCorrect) {
|
||||
|
||||
BOOST_AUTO_TEST_CASE(GetSISingleDefault) {
|
||||
DeckDoubleItem item("HEI");
|
||||
std::shared_ptr<Dimension> dim(new Dimension("L" , 1));
|
||||
std::shared_ptr<Dimension> defaultDim(new Dimension("L" , 100));
|
||||
std::shared_ptr<Dimension> dim(new Dimension("Length" , 1));
|
||||
std::shared_ptr<Dimension> defaultDim(new Dimension("Length" , 100));
|
||||
|
||||
item.push_backDefault(1 );
|
||||
item.push_backDimension( dim , defaultDim );
|
||||
@@ -152,11 +152,11 @@ BOOST_AUTO_TEST_CASE(GetSISingleDefault) {
|
||||
|
||||
BOOST_AUTO_TEST_CASE(GetSIMultipleDim) {
|
||||
DeckDoubleItem item("HEI");
|
||||
std::shared_ptr<Dimension> dim1(new Dimension("L" , 2));
|
||||
std::shared_ptr<Dimension> dim2(new Dimension("L" , 4));
|
||||
std::shared_ptr<Dimension> dim3(new Dimension("L" , 8));
|
||||
std::shared_ptr<Dimension> dim4(new Dimension("L" ,16));
|
||||
std::shared_ptr<Dimension> defaultDim(new Dimension("L" , 100));
|
||||
std::shared_ptr<Dimension> dim1(new Dimension("Length" , 2));
|
||||
std::shared_ptr<Dimension> dim2(new Dimension("Length" , 4));
|
||||
std::shared_ptr<Dimension> dim3(new Dimension("Length" , 8));
|
||||
std::shared_ptr<Dimension> dim4(new Dimension("Length" ,16));
|
||||
std::shared_ptr<Dimension> defaultDim(new Dimension("Length" , 100));
|
||||
|
||||
item.push_backMultiple( 1 , 16 );
|
||||
item.push_backDimension( dim1 , defaultDim );
|
||||
|
||||
@@ -227,7 +227,7 @@ namespace Opm {
|
||||
}
|
||||
|
||||
|
||||
double Group::getOilTargetRate(size_t time_step) {
|
||||
double Group::getOilTargetRate(size_t time_step) const {
|
||||
return m_production->oilTarget->get(time_step);
|
||||
}
|
||||
|
||||
@@ -237,7 +237,7 @@ namespace Opm {
|
||||
}
|
||||
|
||||
|
||||
double Group::getGasTargetRate(size_t time_step) {
|
||||
double Group::getGasTargetRate(size_t time_step) const {
|
||||
return m_production->gasTarget->get(time_step);
|
||||
}
|
||||
|
||||
@@ -247,7 +247,7 @@ namespace Opm {
|
||||
}
|
||||
|
||||
|
||||
double Group::getWaterTargetRate(size_t time_step) {
|
||||
double Group::getWaterTargetRate(size_t time_step) const {
|
||||
return m_production->waterTarget->get(time_step);
|
||||
}
|
||||
|
||||
@@ -257,7 +257,7 @@ namespace Opm {
|
||||
}
|
||||
|
||||
|
||||
double Group::getLiquidTargetRate(size_t time_step) {
|
||||
double Group::getLiquidTargetRate(size_t time_step) const {
|
||||
return m_production->liquidTarget->get(time_step);
|
||||
}
|
||||
|
||||
@@ -269,7 +269,7 @@ namespace Opm {
|
||||
}
|
||||
|
||||
|
||||
bool Group::hasWell(const std::string& wellName , size_t time_step) {
|
||||
bool Group::hasWell(const std::string& wellName , size_t time_step) const {
|
||||
WellSetConstPtr wellSet = wellMap(time_step);
|
||||
return wellSet->hasWell(wellName);
|
||||
}
|
||||
@@ -281,7 +281,7 @@ namespace Opm {
|
||||
}
|
||||
|
||||
|
||||
size_t Group::numWells(size_t time_step) {
|
||||
size_t Group::numWells(size_t time_step) const {
|
||||
WellSetConstPtr wellSet = wellMap(time_step);
|
||||
return wellSet->size();
|
||||
}
|
||||
|
||||
@@ -81,19 +81,19 @@ namespace Opm {
|
||||
void setProductionExceedLimitAction(size_t time_step , GroupProductionExceedLimit::ActionEnum action);
|
||||
|
||||
void setOilTargetRate(size_t time_step , double oilTargetRate);
|
||||
double getOilTargetRate(size_t time_step);
|
||||
double getOilTargetRate(size_t time_step) const;
|
||||
void setGasTargetRate(size_t time_step , double gasTargetRate);
|
||||
double getGasTargetRate(size_t time_step);
|
||||
double getGasTargetRate(size_t time_step) const;
|
||||
void setWaterTargetRate(size_t time_step , double waterTargetRate);
|
||||
double getWaterTargetRate(size_t time_step);
|
||||
double getWaterTargetRate(size_t time_step) const;
|
||||
void setLiquidTargetRate(size_t time_step , double LiquidTargetRate);
|
||||
double getLiquidTargetRate(size_t time_step);
|
||||
double getLiquidTargetRate(size_t time_step) const;
|
||||
|
||||
/*****************************************************************/
|
||||
|
||||
bool hasWell(const std::string& wellName , size_t time_step);
|
||||
bool hasWell(const std::string& wellName , size_t time_step) const;
|
||||
WellConstPtr getWell(const std::string& wellName , size_t time_step) const;
|
||||
size_t numWells(size_t time_step);
|
||||
size_t numWells(size_t time_step) const;
|
||||
void addWell(size_t time_step , WellPtr well);
|
||||
void delWell(size_t time_step, const std::string& wellName );
|
||||
private:
|
||||
|
||||
@@ -80,10 +80,10 @@ namespace Opm {
|
||||
handleWCONPROD(keyword, currentStep);
|
||||
|
||||
if (keyword->name() == "WCONINJE")
|
||||
handleWCONINJE(keyword, currentStep);
|
||||
handleWCONINJE(deck, keyword, currentStep);
|
||||
|
||||
if (keyword->name() == "WCONINJH")
|
||||
handleWCONINJH(keyword, currentStep);
|
||||
handleWCONINJH(deck, keyword, currentStep);
|
||||
|
||||
if (keyword->name() == "COMPDAT")
|
||||
handleCOMPDAT(keyword, currentStep);
|
||||
@@ -95,7 +95,7 @@ namespace Opm {
|
||||
handleGRUPTREE(keyword, currentStep);
|
||||
|
||||
if (keyword->name() == "GCONINJE")
|
||||
handleGCONINJE( keyword , currentStep );
|
||||
handleGCONINJE( deck, keyword , currentStep );
|
||||
|
||||
if (keyword->name() == "GCONPROD")
|
||||
handleGCONPROD( keyword , currentStep );
|
||||
@@ -188,9 +188,9 @@ namespace Opm {
|
||||
|
||||
if (isPredictionMode) {
|
||||
liquidRate = record->getItem("LRAT")->getSIDouble(0);
|
||||
resVRate = record->getItem("RESV")->getSIDouble(0);
|
||||
BHPLimit = record->getItem("BHP")->getSIDouble(0);
|
||||
THPLimit = record->getItem("THP")->getSIDouble(0);
|
||||
resVRate = record->getItem("RESV")->getSIDouble(0);
|
||||
}
|
||||
|
||||
well->setLiquidRate( currentStep , liquidRate );
|
||||
@@ -238,18 +238,25 @@ namespace Opm {
|
||||
handleWCONProducer(keyword, currentStep, true);
|
||||
}
|
||||
|
||||
void Schedule::handleWCONINJE(DeckKeywordConstPtr keyword, size_t currentStep) {
|
||||
void Schedule::handleWCONINJE(DeckConstPtr deck, DeckKeywordConstPtr keyword, size_t currentStep) {
|
||||
for (size_t recordNr = 0; recordNr < keyword->size(); recordNr++) {
|
||||
DeckRecordConstPtr record = keyword->getRecord(recordNr);
|
||||
const std::string& wellName = record->getItem("WELL")->getString(0);
|
||||
WellPtr well = getWell(wellName);
|
||||
double surfaceInjectionRate = record->getItem("RATE")->getSIDouble(0);
|
||||
double reservoirInjectionRate = record->getItem("RESV")->getSIDouble(0);
|
||||
|
||||
// calculate the injection rates. These are context
|
||||
// dependent, so we have to jump through some hoops
|
||||
// here...
|
||||
WellInjector::TypeEnum injectorType = WellInjector::TypeFromString( record->getItem("TYPE")->getString(0) );
|
||||
double surfaceInjectionRate = record->getItem("RATE")->getRawDouble(0);
|
||||
double reservoirInjectionRate = record->getItem("RESV")->getRawDouble(0);
|
||||
surfaceInjectionRate = convertInjectionRateToSI(surfaceInjectionRate, injectorType, *deck->getActiveUnitSystem());
|
||||
reservoirInjectionRate = convertInjectionRateToSI(reservoirInjectionRate, injectorType, *deck->getActiveUnitSystem());
|
||||
|
||||
double BHPLimit = record->getItem("BHP")->getSIDouble(0);
|
||||
double THPLimit = record->getItem("THP")->getSIDouble(0);
|
||||
WellInjector::ControlModeEnum controlMode = WellInjector::ControlModeFromString( record->getItem("CMODE")->getString(0));
|
||||
WellCommon::StatusEnum status = WellCommon::StatusFromString( record->getItem("STATUS")->getString(0));
|
||||
WellInjector::TypeEnum injectorType = WellInjector::TypeFromString( record->getItem("TYPE")->getString(0) );
|
||||
WellInjector::ControlModeEnum controlMode = WellInjector::ControlModeFromString( record->getItem("CMODE")->getString(0));
|
||||
|
||||
well->setStatus( currentStep , status );
|
||||
well->setSurfaceInjectionRate( currentStep , surfaceInjectionRate );
|
||||
@@ -275,14 +282,19 @@ namespace Opm {
|
||||
}
|
||||
}
|
||||
|
||||
void Schedule::handleWCONINJH(DeckKeywordConstPtr keyword, size_t currentStep) {
|
||||
void Schedule::handleWCONINJH(DeckConstPtr deck, DeckKeywordConstPtr keyword, size_t currentStep) {
|
||||
for (size_t recordNr = 0; recordNr < keyword->size(); recordNr++) {
|
||||
DeckRecordConstPtr record = keyword->getRecord(recordNr);
|
||||
const std::string& wellName = record->getItem("WELL")->getString(0);
|
||||
WellPtr well = getWell(wellName);
|
||||
double injectionRate = record->getItem("RATE")->getSIDouble(0);
|
||||
|
||||
// convert injection rates to SI
|
||||
WellInjector::TypeEnum wellType = WellInjector::TypeFromString( record->getItem("TYPE")->getString(0));
|
||||
double injectionRate = record->getItem("RATE")->getRawDouble(0);
|
||||
injectionRate = convertInjectionRateToSI(injectionRate, wellType, *deck->getActiveUnitSystem());
|
||||
|
||||
WellCommon::StatusEnum status = WellCommon::StatusFromString( record->getItem("STATUS")->getString(0));
|
||||
|
||||
|
||||
well->setStatus( currentStep , status );
|
||||
well->setSurfaceInjectionRate( currentStep , injectionRate );
|
||||
well->setInPredictionMode(currentStep, false );
|
||||
@@ -306,7 +318,7 @@ namespace Opm {
|
||||
}
|
||||
|
||||
|
||||
void Schedule::handleGCONINJE(DeckKeywordConstPtr keyword, size_t currentStep) {
|
||||
void Schedule::handleGCONINJE(DeckConstPtr deck, DeckKeywordConstPtr keyword, size_t currentStep) {
|
||||
for (size_t recordNr = 0; recordNr < keyword->size(); recordNr++) {
|
||||
DeckRecordConstPtr record = keyword->getRecord(recordNr);
|
||||
const std::string& groupName = record->getItem("GROUP")->getString(0);
|
||||
@@ -320,10 +332,19 @@ namespace Opm {
|
||||
GroupInjection::ControlEnum controlMode = GroupInjection::ControlEnumFromString( record->getItem("CONTROL_MODE")->getString(0) );
|
||||
group->setInjectionControlMode( currentStep , controlMode );
|
||||
}
|
||||
group->setSurfaceMaxRate( currentStep , record->getItem("SURFACE_TARGET")->getSIDouble(0));
|
||||
group->setReservoirMaxRate( currentStep , record->getItem("RESV_TARGET")->getSIDouble(0));
|
||||
group->setTargetReinjectFraction( currentStep , record->getItem("REINJ_TARGET")->getRawDouble(0));
|
||||
group->setTargetVoidReplacementFraction( currentStep , record->getItem("VOIDAGE_TARGET")->getRawDouble(0));
|
||||
|
||||
Phase::PhaseEnum wellPhase = Phase::PhaseEnumFromString( record->getItem("PHASE")->getString(0));
|
||||
|
||||
// calculate SI injection rates for the group
|
||||
double surfaceInjectionRate = record->getItem("SURFACE_TARGET")->getRawDouble(0);
|
||||
surfaceInjectionRate = convertInjectionRateToSI(surfaceInjectionRate, wellPhase, *deck->getActiveUnitSystem());
|
||||
double reservoirInjectionRate = record->getItem("RESV_TARGET")->getRawDouble(0);
|
||||
reservoirInjectionRate = convertInjectionRateToSI(reservoirInjectionRate, wellPhase, *deck->getActiveUnitSystem());
|
||||
|
||||
group->setSurfaceMaxRate( currentStep , surfaceInjectionRate);
|
||||
group->setReservoirMaxRate( currentStep , reservoirInjectionRate);
|
||||
group->setTargetReinjectFraction( currentStep , record->getItem("REINJ_TARGET")->getSIDouble(0));
|
||||
group->setTargetVoidReplacementFraction( currentStep , record->getItem("VOIDAGE_TARGET")->getSIDouble(0));
|
||||
|
||||
group->setProductionGroup(currentStep, false);
|
||||
}
|
||||
@@ -465,4 +486,38 @@ namespace Opm {
|
||||
}
|
||||
|
||||
|
||||
double Schedule::convertInjectionRateToSI(double rawRate, WellInjector::TypeEnum wellType, const Opm::UnitSystem &unitSystem) const {
|
||||
switch (wellType) {
|
||||
case WellInjector::MULTI:
|
||||
// multi-phase controlled injectors are a really funny
|
||||
// construct in Eclipse: the quantity controlled for is
|
||||
// not physically meaningful, i.e. Eclipse adds up
|
||||
// MCFT/day and STB/day.
|
||||
throw std::logic_error("There is no generic way to handle multi-phase injectors at this level!");
|
||||
|
||||
case WellInjector::OIL:
|
||||
case WellInjector::WATER:
|
||||
return rawRate * unitSystem.parse("LiquidVolume/Time")->getSIScaling();
|
||||
|
||||
case WellInjector::GAS:
|
||||
return rawRate * unitSystem.parse("GasVolume/Time")->getSIScaling();
|
||||
|
||||
default:
|
||||
throw std::logic_error("Unknown injector type");
|
||||
}
|
||||
}
|
||||
|
||||
double Schedule::convertInjectionRateToSI(double rawRate, Phase::PhaseEnum wellPhase, const Opm::UnitSystem &unitSystem) const {
|
||||
switch (wellPhase) {
|
||||
case Phase::OIL:
|
||||
case Phase::WATER:
|
||||
return rawRate * unitSystem.parse("LiquidVolume/Time")->getSIScaling();
|
||||
|
||||
case Phase::GAS:
|
||||
return rawRate * unitSystem.parse("GasVolume/Time")->getSIScaling();
|
||||
|
||||
default:
|
||||
throw std::logic_error("Unknown injection phase");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -73,15 +73,17 @@ namespace Opm
|
||||
void handleWCONHIST(DeckKeywordConstPtr keyword , size_t currentStep);
|
||||
void handleWCONPROD(DeckKeywordConstPtr keyword, size_t currentStep);
|
||||
void handleCOMPDAT(DeckKeywordConstPtr keyword , size_t currentStep);
|
||||
void handleWCONINJE(DeckKeywordConstPtr keyword, size_t currentStep);
|
||||
void handleWCONINJH(DeckKeywordConstPtr keyword, size_t currentStep);
|
||||
void handleWCONINJE(DeckConstPtr deck, DeckKeywordConstPtr keyword, size_t currentStep);
|
||||
void handleWCONINJH(DeckConstPtr deck, DeckKeywordConstPtr keyword, size_t currentStep);
|
||||
void handleWELOPEN(DeckKeywordConstPtr keyword, size_t currentStep);
|
||||
void handleGCONINJE(DeckKeywordConstPtr keyword, size_t currentStep);
|
||||
void handleGCONINJE(DeckConstPtr deck, DeckKeywordConstPtr keyword, size_t currentStep);
|
||||
void handleGCONPROD(DeckKeywordConstPtr keyword, size_t currentStep);
|
||||
void handleDATES(DeckKeywordConstPtr keyword);
|
||||
void handleTSTEP(DeckKeywordConstPtr keyword);
|
||||
void handleGRUPTREE(DeckKeywordConstPtr keyword, size_t currentStep);
|
||||
|
||||
double convertInjectionRateToSI(double rawRate, WellInjector::TypeEnum wellType, const Opm::UnitSystem &unitSystem) const;
|
||||
double convertInjectionRateToSI(double rawRate, Phase::PhaseEnum wellPhase, const Opm::UnitSystem &unitSystem) const;
|
||||
};
|
||||
typedef std::shared_ptr<Schedule> SchedulePtr;
|
||||
typedef std::shared_ptr<const Schedule> ScheduleConstPtr;
|
||||
|
||||
@@ -130,7 +130,7 @@ BOOST_AUTO_TEST_CASE(WellTesting) {
|
||||
|
||||
BOOST_CHECK( well1->isInjector(9));
|
||||
BOOST_CHECK_CLOSE(20000/Metric::Time , well1->getSurfaceInjectionRate(9) , 0.001);
|
||||
BOOST_CHECK_CLOSE(200000/Metric::Time , well1->getReservoirInjectionRate(9) , 0.001);
|
||||
BOOST_CHECK_CLOSE(200000/Metric::Time, well1->getReservoirInjectionRate(9) , 0.001);
|
||||
BOOST_CHECK_CLOSE(6891 * Metric::Pressure , well1->getBHPLimit(9) , 0.001);
|
||||
BOOST_CHECK_CLOSE(0 , well1->getTHPLimit(9) , 0.001);
|
||||
BOOST_CHECK_CLOSE(123.00 * Metric::Pressure , well1->getBHPLimit(10) , 0.001);
|
||||
|
||||
@@ -108,13 +108,13 @@ namespace Opm {
|
||||
UnitSystem * system = new UnitSystem("Metric");
|
||||
|
||||
system->addDimension("1" , 1);
|
||||
system->addDimension("L" , 1);
|
||||
system->addDimension("t" , 86400 );
|
||||
system->addDimension("m" , 1 );
|
||||
system->addDimension("P" , 100000 );
|
||||
system->addDimension("K" , 9.869233e-10 );
|
||||
system->addDimension("mu" , 0.001); // viscosity. ECLiPSE uses cP for metric units
|
||||
system->addDimension("Rs" , 1); // Gas dissolution factor. ECLiPSE uses m^3/m^3 for metric units
|
||||
system->addDimension("Length" , 1);
|
||||
system->addDimension("Time" , 86400 );
|
||||
system->addDimension("Mass" , 1 );
|
||||
system->addDimension("Pressure" , 100000 );
|
||||
system->addDimension("Permeability" , 9.869233e-10 );
|
||||
system->addDimension("Viscosity" , 0.001); // viscosity. ECLiPSE uses cP for metric units
|
||||
system->addDimension("GasDissolutionFactor" , 1); // Gas dissolution factor. ECLiPSE uses m^3/m^3 for metric units
|
||||
|
||||
return system;
|
||||
}
|
||||
@@ -125,13 +125,13 @@ namespace Opm {
|
||||
UnitSystem * system = new UnitSystem("Field");
|
||||
|
||||
system->addDimension("1" , 1);
|
||||
system->addDimension("L" , 0.3048);
|
||||
system->addDimension("t" , 86400 );
|
||||
system->addDimension("m" , 0.45359237 );
|
||||
system->addDimension("P" , 6894.76 );
|
||||
system->addDimension("K" , 9.869233e-10 );
|
||||
system->addDimension("mu" , 0.001); // viscosity. ECLiPSE uses cP for field units
|
||||
system->addDimension("Rs" , 28.316847/0.15898729); // Gas dissolution factor. ECLiPSE uses Mscft/stb for field units
|
||||
system->addDimension("Length" , 0.3048);
|
||||
system->addDimension("Time" , 86400 );
|
||||
system->addDimension("Mass" , 0.45359237 );
|
||||
system->addDimension("Pressure" , 6894.76 );
|
||||
system->addDimension("Permeability" , 9.869233e-10 );
|
||||
system->addDimension("Viscosity" , 0.001); // viscosity. ECLiPSE uses cP for field units
|
||||
system->addDimension("GasDissolutionFactor" , 28.316847/0.15898729); // Gas dissolution factor. ECLiPSE uses Mscft/stb for field units
|
||||
|
||||
return system;
|
||||
}
|
||||
|
||||
@@ -189,8 +189,8 @@ BOOST_AUTO_TEST_CASE(DoubleItem_DimEqual_ReturnsTrue) {
|
||||
ParserDoubleItem item1("ITEM1", sizeType);
|
||||
ParserDoubleItem item2("ITEM1", sizeType);
|
||||
|
||||
item1.push_backDimension("L*L");
|
||||
item2.push_backDimension("L*L");
|
||||
item1.push_backDimension("Length*Length");
|
||||
item2.push_backDimension("Length*Length");
|
||||
|
||||
BOOST_CHECK( item1.equal( item2 ));
|
||||
}
|
||||
@@ -199,16 +199,16 @@ BOOST_AUTO_TEST_CASE(DoubleItem_DimEqual_ReturnsTrue) {
|
||||
BOOST_AUTO_TEST_CASE(DoubleItem_DimDifferent_ReturnsFalse) {
|
||||
ParserItemSizeEnum sizeType = ALL;
|
||||
ParserDoubleItem item1("ITEM1", sizeType); // Dim: []
|
||||
ParserDoubleItem item2("ITEM1", sizeType); // Dim: [L]
|
||||
ParserDoubleItem item3("ITEM1", sizeType); // Dim: [L ,L]
|
||||
ParserDoubleItem item2("ITEM1", sizeType); // Dim: [Length]
|
||||
ParserDoubleItem item3("ITEM1", sizeType); // Dim: [Length ,Length]
|
||||
ParserDoubleItem item4("ITEM1", sizeType); // Dim: [t]
|
||||
|
||||
item2.push_backDimension("L");
|
||||
item2.push_backDimension("Length");
|
||||
|
||||
item3.push_backDimension("L");
|
||||
item3.push_backDimension("L");
|
||||
item3.push_backDimension("Length");
|
||||
item3.push_backDimension("Length");
|
||||
|
||||
item4.push_backDimension("t");
|
||||
item4.push_backDimension("Time");
|
||||
|
||||
BOOST_CHECK_EQUAL(false , item1.equal( item2 ));
|
||||
BOOST_CHECK_EQUAL(false , item2.equal( item3 ));
|
||||
@@ -587,7 +587,7 @@ BOOST_AUTO_TEST_CASE(ParserIntItemGetDimensionThrows) {
|
||||
ParserIntItem intItem(std::string("SOMEINT"));
|
||||
|
||||
BOOST_CHECK_THROW( intItem.getDimension(0) , std::invalid_argument );
|
||||
BOOST_CHECK_THROW( intItem.push_backDimension("L") , std::invalid_argument );
|
||||
BOOST_CHECK_THROW( intItem.push_backDimension("Length") , std::invalid_argument );
|
||||
}
|
||||
|
||||
|
||||
@@ -595,8 +595,8 @@ BOOST_AUTO_TEST_CASE(ParserIntItemGetDimensionThrows) {
|
||||
BOOST_AUTO_TEST_CASE(ParserDoubleItemAddMultipleDimensionToSIngleSizeThrows) {
|
||||
ParserDoubleItem doubleItem(std::string("SOMEDOUBLE"));
|
||||
|
||||
doubleItem.push_backDimension("L*L");
|
||||
BOOST_CHECK_THROW( doubleItem.push_backDimension("L*L"), std::invalid_argument);
|
||||
doubleItem.push_backDimension("Length*Length");
|
||||
BOOST_CHECK_THROW( doubleItem.push_backDimension("Length*Length"), std::invalid_argument);
|
||||
}
|
||||
|
||||
|
||||
@@ -604,7 +604,7 @@ BOOST_AUTO_TEST_CASE(ParserDoubleItemWithDimensionHasReturnsCorrect) {
|
||||
ParserDoubleItem doubleItem(std::string("SOMEDOUBLE"));
|
||||
|
||||
BOOST_CHECK_EQUAL( false , doubleItem.hasDimension() );
|
||||
doubleItem.push_backDimension("L*L");
|
||||
doubleItem.push_backDimension("Length*Length");
|
||||
BOOST_CHECK_EQUAL( true , doubleItem.hasDimension() );
|
||||
}
|
||||
|
||||
@@ -615,13 +615,13 @@ BOOST_AUTO_TEST_CASE(ParserDoubleItemGetDimension) {
|
||||
BOOST_CHECK_THROW( doubleItem.getDimension( 10 ) , std::invalid_argument );
|
||||
BOOST_CHECK_THROW( doubleItem.getDimension( 0 ) , std::invalid_argument );
|
||||
|
||||
doubleItem.push_backDimension("L");
|
||||
doubleItem.push_backDimension("L*L");
|
||||
doubleItem.push_backDimension("L*L*L");
|
||||
doubleItem.push_backDimension("Length");
|
||||
doubleItem.push_backDimension("Length*Length");
|
||||
doubleItem.push_backDimension("Length*Length*Length");
|
||||
|
||||
BOOST_CHECK_EQUAL( "L" , doubleItem.getDimension(0));
|
||||
BOOST_CHECK_EQUAL( "L*L" , doubleItem.getDimension(1));
|
||||
BOOST_CHECK_EQUAL( "L*L*L" , doubleItem.getDimension(2));
|
||||
BOOST_CHECK_EQUAL( "Length" , doubleItem.getDimension(0));
|
||||
BOOST_CHECK_EQUAL( "Length*Length" , doubleItem.getDimension(1));
|
||||
BOOST_CHECK_EQUAL( "Length*Length*Length" , doubleItem.getDimension(2));
|
||||
BOOST_CHECK_THROW( doubleItem.getDimension( 3 ) , std::invalid_argument );
|
||||
}
|
||||
|
||||
|
||||
@@ -465,14 +465,14 @@ BOOST_AUTO_TEST_CASE(ParseKeywordHasDimensionCorrect) {
|
||||
BOOST_CHECK_EQUAL( false , parserKeyword->hasDimension());
|
||||
BOOST_CHECK_EQUAL( 0U , itemI->numDimensions() );
|
||||
|
||||
item2->push_backDimension("L*L/t");
|
||||
item2->push_backDimension("Length*Length/Time");
|
||||
BOOST_CHECK_EQUAL( true , parserKeyword->hasDimension());
|
||||
BOOST_CHECK_EQUAL( 1U , item2->numDimensions() );
|
||||
}
|
||||
|
||||
|
||||
BOOST_AUTO_TEST_CASE(ConstructFromJsonObject_withDimension) {
|
||||
Json::JsonObject jsonObject("{\"name\": \"BPR\", \"size\" : 100 , \"items\" :[{\"name\":\"ItemX\" , \"size_type\":\"SINGLE\" , \"value_type\" : \"FLOAT\" , \"dimension\" : \"L*L/t\"}]}");
|
||||
Json::JsonObject jsonObject("{\"name\": \"BPR\", \"size\" : 100 , \"items\" :[{\"name\":\"ItemX\" , \"size_type\":\"SINGLE\" , \"value_type\" : \"FLOAT\" , \"dimension\" : \"Length*Length/Time\"}]}");
|
||||
ParserKeyword parserKeyword(jsonObject);
|
||||
ParserRecordConstPtr record = parserKeyword.getRecord();
|
||||
ParserItemConstPtr item = record->get("ItemX");
|
||||
@@ -490,7 +490,7 @@ BOOST_AUTO_TEST_CASE(ConstructFromJsonObject_withDimension) {
|
||||
|
||||
|
||||
BOOST_AUTO_TEST_CASE(ConstructFromJsonObject_withDimensionList) {
|
||||
Json::JsonObject jsonObject("{\"name\": \"BPR\", \"size\" : 100 , \"items\" :[{\"name\":\"ItemX\" , \"size_type\":\"ALL\" , \"value_type\" : \"FLOAT\" , \"dimension\" : [\"L*L/t\" , \"t\", \"1\"]}]}");
|
||||
Json::JsonObject jsonObject("{\"name\": \"BPR\", \"size\" : 100 , \"items\" :[{\"name\":\"ItemX\" , \"size_type\":\"ALL\" , \"value_type\" : \"FLOAT\" , \"dimension\" : [\"Length*Length/Time\" , \"Time\", \"1\"]}]}");
|
||||
ParserKeyword parserKeyword(jsonObject);
|
||||
ParserRecordConstPtr record = parserKeyword.getRecord();
|
||||
ParserItemConstPtr item = record->get("ItemX");
|
||||
|
||||
@@ -318,6 +318,6 @@ BOOST_AUTO_TEST_CASE(ParseRecordHasDimensionCorrect) {
|
||||
parserRecord->addItem( item2 );
|
||||
BOOST_CHECK_EQUAL( false , parserRecord->hasDimension());
|
||||
|
||||
item2->push_backDimension("L*L/t");
|
||||
item2->push_backDimension("Length*Length/Time");
|
||||
BOOST_CHECK_EQUAL( true , parserRecord->hasDimension());
|
||||
}
|
||||
|
||||
@@ -51,8 +51,10 @@ namespace Opm {
|
||||
const double Time = 86400;
|
||||
const double Mass = 1.0;
|
||||
const double Permeability = 9.869233e-16;
|
||||
const double DissolvedGasRatio = 1.0;
|
||||
const double FlowVolume = 1.0;
|
||||
const double GasDissolutionFactor = 1.0;
|
||||
const double OilDissolutionFactor = 1.0;
|
||||
const double LiquidVolume = 1.0;
|
||||
const double GasVolume = 1.0;
|
||||
const double Density = 1.0;
|
||||
const double Viscosity = 0.001; // cP -> Pa s
|
||||
const double Timestep = 24*60*60; // days -> s
|
||||
@@ -65,8 +67,10 @@ namespace Opm {
|
||||
const double Time = 86400;
|
||||
const double Mass = 0.45359237;
|
||||
const double Permeability = 9.869233e-16;
|
||||
const double DissolvedGasRatio = 178.1076; // Mscf / stb -> m^3/m^3
|
||||
const double FlowVolume = 0.158987294; // STB -> m^3
|
||||
const double GasDissolutionFactor = 178.1076; // Mscf / stb -> m^3/m^3
|
||||
const double OilDissolutionFactor = 1.0/178.1076; // stb / Mscf -> m^3/m^3
|
||||
const double LiquidVolume = 0.158987294; // STB -> m^3
|
||||
const double GasVolume = 28.316847; // MCFT -> m^3
|
||||
const double Density = 16.01846; // lb/ft^3 -> kg / m^3
|
||||
const double Viscosity = 0.001; // cP -> Pa s
|
||||
const double Timestep = 24*60*60; // days -> s
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
|
||||
#include <string>
|
||||
#include <stdexcept>
|
||||
#include <cmath>
|
||||
|
||||
namespace Opm {
|
||||
|
||||
@@ -40,6 +41,9 @@ namespace Opm {
|
||||
|
||||
|
||||
double Dimension::getSIScaling() const {
|
||||
if (!std::isfinite(m_SIfactor))
|
||||
throw std::logic_error("The DeckItem contains a field with a context dependent unit. "
|
||||
"Use getRawDoubleData() and convert the returned value manually!");
|
||||
return m_SIfactor;
|
||||
}
|
||||
|
||||
@@ -58,11 +62,13 @@ namespace Opm {
|
||||
|
||||
|
||||
bool Dimension::equal(const Dimension& other) const {
|
||||
if ((m_name == other.m_name) &&
|
||||
(m_SIfactor == other.m_SIfactor))
|
||||
return true;
|
||||
else
|
||||
if (m_name != other.m_name)
|
||||
return false;
|
||||
if (m_SIfactor == other.m_SIfactor)
|
||||
return true;
|
||||
if (std::isnan(m_SIfactor) && std::isnan(other.m_SIfactor))
|
||||
return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -24,7 +24,9 @@
|
||||
|
||||
#include <opm/parser/eclipse/Units/ConversionFactors.hpp>
|
||||
#include <opm/parser/eclipse/Units/UnitSystem.hpp>
|
||||
|
||||
#include <vector>
|
||||
#include <limits>
|
||||
|
||||
|
||||
namespace Opm {
|
||||
@@ -136,16 +138,19 @@ namespace Opm {
|
||||
UnitSystem * system = new UnitSystem("Metric");
|
||||
|
||||
system->addDimension("1" , 1.0);
|
||||
system->addDimension("P" , Metric::Pressure );
|
||||
system->addDimension("L" , Metric::Length);
|
||||
system->addDimension("t" , Metric::Time );
|
||||
system->addDimension("m" , Metric::Mass );
|
||||
system->addDimension("K" , Metric::Permeability );
|
||||
system->addDimension("Rs" , Metric::DissolvedGasRatio);
|
||||
system->addDimension("FlowVolume", Metric::FlowVolume );
|
||||
system->addDimension("Rho" , Metric::Density );
|
||||
system->addDimension("mu" , Metric::Viscosity);
|
||||
system->addDimension("Pressure" , Metric::Pressure );
|
||||
system->addDimension("Length" , Metric::Length);
|
||||
system->addDimension("Time" , Metric::Time );
|
||||
system->addDimension("Mass" , Metric::Mass );
|
||||
system->addDimension("Permeability", Metric::Permeability );
|
||||
system->addDimension("GasDissolutionFactor", Metric::GasDissolutionFactor);
|
||||
system->addDimension("OilDissolutionFactor", Metric::OilDissolutionFactor);
|
||||
system->addDimension("LiquidVolume", Metric::LiquidVolume );
|
||||
system->addDimension("GasVolume" , Metric::GasVolume );
|
||||
system->addDimension("Density" , Metric::Density );
|
||||
system->addDimension("Viscosity" , Metric::Viscosity);
|
||||
system->addDimension("Timestep" , Metric::Timestep);
|
||||
system->addDimension("ContextDependent", std::numeric_limits<double>::quiet_NaN());
|
||||
return system;
|
||||
}
|
||||
|
||||
@@ -155,16 +160,19 @@ namespace Opm {
|
||||
UnitSystem * system = new UnitSystem("Field");
|
||||
|
||||
system->addDimension("1" , 1.0);
|
||||
system->addDimension("P" , Field::Pressure );
|
||||
system->addDimension("L" , Field::Length);
|
||||
system->addDimension("t" , Field::Time);
|
||||
system->addDimension("m" , Field::Mass);
|
||||
system->addDimension("K" , Field::Permeability );
|
||||
system->addDimension("Rs" , Field::DissolvedGasRatio );
|
||||
system->addDimension("FlowVolume" , Field::FlowVolume );
|
||||
system->addDimension("Rho" , Field::Density );
|
||||
system->addDimension("mu" , Field::Viscosity);
|
||||
system->addDimension("Pressure", Field::Pressure );
|
||||
system->addDimension("Length", Field::Length);
|
||||
system->addDimension("Time" , Field::Time);
|
||||
system->addDimension("Mass", Field::Mass);
|
||||
system->addDimension("Permeability", Field::Permeability );
|
||||
system->addDimension("GasDissolutionFactor" , Field::GasDissolutionFactor);
|
||||
system->addDimension("OilDissolutionFactor", Field::OilDissolutionFactor);
|
||||
system->addDimension("LiquidVolume", Field::LiquidVolume );
|
||||
system->addDimension("GasVolume", Field::GasVolume );
|
||||
system->addDimension("Density", Field::Density );
|
||||
system->addDimension("Viscosity", Field::Viscosity);
|
||||
system->addDimension("Timestep", Field::Timestep);
|
||||
system->addDimension("ContextDependent", std::numeric_limits<double>::quiet_NaN());
|
||||
return system;
|
||||
}
|
||||
|
||||
|
||||
@@ -30,14 +30,14 @@
|
||||
using namespace Opm;
|
||||
|
||||
BOOST_AUTO_TEST_CASE(CreateDimension) {
|
||||
Dimension length("L" , 1);
|
||||
BOOST_CHECK_EQUAL("L" , length.getName());
|
||||
Dimension length("Length" , 1);
|
||||
BOOST_CHECK_EQUAL("Length" , length.getName());
|
||||
BOOST_CHECK_EQUAL(1 , length.getSIScaling());
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(makeComposite) {
|
||||
std::shared_ptr<Dimension> composite(Dimension::newComposite("L*L*L/t" , 100));
|
||||
BOOST_CHECK_EQUAL("L*L*L/t" , composite->getName());
|
||||
std::shared_ptr<Dimension> composite(Dimension::newComposite("Length*Length*Length/Time" , 100));
|
||||
BOOST_CHECK_EQUAL("Length*Length*Length/Time" , composite->getName());
|
||||
BOOST_CHECK_EQUAL(100 , composite->getSIScaling());
|
||||
}
|
||||
|
||||
@@ -60,7 +60,7 @@ BOOST_AUTO_TEST_CASE(CreateUnitSystem) {
|
||||
|
||||
BOOST_AUTO_TEST_CASE(UnitSystemEmptyHasNone) {
|
||||
UnitSystem system("Metric");
|
||||
BOOST_CHECK_EQUAL( false , system.hasDimension("L"));
|
||||
BOOST_CHECK_EQUAL( false , system.hasDimension("Length"));
|
||||
BOOST_CHECK_EQUAL( false , system.hasDimension("LXY"));
|
||||
}
|
||||
|
||||
@@ -68,17 +68,17 @@ BOOST_AUTO_TEST_CASE(UnitSystemEmptyHasNone) {
|
||||
|
||||
BOOST_AUTO_TEST_CASE(UnitSystemGetMissingDimensionThrows) {
|
||||
UnitSystem system("Metric");
|
||||
BOOST_CHECK_THROW( system.getDimension("L") , std::invalid_argument );
|
||||
BOOST_CHECK_THROW( system.getDimension("Length") , std::invalid_argument );
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(UnitSystemGetNewOK) {
|
||||
UnitSystem system("Metric");
|
||||
system.addDimension("L" , 10 );
|
||||
system.addDimension("t" , 100);
|
||||
system.addDimension("Length" , 10 );
|
||||
system.addDimension("Time" , 100);
|
||||
|
||||
BOOST_CHECK_EQUAL( false , system.hasDimension("L*L/t"));
|
||||
std::shared_ptr<const Dimension> comp = system.getNewDimension("L*L/t");
|
||||
BOOST_CHECK_EQUAL( true , system.hasDimension("L*L/t"));
|
||||
BOOST_CHECK_EQUAL( false , system.hasDimension("Length*Length/Time"));
|
||||
std::shared_ptr<const Dimension> comp = system.getNewDimension("Length*Length/Time");
|
||||
BOOST_CHECK_EQUAL( true , system.hasDimension("Length*Length/Time"));
|
||||
BOOST_CHECK_EQUAL(1 , comp->getSIScaling());
|
||||
}
|
||||
|
||||
@@ -87,16 +87,16 @@ BOOST_AUTO_TEST_CASE(UnitSystemGetNewOK) {
|
||||
|
||||
BOOST_AUTO_TEST_CASE(UnitSystemAddDimensions) {
|
||||
UnitSystem system("Metric");
|
||||
system.addDimension("L" , 1 );
|
||||
system.addDimension("t" , 86400 );
|
||||
system.addDimension("Length" , 1 );
|
||||
system.addDimension("Time" , 86400 );
|
||||
|
||||
std::shared_ptr<const Dimension> length = system.getDimension("L");
|
||||
std::shared_ptr<const Dimension> time = system.getDimension("t");
|
||||
std::shared_ptr<const Dimension> length = system.getDimension("Length");
|
||||
std::shared_ptr<const Dimension> time = system.getDimension("Time");
|
||||
BOOST_CHECK_EQUAL(1 , length->getSIScaling());
|
||||
BOOST_CHECK_EQUAL(86400 , time->getSIScaling());
|
||||
|
||||
system.addDimension("L" , 0.3048);
|
||||
length = system.getDimension("L");
|
||||
system.addDimension("Length" , 0.3048);
|
||||
length = system.getDimension("Length");
|
||||
BOOST_CHECK_EQUAL(0.3048 , length->getSIScaling());
|
||||
}
|
||||
|
||||
@@ -104,13 +104,13 @@ BOOST_AUTO_TEST_CASE(UnitSystemAddDimensions) {
|
||||
BOOST_AUTO_TEST_CASE(UnitSystemParseInvalidThrows) {
|
||||
UnitSystem system("Metric");
|
||||
BOOST_CHECK_THROW( system.parse("//") , std::invalid_argument);
|
||||
BOOST_CHECK_THROW( system.parse("L * L / t") , std::invalid_argument);
|
||||
BOOST_CHECK_THROW( system.parse("Length * Length / Time") , std::invalid_argument);
|
||||
|
||||
system.addDimension("L" , 3.00 );
|
||||
system.addDimension("t" , 9.0 );
|
||||
system.addDimension("Length" , 3.00 );
|
||||
system.addDimension("Time" , 9.0 );
|
||||
|
||||
std::shared_ptr<const Dimension> volumePerTime = system.parse("L*L*L/t");
|
||||
BOOST_CHECK_EQUAL("L*L*L/t" , volumePerTime->getName() );
|
||||
std::shared_ptr<const Dimension> volumePerTime = system.parse("Length*Length*Length/Time");
|
||||
BOOST_CHECK_EQUAL("Length*Length*Length/Time" , volumePerTime->getName() );
|
||||
BOOST_CHECK_EQUAL(3.0 , volumePerTime->getSIScaling());
|
||||
}
|
||||
|
||||
@@ -118,11 +118,11 @@ BOOST_AUTO_TEST_CASE(UnitSystemParseInvalidThrows) {
|
||||
|
||||
void checkSystemHasRequiredDimensions(std::shared_ptr<const UnitSystem> system) {
|
||||
BOOST_CHECK( system->hasDimension("1"));
|
||||
BOOST_CHECK( system->hasDimension("L"));
|
||||
BOOST_CHECK( system->hasDimension("m"));
|
||||
BOOST_CHECK( system->hasDimension("t"));
|
||||
BOOST_CHECK( system->hasDimension("K"));
|
||||
BOOST_CHECK( system->hasDimension("P"));
|
||||
BOOST_CHECK( system->hasDimension("Length"));
|
||||
BOOST_CHECK( system->hasDimension("Mass"));
|
||||
BOOST_CHECK( system->hasDimension("Time"));
|
||||
BOOST_CHECK( system->hasDimension("Permeability"));
|
||||
BOOST_CHECK( system->hasDimension("Pressure"));
|
||||
}
|
||||
|
||||
|
||||
@@ -131,11 +131,11 @@ BOOST_AUTO_TEST_CASE(CreateMetricSystem) {
|
||||
std::shared_ptr<UnitSystem> system = std::shared_ptr<UnitSystem>( UnitSystem::newMETRIC() );
|
||||
checkSystemHasRequiredDimensions( system );
|
||||
|
||||
BOOST_CHECK_EQUAL( Metric::Length , system->getDimension("L")->getSIScaling() );
|
||||
BOOST_CHECK_EQUAL( Metric::Mass , system->getDimension("m")->getSIScaling() );
|
||||
BOOST_CHECK_EQUAL( Metric::Time , system->getDimension("t")->getSIScaling() );
|
||||
BOOST_CHECK_EQUAL( Metric::Permeability , system->getDimension("K")->getSIScaling() );
|
||||
BOOST_CHECK_EQUAL( Metric::Pressure , system->getDimension("P")->getSIScaling() );
|
||||
BOOST_CHECK_EQUAL( Metric::Length , system->getDimension("Length")->getSIScaling() );
|
||||
BOOST_CHECK_EQUAL( Metric::Mass , system->getDimension("Mass")->getSIScaling() );
|
||||
BOOST_CHECK_EQUAL( Metric::Time , system->getDimension("Time")->getSIScaling() );
|
||||
BOOST_CHECK_EQUAL( Metric::Permeability , system->getDimension("Permeability")->getSIScaling() );
|
||||
BOOST_CHECK_EQUAL( Metric::Pressure , system->getDimension("Pressure")->getSIScaling() );
|
||||
}
|
||||
|
||||
|
||||
@@ -144,21 +144,21 @@ BOOST_AUTO_TEST_CASE(CreateFieldSystem) {
|
||||
std::shared_ptr<UnitSystem> system = std::shared_ptr<UnitSystem>( UnitSystem::newFIELD() );
|
||||
checkSystemHasRequiredDimensions( system );
|
||||
|
||||
BOOST_CHECK_EQUAL( Field::Length , system->getDimension("L")->getSIScaling() );
|
||||
BOOST_CHECK_EQUAL( Field::Mass , system->getDimension("m")->getSIScaling() );
|
||||
BOOST_CHECK_EQUAL( Field::Time , system->getDimension("t")->getSIScaling() );
|
||||
BOOST_CHECK_EQUAL( Field::Permeability , system->getDimension("K")->getSIScaling() );
|
||||
BOOST_CHECK_EQUAL( Field::Pressure , system->getDimension("P")->getSIScaling() );
|
||||
BOOST_CHECK_EQUAL( Field::Length , system->getDimension("Length")->getSIScaling() );
|
||||
BOOST_CHECK_EQUAL( Field::Mass , system->getDimension("Mass")->getSIScaling() );
|
||||
BOOST_CHECK_EQUAL( Field::Time , system->getDimension("Time")->getSIScaling() );
|
||||
BOOST_CHECK_EQUAL( Field::Permeability , system->getDimension("Permeability")->getSIScaling() );
|
||||
BOOST_CHECK_EQUAL( Field::Pressure , system->getDimension("Pressure")->getSIScaling() );
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
BOOST_AUTO_TEST_CASE(DimensionEqual) {
|
||||
Dimension d1("L" , 1);
|
||||
Dimension d2("L" , 1);
|
||||
Dimension d3("t" , 1);
|
||||
Dimension d4("L" , 2);
|
||||
Dimension d1("Length" , 1);
|
||||
Dimension d2("Length" , 1);
|
||||
Dimension d3("Time" , 1);
|
||||
Dimension d4("Length" , 2);
|
||||
|
||||
BOOST_CHECK_EQUAL( true , d1.equal(d1) );
|
||||
BOOST_CHECK_EQUAL( true , d1.equal(d2) );
|
||||
|
||||
@@ -6,10 +6,10 @@
|
||||
{"name" : "K2" , "value_type" : "INT" },
|
||||
{"name" : "STATE" , "value_type" : "STRING" , "default" : "OPEN"},
|
||||
{"name" : "SAT_TABLE" , "value_type" : "INT" , "default" : 0},
|
||||
{"name" : "CF" , "value_type" : "FLOAT", "dimension" : "mu*FlowVolume/t*P"},
|
||||
{"name" : "DIAMETER" , "value_type" : "FLOAT", "dimension" : "L"},
|
||||
{"name" : "Kh" , "value_type" : "FLOAT", "dimension" : "K" , "default" : -1},
|
||||
{"name" : "CF" , "value_type" : "FLOAT", "dimension" : "Viscosity*LiquidVolume/Time*Pressure"},
|
||||
{"name" : "DIAMETER" , "value_type" : "FLOAT", "dimension" : "Length"},
|
||||
{"name" : "Kh" , "value_type" : "FLOAT", "dimension" : "Permeability" , "default" : -1},
|
||||
{"name" : "SKIN" , "value_type" : "FLOAT", "dimension" : "1" , "default" : 0},
|
||||
{"name" : "D_FACTOR" , "value_type" : "FLOAT", "dimension" : "1" },
|
||||
{"name" : "DIR" , "value_type" : "STRING" , "default" : "Z"},
|
||||
{"name" : "PR" , "value_type" : "FLOAT", "dimension" : "P" }]}
|
||||
{"name" : "PR" , "value_type" : "FLOAT", "dimension" : "Pressure" }]}
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"name" : "COORD", "data" : {"value_type" : "FLOAT", "dimension" : "L" }}
|
||||
{"name" : "COORD", "data" : {"value_type" : "FLOAT", "dimension" : "Length" }}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
{"name" : "DENSITY", "size" : {"keyword":"TABDIMS", "item":"NTPVT" }, "items" :
|
||||
[{"name": "OIL" , "value_type" : "FLOAT" , "default": 600 , "dimension" : "Rho"},
|
||||
{"name": "WATER" , "value_type" : "FLOAT" , "default": 999.014 , "dimension" : "Rho"},
|
||||
{"name": "GAS" , "value_type" : "FLOAT" , "default": 1 , "dimension" : "Rho"}]}
|
||||
[{"name": "OIL" , "value_type" : "FLOAT" , "default": 600 , "dimension" : "Density"},
|
||||
{"name": "WATER" , "value_type" : "FLOAT" , "default": 999.014 , "dimension" : "Density"},
|
||||
{"name": "GAS" , "value_type" : "FLOAT" , "default": 1 , "dimension" : "Density"}]}
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
{"name" : "DEPTHZ" , "data" : {"value_type" : "FLOAT" , "dimension" : "L"},
|
||||
{"name" : "DEPTHZ" , "data" : {"value_type" : "FLOAT" , "dimension" : "Length"},
|
||||
"comment" : "DEPTHZ is not documented in the Eclipse manual, but found in the SPE1 case"
|
||||
}
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"name":"DXV", "data" : {"value_type" : "FLOAT", "dimension":"L" }}
|
||||
{"name":"DXV", "data" : {"value_type" : "FLOAT", "dimension":"Length" }}
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"name":"DYV", "data" : {"value_type" : "FLOAT", "dimension":"L" }}
|
||||
{"name":"DYV", "data" : {"value_type" : "FLOAT", "dimension":"Length" }}
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"name":"DZV", "data" : {"value_type" : "FLOAT", "dimension":"L" }}
|
||||
{"name":"DZV", "data" : {"value_type" : "FLOAT", "dimension":"Length" }}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{"name" : "ENKRVD" , "size" : {"keyword" : "ENDSCALE" , "item" : "NUM_TABLES"},
|
||||
"items" : [
|
||||
{"name":"DATA", "value_type":"FLOAT", "size_type" : "ALL" , "dimension" : ["L","1","1","1","1","1","1","1"]}
|
||||
{"name":"DATA", "value_type":"FLOAT", "size_type" : "ALL" , "dimension" : ["Length","1","1","1","1","1","1","1"]}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{"name" : "ENPTVD" , "size" : {"keyword" : "ENDSCALE" , "item" : "NUM_TABLES"},
|
||||
"items" : [
|
||||
{"name":"DATA", "value_type":"FLOAT", "size_type" : "ALL" , "dimension" : ["L","1","1","1","1","1","1","1","1"]}
|
||||
{"name":"DATA", "value_type":"FLOAT", "size_type" : "ALL" , "dimension" : ["Length","1","1","1","1","1","1","1","1"]}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
{"name" : "EQUIL" , "size" : {"keyword":"EQLDIMS" , "item":"NTEQUL"},
|
||||
"description": "The EQUIL item is used when equilibrationg the model. The item should consist of one record for each PVT region",
|
||||
"items" :
|
||||
[{"name" : "DATUM_DEPTH" , "value_type" : "FLOAT" , "default" : 0.0 , "dimension" : "L"},
|
||||
{"name" : "DATUM_PRESSURE" , "value_type" : "FLOAT" , "dimension" : "P"} ,
|
||||
{"name" : "OWC" , "value_type" : "FLOAT" , "default" : 0.0 , "dimension" : "L",
|
||||
[{"name" : "DATUM_DEPTH" , "value_type" : "FLOAT" , "default" : 0.0 , "dimension" : "Length"},
|
||||
{"name" : "DATUM_PRESSURE" , "value_type" : "FLOAT" , "dimension" : "Pressure"} ,
|
||||
{"name" : "OWC" , "value_type" : "FLOAT" , "default" : 0.0 , "dimension" : "Length",
|
||||
"description" : "The OWC item is depth of the OIL Water contact. This should ..."} ,
|
||||
{"name" : "PC_OWC" , "value_type" : "FLOAT" , "default" : 0.0 , "dimension" : "P"} ,
|
||||
{"name" : "GOC" , "value_type" : "FLOAT" , "default" : 0.0 , "dimension" : "L"} ,
|
||||
{"name" : "PC_GOC" , "value_type" : "FLOAT" , "default" : 0.0 , "dimension" : "P"} ,
|
||||
{"name" : "PC_OWC" , "value_type" : "FLOAT" , "default" : 0.0 , "dimension" : "Pressure"} ,
|
||||
{"name" : "GOC" , "value_type" : "FLOAT" , "default" : 0.0 , "dimension" : "Length"} ,
|
||||
{"name" : "PC_GOC" , "value_type" : "FLOAT" , "default" : 0.0 , "dimension" : "Pressure"} ,
|
||||
{"name" : "BLACK_OIL_INIT" , "value_type" : "INT" , "default" : 0} ,
|
||||
{"name" : "BLACK_OIL_INIT_WG" , "value_type" : "INT" , "default" : 0} ,
|
||||
{"name" : "OIP_INIT" , "value_type" : "INT" , "default" : -5 , "comment":"The default is a state variable"}]}
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
{"name" : "GROUP" , "value_type" : "STRING" },
|
||||
{"name" : "PHASE" , "value_type" : "STRING"},
|
||||
{"name" : "CONTROL_MODE" , "value_type" : "STRING" , "default" : "NONE"},
|
||||
{"name" : "SURFACE_TARGET" , "value_type" : "FLOAT" , "default" : 0 , "dimension" : "FlowVolume/t"},
|
||||
{"name" : "RESV_TARGET" , "value_type" : "FLOAT" , "default" : 0 , "dimension" : "FlowVolume/t"},
|
||||
{"name" : "SURFACE_TARGET" , "value_type" : "FLOAT" , "default" : 0 , "dimension" : "ContextDependent"},
|
||||
{"name" : "RESV_TARGET" , "value_type" : "FLOAT" , "default" : 0 , "dimension" : "ContextDependent"},
|
||||
{"name" : "REINJ_TARGET" , "value_type" : "FLOAT" , "default" : 0, "dimension":"1"},
|
||||
{"name" : "VOIDAGE_TARGET" , "value_type" : "FLOAT" , "default" : 0, "dimension":"1"},
|
||||
{"name" : "FREE" , "value_type" : "STRING" , "default" : "YES"},
|
||||
@@ -11,5 +11,5 @@
|
||||
{"name" : "GUIDE_DEF" , "value_type" : "STRING"},
|
||||
{"name" : "REINJECT_GROUP" , "value_type" : "STRING"},
|
||||
{"name" : "VOIDAGE_GROUP" , "value_type" : "STRING"},
|
||||
{"name" : "WETGAS_TARGET", "value_type" : "FLOAT" , "dimension" : "FlowVolume/t"}
|
||||
{"name" : "WETGAS_TARGET", "value_type" : "FLOAT" , "dimension" : "GasVolume/Time"}
|
||||
]}
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
{"name" : "GCONPROD" , "items" : [
|
||||
{"name" : "GROUP" , "value_type" : "STRING" },
|
||||
{"name" : "CONTROL_MODE" , "value_type" : "STRING" , "default" : "NONE"},
|
||||
{"name" : "OIL_TARGET" , "value_type" : "FLOAT" , "dimension" : "FlowVolume/t"},
|
||||
{"name" : "WATER_TARGET" , "value_type" : "FLOAT" , "dimension" : "FlowVolume/t"},
|
||||
{"name" : "GAS_TARGET" , "value_type" : "FLOAT" , "dimension" : "FlowVolume/t"},
|
||||
{"name" : "LIQUID_TARGET" , "value_type" : "FLOAT" , "dimension" : "FlowVolume/t"},
|
||||
{"name" : "OIL_TARGET" , "value_type" : "FLOAT" , "dimension" : "LiquidVolume/Time"},
|
||||
{"name" : "WATER_TARGET" , "value_type" : "FLOAT" , "dimension" : "LiquidVolume/Time"},
|
||||
{"name" : "GAS_TARGET" , "value_type" : "FLOAT" , "dimension" : "GasVolume/Time"},
|
||||
{"name" : "LIQUID_TARGET" , "value_type" : "FLOAT" , "dimension" : "LiquidVolume/Time"},
|
||||
{"name" : "EXCEED_PROC" , "value_type" : "STRING" , "default" : "NONE"},
|
||||
{"name" : "RESPOND_TO_PARENT" , "value_type" : "STRING" , "default" : "YES"},
|
||||
{"name" : "GUIDE_RATE" , "value_type" : "FLOAT"},
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
{"name" : "MAPAXES" , "size" : 1 , "items" : [
|
||||
{"name" : "X1" , "value_type" : "FLOAT", "dimension" : "L" },
|
||||
{"name" : "Y1" , "value_type" : "FLOAT", "dimension" : "L" },
|
||||
{"name" : "X2" , "value_type" : "FLOAT", "dimension" : "L" },
|
||||
{"name" : "Y2" , "value_type" : "FLOAT", "dimension" : "L" },
|
||||
{"name" : "X3" , "value_type" : "FLOAT", "dimension" : "L" },
|
||||
{"name" : "Y3" , "value_type" : "FLOAT", "dimension" : "L" }]}
|
||||
{"name" : "X1" , "value_type" : "FLOAT", "dimension" : "Length" },
|
||||
{"name" : "Y1" , "value_type" : "FLOAT", "dimension" : "Length" },
|
||||
{"name" : "X2" , "value_type" : "FLOAT", "dimension" : "Length" },
|
||||
{"name" : "Y2" , "value_type" : "FLOAT", "dimension" : "Length" },
|
||||
{"name" : "X3" , "value_type" : "FLOAT", "dimension" : "Length" },
|
||||
{"name" : "Y3" , "value_type" : "FLOAT", "dimension" : "Length" }]}
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"name" : "PERMX" , "data" : {"value_type" : "FLOAT" , "dimension" : "K"}}
|
||||
{"name" : "PERMX" , "data" : {"value_type" : "FLOAT" , "dimension" : "Permeability"}}
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"name" : "PERMXY" , "data" : {"value_type" : "FLOAT" , "dimension" : "K"}}
|
||||
{"name" : "PERMXY" , "data" : {"value_type" : "FLOAT" , "dimension" : "Permeability"}}
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"name" : "PERMY" , "data" : {"value_type" : "FLOAT" , "default" : 0 , "dimension" : "K"}}
|
||||
{"name" : "PERMY" , "data" : {"value_type" : "FLOAT" , "default" : 0 , "dimension" : "Permeability"}}
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"name" : "PERMYX" , "data" : {"value_type" : "FLOAT" , "dimension" : "K"}}
|
||||
{"name" : "PERMYX" , "data" : {"value_type" : "FLOAT" , "dimension" : "Permeability"}}
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"name" : "PERMYZ" , "data" : {"value_type" : "FLOAT" , "dimension" : "K"}}
|
||||
{"name" : "PERMYZ" , "data" : {"value_type" : "FLOAT" , "dimension" : "Permeability"}}
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"name" : "PERMZ" , "data" : {"value_type" : "FLOAT" , "default" : 0 , "dimension" : "K"}}
|
||||
{"name" : "PERMZ" , "data" : {"value_type" : "FLOAT" , "default" : 0 , "dimension" : "Permeability"}}
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"name" : "PERMZX" , "data" : {"value_type" : "FLOAT" , "dimension" : "K"}}
|
||||
{"name" : "PERMZX" , "data" : {"value_type" : "FLOAT" , "dimension" : "Permeability"}}
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"name" : "PRESSURE" , "data" : {"value_type" : "FLOAT", "dimension" : "P"}}
|
||||
{"name" : "PRESSURE" , "data" : {"value_type" : "FLOAT", "dimension" : "Pressure"}}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
{"name" : "PVDG" , "size" : {"keyword" : "TABDIMS" , "item" : "NTPVT"} , "items" : [
|
||||
{"name" : "data" , "size_type" : "ALL" , "value_type" : "FLOAT" , "dimension" : ["P","1/Rs","mu"]}]}
|
||||
{"name" : "data" , "size_type" : "ALL" , "value_type" : "FLOAT" , "dimension" : ["Pressure","OilDissolutionFactor","Viscosity"]}]}
|
||||
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{"name" : "PVTG" , "num_tables" : {"keyword":"TABDIMS" , "item":"NTPVT"},
|
||||
"items" : [
|
||||
{"name":"GAS_PRESSURE", "value_type" : "FLOAT", "dimension":"P" },
|
||||
{"name":"DATA", "size_type" : "ALL" , "value_type":"FLOAT" , "dimension" : ["1/Rs","1","mu"]}
|
||||
{"name":"GAS_PRESSURE", "value_type" : "FLOAT", "dimension":"Pressure" },
|
||||
{"name":"DATA", "size_type" : "ALL" , "value_type":"FLOAT" , "dimension" : ["OilDissolutionFactor","1","Viscosity"]}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{"name" : "PVTO" , "num_tables" : {"keyword" : "TABDIMS" , "item" : "NTPVT"},
|
||||
"items" : [
|
||||
{"name":"RS", "value_type" : "FLOAT", "dimension":"Rs" },
|
||||
{"name":"DATA", "value_type":"FLOAT", "size_type" : "ALL" , "dimension" : ["P","1","mu"]}
|
||||
{"name":"RS", "value_type" : "FLOAT", "dimension":"GasDissolutionFactor" },
|
||||
{"name":"DATA", "value_type":"FLOAT", "size_type" : "ALL" , "dimension" : ["Pressure","1","Viscosity"]}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{"name" : "PVTW" , "size" : {"keyword":"TABDIMS" , "item":"NTPVT"}, "items":
|
||||
[ {"name":"P_REF", "value_type" : "FLOAT", "dimension":"P" },
|
||||
[ {"name":"P_REF", "value_type" : "FLOAT", "dimension":"Pressure" },
|
||||
{"name":"WATER_VOL_FACTOR", "value_type" : "FLOAT", "default" : 1.0,"dimension":"1"},
|
||||
{"name":"WATER_COMPRESSIBILITY", "value_type" : "FLOAT", "default" : 0.00004, "dimension":"1/P"},
|
||||
{"name":"WATER_VISCOSITY", "value_type" : "FLOAT", "default" : 0.5, "dimension":"mu", "comment" : "Default is 0.3 in Eclipse300"},
|
||||
{"name":"WATER_VISCOSIBILITY", "value_type" : "FLOAT", "default" : 0.0, "dimension":"1/P"}
|
||||
{"name":"WATER_COMPRESSIBILITY", "value_type" : "FLOAT", "default" : 0.00004, "dimension":"1/Pressure"},
|
||||
{"name":"WATER_VISCOSITY", "value_type" : "FLOAT", "default" : 0.5, "dimension":"Viscosity", "comment" : "Default is 0.3 in Eclipse300"},
|
||||
{"name":"WATER_VISCOSIBILITY", "value_type" : "FLOAT", "default" : 0.0, "dimension":"1/Pressure"}
|
||||
]}
|
||||
|
||||
|
||||
@@ -1,3 +1,3 @@
|
||||
{"name" : "ROCK" , "size" : {"keyword":"TABDIMS" , "item":"NTPVT"}, "items" : [
|
||||
{"name" : "PREF" , "value_type" : "FLOAT" , "default" : 1.0132 , "dimension" : "P"},
|
||||
{"name" : "COMPRESSIBILITY" , "value_type" : "FLOAT" , "default" : 0 , "dimension" : "1/P"}]}
|
||||
{"name" : "PREF" , "value_type" : "FLOAT" , "default" : 1.0132 , "dimension" : "Pressure"},
|
||||
{"name" : "COMPRESSIBILITY" , "value_type" : "FLOAT" , "default" : 0 , "dimension" : "1/Pressure"}]}
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"name" : "RS" , "data" : {"value_type" : "FLOAT", "dimension" : "Rs"}}
|
||||
{"name" : "RS" , "data" : {"value_type" : "FLOAT", "dimension" : "GasDissolutionFactor"}}
|
||||
|
||||
@@ -2,6 +2,6 @@
|
||||
"items" : [{"name" : "table" ,
|
||||
"value_type" : "FLOAT" ,
|
||||
"size_type" : "ALL",
|
||||
"dimension" : ["L" , "Rs"]}]}
|
||||
"dimension" : ["Length" , "GasDissolutionFactor"]}]}
|
||||
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{"name" : "SGOF" , "size" : {"keyword" : "TABDIMS" , "item" : "NTSFUN"},
|
||||
"items" : [
|
||||
{"name":"table", "value_type":"FLOAT", "size_type" : "ALL", "dimension" : ["1","1","1","P"]}
|
||||
{"name":"table", "value_type":"FLOAT", "size_type" : "ALL", "dimension" : ["1","1","1","Pressure"]}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{"name" : "SWOF" , "size" : {"keyword" : "TABDIMS" , "item" : "NTSFUN"},
|
||||
"items" : [
|
||||
{"name":"DATA", "value_type":"FLOAT", "size_type" : "ALL" , "dimension" : ["1","1","1","P"]}
|
||||
{"name":"DATA", "value_type":"FLOAT", "size_type" : "ALL" , "dimension" : ["1","1","1","Pressure"]}
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,2 +1,2 @@
|
||||
{"name" : "TVDP*" , "size" : {"keyword":"EQLDIMS" , "item":"NTTRVD"}, "items" :
|
||||
[ {"name" : "table" , "value_type" : "FLOAT" , "size_type" : "ALL" , "dimension" : ["L" , "1/FlowVolume"]}]}
|
||||
[ {"name" : "table" , "value_type" : "FLOAT" , "size_type" : "ALL" , "dimension" : ["Length" , "ContextDependent"]}]}
|
||||
|
||||
@@ -2,11 +2,11 @@
|
||||
[{"name" : "WELL" , "value_type" : "STRING"},
|
||||
{"name" : "STATUS" , "value_type" : "STRING" , "default" : "OPEN"},
|
||||
{"name" : "CMODE" , "value_type" : "STRING"},
|
||||
{"name" : "ORAT" , "value_type" : "FLOAT", "default" : 0.0, "dimension" : "FlowVolume/t"},
|
||||
{"name" : "WRAT" , "value_type" : "FLOAT" , "default" : 0.0, "dimension" : "FlowVolume/t"},
|
||||
{"name" : "GRAT" , "value_type" : "FLOAT" , "default" : 0.0, "dimension" : "FlowVolume/t"},
|
||||
{"name" : "ORAT" , "value_type" : "FLOAT", "default" : 0.0, "dimension" : "LiquidVolume/Time"},
|
||||
{"name" : "WRAT" , "value_type" : "FLOAT" , "default" : 0.0, "dimension" : "LiquidVolume/Time"},
|
||||
{"name" : "GRAT" , "value_type" : "FLOAT" , "default" : 0.0, "dimension" : "GasVolume/Time"},
|
||||
{"name" : "VFPTable" , "value_type" : "INT" , "default" : 0.0 , "comment":"The default is a state variable"},
|
||||
{"name" : "Lift" , "value_type" : "FLOAT" , "default" : 0.0 , "comment":"The default is a state variable"},
|
||||
{"name" : "THP" , "value_type" : "FLOAT" , "default" : 0.0 , "dimension" : "P"},
|
||||
{"name" : "BHP" , "value_type" : "FLOAT" , "default" : 0.0 ,"dimension" : "P"},
|
||||
{"name" : "NGLRAT" , "value_type" : "FLOAT" , "default" : 0.0 ,"dimension" : "FlowVolume/t"}]}
|
||||
{"name" : "THP" , "value_type" : "FLOAT" , "default" : 0.0 , "dimension" : "Pressure"},
|
||||
{"name" : "BHP" , "value_type" : "FLOAT" , "default" : 0.0 ,"dimension" : "Pressure"},
|
||||
{"name" : "NGLRAT" , "value_type" : "FLOAT" , "default" : 0.0 ,"dimension" : "LiquidVolume/Time"}]}
|
||||
|
||||
@@ -3,10 +3,10 @@
|
||||
{"name" : "TYPE" , "value_type" : "STRING" },
|
||||
{"name" : "STATUS" , "value_type" : "STRING" , "default" : "OPEN"},
|
||||
{"name" : "CMODE" , "value_type" : "STRING" },
|
||||
{"name" : "RATE" , "value_type" : "FLOAT" , "dimension" : "FlowVolume/t"},
|
||||
{"name" : "RESV" , "value_type" : "FLOAT" , "dimension" : "FlowVolume/t"},
|
||||
{"name" : "BHP" , "value_type" : "FLOAT" , "dimension" : "P" , "default" : 6891},
|
||||
{"name" : "THP" , "value_type" : "FLOAT" , "dimension" : "P"},
|
||||
{"name" : "RATE" , "value_type" : "FLOAT" , "dimension" : "ContextDependent"},
|
||||
{"name" : "RESV" , "value_type" : "FLOAT" , "dimension" : "ContextDependent"},
|
||||
{"name" : "BHP" , "value_type" : "FLOAT" , "dimension" : "Pressure" , "default" : 6891},
|
||||
{"name" : "THP" , "value_type" : "FLOAT" , "dimension" : "Pressure"},
|
||||
{"name" : "VFP_TABLE" , "value_type" : "INT" , "default" : 0},
|
||||
{"name" : "VAPOIL_C" , "value_type" : "FLOAT" , "default" : 0},
|
||||
{"name" : "GAS_STEAM_RATIO" , "value_type" : "FLOAT" , "default" : 0},
|
||||
|
||||
@@ -2,13 +2,13 @@
|
||||
{"name" : "WELL" , "value_type" : "STRING" },
|
||||
{"name" : "TYPE" , "value_type" : "STRING" },
|
||||
{"name" : "STATUS" , "value_type" : "STRING" , "default" : "OPEN"},
|
||||
{"name" : "RATE" , "value_type" : "FLOAT" , "dimension" : "FlowVolume/t"},
|
||||
{"name" : "BHP" , "value_type" : "FLOAT" , "dimension" : "P"},
|
||||
{"name" : "THP" , "value_type" : "FLOAT" , "dimension" : "P"},
|
||||
{"name" : "RATE" , "value_type" : "FLOAT" , "dimension" : "ContextDependent"},
|
||||
{"name" : "BHP" , "value_type" : "FLOAT" , "dimension" : "Pressure"},
|
||||
{"name" : "THP" , "value_type" : "FLOAT" , "dimension" : "Pressure"},
|
||||
{"name" : "VFP_TABLE" , "value_type" : "INT" , "default" : 0},
|
||||
{"name" : "VAPOIL_C" , "value_type" : "FLOAT" , "default" : 0},
|
||||
{"name" : "SURFACE_OIL_FRACTION" , "value_type" : "FLOAT" , "default" : 0},
|
||||
{"name" : "SURFACE_WATER_FRACTION" , "value_type" : "FLOAT" , "default" : 0},
|
||||
{"name" : "SURFACE_GAS_FRACTION" , "value_type" : "FLOAT" , "default" : 0},
|
||||
{"name" : "CMODE" , "value_type" : "STRING" }
|
||||
]}
|
||||
]}
|
||||
|
||||
@@ -2,13 +2,13 @@
|
||||
[{"name" : "WELL" , "value_type" : "STRING"},
|
||||
{"name" : "STATUS" , "value_type" : "STRING" , "default" : "OPEN"},
|
||||
{"name" : "CMODE" , "value_type" : "STRING"},
|
||||
{"name" : "ORAT" , "value_type" : "FLOAT", "default" : 0.0 , "dimension" : "FlowVolume/t"},
|
||||
{"name" : "WRAT" , "value_type" : "FLOAT" , "default" : 0.0 , "dimension" : "FlowVolume/t"},
|
||||
{"name" : "GRAT" , "value_type" : "FLOAT" , "default" : 0.0 , "dimension" : "FlowVolume/t"},
|
||||
{"name" : "LRAT" , "value_type" : "FLOAT" , "default" : 0.0 , "dimension" : "FlowVolume/t"},
|
||||
{"name" : "RESV" , "value_type" : "FLOAT" , "default" : 0.0 , "dimension" : "FlowVolume/t"},
|
||||
{"name" : "BHP" , "value_type" : "FLOAT" , "default" : 0.0 , "dimension" : "P"},
|
||||
{"name" : "THP" , "value_type" : "FLOAT" , "default" : 0.0 , "dimension" : "P"},
|
||||
{"name" : "ORAT" , "value_type" : "FLOAT", "default" : 0.0 , "dimension" : "LiquidVolume/Time"},
|
||||
{"name" : "WRAT" , "value_type" : "FLOAT" , "default" : 0.0 , "dimension" : "LiquidVolume/Time"},
|
||||
{"name" : "GRAT" , "value_type" : "FLOAT" , "default" : 0.0 , "dimension" : "GasVolume/Time"},
|
||||
{"name" : "LRAT" , "value_type" : "FLOAT" , "default" : 0.0 , "dimension" : "LiquidVolume/Time"},
|
||||
{"name" : "RESV" , "value_type" : "FLOAT" , "default" : 0.0 , "dimension" : "LiquidVolume/Time"},
|
||||
{"name" : "BHP" , "value_type" : "FLOAT" , "default" : 0.0 , "dimension" : "Pressure"},
|
||||
{"name" : "THP" , "value_type" : "FLOAT" , "default" : 0.0 , "dimension" : "Pressure"},
|
||||
{"name" : "VFPTable" , "value_type" : "INT" , "default" : 0.0 , "comment":"The default is a state variable"},
|
||||
{"name" : "ALQ" , "value_type" : "FLOAT" , "default" : 0.0 , "comment":"The default is a state variable"},
|
||||
{"name" : "E300_ITEM13" , "value_type" : "FLOAT"},
|
||||
|
||||
@@ -3,9 +3,9 @@
|
||||
{"name" : "GROUP" , "value_type" : "STRING" },
|
||||
{"name" : "HEAD_I" , "value_type" : "INT"},
|
||||
{"name" : "HEAD_J" , "value_type" : "INT"},
|
||||
{"name" : "REF_DEPTH" , "value_type" : "FLOAT", "dimension" : "L"},
|
||||
{"name" : "REF_DEPTH" , "value_type" : "FLOAT", "dimension" : "Length"},
|
||||
{"name" : "PHASE" , "value_type" : "STRING"},
|
||||
{"name" : "D_RADIUS" , "value_type" : "FLOAT" , "default" : 0, "dimension" : "L"},
|
||||
{"name" : "D_RADIUS" , "value_type" : "FLOAT" , "default" : 0, "dimension" : "Length"},
|
||||
{"name" : "INFLOW_EQ" , "value_type" : "STRING" , "default" : "STD"},
|
||||
{"name" : "AUTO_SHUTIN" , "value_type" : "STRING" , "default" : "SHUT"},
|
||||
{"name" : "CROSSFLOW" , "value_type" : "STRING" , "default" : "YES"},
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"name" : "ZCORN", "data" : {"value_type" : "FLOAT", "dimension" : "L" }}
|
||||
{"name" : "ZCORN", "data" : {"value_type" : "FLOAT", "dimension" : "Length" }}
|
||||
|
||||
Reference in New Issue
Block a user