A model implementation for three-phase black oil with polymer. More...
#include <BlackoilPolymerModel.hpp>
Public Types | |
typedef BlackoilModelBase < Grid, StandardWells, BlackoilPolymerModel< Grid > > | Base |
typedef Base::ReservoirState | ReservoirState |
typedef Base::WellState | WellState |
![]() | |
typedef AutoDiffBlock< double > | ADB |
typedef ADB::V | V |
typedef ADB::M | M |
typedef Opm::FIPData | FIPDataType |
typedef ModelTraits < Implementation > ::ReservoirState | ReservoirState |
typedef ModelTraits < Implementation >::WellState | WellState |
typedef ModelTraits < Implementation > ::ModelParameters | ModelParameters |
typedef ModelTraits < Implementation > ::SolutionState | SolutionState |
using | RateConverterType = RateConverter::SurfaceToReservoirVoidage< BlackoilPropsAdFromDeck::FluidSystem, std::vector< int > > |
Public Member Functions | |
BlackoilPolymerModel (const typename Base::ModelParameters ¶m, const Grid &grid, const BlackoilPropsAdFromDeck &fluid, const DerivedGeology &geo, const RockCompressibility *rock_comp_props, const PolymerPropsAd &polymer_props_ad, const StandardWells &well_model, const NewtonIterationBlackoilInterface &linsolver, std::shared_ptr< const EclipseState > eclipseState, const bool has_disgas, const bool has_vapoil, const bool has_polymer, const bool has_plyshlog, const bool has_shrate, const std::vector< double > &wells_rep_radius, const std::vector< double > &wells_perf_length, const std::vector< double > &wells_bore_diameter, const bool terminal_output) | |
Construct the model. More... | |
void | prepareStep (const SimulatorTimerInterface &timer, const ReservoirState &reservoir_state, const WellState &well_state) |
Called once before each time step. More... | |
void | afterStep (const SimulatorTimerInterface &timer, ReservoirState &reservoir_state, WellState &well_state) |
Called once after each time step. More... | |
void | updateState (const V &dx, ReservoirState &reservoir_state, WellState &well_state) |
Apply an update to the primary variables, chopped if appropriate. More... | |
SimulatorReport | assemble (const ReservoirState &reservoir_state, WellState &well_state, const bool initial_assembly) |
Assemble the residual and Jacobian of the nonlinear system. More... | |
![]() | |
BlackoilModelBase (const ModelParameters ¶m, const Grid &grid, const BlackoilPropsAdFromDeck &fluid, const DerivedGeology &geo, const RockCompressibility *rock_comp_props, const WellModel &well_model, const NewtonIterationBlackoilInterface &linsolver, std::shared_ptr< const EclipseState > eclState, const bool has_disgas, const bool has_vapoil, const bool terminal_output) | |
Construct the model. More... | |
void | setThresholdPressures (const std::vector< double > &threshold_pressures_by_face) |
Set threshold pressures that prevent or reduce flow. More... | |
void | prepareStep (const SimulatorTimerInterface &timer, const ReservoirState &reservoir_state, const WellState &well_state) |
Called once before each time step. More... | |
template<class NonlinearSolverType > | |
SimulatorReport | nonlinearIteration (const int iteration, const SimulatorTimerInterface &timer, NonlinearSolverType &nonlinear_solver, ReservoirState &reservoir_state, WellState &well_state) |
Called once per nonlinear iteration. More... | |
void | afterStep (const SimulatorTimerInterface &timer, ReservoirState &reservoir_state, WellState &well_state) |
Called once after each time step. More... | |
SimulatorReport | assemble (const ReservoirState &reservoir_state, WellState &well_state, const bool initial_assembly) |
Assemble the residual and Jacobian of the nonlinear system. More... | |
std::vector< double > | computeResidualNorms () const |
Compute the residual norms of the mass balance for each phase, the well flux, and the well equation. More... | |
double | relativeChange (const SimulationDataContainer &previous, const SimulationDataContainer ¤t) const |
compute the relative change between to simulation states | |
int | sizeNonLinear () const |
The size (number of unknowns) of the nonlinear system of equations. | |
int | linearIterationsLastSolve () const |
Number of linear iterations used in last call to solveJacobianSystem(). | |
V | solveJacobianSystem () const |
Solve the Jacobian system Jx = r where J is the Jacobian and r is the residual. More... | |
void | updateState (const V &dx, ReservoirState &reservoir_state, WellState &well_state) |
Apply an update to the primary variables, chopped if appropriate. More... | |
bool | isParallel () const |
Return true if this is a parallel run. | |
bool | terminalOutputEnabled () const |
Return true if output to cout is wanted. | |
bool | getConvergence (const SimulatorTimerInterface &timer, const int iteration) |
Compute convergence based on total mass balance (tol_mb) and maximum residual mass balance (tol_cnv). More... | |
int | numPhases () const |
The number of active fluid phases in the model. | |
int | numMaterials () const |
The number of active materials in the model. More... | |
const std::string & | materialName (int material_index) const |
The name of an active material in the model. More... | |
void | updateEquationsScaling () |
Update the scaling factors for mass balance equations. | |
WellModel & | wellModel () |
return the WellModel object | |
const WellModel & | wellModel () const |
const SimulatorData & | getSimulatorData (const SimulationDataContainer &) const |
Return reservoir simulation data (for output functionality) | |
FIPDataType | getFIPData () const |
Return fluid-in-place data (for output functionality) | |
std::vector< std::vector < double > > | computeFluidInPlace (const ReservoirState &x, const std::vector< int > &fipnum) |
Compute fluid in place. More... | |
void | computeWellVoidageRates (const ReservoirState &reservoir_state, const WellState &well_state, std::vector< double > &well_voidage_rates, std::vector< double > &voidage_conversion_coeffs) |
Function to compute the resevoir voidage for the production wells. More... | |
void | applyVREPGroupControl (const ReservoirState &reservoir_state, WellState &well_state) |
const SimulatorReport & | failureReport () const |
return the statistics if the nonlinearIteration() method failed. More... | |
Protected Types | |
enum | { Concentration = CanonicalVariablePositions::Next } |
typedef Base::SolutionState | SolutionState |
typedef Base::DataBlock | DataBlock |
![]() | |
typedef Eigen::Array< double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor > | DataBlock |
Protected Member Functions | |
void | makeConstantState (SolutionState &state) const |
std::vector< V > | variableStateInitials (const ReservoirState &x, const WellState &xw) const |
std::vector< int > | variableStateIndices () const |
SolutionState | variableStateExtractVars (const ReservoirState &x, const std::vector< int > &indices, std::vector< ADB > &vars) const |
void | computeAccum (const SolutionState &state, const int aix) |
void | computeInjectionMobility (const SolutionState &state, std::vector< ADB > &mob_perfcells) |
void | assembleMassBalanceEq (const SolutionState &state) |
void | addWellContributionToMassBalanceEq (const std::vector< ADB > &cq_s, const SolutionState &state, WellState &xw) |
void | updateEquationsScaling () |
void | computeMassFlux (const int actph, const V &transi, const ADB &kr, const ADB &mu, const ADB &rho, const ADB &p, const SolutionState &state) |
void | computeCmax (ReservoirState &state) |
ADB | computeMc (const SolutionState &state) const |
const std::vector< PhasePresence > | phaseCondition () const |
void | computeWaterShearVelocityFaces (const V &transi, const std::vector< ADB > &phasePressure, const SolutionState &state, std::vector< double > &water_vel, std::vector< double > &visc_mult) |
Computing the water velocity without shear-thinning for the cell faces. More... | |
void | computeWaterShearVelocityWells (const SolutionState &state, WellState &xw, const ADB &cq_sw, std::vector< double > &water_vel_wells, std::vector< double > &visc_mult_wells) |
Computing the water velocity without shear-thinning for the well perforations based on the water flux rate. More... | |
![]() | |
Implementation & | asImpl () |
Access the most-derived class used for static polymorphism (CRTP). More... | |
const Implementation & | asImpl () const |
Access the most-derived class used for static polymorphism (CRTP). More... | |
const Wells & | wells () const |
return the Well struct in the WellModel | |
bool | wellsActive () const |
return true if wells are available in the reservoir | |
bool | localWellsActive () const |
return true if wells are available on this process | |
void | makeConstantState (SolutionState &state) const |
SolutionState | variableState (const ReservoirState &x, const WellState &xw) const |
std::vector< V > | variableStateInitials (const ReservoirState &x, const WellState &xw) const |
void | variableReservoirStateInitials (const ReservoirState &x, std::vector< V > &vars0) const |
std::vector< int > | variableStateIndices () const |
SolutionState | variableStateExtractVars (const ReservoirState &x, const std::vector< int > &indices, std::vector< ADB > &vars) const |
void | computeAccum (const SolutionState &state, const int aix) |
void | assembleMassBalanceEq (const SolutionState &state) |
SimulatorReport | solveWellEq (const std::vector< ADB > &mob_perfcells, const std::vector< ADB > &b_perfcells, const ReservoirState &reservoir_state, SolutionState &state, WellState &well_state) |
void | addWellContributionToMassBalanceEq (const std::vector< ADB > &cq_s, const SolutionState &state, const WellState &xw) |
bool | getWellConvergence (const int iteration) |
bool | isVFPActive () const |
std::vector< ADB > | computePressures (const ADB &po, const ADB &sw, const ADB &so, const ADB &sg) const |
V | computeGasPressure (const V &po, const V &sw, const V &so, const V &sg) const |
std::vector< ADB > | computeRelPerm (const SolutionState &state) const |
void | computeMassFlux (const int actph, const V &transi, const ADB &kr, const ADB &mu, const ADB &rho, const ADB &p, const SolutionState &state) |
void | applyThresholdPressures (ADB &dp) |
ADB | fluidViscosity (const int phase, const ADB &p, const ADB &temp, const ADB &rs, const ADB &rv, const std::vector< PhasePresence > &cond) const |
ADB | fluidReciprocFVF (const int phase, const ADB &p, const ADB &temp, const ADB &rs, const ADB &rv, const std::vector< PhasePresence > &cond) const |
ADB | fluidDensity (const int phase, const ADB &b, const ADB &rs, const ADB &rv) const |
V | fluidRsSat (const V &p, const V &so, const std::vector< int > &cells) const |
ADB | fluidRsSat (const ADB &p, const ADB &so, const std::vector< int > &cells) const |
V | fluidRvSat (const V &p, const V &so, const std::vector< int > &cells) const |
ADB | fluidRvSat (const ADB &p, const ADB &so, const std::vector< int > &cells) const |
ADB | poroMult (const ADB &p) const |
ADB | transMult (const ADB &p) const |
const std::vector< PhasePresence > | phaseCondition () const |
void | classifyCondition (const ReservoirState &state) |
void | updatePrimalVariableFromState (const ReservoirState &state) |
update the primal variable for Sg, Rv or Rs. More... | |
void | updatePhaseCondFromPrimalVariable (const ReservoirState &state) |
Update the phaseCondition_ member based on the primalVariable_ member. More... | |
void | computeWellConnectionPressures (const SolutionState &state, const WellState &well_state) |
double | convergenceReduction (const Eigen::Array< double, Eigen::Dynamic, Eigen::Dynamic > &B, const Eigen::Array< double, Eigen::Dynamic, Eigen::Dynamic > &tempV, const Eigen::Array< double, Eigen::Dynamic, Eigen::Dynamic > &R, std::vector< double > &R_sum, std::vector< double > &maxCoeff, std::vector< double > &B_avg, std::vector< double > &maxNormWell, int nc) const |
Compute the reduction within the convergence check. More... | |
void | setupGroupControl (const ReservoirState &reservoir_state, WellState &well_state) |
Set up the group control related at the beginning of each time step. | |
double | dpMaxRel () const |
double | dbhpMaxRel () const |
double | dsMax () const |
double | drMaxRel () const |
double | maxResidualAllowed () const |
Protected Attributes | |
const PolymerPropsAd & | polymer_props_ad_ |
const bool | has_polymer_ |
const bool | has_plyshlog_ |
const bool | has_shrate_ |
const int | poly_pos_ |
V | cmax_ |
std::vector< double > | wells_rep_radius_ |
std::vector< double > | wells_perf_length_ |
std::vector< double > | wells_bore_diameter_ |
std::vector< double > | shear_mult_faces_ |
std::vector< double > | shear_mult_wells_ |
![]() | |
SimulatorReport | failureReport_ |
const Grid & | grid_ |
const BlackoilPropsAdFromDeck & | fluid_ |
const DerivedGeology & | geo_ |
const RockCompressibility * | rock_comp_props_ |
VFPProperties | vfp_properties_ |
const NewtonIterationBlackoilInterface & | linsolver_ |
const std::vector< bool > | active_ |
const std::vector< int > | canph_ |
const std::vector< int > | cells_ |
HelperOps | ops_ |
const bool | has_disgas_ |
const bool | has_vapoil_ |
ModelParameters | param_ |
bool | use_threshold_pressure_ |
V | threshold_pressures_by_connection_ |
SimulatorData | sd_ |
std::vector< PhasePresence > | phaseCondition_ |
WellModel | well_model_ |
V | isRs_ |
V | isRv_ |
V | isSg_ |
LinearisedBlackoilResidual | residual_ |
bool | terminal_output_ |
Whether we print something to std::cout. | |
int | global_nc_ |
The number of cells of the global grid. | |
V | pvdt_ |
std::vector< std::string > | material_name_ |
std::vector< std::vector < double > > | residual_norms_history_ |
double | current_relaxation_ |
V | dx_old_ |
RateConverterType | rate_converter_ |
Friends | |
class | BlackoilModelBase< Grid, StandardWells, BlackoilPolymerModel< Grid > > |
A model implementation for three-phase black oil with polymer.
The simulator is capable of handling three-phase problems where gas can be dissolved in oil and vice versa, with polymer in the water phase. It uses an industry-standard TPFA discretization with per-phase upwind weighting of mobilities.
It uses automatic differentiation via the class AutoDiffBlock to simplify assembly of the jacobian matrix.
Opm::BlackoilPolymerModel< Grid >::BlackoilPolymerModel | ( | const typename Base::ModelParameters & | param, |
const Grid & | grid, | ||
const BlackoilPropsAdFromDeck & | fluid, | ||
const DerivedGeology & | geo, | ||
const RockCompressibility * | rock_comp_props, | ||
const PolymerPropsAd & | polymer_props_ad, | ||
const StandardWells & | well_model, | ||
const NewtonIterationBlackoilInterface & | linsolver, | ||
std::shared_ptr< const EclipseState > | eclipseState, | ||
const bool | has_disgas, | ||
const bool | has_vapoil, | ||
const bool | has_polymer, | ||
const bool | has_plyshlog, | ||
const bool | has_shrate, | ||
const std::vector< double > & | wells_rep_radius, | ||
const std::vector< double > & | wells_perf_length, | ||
const std::vector< double > & | wells_bore_diameter, | ||
const bool | terminal_output | ||
) |
Construct the model.
It will retain references to the arguments of this functions, and they are expected to remain in scope for the lifetime of the solver.
[in] | param | parameters |
[in] | grid | grid data structure |
[in] | fluid | fluid properties |
[in] | geo | rock properties |
[in] | rock_comp_props | if non-null, rock compressibility properties |
[in] | wells | well structure |
[in] | linsolver | linear solver |
[in] | has_disgas | turn on dissolved gas |
[in] | has_vapoil | turn on vaporized oil feature |
[in] | has_polymer | turn on polymer feature |
[in] | has_plyshlog | true when PLYSHLOG keyword available |
[in] | has_shrate | true when PLYSHLOG keyword available |
[in] | wells_rep_radius | representative radius of well perforations during shear effects calculation |
[in] | wells_perf_length | perforation length for well perforations |
[in] | wells_bore_diameter | wellbore diameters for well performations |
[in] | terminal_output | request output to cout/cerr |
void Opm::BlackoilPolymerModel< Grid >::afterStep | ( | const SimulatorTimerInterface & | timer, |
ReservoirState & | reservoir_state, | ||
WellState & | well_state | ||
) |
Called once after each time step.
[in] | timer | simulation timer |
[in,out] | reservoir_state | reservoir state variables |
[in,out] | well_state | well state variables |
SimulatorReport Opm::BlackoilPolymerModel< Grid >::assemble | ( | const ReservoirState & | reservoir_state, |
WellState & | well_state, | ||
const bool | initial_assembly | ||
) |
Assemble the residual and Jacobian of the nonlinear system.
[in] | reservoir_state | reservoir state variables |
[in,out] | well_state | well state variables |
[in] | initial_assembly | pass true if this is the first call to assemble() in this timestep |
|
protected |
Computing the water velocity without shear-thinning for the cell faces.
The water velocity will be used for shear-thinning calculation.
|
protected |
Computing the water velocity without shear-thinning for the well perforations based on the water flux rate.
The water velocity will be used for shear-thinning calculation.
void Opm::BlackoilPolymerModel< Grid >::prepareStep | ( | const SimulatorTimerInterface & | timer, |
const ReservoirState & | reservoir_state, | ||
const WellState & | well_state | ||
) |
Called once before each time step.
[in] | timer | simulation timer |
[in,out] | reservoir_state | reservoir state variables |
[in,out] | well_state | well state variables |
void Opm::BlackoilPolymerModel< Grid >::updateState | ( | const V & | dx, |
ReservoirState & | reservoir_state, | ||
WellState & | well_state | ||
) |
Apply an update to the primary variables, chopped if appropriate.
[in] | dx | updates to apply to primary variables |
[in,out] | reservoir_state | reservoir state variables |
[in,out] | well_state | well state variables |