Merge pull request #1082 from totto82/satTableIdWells

Support for saturation table for each well completion
This commit is contained in:
Atgeirr Flø Rasmussen
2017-04-07 14:43:28 +02:00
committed by GitHub
6 changed files with 191 additions and 141 deletions

View File

@@ -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

View File

@@ -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.

View File

@@ -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>

View File

@@ -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,

View File

@@ -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);
} }

View File

@@ -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,