20 #ifndef GEOS_FINITEVOLUME_FACEELEMENTTOCELLSTENCIL_HPP_
21 #define GEOS_FINITEVOLUME_FACEELEMENTTOCELLSTENCIL_HPP_
36 template<
typename VIEWTYPE >
107 real64 ( &dWeight_dVar )[1][2] )
const;
120 real64 ( &dWeight_dVar )[1][2] )
const;
138 real64 ( &dWeight_dVar1 )[1][2],
139 real64 ( &dWeight_dVar2 )[1][2] )
const;
148 real64 ( & stabilizationWeight )[1][2] )
const
195 virtual void move( LvArray::MemorySpace
const space )
override;
198 localIndex const *
const elementRegionIndices,
199 localIndex const *
const elementSubRegionIndices,
201 real64 const *
const weights,
211 real64 const (&faceNormal)[3],
212 real64 const (&cellToFaceVec)[3] );
259 real64 ( & weight )[1][2],
260 real64 ( & dWeight_dVar )[1][2] )
const
273 LvArray::tensorOps::hadamardProduct< 3 >( faceConormal, coefficient[er0][esr0][ei0][0], m_faceNormal[iconn] );
274 real64 const t0 =
m_weights[iconn][0] * LvArray::tensorOps::AiBi< 3 >( m_cellToFaceVec[iconn], faceConormal );
276 real64 const t1 =
m_weights[iconn][1] * coefficient[er1][esr1][ei1][0][2];
278 real64 const sumOfTrans = t0+t1;
279 real64 const value = m_transMultiplier[iconn]*t0*t1/sumOfTrans;
281 weight[0][0] = value;
282 weight[0][1] = -value;
285 real64 const dt0 =
m_weights[iconn][0] * dCoeff_dVar[er0][esr0][ei0][0][0];
286 real64 const dt1 =
m_weights[iconn][1] * dCoeff_dVar[er1][esr1][ei1][0][2];
288 dWeight_dVar[0][0] = ( dt0 * t1 * sumOfTrans - dt0 * t0 * t1 ) / ( sumOfTrans * sumOfTrans );
289 dWeight_dVar[0][1] = ( t0 * dt1 * sumOfTrans - dt1 * t0 * t1 ) / ( sumOfTrans * sumOfTrans );
296 real64 ( & weight )[1][2],
297 real64 ( & dWeight_dVar )[1][2] )
const
300 real64 const t0 = m_weights[iconn][0] * LvArray::tensorOps::AiBi< 3 >( m_cellToFaceVec[iconn], m_faceNormal[iconn] );
301 real64 const t1 = m_weights[iconn][1];
303 real64 const sumOfTrans = t0+t1;
304 real64 const value = m_transMultiplier[iconn]*t0*t1/sumOfTrans;
306 weight[0][0] = value;
307 weight[0][1] = -value;
309 dWeight_dVar[0][0] = 0.0;
310 dWeight_dVar[0][1] = 0.0;
321 real64 (& dWeight_dVar1 )[1][2],
322 real64 (& dWeight_dVar2 )[1][2] )
const
335 LvArray::tensorOps::hadamardProduct< 3 >( faceConormal, coefficient[er0][esr0][ei0][0], m_faceNormal[iconn] );
336 real64 const t0 =
m_weights[iconn][0] * LvArray::tensorOps::AiBi< 3 >( m_cellToFaceVec[iconn], faceConormal );
338 real64 const t1 =
m_weights[iconn][1] * coefficient[er1][esr1][ei1][0][2];
340 real64 const sumOfTrans = t0+t1;
341 real64 const value = m_transMultiplier[iconn]*t0*t1/sumOfTrans;
343 weight[0][0] = value;
344 weight[0][1] = -value;
347 real64 const dt0_dVar1 =
m_weights[iconn][0] * dCoeff_dVar1[er0][esr0][ei0][0][0];
348 real64 const dt1_dVar1 =
m_weights[iconn][1] * dCoeff_dVar1[er1][esr1][ei1][0][2];
349 real64 const dt0_dVar2 =
m_weights[iconn][0] * dCoeff_dVar2[er0][esr0][ei0][0][0];
350 real64 const dt1_dVar2 =
m_weights[iconn][1] * dCoeff_dVar2[er1][esr1][ei1][0][2];
352 dWeight_dVar1[0][0] = ( dt0_dVar1 * t1 * sumOfTrans - dt0_dVar1 * t0 * t1 ) / ( sumOfTrans * sumOfTrans );
353 dWeight_dVar1[0][1] = ( t0 * dt1_dVar1 * sumOfTrans - dt1_dVar1 * t0 * t1 ) / ( sumOfTrans * sumOfTrans );
355 dWeight_dVar2[0][0] = ( dt0_dVar2 * t1 * sumOfTrans - dt0_dVar2 * t0 * t1 ) / ( sumOfTrans * sumOfTrans );
356 dWeight_dVar2[0][1] = ( t0 * dt1_dVar2 * sumOfTrans - dt1_dVar2 * t0 * t1 ) / ( sumOfTrans * sumOfTrans );
#define GEOS_HOST_DEVICE
Marks a host-device function.
#define GEOS_UNUSED_VAR(...)
Mark an unused variable and silence compiler warnings.
#define GEOS_FORCE_INLINE
Marks a function or lambda for inlining.
typename ElementViewAccessor< VIEWTYPE >::NestedViewTypeConst ElementViewConst
The ElementViewAccessor at the ElementRegionManager level is the type resulting from ElementViewAcces...
virtual localIndex size() const override
Return the stencil size.
KernelWrapper createKernelWrapper() const
Create an update kernel wrapper.
virtual void reserve(localIndex const size) override
Reserve the size of the stencil.
void addVectors(real64 const &transMultiplier, real64 const (&faceNormal)[3], real64 const (&cellToFaceVec)[3])
Adds the vectors need to compute weights needed in kernels.
virtual void move(LvArray::MemorySpace const space) override
Move the data arrays associated with the stencil to a specified memory space.
virtual void add(localIndex const numPts, localIndex const *const elementRegionIndices, localIndex const *const elementSubRegionIndices, localIndex const *const elementIndices, real64 const *const weights, localIndex const connectorIndex) override
Add an entry to the stencil.
constexpr localIndex stencilSize(localIndex index) const
Give the number of points in a stencil entry.
FaceElementToCellStencil()
Default constructor.
Provides access to the FaceElementToCellStencil that may be called from a kernel function.
GEOS_HOST_DEVICE constexpr GEOS_FORCE_INLINE localIndex stencilSize(localIndex index) const
Give the number of stencil entries for the provided index.
FaceElementToCellStencilWrapper(IndexContainerType const &elementRegionIndices, IndexContainerType const &elementSubRegionIndices, IndexContainerType const &elementIndices, WeightContainerType const &weights, arrayView2d< real64 > const &faceNormal, arrayView2d< real64 > const &cellToFaceVec, arrayView1d< real64 > const &transMultiplier)
Constructor.
GEOS_HOST_DEVICE GEOS_FORCE_INLINE localIndex size() const
Give the number of stencil entries.
GEOS_HOST_DEVICE void computeWeights(localIndex iconn, CoefficientAccessor< arrayView3d< real64 const > > const &coefficient, CoefficientAccessor< arrayView3d< real64 const > > const &dCoeff_dVar, real64(&weight)[1][2], real64(&dWeight_dVar)[1][2]) const
Compute weigths and derivatives w.r.t to one variable.
GEOS_HOST_DEVICE void removeHydraulicApertureContribution(localIndex const iconn, ElementRegionManager::ElementViewConst< arrayView1d< real64 const > > hydraulicAperture) const
Remove the contribution of the aperture from the weight in the stencil (done before aperture update)
ElementRegionManager::ElementViewConst< VIEWTYPE > CoefficientAccessor
Coefficient view accessory type.
GEOS_HOST_DEVICE void computeStabilizationWeights(localIndex iconn, real64(&stabilizationWeight)[1][2]) const
Compute the stabilization weights.
GEOS_HOST_DEVICE constexpr GEOS_FORCE_INLINE localIndex numPointsInFlux(localIndex index) const
Give the number of points between which the flux is.
GEOS_HOST_DEVICE void addHydraulicApertureContribution(localIndex const iconn, ElementRegionManager::ElementViewConst< arrayView1d< real64 const > > hydraulicAperture) const
Add the contribution of the aperture to the weight in the stencil (done after aperture update)
Provides management of the interior stencil points when using Two-Point flux approximation.
TRAITS::IndexContainerType m_elementRegionIndices
The container for the element region indices for each point in each stencil.
TRAITS::IndexContainerViewConstType m_elementRegionIndices
The container for the element region indices for each point in each stencil.
TRAITS::IndexContainerViewConstType m_elementSubRegionIndices
The container for the element sub region indices for each point in each stencil.
TRAITS::WeightContainerViewType m_weights
The container for the weights for each point in each stencil.
TRAITS::IndexContainerViewConstType m_elementIndices
The container for the element indices for each point in each stencil.
ArrayView< T, 1 > arrayView1d
Alias for 1D array view.
Array< T, 2, PERMUTATION > array2d
Alias for 2D array.
double real64
64-bit floating point type.
GEOS_LOCALINDEX_TYPE localIndex
Local index type (for indexing objects within an MPI partition).
ArrayView< T, 2, USD > arrayView2d
Alias for 2D array view.
Array< T, 1 > array1d
Alias for 1D array.
ArrayView< T, 3, USD > arrayView3d
Alias for 3D array view.
CONTAINER< localIndex > IndexContainerType
The array type that will be used to store the indices of the stencil contributors.
static constexpr localIndex maxStencilSize
Maximum number of points in a stencil.
CONTAINER< real64 > WeightContainerType
The array type that is used to store the weights of the stencil contributors.
static constexpr localIndex maxNumPointsInFlux
Maximum number of points the flux.