22 params.
addClassDescription(
"First order Robin-style Absorbing/Port BC for vector variables.");
23 params.
addParam<FunctionName>(
"beta", 1.0,
"Scalar wave number.");
26 "component",
component,
"Variable field component (real or imaginary).");
28 params.
addParam<FunctionName>(
"real_incoming", 0.0,
"Real incoming field vector.");
29 params.
addParam<FunctionName>(
"imag_incoming", 0.0,
"Imaginary incoming field vector.");
31 params.
addParam<
MooseEnum>(
"mode", mode,
"Mode of operation for VectorEMRobinBC.");
38 _beta(getFunction(
"beta")),
40 _component(getParam<
MooseEnum>(
"component")),
42 _coupled_val(coupledVectorValue(
"coupled_field")),
43 _coupled_var_num(coupled(
"coupled_field")),
45 _inc_real(getFunction(
"real_incoming")),
46 _inc_imag(getFunction(
"imag_incoming")),
50 _real_incoming_was_set(parameters.isParamSetByUser(
"real_incoming")),
51 _imag_incoming_was_set(parameters.isParamSetByUser(
"imag_incoming"))
58 ", mode was set to Absorbing, while an incoming profile function (used for Port BCs) was " 59 "defined. Either remove the profile function parameters, or set your BC to Port mode!");
67 std::complex<double> field_0(0, 0);
68 std::complex<double> field_1(0, 0);
69 std::complex<double> field_2(0, 0);
74 field_0.real(
_u[
_qp](0));
77 field_1.real(
_u[
_qp](1));
80 field_2.real(
_u[
_qp](2));
86 field_0.imag(
_u[
_qp](0));
89 field_1.imag(
_u[
_qp](1));
92 field_2.imag(
_u[
_qp](2));
94 VectorValue<std::complex<double>> field(field_0, field_1, field_2);
97 VectorValue<std::complex<double>> field_inc(std::complex<double>(0.0, 0.0),
98 std::complex<double>(0.0, 0.0),
99 std::complex<double>(0.0, 0.0));
100 VectorValue<std::complex<double>> curl_inc(std::complex<double>(0.0, 0.0),
101 std::complex<double>(0.0, 0.0),
102 std::complex<double>(0.0, 0.0));
117 std::complex<double> field_inc_0(inc_real_value(0), inc_imag_value(0));
118 std::complex<double> field_inc_1(inc_real_value(1), inc_imag_value(1));
119 std::complex<double> field_inc_2(inc_real_value(2), inc_imag_value(2));
120 field_inc = VectorValue<std::complex<double>>(field_inc_0, field_inc_1, field_inc_2);
122 std::complex<double> curl_inc_0(inc_real_curl(0), inc_imag_curl(0));
123 std::complex<double> curl_inc_1(inc_real_curl(1), inc_imag_curl(1));
124 std::complex<double> curl_inc_2(inc_real_curl(2), inc_imag_curl(2));
125 curl_inc = VectorValue<std::complex<double>>(curl_inc_0, curl_inc_1, curl_inc_2);
130 "Wave number expected to be positive, calculated to be " 133 std::complex<double> u_inc_dot_test = 0.0;
151 std::complex<double> diff = u_inc_dot_test - p_dot_test;
180 return -off_diag_jac;
VectorEMRobinBC(const InputParameters ¶meters)
const Function & _beta
Scalar waveguide propagation constant.
const VectorVariableValue & _coupled_val
Coupled field vector variable.
virtual Real computeQpResidual() override
virtual RealVectorValue curl(Real t, const Point &p) const
static const std::string component
static InputParameters validParams()
const MooseArray< Point > & _q_point
Case when the boundary is configured to absorb impinging electromagnetic radiation.
const bool _real_incoming_was_set
Boolean marking whether real component of the incoming wave was set by the user.
const Function & _inc_real
Real incoming field vector.
virtual Real computeQpJacobian() override
const Function & _inc_imag
Imaginary incoming field vector.
const bool _imag_incoming_was_set
Boolean marking whether imaginary component of the incoming wave was set by the user.
Case when the boundary is configured to both absorb impinging electromagnetic radiation and launch an...
const MooseArray< Point > & _normals
const VectorVariableTestValue & _test
const MooseEnum _component
Variable field component (real or imaginary)
const MooseEnum _mode
Mode of operation (absorbing or port)
registerMooseObject("ElectromagneticsApp", VectorEMRobinBC)
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
virtual Real computeQpOffDiagJacobian(unsigned int jvar) override
virtual RealVectorValue vectorValue(Real t, const Point &p) const
void mooseError(Args &&... args) const
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
unsigned int _coupled_var_num
Coupled field vector variable id.
static InputParameters validParams()
const VectorVariableValue & _u
virtual Real value(Real t, const Point &p) const
First order Robin-style Absorbing/Port boundary condition for vector nonlinear variables.
const VectorVariablePhiValue & _phi