Fix OilVaporizationProperties to have only one constructor

This commit is contained in:
Fredrik Gundersen
2015-10-08 11:17:24 +02:00
parent 32914e2ed4
commit 80a77136cf
6 changed files with 79 additions and 47 deletions

View File

@@ -1,4 +1,4 @@
#include "OilVaporizationProperties.hpp"
#include <opm/parser/eclipse/EclipseState/Schedule/OilVaporizationProperties.hpp>
namespace Opm {
@@ -7,12 +7,32 @@ namespace Opm {
}
double OilVaporizationProperties::getMaximum() const{
return m_maximum;
double OilVaporizationProperties::getMaxDRVDT() const{
if (m_type == Opm::OilVaporizationEnum::DRVDT){
return m_maxDRVDT;
}else{
throw std::logic_error("Only valid if type is DRVDT");
}
}
std::string OilVaporizationProperties::getOption() const{
return m_option;
double OilVaporizationProperties::getMaxDRSDT() const{
if (m_type == Opm::OilVaporizationEnum::DRSDT){
return m_maxDRSDT;
}else{
throw std::logic_error("Only valid if type is DRSDT");
}
}
const std::string OilVaporizationProperties::getOption() const{
if (m_type == Opm::OilVaporizationEnum::DRSDT){
if (m_maxDRSDT_allCells){
return std::string("ALL");
}else{
return std::string("FREE");
}
}else{
throw std::logic_error("Only valid if type is DRSDT");
}
}
Opm::OilVaporizationEnum OilVaporizationProperties::getType() const{
@@ -20,42 +40,50 @@ namespace Opm {
}
double OilVaporizationProperties::getVap1() const{
return m_vap1;
if (m_type == Opm::OilVaporizationEnum::VAPPARS){
return m_vap1;
}else{
throw std::logic_error("Only valid if type is VAPPARS");
}
}
double OilVaporizationProperties::getVap2() const{
return m_vap2;
if (m_type == Opm::OilVaporizationEnum::VAPPARS){
return m_vap2;
}else{
throw std::logic_error("Only valid if type is VAPPARS");
}
}
OilVaporizationPropertiesPtr OilVaporizationProperties::createOilVaporizationPropertiesDRSDT(double maximum, std::string option){
return std::shared_ptr<OilVaporizationProperties>(new OilVaporizationProperties(Opm::OilVaporizationEnum::DRSDT, maximum, option));
auto ovp = OilVaporizationPropertiesPtr(new OilVaporizationProperties());
ovp->m_type = Opm::OilVaporizationEnum::DRSDT;
ovp->m_maxDRSDT = maximum;
if (option == "ALL"){
ovp->m_maxDRSDT_allCells = true;
}else if (option == "FREE") {
ovp->m_maxDRSDT_allCells = false;
}else{
throw std::invalid_argument("Only ALL or FREE is allowed as option string");
}
return ovp;
}
OilVaporizationPropertiesPtr OilVaporizationProperties::createOilVaporizationPropertiesDRVDT(double maximum){
return std::shared_ptr<OilVaporizationProperties>(new OilVaporizationProperties(Opm::OilVaporizationEnum::DRVDT, maximum));
auto ovp = OilVaporizationPropertiesPtr(new OilVaporizationProperties());
ovp->m_type = Opm::OilVaporizationEnum::DRVDT;
ovp->m_maxDRVDT = maximum;
return ovp;
}
OilVaporizationPropertiesPtr OilVaporizationProperties::createOilVaporizationPropertiesVAPPARS(double vap1, double vap2){
return std::shared_ptr<OilVaporizationProperties>(new OilVaporizationProperties(Opm::OilVaporizationEnum::VAPPARS, vap1, vap2));
}
auto ovp = OilVaporizationPropertiesPtr(new OilVaporizationProperties());
ovp->m_type = Opm::OilVaporizationEnum::VAPPARS;
ovp->m_vap1 = vap1;
ovp->m_vap2 = vap2;
return ovp;
OilVaporizationProperties::OilVaporizationProperties(Opm::OilVaporizationEnum type, double maximum, std::string option){
m_type = type;
m_maximum = maximum;
m_option = option;
}
OilVaporizationProperties::OilVaporizationProperties(Opm::OilVaporizationEnum type, double maximum){
m_type = type;
m_maximum = maximum;
}
OilVaporizationProperties::OilVaporizationProperties(Opm::OilVaporizationEnum type, double vap1, double vap2){
m_type = type;
m_vap1 = vap1;
m_vap2 = vap2;
}
}

View File

@@ -7,31 +7,35 @@
namespace Opm
{
/*
* The OilVaporizationProperties class
* This classe is used to store the values from {VAPPARS, DRSDT, DRVDT} the behavior of the keywords are mutal exclusive.
* Any one of the three keywords {VAPPARS, DRSDT, DRVDT} will cancel previous settings of the other keywords.
* Ask for type first and the ask for the correct values for this type, asking for values not valid for the current type will throw a logic exception.
*/
class OilVaporizationProperties
{
public:
OilVaporizationProperties();
static std::shared_ptr<OilVaporizationProperties> createOilVaporizationPropertiesDRSDT(double maximum, std::string option);
static std::shared_ptr<OilVaporizationProperties> createOilVaporizationPropertiesDRVDT(double maximum);
static std::shared_ptr<OilVaporizationProperties> createOilVaporizationPropertiesDRSDT(double maxDRSDT, std::string option);
static std::shared_ptr<OilVaporizationProperties> createOilVaporizationPropertiesDRVDT(double maxDRVDT);
static std::shared_ptr<OilVaporizationProperties> createOilVaporizationPropertiesVAPPARS(double vap1, double vap2);
Opm::OilVaporizationEnum getType() const;
double getVap1() const;
double getVap2() const;
double getMaximum() const;
std::string getOption() const;
double getMaxDRSDT() const;
double getMaxDRVDT() const;
const std::string getOption() const;
private:
OilVaporizationProperties();
Opm::OilVaporizationEnum m_type;
double m_maximum;
double m_vap1;
double m_vap2;
std::string m_option;
OilVaporizationProperties(Opm::OilVaporizationEnum type, double maximum, std::string option);
OilVaporizationProperties(Opm::OilVaporizationEnum type, double maximum);
OilVaporizationProperties(Opm::OilVaporizationEnum type, double vap1, double vap2);
double m_maxDRSDT;
double m_maxDRVDT;
bool m_maxDRSDT_allCells;
};
typedef std::shared_ptr<OilVaporizationProperties> OilVaporizationPropertiesPtr;
typedef std::shared_ptr<const OilVaporizationProperties> OilVaporizationPropertiesConstPtr;

View File

@@ -59,7 +59,7 @@ namespace Opm {
}
void Schedule::initOilVaporization(TimeMapConstPtr timeMap) {
m_oilvaporizationproperties.reset(new DynamicState<OilVaporizationPropertiesPtr>(timeMap, OilVaporizationPropertiesPtr(new OilVaporizationProperties())));
m_oilvaporizationproperties.reset(new DynamicState<OilVaporizationPropertiesPtr>(timeMap, OilVaporizationPropertiesPtr()));
}
void Schedule::initRootGroupTreeNode(TimeMapConstPtr timeMap) {
@@ -324,7 +324,7 @@ namespace Opm {
void Schedule::handleDRVDT(DeckKeywordConstPtr keyword, size_t currentStep){
for (size_t recordNr = 0; recordNr < keyword->size(); recordNr++) {
DeckRecordConstPtr record = keyword->getRecord(recordNr);
double max = record->getItem("DRVDT_MAX")->getRawDouble(0);
double max = record->getItem("DRVDT_MAX")->getSIDouble(0);
OilVaporizationPropertiesPtr drvdt = OilVaporizationProperties::createOilVaporizationPropertiesDRVDT(max);
setOilVaporizationProperties(drvdt, currentStep);
@@ -335,7 +335,7 @@ namespace Opm {
void Schedule::handleDRSDT(DeckKeywordConstPtr keyword, size_t currentStep){
for (size_t recordNr = 0; recordNr < keyword->size(); recordNr++) {
DeckRecordConstPtr record = keyword->getRecord(recordNr);
double max = record->getItem("DRSDT_MAX")->getRawDouble(0);
double max = record->getItem("DRSDT_MAX")->getSIDouble(0);
std::string option = record->getItem("Option")->getString(0);
OilVaporizationPropertiesPtr drsdt = OilVaporizationProperties::createOilVaporizationPropertiesDRSDT(max, option);
setOilVaporizationProperties(drsdt, currentStep);

View File

@@ -1207,8 +1207,8 @@ BOOST_AUTO_TEST_CASE(createDeckWithDRSDTthenDRVDT) {
size_t currentStep = 2;
BOOST_CHECK_EQUAL(schedule.hasOilVaporizationProperties(), true);
OilVaporizationPropertiesConstPtr ovap = schedule.getOilVaporizationProperties(currentStep);
double value = ovap->getMaximum();
BOOST_CHECK_EQUAL(0.100, value);
double value = ovap->getMaxDRVDT();
BOOST_CHECK_EQUAL(1.1574074074074074e-06, value);
BOOST_CHECK_EQUAL(ovap->getType(), Opm::OilVaporizationEnum::DRVDT);
}

View File

@@ -1,4 +1,4 @@
{"name" : "DRSDT", "sections" : ["SCHEDULE"], "size" : 1, "items" :
[{"name" : "DRSDT_MAX" , "value_type" : "DOUBLE"},
[{"name" : "DRSDT_MAX" , "value_type" : "DOUBLE", "dimension" : "GasDissolutionFactor/Time"},
{"name" : "Option" , "value_type" : "STRING", "default" : "ALL"}]
}

View File

@@ -1,3 +1,3 @@
{"name" : "DRVDT", "sections" : ["SCHEDULE"], "size" : 1, "items" :
[{"name" : "DRVDT_MAX" , "value_type" : "DOUBLE"}]
[{"name" : "DRVDT_MAX" , "value_type" : "DOUBLE", "dimension" : "OilDissolutionFactor/Time"}]
}