https://mooseframework.inl.gov
KokkosLinearFVDiffusion.h
Go to the documentation of this file.
1 //* This file is part of the MOOSE framework
2 //* https://www.mooseframework.org
3 //*
4 //* All rights reserved, see COPYRIGHT for full restrictions
5 //* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6 //*
7 //* Licensed under LGPL 2.1, please see LICENSE for details
8 //* https://www.gnu.org/licenses/lgpl-2.1.html
9 
10 #pragma once
11 
13 #include "KokkosParsedFunction.h"
14 
20 {
21 public:
23 
25 
26  virtual bool needsBoundaryNormalGradientData() const override { return true; }
27  virtual bool hasInternalRightHandSideContribution() const override { return false; }
28 
29  template <typename Derived>
30  KOKKOS_FUNCTION Real computeInternalMatrixContribution(const FVDatum & datum) const;
31  template <typename Derived>
32  KOKKOS_FUNCTION Real computeInternalNeighborMatrixContribution(const FVDatum & datum) const;
33  template <typename Derived>
35  const FVDatum & datum, const int bc_index, const MOOSE_KOKKOS_INDEX_TYPE bc_face_index) const;
36  template <typename Derived>
38  const FVDatum & datum, const int bc_index, const MOOSE_KOKKOS_INDEX_TYPE bc_face_index) const;
39 
40 private:
49  KOKKOS_FUNCTION Real faceConductance(const FVDatum & datum) const;
50 
52  KOKKOS_FUNCTION Real faceDiffusionCoefficient(const FVDatum & datum) const;
53 
56 };
57 
58 template <typename Derived>
59 KOKKOS_FUNCTION Real
61 {
62  return faceConductance(datum);
63 }
64 
65 template <typename Derived>
66 KOKKOS_FUNCTION Real
68 {
69  return -faceConductance(datum);
70 }
71 
72 template <typename Derived>
73 KOKKOS_FUNCTION Real
75  const FVDatum & datum, const int bc_index, const MOOSE_KOKKOS_INDEX_TYPE bc_face_index) const
76 {
77  return -faceDiffusionCoefficient(datum) * datum.faceArea() *
78  boundaryNormalGradientCoefficient(bc_index, bc_face_index);
79 }
80 
81 template <typename Derived>
82 KOKKOS_FUNCTION Real
84  const FVDatum & datum, const int bc_index, const MOOSE_KOKKOS_INDEX_TYPE bc_face_index) const
85 {
86  return faceDiffusionCoefficient(datum) * datum.faceArea() *
87  boundaryNormalGradientSource(bc_index, bc_face_index);
88 }
89 
90 KOKKOS_FUNCTION inline Real
92 {
93  return faceDiffusionCoefficient(datum) * datum.faceArea() / datum.faceDCNMag();
94 }
95 
96 KOKKOS_FUNCTION inline Real
98 {
99  return _diffusion_coeff->value(_t, datum.faceCentroid());
100 }
virtual bool needsBoundaryNormalGradientData() const override
Whether this kernel needs boundary normal gradient data from its boundary conditions.
KOKKOS_FUNCTION Real faceDiffusionCoefficient(const FVDatum &datum) const
Method for evaluating the face diffusion coefficient.
const InputParameters & parameters() const
Get the parameters of the object.
Definition: MooseBase.h:131
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system...
KokkosLinearFVDiffusion(const InputParameters &parameters)
static InputParameters validParams()
KOKKOS_FUNCTION Real computeBoundaryRightHandSideContribution(const FVDatum &datum, const int bc_index, const MOOSE_KOKKOS_INDEX_TYPE bc_face_index) const
KOKKOS_FUNCTION Real boundaryNormalGradientCoefficient(const int bc_index, const MOOSE_KOKKOS_INDEX_TYPE bc_face_index) const
Boundary normal gradient coefficient for this boundary face.
KOKKOS_FUNCTION Real computeInternalNeighborMatrixContribution(const FVDatum &datum) const
Base class for Kokkos linear finite volume kernels that contribute on faces (flux terms)...
Moose::Kokkos::ReferenceWrapper< const KokkosParsedFunction > _diffusion_coeff
Diffusion coefficient.
KOKKOS_FUNCTION Real faceDCNMag() const
Get the distance from the current element centroid to its neighbor centroid.
Definition: KokkosDatum.h:198
virtual bool hasInternalRightHandSideContribution() const override
Whether this kernel has nonzero internal-face RHS contributions.
KOKKOS_FUNCTION Real computeBoundaryMatrixContribution(const FVDatum &datum, const int bc_index, const MOOSE_KOKKOS_INDEX_TYPE bc_face_index) const
KOKKOS_FUNCTION Real value(Real t, Real3 p) const
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
Kokkos linear finite volume flux kernel implementing the diffusion term.
Device-side geometric context for finite volume kernels and boundary conditions.
Definition: KokkosDatum.h:167
KOKKOS_FUNCTION Real faceConductance(const FVDatum &datum) const
Method for evaluating the face diffusion coefficient times the face area divided by the distance betw...
KOKKOS_FUNCTION Real boundaryNormalGradientSource(const int bc_index, const MOOSE_KOKKOS_INDEX_TYPE bc_face_index) const
Boundary normal gradient source for this boundary face.
KOKKOS_FUNCTION Real faceArea() const
Get the coordinate-weighted area of the current element side.
Definition: KokkosDatum.h:218
Scalar< Real > _t
TODO: Move to TransientInterface.
KOKKOS_FUNCTION Real computeInternalMatrixContribution(const FVDatum &datum) const
KOKKOS_FUNCTION Real3 faceCentroid() const
Get the centroid of the current element side.
Definition: KokkosDatum.h:184