NeoFOAM
WIP Prototype of a modern OpenFOAM core
Loading...
Searching...
No Matches
geometryScheme.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: MIT
2// SPDX-FileCopyrightText: 2023 NeoFOAM authors
3#pragma once
4
5
11
13{
14
16{
17
18public:
19
21
22 virtual ~GeometrySchemeFactory() = default;
23
24 virtual void updateWeights(const Executor& exec, SurfaceField<scalar>& weights) = 0;
25
26 virtual void updateDeltaCoeffs(const Executor& exec, SurfaceField<scalar>& deltaCoeffs) = 0;
27
28 virtual void
29 updateNonOrthDeltaCoeffs(const Executor& exec, SurfaceField<scalar>& nonOrthDeltaCoeffs) = 0;
30
31 virtual void
32 updateNonOrthDeltaCoeffs(const Executor& exec, SurfaceField<Vector>& nonOrthDeltaCoeffs) = 0;
33};
34
35/* @class GeometryScheme
36 * @brief Implements a method to compute deltaCoeffs
37 */
39{
40public:
41
43 const Executor& exec,
44 std::unique_ptr<GeometrySchemeFactory> kernel,
49 );
50
52 const Executor& exec,
53 const UnstructuredMesh& mesh,
54 std::unique_ptr<GeometrySchemeFactory> kernel
55 );
56
57 GeometryScheme(const UnstructuredMesh& mesh // will lookup the kernel
58 );
59
60 virtual ~GeometryScheme() = default;
61
63
65
67
69
70 void update();
71
72 std::string name() const;
73
74 // add selection mechanism via dictionary later
75 static const std::shared_ptr<GeometryScheme> readOrCreate(const UnstructuredMesh& mesh);
76
77private:
78
79 const Executor exec_;
80 const UnstructuredMesh& mesh_;
81 std::unique_ptr<GeometrySchemeFactory> kernel_;
82
83 SurfaceField<scalar> weights_;
84 SurfaceField<scalar> deltaCoeffs_;
85 SurfaceField<scalar> nonOrthDeltaCoeffs_;
86 SurfaceField<Vector> nonOrthCorrectionVectors_;
87};
88
89} // namespace NeoFOAM
Represents an unstructured mesh in NeoFOAM.
virtual void updateDeltaCoeffs(const Executor &exec, SurfaceField< scalar > &deltaCoeffs)=0
virtual void updateWeights(const Executor &exec, SurfaceField< scalar > &weights)=0
virtual void updateNonOrthDeltaCoeffs(const Executor &exec, SurfaceField< scalar > &nonOrthDeltaCoeffs)=0
virtual void updateNonOrthDeltaCoeffs(const Executor &exec, SurfaceField< Vector > &nonOrthDeltaCoeffs)=0
const SurfaceField< scalar > & weights() const
const SurfaceField< scalar > & nonOrthDeltaCoeffs() const
GeometryScheme(const UnstructuredMesh &mesh)
const SurfaceField< Vector > & nonOrthCorrectionVectors() const
GeometryScheme(const Executor &exec, std::unique_ptr< GeometrySchemeFactory > kernel, const SurfaceField< scalar > &weights, const SurfaceField< scalar > &deltaCoeffs, const SurfaceField< scalar > &nonOrthDeltaCoeffs, const SurfaceField< Vector > &nonOrthCorrectionVectors)
const SurfaceField< scalar > & deltaCoeffs() const
GeometryScheme(const Executor &exec, const UnstructuredMesh &mesh, std::unique_ptr< GeometrySchemeFactory > kernel)
static const std::shared_ptr< GeometryScheme > readOrCreate(const UnstructuredMesh &mesh)
Represents a surface field in a finite volume method.
std::variant< SerialExecutor, CPUExecutor, GPUExecutor > Executor
Definition executor.hpp:16