Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions opm/simulators/wells/MultisegmentWellAssemble.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ template<class Scalar, typename IndexTraits, int numWellEq, int numEq> class Mul
template<class FluidSystem, class Indices> class MultisegmentWellPrimaryVariables;
class Schedule;
class SummaryState;
template<class FluidSystem, class Indices> class WellInterfaceIndices;
template<class FluidSystem, int numEq> class WellInterfaceIndices;
template<typename Scalar, typename IndexTraits> class WellState;

//! \brief Class handling assemble of the equation system for MultisegmentWell.
Expand All @@ -58,7 +58,7 @@ class MultisegmentWellAssemble
using EvalWell = DenseAd::Evaluation<Scalar, numWellEq+Indices::numEq>;

//! \brief Constructor initializes reference to well.
explicit MultisegmentWellAssemble(const WellInterfaceIndices<FluidSystem,Indices>& well)
explicit MultisegmentWellAssemble(const WellInterfaceIndices<FluidSystem, Indices::numEq>& well)
: well_(well)
{}

Expand Down Expand Up @@ -136,7 +136,7 @@ class MultisegmentWellAssemble
Equations& eqns) const;

private:
const WellInterfaceIndices<FluidSystem,Indices>& well_; //!< Reference to well
const WellInterfaceIndices<FluidSystem, Indices::numEq>& well_; //!< Reference to well
};

}
Expand Down
26 changes: 13 additions & 13 deletions opm/simulators/wells/MultisegmentWellEval.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ namespace Opm

template<typename FluidSystem, typename Indices>
MultisegmentWellEval<FluidSystem,Indices>::
MultisegmentWellEval(WellInterfaceIndices<FluidSystem,Indices>& baseif, const ParallelWellInfo<Scalar>& pw_info)
MultisegmentWellEval(WellInterfaceIndices<FluidSystem, Indices::numEq>& baseif, const ParallelWellInfo<Scalar>& pw_info)
: MultisegmentWellGeneric<Scalar, IndexTraits>(baseif)
, pw_info_(pw_info)
, baseif_(baseif)
Expand Down Expand Up @@ -214,12 +214,12 @@ assembleAccelerationPressureLoss(const int seg,

const int seg_upwind = segments_.upwinding_segment(seg);
// acceleration term is *subtracted* from pressure equation
MultisegmentWellAssemble(baseif_).
MultisegmentWellAssemble<FluidSystem, Indices>(baseif_).
assembleAccelerationTerm(seg, seg, seg_upwind, signed_velocity_head, linSys_);
if (seg != seg_upwind) {// special treatment for reverse flow
// extra derivatives are *added* to Jacobian (hence minus)
const EvalWell extra_derivatives = -segments_.accelerationPressureLossContribution(seg, seg_area, /*extra_derivatives*/ true);
MultisegmentWellAssemble(baseif_).
MultisegmentWellAssemble<FluidSystem, Indices>(baseif_).
assemblePressureEqExtraDerivatives(seg, seg_upwind, extra_derivatives, linSys_);
}

Expand All @@ -232,13 +232,13 @@ assembleAccelerationPressureLoss(const int seg,
segments.pressure_drop_accel[seg] -= signed_velocity_head_inlet.value();

const int inlet_upwind = segments_.upwinding_segment(inlet);
MultisegmentWellAssemble(baseif_).
MultisegmentWellAssemble<FluidSystem, Indices>(baseif_).
assembleAccelerationTerm(seg, inlet, inlet_upwind, -signed_velocity_head_inlet, linSys_);
if (inlet != inlet_upwind) {// special treatment for reverse flow
// extra derivatives are *added* to Jacobian (hence minus minus)
const EvalWell extra_derivatives_inlet = segments_.accelerationPressureLossContribution(inlet, inlet_area, /*extra_derivatives*/ true);
// in this case inlet_upwind = seg
MultisegmentWellAssemble(baseif_).
MultisegmentWellAssemble<FluidSystem, Indices>(baseif_).
assemblePressureEqExtraDerivatives(seg, inlet_upwind, extra_derivatives_inlet, linSys_);
}
}
Expand Down Expand Up @@ -269,7 +269,7 @@ assembleDefaultPressureEq(const int seg,
if (reverseFlow){
// call function once again to obtain/assemble remaining derivatives
extra_derivatives = -segments_.getFrictionPressureLoss(seg, /*extra_reverse_flow_derivatives*/ true);
MultisegmentWellAssemble(baseif_).
MultisegmentWellAssemble<FluidSystem, Indices>(baseif_).
assemblePressureEqExtraDerivatives(seg, seg_upwind, extra_derivatives, linSys_);
}
pressure_equation -= friction_pressure_drop;
Expand All @@ -281,7 +281,7 @@ assembleDefaultPressureEq(const int seg,
const int outlet_segment_index = this->segmentNumberToIndex(this->segmentSet()[seg].outletSegment());
const EvalWell outlet_pressure = primary_variables_.getSegmentPressure(outlet_segment_index);

MultisegmentWellAssemble(baseif_).
MultisegmentWellAssemble<FluidSystem, Indices>(baseif_).
assemblePressureEq(seg, seg_upwind, outlet_segment_index,
pressure_equation, outlet_pressure, linSys_);

Expand All @@ -305,7 +305,7 @@ assembleICDPressureEq(const int seg,
if (const auto& segment = this->segmentSet()[seg];
(segment.segmentType() == Segment::SegmentType::VALVE) &&
(segment.valve().status() == Opm::ICDStatus::SHUT) ) { // we use a zero rate equation to handle SHUT valve
MultisegmentWellAssemble(baseif_).
MultisegmentWellAssemble<FluidSystem, Indices>(baseif_).
assembleTrivialEq(seg, this->primary_variables_.eval(seg)[WQTotal].value(), linSys_);

auto& ws = well_state.well(baseif_.indexOfWell());
Expand Down Expand Up @@ -351,7 +351,7 @@ assembleICDPressureEq(const int seg,
}
}
if (reverseFlow){
MultisegmentWellAssemble(baseif_).
MultisegmentWellAssemble<FluidSystem, Indices>(baseif_).
assemblePressureEqExtraDerivatives(seg, seg_upwind, extra_derivatives, linSys_);
}

Expand All @@ -363,7 +363,7 @@ assembleICDPressureEq(const int seg,
const int outlet_segment_index = this->segmentNumberToIndex(this->segmentSet()[seg].outletSegment());
const EvalWell outlet_pressure = primary_variables_.getSegmentPressure(outlet_segment_index);

MultisegmentWellAssemble(baseif_).
MultisegmentWellAssemble<FluidSystem, Indices>(baseif_).
assemblePressureEq(seg, seg_upwind, outlet_segment_index,
pressure_equation, outlet_pressure,
linSys_);
Expand All @@ -388,15 +388,15 @@ assembleAccelerationAndHydroPressureLosses(const int seg,
auto& ws = well_state.well(baseif_.indexOfWell());
auto& segments = ws.segments;
if (!use_average_density){
MultisegmentWellAssemble(baseif_).
MultisegmentWellAssemble<FluidSystem, Indices>(baseif_).
assembleHydroPressureLoss(seg, seg, hydro_pressure_drop_seg, linSys_);
segments.pressure_drop_hydrostatic[seg] = hydro_pressure_drop_seg.value();
} else {
const int seg_outlet = this->segmentNumberToIndex(this->segmentSet()[seg].outletSegment());
const auto hydro_pressure_drop_outlet = segments_.getHydroPressureLoss(seg, seg_outlet);
MultisegmentWellAssemble(baseif_).
MultisegmentWellAssemble<FluidSystem, Indices>(baseif_).
assembleHydroPressureLoss(seg, seg, 0.5*hydro_pressure_drop_seg, linSys_);
MultisegmentWellAssemble(baseif_).
MultisegmentWellAssemble<FluidSystem, Indices>(baseif_).
assembleHydroPressureLoss(seg, seg_outlet, 0.5*hydro_pressure_drop_outlet, linSys_);
segments.pressure_drop_hydrostatic[seg] = 0.5*hydro_pressure_drop_seg.value() + 0.5*hydro_pressure_drop_outlet.value();
}
Expand Down
6 changes: 3 additions & 3 deletions opm/simulators/wells/MultisegmentWellEval.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ class ConvergenceReport;
class Schedule;
class SummaryState;

template<class FluidSystem, class Indices> class WellInterfaceIndices;
template<class FluidSystem, int numEq> class WellInterfaceIndices;
template<typename Scalar, typename IndexTraits> class WellState;

template<typename FluidSystem, typename Indices>
Expand Down Expand Up @@ -73,7 +73,7 @@ class MultisegmentWellEval : public MultisegmentWellGeneric<typename FluidSystem
const ParallelWellInfo<Scalar>& pw_info_;

protected:
MultisegmentWellEval(WellInterfaceIndices<FluidSystem, Indices>& baseif, const ParallelWellInfo<Scalar>& pw_info);
MultisegmentWellEval(WellInterfaceIndices<FluidSystem, Indices::numEq>& baseif, const ParallelWellInfo<Scalar>& pw_info);

void initMatrixAndVectors();

Expand Down Expand Up @@ -137,7 +137,7 @@ class MultisegmentWellEval : public MultisegmentWellGeneric<typename FluidSystem
// convert a Eval from reservoir to contain the derivative related to wells
EvalWell extendEval(const Eval& in) const;

const WellInterfaceIndices<FluidSystem,Indices>& baseif_;
const WellInterfaceIndices<FluidSystem, Indices::numEq>& baseif_;

Equations linSys_; //!< The equation system
PrimaryVariables primary_variables_; //!< The primary variables
Expand Down
6 changes: 3 additions & 3 deletions opm/simulators/wells/MultisegmentWellPrimaryVariables.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ namespace Opm

class DeferredLogger;
template <typename Scalar, typename IndexTraits> class MultisegmentWellGeneric;
template<class FluidSystem, class Indices> class WellInterfaceIndices;
template<class FluidSystem, int numEq> class WellInterfaceIndices;
template<typename Scalar, typename IndexTraits> class WellState;

template<class FluidSystem, class Indices>
Expand Down Expand Up @@ -75,7 +75,7 @@ class MultisegmentWellPrimaryVariables
using Equations = MultisegmentWellEquations<Scalar,IndexTraits,numWellEq,Indices::numEq>;
using BVectorWell = typename Equations::BVectorWell;

explicit MultisegmentWellPrimaryVariables(const WellInterfaceIndices<FluidSystem,Indices>& well)
explicit MultisegmentWellPrimaryVariables(const WellInterfaceIndices<FluidSystem, Indices::numEq>& well)
: well_(well)
{}

Expand Down Expand Up @@ -165,7 +165,7 @@ class MultisegmentWellPrimaryVariables
//! \details Contains derivatives and are used in AD calculation
std::vector<std::array<EvalWell, numWellEq>> evaluation_;

const WellInterfaceIndices<FluidSystem,Indices>& well_; //!< Reference to well interface
const WellInterfaceIndices<FluidSystem, Indices::numEq>& well_; //!< Reference to well interface

static constexpr double bhp_lower_limit = 1. * unit::barsa - 1. * unit::Pascal;
static constexpr double seg_pres_lower_limit = 0.;
Expand Down
12 changes: 6 additions & 6 deletions opm/simulators/wells/MultisegmentWell_impl.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ namespace Opm
const int index_of_well,
const std::vector<PerforationData<Scalar>>& perf_data)
: Base(well, pw_info, time_step, param, rate_converter, pvtRegionIdx, num_conservation_quantities, num_phases, index_of_well, perf_data)
, MSWEval(static_cast<WellInterfaceIndices<FluidSystem,Indices>&>(*this), pw_info)
, MSWEval(static_cast<WellInterfaceIndices<FluidSystem, Indices::numEq>&>(*this), pw_info)
, regularize_(false)
, segment_fluid_initial_(this->numberOfSegments(), std::vector<Scalar>(this->num_conservation_quantities_, 0.0))
{
Expand Down Expand Up @@ -1865,7 +1865,7 @@ namespace Opm

this->connectionRates_[local_perf_index][comp_idx] = Base::restrictEval(cq_s_effective);

MultisegmentWellAssemble(*this).
MultisegmentWellAssemble<FluidSystem, Indices>(*this).
assemblePerforationEq(seg, local_perf_index, comp_idx, cq_s_effective, this->linSys_);
}
}
Expand Down Expand Up @@ -1894,7 +1894,7 @@ namespace Opm
for (int comp_idx = 0; comp_idx < this->num_conservation_quantities_; ++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(*this).
MultisegmentWellAssemble<FluidSystem, Indices>(*this).
assembleAccumulationTerm(seg, comp_idx, accumulation_term, this->linSys_);
}
}
Expand All @@ -1907,7 +1907,7 @@ namespace Opm
seg_upwind,
comp_idx) *
this->well_efficiency_factor_;
MultisegmentWellAssemble(*this).
MultisegmentWellAssemble<FluidSystem, Indices>(*this).
assembleOutflowTerm(seg, seg_upwind, comp_idx, segment_rate, this->linSys_);
}
}
Expand All @@ -1922,7 +1922,7 @@ namespace Opm
inlet_upwind,
comp_idx) *
this->well_efficiency_factor_;
MultisegmentWellAssemble(*this).
MultisegmentWellAssemble<FluidSystem, Indices>(*this).
assembleInflowTerm(seg, inlet, inlet_upwind, comp_idx, inlet_rate, this->linSys_);
}
}
Expand All @@ -1933,7 +1933,7 @@ namespace Opm
const auto& summaryState = simulator.vanguard().summaryState();
const Schedule& schedule = simulator.vanguard().schedule();
const bool stopped_or_zero_target = this->stoppedOrZeroRateTarget(simulator, well_state, deferred_logger);
MultisegmentWellAssemble(*this).
MultisegmentWellAssemble<FluidSystem, Indices>(*this).
assembleControlEq(well_state,
group_state,
schedule,
Expand Down
2 changes: 1 addition & 1 deletion opm/simulators/wells/StandardWellConnections.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ namespace Opm

template<typename FluidSystem, typename Indices>
StandardWellConnections<FluidSystem, Indices>::
StandardWellConnections(const WellInterfaceIndices<FluidSystem, Indices>& well)
StandardWellConnections(const WellInterfaceIndices<FluidSystem, Indices::numEq>& well)
: well_(well)
, perf_densities_(well.numLocalPerfs())
, perf_pressure_diffs_(well.numLocalPerfs())
Expand Down
8 changes: 4 additions & 4 deletions opm/simulators/wells/StandardWellConnections.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ namespace Opm

class DeferredLogger;
enum class Phase;
template<typename FluidSystem, typename Indices> class WellInterfaceIndices;
template<typename FluidSystem, int numEq> class WellInterfaceIndices;
template<typename Scalar, typename IndexTraits> class WellState;
template<class Scalar> class PerfData;

Expand All @@ -46,7 +46,7 @@ class StandardWellConnections
public:
using Scalar = typename FluidSystem::Scalar;
using IndexTraits = typename FluidSystem::IndexTraitsType;
explicit StandardWellConnections(const WellInterfaceIndices<FluidSystem, Indices>& well);
explicit StandardWellConnections(const WellInterfaceIndices<FluidSystem, Indices::numEq>& well);

struct Properties
{
Expand Down Expand Up @@ -106,7 +106,7 @@ class StandardWellConnections
Scalar pressure_diff(const unsigned perf) const
{ return perf_pressure_diffs_[perf]; }

using Eval = typename WellInterfaceIndices<FluidSystem, Indices>::Eval;
using Eval = typename WellInterfaceIndices<FluidSystem, Indices::numEq>::Eval;
using EvalWell = typename StandardWellPrimaryVariables<FluidSystem, Indices>::EvalWell;

Eval connectionRateBrine(Scalar& rate,
Expand Down Expand Up @@ -168,7 +168,7 @@ class StandardWellConnections
copyInPerforationRates(const Properties& props,
const PerfData<Scalar>& perf_data) const;

const WellInterfaceIndices<FluidSystem, Indices>& well_; //!< Reference to well interface
const WellInterfaceIndices<FluidSystem, Indices::numEq>& well_; //!< Reference to well interface

std::vector<Scalar> perf_densities_; //!< densities of the fluid in each perforation
std::vector<Scalar> perf_pressure_diffs_; //!< // pressure drop between different perforations
Expand Down
2 changes: 1 addition & 1 deletion opm/simulators/wells/StandardWellEval.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ namespace Opm {

template<class FluidSystem, class Indices>
StandardWellEval<FluidSystem,Indices>::
StandardWellEval(const WellInterfaceIndices<FluidSystem,Indices>& baseif)
StandardWellEval(const WellInterfaceIndices<FluidSystem, Indices::numEq>& baseif)
: baseif_(baseif)
, primary_variables_(baseif_)
, F0_(numWellConservationEq)
Expand Down
6 changes: 3 additions & 3 deletions opm/simulators/wells/StandardWellEval.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ class DeferredLogger;
class Schedule;
class SummaryState;
template<class Scalar> class WellContributions;
template<class FluidSystem, class Indices> class WellInterfaceIndices;
template<class FluidSystem, int numEq> class WellInterfaceIndices;
template<typename FluidSystem, typename Indices> class WellState;

template<class FluidSystem, class Indices>
Expand Down Expand Up @@ -69,9 +69,9 @@ class StandardWellEval
{ return linSys_; }

protected:
explicit StandardWellEval(const WellInterfaceIndices<FluidSystem,Indices>& baseif);
explicit StandardWellEval(const WellInterfaceIndices<FluidSystem, Indices::numEq>& baseif);

const WellInterfaceIndices<FluidSystem,Indices>& baseif_;
const WellInterfaceIndices<FluidSystem, Indices::numEq>& baseif_;

EvalWell extendEval(const Eval& in) const;

Expand Down
6 changes: 3 additions & 3 deletions opm/simulators/wells/StandardWellPrimaryVariables.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ namespace Opm
{

class DeferredLogger;
template<class FluidSystem, class Indices> class WellInterfaceIndices;
template<class FluidSystem, int numEq> class WellInterfaceIndices;
template<typename Scalar, typename IndexTraits> class WellState;

//! \brief Class holding primary variables for StandardWell.
Expand Down Expand Up @@ -89,7 +89,7 @@ class StandardWellPrimaryVariables {
using BVectorWell = typename StandardWellEquations<Scalar, IndexTraits, Indices::numEq>::BVectorWell;

//! \brief Constructor initializes reference to well interface.
explicit StandardWellPrimaryVariables(const WellInterfaceIndices<FluidSystem,Indices>& well)
explicit StandardWellPrimaryVariables(const WellInterfaceIndices<FluidSystem, Indices::numEq>& well)
: well_(well)
{}

Expand Down Expand Up @@ -171,7 +171,7 @@ class StandardWellPrimaryVariables {
//! \details Contain derivatives and are used in AD calculation
std::vector<EvalWell> evaluation_;

const WellInterfaceIndices<FluidSystem,Indices>& well_; //!< Reference to well interface
const WellInterfaceIndices<FluidSystem, Indices::numEq>& well_; //!< Reference to well interface

//! \brief Total number of the well equations and primary variables.
//! \details There might be extra equations be used, numWellEq will be updated during the initialization
Expand Down
2 changes: 1 addition & 1 deletion opm/simulators/wells/StandardWell_impl.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ namespace Opm
const int index_of_well,
const std::vector<PerforationData<Scalar>>& perf_data)
: Base(well, pw_info, time_step, param, rate_converter, pvtRegionIdx, num_conservation_quantities, num_phases, index_of_well, perf_data)
, StdWellEval(static_cast<const WellInterfaceIndices<FluidSystem,Indices>&>(*this))
, StdWellEval(static_cast<const WellInterfaceIndices<FluidSystem, Indices::numEq>&>(*this))
, regularize_(false)
{
assert(this->num_conservation_quantities_ == numWellConservationEq);
Expand Down
4 changes: 2 additions & 2 deletions opm/simulators/wells/WellInterface.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -72,10 +72,10 @@ class WellProductionProperties;

template<typename TypeTag>
class WellInterface : public WellInterfaceIndices<GetPropType<TypeTag, Properties::FluidSystem>,
GetPropType<TypeTag, Properties::Indices>>
GetPropType<TypeTag, Properties::Indices>::numEq>
{
using Base = WellInterfaceIndices<GetPropType<TypeTag, Properties::FluidSystem>,
GetPropType<TypeTag, Properties::Indices>>;
GetPropType<TypeTag, Properties::Indices>::numEq>;
public:
using Grid = GetPropType<TypeTag, Properties::Grid>;
using Simulator = GetPropType<TypeTag, Properties::Simulator>;
Expand Down
Loading