GEOS
FieldSpecificationBase.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_FIELDSPECIFICATION_FIELDSPECIFICATIONBASE_HPP
21 #define GEOS_FIELDSPECIFICATION_FIELDSPECIFICATIONBASE_HPP
22 
23 #include "common/DataTypes.hpp"
24 #include "common/TypeDispatch.hpp"
25 #include "codingUtilities/traits.hpp"
26 #include "codingUtilities/Utilities.hpp"
27 #include "dataRepository/Group.hpp"
31 #include "mesh/MeshObjectPath.hpp"
33 #include "common/GEOS_RAJA_Interface.hpp"
34 
35 namespace geos
36 {
37 class Function;
38 
39 
45 {
46 public:
47 
57  string const &,
58  dataRepository::Group * const >;
59 
65 
70  static string catalogName() { return "FieldSpecification"; }
71 
76  virtual const string getCatalogName() const
77  {
79  }
80 
91  FieldSpecificationBase( string const & name, dataRepository::Group * parent );
92 
96  virtual ~FieldSpecificationBase() override;
97 
98 
101 
104 
107 
110 
121  template< typename OBJECT_TYPE,
122  typename BC_TYPE = FieldSpecificationBase,
123  typename LAMBDA >
124  void apply( MeshLevel & mesh,
125  LAMBDA && lambda ) const
126  {
127  MeshObjectPath const & meshObjectPaths = this->getMeshObjectPaths();
128  meshObjectPaths.forObjectsInPath< OBJECT_TYPE >( mesh,
129  [&] ( OBJECT_TYPE & object )
130  {
131  {
133  string_array setNames = this->getSetNames();
134  for( auto & setName : setNames )
135  {
136  if( setGroup.hasWrapper( setName ) )
137  {
138  SortedArrayView< localIndex const > const & targetSet = setGroup.getReference< SortedArray< localIndex > >( setName );
139  lambda( dynamic_cast< BC_TYPE const & >(*this), setName, targetSet, object, getFieldName() );
140  }
141  }
142  }
143  } );
144  }
145 
156  template< typename FIELD_OP, typename POLICY, typename T, int N, int USD >
157  void applyFieldValueKernel( ArrayView< T, N, USD > const & field,
158  SortedArrayView< localIndex const > const & targetSet,
159  real64 const time,
160  Group & dataGroup ) const;
161 
173  template< typename FIELD_OP, typename POLICY=parallelHostPolicy >
175  real64 const time,
176  dataRepository::Group & dataGroup,
177  string const & fieldname ) const;
178 
199  template< typename FIELD_OP, typename POLICY, typename T, int NDIM, int USD >
201  real64 const time,
202  dataRepository::Group const & dataGroup,
203  arrayView1d< globalIndex const > const & dofMap,
204  globalIndex const dofRankOffset,
206  arrayView1d< real64 > const & rhs,
207  ArrayView< T const, NDIM, USD > const & fieldView ) const;
208 
228  template< typename FIELD_OP, typename POLICY >
230  real64 const time,
231  dataRepository::Group const & dataGroup,
232  string const & fieldName,
233  string const & dofMapName,
234  globalIndex const dofRankOffset,
236  arrayView1d< real64 > const & rhs ) const;
237 
260  template< typename FIELD_OP, typename POLICY, typename LAMBDA >
261  void
263  real64 const time,
264  dataRepository::Group const & dataGroup,
265  arrayView1d< globalIndex const > const & dofMap,
266  globalIndex const dofRankOffset,
268  arrayView1d< real64 > const & rhs,
269  LAMBDA && lambda ) const;
270 
294  template< typename FIELD_OP, typename POLICY, typename LAMBDA >
295  void
297  real64 const time,
298  real64 const dt,
299  dataRepository::Group const & dataGroup,
300  arrayView1d< globalIndex const > const & dofMap,
301  globalIndex const dofRankOffset,
303  arrayView1d< real64 > const & rhs,
304  LAMBDA && lambda ) const;
305 
335  template< typename FIELD_OP, typename POLICY, typename LAMBDA >
336  void
338  real64 const time,
339  real64 const dt,
340  dataRepository::Group const & dataGroup,
341  arrayView1d< globalIndex const > const & dofMap,
342  globalIndex const dofRankOffset,
344  arrayView1d< globalIndex > const & dof,
345  arrayView1d< real64 > const & rhsContribution,
346  LAMBDA && lambda ) const;
347 
348 
359  template< typename POLICY >
361  arrayView1d< globalIndex const > const & dofMap,
362  CRSMatrixView< real64, globalIndex const > const & matrix ) const;
363 
368  {
370  constexpr static char const * setNamesString() { return "setNames"; }
372  constexpr static char const * constitutivePathString() { return "constitutivePath"; }
374  constexpr static char const * objectPathString() { return "objectPath"; }
376  constexpr static char const * fieldNameString() { return "fieldName"; }
378  constexpr static char const * dataTypeString() { return "dataType"; }
380  constexpr static char const * componentString() { return "component"; }
382  constexpr static char const * directionString() { return "direction"; }
384  constexpr static char const * bcApplicationTableNameString() { return "bcApplicationTableName"; }
386  constexpr static char const * scaleString() { return "scale"; }
388  constexpr static char const * functionNameString() { return "functionName"; }
390  constexpr static char const * initialConditionString() { return "initialCondition"; }
392  constexpr static char const * beginTimeString() { return "beginTime"; }
394  constexpr static char const * endTimeString() { return "endTime"; }
395  };
396 
401  string const & getFunctionName() const
402  {
403  return m_functionName;
404  }
405 
410  virtual const string & getObjectPath() const
411  {
412  return m_objectPath;
413  }
414 
419  virtual const string & getFieldName() const
420  {
421  return m_fieldName;
422  }
423 
428  virtual int getComponent() const
429  {
430  return m_component;
431  }
432 
437  virtual R1Tensor const & getDirection() const
438  {
439  GEOS_UNUSED_VAR( time );
440  return m_direction;
441  }
442 
448  {
449  return m_beginTime;
450  }
451 
457  {
458  return m_endTime;
459  }
460 
465  string_array const & getSetNames() const
466  {
467  return m_setNames;
468  }
469 
474  int initialCondition() const
475  {
476  return m_initialCondition;
477  }
478 
483  real64 getScale() const
484  {
485  return m_scale;
486  }
487 
492  void setFieldName( string const & fieldName )
493  {
494  m_fieldName = fieldName;
495  }
496 
501  void setObjectPath( string const & objectPath )
502  {
503  m_objectPath = objectPath;
504  }
505 
510  void setScale( real64 const & scale )
511  {
512  m_scale = scale;
513  }
514 
519  void initialCondition( bool isInitialCondition )
520  {
521  m_initialCondition = isInitialCondition;
522  }
523 
528  void addSetName( string const & setName )
529  {
530  m_setNames.emplace_back( setName );
531  }
532 
538  void setMeshObjectPath( Group const & meshBodies );
539 
546  {
547  return *(m_meshObjectPaths.get());
548  }
549 
550 
551 protected:
552 
553 
554 private:
555 
556 
558  string_array m_setNames;
559 
561  string m_objectPath;
562 
563  std::unique_ptr< MeshObjectPath > m_meshObjectPaths;
564 
567  string m_fieldName;
568 
569 
571  int m_component;
572 
574  R1Tensor m_direction;
575 
577  int m_initialCondition;
578 
580  string m_functionName;
581 
583  real64 m_scale;
584 
586  real64 m_beginTime;
587 
589  real64 m_endTime;
590 
592  string m_bcApplicationFunctionName;
593 
594 };
595 
596 
597 template< typename FIELD_OP, typename POLICY, typename T, int N, int USD >
599  SortedArrayView< localIndex const > const & targetSet,
600  real64 const time,
601  Group & dataGroup ) const
602 {
603  integer const component = getComponent();
604  FunctionManager & functionManager = FunctionManager::getInstance();
605 
606  if( m_functionName.empty() )
607  {
608  real64 const value = m_scale;
609  forAll< POLICY >( targetSet.size(), [=] GEOS_HOST_DEVICE ( localIndex const i )
610  {
611  localIndex const a = targetSet[ i ];
612  FIELD_OP::SpecifyFieldValue( field, a, component, value );
613  } );
614  }
615  else
616  {
617  FunctionBase const & function = [&]() -> FunctionBase const &
618  {
619  try
620  {
621  return functionManager.getGroup< FunctionBase >( m_functionName );
622  }
623  catch( std::exception const & e )
624  {
625  throw InputError( e, GEOS_FMT( "Error while reading {}:\n",
627  }
628  }();
629 
630  if( function.isFunctionOfTime()==2 )
631  {
632  real64 const value = m_scale * function.evaluate( &time );
633  forAll< POLICY >( targetSet.size(), [=] GEOS_HOST_DEVICE ( localIndex const i )
634  {
635  localIndex const a = targetSet[ i ];
636  FIELD_OP::SpecifyFieldValue( field, a, component, value );
637  } );
638  }
639  else
640  {
641  real64_array result( static_cast< localIndex >( targetSet.size() ) );
642  function.evaluate( dataGroup, time, targetSet, result );
643  arrayView1d< real64 const > const & resultView = result.toViewConst();
644  real64 const scale = m_scale;
645  forAll< POLICY >( targetSet.size(), [=] GEOS_HOST_DEVICE ( localIndex const i )
646  {
647  localIndex const a = targetSet[ i ];
648  FIELD_OP::SpecifyFieldValue( field, a, component, scale * resultView[i] );
649  } );
650  }
651  }
652 }
653 
654 
655 template< typename FIELD_OP, typename POLICY >
657  real64 const time,
658  dataRepository::Group & dataGroup,
659  string const & fieldName ) const
660 {
661  dataRepository::WrapperBase & wrapper = dataGroup.getWrapperBase( fieldName );
662 
663  // // This function is used in setting boundary/initial conditions on simulation fields.
664  // // This is meaningful for 1/2/3D real arrays and sometimes 1D integer (indicator) arrays.
667 
668 
669  types::dispatch( FieldTypes{}, [&]( auto tupleOfTypes )
670  {
671  using ArrayType = camp::first< decltype( tupleOfTypes ) >;
672  auto & wrapperT = dataRepository::Wrapper< ArrayType >::cast( wrapper );
673  applyFieldValueKernel< FIELD_OP, POLICY >( wrapperT.reference().toView(), targetSet, time, dataGroup );
674  }, wrapper );
675 }
676 
677 template< typename FIELD_OP, typename POLICY, typename T, int NDIM, int USD >
679  real64 const time,
680  dataRepository::Group const & dataGroup,
681  arrayView1d< globalIndex const > const & dofMap,
682  globalIndex const dofRankOffset,
684  arrayView1d< real64 > const & rhs,
685  ArrayView< T const, NDIM, USD > const & fieldView ) const
686 {
687  integer const component = getComponent();
688  this->applyBoundaryConditionToSystem< FIELD_OP, POLICY >( targetSet, time, dataGroup, dofMap, dofRankOffset, matrix, rhs,
689  [fieldView, component] GEOS_HOST_DEVICE ( localIndex const a )
690  {
691  real64 value = 0.0;
692  FieldSpecificationEqual::readFieldValue( fieldView, a, component, value );
693  return value;
694  } );
695 }
696 
697 template< typename FIELD_OP, typename POLICY >
699  real64 const time,
700  dataRepository::Group const & dataGroup,
701  string const & fieldName,
702  string const & dofMapName,
703  globalIndex const dofRankOffset,
705  arrayView1d< real64 > const & rhs ) const
706 {
707  dataRepository::WrapperBase const & wrapper = dataGroup.getWrapperBase( fieldName );
708  arrayView1d< globalIndex const > const & dofMap = dataGroup.getReference< array1d< globalIndex > >( dofMapName );
709 
710  // We're reading values from a field, which is only well-defined for dims 1 and 2
712  types::dispatch( FieldTypes{}, [&]( auto tupleOfTypes )
713  {
714  using ArrayType = camp::first< decltype( tupleOfTypes ) >;
715  auto const & wrapperT = dataRepository::Wrapper< ArrayType >::cast( wrapper );
716  applyBoundaryConditionToSystemKernel< FIELD_OP, POLICY >( targetSet,
717  time,
718  dataGroup,
719  dofMap,
720  dofRankOffset,
721  matrix,
722  rhs,
723  wrapperT.reference() );
724  }, wrapper );
725 }
726 
727 template< typename FIELD_OP, typename POLICY, typename LAMBDA >
728 void
731  real64 const time,
732  dataRepository::Group const & dataGroup,
733  arrayView1d< globalIndex const > const & dofMap,
734  globalIndex const dofRankOffset,
736  arrayView1d< real64 > const & rhs,
737  LAMBDA && lambda ) const
738 {
739  return applyBoundaryConditionToSystem< FIELD_OP, POLICY >( targetSet,
740  time,
741  1.0,
742  dataGroup,
743  dofMap,
744  dofRankOffset,
745  matrix,
746  rhs,
747  std::forward< LAMBDA >( lambda ) );
748 }
749 
750 template< typename FIELD_OP, typename POLICY, typename LAMBDA >
751 void
754  real64 const time,
755  real64 const dt,
756  dataRepository::Group const & dataGroup,
757  arrayView1d< globalIndex const > const & dofMap,
758  globalIndex const dofRankOffset,
760  arrayView1d< real64 > const & rhs,
761  LAMBDA && lambda ) const
762 {
763  array1d< globalIndex > dofArray( targetSet.size() );
764  arrayView1d< globalIndex > const & dof = dofArray.toView();
765 
766  array1d< real64 > rhsContributionArray( targetSet.size() );
767  arrayView1d< real64 > const & rhsContribution = rhsContributionArray.toView();
768 
769  computeRhsContribution< FIELD_OP, POLICY, LAMBDA >( targetSet,
770  time,
771  dt,
772  dataGroup,
773  dofMap,
774  dofRankOffset,
775  matrix,
776  dof,
777  rhsContribution,
778  std::forward< LAMBDA >( lambda ) );
779 
780  FIELD_OP::template prescribeRhsValues< POLICY >( rhs, dof, dofRankOffset, rhsContribution );
781 }
782 
783 template< typename FIELD_OP, typename POLICY, typename LAMBDA >
784 void
787  real64 const time,
788  real64 const dt,
789  dataRepository::Group const & dataGroup,
790  arrayView1d< globalIndex const > const & dofMap,
791  globalIndex const dofRankOffset,
793  arrayView1d< globalIndex > const & dof,
794  arrayView1d< real64 > const & rhsContribution,
795  LAMBDA && lambda ) const
796 {
797  integer const component = ( getComponent() >=0 ) ? getComponent() : 0;
798  string const & functionName = getReference< string >( viewKeyStruct::functionNameString() );
799  FunctionManager & functionManager = FunctionManager::getInstance();
800 
801  // Compute the value of the rhs terms, and collect the dof numbers
802  // The rhs terms will be assembled in applyBoundaryConditionToSystem (or in the solver for CompositionalMultiphaseBase)
803 
804  if( functionName.empty() || functionManager.getGroup< FunctionBase >( functionName ).isFunctionOfTime() == 2 )
805  {
806  real64 value = m_scale * dt;
807  if( !functionName.empty() )
808  {
809  FunctionBase const & function = functionManager.getGroup< FunctionBase >( functionName );
810  value *= function.evaluate( &time );
811  }
812 
813  forAll< POLICY >( targetSet.size(),
814  [targetSet, dof, dofMap, dofRankOffset, component, matrix, rhsContribution, value, lambda] GEOS_HOST_DEVICE ( localIndex const i )
815  {
816  localIndex const a = targetSet[ i ];
817  dof[ i ] = dofMap[ a ] + component;
818  FIELD_OP::SpecifyFieldValue( dof[ i ],
819  dofRankOffset,
820  matrix,
821  rhsContribution[ i ],
822  value,
823  lambda( a ) );
824  } );
825  }
826  else
827  {
828  FunctionBase const & function = functionManager.getGroup< FunctionBase >( functionName );
829 
830  real64_array resultsArray( targetSet.size() );
831  function.evaluate( dataGroup, time, targetSet, resultsArray );
832  arrayView1d< real64 const > const & results = resultsArray.toViewConst();
833  real64 const value = m_scale * dt;
834 
835  forAll< POLICY >( targetSet.size(),
836  [targetSet, dof, dofMap, dofRankOffset, component, matrix, rhsContribution, results, value, lambda] GEOS_HOST_DEVICE (
837  localIndex const i )
838  {
839  localIndex const a = targetSet[ i ];
840  dof[ i ] = dofMap[ a ] + component;
841  FIELD_OP::SpecifyFieldValue( dof[ i ],
842  dofRankOffset,
843  matrix,
844  rhsContribution[ i ],
845  value * results[ i ],
846  lambda( a ) );
847  } );
848  }
849 }
850 
851 
852 template< typename POLICY >
854  arrayView1d< globalIndex const > const & dofMap,
855  CRSMatrixView< real64, globalIndex const > const & matrix ) const
856 
857 {
858  integer const component = ( getComponent() >=0 ) ? getComponent() : 0;
859  forAll< POLICY >( targetSet.size(), [targetSet, dofMap, matrix, component] GEOS_HOST_DEVICE ( localIndex const i )
860  {
861  localIndex const a = targetSet[ i ];
862  globalIndex const dof = dofMap[ a ] + component;
863 
864  arraySlice1d< real64 > const entries = matrix.getEntries( dof );
865  localIndex const numEntries = matrix.numNonZeros( dof );
866 
867  for( localIndex j = 0; j < numEntries; ++j )
868  {
869  entries[ j ] = 0;
870  }
871  } );
872 }
873 
874 }
875 
876 #endif //GEOS_FIELDSPECIFICATION_FIELDSPECIFICATIONBASE_HPP
#define GEOS_HOST_DEVICE
Marks a host-device function.
Definition: GeosxMacros.hpp:49
#define GEOS_UNUSED_VAR(...)
Mark an unused variable and silence compiler warnings.
Definition: GeosxMacros.hpp:84
void computeRhsContribution(SortedArrayView< localIndex const > const &targetSet, real64 const time, real64 const dt, dataRepository::Group const &dataGroup, arrayView1d< globalIndex const > const &dofMap, globalIndex const dofRankOffset, CRSMatrixView< real64, globalIndex const > const &matrix, arrayView1d< globalIndex > const &dof, arrayView1d< real64 > const &rhsContribution, LAMBDA &&lambda) const
Compute the contributions that will be added/enforced to the right-hand side, and collect the corresp...
void applyFieldValueKernel(ArrayView< T, N, USD > const &field, SortedArrayView< localIndex const > const &targetSet, real64 const time, Group &dataGroup) const
void zeroSystemRowsForBoundaryCondition(SortedArrayView< localIndex const > const &targetSet, arrayView1d< globalIndex const > const &dofMap, CRSMatrixView< real64, globalIndex const > const &matrix) const
Function to zero matrix rows to apply boundary conditions.
FieldSpecificationBase(FieldSpecificationBase &&)=default
Defaulted move constructor.
void addSetName(string const &setName)
virtual ~FieldSpecificationBase() override
virtual const string & getFieldName() const
void setMeshObjectPath(Group const &meshBodies)
Set the Mesh Object Path object.
string_array const & getSetNames() const
void applyBoundaryConditionToSystemKernel(SortedArrayView< localIndex const > const &targetSet, real64 const time, dataRepository::Group const &dataGroup, arrayView1d< globalIndex const > const &dofMap, globalIndex const dofRankOffset, CRSMatrixView< real64, globalIndex const > const &matrix, arrayView1d< real64 > const &rhs, ArrayView< T const, NDIM, USD > const &fieldView) const
Apply a boundary condition to a system of equations.
virtual R1Tensor const & getDirection() const
void initialCondition(bool isInitialCondition)
void setObjectPath(string const &objectPath)
FieldSpecificationBase(FieldSpecificationBase const &)=delete
Deleted copy constructor.
void setScale(real64 const &scale)
string const & getFunctionName() const
void applyFieldValue(SortedArrayView< localIndex const > const &targetSet, real64 const time, dataRepository::Group &dataGroup, string const &fieldname) const
void applyBoundaryConditionToSystem(SortedArrayView< localIndex const > const &targetSet, real64 const time, dataRepository::Group const &dataGroup, string const &fieldName, string const &dofMapName, globalIndex const dofRankOffset, CRSMatrixView< real64, globalIndex const > const &matrix, arrayView1d< real64 > const &rhs) const
Apply a boundary condition to a system of equations.
void setFieldName(string const &fieldName)
FieldSpecificationBase & operator=(FieldSpecificationBase const &)=delete
deleted copy assignment
void apply(MeshLevel &mesh, LAMBDA &&lambda) const
Apply this field specification to the discretization.
MeshObjectPath const & getMeshObjectPaths() const
Get the Mesh Object Paths object.
virtual const string & getObjectPath() const
FieldSpecificationBase & operator=(FieldSpecificationBase &&)=delete
deleted move assignement
FieldSpecificationBase(string const &name, dataRepository::Group *parent)
constructor
integer isFunctionOfTime() const
Test to see if the function is a 1D function of time.
virtual void evaluate(dataRepository::Group const &group, real64 const time, SortedArrayView< localIndex const > const &set, arrayView1d< real64 > const &result) const =0
Method to evaluate a function on a target object.
static FunctionManager & getInstance()
Class facilitating the representation of a multi-level discretization of a MeshBody.
Definition: MeshLevel.hpp:42
Class to hold the path to a collection of mesh objects.
void forObjectsInPath(dataRepository::Group &meshBodies, FUNC &&func) const
LLoop over objects in the path and execute a callback function.
This class provides the base class/interface for the catalog value objects.
std::unordered_map< std::string, std::unique_ptr< CatalogInterface< BASETYPE, ARGS... > > > CatalogType
This is the type that will be used for the catalog. The catalog is actually instantiated in the BASET...
bool hasWrapper(LOOKUP_TYPE const &lookup) const
Check if a wrapper exists.
Definition: Group.hpp:1202
GEOS_DECLTYPE_AUTO_RETURN getReference(LOOKUP_TYPE const &lookup) const
Look up a wrapper and get reference to wrapped object.
Definition: Group.hpp:1273
WrapperBase const & getWrapperBase(KEY const &key) const
Return a reference to a WrapperBase stored in this group.
Definition: Group.hpp:1121
T & getGroup(KEY const &key)
Return a reference to a sub-group of the current Group.
Definition: Group.hpp:336
DataContext const & getWrapperDataContext(KEY key) const
Definition: Group.hpp:1354
Base class for all wrappers containing common operations.
Definition: WrapperBase.hpp:56
static Wrapper & cast(WrapperBase &wrapper)
Downcast base to a typed wrapper.
Definition: Wrapper.hpp:221
static string catalogName()
Static Factory Catalog Functions.
virtual const string getCatalogName() const
return the catalog name
static CatalogInterface::CatalogType & getCatalog()
static function to return static catalog.
internal::Apply< internal::ArrayType, camp::cartesian_product< TYPES, internal::AddLayouts< NDIMS > > > ArrayTypes
Construct a list of GEOSX multidimensional array types (geos::Array), containing all value types in t...
DimsRange< N, N > DimsSingle
Generate a list of types representing array dimensionality exactly N.
bool dispatch(LIST const combinations, LAMBDA &&lambda, Ts &&... objects)
Dispatch a generic worker function lambda based on runtime type.
internal::Apply< camp::list, LIST > ListofTypeList
Construct a list of list type.
ArrayView< T, 1 > arrayView1d
Alias for 1D array view.
Definition: DataTypes.hpp:180
LvArray::CRSMatrixView< T, COL_INDEX, localIndex const, LvArray::ChaiBuffer > CRSMatrixView
Alias for CRS Matrix View.
Definition: DataTypes.hpp:310
GEOS_GLOBALINDEX_TYPE globalIndex
Global index type (for indexing objects across MPI partitions).
Definition: DataTypes.hpp:88
array1d< string > string_array
A 1-dimensional array of geos::string types.
Definition: DataTypes.hpp:392
double real64
64-bit floating point type.
Definition: DataTypes.hpp:99
GEOS_LOCALINDEX_TYPE localIndex
Local index type (for indexing objects within an MPI partition).
Definition: DataTypes.hpp:85
ArraySlice< T, 1, USD > arraySlice1d
Alias for 1D array slice.
Definition: DataTypes.hpp:184
std::int32_t integer
Signed integer type.
Definition: DataTypes.hpp:82
array1d< real64 > real64_array
A 1-dimensional array of geos::real64 types.
Definition: DataTypes.hpp:389
LvArray::SortedArray< T, localIndex, LvArray::ChaiBuffer > SortedArray
A sorted array of local indices.
Definition: DataTypes.hpp:267
LvArray::SortedArrayView< T, localIndex, LvArray::ChaiBuffer > SortedArrayView
A sorted array view of local indices.
Definition: DataTypes.hpp:271
Array< T, 1 > array1d
Alias for 1D array.
Definition: DataTypes.hpp:176
LvArray::ArrayView< T, NDIM, USD, localIndex, LvArray::ChaiBuffer > ArrayView
Multidimensional array view type. See LvArray:ArrayView for details.
Definition: DataTypes.hpp:148
constexpr static char const * initialConditionString()
constexpr static char const * constitutivePathString()
constexpr static char const * bcApplicationTableNameString()
constexpr static char const * functionNameString()
static GEOS_HOST_DEVICE std::enable_if< !traits::is_tensorT< T >, void >::type readFieldValue(arrayView1d< T const > const &field, localIndex const index, integer const component, real64 &value)
Read a field value.
Exception class used to report errors in user input.
Definition: Logger.hpp:502
static constexpr char const * setsString()