mirror of
https://github.com/OPM/opm-simulators.git
synced 2024-12-30 11:06:55 -06:00
Only calculate well potentials for cases with well groups
This commit is contained in:
parent
bd81bda57b
commit
e4b52a457f
@ -222,7 +222,10 @@ namespace Opm
|
||||
// Increment timer, remember well state.
|
||||
++timer;
|
||||
prev_well_state = well_state;
|
||||
asImpl().computeWellPotentials(timer.currentStepNum(), wells, state, well_state, well_potentials);
|
||||
// Compute Well potentials (only used to determine default guide rates for group controlled wells)
|
||||
if (schedule->numGroups() > 0 ) {
|
||||
asImpl().computeWellPotentials(timer.currentStepNum(), wells, state, well_state, well_potentials);
|
||||
}
|
||||
}
|
||||
|
||||
// Write final simulation state.
|
||||
@ -396,30 +399,27 @@ namespace Opm
|
||||
const int np = wells->number_of_phases;
|
||||
well_potentials.clear();
|
||||
well_potentials.resize(nw*np,0.0);
|
||||
if( ! xw.wellMap().empty() )
|
||||
{
|
||||
for (int w = 0; w < nw; ++w) {
|
||||
for (int perf = wells->well_connpos[w]; perf < wells->well_connpos[w + 1]; ++perf) {
|
||||
const double well_cell_pressure = x.pressure()[wells->well_cells[perf]];
|
||||
const double drawdown_used = well_cell_pressure - xw.perfPress()[perf];
|
||||
const WellControls* ctrl = wells->ctrls[w];
|
||||
const int nwc = well_controls_get_num(ctrl);
|
||||
//Loop over all controls until we find a BHP control
|
||||
//that specifies what we need...
|
||||
double bhp = 0.0;
|
||||
for (int ctrl_index=0; ctrl_index < nwc; ++ctrl_index) {
|
||||
if (well_controls_iget_type(ctrl, ctrl_index) == BHP) {
|
||||
bhp = well_controls_iget_target(ctrl, ctrl_index);
|
||||
}
|
||||
// TODO: do something for thp;
|
||||
for (int w = 0; w < nw; ++w) {
|
||||
for (int perf = wells->well_connpos[w]; perf < wells->well_connpos[w + 1]; ++perf) {
|
||||
const double well_cell_pressure = x.pressure()[wells->well_cells[perf]];
|
||||
const double drawdown_used = well_cell_pressure - xw.perfPress()[perf];
|
||||
const WellControls* ctrl = wells->ctrls[w];
|
||||
const int nwc = well_controls_get_num(ctrl);
|
||||
//Loop over all controls until we find a BHP control
|
||||
//that specifies what we need...
|
||||
double bhp = 0.0;
|
||||
for (int ctrl_index=0; ctrl_index < nwc; ++ctrl_index) {
|
||||
if (well_controls_iget_type(ctrl, ctrl_index) == BHP) {
|
||||
bhp = well_controls_iget_target(ctrl, ctrl_index);
|
||||
}
|
||||
// Calculate the pressure difference in the well perforation
|
||||
const double dp = xw.perfPress()[perf] - xw.bhp()[w];
|
||||
const double drawdown_maximum = well_cell_pressure - (bhp + dp);
|
||||
// TODO: do something for thp;
|
||||
}
|
||||
// Calculate the pressure difference in the well perforation
|
||||
const double dp = xw.perfPress()[perf] - xw.bhp()[w];
|
||||
const double drawdown_maximum = well_cell_pressure - (bhp + dp);
|
||||
|
||||
for (int phase = 0; phase < np; ++phase) {
|
||||
well_potentials[w*np + phase] += (drawdown_maximum / drawdown_used * xw.perfPhaseRates()[perf*np + phase]);
|
||||
}
|
||||
for (int phase = 0; phase < np; ++phase) {
|
||||
well_potentials[w*np + phase] += (drawdown_maximum / drawdown_used * xw.perfPhaseRates()[perf*np + phase]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user