16template<
typename ValueType>
25template<
typename ValueType>
34template<
typename ValueType>
42 static std::string
name() {
return "Gauss"; }
44 static std::string
doc() {
return "Gauss-Green Divergence"; }
46 static std::string
schema() {
return "none"; }
49 : Base(exec, mesh), surfaceInterpolation_(exec, mesh, inputs),
56 const dsl::Coeff operatorScaling)
const override
58 computeDivExp<ValueType>(
59 faceFlux, phi, surfaceInterpolation_, divPhi.
internalVector(), operatorScaling
67 const dsl::Coeff operatorScaling)
const override
69 computeDivImp(ls, faceFlux, phi, operatorScaling, *sparsityPattern_.get());
76 const dsl::Coeff operatorScaling)
const override
78 computeDivExp<ValueType>(faceFlux, phi, surfaceInterpolation_, divPhi, operatorScaling);
84 const dsl::Coeff operatorScaling)
const override
86 std::string
name =
"div(" + faceFlux.
name +
"," + phi.
name +
")";
95 computeDivExp<ValueType>(
96 faceFlux, phi, surfaceInterpolation_, divPhi.
internalVector(), operatorScaling
101 std::unique_ptr<DivOperatorFactory<ValueType>>
clone()
const override
103 return std::make_unique<GaussGreenDiv<ValueType>>(*this);
111 const std::shared_ptr<SparsityPattern> sparsityPattern_;
114template class GaussGreenDiv<scalar>;
115template class GaussGreenDiv<Vec3>;
const Vector< T > & value() const
Get the view storing the computed values from the boundary condition.
Represents an unstructured mesh in NeoN.
A class to contain the data and executors for a field and define some basic operations.
A class that represents a coefficient for the NeoN dsl.
const BoundaryData< ValueType > & boundaryData() const
Returns a const reference to the boundary field.
const Vector< ValueType > & internalVector() const
Returns a const reference to the internal field.
static std::string name()
virtual VolumeField< ValueType > div(const SurfaceField< scalar > &faceFlux, const VolumeField< ValueType > &phi, const dsl::Coeff operatorScaling) const override
virtual void div(Vector< ValueType > &divPhi, const SurfaceField< scalar > &faceFlux, const VolumeField< ValueType > &phi, const dsl::Coeff operatorScaling) const override
static std::string schema()
virtual void div(la::LinearSystem< ValueType, localIdx > &ls, const SurfaceField< scalar > &faceFlux, const VolumeField< ValueType > &phi, const dsl::Coeff operatorScaling) const override
std::unique_ptr< DivOperatorFactory< ValueType > > clone() const override
GaussGreenDiv(const Executor &exec, const UnstructuredMesh &mesh, const Input &inputs)
virtual void div(VolumeField< ValueType > &divPhi, const SurfaceField< scalar > &faceFlux, const VolumeField< ValueType > &phi, const dsl::Coeff operatorScaling) const override
Represents a surface field in a finite volume method.
Represents a volume boundary field for a cell-centered finite volume method.
Represents a volume field in a finite volume method.
A class representing a linear system of equations.
A template class for registering derived classes with a base class.
void computeDivImp(la::LinearSystem< ValueType, localIdx > &ls, const SurfaceField< scalar > &faceFlux, const VolumeField< ValueType > &phi, const dsl::Coeff operatorScaling, const SparsityPattern &sparsityPattern)
std::vector< BoundaryType > createCalculatedBCs(const UnstructuredMesh &mesh)
void computeDivExp(const SurfaceField< scalar > &faceFlux, const VolumeField< ValueType > &phi, const SurfaceInterpolation< ValueType > &surfInterp, Vector< ValueType > &divPhi, const dsl::Coeff operatorScaling)
std::variant< Dictionary, TokenList > Input
void fill(Vector< ValueType > &a, const std::type_identity_t< ValueType > value, std::pair< localIdx, localIdx > range={0, 0})
Fill the field with a scalar value using a specific executor.
std::variant< SerialExecutor, CPUExecutor, GPUExecutor > Executor