mirror of
https://github.com/OPM/opm-simulators.git
synced 2025-02-25 18:55:30 -06:00
Support for saturation table for each well completion
Compute relperms for each well completion based on saturation table ids (satnums) Does not work in combination with hysteresis.
This commit is contained in:
parent
431abb0012
commit
cd564ade5f
@ -163,7 +163,7 @@ namespace Opm {
|
|||||||
const ModelParameters& param,
|
const ModelParameters& param,
|
||||||
const BlackoilPropsAdFromDeck& fluid,
|
const BlackoilPropsAdFromDeck& fluid,
|
||||||
const DerivedGeology& geo ,
|
const DerivedGeology& geo ,
|
||||||
const StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>& well_model,
|
const StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>& well_model,
|
||||||
const NewtonIterationBlackoilInterface& linsolver,
|
const NewtonIterationBlackoilInterface& linsolver,
|
||||||
const bool terminal_output)
|
const bool terminal_output)
|
||||||
: ebosSimulator_(ebosSimulator)
|
: ebosSimulator_(ebosSimulator)
|
||||||
@ -1428,7 +1428,7 @@ namespace Opm {
|
|||||||
ModelParameters param_;
|
ModelParameters param_;
|
||||||
|
|
||||||
// Well Model
|
// Well Model
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext> well_model_;
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw> well_model_;
|
||||||
|
|
||||||
/// \brief Whether we print something to std::cout
|
/// \brief Whether we print something to std::cout
|
||||||
bool terminal_output_;
|
bool terminal_output_;
|
||||||
@ -1446,9 +1446,9 @@ namespace Opm {
|
|||||||
public:
|
public:
|
||||||
|
|
||||||
/// return the StandardWells object
|
/// return the StandardWells object
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>&
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>&
|
||||||
wellModel() { return well_model_; }
|
wellModel() { return well_model_; }
|
||||||
const StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>&
|
const StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>&
|
||||||
wellModel() const { return well_model_; }
|
wellModel() const { return well_model_; }
|
||||||
|
|
||||||
/// return the Well struct in the StandardWells
|
/// return the Well struct in the StandardWells
|
||||||
|
@ -57,6 +57,8 @@ public:
|
|||||||
typedef typename GET_PROP_TYPE(TypeTag, FluidSystem) FluidSystem;
|
typedef typename GET_PROP_TYPE(TypeTag, FluidSystem) FluidSystem;
|
||||||
typedef typename GET_PROP_TYPE(TypeTag, ElementContext) ElementContext;
|
typedef typename GET_PROP_TYPE(TypeTag, ElementContext) ElementContext;
|
||||||
typedef typename GET_PROP_TYPE(TypeTag, Indices) BlackoilIndices;
|
typedef typename GET_PROP_TYPE(TypeTag, Indices) BlackoilIndices;
|
||||||
|
typedef typename GET_PROP_TYPE(TypeTag, MaterialLaw) MaterialLaw;
|
||||||
|
|
||||||
|
|
||||||
typedef WellStateFullyImplicitBlackoilDense WellState;
|
typedef WellStateFullyImplicitBlackoilDense WellState;
|
||||||
typedef BlackoilState ReservoirState;
|
typedef BlackoilState ReservoirState;
|
||||||
@ -64,7 +66,7 @@ public:
|
|||||||
typedef BlackoilModelEbos Model;
|
typedef BlackoilModelEbos Model;
|
||||||
typedef BlackoilModelParameters ModelParameters;
|
typedef BlackoilModelParameters ModelParameters;
|
||||||
typedef NonlinearSolver<Model> Solver;
|
typedef NonlinearSolver<Model> Solver;
|
||||||
typedef StandardWellsDense<FluidSystem, BlackoilIndices,ElementContext> WellModel;
|
typedef StandardWellsDense<FluidSystem, BlackoilIndices,ElementContext,MaterialLaw> WellModel;
|
||||||
|
|
||||||
|
|
||||||
/// Initialise from parameters and objects to observe.
|
/// Initialise from parameters and objects to observe.
|
||||||
|
@ -67,7 +67,7 @@ enum WellVariablePositions {
|
|||||||
|
|
||||||
|
|
||||||
/// Class for handling the standard well model.
|
/// Class for handling the standard well model.
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
class StandardWellsDense {
|
class StandardWellsDense {
|
||||||
public:
|
public:
|
||||||
// --------- Types ---------
|
// --------- Types ---------
|
||||||
@ -114,6 +114,13 @@ enum WellVariablePositions {
|
|||||||
WellState& well_state,
|
WellState& well_state,
|
||||||
bool only_wells);
|
bool only_wells);
|
||||||
|
|
||||||
|
template <typename Simulator>
|
||||||
|
void
|
||||||
|
getMobility(const Simulator& ebosSimulator,
|
||||||
|
const int perf,
|
||||||
|
const int cell_idx,
|
||||||
|
std::vector<EvalWell>& mob) const;
|
||||||
|
|
||||||
template <typename Simulator>
|
template <typename Simulator>
|
||||||
bool allow_cross_flow(const int w, Simulator& ebosSimulator) const;
|
bool allow_cross_flow(const int w, Simulator& ebosSimulator) const;
|
||||||
|
|
||||||
@ -180,9 +187,9 @@ enum WellVariablePositions {
|
|||||||
|
|
||||||
void computeAccumWells();
|
void computeAccumWells();
|
||||||
|
|
||||||
template<typename intensiveQuants>
|
template<typename FluidState>
|
||||||
void
|
void
|
||||||
computeWellFlux(const int& w, const double& Tw, const intensiveQuants& intQuants,
|
computeWellFlux(const int& w, const double& Tw, const FluidState& fs, const std::vector<EvalWell>& mob_perfcells_dense,
|
||||||
const EvalWell& bhp, const double& cdp, const bool& allow_cf, std::vector<EvalWell>& cq_s) const;
|
const EvalWell& bhp, const double& cdp, const bool& allow_cf, std::vector<EvalWell>& cq_s) const;
|
||||||
|
|
||||||
template <typename Simulator>
|
template <typename Simulator>
|
||||||
|
@ -3,8 +3,8 @@
|
|||||||
|
|
||||||
namespace Opm {
|
namespace Opm {
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
StandardWellsDense(const Wells* wells_arg,
|
StandardWellsDense(const Wells* wells_arg,
|
||||||
WellCollection* well_collection,
|
WellCollection* well_collection,
|
||||||
const ModelParameters& param,
|
const ModelParameters& param,
|
||||||
@ -32,9 +32,9 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
void
|
void
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
init(const PhaseUsage phase_usage_arg,
|
init(const PhaseUsage phase_usage_arg,
|
||||||
const std::vector<bool>& active_arg,
|
const std::vector<bool>& active_arg,
|
||||||
const VFPProperties* vfp_properties_arg,
|
const VFPProperties* vfp_properties_arg,
|
||||||
@ -120,10 +120,10 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
template <typename Simulator>
|
template <typename Simulator>
|
||||||
SimulatorReport
|
SimulatorReport
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
assemble(Simulator& ebosSimulator,
|
assemble(Simulator& ebosSimulator,
|
||||||
const int iterationIdx,
|
const int iterationIdx,
|
||||||
const double dt,
|
const double dt,
|
||||||
@ -162,10 +162,10 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
template <typename Simulator>
|
template <typename Simulator>
|
||||||
void
|
void
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
assembleWellEq(Simulator& ebosSimulator,
|
assembleWellEq(Simulator& ebosSimulator,
|
||||||
const double dt,
|
const double dt,
|
||||||
WellState& well_state,
|
WellState& well_state,
|
||||||
@ -192,7 +192,10 @@ namespace Opm {
|
|||||||
const int cell_idx = wells().well_cells[perf];
|
const int cell_idx = wells().well_cells[perf];
|
||||||
const auto& intQuants = *(ebosSimulator.model().cachedIntensiveQuantities(cell_idx, /*timeIdx=*/0));
|
const auto& intQuants = *(ebosSimulator.model().cachedIntensiveQuantities(cell_idx, /*timeIdx=*/0));
|
||||||
std::vector<EvalWell> cq_s(np,0.0);
|
std::vector<EvalWell> cq_s(np,0.0);
|
||||||
computeWellFlux(w, wells().WI[perf], intQuants, bhp, wellPerforationPressureDiffs()[perf], allow_cf, cq_s);
|
|
||||||
|
std::vector<EvalWell> mob(np, 0.0);
|
||||||
|
getMobility(ebosSimulator, perf, cell_idx, mob);
|
||||||
|
computeWellFlux(w, wells().WI[perf], intQuants.fluidState(), mob, bhp, wellPerforationPressureDiffs()[perf], allow_cf, cq_s);
|
||||||
|
|
||||||
for (int p1 = 0; p1 < np; ++p1) {
|
for (int p1 = 0; p1 < np; ++p1) {
|
||||||
|
|
||||||
@ -249,13 +252,51 @@ namespace Opm {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
|
template <typename Simulator>
|
||||||
|
void
|
||||||
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
|
getMobility(const Simulator& ebosSimulator, const int perf, const int cell_idx, std::vector<EvalWell>& mob) const
|
||||||
|
{
|
||||||
|
|
||||||
|
const int np = wells().number_of_phases;
|
||||||
|
assert (mob.size() == np);
|
||||||
|
const auto& intQuants = *(ebosSimulator.model().cachedIntensiveQuantities(cell_idx, /*timeIdx=*/0));
|
||||||
|
const auto& materialLawManager = ebosSimulator.problem().materialLawManager();
|
||||||
|
|
||||||
|
// either use mobility of the perforation cell or calcualte its own
|
||||||
|
// based on passing the saturation table index
|
||||||
|
const int satid = wells().sat_table_id[perf] - 1;
|
||||||
|
const int satid_elem = materialLawManager->satnumRegionIdx(cell_idx);
|
||||||
|
if( satid == satid_elem ) { // the same saturation number is used. i.e. just use the mobilty from the cell
|
||||||
|
|
||||||
|
for (int phase = 0; phase < np; ++phase) {
|
||||||
|
int ebosPhaseIdx = flowPhaseToEbosPhaseIdx(phase);
|
||||||
|
mob[phase] = extendEval(intQuants.mobility(ebosPhaseIdx));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
|
||||||
|
const auto& paramsCell = materialLawManager->connectionMaterialLawParams(satid, cell_idx);
|
||||||
|
Eval relativePerms[3];
|
||||||
|
MaterialLaw::relativePermeabilities(relativePerms, paramsCell, intQuants.fluidState());
|
||||||
|
|
||||||
|
// reset the satnumvalue back to original
|
||||||
|
materialLawManager->connectionMaterialLawParams(satid_elem, cell_idx);
|
||||||
|
|
||||||
|
// compute the mobility
|
||||||
|
for (int phase = 0; phase < np; ++phase) {
|
||||||
|
int ebosPhaseIdx = flowPhaseToEbosPhaseIdx(phase);
|
||||||
|
mob[phase] = extendEval(relativePerms[ebosPhaseIdx] / intQuants.fluidState().viscosity(ebosPhaseIdx));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
template <typename Simulator>
|
template <typename Simulator>
|
||||||
bool
|
bool
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
allow_cross_flow(const int w, Simulator& ebosSimulator) const
|
allow_cross_flow(const int w, Simulator& ebosSimulator) const
|
||||||
{
|
{
|
||||||
if (wells().allow_cf[w]) {
|
if (wells().allow_cf[w]) {
|
||||||
@ -290,9 +331,9 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
void
|
void
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
localInvert(Mat& istlA) const
|
localInvert(Mat& istlA) const
|
||||||
{
|
{
|
||||||
for (auto row = istlA.begin(), rowend = istlA.end(); row != rowend; ++row ) {
|
for (auto row = istlA.begin(), rowend = istlA.end(); row != rowend; ++row ) {
|
||||||
@ -307,9 +348,9 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
void
|
void
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
print(Mat& istlA) const
|
print(Mat& istlA) const
|
||||||
{
|
{
|
||||||
for (auto row = istlA.begin(), rowend = istlA.end(); row != rowend; ++row ) {
|
for (auto row = istlA.begin(), rowend = istlA.end(); row != rowend; ++row ) {
|
||||||
@ -323,9 +364,9 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
void
|
void
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
apply( BVector& r) const
|
apply( BVector& r) const
|
||||||
{
|
{
|
||||||
if ( ! localWellsActive() ) {
|
if ( ! localWellsActive() ) {
|
||||||
@ -342,9 +383,9 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
void
|
void
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
apply(const BVector& x, BVector& Ax)
|
apply(const BVector& x, BVector& Ax)
|
||||||
{
|
{
|
||||||
if ( ! localWellsActive() ) {
|
if ( ! localWellsActive() ) {
|
||||||
@ -365,9 +406,9 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
void
|
void
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
applyScaleAdd(const Scalar alpha, const BVector& x, BVector& Ax)
|
applyScaleAdd(const Scalar alpha, const BVector& x, BVector& Ax)
|
||||||
{
|
{
|
||||||
if ( ! localWellsActive() ) {
|
if ( ! localWellsActive() ) {
|
||||||
@ -387,9 +428,9 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
void
|
void
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
recoverVariable(const BVector& x, BVector& xw) const
|
recoverVariable(const BVector& x, BVector& xw) const
|
||||||
{
|
{
|
||||||
if ( ! localWellsActive() ) {
|
if ( ! localWellsActive() ) {
|
||||||
@ -404,9 +445,9 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
int
|
int
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
flowPhaseToEbosCompIdx( const int phaseIdx ) const
|
flowPhaseToEbosCompIdx( const int phaseIdx ) const
|
||||||
{
|
{
|
||||||
const int phaseToComp[ 3 ] = { FluidSystem::waterCompIdx, FluidSystem::oilCompIdx, FluidSystem::gasCompIdx };
|
const int phaseToComp[ 3 ] = { FluidSystem::waterCompIdx, FluidSystem::oilCompIdx, FluidSystem::gasCompIdx };
|
||||||
@ -417,9 +458,9 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
int
|
int
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
flowToEbosPvIdx( const int flowPv ) const
|
flowToEbosPvIdx( const int flowPv ) const
|
||||||
{
|
{
|
||||||
const int flowToEbos[ 3 ] = {
|
const int flowToEbos[ 3 ] = {
|
||||||
@ -434,9 +475,9 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
int
|
int
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
flowPhaseToEbosPhaseIdx( const int phaseIdx ) const
|
flowPhaseToEbosPhaseIdx( const int phaseIdx ) const
|
||||||
{
|
{
|
||||||
const int flowToEbos[ 3 ] = { FluidSystem::waterPhaseIdx, FluidSystem::oilPhaseIdx, FluidSystem::gasPhaseIdx };
|
const int flowToEbos[ 3 ] = { FluidSystem::waterPhaseIdx, FluidSystem::oilPhaseIdx, FluidSystem::gasPhaseIdx };
|
||||||
@ -447,9 +488,9 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
int
|
int
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
ebosCompToFlowPhaseIdx( const int compIdx ) const
|
ebosCompToFlowPhaseIdx( const int compIdx ) const
|
||||||
{
|
{
|
||||||
const int compToPhase[ 3 ] = { Oil, Water, Gas };
|
const int compToPhase[ 3 ] = { Oil, Water, Gas };
|
||||||
@ -460,9 +501,9 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
std::vector<double>
|
std::vector<double>
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
extractPerfData(const std::vector<double>& in) const
|
extractPerfData(const std::vector<double>& in) const
|
||||||
{
|
{
|
||||||
const int nw = wells().number_of_wells;
|
const int nw = wells().number_of_wells;
|
||||||
@ -481,9 +522,9 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
int
|
int
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
numPhases() const
|
numPhases() const
|
||||||
{
|
{
|
||||||
return wells().number_of_phases;
|
return wells().number_of_phases;
|
||||||
@ -493,9 +534,9 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
int
|
int
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
numCells() const
|
numCells() const
|
||||||
{
|
{
|
||||||
return pv_.size();
|
return pv_.size();
|
||||||
@ -505,9 +546,9 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
void
|
void
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
resetWellControlFromState(WellState xw) const
|
resetWellControlFromState(WellState xw) const
|
||||||
{
|
{
|
||||||
const int nw = wells_->number_of_wells;
|
const int nw = wells_->number_of_wells;
|
||||||
@ -521,9 +562,9 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
const Wells&
|
const Wells&
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
wells() const
|
wells() const
|
||||||
{
|
{
|
||||||
assert(wells_ != 0);
|
assert(wells_ != 0);
|
||||||
@ -534,9 +575,9 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
const Wells*
|
const Wells*
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
wellsPointer() const
|
wellsPointer() const
|
||||||
{
|
{
|
||||||
return wells_;
|
return wells_;
|
||||||
@ -546,9 +587,9 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
bool
|
bool
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
wellsActive() const
|
wellsActive() const
|
||||||
{
|
{
|
||||||
return wells_active_;
|
return wells_active_;
|
||||||
@ -558,9 +599,9 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
void
|
void
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
setWellsActive(const bool wells_active)
|
setWellsActive(const bool wells_active)
|
||||||
{
|
{
|
||||||
wells_active_ = wells_active;
|
wells_active_ = wells_active;
|
||||||
@ -570,9 +611,9 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
bool
|
bool
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
localWellsActive() const
|
localWellsActive() const
|
||||||
{
|
{
|
||||||
return wells_ ? (wells_->number_of_wells > 0 ) : false;
|
return wells_ ? (wells_->number_of_wells > 0 ) : false;
|
||||||
@ -582,9 +623,9 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
int
|
int
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
numWellVars() const
|
numWellVars() const
|
||||||
{
|
{
|
||||||
if ( !localWellsActive() ) {
|
if ( !localWellsActive() ) {
|
||||||
@ -600,9 +641,9 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
const std::vector<double>&
|
const std::vector<double>&
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
wellPerforationDensities() const
|
wellPerforationDensities() const
|
||||||
{
|
{
|
||||||
return well_perforation_densities_;
|
return well_perforation_densities_;
|
||||||
@ -612,9 +653,9 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
const std::vector<double>&
|
const std::vector<double>&
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
wellPerforationPressureDiffs() const
|
wellPerforationPressureDiffs() const
|
||||||
{
|
{
|
||||||
return well_perforation_pressure_diffs_;
|
return well_perforation_pressure_diffs_;
|
||||||
@ -624,9 +665,9 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
typename StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::EvalWell
|
typename StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::EvalWell
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
extendEval(Eval in) const {
|
extendEval(Eval in) const {
|
||||||
EvalWell out = 0.0;
|
EvalWell out = 0.0;
|
||||||
out.setValue(in.value());
|
out.setValue(in.value());
|
||||||
@ -640,9 +681,9 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
void
|
void
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
setWellVariables(const WellState& xw)
|
setWellVariables(const WellState& xw)
|
||||||
{
|
{
|
||||||
const int np = wells().number_of_phases;
|
const int np = wells().number_of_phases;
|
||||||
@ -660,9 +701,9 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
void
|
void
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
print(EvalWell in) const
|
print(EvalWell in) const
|
||||||
{
|
{
|
||||||
std::cout << in.value() << std::endl;
|
std::cout << in.value() << std::endl;
|
||||||
@ -675,9 +716,9 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
void
|
void
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
computeAccumWells()
|
computeAccumWells()
|
||||||
{
|
{
|
||||||
const int np = wells().number_of_phases;
|
const int np = wells().number_of_phases;
|
||||||
@ -693,12 +734,13 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
template<typename intensiveQuants>
|
template<typename FluidState>
|
||||||
void
|
void
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
computeWellFlux(const int& w, const double& Tw,
|
computeWellFlux(const int& w, const double& Tw,
|
||||||
const intensiveQuants& intQuants,
|
const FluidState& fs,
|
||||||
|
const std::vector<EvalWell>& mob_perfcells_dense,
|
||||||
const EvalWell& bhp, const double& cdp,
|
const EvalWell& bhp, const double& cdp,
|
||||||
const bool& allow_cf, std::vector<EvalWell>& cq_s) const
|
const bool& allow_cf, std::vector<EvalWell>& cq_s) const
|
||||||
{
|
{
|
||||||
@ -710,16 +752,13 @@ namespace Opm {
|
|||||||
cmix_s[phase] = wellSurfaceVolumeFraction(w, phase);
|
cmix_s[phase] = wellSurfaceVolumeFraction(w, phase);
|
||||||
}
|
}
|
||||||
|
|
||||||
const auto& fs = intQuants.fluidState();
|
|
||||||
EvalWell pressure = extendEval(fs.pressure(FluidSystem::oilPhaseIdx));
|
EvalWell pressure = extendEval(fs.pressure(FluidSystem::oilPhaseIdx));
|
||||||
EvalWell rs = extendEval(fs.Rs());
|
EvalWell rs = extendEval(fs.Rs());
|
||||||
EvalWell rv = extendEval(fs.Rv());
|
EvalWell rv = extendEval(fs.Rv());
|
||||||
std::vector<EvalWell> b_perfcells_dense(np, 0.0);
|
std::vector<EvalWell> b_perfcells_dense(np, 0.0);
|
||||||
std::vector<EvalWell> mob_perfcells_dense(np, 0.0);
|
|
||||||
for (int phase = 0; phase < np; ++phase) {
|
for (int phase = 0; phase < np; ++phase) {
|
||||||
int ebosPhaseIdx = flowPhaseToEbosPhaseIdx(phase);
|
int ebosPhaseIdx = flowPhaseToEbosPhaseIdx(phase);
|
||||||
b_perfcells_dense[phase] = extendEval(fs.invB(ebosPhaseIdx));
|
b_perfcells_dense[phase] = extendEval(fs.invB(ebosPhaseIdx));
|
||||||
mob_perfcells_dense[phase] = extendEval(intQuants.mobility(ebosPhaseIdx));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pressure drawdown (also used to determine direction of flow)
|
// Pressure drawdown (also used to determine direction of flow)
|
||||||
@ -823,10 +862,10 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
template <typename Simulator>
|
template <typename Simulator>
|
||||||
SimulatorReport
|
SimulatorReport
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
solveWellEq(Simulator& ebosSimulator,
|
solveWellEq(Simulator& ebosSimulator,
|
||||||
const double dt,
|
const double dt,
|
||||||
WellState& well_state)
|
WellState& well_state)
|
||||||
@ -875,9 +914,9 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
void
|
void
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
printIf(const int c, const double x, const double y, const double eps, const std::string type) const
|
printIf(const int c, const double x, const double y, const double eps, const std::string type) const
|
||||||
{
|
{
|
||||||
if (std::abs(x-y) > eps) {
|
if (std::abs(x-y) > eps) {
|
||||||
@ -889,9 +928,9 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
std::vector<double>
|
std::vector<double>
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
residual() const
|
residual() const
|
||||||
{
|
{
|
||||||
if( ! wellsActive() )
|
if( ! wellsActive() )
|
||||||
@ -916,10 +955,10 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
template <typename Simulator>
|
template <typename Simulator>
|
||||||
bool
|
bool
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
getWellConvergence(Simulator& ebosSimulator,
|
getWellConvergence(Simulator& ebosSimulator,
|
||||||
const int iteration) const
|
const int iteration) const
|
||||||
{
|
{
|
||||||
@ -1029,10 +1068,10 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
template <typename Simulator>
|
template <typename Simulator>
|
||||||
void
|
void
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
computeWellConnectionPressures(const Simulator& ebosSimulator,
|
computeWellConnectionPressures(const Simulator& ebosSimulator,
|
||||||
const WellState& xw)
|
const WellState& xw)
|
||||||
{
|
{
|
||||||
@ -1053,10 +1092,10 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
template <typename Simulator>
|
template <typename Simulator>
|
||||||
void
|
void
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
computePropertiesForWellConnectionPressures(const Simulator& ebosSimulator,
|
computePropertiesForWellConnectionPressures(const Simulator& ebosSimulator,
|
||||||
const WellState& xw,
|
const WellState& xw,
|
||||||
std::vector<double>& b_perf,
|
std::vector<double>& b_perf,
|
||||||
@ -1156,9 +1195,9 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
void
|
void
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
updateWellState(const BVector& dwells,
|
updateWellState(const BVector& dwells,
|
||||||
WellState& well_state) const
|
WellState& well_state) const
|
||||||
{
|
{
|
||||||
@ -1428,9 +1467,9 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
void
|
void
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
updateWellControls(WellState& xw) const
|
updateWellControls(WellState& xw) const
|
||||||
{
|
{
|
||||||
if( !localWellsActive() ) return ;
|
if( !localWellsActive() ) return ;
|
||||||
@ -1524,9 +1563,9 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
void
|
void
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
updateListEconLimited(const Schedule& schedule,
|
updateListEconLimited(const Schedule& schedule,
|
||||||
const int current_step,
|
const int current_step,
|
||||||
const Wells* wells_struct,
|
const Wells* wells_struct,
|
||||||
@ -1632,9 +1671,9 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
void
|
void
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
computeWellConnectionDensitesPressures(const WellState& xw,
|
computeWellConnectionDensitesPressures(const WellState& xw,
|
||||||
const std::vector<double>& b_perf,
|
const std::vector<double>& b_perf,
|
||||||
const std::vector<double>& rsmax_perf,
|
const std::vector<double>& rsmax_perf,
|
||||||
@ -1659,10 +1698,10 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
template <typename Simulator>
|
template <typename Simulator>
|
||||||
void
|
void
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
computeWellPotentials(const Simulator& ebosSimulator,
|
computeWellPotentials(const Simulator& ebosSimulator,
|
||||||
WellState& well_state) const
|
WellState& well_state) const
|
||||||
{
|
{
|
||||||
@ -1781,7 +1820,9 @@ namespace Opm {
|
|||||||
const int cell_index = wells().well_cells[perf];
|
const int cell_index = wells().well_cells[perf];
|
||||||
const auto& intQuants = *(ebosSimulator.model().cachedIntensiveQuantities(cell_index, /*timeIdx=*/ 0));
|
const auto& intQuants = *(ebosSimulator.model().cachedIntensiveQuantities(cell_index, /*timeIdx=*/ 0));
|
||||||
std::vector<EvalWell> well_potentials(np, 0.0);
|
std::vector<EvalWell> well_potentials(np, 0.0);
|
||||||
computeWellFlux(w, wells().WI[perf], intQuants, bhp, wellPerforationPressureDiffs()[perf], allow_cf, well_potentials);
|
std::vector<EvalWell> mob(np, 0.0);
|
||||||
|
getMobility(ebosSimulator, perf, cell_index, mob);
|
||||||
|
computeWellFlux(w, wells().WI[perf], intQuants.fluidState(), mob, bhp, wellPerforationPressureDiffs()[perf], allow_cf, well_potentials);
|
||||||
for(int p = 0; p < np; ++p) {
|
for(int p = 0; p < np; ++p) {
|
||||||
well_state.wellPotentials()[perf * np + p] = well_potentials[p].value();
|
well_state.wellPotentials()[perf * np + p] = well_potentials[p].value();
|
||||||
}
|
}
|
||||||
@ -1793,9 +1834,9 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
WellCollection*
|
WellCollection*
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
wellCollection() const
|
wellCollection() const
|
||||||
{
|
{
|
||||||
return well_collection_;
|
return well_collection_;
|
||||||
@ -1804,9 +1845,9 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
const std::vector<double>&
|
const std::vector<double>&
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
wellPerfEfficiencyFactors() const
|
wellPerfEfficiencyFactors() const
|
||||||
{
|
{
|
||||||
return well_perforation_efficiency_factors_;
|
return well_perforation_efficiency_factors_;
|
||||||
@ -1816,9 +1857,9 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
void
|
void
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
calculateEfficiencyFactors()
|
calculateEfficiencyFactors()
|
||||||
{
|
{
|
||||||
if ( !localWellsActive() ) {
|
if ( !localWellsActive() ) {
|
||||||
@ -1844,9 +1885,9 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
void
|
void
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
computeWellVoidageRates(const WellState& well_state,
|
computeWellVoidageRates(const WellState& well_state,
|
||||||
std::vector<double>& well_voidage_rates,
|
std::vector<double>& well_voidage_rates,
|
||||||
std::vector<double>& voidage_conversion_coeffs) const
|
std::vector<double>& voidage_conversion_coeffs) const
|
||||||
@ -1904,9 +1945,9 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
void
|
void
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
applyVREPGroupControl(WellState& well_state) const
|
applyVREPGroupControl(WellState& well_state) const
|
||||||
{
|
{
|
||||||
if ( wellCollection()->havingVREPGroups() ) {
|
if ( wellCollection()->havingVREPGroups() ) {
|
||||||
@ -1929,9 +1970,9 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
typename StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::EvalWell
|
typename StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::EvalWell
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
getBhp(const int wellIdx) const {
|
getBhp(const int wellIdx) const {
|
||||||
const WellControls* wc = wells().ctrls[wellIdx];
|
const WellControls* wc = wells().ctrls[wellIdx];
|
||||||
if (well_controls_get_current_type(wc) == BHP) {
|
if (well_controls_get_current_type(wc) == BHP) {
|
||||||
@ -1985,9 +2026,9 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
typename StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::EvalWell
|
typename StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::EvalWell
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
getQs(const int wellIdx, const int phaseIdx) const
|
getQs(const int wellIdx, const int phaseIdx) const
|
||||||
{
|
{
|
||||||
EvalWell qs = 0.0;
|
EvalWell qs = 0.0;
|
||||||
@ -2088,9 +2129,9 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
typename StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::EvalWell
|
typename StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::EvalWell
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
wellVolumeFraction(const int wellIdx, const int phaseIdx) const
|
wellVolumeFraction(const int wellIdx, const int phaseIdx) const
|
||||||
{
|
{
|
||||||
const int nw = wells().number_of_wells;
|
const int nw = wells().number_of_wells;
|
||||||
@ -2118,9 +2159,9 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
typename StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::EvalWell
|
typename StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::EvalWell
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
wellVolumeFractionScaled(const int wellIdx, const int phaseIdx) const
|
wellVolumeFractionScaled(const int wellIdx, const int phaseIdx) const
|
||||||
{
|
{
|
||||||
const WellControls* wc = wells().ctrls[wellIdx];
|
const WellControls* wc = wells().ctrls[wellIdx];
|
||||||
@ -2136,9 +2177,9 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
typename StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::EvalWell
|
typename StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::EvalWell
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
wellSurfaceVolumeFraction(const int well_index, const int phase) const
|
wellSurfaceVolumeFraction(const int well_index, const int phase) const
|
||||||
{
|
{
|
||||||
EvalWell sum_volume_fraction_scaled = 0.;
|
EvalWell sum_volume_fraction_scaled = 0.;
|
||||||
@ -2156,9 +2197,9 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
bool
|
bool
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
checkRateEconLimits(const WellEconProductionLimits& econ_production_limits,
|
checkRateEconLimits(const WellEconProductionLimits& econ_production_limits,
|
||||||
const WellState& well_state,
|
const WellState& well_state,
|
||||||
const int well_number) const
|
const int well_number) const
|
||||||
@ -2207,9 +2248,9 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
typename StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::RatioCheckTuple
|
typename StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::RatioCheckTuple
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
checkRatioEconLimits(const WellEconProductionLimits& econ_production_limits,
|
checkRatioEconLimits(const WellEconProductionLimits& econ_production_limits,
|
||||||
const WellState& well_state,
|
const WellState& well_state,
|
||||||
const WellMapEntryType& map_entry) const
|
const WellMapEntryType& map_entry) const
|
||||||
@ -2265,9 +2306,9 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
typename StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::RatioCheckTuple
|
typename StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::RatioCheckTuple
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
checkMaxWaterCutLimit(const WellEconProductionLimits& econ_production_limits,
|
checkMaxWaterCutLimit(const WellEconProductionLimits& econ_production_limits,
|
||||||
const WellState& well_state,
|
const WellState& well_state,
|
||||||
const WellMapEntryType& map_entry) const
|
const WellMapEntryType& map_entry) const
|
||||||
@ -2345,9 +2386,9 @@ namespace Opm {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext>
|
template<typename FluidSystem, typename BlackoilIndices, typename ElementContext, typename MaterialLaw>
|
||||||
void
|
void
|
||||||
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext>::
|
StandardWellsDense<FluidSystem, BlackoilIndices, ElementContext, MaterialLaw>::
|
||||||
updateWellStateWithTarget(const WellControls* wc,
|
updateWellStateWithTarget(const WellControls* wc,
|
||||||
const int current,
|
const int current,
|
||||||
const int well_index,
|
const int well_index,
|
||||||
|
@ -448,7 +448,7 @@ BOOST_AUTO_TEST_CASE(GetTable)
|
|||||||
std::shared_ptr<Wells> wells(create_wells(nphases, nwells, nperfs),
|
std::shared_ptr<Wells> wells(create_wells(nphases, nwells, nperfs),
|
||||||
destroy_wells);
|
destroy_wells);
|
||||||
const int cells[] = {5};
|
const int cells[] = {5};
|
||||||
add_well(INJECTOR, 100, 1, NULL, cells, NULL, NULL, true, wells.get());
|
add_well(INJECTOR, 100, 1, NULL, cells, NULL, 0, NULL, true, wells.get());
|
||||||
|
|
||||||
//Create interpolation points
|
//Create interpolation points
|
||||||
double aqua_d = -0.15;
|
double aqua_d = -0.15;
|
||||||
@ -785,7 +785,7 @@ BOOST_AUTO_TEST_CASE(InterpolateADBAndQs)
|
|||||||
std::stringstream ss;
|
std::stringstream ss;
|
||||||
ss << "WELL_" << i;
|
ss << "WELL_" << i;
|
||||||
const bool ok = add_well(INJECTOR, 0.0, 1, NULL, &cells,
|
const bool ok = add_well(INJECTOR, 0.0, 1, NULL, &cells,
|
||||||
NULL, ss.str().c_str(), true, wells.get());
|
NULL, 0, ss.str().c_str(), true, wells.get());
|
||||||
BOOST_REQUIRE(ok);
|
BOOST_REQUIRE(ok);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -52,9 +52,9 @@ BOOST_AUTO_TEST_CASE(TestPressureDeltas)
|
|||||||
const bool allow_crossflow = true;
|
const bool allow_crossflow = true;
|
||||||
std::shared_ptr<Wells> wells(create_wells(np, 2, nperf), destroy_wells);
|
std::shared_ptr<Wells> wells(create_wells(np, 2, nperf), destroy_wells);
|
||||||
BOOST_REQUIRE(wells);
|
BOOST_REQUIRE(wells);
|
||||||
int ok = add_well(INJECTOR, ref_depth, nperf/2, comp_frac_w, cells, WI, "INJ", allow_crossflow, wells.get());
|
int ok = add_well(INJECTOR, ref_depth, nperf/2, comp_frac_w, cells, WI, 0, "INJ", allow_crossflow, wells.get());
|
||||||
BOOST_REQUIRE(ok);
|
BOOST_REQUIRE(ok);
|
||||||
ok = add_well(PRODUCER, ref_depth, nperf/2, comp_frac_o, cells, WI, "PROD", allow_crossflow, wells.get());
|
ok = add_well(PRODUCER, ref_depth, nperf/2, comp_frac_o, cells, WI, 0, "PROD", allow_crossflow, wells.get());
|
||||||
BOOST_REQUIRE(ok);
|
BOOST_REQUIRE(ok);
|
||||||
std::vector<double> rates = { 1.0, 0.0, 0.0,
|
std::vector<double> rates = { 1.0, 0.0, 0.0,
|
||||||
1.0, 0.0, 0.0,
|
1.0, 0.0, 0.0,
|
||||||
|
Loading…
Reference in New Issue
Block a user