mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
MultisegmentWell: move surfaceVolumeFraction to MultisegmentWellPrimaryVariables
This commit is contained in:
parent
2e2a49b935
commit
8e9b004cfc
@ -171,22 +171,6 @@ getWellConvergence(const WellState& well_state,
|
||||
return report;
|
||||
}
|
||||
|
||||
template<typename FluidSystem, typename Indices, typename Scalar>
|
||||
typename MultisegmentWellEval<FluidSystem,Indices,Scalar>::EvalWell
|
||||
MultisegmentWellEval<FluidSystem,Indices,Scalar>::
|
||||
surfaceVolumeFraction(const int seg,
|
||||
const int comp_idx) const
|
||||
{
|
||||
EvalWell sum_volume_fraction_scaled = 0.;
|
||||
for (int idx = 0; idx < baseif_.numComponents(); ++idx) {
|
||||
sum_volume_fraction_scaled += primary_variables_.volumeFractionScaled(seg, idx);
|
||||
}
|
||||
|
||||
assert(sum_volume_fraction_scaled.value() != 0.);
|
||||
|
||||
return primary_variables_.volumeFractionScaled(seg, comp_idx) / sum_volume_fraction_scaled;
|
||||
}
|
||||
|
||||
template<typename FluidSystem, typename Indices, typename Scalar>
|
||||
typename MultisegmentWellEval<FluidSystem,Indices,Scalar>::EvalWell
|
||||
MultisegmentWellEval<FluidSystem,Indices,Scalar>::
|
||||
@ -264,7 +248,7 @@ computeSegmentFluidProperties(const EvalWell& temperature,
|
||||
// the compostion of the components inside wellbore under surface condition
|
||||
std::vector<EvalWell> mix_s(baseif_.numComponents(), 0.0);
|
||||
for (int comp_idx = 0; comp_idx < baseif_.numComponents(); ++comp_idx) {
|
||||
mix_s[comp_idx] = surfaceVolumeFraction(seg, comp_idx);
|
||||
mix_s[comp_idx] = primary_variables_.surfaceVolumeFraction(seg, comp_idx);
|
||||
}
|
||||
|
||||
std::vector<EvalWell> b(baseif_.numComponents(), 0.0);
|
||||
@ -714,7 +698,7 @@ getSegmentSurfaceVolume(const EvalWell& temperature,
|
||||
|
||||
std::vector<EvalWell> mix_s(baseif_.numComponents(), 0.0);
|
||||
for (int comp_idx = 0; comp_idx < baseif_.numComponents(); ++comp_idx) {
|
||||
mix_s[comp_idx] = surfaceVolumeFraction(seg_idx, comp_idx);
|
||||
mix_s[comp_idx] = primary_variables_.surfaceVolumeFraction(seg_idx, comp_idx);
|
||||
}
|
||||
|
||||
std::vector<EvalWell> b(baseif_.numComponents(), 0.);
|
||||
|
@ -186,10 +186,6 @@ protected:
|
||||
const double rho,
|
||||
DeferredLogger& deferred_logger) const;
|
||||
|
||||
// basically Q_p / \sigma_p Q_p
|
||||
EvalWell surfaceVolumeFraction(const int seg,
|
||||
const int comp_idx) const;
|
||||
|
||||
// convert a Eval from reservoir to contain the derivative related to wells
|
||||
EvalWell extendEval(const Eval& in) const;
|
||||
|
||||
|
@ -305,6 +305,22 @@ volumeFractionScaled(const int seg,
|
||||
return this->volumeFraction(seg, comp_idx);
|
||||
}
|
||||
|
||||
template<class FluidSystem, class Indices, class Scalar>
|
||||
typename MultisegmentWellPrimaryVariables<FluidSystem,Indices,Scalar>::EvalWell
|
||||
MultisegmentWellPrimaryVariables<FluidSystem,Indices,Scalar>::
|
||||
surfaceVolumeFraction(const int seg,
|
||||
const int comp_idx) const
|
||||
{
|
||||
EvalWell sum_volume_fraction_scaled = 0.;
|
||||
for (int idx = 0; idx < well_.numComponents(); ++idx) {
|
||||
sum_volume_fraction_scaled += this->volumeFractionScaled(seg, idx);
|
||||
}
|
||||
|
||||
assert(sum_volume_fraction_scaled.value() != 0.);
|
||||
|
||||
return this->volumeFractionScaled(seg, comp_idx) / sum_volume_fraction_scaled;
|
||||
}
|
||||
|
||||
#define INSTANCE(...) \
|
||||
template class MultisegmentWellPrimaryVariables<BlackOilFluidSystem<double,BlackOilDefaultIndexTraits>,__VA_ARGS__,double>;
|
||||
|
||||
|
@ -99,6 +99,11 @@ public:
|
||||
EvalWell volumeFractionScaled(const int seg,
|
||||
const int compIdx) const;
|
||||
|
||||
//! \brief Returns surface volume fraction for a component in a segment.
|
||||
//! \details basically Q_p / \sigma_p Q_p
|
||||
EvalWell surfaceVolumeFraction(const int seg,
|
||||
const int compIdx) const;
|
||||
|
||||
// the values for the primary varibles
|
||||
// based on different solutioin strategies, the wells can have different primary variables
|
||||
std::vector<std::array<double, numWellEq> > value_;
|
||||
|
@ -595,7 +595,7 @@ namespace Opm
|
||||
// TODO: trying to reduce the times for the surfaceVolumeFraction calculation
|
||||
const double surface_volume = getSegmentSurfaceVolume(ebos_simulator, seg).value();
|
||||
for (int comp_idx = 0; comp_idx < this->num_components_; ++comp_idx) {
|
||||
segment_fluid_initial_[seg][comp_idx] = surface_volume * this->surfaceVolumeFraction(seg, comp_idx).value();
|
||||
segment_fluid_initial_[seg][comp_idx] = surface_volume * this->primary_variables_.surfaceVolumeFraction(seg, comp_idx).value();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -919,7 +919,7 @@ namespace Opm
|
||||
|
||||
std::vector<EvalWell> cmix_s(this->numComponents(), 0.0);
|
||||
for (int comp_idx = 0; comp_idx < this->numComponents(); ++comp_idx) {
|
||||
cmix_s[comp_idx] = this->surfaceVolumeFraction(seg, comp_idx);
|
||||
cmix_s[comp_idx] = this->primary_variables_.surfaceVolumeFraction(seg, comp_idx);
|
||||
}
|
||||
|
||||
this->computePerfRate(pressure_cell,
|
||||
@ -976,7 +976,7 @@ namespace Opm
|
||||
|
||||
std::vector<Scalar> cmix_s(this->numComponents(), 0.0);
|
||||
for (int comp_idx = 0; comp_idx < this->numComponents(); ++comp_idx) {
|
||||
cmix_s[comp_idx] = getValue(this->surfaceVolumeFraction(seg, comp_idx));
|
||||
cmix_s[comp_idx] = getValue(this->primary_variables_.surfaceVolumeFraction(seg, comp_idx));
|
||||
}
|
||||
|
||||
Scalar perf_dis_gas_rate = 0.0;
|
||||
@ -1563,7 +1563,7 @@ namespace Opm
|
||||
const Scalar regularization_factor = this->regularize_? this->param_.regularization_factor_wells_ : 1.0;
|
||||
// for each component
|
||||
for (int comp_idx = 0; comp_idx < this->num_components_; ++comp_idx) {
|
||||
const EvalWell accumulation_term = regularization_factor * (segment_surface_volume * this->surfaceVolumeFraction(seg, comp_idx)
|
||||
const EvalWell accumulation_term = regularization_factor * (segment_surface_volume * this->primary_variables_.surfaceVolumeFraction(seg, comp_idx)
|
||||
- segment_fluid_initial_[seg][comp_idx]) / dt;
|
||||
MultisegmentWellAssemble<FluidSystem,Indices,Scalar>(*this).
|
||||
assembleAccumulationTerm(seg, comp_idx, accumulation_term, this->linSys_);
|
||||
|
Loading…
Reference in New Issue
Block a user