https://mooseframework.inl.gov
Loading...
Searching...
No Matches
MFEMRWTE10IntegratedBC.h
Go to the documentation of this file.
1//* This file is part of the MOOSE framework
2//* https://mooseframework.inl.gov
3//*
4//* All rights reserved, see COPYRIGHT for full restrictions
5//* https://github.com/idaholab/moose/blob/master/COPYRIGHT
6//*
7//* Licensed under LGPL 2.1, please see LICENSE for details
8//* https://www.gnu.org/licenses/lgpl-2.1.html
9
10#ifdef MOOSE_MFEM_ENABLED
11
12#pragma once
13
15
17{
18public:
20
22
23 void RWTE10(const mfem::Vector & x, std::vector<std::complex<mfem::real_t>> & E);
24 void RWTE10Real(const mfem::Vector & x, mfem::Vector & v);
25 void RWTE10Imag(const mfem::Vector & x, mfem::Vector & v);
26
27 virtual mfem::LinearFormIntegrator * getRealLFIntegrator() override
28 {
29 return (getParam<bool>("input_port") ? new mfem::VectorFEBoundaryTangentLFIntegrator(*_u_real)
30 : nullptr);
31 }
32 virtual mfem::LinearFormIntegrator * getImagLFIntegrator() override
33 {
34 return (getParam<bool>("input_port") ? new mfem::VectorFEBoundaryTangentLFIntegrator(*_u_imag)
35 : nullptr);
36 }
37 virtual mfem::BilinearFormIntegrator * getRealBFIntegrator() override { return nullptr; }
38 virtual mfem::BilinearFormIntegrator * getImagBFIntegrator() override
39 {
40 return new mfem::VectorFEMassIntegrator(_robin_coef_im.get());
41 }
42
44 mfem::Vector normalizedCrossProduct(const mfem::Vector & va, const mfem::Vector & vb)
45 {
46 mfem::Vector vec;
47 va.cross3D(vb, vec);
48 return vec /= vec.Norml2();
49 }
50
51protected:
52 mfem::real_t _mu;
53 mfem::real_t _epsilon;
54 mfem::real_t _omega;
55
56 mfem::Vector _a1;
57 mfem::Vector _a2;
58
59 mfem::real_t _k0;
60 mfem::real_t _kc;
61 std::complex<mfem::real_t> _k;
62
63 mfem::Vector _k_c;
64 mfem::Vector _k_a;
65
66 std::unique_ptr<mfem::ConstantCoefficient> _robin_coef_im{nullptr};
67 std::unique_ptr<mfem::VectorFunctionCoefficient> _u_real{nullptr};
68 std::unique_ptr<mfem::VectorFunctionCoefficient> _u_imag{nullptr};
69};
70
71#endif
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system.
std::unique_ptr< mfem::ConstantCoefficient > _robin_coef_im
void RWTE10Imag(const mfem::Vector &x, mfem::Vector &v)
virtual mfem::LinearFormIntegrator * getRealLFIntegrator() override
void RWTE10(const mfem::Vector &x, std::vector< std::complex< mfem::real_t > > &E)
std::unique_ptr< mfem::VectorFunctionCoefficient > _u_imag
static InputParameters validParams()
virtual mfem::LinearFormIntegrator * getImagLFIntegrator() override
void RWTE10Real(const mfem::Vector &x, mfem::Vector &v)
virtual mfem::BilinearFormIntegrator * getRealBFIntegrator() override
std::complex< mfem::real_t > _k
std::unique_ptr< mfem::VectorFunctionCoefficient > _u_real
virtual mfem::BilinearFormIntegrator * getImagBFIntegrator() override
mfem::Vector normalizedCrossProduct(const mfem::Vector &va, const mfem::Vector &vb)
Computes the unit vector in the direction of the cross product of two 3d vectors.
const InputParameters & parameters() const
Get the parameters of the object.
Definition MooseBase.h:131