https://mooseframework.inl.gov
Loading...
Searching...
No Matches
ScaleIntegrator.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
14#include "libmesh/ignore_warnings.h"
15#include "mfem/miniapps/common/pfem_extras.hpp"
16#include "libmesh/restore_warnings.h"
17
18#include "MooseError.h"
19
20namespace Moose::MFEM
21{
22
24class ScaleIntegrator : public mfem::BilinearFormIntegrator
25{
26private:
27 mfem::BilinearFormIntegrator * _integrator{nullptr};
28 mfem::real_t _scale;
30
31public:
32 ScaleIntegrator(mfem::BilinearFormIntegrator * integ)
33 : _integrator{integ}, _scale{1}, _own_integrator{true}
34 {
35 }
36 ScaleIntegrator(mfem::BilinearFormIntegrator * integ, mfem::real_t scale)
37 : _integrator{integ}, _scale{scale}, _own_integrator{true}
38 {
39 }
40 ScaleIntegrator(mfem::BilinearFormIntegrator * integ, mfem::real_t scale, bool own)
42 {
43 }
44
45 void SetIntegrator(mfem::BilinearFormIntegrator * integ)
46 {
48 {
49 delete _integrator;
50 }
51
52 _integrator = integ;
53 }
54
55 void SetScale(mfem::real_t scale) { _scale = scale; }
56
57 void SetOwn(bool own) { _own_integrator = own; }
58
60 {
61 if (!_integrator)
62 mooseError("Integrator not set");
63 }
64
65 virtual void SetIntRule(const mfem::IntegrationRule * ir) override;
66
67 virtual void AssembleElementMatrix(const mfem::FiniteElement & el,
68 mfem::ElementTransformation & Trans,
69 mfem::DenseMatrix & elmat) override;
70 virtual void AssembleElementMatrix2(const mfem::FiniteElement & trial_fe,
71 const mfem::FiniteElement & test_fe,
72 mfem::ElementTransformation & Trans,
73 mfem::DenseMatrix & elmat) override;
74
75 using mfem::BilinearFormIntegrator::AssembleFaceMatrix;
76 virtual void AssembleFaceMatrix(const mfem::FiniteElement & el1,
77 const mfem::FiniteElement & el2,
78 mfem::FaceElementTransformations & Trans,
79 mfem::DenseMatrix & elmat) override;
80
81 using mfem::BilinearFormIntegrator::AssemblePA;
82 virtual void AssemblePA(const mfem::FiniteElementSpace & fes) override;
83
84 virtual void AssembleDiagonalPA(mfem::Vector & diag) override;
85
86 virtual void AssemblePAInteriorFaces(const mfem::FiniteElementSpace & fes) override;
87
88 virtual void AssemblePABoundaryFaces(const mfem::FiniteElementSpace & fes) override;
89
90 virtual void AddMultTransposePA(const mfem::Vector & x, mfem::Vector & y) const override;
91
92 virtual void AddMultPA(const mfem::Vector & x, mfem::Vector & y) const override;
93
94 virtual void
95 AssembleEA(const mfem::FiniteElementSpace & fes, mfem::Vector & emat, const bool add) override;
96
97 virtual void AssembleEABoundary(const mfem::FiniteElementSpace & fes,
98 mfem::Vector & emat,
99 const bool add) override;
100
101 virtual void AssembleMF(const mfem::FiniteElementSpace & fes) override;
102
103 virtual void AddMultMF(const mfem::Vector & x, mfem::Vector & y) const override;
104
105 virtual void AssembleDiagonalMF(mfem::Vector & diag) override;
106
107 virtual ~ScaleIntegrator();
108};
109} // namespace Moose::MFEM
110
111#endif
void mooseError(Args &&... args)
Emit an error message with the given stringified, concatenated args and terminate the application.
Definition MooseError.h:311
Real scale
Definition MortarUtils.C:62
Integrator which scales its results by a constant value.
ScaleIntegrator(mfem::BilinearFormIntegrator *integ)
virtual void AssembleEA(const mfem::FiniteElementSpace &fes, mfem::Vector &emat, const bool add) override
virtual void AssembleElementMatrix(const mfem::FiniteElement &el, mfem::ElementTransformation &Trans, mfem::DenseMatrix &elmat) override
virtual void AddMultTransposePA(const mfem::Vector &x, mfem::Vector &y) const override
virtual void AssembleFaceMatrix(const mfem::FiniteElement &el1, const mfem::FiniteElement &el2, mfem::FaceElementTransformations &Trans, mfem::DenseMatrix &elmat) override
virtual void AssembleElementMatrix2(const mfem::FiniteElement &trial_fe, const mfem::FiniteElement &test_fe, mfem::ElementTransformation &Trans, mfem::DenseMatrix &elmat) override
void SetIntegrator(mfem::BilinearFormIntegrator *integ)
virtual void AssemblePABoundaryFaces(const mfem::FiniteElementSpace &fes) override
virtual void AssembleDiagonalPA(mfem::Vector &diag) override
virtual void AssembleMF(const mfem::FiniteElementSpace &fes) override
virtual void AssemblePAInteriorFaces(const mfem::FiniteElementSpace &fes) override
ScaleIntegrator(mfem::BilinearFormIntegrator *integ, mfem::real_t scale)
mfem::BilinearFormIntegrator * _integrator
virtual void SetIntRule(const mfem::IntegrationRule *ir) override
virtual void AddMultPA(const mfem::Vector &x, mfem::Vector &y) const override
virtual void AssemblePA(const mfem::FiniteElementSpace &fes) override
virtual void AddMultMF(const mfem::Vector &x, mfem::Vector &y) const override
ScaleIntegrator(mfem::BilinearFormIntegrator *integ, mfem::real_t scale, bool own)
void SetScale(mfem::real_t scale)
virtual void AssembleEABoundary(const mfem::FiniteElementSpace &fes, mfem::Vector &emat, const bool add) override
virtual void AssembleDiagonalMF(mfem::Vector &diag) override
Utilities for converting between vector(s) of libMesh Points and MFEM Vector(s).