OpenBEM
Open-source framework for electromagnetic simulation with the boundary element method.
Loading...
Searching...
No Matches
single_layer.hpp
Go to the documentation of this file.
1// OpenBEM - Copyright (C) 2026 Shashwat Sharma
2
3// This file is part of OpenBEM.
4
5// OpenBEM is free software: you can redistribute it and/or modify it under the terms of the
6// GNU General Public License as published by the Free Software Foundation, either version 3
7// of the License, or (at your option) any later version.
8
9// You should have received a copy of the GNU General Public License along with OpenBEM.
10// If not, see <https://www.gnu.org/licenses/>.
11
12
18#ifndef BEM_RWG_PROJ_SINGLE_LAYER_H
19#define BEM_RWG_PROJ_SINGLE_LAYER_H
20
21#include "types.hpp"
23
26
28
29
30namespace bem::rwg
31{
32
41template <typename SrcIntegratorType = SrcStrategic<>>
43{
44
45 static_assert(
46 std::is_base_of<SrcIntegratorBase, SrcIntegratorType>::value,
47 "VectorSingleLayerProj: `SrcIntegratorType` must derive from `SrcIntegratorBase`"
48 );
49
50public:
51
57 src_integrator_(src_integrator) {};
58
59
80 const Complex k,
82 const Triangle<3>& src_tri
83 ) override;
84
85
86private:
87
88 SrcIntegratorType src_integrator_;
89
90};
91
92
96template <typename SrcIntegratorType = SrcStrategic<>>
98{
99
100 static_assert(
101 std::is_base_of<SrcIntegratorBase, SrcIntegratorType>::value,
102 "ScalarSingleLayerProj: `SrcIntegratorType` must derive from `SrcIntegratorBase`"
103 );
104
105public:
106
112 src_integrator_(src_integrator) {};
113
114
131 const Complex k,
133 const Triangle<3>& src_tri
134 ) override;
135
136
137private:
138
139 SrcIntegratorType src_integrator_;
140
141};
142
143
147template <typename SrcIntegratorType = SrcStrategic<>>
149{
150
151 static_assert(
152 std::is_base_of<SrcIntegratorBase, SrcIntegratorType>::value,
153 "GradScalarSingleLayerProj: `SrcIntegratorType` must derive from `SrcIntegratorBase`"
154 );
155
156public:
157
163 src_integrator_(src_integrator) {};
164
165
186 const Complex k,
188 const Triangle<3>& src_tri
189 ) override;
190
191private:
192
193 SrcIntegratorType src_integrator_;
194
195};
196
197
201template <typename SrcIntegratorType = SrcStrategic<>>
203{
204
205 static_assert(
206 std::is_base_of<SrcIntegratorBase, SrcIntegratorType>::value,
207 "VectorHypersingularProj: `SrcIntegratorType` must derive from `SrcIntegratorBase`"
208 );
209
210public:
211
217 proj_g_(src_integrator), proj_gradg_(src_integrator) {};
218
219
242 const Complex k,
244 const Triangle<3>& src_tri
245 ) override;
246
247
248private:
249
252
253};
254
259}
260
262
263#endif
Class for computing the gradient of the scalar single-layer potential projector.
GradScalarSingleLayerProj(const SrcIntegratorType src_integrator=SrcStrategic<>())
Constructs a GradScalarSingleLayerProj object with a specified integration object.
EigMatXN< Complex, 1 > compute(const Complex k, ConstEigRef< EigMatNX< Float, 3 > > obs_points, const Triangle< 3 > &src_tri) override
Computes the gradient of the scalar single-layer projector.
Base class for RWG-based BEM projectors.
Definition base.hpp:40
Class for computing the scalar single-layer potential projector.
EigMatXN< Complex, 1 > compute(const Complex k, ConstEigRef< EigMatNX< Float, 3 > > obs_points, const Triangle< 3 > &src_tri) override
Computes the scalar single-layer projector.
ScalarSingleLayerProj(const SrcIntegratorType src_integrator=SrcStrategic<>())
Constructs a ScalarSingleLayerProj object with a specified integration object.
Class for computing the vector hypersingular potential projector.
VectorHypersingularProj(const SrcIntegratorType src_integrator=SrcStrategic<>())
Constructs a VectorHypersingularProj object with a specified integration object.
EigMatXN< Complex, 3 > compute(const Complex k, ConstEigRef< EigMatNX< Float, 3 > > obs_points, const Triangle< 3 > &src_tri) override
Computes the vector hypersingular projector.
Class for computing the vector single-layer potential projector.
VectorSingleLayerProj(const SrcIntegratorType src_integrator=SrcStrategic<>())
Constructs a VectorSingleLayerProj object with a specified integration object.
EigMatXN< Complex, 3 > compute(const Complex k, ConstEigRef< EigMatNX< Float, 3 > > obs_points, const Triangle< 3 > &src_tri) override
Computes the vector single-layer projector.
const Eigen::Ref< const EigObj > ConstEigRef
Read-only reference to an Eigen object.
Definition types.hpp:98
std::complex< Float > Complex
Complex floating point number.
Definition types.hpp:51
Eigen::Matrix< T, N, 1 > EigColVecN
Fixed-size column vector of size N containing type T.
Definition types.hpp:86
Namespace for RWG-based BEM functionality.