mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
Fixed a small bug in reading of WCONPROD
This commit is contained in:
parent
f1cc0d56e8
commit
246af80ee8
@ -24,6 +24,10 @@ namespace Opm
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const WellsGroupInterface* WellsGroupInterface::getParent() const
|
||||||
|
{
|
||||||
|
return parent_;
|
||||||
|
}
|
||||||
const std::string& WellsGroupInterface::name()
|
const std::string& WellsGroupInterface::name()
|
||||||
{
|
{
|
||||||
return name_;
|
return name_;
|
||||||
@ -305,6 +309,7 @@ namespace Opm
|
|||||||
ProductionSpecification production_specification;
|
ProductionSpecification production_specification;
|
||||||
if (deck.hasField("WCONPROD")) {
|
if (deck.hasField("WCONPROD")) {
|
||||||
WCONPROD wconprod = deck.getWCONPROD();
|
WCONPROD wconprod = deck.getWCONPROD();
|
||||||
|
std::cout << wconprod.wconprod.size() << std::endl;
|
||||||
for (size_t i = 0; i < wconprod.wconprod.size(); i++) {
|
for (size_t i = 0; i < wconprod.wconprod.size(); i++) {
|
||||||
if (wconprod.wconprod[i].well_ == name) {
|
if (wconprod.wconprod[i].well_ == name) {
|
||||||
WconprodLine line = wconprod.wconprod[i];
|
WconprodLine line = wconprod.wconprod[i];
|
||||||
@ -316,7 +321,6 @@ namespace Opm
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return_value.reset(new WellNode(name, production_specification, injection_specification));
|
return_value.reset(new WellNode(name, production_specification, injection_specification));
|
||||||
} else {
|
} else {
|
||||||
InjectionSpecification injection_specification;
|
InjectionSpecification injection_specification;
|
||||||
|
@ -42,6 +42,7 @@ namespace Opm
|
|||||||
virtual WellsGroupInterface* findGroup(std::string name_of_node) = 0;
|
virtual WellsGroupInterface* findGroup(std::string name_of_node) = 0;
|
||||||
|
|
||||||
void setParent(WellsGroupInterface* parent);
|
void setParent(WellsGroupInterface* parent);
|
||||||
|
const WellsGroupInterface* getParent() const;
|
||||||
|
|
||||||
virtual void calculateGuideRates() = 0;
|
virtual void calculateGuideRates() = 0;
|
||||||
protected:
|
protected:
|
||||||
|
@ -479,6 +479,69 @@ namespace Opm
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
if (deck.hasField("GRUPTREE")) {
|
||||||
|
std::cout << "Found gruptree" << std::endl;
|
||||||
|
const GRUPTREE& gruptree = deck.getGRUPTREE();
|
||||||
|
|
||||||
|
std::map<std::string, std::string>::const_iterator it = gruptree.tree.begin();
|
||||||
|
for( ; it != gruptree.tree.end(); ++it) {
|
||||||
|
well_collection_.addChild(it->first, it->second, deck);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (size_t i = 0; i < welspecs.welspecs.size(); ++i) {
|
||||||
|
WelspecsLine line = welspecs.welspecs[i];
|
||||||
|
well_collection_.addChild(line.name_, line.group_, deck);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// Set the guide rates:
|
||||||
|
if(deck.hasField("WGRUPCON")) {
|
||||||
|
std::cout << "Found Wgrupcon" << std::endl;
|
||||||
|
WGRUPCON wgrupcon = deck.getWGRUPCON();
|
||||||
|
const std::vector<WgrupconLine>& lines = wgrupcon.wgrupcon;
|
||||||
|
std::cout << well_collection_.getLeafNodes().size() << std::endl;
|
||||||
|
for(size_t i = 0; i < lines.size(); i++) {
|
||||||
|
std::string name = lines[i].well_;
|
||||||
|
int index = well_names_to_index[name];
|
||||||
|
ASSERT(well_collection_.getLeafNodes()[index]->name() == name);
|
||||||
|
well_collection_.getLeafNodes()[index]->prodSpec().guide_rate_ = lines[i].guide_rate_;
|
||||||
|
well_collection_.getLeafNodes()[index]->prodSpec().guide_rate_type_
|
||||||
|
= lines[i].phase_ == "OIL" ? ProductionSpecification::OIL : ProductionSpecification::RAT;
|
||||||
|
}
|
||||||
|
|
||||||
|
well_collection_.calculateGuideRates();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Apply guide rates:
|
||||||
|
for(size_t i = 0; i < well_data.size(); i++) {
|
||||||
|
if(well_collection_.getLeafNodes()[i]->prodSpec().control_mode_ == ProductionSpecification::GRUP)
|
||||||
|
{
|
||||||
|
|
||||||
|
if(well_collection_.getLeafNodes()[i]->prodSpec().guide_rate_type_ == ProductionSpecification::OIL) {
|
||||||
|
well_data[i].control = RATE;
|
||||||
|
|
||||||
|
double parent_oil_rate = well_collection_.getLeafNodes()[i]->getParent()->prodSpec().oil_max_rate_;
|
||||||
|
double guide_rate = well_collection_.getLeafNodes()[i]->prodSpec().guide_rate_;
|
||||||
|
well_data[i].target = guide_rate * parent_oil_rate;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if(well_collection_.getLeafNodes()[i]->injSpec().control_mode_ == InjectionSpecification::GRUP)
|
||||||
|
{
|
||||||
|
if(well_collection_.getLeafNodes()[i]->prodSpec().guide_rate_type_ == ProductionSpecification::RAT) {
|
||||||
|
|
||||||
|
well_data[i].control = RATE;
|
||||||
|
well_data[i].type = INJECTOR;
|
||||||
|
double parent_surface_rate = well_collection_.getLeafNodes()[i]->getParent()->injSpec().surface_flow_max_rate_;
|
||||||
|
double guide_rate = well_collection_.getLeafNodes()[i]->prodSpec().guide_rate_;
|
||||||
|
well_data[i].target = guide_rate * parent_surface_rate;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
// Set up the Wells struct.
|
// Set up the Wells struct.
|
||||||
w_ = wells_create(num_wells, num_perfs);
|
w_ = wells_create(num_wells, num_perfs);
|
||||||
if (!w_) {
|
if (!w_) {
|
||||||
@ -509,21 +572,6 @@ namespace Opm
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (deck.hasField("GRUPTREE")) {
|
|
||||||
std::cout << "Found gruptree" << std::endl;
|
|
||||||
const GRUPTREE& gruptree = deck.getGRUPTREE();
|
|
||||||
|
|
||||||
std::map<std::string, std::string>::const_iterator it = gruptree.tree.begin();
|
|
||||||
for( ; it != gruptree.tree.end(); ++it) {
|
|
||||||
well_collection_.addChild(it->first, it->second, deck);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for (size_t i = 0; i < welspecs.welspecs.size(); ++i) {
|
|
||||||
WelspecsLine line = welspecs.welspecs[i];
|
|
||||||
well_collection_.addChild(line.name_, line.group_, deck);
|
|
||||||
}
|
|
||||||
|
|
||||||
for(size_t i = 0; i < well_collection_.getLeafNodes().size(); i++) {
|
for(size_t i = 0; i < well_collection_.getLeafNodes().size(); i++) {
|
||||||
WellNode* node = static_cast<WellNode*>(well_collection_.getLeafNodes()[i].get());
|
WellNode* node = static_cast<WellNode*>(well_collection_.getLeafNodes()[i].get());
|
||||||
|
|
||||||
@ -531,23 +579,7 @@ namespace Opm
|
|||||||
node->setWellsPointer(w_, i);
|
node->setWellsPointer(w_, i);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set the guide rates:
|
|
||||||
if(deck.hasField("WGRUPCON")) {
|
|
||||||
std::cout << "Found Wgrupcon" << std::endl;
|
|
||||||
WGRUPCON wgrupcon = deck.getWGRUPCON();
|
|
||||||
const std::vector<WgrupconLine>& lines = wgrupcon.wgrupcon;
|
|
||||||
std::cout << well_collection_.getLeafNodes().size() << std::endl;
|
|
||||||
for(size_t i = 0; i < lines.size(); i++) {
|
|
||||||
std::string name = lines[i].well_;
|
|
||||||
int index = well_names_to_index[name];
|
|
||||||
ASSERT(well_collection_.getLeafNodes()[index]->name() == name);
|
|
||||||
well_collection_.getLeafNodes()[index]->prodSpec().guide_rate_ = lines[i].guide_rate_;
|
|
||||||
well_collection_.getLeafNodes()[index]->prodSpec().guide_rate_type_
|
|
||||||
= lines[i].phase_ == "OIL" ? ProductionSpecification::OIL : ProductionSpecification::RAT;
|
|
||||||
}
|
|
||||||
|
|
||||||
well_collection_.calculateGuideRates();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user