GEOS
CompositionalMultiphaseBase.hpp
Go to the documentation of this file.
1 /*
2  * ------------------------------------------------------------------------------------------------------------
3  * SPDX-License-Identifier: LGPL-2.1-only
4  *
5  * Copyright (c) 2016-2024 Lawrence Livermore National Security LLC
6  * Copyright (c) 2018-2024 TotalEnergies
7  * Copyright (c) 2018-2024 The Board of Trustees of the Leland Stanford Junior University
8  * Copyright (c) 2023-2024 Chevron
9  * Copyright (c) 2019- GEOS/GEOSX Contributors
10  * All rights reserved
11  *
12  * See top level LICENSE, COPYRIGHT, CONTRIBUTORS, NOTICE, and ACKNOWLEDGEMENTS files for details.
13  * ------------------------------------------------------------------------------------------------------------
14  */
15 
20 #ifndef GEOS_PHYSICSSOLVERS_FLUIDFLOW_COMPOSITIONALMULTIPHASEBASE_HPP_
21 #define GEOS_PHYSICSSOLVERS_FLUIDFLOW_COMPOSITIONALMULTIPHASEBASE_HPP_
22 
25 #include "constitutive/fluid/multifluid/MultiFluidBase.hpp"
26 #include "constitutive/solid/CoupledSolidBase.hpp"
27 #include "physicsSolvers/fluidFlow/kernels/compositional/AccumulationKernel.hpp"
29 
30 namespace geos
31 {
32 
37 {
40 };
41 
46  "ComponentDensities",
47  "OverallComposition" );
48 
49 //START_SPHINX_INCLUDE_00
56 {
57 public:
58 
64  CompositionalMultiphaseBase( const string & name,
65  Group * const parent );
66 
69 
72 
75 
78 
81 
85  virtual ~CompositionalMultiphaseBase() override = default;
86 
87 //START_SPHINX_INCLUDE_01
88 
89  virtual void registerDataOnMesh( Group & meshBodies ) override;
90 
91  virtual void registerDataForCFL( Group & meshBodies ) { GEOS_UNUSED_VAR( meshBodies ); }
92 
100  virtual void
101  implicitStepSetup( real64 const & time_n,
102  real64 const & dt,
103  DomainPartition & domain ) override;
104 
105  virtual void
106  assembleSystem( real64 const time_n,
107  real64 const dt,
108  DomainPartition & domain,
109  DofManager const & dofManager,
110  CRSMatrixView< real64, globalIndex const > const & localMatrix,
111  arrayView1d< real64 > const & localRhs ) override;
112 
113  virtual void
115  real64 const dt,
116  DomainPartition & domain,
117  DofManager const & dofManager,
118  CRSMatrixView< real64, globalIndex const > const & localMatrix,
119  arrayView1d< real64 > const & localRhs ) override;
120 
130  template< typename SUBREGION_TYPE >
131  void accumulationAssemblyLaunch( DofManager const & dofManager,
132  SUBREGION_TYPE const & subRegion,
133  CRSMatrixView< real64, globalIndex const > const & localMatrix,
134  arrayView1d< real64 > const & localRhs );
135 
136  virtual void
138 
139  virtual void
141  real64 const & dt,
142  DomainPartition & domain ) override;
143 
149 
155 
160  void updateFluidModel( ObjectManagerBase & dataGroup ) const;
161 
166  void updateRelPermModel( ObjectManagerBase & dataGroup ) const;
167 
172  void updateCapPressureModel( ObjectManagerBase & dataGroup ) const;
173 
178  void updateCompAmount( ElementSubRegionBase & subRegion ) const;
179 
184  void updateEnergy( ElementSubRegionBase & subRegion ) const;
185 
191 
196  virtual void updatePhaseMobility( ObjectManagerBase & dataGroup ) const = 0;
197 
198  real64 updateFluidState( ElementSubRegionBase & subRegion ) const;
199 
200  virtual void saveConvergedState( ElementSubRegionBase & subRegion ) const override final;
201 
202  virtual void saveSequentialIterationState( DomainPartition & domain ) override final;
203 
204  virtual void updateState( DomainPartition & domain ) override final;
205 
211 
216  integer numFluidPhases() const { return m_numPhases; }
217 
223 
227  virtual units::Unit getMassUnit() const override
228  { return m_useMass ? units::Unit::Mass : units::Unit::Mole; }
229 
240  DofManager const & dofManager,
241  CRSMatrixView< real64, globalIndex const > const & localMatrix,
242  arrayView1d< real64 > const & localRhs ) const;
243 
253  virtual void
255  DomainPartition const & domain,
256  DofManager const & dofManager,
257  CRSMatrixView< real64, globalIndex const > const & localMatrix,
258  arrayView1d< real64 > const & localRhs ) const = 0;
259 
268  virtual void
270  DomainPartition const & domain,
271  DofManager const & dofManager,
272  CRSMatrixView< real64, globalIndex const > const & localMatrix,
273  arrayView1d< real64 > const & localRhs ) const = 0;
274 
279  {
280  static constexpr char const * elemDofFieldString() { return "compositionalVariables"; }
281 
282  // inputs
283 
284  static constexpr char const * useMassFlagString() { return "useMass"; }
285  static constexpr char const * formulationTypeString() { return "formulationType"; }
286 
287  // time stepping controls
288 
289  static constexpr char const * solutionChangeScalingFactorString() { return "solutionChangeScalingFactor"; }
290  static constexpr char const * targetRelativePresChangeString() { return "targetRelativePressureChangeInTimeStep"; }
291  static constexpr char const * targetRelativeTempChangeString() { return "targetRelativeTemperatureChangeInTimeStep"; }
292  static constexpr char const * targetPhaseVolFracChangeString() { return "targetPhaseVolFractionChangeInTimeStep"; }
293  static constexpr char const * targetRelativeCompDensChangeString() { return "targetRelativeCompDensChangeInTimeStep"; }
294  static constexpr char const * targetCompFracChangeString() { return "targetCompFracChangeInTimeStep"; }
295  static constexpr char const * targetFlowCFLString() { return "targetFlowCFL"; }
296 
297 
298  // nonlinear solver parameters
299 
300  static constexpr char const * maxCompFracChangeString() { return "maxCompFractionChange"; }
301  static constexpr char const * maxRelativePresChangeString() { return "maxRelativePressureChange"; }
302  static constexpr char const * maxRelativeTempChangeString() { return "maxRelativeTemperatureChange"; }
303  static constexpr char const * maxRelativeCompDensChangeString() { return "maxRelativeCompDensChange"; }
304  static constexpr char const * allowLocalCompDensChoppingString() { return "allowLocalCompDensityChopping"; }
305  static constexpr char const * useTotalMassEquationString() { return "useTotalMassEquation"; }
306  static constexpr char const * useSimpleAccumulationString() { return "useSimpleAccumulation"; }
307  static constexpr char const * minCompDensString() { return "minCompDens"; }
308  static constexpr char const * minCompFracString() { return "minCompFrac"; }
309  static constexpr char const * maxSequentialCompDensChangeString() { return "maxSequentialCompDensChange"; }
310  static constexpr char const * minScalingFactorString() { return "minScalingFactor"; }
311 
312  static constexpr char const * relPermNamesString() { return "relPermNames"; }
313  static constexpr char const * capPressureNamesString() { return "capPressureNames"; }
314  static constexpr char const * diffusionNamesString() { return "diffusionNames"; }
315  static constexpr char const * dispersionNamesString() { return "dispersionNames"; }
316  };
317 
326  virtual void initializeFluidState( MeshLevel & mesh, string_array const & regionNames ) override;
327 
328  virtual void initializeThermalState( MeshLevel & mesh, string_array const & regionNames ) override;
329 
333  virtual void computeHydrostaticEquilibrium( DomainPartition & domain ) override;
334 
344  void applyDirichletBC( real64 const time,
345  real64 const dt,
346  DofManager const & dofManager,
347  DomainPartition & domain,
348  CRSMatrixView< real64, globalIndex const > const & localMatrix,
349  arrayView1d< real64 > const & localRhs ) const;
350 
360  void applySourceFluxBC( real64 const time,
361  real64 const dt,
362  DofManager const & dofManager,
363  DomainPartition & domain,
364  CRSMatrixView< real64, globalIndex const > const & localMatrix,
365  arrayView1d< real64 > const & localRhs ) const;
366 
376  virtual void applyAquiferBC( real64 const time,
377  real64 const dt,
378  DofManager const & dofManager,
379  DomainPartition & domain,
380  CRSMatrixView< real64, globalIndex const > const & localMatrix,
381  arrayView1d< real64 > const & localRhs ) const = 0;
382 
395  real64 const dt,
396  DofManager const & dofManager,
397  DomainPartition & domain,
398  CRSMatrixView< real64, globalIndex const > const & localMatrix,
399  arrayView1d< real64 > const & localRhs ) const;
400 
401 
407  void chopNegativeDensities( ElementSubRegionBase & subRegion );
408 
414 
415  virtual real64 setNextDtBasedOnStateChange( real64 const & currentDt,
416  DomainPartition & domain ) override;
417 
418 
419  virtual void computeCFLNumbers( DomainPartition & domain, real64 const & dt, real64 & maxPhaseCFL, real64 & maxCompCFL )
420  {
421  GEOS_UNUSED_VAR( domain, dt, maxPhaseCFL, maxCompCFL );
422  GEOS_ERROR( GEOS_FMT( "{}: computeCFLNumbers is not implemented for {}", getDataContext(), getCatalogName() ) );
423  }
424 
426 
427  integer useSimpleAccumulation() const { return m_useSimpleAccumulation; }
428 
429  integer useTotalMassEquation() const { return m_useTotalMassEquation; }
430 
431  virtual bool checkSequentialSolutionIncrements( DomainPartition & domain ) const override;
432 
433 protected:
434 
435  virtual void postInputInitialization() override;
436 
437  virtual void initializePreSubGroups() override;
438 
439 
446  void validateConstitutiveModels( DomainPartition const & domain ) const;
447 
452  void initializeAquiferBC( constitutive::ConstitutiveManager const & cm ) const;
453 
463  template< typename OBJECT_TYPE >
464  void applyFieldValue( real64 const & time_n,
465  real64 const & dt,
466  MeshLevel & mesh,
467  char const logMessage[],
468  string const fieldKey,
469  string const boundaryFieldKey ) const;
470 
473 
476 
479 
482 
485 
488 
491 
494 
497 
500 
503 
506 
509 
512 
515 
518 
521 
524 
527 
530 
533 
536 
539 
542 
545  real64 m_maxSequentialCompDensChange;
546 
547 private:
548 
554  bool validateDirichletBC( DomainPartition & domain,
555  real64 const time ) const;
556 
557  virtual void setConstitutiveNames( ElementSubRegionBase & subRegion ) const override;
558 
559 };
560 
561 template< typename OBJECT_TYPE >
563  real64 const & dt,
564  MeshLevel & mesh,
565  char const logMessage[],
566  string const fieldKey,
567  string const boundaryFieldKey ) const
568 {
570 
571  fsManager.apply< OBJECT_TYPE >( time_n + dt,
572  mesh,
573  fieldKey,
574  [&]( FieldSpecificationBase const & fs,
575  string const & setName,
577  OBJECT_TYPE & targetGroup,
578  string const & )
579  {
580  if( fs.getLogLevel() >= 1 && m_nonlinearSolverParameters.m_numNewtonIterations == 0 )
581  {
582  globalIndex const numTargetElems = MpiWrapper::sum< globalIndex >( lset.size() );
583  GEOS_LOG_RANK_0( GEOS_FMT( logMessage,
584  getName(), time_n+dt, fs.getCatalogName(), fs.getName(),
585  setName, targetGroup.getName(), fs.getScale(), numTargetElems ) );
586  }
587 
588  // Specify the bc value of the field
589  fs.applyFieldValue< FieldSpecificationEqual,
590  parallelDevicePolicy<> >( lset,
591  time_n + dt,
592  targetGroup,
593  boundaryFieldKey );
594  } );
595 }
596 
597 template< typename SUBREGION_TYPE >
599  SUBREGION_TYPE const & subRegion,
600  CRSMatrixView< real64, globalIndex const > const & localMatrix,
601  arrayView1d< real64 > const & localRhs )
602 {
603  constitutive::MultiFluidBase const & fluid =
604  getConstitutiveModel< constitutive::MultiFluidBase >( subRegion, subRegion.template getReference< string >( viewKeyStruct::fluidNamesString() ) );
605  constitutive::CoupledSolidBase const & solid =
606  getConstitutiveModel< constitutive::CoupledSolidBase >( subRegion, subRegion.template getReference< string >( viewKeyStruct::solidNamesString() ) );
607 
608  string const dofKey = dofManager.getKey( viewKeyStruct::elemDofFieldString() );
609 
610  using namespace isothermalCompositionalMultiphaseBaseKernels;
611 
612  BitFlags< KernelFlags > kernelFlags;
614  kernelFlags.set( KernelFlags::TotalMassEquation );
616  kernelFlags.set( KernelFlags::SimpleAccumulation );
617 
618  if( m_isThermal )
619  {
620  thermalCompositionalMultiphaseBaseKernels::
621  AccumulationKernelFactory::
622  createAndLaunch< parallelDevicePolicy<> >( m_numComponents,
623  m_numPhases,
624  dofManager.rankOffset(),
625  kernelFlags,
626  dofKey,
627  subRegion,
628  fluid,
629  solid,
630  localMatrix,
631  localRhs );
632  }
633  else
634  {
635  isothermalCompositionalMultiphaseBaseKernels::
636  AccumulationKernelFactory::
637  createAndLaunch< parallelDevicePolicy<> >( m_numComponents,
638  m_numPhases,
639  dofManager.rankOffset(),
640  kernelFlags,
641  dofKey,
642  subRegion,
643  fluid,
644  solid,
645  localMatrix,
646  localRhs );
647  }
648 }
649 
650 } // namespace geos
651 
652 #endif //GEOS_PHYSICSSOLVERS_FLUIDFLOW_COMPOSITIONALMULTIPHASEBASE_HPP_
#define GEOS_UNUSED_VAR(...)
Mark an unused variable and silence compiler warnings.
Definition: GeosxMacros.hpp:84
#define GEOS_ERROR(msg)
Raise a hard error and terminate the program.
Definition: Logger.hpp:157
#define GEOS_LOG_RANK_0(msg)
Log a message on screen on rank 0.
Definition: Logger.hpp:101
Unit
Enumerator of available unit types for given physical scales. Units are in SI by default.
Definition: Units.hpp:59
void initializeAquiferBC(constitutive::ConstitutiveManager const &cm) const
Initialize the aquifer boundary condition (gravity vector, water phase index)
bool m_hasCapPressure
flag to determine whether or not to apply capillary pressure
real64 m_solutionChangeScalingFactor
damping factor for solution change targets
CompositionalMultiphaseBase(CompositionalMultiphaseBase &&)=default
default move constructor
void applyFieldValue(real64 const &time_n, real64 const &dt, MeshLevel &mesh, char const logMessage[], string const fieldKey, string const boundaryFieldKey) const
Utility function that encapsulates the call to FieldSpecificationBase::applyFieldValue in BC applicat...
virtual void initializePreSubGroups() override
Called by Initialize() prior to initializing sub-Groups.
real64 m_targetPhaseVolFracChange
target (absolute) change in phase volume fraction in a time step
virtual void postInputInitialization() override
void keepVariablesConstantDuringInitStep(real64 const time, real64 const dt, DofManager const &dofManager, DomainPartition &domain, CRSMatrixView< real64, globalIndex const > const &localMatrix, arrayView1d< real64 > const &localRhs) const
Function to fix the initial state during the initialization step in coupled problems.
integer m_useMass
flag indicating whether mass or molar formulation should be used
integer m_useSimpleAccumulation
flag indicating whether simple accumulation form is used
real64 m_maxRelativeTempChange
maximum (relative) change in temperature in a Newton iteration
virtual bool checkSequentialSolutionIncrements(DomainPartition &domain) const override
Check if the solution increments are ok to use.
real64 m_targetCompFracChange
target (absolute) change in component fraction in a time step
virtual void initializeFluidState(MeshLevel &mesh, string_array const &regionNames) override
Initialize all variables from initial conditions.
real64 m_maxRelativePresChange
maximum (relative) change in pressure in a Newton iteration
real64 m_targetRelativePresChange
target (relative) change in pressure in a time step
real64 m_minCompFrac
minimum allowed global component fraction
void validateConstitutiveModels(DomainPartition const &domain) const
Utility function that checks the consistency of the constitutive models.
real64 m_minScalingFactor
minimum value of the scaling factor obtained by enforcing maxCompFracChange
virtual void applyAquiferBC(real64 const time, real64 const dt, DofManager const &dofManager, DomainPartition &domain, CRSMatrixView< real64, globalIndex const > const &localMatrix, arrayView1d< real64 > const &localRhs) const =0
Apply aquifer boundary conditions to the system.
bool m_hasDiffusion
flag to determine whether or not to apply diffusion
virtual void registerDataOnMesh(Group &meshBodies) override
Register wrappers that contain data on the mesh objects.
void applySourceFluxBC(real64 const time, real64 const dt, DofManager const &dofManager, DomainPartition &domain, CRSMatrixView< real64, globalIndex const > const &localMatrix, arrayView1d< real64 > const &localRhs) const
Apply source flux boundary conditions to the system.
virtual void initializePostInitialConditionsPreSubGroups() override
Called by InitializePostInitialConditions() prior to initializing sub-Groups.
real64 m_maxCompFracChange
maximum (absolute) change in a component fraction in a Newton iteration
real64 m_sequentialCompDensChange
maximum (absolute) component density change in a sequential iteration
real64 m_targetRelativeCompDensChange
target (relative) change in component density in a time step
virtual real64 setNextDtBasedOnStateChange(real64 const &currentDt, DomainPartition &domain) override
function to set the next dt based on state change
void chopNegativeCompFractions(DomainPartition &domain)
Sets all the negative component fractions (if any) to zero.
CompositionalMultiphaseBase()=delete
deleted default constructor
integer m_allowCompDensChopping
flag indicating whether local (cell-wise) chopping of negative compositions is allowed
string m_referenceFluidModelName
name of the fluid constitutive model used as a reference for component/phase description
integer m_numComponents
the number of fluid components
CompositionalMultiphaseBase(CompositionalMultiphaseBase const &)=delete
deleted copy constructor
integer m_useTotalMassEquation
flag indicating whether total mass equation is used
virtual ~CompositionalMultiphaseBase() override=default
default destructor
void chopNegativeDensities(DomainPartition &domain)
Sets all the negative component densities (if any) to zero.
real64 m_maxRelativeCompDensChange
maximum (relative) change in component density in a Newton iteration
virtual void computeHydrostaticEquilibrium(DomainPartition &domain) override
Compute the hydrostatic equilibrium using the compositions and temperature input tables.
real64 m_minCompDens
minimum allowed global component density
CompositionalMultiphaseFormulationType m_formulationType
formulation type
CompositionalMultiphaseBase(const string &name, Group *const parent)
main constructor for Group Objects
integer m_numPhases
the max number of fluid phases
bool m_hasDispersion
flag to determine whether or not to apply dispersion
real64 m_targetRelativeTempChange
target (relative) change in temperature in a time step
void applyDirichletBC(real64 const time, real64 const dt, DofManager const &dofManager, DomainPartition &domain, CRSMatrixView< real64, globalIndex const > const &localMatrix, arrayView1d< real64 > const &localRhs) const
Function to perform the Application of Dirichlet type BC's.
CompositionalMultiphaseBase & operator=(CompositionalMultiphaseBase const &)=delete
deleted assignment operator
CompositionalMultiphaseBase & operator=(CompositionalMultiphaseBase &&)=delete
deleted move operator
The DoFManager is responsible for allocating global dofs, constructing sparsity patterns,...
Definition: DofManager.hpp:44
globalIndex rankOffset(string const &fieldName) const
string const & getKey(string const &fieldName) const
Return the key used to record the field in the DofManager.
Partition of the decomposed physical domain. It also manages the connexion information to its neighbo...
void apply(real64 const time, MeshLevel &mesh, string const &fieldName, LAMBDA &&lambda) const
This function is the main driver for the field applications.
static FieldSpecificationManager & getInstance()
integer m_isThermal
flag to determine whether or not this is a thermal simulation
Class facilitating the representation of a multi-level discretization of a MeshBody.
Definition: MeshLevel.hpp:42
integer m_numNewtonIterations
The number of nonlinear iterations that have been exectued.
The ObjectManagerBase is the base object of all object managers in the mesh data hierachy.
virtual string getCatalogName() const =0
NonlinearSolverParameters m_nonlinearSolverParameters
Nonlinear solver parameters.
DataContext const & getDataContext() const
Definition: Group.hpp:1345
string const & getName() const
Get group name.
Definition: Group.hpp:1331
virtual void resetStateToBeginningOfStep(DomainPartition &domain) override
reset state of physics back to the beginning of the step.
virtual void implicitStepSetup(real64 const &time_n, real64 const &dt, DomainPartition &domain) override
function to perform setup for implicit timestep
real64 updatePhaseVolumeFraction(ObjectManagerBase &dataGroup) const
Recompute phase volume fractions (saturations) from constitutive and primary variables.
virtual units::Unit getMassUnit() const override
virtual void assembleSystem(real64 const time_n, real64 const dt, DomainPartition &domain, DofManager const &dofManager, CRSMatrixView< real64, globalIndex const > const &localMatrix, arrayView1d< real64 > const &localRhs) override
function to assemble the linear system matrix and rhs
virtual void assembleStabilizedFluxTerms(real64 const dt, DomainPartition const &domain, DofManager const &dofManager, CRSMatrixView< real64, globalIndex const > const &localMatrix, arrayView1d< real64 > const &localRhs) const =0
assembles the flux terms for all cells with pressure jump stabilization
virtual void saveSequentialIterationState(DomainPartition &domain) override final
Utility function to save the iteration state (useful for sequential simulations)
virtual void implicitStepComplete(real64 const &time, real64 const &dt, DomainPartition &domain) override
perform cleanup for implicit timestep
integer numFluidComponents() const
Getter for the number of fluid components (species)
virtual void applyBoundaryConditions(real64 const time_n, real64 const dt, DomainPartition &domain, DofManager const &dofManager, CRSMatrixView< real64, globalIndex const > const &localMatrix, arrayView1d< real64 > const &localRhs) override
apply boundary condition to system
virtual void assembleFluxTerms(real64 const dt, DomainPartition const &domain, DofManager const &dofManager, CRSMatrixView< real64, globalIndex const > const &localMatrix, arrayView1d< real64 > const &localRhs) const =0
assembles the flux terms for all cells
void updateFluidModel(ObjectManagerBase &dataGroup) const
Update all relevant fluid models using current values of pressure and composition.
virtual void updatePhaseMobility(ObjectManagerBase &dataGroup) const =0
Recompute phase mobility from constitutive and primary variables.
void updateRelPermModel(ObjectManagerBase &dataGroup) const
Update all relevant relperm models using current values of phase volume fraction.
virtual void updateState(DomainPartition &domain) override final
Recompute all dependent quantities from primary variables (including constitutive models)
void assembleLocalTerms(DomainPartition &domain, DofManager const &dofManager, CRSMatrixView< real64, globalIndex const > const &localMatrix, arrayView1d< real64 > const &localRhs) const
assembles the accumulation other local terms for all cells
void updateCapPressureModel(ObjectManagerBase &dataGroup) const
Update all relevant capillary pressure models using current values of phase volume fraction.
void updateEnergy(ElementSubRegionBase &subRegion) const
Update energy.
void accumulationAssemblyLaunch(DofManager const &dofManager, SUBREGION_TYPE const &subRegion, CRSMatrixView< real64, globalIndex const > const &localMatrix, arrayView1d< real64 > const &localRhs)
assembles the accumulation terms for all cells of a spcefici subRegion.
void updateSolidInternalEnergyModel(ObjectManagerBase &dataGroup) const
Update all relevant solid internal energy models using current values of temperature.
string referenceFluidModelName() const
Getter for the name of the reference fluid model name.
virtual void saveConvergedState(ElementSubRegionBase &subRegion) const override final
Utility function to save the converged state.
void updateCompAmount(ElementSubRegionBase &subRegion) const
Update components mass/moles.
integer numFluidPhases() const
Getter for the number of fluid phases.
void updateGlobalComponentFraction(ObjectManagerBase &dataGroup) const
Recompute global component fractions from primary variables (component densities)
ArrayView< T, 1 > arrayView1d
Alias for 1D array view.
Definition: DataTypes.hpp:188
stdVector< string > string_array
A 1-dimensional array of geos::string types.
Definition: DataTypes.hpp:401
LvArray::CRSMatrixView< T, COL_INDEX, localIndex const, LvArray::ChaiBuffer > CRSMatrixView
Alias for CRS Matrix View.
Definition: DataTypes.hpp:318
GEOS_GLOBALINDEX_TYPE globalIndex
Global index type (for indexing objects across MPI partitions).
Definition: DataTypes.hpp:87
ENUM_STRINGS(LinearSolverParameters::SolverType, "direct", "cg", "gmres", "fgmres", "bicgstab", "preconditioner")
Declare strings associated with enumeration values.
double real64
64-bit floating point type.
Definition: DataTypes.hpp:98
std::int32_t integer
Signed integer type.
Definition: DataTypes.hpp:81
LvArray::SortedArrayView< T, localIndex, LvArray::ChaiBuffer > SortedArrayView
A sorted array view of local indices.
Definition: DataTypes.hpp:279
CompositionalMultiphaseFormulationType
Options for flow formulation.
@ OverallComposition
use overall composition (z_c) as primary variables
@ ComponentDensities
use component densities as primary variables