OpenBEM
Open-source framework for electromagnetic simulation with the boundary element method.
Loading...
Searching...
No Matches
vector_ops.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_VECTOR_OPS_H
19#define BEM_RWG_OPS_VECTOR_OPS_H
20
21#include <stdexcept>
22#include <iostream>
23
24#include "types.hpp"
25
27
34
35
36namespace bem::rwg
37{
38
48template <typename ObsIntegratorType = ObsStrategic<>>
49class VectorRwgOps: public OperatorBase<12, 3>
50{
51
53 static_assert(
54 std::is_base_of<ObsIntegratorBase, ObsIntegratorType>::value,
55 "VectorRwgOps: `ObsIntegratorType` must derive from `ObsIntegratorBase`"
56 );
57
58public:
59
66 obs_integrator_(obs_integrator), helmholtz_kernel_(helmholtz_kernel) {};
67
68
81 const Complex k,
82 const Triangle<3>& obs_tri,
83 const Triangle<3>& src_tri
84 ) override;
85
86
87protected:
88
89 const bool helmholtz_kernel_ = false;
90
91 ObsIntegratorType obs_integrator_;
92
93 VectorSingleLayerOp<ObsIntegratorType> vector_single_layer_;
94 RotVectorSingleLayerOp<ObsIntegratorType> rot_vector_single_layer_;
95 VectorDoubleLayerPvOp<ObsIntegratorType> vector_double_layer_pv_;
96 RotVectorDoubleLayerPvOp<ObsIntegratorType> rot_vector_double_layer_pv_;
97 RotGradScalarSingleLayerOp<ObsIntegratorType> rot_grad_scalar_single_layer_;
98 ScalarSingleLayerOp<ObsIntegratorType> scalar_single_layer_;
99
100};
101
106}
107
109
110#endif
Base class for RWG-based BEM operators.
Definition base.hpp:41
Class for computing the full set of vector RWG operators.
VectorRwgOps(const ObsIntegratorType obs_integrator=ObsStrategic<>(), const bool helmholtz_kernel=false)
Constructs a VectorRwgOps object with a specified integration object.
EigMatMN< Complex, 12, 3 > compute(const Complex k, const Triangle< 3 > &obs_tri, const Triangle< 3 > &src_tri) override
Computes the 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.