20 #ifndef GEOS_PHYSICSSOLVERS_FLUIDFLOW_WELLS_COMPOSITIONALMULTIPHASEWELL_HPP_
21 #define GEOS_PHYSICSSOLVERS_FLUIDFLOW_WELLS_COMPOSITIONALMULTIPHASEWELL_HPP_
29 namespace constitutive
31 class ConstitutiveManager;
50 Group *
const parent );
76 static string catalogName() {
return "CompositionalMultiphaseWell"; }
109 real64 const scalingFactor )
override;
114 real64 const scalingFactor,
190 virtual string resElementDofName()
const override {
return CompositionalMultiphaseBase::viewKeyStruct::elemDofFieldString(); }
196 integer useTotalMassEquation()
const {
return m_useTotalMassEquation; }
254 static constexpr
char const * dofFieldString() {
return "compositionalWellVars"; }
258 static constexpr
char const * useMassFlagString() {
return CompositionalMultiphaseBase::viewKeyStruct::useMassFlagString(); }
260 static constexpr
char const * useTotalMassEquationString() {
return CompositionalMultiphaseBase::viewKeyStruct::useTotalMassEquationString(); }
262 static constexpr
char const * relPermNamesString() {
return CompositionalMultiphaseBase::viewKeyStruct::relPermNamesString(); }
264 static constexpr
char const * maxCompFracChangeString() {
return CompositionalMultiphaseBase::viewKeyStruct::maxCompFracChangeString(); }
266 static constexpr
char const * maxRelativePresChangeString() {
return "maxRelativePressureChange"; }
268 static constexpr
char const * maxAbsolutePresChangeString() {
return "maxAbsolutePressureChange"; }
270 static constexpr
char const * maxRelativeCompDensChangeString() {
return "maxRelativeCompDensChange"; }
272 static constexpr
char const * maxRelativeTempChangeString() {
return "maxRelativeTemperatureChange"; }
274 static constexpr
char const * allowLocalCompDensChoppingString() {
return CompositionalMultiphaseBase::viewKeyStruct::allowLocalCompDensChoppingString(); }
278 static constexpr
char const * massDensityString() {
return "massDensity";}
280 static constexpr
char const * currentBHPString() {
return "currentBHP"; }
281 static constexpr
char const * dCurrentBHPString() {
return "dCurrentBHP"; }
283 static constexpr
char const * dCurrentBHP_dPresString() {
return "dCurrentBHP_dPres"; }
284 static constexpr
char const * dCurrentBHP_dCompDensString() {
return "dCurrentBHP_dCompDens"; }
286 static constexpr
char const * currentPhaseVolRateString() {
return "currentPhaseVolumetricRate"; }
287 static constexpr
char const * dCurrentPhaseVolRateString() {
return "dCurrentPhaseVolumetricRate"; }
290 static constexpr
char const * dCurrentPhaseVolRate_dPresString() {
return "dCurrentPhaseVolumetricRate_dPres"; }
292 static constexpr
char const * dCurrentPhaseVolRate_dCompDensString() {
return "dCurrentPhaseVolumetricRate_dCompDens"; }
294 static constexpr
char const * dCurrentPhaseVolRate_dRateString() {
return "dCurrentPhaseVolumetricRate_dRate"; }
296 static constexpr
char const * currentTotalVolRateString() {
return "currentTotalVolumetricRate"; }
297 static constexpr
char const * dCurrentTotalVolRateString() {
return "dCurrentTotalVolumetricRate"; }
299 static constexpr
char const * dCurrentTotalVolRate_dPresString() {
return "dCurrentTotalVolumetricRate_dPres"; }
301 static constexpr
char const * dCurrentTotalVolRate_dCompDensString() {
return "dCurrentTotalVolumetricRate_dCompDens"; }
303 static constexpr
char const * dCurrentTotalVolRate_dRateString() {
return "dCurrentTotalVolumetricRate_dRate"; }
305 } viewKeysCompMultiphaseWell;
323 void validateConstitutiveModels(
DomainPartition const & domain )
const;
330 constitutive::MultiFluidBase
const & fluid )
const;
348 void printRates(
real64 const & time_n,
368 integer m_useTotalMassEquation;
374 real64 m_maxCompFracChange;
377 real64 m_maxRelativePresChange;
380 real64 m_maxAbsolutePresChange;
383 real64 m_maxRelativeCompDensChange;
386 real64 m_maxRelativeTempChange;
389 real64 m_minScalingFactor;
392 integer m_allowCompDensChopping;
void updateFluidModel(WellElementSubRegion &subRegion)
Update all relevant fluid models using current values of pressure and composition.
virtual void assembleFluxTerms(real64 const &time_n, real64 const &dt, DomainPartition &domain, DofManager const &dofManager, CRSMatrixView< real64, globalIndex const > const &localMatrix, arrayView1d< real64 > const &localRhs) override
assembles the flux terms for all connections between well elements
virtual void updateState(DomainPartition &domain) override
Recompute all dependent quantities from primary variables (including constitutive models)
void chopNegativeDensities(DomainPartition &domain)
Sets all the negative component densities (if any) to zero.
virtual string wellElementDofName() const override
get the name of DOF defined on well elements
CompositionalMultiphaseWell(CompositionalMultiphaseWell const &)=delete
deleted copy constructor
void validateWellControlsForFluid(WellControls const &wellControls, constitutive::MultiFluidBase const &fluid) const
Checks if the WellControls parameters are within the fluid tables ranges.
void updateGlobalComponentFraction(WellElementSubRegion &subRegion) const
Recompute global component fractions from primary variables (component densities)
void updateTotalMassDensity(WellElementSubRegion &subRegion) const
Recompute total mass densities from mass density and phase volume fractions.
CompositionalMultiphaseWell(CompositionalMultiphaseWell &&)=default
default move constructor
virtual void initializePostInitialConditionsPreSubGroups() override
Called by InitializePostInitialConditions() prior to initializing sub-Groups.
virtual void computePerforationRates(real64 const &time_n, real64 const &dt, DomainPartition &domain) override
Recompute the perforation rates for all the wells.
void validateInjectionStreams(WellElementSubRegion const &subRegion) const
Checks injection streams for validity (compositions sum to one)
virtual real64 updateSubRegionState(WellElementSubRegion &subRegion) override
Recompute all dependent quantities from primary variables (including constitutive models)
virtual ~CompositionalMultiphaseWell() override=default
default destructor
virtual localIndex numFluidComponents() const override
const getter for the number of fluid components
virtual void validateWellConstraints(real64 const &time_n, real64 const &dt, WellElementSubRegion const &subRegion) override
Make sure that the well constraints are compatible.
CompositionalMultiphaseWell(const string &name, Group *const parent)
main constructor for Group Objects
static string catalogName()
name of the node manager in the object catalog
virtual void registerDataOnMesh(Group &meshBodies) override
Register wrappers that contain data on the mesh objects.
CompositionalMultiphaseWell & operator=(CompositionalMultiphaseWell &&)=delete
deleted move operator
string getCatalogName() const override
virtual void assembleAccumulationTerms(real64 const &time_n, real64 const &dt, DomainPartition &domain, DofManager const &dofManager, CRSMatrixView< real64, globalIndex const > const &localMatrix, arrayView1d< real64 > const &localRhs) override
assembles the accumulation term for all the well elements
void updateVolRatesForConstraint(WellElementSubRegion &subRegion)
Recompute the volumetric rates that are used in the well constraints.
virtual void assemblePressureRelations(real64 const &time_n, real64 const &dt, DomainPartition const &domain, DofManager const &dofManager, CRSMatrixView< real64, globalIndex const > const &localMatrix, arrayView1d< real64 > const &localRhs) override
assembles the pressure relations at all connections between well elements except at the well head
virtual localIndex numFluidPhases() const override
Get the number of fluid phases.
CompositionalMultiphaseWell & operator=(CompositionalMultiphaseWell const &)=delete
deleted assignment operator
virtual string resElementDofName() const override
get the name of DOF defined on well elements
CompositionalMultiphaseWell()=delete
deleted default constructor
virtual void postInputInitialization() override
real64 updatePhaseVolumeFraction(WellElementSubRegion &subRegion) const
Recompute phase volume fractions (saturations) from constitutive and primary variables.
void updateBHPForConstraint(WellElementSubRegion &subRegion)
Recompute the current BHP pressure.
virtual void initializePostSubGroups() override
Called by Initialize() after to initializing sub-Groups.
The DoFManager is responsible for allocating global dofs, constructing sparsity patterns,...
Partition of the decomposed physical domain. It also manages the connexion information to its neighbo...
This class describes the controls used to operate a well.
This class describes a collection of local well elements and perforations.
integer m_numComponents
the number of fluid components
integer m_numPhases
the max number of fluid phases
virtual real64 scalingForSystemSolution(DomainPartition &domain, DofManager const &dofManager, arrayView1d< real64 const > const &localSolution) override
Function to determine if the solution vector should be scaled back in order to maintain a known const...
virtual void implicitStepSetup(real64 const &time, real64 const &dt, DomainPartition &domain) override
function to perform setup for implicit timestep
virtual void resetStateToBeginningOfStep(DomainPartition &domain) override
reset state of physics back to the beginning of the step.
virtual void implicitStepComplete(real64 const &time, real64 const &dt, DomainPartition &domain) override
perform cleanup for implicit timestep
virtual real64 calculateResidualNorm(real64 const &time_n, real64 const &dt, DomainPartition const &domain, DofManager const &dofManager, arrayView1d< real64 const > const &localRhs) override
calculate the norm of the global system residual
virtual void applySystemSolution(DofManager const &dofManager, arrayView1d< real64 const > const &localSolution, real64 const scalingFactor, real64 const dt, DomainPartition &domain) override
Function to apply the solution vector to the state.
virtual bool checkSystemSolution(DomainPartition &domain, DofManager const &dofManager, arrayView1d< real64 const > const &localSolution, real64 const scalingFactor) override
Function to check system solution for physical consistency and constraint violation.
ArrayView< T, 1 > arrayView1d
Alias for 1D array view.
LvArray::CRSMatrixView< T, COL_INDEX, localIndex const, LvArray::ChaiBuffer > CRSMatrixView
Alias for CRS Matrix View.
double real64
64-bit floating point type.
GEOS_LOCALINDEX_TYPE localIndex
Local index type (for indexing objects within an MPI partition).
std::int32_t integer
Signed integer type.
Array< T, 1 > array1d
Alias for 1D array.