NeoN
A framework for CFD software
Loading...
Searching...
No Matches
gaussGreenGrad.hpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2023 - 2026 NeoN authors
2//
3// SPDX-License-Identifier: MIT
4
5#pragma once
6
13
15{
16
17class GaussGreenGrad : public GradOperatorFactory<Vec3>::template Register<GaussGreenGrad>
18{
19
21
22public:
23
24 static std::string name() { return "Gauss"; }
25
26 static std::string doc() { return "Gauss-Green Gradient"; }
27
28 static std::string schema() { return "none"; }
29
30 GaussGreenGrad(const Executor& exec, const UnstructuredMesh& mesh);
31
32 /* @brief Factory-registered constructor.
33 *
34 * The factory threads the scheme Input through to every registered grad
35 * operator. Gauss-Green uses linear face interpolation unconditionally, so
36 * any trailing interpolation tokens (e.g. "linear") are accepted and ignored.
37 */
38 GaussGreenGrad(const Executor& exec, const UnstructuredMesh& mesh, const Input& inputs);
39
40 // fvcc::VolumeField<Vec3> grad(const fvcc::VolumeField<scalar>& phi);
41
42 /* @brief compute implicit gradient operator contribution
43 *
44 * @param phi [in] - field for which the gradient is computed
45 * @param operatorScaling [in] - scales operator by a coefficient
46 * @param ls [in,out] - assemble gradient operator into the given linear system
47 */
48 virtual void
50 {
51 NF_ERROR_EXIT("Not implemented");
52 };
53
54 virtual void grad(
55 const VolumeField<scalar>& phi, const dsl::Coeff operatorScaling, Vector<Vec3>& gradPhi
56 ) const override;
57
58 /* @brief compute grad
59 *
60 * @param phi [in] - field for which the gradient is computed
61 * @param gradPhi [in,out] - resulting gradient field
62 * @param operatorScaling [in] - scales operator by a coefficient
63 */
64 virtual void grad(
65 const VolumeField<scalar>& phi,
66 VolumeField<Vec3>& gradPhi,
67 const dsl::Coeff operatorScaling = dsl::Coeff {}
68 ) const;
69
70 /* @brief compute explicit gradient operator and return result
71 *
72 * @param phi [in]
73 * @param operatorScaling [in] - scales operator by a coefficient
74 * @return gradPhi - resulting gradient field
75 */
77 const VolumeField<scalar>& phi, const dsl::Coeff operatorScaling = dsl::Coeff {}
78 ) const override;
79
81 const VolumeField<Vec3>& u,
83 const dsl::Coeff operatorScaling = dsl::Coeff {}
84 ) const override;
85
87 gradTensor(const VolumeField<Vec3>& u, const dsl::Coeff operatorScaling = dsl::Coeff {}) const;
88
89 virtual std::unique_ptr<GradOperatorFactory<Vec3>> clone() const override
90 {
91 NF_ERROR_EXIT("Not implemented");
92 return nullptr;
93 };
94
95private:
96
97 SurfaceInterpolation<scalar> surfaceInterpolation_;
98 SurfaceInterpolation<Vec3> surfaceInterpolationVec_;
99};
100
101} // namespace NeoN
Represents an unstructured mesh in NeoN.
A class to contain the data and executors for a field and define some basic operations.
Definition vector.hpp:27
A class that represents a coefficient for the NeoN dsl.
Definition coeff.hpp:24
GaussGreenGrad(const Executor &exec, const UnstructuredMesh &mesh, const Input &inputs)
VolumeField< Tensor > gradTensor(const VolumeField< Vec3 > &u, const dsl::Coeff operatorScaling=dsl::Coeff {}) const
virtual void grad(const VolumeField< scalar > &phi, VolumeField< Vec3 > &gradPhi, const dsl::Coeff operatorScaling=dsl::Coeff {}) const
virtual void grad(const VolumeField< scalar > &, const dsl::Coeff, la::LinearSystem< Vec3 > &) const override
virtual std::unique_ptr< GradOperatorFactory< Vec3 > > clone() const override
VolumeField< Vec3 > grad(const VolumeField< scalar > &phi, const dsl::Coeff operatorScaling=dsl::Coeff {}) const override
void gradTensor(const VolumeField< Vec3 > &u, VolumeField< Tensor > &gradU, const dsl::Coeff operatorScaling=dsl::Coeff {}) const override
virtual void grad(const VolumeField< scalar > &phi, const dsl::Coeff operatorScaling, Vector< Vec3 > &gradPhi) const override
GaussGreenGrad(const Executor &exec, const UnstructuredMesh &mesh)
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.
#define NF_ERROR_EXIT(message)
Macro for printing an error message and aborting the program.
Definition error.hpp:90
std::variant< Dictionary, TokenList > Input
Definition input.hpp:15
std::variant< SerialExecutor, CPUExecutor, GPUExecutor > Executor
Definition executor.hpp:20