mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
Changed open / close behaviour of well_controls: 1) well_controls has an explicit open_close flag. 2) Will NOT flip current value to change open|close status
This commit is contained in:
@@ -747,9 +747,7 @@ namespace Opm
|
||||
void WellNode::shutWell()
|
||||
{
|
||||
if (shut_well_) {
|
||||
// We set the tilde of the current control
|
||||
// set_current_control(self_index_, -1, wells_);
|
||||
well_controls_invert_current(wells_->ctrls[self_index_]);
|
||||
well_controls_shut_well( wells_->ctrls[self_index_]);
|
||||
}
|
||||
else {
|
||||
const double target = 0.0;
|
||||
@@ -767,7 +765,7 @@ namespace Opm
|
||||
well_controls_iset_target( wells_->ctrls[self_index_] , group_control_index_ , target);
|
||||
well_controls_iset_distr(wells_->ctrls[self_index_] , group_control_index_ , distr);
|
||||
}
|
||||
well_controls_invert_current(wells_->ctrls[self_index_]);
|
||||
well_controls_open_well( wells_->ctrls[self_index_]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -869,17 +869,9 @@ namespace Opm
|
||||
}
|
||||
const int index = it->second;
|
||||
if (line.openshutflag_ == "SHUT") {
|
||||
int cur_ctrl = well_controls_get_current(w_->ctrls[index]);
|
||||
if (cur_ctrl >= 0) {
|
||||
well_controls_invert_current(w_->ctrls[index]);
|
||||
}
|
||||
assert(well_controls_get_current(w_->ctrls[index]) < 0);
|
||||
well_controls_shut_well( w_->ctrls[index] );
|
||||
} else if (line.openshutflag_ == "OPEN") {
|
||||
int cur_ctrl = well_controls_get_current(w_->ctrls[index]);
|
||||
if (cur_ctrl < 0) {
|
||||
well_controls_invert_current(w_->ctrls[index]);
|
||||
}
|
||||
assert(well_controls_get_current(w_->ctrls[index]) >= 0);
|
||||
well_controls_open_well( w_->ctrls[index] );
|
||||
} else {
|
||||
OPM_THROW(std::runtime_error, "Unknown Open/close keyword: \"" << line.openshutflag_<< "\". Allowed values: OPEN, SHUT.");
|
||||
}
|
||||
|
||||
@@ -98,6 +98,8 @@ struct WellControls
|
||||
*/
|
||||
int current;
|
||||
|
||||
bool well_is_open;
|
||||
|
||||
/*
|
||||
The capacity allocated.
|
||||
*/
|
||||
@@ -130,7 +132,7 @@ well_controls_create(void)
|
||||
ctrl = malloc(1 * sizeof *ctrl);
|
||||
|
||||
if (ctrl != NULL) {
|
||||
/* Initialise empty control set */
|
||||
/* Initialise empty control set; the well is created open. */
|
||||
ctrl->num = 0;
|
||||
ctrl->number_of_phases = 0;
|
||||
ctrl->type = NULL;
|
||||
@@ -138,6 +140,7 @@ well_controls_create(void)
|
||||
ctrl->distr = NULL;
|
||||
ctrl->current = -1;
|
||||
ctrl->cpty = 0;
|
||||
ctrl->well_is_open = true;
|
||||
}
|
||||
|
||||
return ctrl;
|
||||
@@ -192,11 +195,23 @@ well_controls_set_current( struct WellControls * ctrl, int current) {
|
||||
ctrl->current = current;
|
||||
}
|
||||
|
||||
void
|
||||
well_controls_invert_current( struct WellControls * ctrl ) {
|
||||
ctrl->current = ~ctrl->current;
|
||||
bool well_controls_well_is_shut(const struct WellControls * ctrl) {
|
||||
return !ctrl->well_is_open;
|
||||
}
|
||||
|
||||
bool well_controls_well_is_open(const struct WellControls * ctrl) {
|
||||
return ctrl->well_is_open;
|
||||
}
|
||||
|
||||
void well_controls_open_well( struct WellControls * ctrl) {
|
||||
ctrl->well_is_open = true;
|
||||
}
|
||||
|
||||
void well_controls_shut_well( struct WellControls * ctrl) {
|
||||
ctrl->well_is_open = false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
enum WellControlType
|
||||
well_controls_iget_type(const struct WellControls * ctrl, int control_index) {
|
||||
|
||||
Reference in New Issue
Block a user