https://mooseframework.inl.gov
Loading...
Searching...
No Matches
MFEMComplexCurlAux.C
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#include "MFEMComplexCurlAux.h"
13#include "MFEMProblem.h"
14
16
19{
22 "Calculates the curl of a complex H(curl) conforming ND source variable and stores the result"
23 " on an H(div) conforming RT result complex auxvariable");
24 MFEMExecutedObject::addRequiredDependencyParam<VariableName>(
25 params, "source", "Vector H(curl) MFEMComplexVariable to take the curl of.");
26 params.addParam<mfem::real_t>(
27 "scale_factor_real", 1.0, "Real part of the factor to scale result auxvariable by.");
28 params.addParam<mfem::real_t>(
29 "scale_factor_imag", 0.0, "Imaginary part of the factor to scale result auxvariable by.");
30 return params;
31}
32
34 : MFEMComplexAuxKernel(parameters),
35 _source_var_name(getParam<VariableName>("source")),
36 _source_var(*getMFEMProblem().getComplexGridFunction(_source_var_name)),
37 _scale_factor(getParam<mfem::real_t>("scale_factor_real"),
38 getParam<mfem::real_t>("scale_factor_imag")),
39 _curl(_source_var.ParFESpace(), _result_var.ParFESpace())
40{
41 _sequence = _source_var.GetSequence() + _result_var.GetSequence();
42 _curl.Assemble();
43 _curl.Finalize();
44}
45
46// Computes the auxvariable.
47void
49{
50 update();
51 _curl.AddMult(_source_var.real(), _result_var.real() = 0);
52 _curl.AddMult(_source_var.imag(), _result_var.imag() = 0);
53
55}
56
57void
59{
60 if (long sequence = _source_var.GetSequence() + _result_var.GetSequence() > _sequence)
61 {
62 _sequence = sequence;
63 _curl.Update();
64 _curl.Assemble();
65 _curl.Finalize();
66 }
67}
68
69#endif
registerMooseObject("MooseApp", MFEMComplexCurlAux)
The main MOOSE class responsible for handling user-defined parameters in almost every MOOSE system.
void addParam(const std::string &name, const S &value, const std::string &doc_string)
These methods add an optional parameter and a documentation string to the InputParameters object.
void addClassDescription(const std::string &doc_string)
This method adds a description of the class that will be displayed in the input file syntax dump.
Class to construct an auxiliary solver used to update a complex auxvariable.
mfem::ParComplexGridFunction & _result_var
Reference to result complex gridfunction.
long _sequence
Counter to keep track of FE space updates.
void complexScale(mfem::ParComplexGridFunction &a, const std::complex< mfem::real_t > scale={1.0, 0.0})
Method to scale a complex variable by a complex constant.
static InputParameters validParams()
Class to set an H(div) auxvariable to be the curl of an H(curl) vector variable.
mfem::common::ParDiscreteCurlOperator _curl
Curl operator.
MFEMComplexCurlAux(const InputParameters &parameters)
const std::complex< mfem::real_t > _scale_factor
Scalar factor to multiply the result by.
mfem::ParComplexGridFunction & _source_var
Reference to source gridfunction.
virtual void update() override
Method called to update any owned objects upon an FE space update.
virtual void execute() override
Computes the auxvariable.
static InputParameters validParams()