All Classes Namespaces Files Functions Variables Typedefs Enumerator Pages
Opm::BlackoilReorderingTransportModel< Grid, WellModel > Class Template Reference

A model implementation for the transport equation in three-phase black oil. More...

#include <BlackoilReorderingTransportModel.hpp>

Inheritance diagram for Opm::BlackoilReorderingTransportModel< Grid, WellModel >:
Opm::BlackoilModelBase< Grid, WellModel, BlackoilReorderingTransportModel< Grid, WellModel > >

Classes

struct  CellState
 
struct  State
 

Public Types

typedef BlackoilModelBase
< Grid, WellModel,
BlackoilReorderingTransportModel
< Grid, WellModel > > 
Base
 
typedef Base::ReservoirState ReservoirState
 
typedef Base::WellState WellState
 
typedef Base::SolutionState SolutionState
 
typedef Base::V V
 
- Public Types inherited from Opm::BlackoilModelBase< Grid, WellModel, BlackoilReorderingTransportModel< Grid, WellModel > >
typedef AutoDiffBlock< double > ADB
 
typedef ADB::V V
 
typedef ADB::M M
 
typedef Opm::FIPData FIPDataType
 
typedef ModelTraits
< BlackoilReorderingTransportModel
< Grid, WellModel >
>::ReservoirState 
ReservoirState
 
typedef ModelTraits
< BlackoilReorderingTransportModel
< Grid, WellModel >
>::WellState 
WellState
 
typedef ModelTraits
< BlackoilReorderingTransportModel
< Grid, WellModel >
>::ModelParameters 
ModelParameters
 
typedef ModelTraits
< BlackoilReorderingTransportModel
< Grid, WellModel >
>::SolutionState 
SolutionState
 
using RateConverterType = RateConverter::SurfaceToReservoirVoidage< BlackoilPropsAdFromDeck::FluidSystem, std::vector< int > >
 

Public Member Functions

 BlackoilReorderingTransportModel (const typename Base::ModelParameters &param, const Grid &grid, const BlackoilPropsAdFromDeck &fluid, const DerivedGeology &geo, const RockCompressibility *rock_comp_props, const StandardWells &std_wells, 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 prepareStep (const SimulatorTimerInterface &timer, const ReservoirState &reservoir_state, const WellState &well_state)
 
template<class NonlinearSolverType >
SimulatorReport nonlinearIteration (const int iteration, const SimulatorTimerInterface &timer, NonlinearSolverType &nonlinear_solver, ReservoirState &reservoir_state, const WellState &well_state)
 
void afterStep (const SimulatorTimerInterface &, const ReservoirState &, const WellState &)
 
- Public Member Functions inherited from Opm::BlackoilModelBase< Grid, WellModel, BlackoilReorderingTransportModel< Grid, WellModel > >
 BlackoilModelBase (const ModelParameters &param, 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...
 
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 &current) 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().
 
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...
 

Public Attributes

friend Base
 

Protected Types

using Vec2 = Dune::FieldVector< double, 2 >
 
using Mat22 = Dune::FieldMatrix< double, 2, 2 >
 
using Eval = DenseAd::Evaluation< double, 2 >
 
- Protected Types inherited from Opm::BlackoilModelBase< Grid, WellModel, BlackoilReorderingTransportModel< Grid, WellModel > >
typedef Eigen::Array< double,
Eigen::Dynamic, Eigen::Dynamic,
Eigen::RowMajor > 
DataBlock
 

Protected Member Functions

template<typename Scalar >
void computeCellState (const int cell, const State &state, CellState< Scalar > &cstate) const
 
void extractFluxes (const ReservoirState &reservoir_state, const WellState &well_state)
 
void extractState (const ReservoirState &reservoir_state, const WellState &well_state)
 
void computeOrdering ()
 
void solveComponents ()
 
void solveSingleCell (const int cell)
 
void solveMultiCell (const int comp_size, const int *cell_array)
 
template<typename Scalar >
Scalar oilAccumulation (const CellState< Scalar > &cs)
 
template<typename Scalar >
Scalar gasAccumulation (const CellState< Scalar > &cs)
 
void applyThresholdPressure (const int connection, Eval &dp)
 
void assembleSingleCell (const int cell, Vec2 &res, Mat22 &jac)
 
bool getConvergence (const int cell, const Vec2 &res)
 
void updateState (const int cell, const Vec2 &dx)
 
- Protected Member Functions inherited from Opm::BlackoilModelBase< Grid, WellModel, BlackoilReorderingTransportModel< Grid, WellModel > >
BlackoilReorderingTransportModel
< Grid, WellModel > & 
asImpl ()
 Access the most-derived class used for static polymorphism (CRTP). More...
 
const
BlackoilReorderingTransportModel
< Grid, WellModel > & 
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< ADBcomputePressures (const ADB &po, const ADB &sw, const ADB &so, const ADB &sg) const
 
computeGasPressure (const V &po, const V &sw, const V &so, const V &sg) const
 
std::vector< ADBcomputeRelPerm (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
 
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
 
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 detail::ConnectivityGraph graph_
 
const BlackoilPropsAdFromDeckprops_
 
State state0_
 
State state_
 
std::vector< CellState< double > > cstate0_
 
std::vector< CellState< double > > cstate_
 
total_flux_
 
total_wellperf_flux_
 
DataBlock comp_wellperf_flux_
 
total_wellflux_cell_
 
oil_wellflux_cell_
 
gas_wellflux_cell_
 
std::vector< int > sequence_
 
std::vector< int > components_
 
trans_all_
 
gdz_
 
DataBlock rhos_
 
std::array< double, 2 > max_abs_dx_
 
std::array< int, 2 > max_abs_dx_cell_
 
BlackoilTransportModel< Grid,
WellModel > 
tr_model_
 
- Protected Attributes inherited from Opm::BlackoilModelBase< Grid, WellModel, BlackoilReorderingTransportModel< Grid, WellModel > >
SimulatorReport failureReport_
 
const Grid & grid_
 
const BlackoilPropsAdFromDeckfluid_
 
const DerivedGeologygeo_
 
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_
 
threshold_pressures_by_connection_
 
SimulatorData sd_
 
std::vector< PhasePresence > phaseCondition_
 
WellModel well_model_
 
isRs_
 
isRv_
 
isSg_
 
LinearisedBlackoilResidual residual_
 
bool terminal_output_
 Whether we print something to std::cout.
 
int global_nc_
 The number of cells of the global grid.
 
pvdt_
 
std::vector< std::string > material_name_
 
std::vector< std::vector
< double > > 
residual_norms_history_
 
double current_relaxation_
 
dx_old_
 
RateConverterType rate_converter_
 

Detailed Description

template<class Grid, class WellModel>
class Opm::BlackoilReorderingTransportModel< Grid, WellModel >

A model implementation for the transport equation in three-phase black oil.

Constructor & Destructor Documentation

template<class Grid , class WellModel >
Opm::BlackoilReorderingTransportModel< Grid, WellModel >::BlackoilReorderingTransportModel ( const typename Base::ModelParameters &  param,
const Grid &  grid,
const BlackoilPropsAdFromDeck fluid,
const DerivedGeology geo,
const RockCompressibility *  rock_comp_props,
const StandardWells std_wells,
const NewtonIterationBlackoilInterface linsolver,
std::shared_ptr< const EclipseState >  eclState,
const bool  has_disgas,
const bool  has_vapoil,
const bool  terminal_output 
)
inline

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.

Parameters
[in]paramparameters
[in]gridgrid data structure
[in]fluidfluid properties
[in]georock properties
[in]rock_comp_propsif non-null, rock compressibility properties
[in]wells_argwell structure
[in]linsolverlinear solver
[in]eclStateeclipse state
[in]has_disgasturn on dissolved gas
[in]has_vapoilturn on vaporized oil feature
[in]terminal_outputrequest output to cout/cerr

The documentation for this class was generated from the following file: