mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
re-organizting the function prepareTimeStep() for StandardWellsDense
for better readibility and organization.
This commit is contained in:
parent
1024ce31f6
commit
c26b5905a8
@ -269,7 +269,11 @@ namespace Opm {
|
|||||||
// some preparation work, mostly related to group control and RESV,
|
// some preparation work, mostly related to group control and RESV,
|
||||||
// at the beginning of each time step (Not report step)
|
// at the beginning of each time step (Not report step)
|
||||||
void prepareTimeStep(const Simulator& ebos_simulator,
|
void prepareTimeStep(const Simulator& ebos_simulator,
|
||||||
WellState& well_state);
|
WellState& well_state) const;
|
||||||
|
|
||||||
|
void prepareGroupControl(const Simulator& ebos_simulator,
|
||||||
|
WellState& well_state) const;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -643,18 +643,48 @@ namespace Opm {
|
|||||||
void
|
void
|
||||||
StandardWellsDense<TypeTag>::
|
StandardWellsDense<TypeTag>::
|
||||||
prepareTimeStep(const Simulator& ebos_simulator,
|
prepareTimeStep(const Simulator& ebos_simulator,
|
||||||
WellState& well_state)
|
WellState& well_state) const
|
||||||
{
|
{
|
||||||
const int nw = number_of_wells_;
|
// after restarting, the well_controls can be modified while
|
||||||
for (int w = 0; w < nw; ++w) {
|
// the well_state still uses the old control index
|
||||||
// after restarting, the well_controls can be modified while
|
// we need to synchronize these two.
|
||||||
// the well_state still uses the old control index
|
// keep in mind that we set the control index of well_state to be the same with
|
||||||
// we need to synchronize these two.
|
// with the wellControls from the deck when we create well_state at the beginning of the report step
|
||||||
// keep in mind that we set the control index of well_state to be the same with
|
resetWellControlFromState(well_state);
|
||||||
// with the wellControls from the deck when we create well_state at the beginning of the report step
|
|
||||||
resetWellControlFromState(well_state);
|
|
||||||
|
|
||||||
if (wellCollection()->groupControlActive()) {
|
// process group control related
|
||||||
|
prepareGroupControl(ebos_simulator, well_state);
|
||||||
|
|
||||||
|
// since the controls are all updated, we should update well_state accordingly
|
||||||
|
for (int w = 0; w < number_of_wells_; ++w) {
|
||||||
|
WellControls* wc = well_container_[w]->wellControls();
|
||||||
|
const int control = well_controls_get_current(wc);
|
||||||
|
well_state.currentControls()[w] = control;
|
||||||
|
// TODO: for VFP control, the perf_densities are still zero here, investigate better
|
||||||
|
// way to handle it later.
|
||||||
|
well_container_[w]->updateWellStateWithTarget(control, well_state);
|
||||||
|
|
||||||
|
// The wells are not considered to be newly added
|
||||||
|
// for next time step
|
||||||
|
if (well_state.isNewWell(w) ) {
|
||||||
|
well_state.setNewWell(w, false);
|
||||||
|
}
|
||||||
|
} // end of for (int w = 0; w < nw; ++w)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
template<typename TypeTag>
|
||||||
|
void
|
||||||
|
StandardWellsDense<TypeTag>::
|
||||||
|
prepareGroupControl(const Simulator& ebos_simulator,
|
||||||
|
WellState& well_state) const
|
||||||
|
{
|
||||||
|
// group control related processing
|
||||||
|
if (well_collection_->groupControlActive()) {
|
||||||
|
for (int w = 0; w < number_of_wells_; ++w) {
|
||||||
WellControls* wc = well_container_[w]->wellControls();
|
WellControls* wc = well_container_[w]->wellControls();
|
||||||
WellNode& well_node = well_collection_->findWellNode(well_container_[w]->name());
|
WellNode& well_node = well_collection_->findWellNode(well_container_[w]->name());
|
||||||
|
|
||||||
@ -681,9 +711,7 @@ namespace Opm {
|
|||||||
well_node.setIndividualControl(true);
|
well_node.setIndividualControl(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
if (well_collection_->groupControlActive()) {
|
|
||||||
if (well_collection_->requireWellPotentials()) {
|
if (well_collection_->requireWellPotentials()) {
|
||||||
|
|
||||||
// calculate the well potentials
|
// calculate the well potentials
|
||||||
@ -704,22 +732,6 @@ namespace Opm {
|
|||||||
wellCollection()->updateWellTargets(well_state.wellRates());
|
wellCollection()->updateWellTargets(well_state.wellRates());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// since the controls are all updated, we should update well_state accordingly
|
|
||||||
for (int w = 0; w < nw; ++w) {
|
|
||||||
WellControls* wc = well_container_[w]->wellControls();
|
|
||||||
const int control = well_controls_get_current(wc);
|
|
||||||
well_state.currentControls()[w] = control;
|
|
||||||
// TODO: for VFP control, the perf_densities are still zero here, investigate better
|
|
||||||
// way to handle it later.
|
|
||||||
well_container_[w]->updateWellStateWithTarget(control, well_state);
|
|
||||||
|
|
||||||
// The wells are not considered to be newly added
|
|
||||||
// for next time step
|
|
||||||
if (well_state.isNewWell(w) ) {
|
|
||||||
well_state.setNewWell(w, false);
|
|
||||||
}
|
|
||||||
} // end of for (int w = 0; w < nw; ++w)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user