mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
Merge pull request #2328 from bska/currctrl-restart-io
Save and Restore Well's Current Control Target Mode
This commit is contained in:
commit
54ef525e07
@ -213,7 +213,20 @@ namespace Opm {
|
||||
}
|
||||
|
||||
Opm::data::Wells wellData() const
|
||||
{ return well_state_.report(phase_usage_, Opm::UgGridHelpers::globalCell(grid())); }
|
||||
{
|
||||
auto wsrpt = well_state_.report(phase_usage_, Opm::UgGridHelpers::globalCell(grid()));
|
||||
|
||||
for (const auto& well : this->wells_ecl_) {
|
||||
auto xwPos = wsrpt.find(well.name());
|
||||
if (xwPos == wsrpt.end()) { // No well results. Unexpected.
|
||||
continue;
|
||||
}
|
||||
|
||||
xwPos->second.current_control.isProducer = well.isProducer();
|
||||
}
|
||||
|
||||
return wsrpt;
|
||||
}
|
||||
|
||||
// substract Binv(D)rw from r;
|
||||
void apply( BVector& r) const;
|
||||
|
@ -543,24 +543,6 @@ namespace Opm {
|
||||
wellsToState(restartValues.wells, phaseUsage, handle_ms_well, well_state_);
|
||||
}
|
||||
|
||||
// for ecl compatible restart the current controls are not written
|
||||
const auto& ioCfg = eclState().getIOConfig();
|
||||
const auto ecl_compatible_rst = ioCfg.getEclCompatibleRST();
|
||||
if (true || ecl_compatible_rst) { // always set the control from the schedule
|
||||
for (int w = 0; w <nw; ++w) {
|
||||
const auto& well = wells_ecl_[w];
|
||||
|
||||
if (well.isProducer()) {
|
||||
const auto controls = well.productionControls(summaryState);
|
||||
well_state_.currentProductionControls()[w] = controls.cmode;
|
||||
}
|
||||
else {
|
||||
const auto controls = well.injectionControls(summaryState);
|
||||
well_state_.currentInjectionControls()[w] = controls.cmode;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
previous_well_state_ = well_state_;
|
||||
|
||||
initial_step_ = false;
|
||||
@ -1586,8 +1568,12 @@ namespace Opm {
|
||||
state.bhp()[ well_index ] = well.bhp;
|
||||
state.temperature()[ well_index ] = well.temperature;
|
||||
|
||||
//state.currentInjectionControls()[ well_index ] = static_cast<Opm::Well::InjectorCMode>(well.injectionControl);
|
||||
//state.currentProductionControls()[ well_index ] = static_cast<Well::ProducerCMode>(well.productionControl);
|
||||
if (well.current_control.isProducer) {
|
||||
state.currentProductionControls()[ well_index ] = well.current_control.prod;
|
||||
}
|
||||
else {
|
||||
state.currentInjectionControls()[ well_index ] = well.current_control.inj;
|
||||
}
|
||||
|
||||
const auto wellrate_index = well_index * np;
|
||||
for( size_t i = 0; i < phs.size(); ++i ) {
|
||||
|
@ -515,6 +515,13 @@ namespace Opm
|
||||
well.rates.set( rt::dissolved_gas, this->well_dissolved_gas_rates_[w] );
|
||||
well.rates.set( rt::vaporized_oil, this->well_vaporized_oil_rates_[w] );
|
||||
|
||||
{
|
||||
auto& curr = well.current_control;
|
||||
|
||||
curr.prod = this->currentProductionControls()[w];
|
||||
curr.inj = this->currentInjectionControls() [w];
|
||||
}
|
||||
|
||||
size_t local_comp_index = 0;
|
||||
for( auto& comp : well.connections) {
|
||||
const auto rates = this->perfPhaseRates().begin()
|
||||
|
Loading…
Reference in New Issue
Block a user