NeoFOAM
WIP Prototype of a modern OpenFOAM core
Loading...
Searching...
No Matches
surfaceBoundaryFactory.hpp
Go to the documentation of this file.
1// SPDX-License-Identifier: MIT
2// SPDX-FileCopyrightText: 2023 NeoFOAM authors
3
4#pragma once
5
11
13{
14
15template<typename ValueType>
18 SurfaceBoundaryFactory<ValueType>,
19 Parameters<const UnstructuredMesh&, const Dictionary&, size_t>>,
21{
22public:
23
24 static std::string name() { return "SurfaceBoundaryFactory"; }
25
27 const UnstructuredMesh& mesh, [[maybe_unused]] const Dictionary&, size_t patchID
28 )
29 : BoundaryPatchMixin(mesh, patchID) {};
30
31 virtual void correctBoundaryCondition(DomainField<ValueType>& domainField) = 0;
32
33 virtual std::unique_ptr<SurfaceBoundaryFactory> clone() const = 0;
34};
35
36
42template<typename ValueType>
44{
45public:
46
47 SurfaceBoundary(const UnstructuredMesh& mesh, const Dictionary& dict, size_t patchID)
49 static_cast<label>(mesh.boundaryMesh().offset()[patchID]),
50 static_cast<label>(mesh.boundaryMesh().offset()[patchID + 1]),
52 ),
53 boundaryCorrectionStrategy_(SurfaceBoundaryFactory<ValueType>::create(
54 dict.get<std::string>("type"), mesh, dict, patchID
55 ))
56 {}
57
59 : BoundaryPatchMixin(other),
60 boundaryCorrectionStrategy_(other.boundaryCorrectionStrategy_->clone())
61 {}
62
64 {
65 boundaryCorrectionStrategy_->correctBoundaryCondition(domainField);
66 }
67
68
69private:
70
71 // NOTE needs full namespace to be not ambiguous
72 std::unique_ptr<NeoFOAM::finiteVolume::cellCentred::SurfaceBoundaryFactory<ValueType>>
73 boundaryCorrectionStrategy_;
74};
75
76
77}
A class representing a dictionary that stores key-value pairs.
Represents the domain fields for a computational domain.
A factory class for runtime selection of derived classes.
Represents an unstructured mesh in NeoFOAM.
A base class for implementing derived boundary conditions.
virtual std::unique_ptr< SurfaceBoundaryFactory > clone() const =0
SurfaceBoundaryFactory(const UnstructuredMesh &mesh, const Dictionary &, size_t patchID)
virtual void correctBoundaryCondition(DomainField< ValueType > &domainField)=0
Represents a surface boundary field for a cell-centered finite volume method.
virtual void correctBoundaryCondition(DomainField< ValueType > &domainField)
SurfaceBoundary(const UnstructuredMesh &mesh, const Dictionary &dict, size_t patchID)
int32_t label
Definition label.hpp:13