NeoN
A framework for CFD software
Loading...
Searching...
No Matches
surfaceField.hpp
Go to the documentation of this file.
1// SPDX-FileCopyrightText: 2024 - 2025 NeoN authors
2//
3// SPDX-License-Identifier: MIT
4
5#pragma once
6
7#include <vector>
8
11
13{
14
25template<typename ValueType>
26class SurfaceField : public DomainMixin<ValueType>
27{
28
29public:
30
40 const Executor& exec,
41 std::string fieldName,
43 const std::vector<SurfaceBoundary<ValueType>>& boundaryConditions
44 )
45 : DomainMixin<ValueType>(
46 exec,
47 fieldName,
48 mesh,
49 Field<ValueType>(
50 exec, mesh.nInternalFaces() + mesh.nBoundaryFaces(), mesh.boundaryMesh().offset()
51 )
52 ),
53 boundaryConditions_(boundaryConditions)
54 {}
55
56 /* @brief Constructor for a surfaceVector with a given internal field
57 *
58 * @param exec The executor
59 * @param mesh The underlying mesh
60 * @param internalVector the underlying internal field
61 * @param boundaryConditions a vector of boundary conditions
62 */
64 const Executor& exec,
66 const Field<ValueType>& domainVector,
67 const std::vector<SurfaceBoundary<ValueType>>& boundaryConditions
68 )
69 : DomainMixin<ValueType>(exec, mesh, domainVector), boundaryConditions_(boundaryConditions)
70 {}
71
72 /* @brief Constructor for a surfaceVector with a given internal field
73 *
74 * @param exec The executor
75 * @param mesh The underlying mesh
76 * @param internalVector the underlying internal field
77 * @param boundaryConditions a vector of boundary conditions
78 */
80 const Executor& exec,
83 const BoundaryData<ValueType>& boundaryVectors,
84 const std::vector<SurfaceBoundary<ValueType>>& boundaryConditions
85 )
86 : DomainMixin<ValueType>(exec, mesh, {exec, mesh, internalVector, boundaryVectors}),
87 boundaryConditions_(boundaryConditions)
88 {}
89
96 : DomainMixin<ValueType>(other), boundaryConditions_(other.boundaryConditions_)
97 {}
98
106 {
107 for (auto& boundaryCondition : boundaryConditions_)
108 {
109 boundaryCondition.correctBoundaryCondition(this->field_);
110 }
111 }
112
113
114private:
115
116 std::vector<SurfaceBoundary<ValueType>>
117 boundaryConditions_; // The vector of boundary conditions
118};
119
120
121} // namespace NeoN
Represents the boundary fields for a computational domain.
Represents the domain fields for a computational domain.
Definition field.hpp:36
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:30
This class represents a mixin for a geometric field.
Definition domain.hpp:28
const UnstructuredMesh & mesh() const
Returns a const reference to the unstructured mesh object.
Definition domain.hpp:122
const Executor & exec() const
Returns a const reference to the executor object.
Definition domain.hpp:115
const Vector< ValueType > & internalVector() const
Returns a const reference to the internal field.
Definition domain.hpp:80
Represents a surface boundary field for a cell-centered finite volume method.
Represents a surface field in a finite volume method.
SurfaceField(const Executor &exec, std::string fieldName, const UnstructuredMesh &mesh, const std::vector< SurfaceBoundary< ValueType > > &boundaryConditions)
Constructor for a surfaceVector with a given name and mesh.
SurfaceField(const SurfaceField &other)
Copy constructor for a surface field.
SurfaceField(const Executor &exec, const UnstructuredMesh &mesh, const Field< ValueType > &domainVector, const std::vector< SurfaceBoundary< ValueType > > &boundaryConditions)
void correctBoundaryConditions()
Corrects the boundary conditions of the surface field.
SurfaceField(const Executor &exec, const UnstructuredMesh &mesh, const Vector< ValueType > &internalVector, const BoundaryData< ValueType > &boundaryVectors, const std::vector< SurfaceBoundary< ValueType > > &boundaryConditions)
std::variant< SerialExecutor, CPUExecutor, GPUExecutor > Executor
Definition executor.hpp:18