Added setWellsPointer, changed the interface of leaf_nodes_ slightly

This commit is contained in:
Kjetil Olsen Lye 2012-04-25 14:19:47 +02:00
parent 81cf6e3b32
commit ea0df38468
3 changed files with 15 additions and 11 deletions

View File

@ -57,7 +57,7 @@ namespace Opm
parent_as_group->addChild(child); parent_as_group->addChild(child);
if(child->isLeafNode()) { if(child->isLeafNode()) {
leaf_nodes_.push_back(child); leaf_nodes_.push_back(static_cast<WellNode*>(child.get()));
} }
child->setParent(parent); child->setParent(parent);
@ -65,7 +65,7 @@ namespace Opm
const std::vector<std::tr1::shared_ptr<WellsGroupInterface> >& WellCollection::getLeafNodes() const { const std::vector<WellNode*>& WellCollection::getLeafNodes() const {
return leaf_nodes_; return leaf_nodes_;
} }
@ -100,7 +100,7 @@ namespace Opm
double epsilon) const double epsilon) const
{ {
for (size_t i = 0; i < leaf_nodes_.size(); i++) { for (size_t i = 0; i < leaf_nodes_.size(); i++) {
static_cast<WellNode*>(leaf_nodes_[i].get())->conditionsMet(well_bhp, well_rate, grid, result, epsilon); leaf_nodes_[i]->conditionsMet(well_bhp, well_rate, grid, result, epsilon);
} }
} }
@ -110,4 +110,10 @@ namespace Opm
roots_[i]->calculateGuideRates(); roots_[i]->calculateGuideRates();
} }
} }
void WellCollection::setWellsPointer(const Wells* wells) {
for(size_t i = 0; i < leaf_nodes_.size(); i++) {
leaf_nodes_[i]->setWellsPointer(wells, i);
}
}
} }

View File

@ -49,19 +49,22 @@ namespace Opm
const UnstructuredGrid& grid, const UnstructuredGrid& grid,
WellControlResult& result, WellControlResult& result,
const double epsilon=1e-8) const; const double epsilon=1e-8) const;
/// Adds the well pointer to each leaf node (does not take ownership).
void setWellsPointer(const Wells* wells);
const std::vector<std::tr1::shared_ptr<WellsGroupInterface> >& getLeafNodes() const; const std::vector<WellNode*>& getLeafNodes() const;
void calculateGuideRates(); void calculateGuideRates();
WellsGroupInterface* findNode(std::string name); WellsGroupInterface* findNode(std::string name);
const WellsGroupInterface* findNode(std::string name) const; const WellsGroupInterface* findNode(std::string name) const;
private: private:
// To account for the possibility of a forest // To account for the possibility of a forest
std::vector<std::tr1::shared_ptr<WellsGroupInterface> > roots_; std::vector<std::tr1::shared_ptr<WellsGroupInterface> > roots_;
// This will be used to traverse the bottom nodes. // This will be used to traverse the bottom nodes.
std::vector<std::tr1::shared_ptr<WellsGroupInterface> > leaf_nodes_; std::vector<WellNode*> leaf_nodes_;
}; };

View File

@ -610,12 +610,7 @@ namespace Opm
} }
std::cout << "Made well struct" << std::endl; std::cout << "Made well struct" << std::endl;
// \TODO comment this. well_collection_.setWellsPointer(w_);
for (size_t i = 0; i < well_collection_.getLeafNodes().size(); i++) {
WellNode* node = static_cast<WellNode*>(well_collection_.getLeafNodes()[i].get());
// We know that getLeafNodes() is ordered the same way as they're indexed in w_
node->setWellsPointer(w_, i);
}
} }