9#include <Kokkos_Core.hpp>
23template<
typename ValueType>
26 FaceNormalGradientFactory<ValueType>,
27 Parameters<const Executor&, const UnstructuredMesh&, const Input&>>
32 static std::unique_ptr<FaceNormalGradientFactory>
37 (std::holds_alternative<NeoN::Dictionary>(inputs))
38 ? std::get<NeoN::Dictionary>(inputs).get<std::string>(
"faceNormalGradient")
39 : std::get<NeoN::TokenList>(inputs).next<std::string>();
45 static std::string
name() {
return "FaceNormalGradientFactory"; }
82 virtual std::unique_ptr<FaceNormalGradientFactory<ValueType>>
clone()
const = 0;
90template<
typename ValueType>
97 : exec_(faceNGrad.exec_), mesh_(faceNGrad.mesh_),
98 faceNormalGradKernel_(faceNGrad.faceNormalGradKernel_->clone()) {};
101 : exec_(faceNGrad.exec_), mesh_(faceNGrad.mesh_),
102 faceNormalGradKernel_(std::move(faceNGrad.faceNormalGradKernel_)) {};
109 : exec_(exec), mesh_(mesh), faceNormalGradKernel_(std::move(faceNormalGradient)) {};
112 : exec_(exec), mesh_(mesh),
120 faceNormalGradKernel_->faceNormalGrad(volVector, surfaceVector);
130 faceNormalGradKernel_->implicitCorrection(phi, corrField);
135 std::string nameInterpolated =
"interpolated_" + volVector.
name;
140 return surfaceVector;
147 std::unique_ptr<FaceNormalGradientFactory<ValueType>> faceNormalGradKernel_;
A factory class for runtime selection of derived classes.
Represents an unstructured mesh in NeoN.
const Vector< ValueType > & internalVector() const
Returns a const reference to the internal field.
const UnstructuredMesh & mesh_
static std::unique_ptr< FaceNormalGradientFactory > create(const Executor &exec, const UnstructuredMesh &uMesh, const Input &inputs)
virtual void faceNormalGrad(const VolumeField< ValueType > &volVector, SurfaceField< ValueType > &surfaceVector) const =0
Computes the face-normal gradient of volVector into surfaceVector.
virtual void implicitCorrection(const VolumeField< ValueType > &, SurfaceField< ValueType > &corrField) const
virtual const SurfaceField< scalar > & deltaCoeffs() const =0
virtual bool hasImplicitCorrection() const
static std::string name()
virtual std::unique_ptr< FaceNormalGradientFactory< ValueType > > clone() const =0
virtual ~FaceNormalGradientFactory()
FaceNormalGradientFactory(const Executor &exec, const UnstructuredMesh &mesh)
FaceNormalGradient(FaceNormalGradient &&faceNGrad)
FaceNormalGradient(const Executor &exec, const UnstructuredMesh &mesh, const Input &input)
bool hasImplicitCorrection() const
const SurfaceField< scalar > & deltaCoeffs() const
FaceNormalGradient(const Executor &exec, const UnstructuredMesh &mesh, std::unique_ptr< FaceNormalGradientFactory< ValueType > > faceNormalGradient)
SurfaceField< ValueType > faceNormalGrad(const VolumeField< ValueType > &volVector) const
FaceNormalGradient(const FaceNormalGradient &faceNGrad)
void implicitCorrection(const VolumeField< ValueType > &phi, SurfaceField< ValueType > &corrField) const
void faceNormalGrad(const VolumeField< ValueType > &volVector, SurfaceField< ValueType > &surfaceVector) const
Represents a surface boundary field for a cell-centered finite volume method.
Represents a surface field in a finite volume method.
Represents a volume field in a finite volume method.
std::vector< BoundaryType > createCalculatedBCs(const UnstructuredMesh &mesh)
std::variant< Dictionary, TokenList > Input
std::variant< SerialExecutor, CPUExecutor, GPUExecutor > Executor
void fill(ContType< ValueType > &cont, const std::type_identity_t< ValueType > value, std::pair< localIdx, localIdx > range={0, 0})
Fill the field with a vector value using a specific executor.