GEOS
ConformingVirtualElementOrder1.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_VIRTUALELEMENT_CONFORMINGVIRTUALELEMENTORDER1_HPP_
21 #define GEOS_VIRTUALELEMENT_CONFORMINGVIRTUALELEMENTORDER1_HPP_
22 
23 #include "FiniteElementBase.hpp"
24 #include "codingUtilities/traits.hpp"
25 
26 namespace geos
27 {
28 namespace finiteElement
29 {
38 template< localIndex MAXCELLNODES, localIndex MAXFACENODES >
39 class ConformingVirtualElementOrder1_impl : public FiniteElementBase_impl< MAXCELLNODES, MAXFACENODES, 1 >
40 {
41 public:
45  template< typename SUBREGION_TYPE >
46  using InputCellToNodeMap = traits::ViewTypeConst< typename SUBREGION_TYPE::NodeMapType >;
48  template< typename SUBREGION_TYPE >
49  using InputCellToFaceMap = traits::ViewTypeConst< typename SUBREGION_TYPE::FaceMapType >;
56 
58  static constexpr localIndex maxSupportPoints = MAXCELLNODES;
60  static constexpr localIndex numNodes = MAXCELLNODES;
62  static constexpr localIndex numQuadraturePoints = 1;
63 
73  {
74 
84  real64 stabilizationMatrix[MAXCELLNODES][MAXCELLNODES];
88  };
89 
95  template< typename SUBREGION_TYPE >
96  struct MeshData
97  {
120  };
121 
124  inline static
126  {
127  return numQuadraturePoints;
128  }
129 
132  inline static
134  {
135  return maxSupportPoints;
136  }
137 
144  inline
146  {
147  return stack.numSupportPoints;
148  }
149 
160  static
162  real64 const (&X)[numNodes][3],
163  StackVariables const & stack,
164  real64 (& J)[3][3] )
165  {
166  GEOS_UNUSED_VAR( q );
167  GEOS_UNUSED_VAR( X );
168  for( localIndex i = 0; i < 3; ++i )
169  {
170  for( localIndex j = 0; j < 3; ++j )
171  {
172  J[i][j] = ( i == j ) ? 1.0 : 0.0;
173  }
174  }
175  return stack.quadratureWeight; // * 1.0;
176  }
177 
189  inline
190  static real64 calcGradN( localIndex const q,
191  real64 const (&X)[maxSupportPoints][3],
192  StackVariables const & stack,
193  real64 ( & gradN )[maxSupportPoints][3] )
194  {
195  for( localIndex i = 0; i < stack.numSupportPoints; ++i )
196  {
197  gradN[i][0] = stack.basisDerivativesIntegralMean[i][0];
198  gradN[i][1] = stack.basisDerivativesIntegralMean[i][1];
199  gradN[i][2] = stack.basisDerivativesIntegralMean[i][2];
200  }
201  return transformedQuadratureWeight( q, X, stack );
202  }
203 
213  inline
214  static void calcN( localIndex const q,
215  StackVariables const & stack,
216  real64 ( & N )[maxSupportPoints] )
217  {
218  GEOS_UNUSED_VAR( q );
219  for( localIndex i = 0; i < stack.numSupportPoints; ++i )
220  {
221  N[i] = stack.basisFunctionsIntegralMean[i];
222  }
223  }
224 
234  template< localIndex NUMDOFSPERTRIALSUPPORTPOINT, localIndex MAXSUPPORTPOINTS, bool UPPER >
236  inline
237  static void addGradGradStabilization( StackVariables const & stack,
238  real64 ( & matrix )
239  [MAXSUPPORTPOINTS * NUMDOFSPERTRIALSUPPORTPOINT]
240  [MAXSUPPORTPOINTS * NUMDOFSPERTRIALSUPPORTPOINT],
241  real64 const & scaleFactor )
242  {
243  for( localIndex i = 0; i < stack.numSupportPoints; ++i )
244  {
245  localIndex startCol = (UPPER) ? i : 0;
246  for( localIndex j = startCol; j < stack.numSupportPoints; ++j )
247  {
248  real64 const contribution = scaleFactor * stack.stabilizationMatrix[i][j];
249  for( localIndex d = 0; d < NUMDOFSPERTRIALSUPPORTPOINT; ++d )
250  {
251  matrix[i*NUMDOFSPERTRIALSUPPORTPOINT + d][j*NUMDOFSPERTRIALSUPPORTPOINT + d] += contribution;
252  }
253  }
254  }
255  }
256 
269  template< localIndex NUMDOFSPERTRIALSUPPORTPOINT, localIndex MAXSUPPORTPOINTS >
271  inline
273  real64 const ( &dofs )[MAXSUPPORTPOINTS][NUMDOFSPERTRIALSUPPORTPOINT],
274  real64 ( & targetVector )[MAXSUPPORTPOINTS][NUMDOFSPERTRIALSUPPORTPOINT],
275  real64 const scaleFactor )
276  {
277  for( localIndex d = 0; d < NUMDOFSPERTRIALSUPPORTPOINT; ++d )
278  {
279  for( localIndex i = 0; i < stack.numSupportPoints; ++i )
280  {
281  for( localIndex j = 0; j < stack.numSupportPoints; ++j )
282  {
283  targetVector[i][d] += scaleFactor * stack.stabilizationMatrix[i][j] * dofs[j][d];
284  }
285  }
286  }
287  }
288 
298  inline
300  real64 const ( &X )[maxSupportPoints][3],
301  StackVariables const & stack )
302  {
303  GEOS_UNUSED_VAR( q, X );
304  return stack.quadratureWeight;
305  }
306 
315  template< typename SUBREGION_TYPE >
316  inline
317  static void fillMeshData( NodeManager const & nodeManager,
318  EdgeManager const & edgeManager,
319  FaceManager const & faceManager,
320  SUBREGION_TYPE const & cellSubRegion,
321  MeshData< SUBREGION_TYPE > & meshData
322  )
323  {
324  meshData.nodesCoords = nodeManager.referencePosition();
325  meshData.cellToNodeMap = cellSubRegion.nodeList().toViewConst();
326  meshData.cellToFaceMap = cellSubRegion.faceList().toViewConst();
327  meshData.faceToNodeMap = faceManager.nodeList().toViewConst();
328  meshData.faceToEdgeMap = faceManager.edgeList().toViewConst();
329  meshData.edgeToNodeMap = edgeManager.nodeList().toViewConst();
330  meshData.faceCenters = faceManager.faceCenter();
331  meshData.faceNormals = faceManager.faceNormal();
332  meshData.faceAreas = faceManager.faceArea();
333  meshData.cellCenters = cellSubRegion.getElementCenter();
334  meshData.cellVolumes = cellSubRegion.getElementVolume();
335  }
336 
344  template< typename SUBREGION_TYPE >
346  inline
347  static void setupStack( localIndex const & cellIndex,
348  MeshData< SUBREGION_TYPE > const & meshData,
349  StackVariables & stack )
350  {
351  real64 const cellCenter[3] { meshData.cellCenters( cellIndex, 0 ),
352  meshData.cellCenters( cellIndex, 1 ),
353  meshData.cellCenters( cellIndex, 2 ) };
354  real64 const cellVolume = meshData.cellVolumes( cellIndex );
355 
356  computeProjectors< SUBREGION_TYPE >( cellIndex,
357  meshData.nodesCoords,
358  meshData.cellToNodeMap,
359  meshData.cellToFaceMap,
360  meshData.faceToNodeMap,
361  meshData.faceToEdgeMap,
362  meshData.edgeToNodeMap,
363  meshData.faceCenters,
364  meshData.faceNormals,
365  meshData.faceAreas,
366  cellCenter,
367  cellVolume,
368  stack.numSupportPoints,
369  stack.quadratureWeight,
371  stack.stabilizationMatrix,
373  }
374 
390  inline static
392  {
393  GEOS_ERROR( "VEM functions have to be called with the StackVariables syntax" );
394  return 0;
395  }
396 
397 
406  static void getSamplingPointCoordInParentSpace( int const & linearIndex,
407  real64 (& samplingPointCoord)[3] )
408  {
409  GEOS_UNUSED_VAR( linearIndex, samplingPointCoord );
410  GEOS_ERROR( "Element type not supported." );
411  }
412 
420  inline
421  static void calcN( localIndex const q,
422  real64 ( & N )[maxSupportPoints] )
423  {
424  GEOS_ERROR( "VEM functions have to be called with the StackVariables syntax" );
425  GEOS_UNUSED_VAR( q );
426  for( localIndex i = 0; i < maxSupportPoints; ++i )
427  {
428  N[i] = 0.0;
429  }
430  }
431 
439  inline
440  static void calcN( real64 const (&coords)[3],
441  real64 (& N)[maxSupportPoints] )
442  {
443  GEOS_ERROR( "VEM functions have to be called with the StackVariables syntax" );
444  GEOS_UNUSED_VAR( coords );
445  for( localIndex i = 0; i < maxSupportPoints; ++i )
446  {
447  N[i] = 0.0;
448  }
449  }
450 
460  inline
461  static real64 invJacobianTransformation( int const q,
462  real64 const ( &X )[numNodes][3],
463  real64 ( & J )[3][3] )
464  {
465  GEOS_ERROR( "No reference element map is defined for VEM classes" );
466  GEOS_UNUSED_VAR( q, X );
467  for( localIndex i = 0; i < 3; ++i )
468  {
469  for( localIndex j = 0; j < 3; ++j )
470  {
471  J[i][j] = 0.0;
472  }
473  }
474  return 0.0;
475  }
476 
486  static real64 calcJacobian( localIndex const q,
487  real64 const (&X)[numNodes][3],
488  real64 (& J)[3][3] )
489  {
490  GEOS_ERROR( "VEM functions have to be called with the StackVariables syntax" );
491  GEOS_UNUSED_VAR( q, X );
492  for( localIndex i = 0; i < 3; ++i )
493  {
494  for( localIndex j = 0; j < 3; ++j )
495  {
496  J[i][j] = 0.0;
497  }
498  }
499  return 0.0;
500  }
501 
511  inline
512  static real64 calcGradN( localIndex const q,
513  real64 const ( &X )[maxSupportPoints][3],
514  real64 ( & gradN )[maxSupportPoints][3] )
515  {
516  GEOS_ERROR( "VEM functions have to be called with the StackVariables syntax" );
517  GEOS_UNUSED_VAR( q, X );
518  for( localIndex i = 0; i < maxSupportPoints; ++i )
519  {
520  for( localIndex j = 0; j < 3; ++j )
521  {
522  gradN[i][j] = 0.0;
523  }
524  }
525  return 0.0;
526  }
527 
537  real64 const ( &X )[maxSupportPoints][3] ) const
538  {
539  GEOS_ERROR( "VEM functions have to be called with the StackVariables syntax" );
540  GEOS_UNUSED_VAR( q, X );
541  return 0.0;
542  }
543 
546 private:
547 
549  static void
550  computeFaceIntegrals( InputNodeCoords const & nodesCoords,
551  localIndex const (&faceToNodes)[MAXFACENODES],
552  localIndex const (&faceToEdges)[MAXFACENODES],
553  localIndex const & numFaceVertices,
554  real64 const & faceArea,
555  real64 const (&faceCenter)[3],
556  real64 const (&faceNormal)[3],
557  InputEdgeToNodeMap const & edgeToNodes,
558  real64 const & invCellDiameter,
559  real64 const (&cellCenter)[3],
560  real64 ( &basisIntegrals )[MAXFACENODES],
561  real64 ( &threeDMonomialIntegrals )[3] );
562 
572  template< typename SUBREGION_TYPE >
574  inline
575  static void
576  computeProjectors( localIndex const & cellIndex,
577  InputNodeCoords const & nodesCoords,
578  InputCellToNodeMap< SUBREGION_TYPE > const & cellToNodeMap,
579  InputCellToFaceMap< SUBREGION_TYPE > const & elementToFaceMap,
580  InputFaceToNodeMap const & faceToNodeMap,
581  InputFaceToEdgeMap const & faceToEdgeMap,
582  InputEdgeToNodeMap const & edgeToNodeMap,
583  arrayView2d< real64 const > const faceCenters,
584  arrayView2d< real64 const > const faceNormals,
585  arrayView1d< real64 const > const faceAreas,
586  real64 const (&cellCenter)[3],
587  real64 const & cellVolume,
589  real64 & quadratureWeight,
590  real64 ( &basisFunctionsIntegralMean )[MAXCELLNODES],
591  real64 ( &stabilizationMatrix )[MAXCELLNODES][MAXCELLNODES],
592  real64 ( &basisDerivativesIntegralMean )[MAXCELLNODES][3]
593  );
594 
595  template< localIndex DIMENSION, typename POINT_COORDS_TYPE >
597  inline
598  static real64 computeDiameter( POINT_COORDS_TYPE points,
599  localIndex const & numPoints )
600  {
601  real64 diameter = 0;
602  for( localIndex numPoint = 0; numPoint < numPoints; ++numPoint )
603  {
604  for( localIndex numOthPoint = 0; numOthPoint < numPoint; ++numOthPoint )
605  {
606  real64 candidateDiameter = 0.0;
607  for( localIndex i = 0; i < DIMENSION; ++i )
608  {
609  real64 coordDiff = points[numPoint][i] - points[numOthPoint][i];
610  candidateDiameter += coordDiff * coordDiff;
611  }
612  if( diameter < candidateDiameter )
613  {
614  diameter = candidateDiameter;
615  }
616  }
617  }
618  return LvArray::math::sqrt< real64 >( diameter );
619  }
620 
621  template< localIndex DIMENSION, typename POINT_COORDS_TYPE, typename POINT_SELECTION_TYPE >
623  inline
624  static real64 computeDiameter( POINT_COORDS_TYPE points,
625  POINT_SELECTION_TYPE selectedPoints,
626  localIndex const & numSelectedPoints )
627  {
628  real64 diameter = 0;
629  for( localIndex numPoint = 0; numPoint < numSelectedPoints; ++numPoint )
630  {
631  for( localIndex numOthPoint = 0; numOthPoint < numPoint; ++numOthPoint )
632  {
633  real64 candidateDiameter = 0.0;
634  for( localIndex i = 0; i < DIMENSION; ++i )
635  {
636  real64 coordDiff = points[selectedPoints[numPoint]][i] -
637  points[selectedPoints[numOthPoint]][i];
638  candidateDiameter += coordDiff * coordDiff;
639  }
640  if( diameter < candidateDiameter )
641  {
642  diameter = candidateDiameter;
643  }
644  }
645  }
646  return LvArray::math::sqrt< real64 >( diameter );
647  }
648 };
649 
650 
651 
653 template< localIndex MAXCELLNODES, localIndex MAXFACENODES >
654 class ConformingVirtualElementOrder1 final : public ConformingVirtualElementOrder1_impl< MAXCELLNODES, MAXFACENODES >,
655  public FiniteElementBase
656 {
657 public:
660 
663 
666 
669 
672 
678  {
680  }
681 
687  {
688  return static_cast< const ConformingVirtualElementOrder1_impl< MAXCELLNODES, MAXFACENODES > * >(this);
689  }
690 
695  {}
696 
697  virtual ~ConformingVirtualElementOrder1() override final = default;
698 
699 
700 };
701 
704 #if !defined( GEOS_USE_HIP )
707 #endif
710 #if !defined( GEOS_USE_HIP )
713 #endif
726 #if !defined( GEOS_USE_HIP )
729 #endif
730 
731 
734 #if !defined( GEOS_USE_HIP )
737 #endif
740 #if !defined( GEOS_USE_HIP )
743 #endif
756 #if !defined( GEOS_USE_HIP )
759 #endif
760 
761 } // namespace finiteElement
762 } // namespace geos
763 
765 
766 #endif // GEOS_VIRTUALELEMENT_CONFORMINGVIRTUALELEMENTORDER1_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
#define GEOS_FORCE_INLINE
Marks a function or lambda for inlining.
Definition: GeosxMacros.hpp:51
#define GEOS_ERROR(...)
Raise a hard error and terminate the program.
Definition: Logger.hpp:204
This class provides an interface to ObjectManagerBase in order to manage edge data.
Definition: EdgeManager.hpp:43
NodeMapType & nodeList()
Get a node list.
The FaceManager class provides an interface to ObjectManagerBase in order to manage face data.
Definition: FaceManager.hpp:44
array2d< real64 > & faceNormal()
Get a mutable accessor to an array containing all the face normals.
array1d< real64 > & faceArea()
Get a mutable accessor to an array containing all the face area.
array2d< real64 > & faceCenter()
Get a mutable accessor to an array containing all the face center.
NodeMapType & nodeList()
Get a mutable accessor to a map containing the list of each nodes for each faces.
EdgeMapType & edgeList()
Get a mutable accessor to a map containing the list of each edges for each faces.
The NodeManager class provides an interface to ObjectManagerBase in order to manage node data.
Definition: NodeManager.hpp:46
static constexpr localIndex numNodes
Static property kept for consistency with other finite element classes.
static GEOS_HOST_DEVICE void setupStack(localIndex const &cellIndex, MeshData< SUBREGION_TYPE > const &meshData, StackVariables &stack)
Setup method.
static constexpr localIndex maxSupportPoints
The maximum number of support points per element.
arrayView2d< real64 const, nodes::REFERENCE_POSITION_USD > InputNodeCoords
Type of MeshData::nodesCoords.
static GEOS_HOST_DEVICE real64 transformedQuadratureWeight(localIndex const q, real64 const (&X)[maxSupportPoints][3], StackVariables const &stack)
Calculate the integration weights for a quadrature point.
static GEOS_HOST_DEVICE localIndex getNumSupportPoints(StackVariables const &stack)
Get the number of support points.
ArrayOfArraysView< localIndex const > InputFaceToNodeMap
Type of MeshData::faceToNodeMap.
arrayView2d< localIndex const > InputEdgeToNodeMap
Type of MeshData::edgeToNodeMap.
static GEOS_HOST_DEVICE void calcN(localIndex const q, StackVariables const &stack, real64(&N)[maxSupportPoints])
Calculate shape functions values for each support point at a quadrature point.
static GEOS_HOST_DEVICE void addGradGradStabilization(StackVariables const &stack, real64(&matrix)[MAXSUPPORTPOINTS *NUMDOFSPERTRIALSUPPORTPOINT][MAXSUPPORTPOINTS *NUMDOFSPERTRIALSUPPORTPOINT], real64 const &scaleFactor)
Adds a grad-grad stabilization to matrix.
static GEOS_HOST_DEVICE real64 calcGradN(localIndex const q, real64 const (&X)[maxSupportPoints][3], StackVariables const &stack, real64(&gradN)[maxSupportPoints][3])
Calculate the shape functions projected derivatives wrt the physical coordinates.
ArrayOfArraysView< localIndex const > InputFaceToEdgeMap
Type of MeshData::faceToEdgeMap.
static void fillMeshData(NodeManager const &nodeManager, EdgeManager const &edgeManager, FaceManager const &faceManager, SUBREGION_TYPE const &cellSubRegion, MeshData< SUBREGION_TYPE > &meshData)
Method to fill a MeshData object.
GEOS_HOST_DEVICE static GEOS_FORCE_INLINE real64 calcJacobian(localIndex const q, real64 const (&X)[numNodes][3], StackVariables const &stack, real64(&J)[3][3])
Calculate the Jacobian matrix at a quadrature point.
traits::ViewTypeConst< typename SUBREGION_TYPE::NodeMapType > InputCellToNodeMap
Type of MeshData::cellToNodeMap.
static GEOS_HOST_DEVICE void addEvaluatedGradGradStabilization(StackVariables const &stack, real64 const (&dofs)[MAXSUPPORTPOINTS][NUMDOFSPERTRIALSUPPORTPOINT], real64(&targetVector)[MAXSUPPORTPOINTS][NUMDOFSPERTRIALSUPPORTPOINT], real64 const scaleFactor)
Adds a grad-grad stabilization evaluated at dofs to targetVector.
static constexpr localIndex numQuadraturePoints
The number of quadrature points per element.
static GEOS_HOST_DEVICE localIndex getMaxSupportPoints()
Get the maximum number of support points.
traits::ViewTypeConst< typename SUBREGION_TYPE::FaceMapType > InputCellToFaceMap
Type of MeshData::cellToFaceMap.
static GEOS_HOST_DEVICE localIndex getNumQuadraturePoints()
Get the number of quadrature points.
constexpr static localIndex numFaces
The number of faces/support points per element.
constexpr static localIndex numNodes
The number of nodes/support points per element.
const ConformingVirtualElementOrder1_impl< MAXCELLNODES, MAXFACENODES > * getImpl() const
Get the device-compatible implementation type.
constexpr static localIndex numQuadraturePoints
The number of quadrature points per element.
constexpr static localIndex maxSupportPoints
The maximum number of support points per element.
ConformingVirtualElementOrder1_impl< MAXCELLNODES, MAXFACENODES > * getImpl()
Get the device-compatible implementation type.
Device-compatible (non virtual) Base class for all finite element formulations.
constexpr static localIndex numSupportPoints
The number of support points per element.
Base class for FEM element implementations.
array2d< real64, nodes::REFERENCE_POSITION_PERM > & referencePosition()
Get the mutable reference position array. This table will contain all the node coordinates.
GEOS_HOST_DEVICE real64 transformedQuadratureWeight(localIndex const q, real64 const (&X)[maxSupportPoints][3]) const
This function returns an error, since to get the quadrature weight with VEM you have to use the Stack...
GEOS_HOST_DEVICE static GEOS_FORCE_INLINE void getSamplingPointCoordInParentSpace(int const &linearIndex, real64(&samplingPointCoord)[3])
Get the Sampling Point Coord In the Parent Space.
static GEOS_HOST_DEVICE real64 invJacobianTransformation(int const q, real64 const (&X)[numNodes][3], real64(&J)[3][3])
This function returns an error, since there is no reference element defined in the VEM context....
GEOS_HOST_DEVICE static GEOS_FORCE_INLINE real64 calcJacobian(localIndex const q, real64 const (&X)[numNodes][3], real64(&J)[3][3])
Calculate the Jacobian matrix at a quadrature point.
static GEOS_HOST_DEVICE localIndex getNumSupportPoints()
This function returns an error, since to get the number of support points with VEM you have to use th...
static GEOS_HOST_DEVICE void calcN(localIndex const q, real64(&N)[maxSupportPoints])
This function returns an error, since to get projection of basis functions with VEM you have to use t...
static GEOS_HOST_DEVICE void calcN(real64 const (&coords)[3], real64(&N)[maxSupportPoints])
This function returns an error, since to get projection of gradients with VEM you have to use the Sta...
static GEOS_HOST_DEVICE real64 calcGradN(localIndex const q, real64 const (&X)[maxSupportPoints][3], real64(&gradN)[maxSupportPoints][3])
This function returns an error, since to get projection of gradients with VEM you have to use the Sta...
ArrayView< T, 1 > arrayView1d
Alias for 1D array view.
Definition: DataTypes.hpp:179
LvArray::ArrayOfArraysView< T, INDEX_TYPE const, CONST_SIZES, LvArray::ChaiBuffer > ArrayOfArraysView
View of array of variable-sized arrays. See LvArray::ArrayOfArraysView for details.
Definition: DataTypes.hpp:285
double real64
64-bit floating point type.
Definition: DataTypes.hpp:98
GEOS_LOCALINDEX_TYPE localIndex
Local index type (for indexing objects within an MPI partition).
Definition: DataTypes.hpp:84
ArrayView< T, 2, USD > arrayView2d
Alias for 2D array view.
Definition: DataTypes.hpp:195
InputCellToFaceMap< SUBREGION_TYPE > cellToFaceMap
View to the cell-to-face map in the sub-region.
InputNodeCoords nodesCoords
View to the array containing nodes coordinates.
arrayView1d< real64 const > faceAreas
View to the array of face areas.
arrayView2d< real64 const > cellCenters
View to the array of cell centers.
InputEdgeToNodeMap edgeToNodeMap
View to the edge-to-node map in the sub-region.
arrayView2d< real64 const > faceCenters
View to the array of face centers.
InputCellToNodeMap< SUBREGION_TYPE > cellToNodeMap
View to the cell-to-node map in the sub-region.
arrayView2d< real64 const > faceNormals
View to the array of face normals.
arrayView1d< real64 const > cellVolumes
View to the array of cell volumes.
InputFaceToNodeMap faceToNodeMap
View to the face-to-node map in the sub-region.
InputFaceToEdgeMap faceToEdgeMap
View to the face-to-edge map in the sub-region.