OpenBEM
Open-source framework for electromagnetic simulation with the boundary element method.
Loading...
Searching...
No Matches
double_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_OPS_DOUBLE_LAYER_H
19#define BEM_RWG_OPS_DOUBLE_LAYER_H
20
21#include <type_traits>
22
23#include "types.hpp"
24#include "constants.hpp"
26
28
31
32
33namespace bem::rwg
34{
35
56template <typename ObsIntegratorType = ObsStrategic<>>
58{
59
60 static_assert(
61 std::is_base_of<ObsIntegratorBase, ObsIntegratorType>::value,
62 "VectorDoubleLayerPvOp: `ObsIntegratorType` must derive from `ObsIntegratorBase`"
63 );
64
65public:
66
73
74
86 const Complex k,
87 const Triangle<3>& obs_tri,
88 const Triangle<3>& src_tri
89 ) override;
90
91
101 const Complex k,
102 const Triangle<3>& obs_tri,
103 const Triangle<3>& src_tri,
104 const ObsResult& obs_result
105 );
106
107
108protected:
109
110 ObsIntegratorType obs_integrator_;
111
112};
113
114
130template <typename ObsIntegratorType = ObsStrategic<>>
132{
133
134 static_assert(
135 std::is_base_of<ObsIntegratorBase, ObsIntegratorType>::value,
136 "RotVectorDoubleLayerPvOp: `ObsIntegratorType` must derive from `ObsIntegratorBase`"
137 );
138
139public:
140
147
148
160 const Complex k,
161 const Triangle<3>& obs_tri,
162 const Triangle<3>& src_tri
163 ) override;
164
165
175 const Complex k,
176 const Triangle<3>& obs_tri,
177 const Triangle<3>& src_tri,
178 const ObsResult& obs_result
179 );
180
181
182protected:
183
184 ObsIntegratorType obs_integrator_;
185
186};
187
192}
193
195
196#endif
Base class for RWG-based BEM operators.
Definition base.hpp:41
Class for computing the rotationally-tested vector double-layer potential operator in a principal val...
EigMatMN< Complex, 3, 3 > assemble(const Complex k, const Triangle< 3 > &obs_tri, const Triangle< 3 > &src_tri, const ObsResult &obs_result)
Assembles the computed integrals into the final operator values.
RotVectorDoubleLayerPvOp(const ObsIntegratorType obs_integrator=ObsStrategic<>())
Constructs a RotVectorDoubleLayerPvOp object with a specified integration object.
EigMatMN< Complex, 3, 3 > compute(const Complex k, const Triangle< 3 > &obs_tri, const Triangle< 3 > &src_tri) override
Computes operator values for the given observation and source triangles.
Class for computing the vector double-layer potential operator in a principal value sense.
VectorDoubleLayerPvOp(const ObsIntegratorType obs_integrator=ObsStrategic<>())
Constructs a VectorDoubleLayerPvOp object with a specified integration object.
EigMatMN< Complex, 3, 3 > assemble(const Complex k, const Triangle< 3 > &obs_tri, const Triangle< 3 > &src_tri, const ObsResult &obs_result)
Assembles the computed integrals into the final operator values.
EigMatMN< Complex, 3, 3 > compute(const Complex k, const Triangle< 3 > &obs_tri, const Triangle< 3 > &src_tri) override
Computes operator values for the given observation and source triangles.
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.
Data structure to hold the results of integration over the observation triangle.
Definition base.hpp:37