mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
Minor fix based on code review
This commit is contained in:
parent
d769e7649a
commit
6606bb75b2
@ -142,8 +142,7 @@ namespace Opm {
|
|||||||
// compute the well fluxes and assemble them in to the reservoir equations as source terms
|
// compute the well fluxes and assemble them in to the reservoir equations as source terms
|
||||||
// and in the well equations.
|
// and in the well equations.
|
||||||
void assemble(const int iterationIdx,
|
void assemble(const int iterationIdx,
|
||||||
const double dt,
|
const double dt);
|
||||||
bool wtest = false);
|
|
||||||
|
|
||||||
// substract Binv(D)rw from r;
|
// substract Binv(D)rw from r;
|
||||||
void apply( BVector& r) const;
|
void apply( BVector& r) const;
|
||||||
|
@ -110,14 +110,9 @@ namespace Opm {
|
|||||||
// update the previous well state. This is used to restart failed steps.
|
// update the previous well state. This is used to restart failed steps.
|
||||||
previous_well_state_ = well_state_;
|
previous_well_state_ = well_state_;
|
||||||
|
|
||||||
|
|
||||||
if (wellCollection().havingVREPGroups() ) {
|
|
||||||
rateConverter_->template defineState<ElementContext>(ebosSimulator_);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Compute reservoir volumes for RESV controls.
|
// Compute reservoir volumes for RESV controls.
|
||||||
rateConverter_.reset(new RateConverterType (phase_usage_,
|
rateConverter_.reset(new RateConverterType (phase_usage_,
|
||||||
std::vector<int>(number_of_cells_, 0)));
|
std::vector<int>(number_of_cells_, 0)));
|
||||||
computeRESV(timeStepIdx);
|
computeRESV(timeStepIdx);
|
||||||
|
|
||||||
// update VFP properties
|
// update VFP properties
|
||||||
@ -154,10 +149,9 @@ namespace Opm {
|
|||||||
// calculate the efficiency factors for each well
|
// calculate the efficiency factors for each well
|
||||||
calculateEfficiencyFactors();
|
calculateEfficiencyFactors();
|
||||||
|
|
||||||
const Grid& grid = ebosSimulator_.vanguard().grid();
|
|
||||||
|
|
||||||
if (has_polymer_)
|
if (has_polymer_)
|
||||||
{
|
{
|
||||||
|
const Grid& grid = ebosSimulator_.vanguard().grid();
|
||||||
if (PolymerModule::hasPlyshlog()) {
|
if (PolymerModule::hasPlyshlog()) {
|
||||||
computeRepRadiusPerfLength(grid);
|
computeRepRadiusPerfLength(grid);
|
||||||
}
|
}
|
||||||
@ -194,7 +188,7 @@ namespace Opm {
|
|||||||
const std::string msg = std::string("well ") + testWell.first + std::string(" is tested");
|
const std::string msg = std::string("well ") + testWell.first + std::string(" is tested");
|
||||||
OpmLog::info(msg);
|
OpmLog::info(msg);
|
||||||
|
|
||||||
// finding the location of the well in wells_ecl
|
// Finding the location of the well in wells_ecl
|
||||||
const int nw_wells_ecl = wells_ecl_.size();
|
const int nw_wells_ecl = wells_ecl_.size();
|
||||||
int index_well = 0;
|
int index_well = 0;
|
||||||
for (; index_well < nw_wells_ecl; ++index_well) {
|
for (; index_well < nw_wells_ecl; ++index_well) {
|
||||||
@ -202,15 +196,13 @@ namespace Opm {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// It should be able to find in wells_ecl.
|
// It should be able to find in wells_ecl.
|
||||||
if (index_well == nw_wells_ecl) {
|
if (index_well == nw_wells_ecl) {
|
||||||
OPM_THROW(std::logic_error, "Could not find well " << testWell.first << " in wells_ecl ");
|
OPM_THROW(std::logic_error, "Could not find well " << testWell.first << " in wells_ecl ");
|
||||||
}
|
}
|
||||||
const Well* well_ecl = wells_ecl_[index_well];
|
const Well* well_ecl = wells_ecl_[index_well];
|
||||||
|
|
||||||
|
// Finding the location of the well in wells struct.
|
||||||
// Find the index in the wells() struct
|
|
||||||
const int nw = numWells();
|
const int nw = numWells();
|
||||||
int wellidx = -999;
|
int wellidx = -999;
|
||||||
for (int w = 0; w < nw; ++w) {
|
for (int w = 0; w < nw; ++w) {
|
||||||
@ -218,9 +210,11 @@ namespace Opm {
|
|||||||
wellidx = w;
|
wellidx = w;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
if (wellidx < 0) {
|
||||||
|
OPM_THROW(std::logic_error, "Could not find the well " << testWell.first << " in the well struct ");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Use the pvtRegionIdx from the top cell
|
// Use the pvtRegionIdx from the top cell
|
||||||
const int well_cell_top = wells()->well_cells[wells()->well_connpos[wellidx]];
|
const int well_cell_top = wells()->well_cells[wells()->well_connpos[wellidx]];
|
||||||
const int pvtreg = pvt_region_idx_[well_cell_top];
|
const int pvtreg = pvt_region_idx_[well_cell_top];
|
||||||
@ -373,8 +367,7 @@ namespace Opm {
|
|||||||
void
|
void
|
||||||
BlackoilWellModel<TypeTag>::
|
BlackoilWellModel<TypeTag>::
|
||||||
assemble(const int iterationIdx,
|
assemble(const int iterationIdx,
|
||||||
const double dt,
|
const double dt)
|
||||||
bool onlyDoTheWellTest)
|
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
@ -398,8 +391,6 @@ namespace Opm {
|
|||||||
if (param_.solve_welleq_initially_ && iterationIdx == 0) {
|
if (param_.solve_welleq_initially_ && iterationIdx == 0) {
|
||||||
// solve the well equations as a pre-processing step
|
// solve the well equations as a pre-processing step
|
||||||
last_report_ = solveWellEq(dt);
|
last_report_ = solveWellEq(dt);
|
||||||
if (onlyDoTheWellTest)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (initial_step_) {
|
if (initial_step_) {
|
||||||
// update the explicit quantities to get the initial fluid distribution in the well correct.
|
// update the explicit quantities to get the initial fluid distribution in the well correct.
|
||||||
@ -930,7 +921,7 @@ namespace Opm {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (auto& well : well_container_) {
|
for (auto& well : well_container_) {
|
||||||
const std::string well_name = well->name();
|
const std::string& well_name = well->name();
|
||||||
const WellNode& well_node = wellCollection().findWellNode(well_name);
|
const WellNode& well_node = wellCollection().findWellNode(well_name);
|
||||||
|
|
||||||
const double well_efficiency_factor = well_node.getAccumulativeEfficiencyFactor();
|
const double well_efficiency_factor = well_node.getAccumulativeEfficiencyFactor();
|
||||||
|
@ -188,7 +188,6 @@ namespace Opm
|
|||||||
using Base::wellHasTHPConstraints;
|
using Base::wellHasTHPConstraints;
|
||||||
using Base::mostStrictBhpFromBhpLimits;
|
using Base::mostStrictBhpFromBhpLimits;
|
||||||
using Base::scalingFactor;
|
using Base::scalingFactor;
|
||||||
using Base::updateWellControl;
|
|
||||||
|
|
||||||
// protected member variables from the Base class
|
// protected member variables from the Base class
|
||||||
using Base::current_step_;
|
using Base::current_step_;
|
||||||
|
@ -229,7 +229,7 @@ namespace Opm
|
|||||||
|
|
||||||
void closeWellsAndCompletions(WellTestState& wellTestState);
|
void closeWellsAndCompletions(WellTestState& wellTestState);
|
||||||
|
|
||||||
const Well* wellEcl() const { return well_ecl_;}
|
const Well* wellEcl() const;
|
||||||
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@ -347,8 +347,6 @@ namespace Opm
|
|||||||
|
|
||||||
double scalingFactor(const int comp_idx) const;
|
double scalingFactor(const int comp_idx) const;
|
||||||
|
|
||||||
int numberOfCompletions() const { return well_ecl_->getCompletions(current_step_).size();}
|
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -203,6 +203,14 @@ namespace Opm
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
template<typename TypeTag>
|
||||||
|
const Well*
|
||||||
|
WellInterface<TypeTag>::
|
||||||
|
wellEcl() const
|
||||||
|
{
|
||||||
|
return well_ecl_;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename TypeTag>
|
template<typename TypeTag>
|
||||||
@ -540,7 +548,7 @@ namespace Opm
|
|||||||
const auto& connections = well_ecl_->getConnections(current_step_);
|
const auto& connections = well_ecl_->getConnections(current_step_);
|
||||||
|
|
||||||
int complnumIdx = 0;
|
int complnumIdx = 0;
|
||||||
std::vector<double> water_cut_in_completions(numberOfCompletions(), 0.0);
|
std::vector<double> water_cut_in_completions(completions.size(), 0.0);
|
||||||
for (const auto& completion : completions) {
|
for (const auto& completion : completions) {
|
||||||
int complnum = completion.first;
|
int complnum = completion.first;
|
||||||
for (int perf = 0; perf < perf_number; ++perf) {
|
for (int perf = 0; perf < perf_number; ++perf) {
|
||||||
@ -731,10 +739,10 @@ namespace Opm
|
|||||||
wellTestState.addClosedWell(well_name, WellTestConfig::Reason::ECONOMIC, simulationTime);
|
wellTestState.addClosedWell(well_name, WellTestConfig::Reason::ECONOMIC, simulationTime);
|
||||||
if (writeMessageToOPMLog) {
|
if (writeMessageToOPMLog) {
|
||||||
if (well_ecl_->getAutomaticShutIn()) {
|
if (well_ecl_->getAutomaticShutIn()) {
|
||||||
const std::string msg = well_name + std::string(" will be shut due to last compleation closed");
|
const std::string msg = well_name + std::string(" will be shut due to last completion closed");
|
||||||
OpmLog::info(msg);
|
OpmLog::info(msg);
|
||||||
} else {
|
} else {
|
||||||
const std::string msg = well_name + std::string(" will be stopped due to last compleation closed");
|
const std::string msg = well_name + std::string(" will be stopped due to last completion closed");
|
||||||
OpmLog::info(msg);
|
OpmLog::info(msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -908,7 +916,6 @@ namespace Opm
|
|||||||
WellInterface<TypeTag>::closeWellsAndCompletions(WellTestState& wellTestState)
|
WellInterface<TypeTag>::closeWellsAndCompletions(WellTestState& wellTestState)
|
||||||
{
|
{
|
||||||
if (wellTestState.hasWell(name(), WellTestConfig::Reason::ECONOMIC)) {
|
if (wellTestState.hasWell(name(), WellTestConfig::Reason::ECONOMIC)) {
|
||||||
assert(!well_ecl_->getAutomaticShutIn());
|
|
||||||
well_controls_stop_well(wellControls());
|
well_controls_stop_well(wellControls());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -951,11 +958,11 @@ namespace Opm
|
|||||||
|
|
||||||
if (converged) {
|
if (converged) {
|
||||||
if ( terminal_output ) {
|
if ( terminal_output ) {
|
||||||
OpmLog::debug("Well equation solution gets converged with " + std::to_string(it) + " iterations");
|
OpmLog::debug("Well equation for well " + name() + " solution gets converged with " + std::to_string(it) + " iterations");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if ( terminal_output ) {
|
if ( terminal_output ) {
|
||||||
OpmLog::debug("Well equation solution failed in getting converged with " + std::to_string(it) + " iterations");
|
OpmLog::debug("Well equation for well" +name() + " solution failed in getting converged with " + std::to_string(it) + " iterations");
|
||||||
well_state = well_state0;
|
well_state = well_state0;
|
||||||
updatePrimaryVariables(well_state);
|
updatePrimaryVariables(well_state);
|
||||||
// also recover the old well controls
|
// also recover the old well controls
|
||||||
|
@ -80,22 +80,6 @@ namespace Opm
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void removeShutWell(const std::string& well_name) {
|
|
||||||
auto itr = std::find(m_shut_wells.begin(), m_shut_wells.end(), well_name);
|
|
||||||
if (itr != m_shut_wells.end())
|
|
||||||
m_shut_wells.erase(itr);
|
|
||||||
}
|
|
||||||
|
|
||||||
void removeStoppedWell(const std::string& well_name) {
|
|
||||||
auto itr = std::find(m_stopped_wells.begin(), m_stopped_wells.end(), well_name);
|
|
||||||
if (itr != m_stopped_wells.end())
|
|
||||||
m_stopped_wells.erase(itr);
|
|
||||||
}
|
|
||||||
|
|
||||||
void removeClosedConnectionsForWell(const std::string& well_name) {
|
|
||||||
m_cells_closed_connections.erase(well_name);
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::vector <std::string> m_shut_wells;
|
std::vector <std::string> m_shut_wells;
|
||||||
std::vector <std::string> m_stopped_wells;
|
std::vector <std::string> m_stopped_wells;
|
||||||
|
Loading…
Reference in New Issue
Block a user