mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
applying the efficiency factor to VREP control.
This commit is contained in:
@@ -643,7 +643,7 @@ namespace Opm
|
|||||||
for (size_t i = 0; i < children_.size(); ++i) {
|
for (size_t i = 0; i < children_.size(); ++i) {
|
||||||
sum += children_[i]->getTotalVoidageRate(well_voidage_rates);
|
sum += children_[i]->getTotalVoidageRate(well_voidage_rates);
|
||||||
}
|
}
|
||||||
return sum;
|
return sum * efficiencyFactor();
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Applies explicit reinjection controls. This must be called at each timestep to be correct.
|
/// Applies explicit reinjection controls. This must be called at each timestep to be correct.
|
||||||
@@ -731,7 +731,8 @@ namespace Opm
|
|||||||
const double my_guide_rate = injectionGuideRate(false);
|
const double my_guide_rate = injectionGuideRate(false);
|
||||||
for (size_t i = 0; i < children_.size(); ++i ) {
|
for (size_t i = 0; i < children_.size(); ++i ) {
|
||||||
const double child_guide_rate = children_[i]->injectionGuideRate(false);
|
const double child_guide_rate = children_[i]->injectionGuideRate(false);
|
||||||
const double child_target = child_guide_rate / my_guide_rate * total_reinjected * injSpec().voidage_replacment_fraction_;
|
const double child_target = child_guide_rate / my_guide_rate * total_reinjected / efficiencyFactor()
|
||||||
|
* injSpec().voidage_replacment_fraction_;
|
||||||
children_[i]->applyVREPGroupControl(child_target, well_voidage_rates, conversion_coeffs, false);
|
children_[i]->applyVREPGroupControl(child_target, well_voidage_rates, conversion_coeffs, false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -767,7 +768,7 @@ namespace Opm
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
for (size_t i = 0; i < children_.size(); ++i) {
|
for (size_t i = 0; i < children_.size(); ++i) {
|
||||||
const double child_target = target * children_[i]->injectionGuideRate(only_group) / my_guide_rate;
|
const double child_target = target / efficiencyFactor() * children_[i]->injectionGuideRate(only_group) / my_guide_rate;
|
||||||
children_[i]->applyVREPGroupControl(child_target, well_voidage_rates, conversion_coeffs, false);
|
children_[i]->applyVREPGroupControl(child_target, well_voidage_rates, conversion_coeffs, false);
|
||||||
}
|
}
|
||||||
// I do not know why here.
|
// I do not know why here.
|
||||||
@@ -1121,7 +1122,7 @@ namespace Opm
|
|||||||
double WellNode::getTotalVoidageRate(const std::vector<double>& well_voidage_rates)
|
double WellNode::getTotalVoidageRate(const std::vector<double>& well_voidage_rates)
|
||||||
{
|
{
|
||||||
if (isProducer()) {
|
if (isProducer()) {
|
||||||
return well_voidage_rates[self_index_];
|
return well_voidage_rates[self_index_] * efficiencyFactor();
|
||||||
} else {
|
} else {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -1166,6 +1167,9 @@ namespace Opm
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// applying the efficiency factor
|
||||||
|
const double ntarget = target / efficiencyFactor();
|
||||||
|
|
||||||
const int np = phaseUsage().num_phases;
|
const int np = phaseUsage().num_phases;
|
||||||
// WellControls* ctrl = wells_->ctrls[self_index_];
|
// WellControls* ctrl = wells_->ctrls[self_index_];
|
||||||
// for this case, distr contains the FVF information
|
// for this case, distr contains the FVF information
|
||||||
@@ -1180,13 +1184,13 @@ namespace Opm
|
|||||||
const int invalid_vfp = -std::numeric_limits<int>::max();
|
const int invalid_vfp = -std::numeric_limits<int>::max();
|
||||||
|
|
||||||
if (group_control_index_ < 0) {
|
if (group_control_index_ < 0) {
|
||||||
append_well_controls(RESERVOIR_RATE, target, invalid_alq, invalid_vfp, &distr[0], self_index_, wells_);
|
append_well_controls(RESERVOIR_RATE, ntarget, invalid_alq, invalid_vfp, &distr[0], self_index_, wells_);
|
||||||
// TODO: basically, on group control index is not enough eventually. There can be more than one sources for the
|
// TODO: basically, on group control index is not enough eventually. There can be more than one sources for the
|
||||||
// group control
|
// group control
|
||||||
group_control_index_ = well_controls_get_num(wells_->ctrls[self_index_]) - 1;
|
group_control_index_ = well_controls_get_num(wells_->ctrls[self_index_]) - 1;
|
||||||
} else {
|
} else {
|
||||||
well_controls_iset_type(wells_->ctrls[self_index_] , group_control_index_ , RESERVOIR_RATE);
|
well_controls_iset_type(wells_->ctrls[self_index_] , group_control_index_ , RESERVOIR_RATE);
|
||||||
well_controls_iset_target(wells_->ctrls[self_index_] , group_control_index_ , target);
|
well_controls_iset_target(wells_->ctrls[self_index_] , group_control_index_ , ntarget);
|
||||||
well_controls_iset_alq(wells_->ctrls[self_index_] , group_control_index_ , -1e100);
|
well_controls_iset_alq(wells_->ctrls[self_index_] , group_control_index_ , -1e100);
|
||||||
well_controls_iset_distr(wells_->ctrls[self_index_] , group_control_index_ , &distr[0]);
|
well_controls_iset_distr(wells_->ctrls[self_index_] , group_control_index_ , &distr[0]);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user