12#ifndef MFEM_BILININTEG
13#define MFEM_BILININTEG
27class FaceQuadratureSpace;
103 const bool add =
true);
135 const bool add =
true);
140 const bool add =
true);
150 const bool add =
true);
154 const bool add =
true);
271 Vector &flux,
bool with_coef =
true,
346 { bfi = bfi_; own_bfi = own_bfi_; }
404 const bool add)
override;
410 const bool add)
override;
414 const bool add)
override;
427 { bfi = bfi_; own_bfi = own_bfi_; }
447 { integrator = integ; own_integrator = own_integ; }
472 { integrators.
Append(integ); }
520 const bool add)
override;
526 const bool add)
override;
530 const bool add)
override;
570 return "MixedScalarIntegrator: "
571 "Trial and test spaces must both be scalar fields.";
594#ifndef MFEM_THREAD_SAFE
644 return "MixedVectorIntegrator: "
645 "Trial and test spaces must both be vector fields";
678#ifndef MFEM_THREAD_SAFE
714 bool cross_2d_ =
false)
734 return "MixedScalarVectorIntegrator: "
735 "Trial space must be a vector field "
736 "and the test space must be a scalar field";
740 return "MixedScalarVectorIntegrator: "
741 "Trial space must be a scalar field "
742 "and the test space must be a vector field";
772#ifndef MFEM_THREAD_SAFE
816 return (trial_fe.
GetDim() == 1 && test_fe.
GetDim() == 1 &&
823 return "MixedScalarDerivativeIntegrator: "
824 "Trial and test spaces must both be scalar fields in 1D "
825 "and the trial space must implement CalcDShape.";
851 return (trial_fe.
GetDim() == 1 && test_fe.
GetDim() == 1 &&
858 return "MixedScalarWeakDerivativeIntegrator: "
859 "Trial and test spaces must both be scalar fields in 1D "
860 "and the test space must implement CalcDShape with "
861 "map type \"VALUE\".";
895 return "MixedScalarDivergenceIntegrator: "
896 "Trial must be $H(div)$ and the test space must be a "
930 return "MixedVectorDivergenceIntegrator: "
931 "Trial must be H(Div) and the test space must be a "
969 return "MixedScalarWeakGradientIntegrator: "
970 "Trial space must be a scalar field "
971 "and the test space must be H(Div)";
1003 return (trial_fe.
GetDim() == 2 && test_fe.
GetDim() == 2 &&
1010 return "MixedScalarCurlIntegrator: "
1011 "Trial must be H(Curl) and the test space must be a "
1059 return (trial_fe.
GetDim() == 2 && test_fe.
GetDim() == 2 &&
1066 return "MixedScalarWeakCurlIntegrator: "
1067 "Trial space must be a scalar field "
1068 "and the test space must be H(Curl)";
1123 return "MixedDotProductIntegrator: "
1124 "Trial space must be a vector field "
1125 "and the test space must be a scalar field";
1149 return "MixedWeakGradDotIntegrator: "
1150 "Trial space must be a vector field "
1151 "and the test space must be a vector field with a divergence";
1187 return "MixedWeakDivCrossIntegrator: "
1188 "Trial space must be a vector field in 3D "
1189 "and the test space must be a scalar field with a gradient";
1227 return "MixedGradGradIntegrator: "
1228 "Trial and test spaces must both be scalar fields "
1229 "with a gradient operator.";
1279 return "MixedCrossGradGradIntegrator: "
1280 "Trial and test spaces must both be scalar fields "
1281 "with a gradient operator.";
1328 return "MixedCurlCurlIntegrator"
1329 "Trial and test spaces must both be vector fields in 3D "
1372 return "MixedCrossCurlCurlIntegrator: "
1373 "Trial and test spaces must both be vector fields in 3D "
1415 return "MixedCrossCurlGradIntegrator"
1416 "Trial space must be a vector field in 3D with a curl"
1417 "and the test space must be a scalar field with a gradient";
1458 return "MixedCrossGradCurlIntegrator"
1459 "Trial space must be a scalar field in 3D with a gradient"
1460 "and the test space must be a vector field with a curl";
1501 return "MixedWeakCurlCrossIntegrator: "
1502 "Trial space must be a vector field in 3D "
1503 "and the test space must be a vector field with a curl";
1528 return (trial_fe.
GetDim() == 2 && test_fe.
GetDim() == 2 &&
1536 return "MixedScalarWeakCurlCrossIntegrator: "
1537 "Trial space must be a vector field in 2D "
1538 "and the test space must be a vector field with a curl";
1571 return "MixedCrossGradIntegrator: "
1572 "Trial space must be a scalar field with a gradient operator"
1573 " and the test space must be a vector field both in 3D.";
1611 return "MixedCrossCurlIntegrator: "
1612 "Trial space must be a vector field in 3D with a curl "
1613 "and the test space must be a vector field";
1638 return (trial_fe.
GetDim() == 2 && test_fe.
GetDim() == 2 &&
1646 return "MixedCrossCurlIntegrator: "
1647 "Trial space must be a vector field in 2D with a curl "
1648 "and the test space must be a vector field";
1672 return (trial_fe.
GetDim() == 2 && test_fe.
GetDim() == 2 &&
1680 return "MixedScalarCrossGradIntegrator: "
1681 "Trial space must be a scalar field in 2D with a gradient "
1682 "and the test space must be a scalar field";
1706 return (trial_fe.
GetDim() == 2 && test_fe.
GetDim() == 2 &&
1713 return "MixedScalarCrossProductIntegrator: "
1714 "Trial space must be a vector field in 2D "
1715 "and the test space must be a scalar field";
1734 return (trial_fe.
GetDim() == 2 && test_fe.
GetDim() == 2 &&
1741 return "MixedScalarWeakCrossProductIntegrator: "
1742 "Trial space must be a scalar field in 2D "
1743 "and the test space must be a vector field";
1771 return "MixedDirectionalDerivativeIntegrator: "
1772 "Trial space must be a scalar field with a gradient "
1773 "and the test space must be a scalar field";
1805 return "MixedGradDivIntegrator: "
1806 "Trial space must be a scalar field with a gradient"
1807 "and the test space must be a vector field with a divergence";
1845 return "MixedDivGradIntegrator: "
1846 "Trial space must be a vector field with a divergence"
1847 "and the test space must be a scalar field with a gradient";
1883 return "MixedScalarWeakDivergenceIntegrator: "
1884 "Trial space must be a scalar field "
1885 "and the test space must be a scalar field with a gradient";
1925 return "MixedVectorGradientIntegrator: "
1926 "Trial spaces must be $H^1$ and the test space must be a "
1927 "vector field in 2D or 3D";
1955 int dim, ne, dofs1D, quad1D;
1984 return "MixedVectorCurlIntegrator: "
1985 "Trial space must be H(Curl) and the test space must be a "
1986 "vector field in 3D";
2014 int dim, ne, dofs1D, dofs1Dtest,quad1D, testType, trialType, coeffDim;
2043 return "MixedVectorWeakCurlIntegrator: "
2044 "Trial space must be vector field in 3D and the "
2045 "test space must be H(Curl)";
2071 int dim, ne, dofs1D, quad1D, testType, trialType, coeffDim;
2099 return "MixedVectorWeakDivergenceIntegrator: "
2100 "Trial space must be vector field and the "
2101 "test space must be H1";
2134 const DofToQuad *trial_maps, *test_maps;
2137 int trial_dofs1D, test_dofs1D, quad1D;
2141 Q{NULL}, trial_maps{NULL}, test_maps{NULL}, geom{NULL}
2144 Q{q_}, trial_maps{NULL}, test_maps{NULL}, geom{NULL}
2147 Q{&q}, trial_maps{NULL}, test_maps{NULL}, geom{NULL}
2185 Vector&,
const int,
const int);
2189 const int,
const int);
2201 Vector vec, vecdxt, pointflux, shape;
2202#ifndef MFEM_THREAD_SAFE
2203 DenseMatrix dshape, dshapedxt, invdfdx, M, dshapedxt_m;
2212 int dim, ne, dofs1D, quad1D;
2214 bool symmetric =
true;
2220 typedef std::vector<std::vector<int>> IntArrayVar2D;
2223 static constexpr int numTypes = 2;
2245 std::vector<std::vector<Vector>> reducedWeights;
2246 std::vector<IntArrayVar2D> reducedIDs;
2247 std::vector<Array<int>> pQ1D, pD1D;
2248 std::vector<std::vector<Array2D<real_t>>> pB, pG;
2249 std::vector<IntArrayVar2D> pminD, pmaxD, pminQ, pmaxQ, pminDD, pmaxDD;
2251 std::vector<Array<const IntegrationRule*>> pir1d;
2253 void SetupPatchPA(
const int patch,
Mesh *mesh,
bool unitWeights=
false);
2255 void SetupPatchBasisData(
Mesh *mesh,
unsigned int patch);
2259 void AssemblePatchMatrix_fullQuadrature(
const int patch,
2265 void AssemblePatchMatrix_reducedQuadrature(
const int patch,
2310 Vector &flux,
bool with_coef =
true,
2323 const bool add)
override;
2350 template <
int DIM,
int D1D,
int Q1D>
2353 ApplyPAKernels::Specialization<DIM,D1D,Q1D>::Add();
2354 DiagonalPAKernels::Specialization<DIM,D1D,Q1D>::Add();
2362 return &
GetRule(trial_fe, test_fe);
2371#ifndef MFEM_THREAD_SAFE
2423 const bool add)
override;
2426 const bool add)
override;
2450 template <
int DIM,
int D1D,
int Q1D>
2453 ApplyPAKernels::Specialization<DIM,D1D,Q1D>::Add();
2454 DiagonalPAKernels::Specialization<DIM,D1D,Q1D>::Add();
2493#ifndef MFEM_THREAD_SAFE
2495 Vector shape, vec2, BdFidxT;
2511 const bool add)
override;
2545 template <
int DIM,
int D1D,
int Q1D>
2548 ApplyPAKernels::Specialization<DIM, D1D, Q1D>::Add();
2549 ApplyPATKernels::Specialization<DIM, D1D, Q1D>::Add();
2599 int vdim = -1, Q_order = 0;
2600 Vector shape, te_shape, vec;
2628 vdim(q.
GetVDim()), Q_order(qo),
VQ(&q) { }
2632 vdim(q.
GetVDim()), Q_order(qo),
MQ(&q) { }
2655 void(*)(
const int,
const int,
2686#ifndef MFEM_THREAD_SAFE
2695 int dim, ne, dofs1D, L2dofs1D, quad1D;
2720#ifndef MFEM_THREAD_SAFE
2747#ifndef MFEM_THREAD_SAFE
2769#ifndef MFEM_THREAD_SAFE
2812#ifndef MFEM_THREAD_SAFE
2855 Vector &flux,
bool with_coef,
2873 const int,
const int,
const bool,
const int,
const Array<real_t> &,
2894 ApplyPAKernels::Specialization<DIM, D1D, Q1D>::Add();
2895 DiagonalPAKernels::Specialization<DIM, D1D, Q1D>::Add();
2904#ifndef MFEM_THREAD_SAFE
2905 DenseMatrix dshape_hat, dshape, curlshape, Jadj, grad_hat, grad;
2923 const Vector &elfun)
override;
2964 {
Q = q;
DQ = dq;
MQ = mq; }
2966#ifndef MFEM_THREAD_SAFE
3015 const bool add)
override;
3035 const DofToQuad *trial_maps, *test_maps;
3037 int dim, sdim, ne, nq;
3038 int trial_dofs1D, test_dofs1D, quad1D;
3042 Q(NULL), trial_maps(NULL), test_maps(NULL), geom(NULL)
3045 Q(q_), trial_maps(NULL), test_maps(NULL), geom(NULL)
3048 Q(&q), trial_maps(NULL), test_maps(NULL), geom(NULL)
3084#ifndef MFEM_THREAD_SAFE
3085 Vector divshape, te_divshape;
3093 int dim, ne, dofs1D, quad1D;
3114 const bool add)
override;
3213 const int,
const int,
const int);
3218 template <
int DIM,
int VDIM,
int D1D,
int Q1D>
3221 ApplyPAKernels::Specialization<DIM, VDIM, D1D, Q1D>::Add();
3243#ifndef MFEM_THREAD_SAFE
3256 std::unique_ptr<QuadratureSpace> q_space;
3258 std::unique_ptr<CoefficientVector> lambda_quad, mu_quad;
3260 std::unique_ptr<QuadratureFunction> q_vec;
3299 Vector &flux,
bool with_coef =
true,
3341 const bool add =
true)
override;
3389 Vector tr_shape1, te_shape1, tr_shape2, te_shape2;
3428 const bool add)
override;
3432 const bool add)
override;
3453 ApplyPAKernels::Specialization<DIM, D1D, Q1D>::Add();
3454 ApplyPATKernels::Specialization<DIM, D1D, Q1D>::Add();
3555 const int,
const int);
3562 ApplyPAKernels::Specialization<DIM, D1D, Q1D>::Add();
3711#ifndef MFEM_THREAD_SAFE
3733 const int dim,
const int row_ndofs,
const int col_ndofs,
3734 const int row_offset,
const int col_offset,
3747 Vector face_shape, shape1, shape2;
3765 Vector face_shape, normal, shape1_n, shape2_n;
3781 const bool add =
true)
override;
3791 Vector face_shape, shape;
3807 Vector face_shape, normal, shape_n;
3834 MFEM_VERIFY(Y.
Width() ==
dim,
"Size mismatch");
3840 for (
int i = 0; i<h; i++)
3842 Z(i,0) = x(2) * Y(i,1) - x(1) * Y(i,2);
3843 Z(i,1) = x(0) * Y(i,2) - x(2) * Y(i,0);
3844 Z(i,2) = x(1) * Y(i,0) - x(0) * Y(i,1);
3849 for (
int i = 0; i<h; i++)
3851 Z(i,0) = x(1) * Y(i,0) - x(0) * Y(i,1);
3905 int dim, ne, o_dofs1D, c_dofs1D;
3932 ran_fe.
Project(dom_fe, Trans, elmat);
3936 ran_fe.
Project(dom_fe, Trans, elmat_block);
3939 for (
int i = 0; i <
vdim; i++)
3955 std::unique_ptr<FiniteElement> dofquad_fe;
3959 int dim, ne, o_dofs1D, c_dofs1D;
int Append(const T &el)
Append element 'el' to array, resize if necessary.
void AssembleFaceMatrix(const FiniteElement &el1, const FiniteElement &el2, FaceElementTransformations &Trans, DenseMatrix &elmat) override
BoundaryMassIntegrator(Coefficient &q)
Base class Coefficients that optionally depend on space and time. These are used by the BilinearFormI...
, negative transpose of ConvectionIntegrator
ConservativeConvectionIntegrator(VectorCoefficient &q, real_t a=1.0)
void AssembleMF(const FiniteElementSpace &fes) override
Method defining matrix-free assembly.
const DofToQuad * maps
Not owned.
MFEM_REGISTER_KERNELS(ApplyPAKernels, ApplyKernelType,(int, int, int))
arguments: DIMS, D1D, Q1D
bool SupportsCeed() const override
Indicates whether this integrator can use a Ceed backend.
static const IntegrationRule & GetRule(const FiniteElement &el, const ElementTransformation &Trans)
void AssembleDiagonalPA(Vector &diag) override
Assemble diagonal and add it to Vector diag.
void AssemblePA(const FiniteElementSpace &) override
Method defining partial assembly.
void AddMultPA(const Vector &, Vector &) const override
Method for partially assembled action.
ConvectionIntegrator(VectorCoefficient &q, real_t a=1.0)
void AssembleElementMatrix(const FiniteElement &, ElementTransformation &, DenseMatrix &) override
Given a particular Finite Element computes the element matrix elmat.
void AddMultMF(const Vector &, Vector &) const override
MFEM_REGISTER_KERNELS(ApplyPATKernels, ApplyKernelType,(int, int, int))
arguments: DIMS, D1D, Q1D
const GeometricFactors * geom
Not owned.
const IntegrationRule * GetDefaultIntegrationRule(const FiniteElement &trial_fe, const FiniteElement &test_fe, const ElementTransformation &trans) const override
Subclasses should override to choose a default integration rule.
void AssembleEA(const FiniteElementSpace &fes, Vector &emat, const bool add) override
Method defining element assembly.
void(*)(const int, const Array< real_t > &, const Array< real_t > &, const Array< real_t > &, const Array< real_t > &, const Vector &, const Vector &, Vector &, const int, const int) ApplyKernelType
arguments: NE, B, G, Bt, Gt, pa_data, x, y, D1D, Q1D
static void AddSpecialization()
void AddMultTransposePA(const Vector &x, Vector &y) const override
Method for partially assembled transposed action.
void AssembleDiagonalMF(Vector &diag) override
Assemble diagonal and add it to Vector diag.
Integrator for for Nedelec elements.
MFEM_REGISTER_KERNELS(DiagonalPAKernels, DiagonalKernelType,(int, int, int))
parameters: dim, d1d, q1d
void AssembleElementMatrix2(const FiniteElement &trial_fe, const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &elmat) override
const GeometricFactors * geom
Not owned.
void AddAbsMultPA(const Vector &x, Vector &y) const override
void AssembleElementMatrix(const FiniteElement &el, ElementTransformation &Trans, DenseMatrix &elmat) override
Given a particular Finite Element computes the element matrix elmat.
static void AddSpecialization()
void ComputeElementFlux(const FiniteElement &el, ElementTransformation &Trans, Vector &u, const FiniteElement &fluxelem, Vector &flux, bool with_coef, const IntegrationRule *ir=NULL) override
Virtual method required for Zienkiewicz-Zhu type error estimators.
bool symmetric
False if using a nonsymmetric matrix coefficient.
const Coefficient * GetCoefficient() const
void(*)(const int, const int, const bool, const int, const Array< real_t > &, const Array< real_t > &, const Array< real_t > &, const Array< real_t > &, const Vector &, Vector &) DiagonalKernelType
arguments: d1d, q1d, symmetric, ne, Bo, Bc, Go, Gc, pa_data, diag
MFEM_REGISTER_KERNELS(ApplyPAKernels, ApplyKernelType,(int, int, int))
parameters: dim, d1d, q1d
void(*)( const int, const int, const bool, const int, const Array< real_t > &, const Array< real_t > &, const Array< real_t > &, const Array< real_t > &, const Array< real_t > &, const Array< real_t > &, const Vector &, const Vector &, Vector &, const bool) ApplyKernelType
real_t ComputeFluxEnergy(const FiniteElement &fluxelem, ElementTransformation &Trans, Vector &flux, Vector *d_energy=NULL) override
Virtual method required for Zienkiewicz-Zhu type error estimators.
const DofToQuad * mapsC
Not owned. DOF-to-quad map, closed.
void AddMultPA(const Vector &x, Vector &y) const override
Method for partially assembled action.
void AssembleDiagonalPA(Vector &diag) override
Assemble diagonal and add it to Vector diag.
const DofToQuad * mapsO
Not owned. DOF-to-quad map, open.
void AssemblePA(const FiniteElementSpace &fes) override
Method defining partial assembly.
DiagonalMatrixCoefficient * DQ
void AssembleElementMatrix2(const FiniteElement &dom_fe, const FiniteElement &ran_fe, ElementTransformation &Trans, DenseMatrix &elmat) override
void PrecomputeMassInverse(class FiniteElementSpace &fes)
Precomputes the inverses (LU factorizations) of the local mass matrices.
void AssembleFaceMatrix(const FiniteElement &el1, const FiniteElement &el2, FaceElementTransformations &Trans, DenseMatrix &elmat) override
Array< int > Minv_offsets
Array< int > ipiv_offsets
DGDiffusionBR2Integrator(class FiniteElementSpace &fes, real_t e=1.0)
bool RequiresFaceNormalDerivatives() const override
For bilinear forms on element faces, specifies if the normal derivatives are needed on the faces or j...
MFEM_REGISTER_KERNELS(ApplyPAKernels, ApplyKernelType,(int, int, int))
arguments: DIM, d1d, q1d
void AssembleFaceMatrix(const FiniteElement &el1, const FiniteElement &el2, FaceElementTransformations &Trans, DenseMatrix &elmat) override
void AssemblePAInteriorFaces(const FiniteElementSpace &fes) override
const IntegrationRule & GetRule(int order, FaceElementTransformations &T)
DGDiffusionIntegrator(const real_t s, const real_t k)
static void AddSpecialization()
real_t GetPenaltyParameter() const
void AddMultPAFaceNormalDerivatives(const Vector &x, const Vector &dxdn, Vector &y, Vector &dydn) const override
Method for partially assembled action.
void AssemblePABoundaryFaces(const FiniteElementSpace &fes) override
void(*)(const int, const Array< real_t > &, const Array< real_t > &, const Array< real_t > &, const Array< real_t > &, const real_t, const Vector &, const Vector &_, const Vector &, Vector &, Vector &, const int, const int) ApplyKernelType
const DofToQuad * maps
Not owned.
static void AssembleBlock(const int dim, const int row_ndofs, const int col_ndofs, const int row_offset, const int col_offset, const real_t jmatcoef, const Vector &col_nL, const Vector &col_nM, const Vector &row_shape, const Vector &col_shape, const Vector &col_dshape_dnM, const DenseMatrix &col_dshape, DenseMatrix &elmat, DenseMatrix &jmat)
DGElasticityIntegrator(real_t alpha_, real_t kappa_)
void AssembleFaceMatrix(const FiniteElement &el1, const FiniteElement &el2, FaceElementTransformations &Trans, DenseMatrix &elmat) override
DGElasticityIntegrator(Coefficient &lambda_, Coefficient &mu_, real_t alpha_, real_t kappa_)
Solver for the discontinuous Galerkin mass matrix.
MFEM_REGISTER_KERNELS(ApplyPATKernels, ApplyKernelType,(int, int, int))
arguments: DIM, d1d, q1d
MFEM_REGISTER_KERNELS(ApplyPAKernels, ApplyKernelType,(int, int, int))
arguments: DIM, d1d, q1d
void AddMultPA(const Vector &, Vector &) const override
Method for partially assembled action.
void AssemblePABoundaryFaces(const FiniteElementSpace &fes) override
void AddMultTransposePA(const Vector &x, Vector &y) const override
Method for partially assembled transposed action.
DGTraceIntegrator(real_t a, real_t b)
void AssemblePAInteriorFaces(const FiniteElementSpace &fes) override
void(*)(const int, const Array< real_t > &, const Array< real_t > &, const Vector &, const Vector &, Vector &, const int, const int) ApplyKernelType
arguments: nf, B, Bt, pa_data, x, y, dofs1D, quad1D
static const IntegrationRule & GetRule(Geometry::Type geom, int order, const FaceElementTransformations &T)
const FaceGeometricFactors * geom
Not owned.
void AssembleEABoundaryFaces(const FiniteElementSpace &fes, Vector &ea_data_bdr, const bool add) override
void AssembleFaceMatrix(const FiniteElement &el1, const FiniteElement &el2, FaceElementTransformations &Trans, DenseMatrix &elmat) override
void AssembleEAInteriorFaces(const FiniteElementSpace &fes, Vector &ea_data_int, Vector &ea_data_ext, const bool add) override
const DofToQuad * maps
Not owned.
static void AddSpecialization()
Data type dense matrix using column-major storage.
void SetSize(int s)
Change the size of the DenseMatrix to s x s.
void SetSubMatrix(const Array< int > &idx, const DenseMatrix &A)
Set (*this)(idx[i],idx[j]) = A(i,j)
Class for integrating where and are scalars.
void AssembleElementMatrix(const FiniteElement &el, ElementTransformation &Trans, DenseMatrix &elmat) override
Given a particular Finite Element computes the element matrix elmat.
void AssembleElementMatrix2(const FiniteElement &trial_fe, const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &elmat) override
DerivativeIntegrator(Coefficient &q, int i)
static const IntegrationRule & GetRule(const FiniteElement &trial_fe, const FiniteElement &test_fe)
void AddMultMF(const Vector &, Vector &) const override
real_t ComputeFluxEnergy(const FiniteElement &fluxelem, ElementTransformation &Trans, Vector &flux, Vector *d_energy=NULL) override
Virtual method required for Zienkiewicz-Zhu type error estimators.
void AssemblePatchMatrix(const int patch, const FiniteElementSpace &fes, SparseMatrix *&smat) override
void AddMultNURBSPA(const Vector &, Vector &) const override
Method for partially assembled action on NURBS patches.
DiffusionIntegrator(const IntegrationRule *ir=nullptr)
Construct a diffusion integrator with coefficient Q = 1.
void AssemblePatchPA(const int patch, const FiniteElementSpace &fes)
void AssembleElementMatrix(const FiniteElement &el, ElementTransformation &Trans, DenseMatrix &elmat) override
void AddAbsMultTransposePA(const Vector &, Vector &) const override
void(*)(const int, const bool, const Array< real_t > &, const Array< real_t > &, const Vector &, Vector &, const int, const int) DiagonalKernelType
void AssembleElementVector(const FiniteElement &el, ElementTransformation &Tr, const Vector &elfun, Vector &elvect) override
Perform the local action of the BilinearFormIntegrator.
bool SupportsCeed() const override
Indicates whether this integrator can use a Ceed backend.
void AssembleElementMatrix2(const FiniteElement &trial_fe, const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &elmat) override
void ComputeElementFlux(const FiniteElement &el, ElementTransformation &Trans, Vector &u, const FiniteElement &fluxelem, Vector &flux, bool with_coef=true, const IntegrationRule *ir=NULL) override
Virtual method required for Zienkiewicz-Zhu type error estimators.
void AddMultPA(const Vector &, Vector &) const override
Method for partially assembled action.
MFEM_REGISTER_KERNELS(ApplyPAKernels, ApplyKernelType,(int, int, int))
const IntegrationRule * GetDefaultIntegrationRule(const FiniteElement &trial_fe, const FiniteElement &test_fe, const ElementTransformation &trans) const override
Subclasses should override to choose a default integration rule.
void AssembleDiagonalPA(Vector &diag) override
Assemble diagonal and add it to Vector diag.
void AssembleMF(const FiniteElementSpace &fes) override
Method defining matrix-free assembly.
void AddAbsMultPA(const Vector &, Vector &) const override
void AddMultPatchPA(const int patch, const Vector &x, Vector &y) const
static void AddSpecialization()
void AssembleNURBSPA(const FiniteElementSpace &fes) override
Method defining partial assembly on NURBS patches.
MFEM_REGISTER_KERNELS(DiagonalPAKernels, DiagonalKernelType,(int, int, int))
void AssemblePA(const FiniteElementSpace &fes) override
Method defining partial assembly.
void AddMultTransposePA(const Vector &, Vector &) const override
Method for partially assembled transposed action.
void AssembleDiagonalMF(Vector &diag) override
Assemble diagonal and add it to Vector diag.
void(*)(const int, const bool, const Array< real_t > &, const Array< real_t > &, const Array< real_t > &, const Array< real_t > &, const Vector &, const Vector &, Vector &, const int, const int) ApplyKernelType
void AssembleEA(const FiniteElementSpace &fes, Vector &emat, const bool add) override
Method defining element assembly.
Coefficient * GetCoefficient() const
for Raviart-Thomas elements
void AssembleElementMatrix(const FiniteElement &el, ElementTransformation &Trans, DenseMatrix &elmat) override
Given a particular Finite Element computes the element matrix elmat.
DivDivIntegrator(Coefficient &q, const IntegrationRule *ir=NULL)
void AddMultPA(const Vector &x, Vector &y) const override
Method for partially assembled action.
void AssembleElementMatrix2(const FiniteElement &trial_fe, const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &elmat) override
void AssembleEA(const FiniteElementSpace &fes, Vector &emat, const bool add) override
Method defining element assembly.
const Coefficient * GetCoefficient() const
void AssembleDiagonalPA(Vector &diag) override
Assemble diagonal and add it to Vector diag.
void AssemblePA(const FiniteElementSpace &fes) override
Method defining partial assembly.
void AssembleElementMatrix2(const FiniteElement &dom_fe, const FiniteElement &ran_fe, ElementTransformation &Trans, DenseMatrix &elmat) override
Structure representing the matrices/tensors needed to evaluate (in reference space) the values,...
Integrator that computes the PA action of one of the blocks in an ElasticityIntegrator,...
ElasticityComponentIntegrator(ElasticityIntegrator &parent_, int i_, int j_)
Given an ElasticityIntegrator, create an integrator that represents the th component block.
void AssemblePA(const FiniteElementSpace &fes) override
Method defining partial assembly.
void AddMultTransposePA(const Vector &x, Vector &y) const override
Method for partially assembled transposed action.
void AssembleEA(const FiniteElementSpace &fes, Vector &emat, const bool add=true) override
Method defining element assembly.
void AddMultPA(const Vector &x, Vector &y) const override
Method for partially assembled action.
ElasticityIntegrator(Coefficient &m, real_t q_l, real_t q_m)
void AddMultTransposePA(const Vector &x, Vector &y) const override
Method for partially assembled transposed action.
void ComputeElementFlux(const FiniteElement &el, ElementTransformation &Trans, Vector &u, const FiniteElement &fluxelem, Vector &flux, bool with_coef=true, const IntegrationRule *ir=NULL) override
void AddMultPA(const Vector &x, Vector &y) const override
Method for partially assembled action.
void AssemblePA(const FiniteElementSpace &fes) override
Method defining partial assembly.
real_t ComputeFluxEnergy(const FiniteElement &fluxelem, ElementTransformation &Trans, Vector &flux, Vector *d_energy=NULL) override
void AssembleElementMatrix(const FiniteElement &el, ElementTransformation &Tr, DenseMatrix &elmat) override
Given a particular Finite Element computes the element matrix elmat.
ElasticityIntegrator(Coefficient &l, Coefficient &m)
void AssembleDiagonalPA(Vector &diag) override
Assemble diagonal and add it to Vector diag.
Structure for storing face geometric factors: coordinates, Jacobians, determinants of the Jacobians,...
Class FiniteElementSpace - responsible for providing FEM view of the mesh, mainly managing the set of...
Abstract class for all finite elements.
virtual void CalcVShape(const IntegrationPoint &ip, DenseMatrix &shape) const
Evaluate the values of all shape functions of a vector finite element in reference space at the given...
virtual void ProjectDiv(const FiniteElement &fe, ElementTransformation &Trans, DenseMatrix &div) const
Compute the discrete divergence matrix from the given FiniteElement onto 'this' FiniteElement....
int GetRangeDim() const
Returns the vector dimension for vector-valued finite elements, which is also the dimension of the in...
int GetOrder() const
Returns the order of the finite element. In the case of anisotropic orders, returns the maximum order...
void CalcPhysDShape(ElementTransformation &Trans, DenseMatrix &dshape) const
Evaluate the gradients of all shape functions of a scalar finite element in physical space at the poi...
int GetDerivType() const
Returns the FiniteElement::DerivType of the element describing the spatial derivative method implemen...
virtual void ProjectGrad(const FiniteElement &fe, ElementTransformation &Trans, DenseMatrix &grad) const
Compute the discrete gradient matrix from the given FiniteElement onto 'this' FiniteElement....
int GetDim() const
Returns the reference space dimension for the finite element.
int GetRangeType() const
Returns the FiniteElement::RangeType of the element, one of {SCALAR, VECTOR}.
int Space() const
Returns the type of FunctionSpace on the element.
@ DIV
Implements CalcDivShape methods.
@ CURL
Implements CalcCurlShape methods.
@ GRAD
Implements CalcDShape methods.
virtual void Project(Coefficient &coeff, ElementTransformation &Trans, Vector &dofs) const
Given a coefficient and a transformation, compute its projection (approximation) in the local finite ...
void CalcPhysDivShape(ElementTransformation &Trans, Vector &divshape) const
Evaluate the divergence of all shape functions of a vector finite element in physical space at the po...
int GetCurlDim() const
Returns the dimension of the curl for vector-valued finite elements.
virtual void ProjectCurl(const FiniteElement &fe, ElementTransformation &Trans, DenseMatrix &curl) const
Compute the discrete curl matrix from the given FiniteElement onto 'this' FiniteElement....
virtual void CalcPhysCurlShape(ElementTransformation &Trans, DenseMatrix &curl_shape) const
Evaluate the curl of all shape functions of a vector finite element in physical space at the point de...
void CalcPhysShape(ElementTransformation &Trans, Vector &shape) const
Evaluate the values of all shape functions of a scalar finite element in physical space at the point ...
@ Pk
Polynomials of order k.
Structure for storing mesh geometric factors: coordinates, Jacobians, and determinants of the Jacobia...
GradientIntegrator(Coefficient *q_)
void AssembleElementMatrix2(const FiniteElement &trial_fe, const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &elmat) override
static const IntegrationRule & GetRule(const FiniteElement &trial_fe, const FiniteElement &test_fe, const ElementTransformation &Trans)
const IntegrationRule * GetDefaultIntegrationRule(const FiniteElement &trial_fe, const FiniteElement &test_fe, const ElementTransformation &trans) const override
Subclasses should override to choose a default integration rule.
GradientIntegrator(Coefficient &q)
void AddMultTransposePA(const Vector &x, Vector &y) const override
Method for partially assembled transposed action.
void AddMultPA(const Vector &x, Vector &y) const override
Method for partially assembled action.
void AssemblePA(const FiniteElementSpace &trial_fes, const FiniteElementSpace &test_fes) override
void AddMultPA(const Vector &x, Vector &y) const override
Method for partially assembled action.
void AddMultTransposePA(const Vector &x, Vector &y) const override
Method for partially assembled transposed action.
void AssemblePA(const FiniteElementSpace &trial_fes, const FiniteElementSpace &test_fes) override
Setup method for PA data.
void AssembleElementMatrix2(const FiniteElement &h1_fe, const FiniteElement &nd_fe, ElementTransformation &Trans, DenseMatrix &elmat) override
virtual ~GradientInterpolator()
using the "group" FE discretization
void AssembleElementMatrix(const FiniteElement &, ElementTransformation &, DenseMatrix &) override
Given a particular Finite Element computes the element matrix elmat.
GroupConvectionIntegrator(VectorCoefficient &q, real_t a=1.0)
IdentityInterpolator(int vdim_=1)
Construct an identity interpolator.
void AddMultTransposePA(const Vector &x, Vector &y) const override
Method for partially assembled transposed action.
void AddMultPA(const Vector &x, Vector &y) const override
Method for partially assembled action.
void AssemblePA(const FiniteElementSpace &trial_fes, const FiniteElementSpace &test_fes) override
void AssembleElementMatrix2(const FiniteElement &dom_fe, const FiniteElement &ran_fe, ElementTransformation &Trans, DenseMatrix &elmat) override
A class to initialize the size of a Tensor.
Class for an integration rule - an Array of IntegrationPoint.
Container class for integration rules.
Integrator that inverts the matrix assembled by another integrator.
InverseIntegrator(BilinearFormIntegrator *integ, int own_integ=1)
virtual ~InverseIntegrator()
void SetIntRule(const IntegrationRule *ir) override
Prescribe a fixed IntegrationRule to use, or set to null to let the integrator choose an appropriate ...
void AssembleElementMatrix(const FiniteElement &el, ElementTransformation &Trans, DenseMatrix &elmat) override
Given a particular Finite Element computes the element matrix elmat.
void SetIntRule(const IntegrationRule *ir) override
Prescribe a fixed IntegrationRule to use, or set to null to let the integrator choose an appropriate ...
LumpedIntegrator(BilinearFormIntegrator *bfi_, int own_bfi_=1)
void AssembleElementMatrix(const FiniteElement &el, ElementTransformation &Trans, DenseMatrix &elmat) override
Given a particular Finite Element computes the element matrix elmat.
virtual ~LumpedIntegrator()
const FiniteElementSpace * fespace
const FaceGeometricFactors * face_geom
Not owned.
MFEM_REGISTER_KERNELS(DiagonalPAKernels, DiagonalKernelType,(int, int, int))
void AddAbsMultPA(const Vector &, Vector &) const override
MFEM_REGISTER_KERNELS(ApplyPAKernels, ApplyKernelType,(int, int, int))
void AssembleDiagonalMF(Vector &diag) override
Assemble diagonal and add it to Vector diag.
const DofToQuad * maps
Not owned.
void(*)(const int, const Array< real_t > &, const Array< real_t > &, const Vector &, const Vector &, Vector &, const int, const int) ApplyKernelType
static const IntegrationRule & GetRule(const FiniteElement &trial_fe, const FiniteElement &test_fe, const ElementTransformation &Trans)
void AddMultPA(const Vector &, Vector &) const override
Method for partially assembled action.
void(*)(const int, const Array< real_t > &, const Vector &, Vector &, const int, const int) DiagonalKernelType
void AssembleEA_(Vector &ea, const bool add)
void AssemblePABoundary(const FiniteElementSpace &fes) override
void AssembleMF(const FiniteElementSpace &fes) override
Method defining matrix-free assembly.
void AssembleElementMatrix(const FiniteElement &el, ElementTransformation &Trans, DenseMatrix &elmat) override
const IntegrationRule * GetDefaultIntegrationRule(const FiniteElement &trial_fe, const FiniteElement &test_fe, const ElementTransformation &trans) const override
Subclasses should override to choose a default integration rule.
MassIntegrator(const IntegrationRule *ir=nullptr)
bool SupportsCeed() const override
Indicates whether this integrator can use a Ceed backend.
virtual void AssembleDiagonalPA(Vector &diag) override
Assemble diagonal and add it to Vector diag.
void AssembleEA(const FiniteElementSpace &fes, Vector &emat, const bool add) override
Method defining element assembly.
void AssemblePA(const FiniteElementSpace &fes) override
Method defining partial assembly.
void AssembleElementMatrix2(const FiniteElement &trial_fe, const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &elmat) override
const GeometricFactors * geom
Not owned.
virtual void AssembleEABoundary(const FiniteElementSpace &fes, Vector &emat, const bool add) override
void AddMultMF(const Vector &, Vector &) const override
void AddMultTransposePA(const Vector &, Vector &) const override
Method for partially assembled transposed action.
void AddAbsMultTransposePA(const Vector &, Vector &) const override
static void AddSpecialization()
const Coefficient * GetCoefficient() const
Base class for Matrix Coefficients that optionally depend on time and space.
virtual const char * FiniteElementTypeFailureMessage() const
virtual void CalcTestShape(const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &shape)
MixedCrossCurlCurlIntegrator(VectorCoefficient &vq)
virtual bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const
virtual int GetTrialVDim(const FiniteElement &trial_fe)
virtual void CalcTrialShape(const FiniteElement &trial_fe, ElementTransformation &Trans, DenseMatrix &shape)
virtual int GetTestVDim(const FiniteElement &test_fe)
virtual bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const
virtual void CalcTestShape(const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &shape)
MixedCrossCurlGradIntegrator(VectorCoefficient &vq)
virtual const char * FiniteElementTypeFailureMessage() const
virtual void CalcTrialShape(const FiniteElement &trial_fe, ElementTransformation &Trans, DenseMatrix &shape)
virtual int GetTestVDim(const FiniteElement &test_fe)
virtual int GetTrialVDim(const FiniteElement &trial_fe)
virtual const char * FiniteElementTypeFailureMessage() const
MixedCrossCurlIntegrator(VectorCoefficient &vq)
virtual bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const
virtual void CalcTrialShape(const FiniteElement &trial_fe, ElementTransformation &Trans, DenseMatrix &shape)
virtual int GetTrialVDim(const FiniteElement &trial_fe)
virtual int GetTestVDim(const FiniteElement &test_fe)
virtual const char * FiniteElementTypeFailureMessage() const
virtual void CalcTestShape(const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &shape)
virtual void CalcTrialShape(const FiniteElement &trial_fe, ElementTransformation &Trans, DenseMatrix &shape)
MixedCrossGradCurlIntegrator(VectorCoefficient &vq)
virtual int GetTrialVDim(const FiniteElement &trial_fe)
virtual bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const
MixedCrossGradGradIntegrator(VectorCoefficient &vq)
virtual int GetTrialVDim(const FiniteElement &trial_fe)
virtual int GetTestVDim(const FiniteElement &test_fe)
virtual void CalcTrialShape(const FiniteElement &trial_fe, ElementTransformation &Trans, DenseMatrix &shape)
virtual bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const
virtual const char * FiniteElementTypeFailureMessage() const
virtual void CalcTestShape(const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &shape)
virtual const char * FiniteElementTypeFailureMessage() const
virtual bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const
virtual int GetTrialVDim(const FiniteElement &trial_fe)
MixedCrossGradIntegrator(VectorCoefficient &vq)
virtual void CalcTestShape(const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &shape)
virtual void CalcTrialShape(const FiniteElement &trial_fe, ElementTransformation &Trans, DenseMatrix &shape)
MixedCrossProductIntegrator(VectorCoefficient &vq)
MixedCurlCurlIntegrator()
virtual int GetTestVDim(const FiniteElement &test_fe)
virtual void CalcTestShape(const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &shape)
virtual const char * FiniteElementTypeFailureMessage() const
virtual int GetTrialVDim(const FiniteElement &trial_fe)
virtual void CalcTrialShape(const FiniteElement &trial_fe, ElementTransformation &Trans, DenseMatrix &shape)
MixedCurlCurlIntegrator(MatrixCoefficient &mq)
MixedCurlCurlIntegrator(DiagonalMatrixCoefficient &dq)
MixedCurlCurlIntegrator(Coefficient &q)
virtual bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const
MixedCurlIntegrator(Coefficient &q)
MixedCurlIntegrator(Coefficient *q_)
void AssembleElementMatrix2(const FiniteElement &trial_fe, const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &elmat) override
virtual bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const
MixedDirectionalDerivativeIntegrator(VectorCoefficient &vq)
virtual const char * FiniteElementTypeFailureMessage() const
virtual void CalcVShape(const FiniteElement &vector_fe, ElementTransformation &Trans, DenseMatrix &shape)
virtual int GetVDim(const FiniteElement &vector_fe)
virtual void CalcVShape(const FiniteElement &vector_fe, ElementTransformation &Trans, DenseMatrix &shape)
MixedDivGradIntegrator(VectorCoefficient &vq)
virtual bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const
virtual const char * FiniteElementTypeFailureMessage() const
virtual int GetVDim(const FiniteElement &vector_fe)
virtual void CalcShape(const FiniteElement &scalar_fe, ElementTransformation &Trans, Vector &shape)
virtual bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const
MixedDotProductIntegrator(VectorCoefficient &vq)
virtual const char * FiniteElementTypeFailureMessage() const
MixedGradDivIntegrator(VectorCoefficient &vq)
virtual void CalcVShape(const FiniteElement &vector_fe, ElementTransformation &Trans, DenseMatrix &shape)
virtual bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const
virtual int GetVDim(const FiniteElement &vector_fe)
virtual void CalcShape(const FiniteElement &scalar_fe, ElementTransformation &Trans, Vector &shape)
virtual const char * FiniteElementTypeFailureMessage() const
virtual const char * FiniteElementTypeFailureMessage() const
virtual int GetTrialVDim(const FiniteElement &trial_fe)
MixedGradGradIntegrator()
virtual bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const
MixedGradGradIntegrator(DiagonalMatrixCoefficient &dq)
virtual void CalcTrialShape(const FiniteElement &trial_fe, ElementTransformation &Trans, DenseMatrix &shape)
MixedGradGradIntegrator(Coefficient &q)
virtual void CalcTestShape(const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &shape)
virtual int GetTestVDim(const FiniteElement &test_fe)
MixedGradGradIntegrator(MatrixCoefficient &mq)
virtual int GetIntegrationOrder(const FiniteElement &trial_fe, const FiniteElement &test_fe, ElementTransformation &Trans)
MixedScalarCrossCurlIntegrator(VectorCoefficient &vq)
virtual const char * FiniteElementTypeFailureMessage() const
virtual bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const
virtual void CalcShape(const FiniteElement &scalar_fe, ElementTransformation &Trans, Vector &shape)
virtual bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const
MixedScalarCrossGradIntegrator(VectorCoefficient &vq)
virtual const char * FiniteElementTypeFailureMessage() const
int GetVDim(const FiniteElement &vector_fe)
virtual void CalcVShape(const FiniteElement &vector_fe, ElementTransformation &Trans, DenseMatrix &shape)
virtual bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const
virtual const char * FiniteElementTypeFailureMessage() const
MixedScalarCrossProductIntegrator(VectorCoefficient &vq)
const DofToQuad * mapsO
Not owned. DOF-to-quad map, open.
const DofToQuad * mapsC
Not owned. DOF-to-quad map, closed.
MixedScalarCurlIntegrator()
const char * FiniteElementTypeFailureMessage() const override
bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const override
MixedScalarCurlIntegrator(Coefficient &q)
int GetIntegrationOrder(const FiniteElement &trial_fe, const FiniteElement &test_fe, ElementTransformation &Trans) override
void AddMultTransposePA(const Vector &x, Vector &y) const override
Method for partially assembled transposed action.
void AssemblePA(const FiniteElementSpace &trial_fes, const FiniteElementSpace &test_fes) override
void AddMultPA(const Vector &, Vector &) const override
Method for partially assembled action.
void CalcTrialShape(const FiniteElement &trial_fe, ElementTransformation &Trans, Vector &shape) override
MixedScalarDerivativeIntegrator(Coefficient &q)
virtual const char * FiniteElementTypeFailureMessage() const
MixedScalarDerivativeIntegrator()
virtual void CalcTrialShape(const FiniteElement &trial_fe, ElementTransformation &Trans, Vector &shape)
virtual bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const
virtual const char * FiniteElementTypeFailureMessage() const
MixedScalarDivergenceIntegrator()
MixedScalarDivergenceIntegrator(Coefficient &q)
virtual bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const
virtual int GetIntegrationOrder(const FiniteElement &trial_fe, const FiniteElement &test_fe, ElementTransformation &Trans)
virtual void CalcTrialShape(const FiniteElement &trial_fe, ElementTransformation &Trans, Vector &shape)
virtual const char * FiniteElementTypeFailureMessage() const
virtual bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const
void AssembleElementMatrix2(const FiniteElement &trial_fe, const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &elmat) override
virtual void CalcTestShape(const FiniteElement &test_fe, ElementTransformation &Trans, Vector &shape)
void AssembleElementMatrix(const FiniteElement &fe, ElementTransformation &Trans, DenseMatrix &elmat) override
Support for use in BilinearForm. Can be used only when appropriate.
virtual void CalcTrialShape(const FiniteElement &trial_fe, ElementTransformation &Trans, Vector &shape)
MixedScalarIntegrator(Coefficient &q)
virtual int GetIntegrationOrder(const FiniteElement &trial_fe, const FiniteElement &test_fe, ElementTransformation &Trans)
MixedScalarMassIntegrator()
MixedScalarMassIntegrator(Coefficient &q)
virtual int GetIntegrationOrder(const FiniteElement &trial_fe, const FiniteElement &test_fe, ElementTransformation &Trans)
virtual const char * FiniteElementTypeFailureMessage() const
virtual bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const
MixedScalarVectorIntegrator(VectorCoefficient &vq, bool transpose_=false, bool cross_2d_=false)
virtual void CalcVShape(const FiniteElement &vector_fe, ElementTransformation &Trans, DenseMatrix &shape_)
void AssembleElementMatrix(const FiniteElement &fe, ElementTransformation &Trans, DenseMatrix &elmat) override
Support for use in BilinearForm. Can be used only when appropriate.
virtual int GetVDim(const FiniteElement &vector_fe)
void AssembleElementMatrix2(const FiniteElement &trial_fe, const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &elmat) override
virtual void CalcShape(const FiniteElement &scalar_fe, ElementTransformation &Trans, Vector &shape_)
MixedScalarWeakCrossProductIntegrator(VectorCoefficient &vq)
virtual const char * FiniteElementTypeFailureMessage() const
virtual void CalcShape(const FiniteElement &scalar_fe, ElementTransformation &Trans, Vector &shape)
virtual bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const
virtual void CalcShape(const FiniteElement &scalar_fe, ElementTransformation &Trans, Vector &shape)
virtual const char * FiniteElementTypeFailureMessage() const
virtual bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const
MixedScalarWeakCurlCrossIntegrator(VectorCoefficient &vq)
MixedScalarWeakCurlIntegrator()
virtual const char * FiniteElementTypeFailureMessage() const
virtual void CalcTestShape(const FiniteElement &test_fe, ElementTransformation &Trans, Vector &shape)
virtual bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const
MixedScalarWeakCurlIntegrator(Coefficient &q)
MixedScalarWeakDerivativeIntegrator(Coefficient &q)
virtual void CalcTestShape(const FiniteElement &test_fe, ElementTransformation &Trans, Vector &shape)
virtual bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const
virtual const char * FiniteElementTypeFailureMessage() const
MixedScalarWeakDerivativeIntegrator()
MixedScalarWeakDivergenceIntegrator(VectorCoefficient &vq)
virtual bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const
virtual const char * FiniteElementTypeFailureMessage() const
int GetVDim(const FiniteElement &vector_fe)
virtual void CalcVShape(const FiniteElement &vector_fe, ElementTransformation &Trans, DenseMatrix &shape)
virtual void CalcTestShape(const FiniteElement &test_fe, ElementTransformation &Trans, Vector &shape)
virtual int GetIntegrationOrder(const FiniteElement &trial_fe, const FiniteElement &test_fe, ElementTransformation &Trans)
virtual bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const
virtual const char * FiniteElementTypeFailureMessage() const
MixedScalarWeakGradientIntegrator()
MixedScalarWeakGradientIntegrator(Coefficient &q)
void AddMultTransposePA(const Vector &, Vector &) const override
Method for partially assembled transposed action.
void AddMultPA(const Vector &, Vector &) const override
Method for partially assembled action.
int GetTrialVDim(const FiniteElement &trial_fe) override
MixedVectorCurlIntegrator(Coefficient &q)
void CalcTrialShape(const FiniteElement &trial_fe, ElementTransformation &Trans, DenseMatrix &shape) override
const char * FiniteElementTypeFailureMessage() const override
MixedVectorCurlIntegrator(DiagonalMatrixCoefficient &dq)
bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const override
void AssemblePA(const FiniteElementSpace &trial_fes, const FiniteElementSpace &test_fes) override
MixedVectorCurlIntegrator(MatrixCoefficient &mq)
MixedVectorCurlIntegrator()
virtual bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const
virtual int GetIntegrationOrder(const FiniteElement &trial_fe, const FiniteElement &test_fe, ElementTransformation &Trans)
virtual void CalcShape(const FiniteElement &scalar_fe, ElementTransformation &Trans, Vector &shape)
MixedVectorDivergenceIntegrator(VectorCoefficient &vq)
virtual const char * FiniteElementTypeFailureMessage() const
const char * FiniteElementTypeFailureMessage() const override
MixedVectorGradientIntegrator(Coefficient &q)
void AddMultPA(const Vector &, Vector &) const override
Method for partially assembled action.
void AssemblePA(const FiniteElementSpace &trial_fes, const FiniteElementSpace &test_fes) override
bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const override
MixedVectorGradientIntegrator(MatrixCoefficient &mq)
MixedVectorGradientIntegrator(DiagonalMatrixCoefficient &dq)
void AddMultTransposePA(const Vector &, Vector &) const override
Method for partially assembled transposed action.
MixedVectorGradientIntegrator()
int GetTrialVDim(const FiniteElement &trial_fe) override
void CalcTrialShape(const FiniteElement &trial_fe, ElementTransformation &Trans, DenseMatrix &shape) override
void AssembleElementMatrix2(const FiniteElement &trial_fe, const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &elmat) override
virtual const char * FiniteElementTypeFailureMessage() const
void AssembleElementMatrix(const FiniteElement &fe, ElementTransformation &Trans, DenseMatrix &elmat) override
Support for use in BilinearForm. Can be used only when appropriate.
MixedVectorIntegrator(VectorCoefficient &vq, bool diag=true)
virtual int GetIntegrationOrder(const FiniteElement &trial_fe, const FiniteElement &test_fe, ElementTransformation &Trans)
virtual int GetTestVDim(const FiniteElement &test_fe)
virtual void CalcTestShape(const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &shape)
virtual int GetTrialVDim(const FiniteElement &trial_fe)
MixedVectorIntegrator(Coefficient &q)
virtual bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const
virtual void CalcTrialShape(const FiniteElement &trial_fe, ElementTransformation &Trans, DenseMatrix &shape)
DiagonalMatrixCoefficient * DQ
MixedVectorIntegrator(MatrixCoefficient &mq)
MixedVectorMassIntegrator(Coefficient &q)
MixedVectorMassIntegrator(DiagonalMatrixCoefficient &dq)
MixedVectorMassIntegrator()
MixedVectorMassIntegrator(MatrixCoefficient &mq)
MixedVectorProductIntegrator(VectorCoefficient &vq)
void AddMultPA(const Vector &, Vector &) const override
Method for partially assembled action.
MixedVectorWeakCurlIntegrator()
int GetTestVDim(const FiniteElement &test_fe) override
void AddMultTransposePA(const Vector &, Vector &) const override
Method for partially assembled transposed action.
MixedVectorWeakCurlIntegrator(DiagonalMatrixCoefficient &dq)
bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const override
MixedVectorWeakCurlIntegrator(MatrixCoefficient &mq)
const char * FiniteElementTypeFailureMessage() const override
MixedVectorWeakCurlIntegrator(Coefficient &q)
void CalcTestShape(const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &shape) override
void AssemblePA(const FiniteElementSpace &trial_fes, const FiniteElementSpace &test_fes) override
virtual int GetTestVDim(const FiniteElement &test_fe)
MixedVectorWeakDivergenceIntegrator(Coefficient &q)
MixedVectorWeakDivergenceIntegrator()
virtual void CalcTestShape(const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &shape)
MixedVectorWeakDivergenceIntegrator(DiagonalMatrixCoefficient &dq)
virtual bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const
virtual const char * FiniteElementTypeFailureMessage() const
MixedVectorWeakDivergenceIntegrator(MatrixCoefficient &mq)
virtual int GetTestVDim(const FiniteElement &test_fe)
virtual void CalcTestShape(const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &shape)
virtual bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const
virtual const char * FiniteElementTypeFailureMessage() const
MixedWeakCurlCrossIntegrator(VectorCoefficient &vq)
MixedWeakDivCrossIntegrator(VectorCoefficient &vq)
virtual const char * FiniteElementTypeFailureMessage() const
virtual bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const
virtual void CalcTestShape(const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &shape)
virtual int GetTestVDim(const FiniteElement &test_fe)
MixedWeakGradDotIntegrator(VectorCoefficient &vq)
virtual void CalcShape(const FiniteElement &scalar_fe, ElementTransformation &Trans, Vector &shape)
virtual const char * FiniteElementTypeFailureMessage() const
virtual int GetIntegrationOrder(const FiniteElement &trial_fe, const FiniteElement &test_fe, ElementTransformation &Trans)
virtual bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const
NonconservativeDGTraceIntegrator(VectorCoefficient &u, real_t a, real_t b)
NonconservativeDGTraceIntegrator(Coefficient &rho, VectorCoefficient &u, real_t a, real_t b)
NonconservativeDGTraceIntegrator(VectorCoefficient &u, real_t a)
void AssembleElementMatrix2(const FiniteElement &dom_fe, const FiniteElement &ran_fe, ElementTransformation &Trans, DenseMatrix &elmat) override
void AssembleTraceFaceMatrix(int ielem, const FiniteElement &trial_face_fe, const FiniteElement &test_fe, FaceElementTransformations &Trans, DenseMatrix &elmat) override
void AssembleFaceMatrix(const FiniteElement &trial_face_fe, const FiniteElement &test_fe1, const FiniteElement &test_fe2, FaceElementTransformations &Trans, DenseMatrix &elmat) override
NormalTraceJumpIntegrator()
void AssembleEAInteriorFaces(const FiniteElementSpace &trial_fes, const FiniteElementSpace &test_fes, Vector &emat, const bool add=true) override
Method defining element assembly for mixed trace integrators.
int Height() const
Get the height (size of output) of the Operator. Synonym with NumRows().
int Width() const
Get the width (size of input) of the Operator. Synonym with NumCols().
void AssembleElementMatrix2(const FiniteElement &nd_fe, const FiniteElement &l2_fe, ElementTransformation &Trans, DenseMatrix &elmat) override
ScalarCrossProductInterpolator(VectorCoefficient &vc)
void AssembleElementMatrix2(const FiniteElement &dom_fe, const FiniteElement &ran_fe, ElementTransformation &Trans, DenseMatrix &elmat) override
ScalarProductInterpolator(Coefficient &sc)
ScalarVectorProductInterpolator(Coefficient &sc)
void AssembleElementMatrix2(const FiniteElement &dom_fe, const FiniteElement &ran_fe, ElementTransformation &Trans, DenseMatrix &elmat) override
Integrator defining a sum of multiple Integrators.
void AssembleEABoundaryFaces(const FiniteElementSpace &fes, Vector &ea_data_bdr, const bool add) override
void AddMultTransposePA(const Vector &x, Vector &y) const override
Method for partially assembled transposed action.
void SetIntRule(const IntegrationRule *ir) override
Prescribe a fixed IntegrationRule to use, or set to null to let the integrator choose an appropriate ...
void AddAbsMultTransposePA(const Vector &x, Vector &y) const override
void AddIntegrator(BilinearFormIntegrator *integ)
void AssembleMF(const FiniteElementSpace &fes) override
Method defining matrix-free assembly.
void AddMultMF(const Vector &x, Vector &y) const override
void AssembleEAInteriorFaces(const FiniteElementSpace &fes, Vector &ea_data_int, Vector &ea_data_ext, const bool add) override
void AssembleEA(const FiniteElementSpace &fes, Vector &emat, const bool add) override
Method defining element assembly.
void AssembleDiagonalPA(Vector &diag) override
Assemble diagonal and add it to Vector diag.
void AddMultPA(const Vector &x, Vector &y) const override
Method for partially assembled action.
void AssemblePA(const FiniteElementSpace &fes) override
Method defining partial assembly.
void AssembleElementMatrix2(const FiniteElement &trial_fe, const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &elmat) override
void AssembleFaceMatrix(const FiniteElement &el1, const FiniteElement &el2, FaceElementTransformations &Trans, DenseMatrix &elmat) override
void AssembleDiagonalMF(Vector &diag) override
Assemble diagonal and add it to Vector diag.
void AddAbsMultPA(const Vector &x, Vector &y) const override
void AssembleElementMatrix(const FiniteElement &el, ElementTransformation &Trans, DenseMatrix &elmat) override
Given a particular Finite Element computes the element matrix elmat.
void AssemblePABoundaryFaces(const FiniteElementSpace &fes) override
void AddMultTransposeMF(const Vector &x, Vector &y) const override
SumIntegrator(int own_integs=1)
void AssemblePAInteriorFaces(const FiniteElementSpace &fes) override
void AssembleTraceFaceMatrix(int elem, const FiniteElement &trial_face_fe, const FiniteElement &test_fe, FaceElementTransformations &Trans, DenseMatrix &elmat)
void AssembleTraceFaceMatrix(int elem, const FiniteElement &trial_face_fe, const FiniteElement &test_fe, FaceElementTransformations &Trans, DenseMatrix &elmat)
void AssembleFaceMatrix(const FiniteElement &trial_face_fe, const FiniteElement &test_fe1, const FiniteElement &test_fe2, FaceElementTransformations &Trans, DenseMatrix &elmat) override
void AssembleFaceMatrix(const FiniteElement &el1, const FiniteElement &el2, FaceElementTransformations &Trans, DenseMatrix &elmat) override
void SetIntRule(const IntegrationRule *ir) override
Prescribe a fixed IntegrationRule to use, or set to null to let the integrator choose an appropriate ...
void AssemblePA(const FiniteElementSpace &fes) override
Method defining partial assembly.
void AssembleElementMatrix(const FiniteElement &el, ElementTransformation &Trans, DenseMatrix &elmat) override
Given a particular Finite Element computes the element matrix elmat.
void AddMultTransposePA(const Vector &x, Vector &y) const override
Method for partially assembled transposed action.
TransposeIntegrator(BilinearFormIntegrator *bfi_, int own_bfi_=1)
void AssemblePA(const FiniteElementSpace &trial_fes, const FiniteElementSpace &test_fes) override
void AssemblePABoundaryFaces(const FiniteElementSpace &fes) override
void AssembleEABoundaryFaces(const FiniteElementSpace &fes, Vector &ea_data_bdr, const bool add) override
void AddMultPA(const Vector &x, Vector &y) const override
Method for partially assembled action.
void AssembleElementMatrix2(const FiniteElement &trial_fe, const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &elmat) override
void AssemblePAInteriorFaces(const FiniteElementSpace &fes) override
virtual ~TransposeIntegrator()
void AssembleEA(const FiniteElementSpace &fes, Vector &emat, const bool add) override
Method defining element assembly.
void AssembleEAInteriorFaces(const FiniteElementSpace &fes, Vector &ea_data_int, Vector &ea_data_ext, const bool add) override
Base class for vector Coefficients that optionally depend on time and space.
void AssembleElementMatrix2(const FiniteElement &nd_fe, const FiniteElement &rt_fe, ElementTransformation &Trans, DenseMatrix &elmat) override
VectorCrossProductInterpolator(VectorCoefficient &vc)
VectorCurlCurlIntegrator(Coefficient &q)
void AssembleElementMatrix(const FiniteElement &el, ElementTransformation &Trans, DenseMatrix &elmat) override
Assemble an element matrix.
VectorCurlCurlIntegrator()
real_t GetElementEnergy(const FiniteElement &el, ElementTransformation &Tr, const Vector &elfun) override
Compute element energy: .
void AssembleElementMatrix(const FiniteElement &el, ElementTransformation &Trans, DenseMatrix &elmat) override
Given a particular Finite Element computes the element matrix elmat.
void AssemblePA(const FiniteElementSpace &fes) override
Method defining partial assembly.
const DofToQuad * maps
Not owned.
void AssembleMF(const FiniteElementSpace &fes) override
Method defining matrix-free assembly.
void AssembleDiagonalMF(Vector &diag) override
Assemble diagonal and add it to Vector diag.
VectorDiffusionIntegrator(const IntegrationRule *ir=nullptr)
void AssembleElementVector(const FiniteElement &el, ElementTransformation &Tr, const Vector &elfun, Vector &elvect) override
Perform the local action of the BilinearFormIntegrator. Note that the default implementation in the b...
MFEM_REGISTER_KERNELS(ApplyPAKernels, ApplyKernelType,(int, int, int, int))
arguments: dim, vdim, d1d, q1d
void(*)(const int, const int, const Array< real_t > &, const Array< real_t > &, const Vector &, const Vector &, Vector &, const int, const int, const int) ApplyKernelType
arguments: ne, coeff_vdim, B, G, pa_data, x, y, d1d, q1d, vdim
void AddMultPA(const Vector &x, Vector &y) const override
Method for partially assembled action.
void AddMultMF(const Vector &x, Vector &y) const override
const GeometricFactors * geom
Not owned.
bool SupportsCeed() const override
Indicates whether this integrator can use a Ceed backend.
static void AddSpecialization()
void AssembleDiagonalPA(Vector &diag) override
Assemble diagonal and add it to Vector diag.
void AssemblePA(const FiniteElementSpace &trial_fes, const FiniteElementSpace &test_fes) override
const IntegrationRule * GetDefaultIntegrationRule(const FiniteElement &trial_fe, const FiniteElement &test_fe, const ElementTransformation &trans) const override
Subclasses should override to choose a default integration rule.
void AddMultTransposePA(const Vector &x, Vector &y) const override
Method for partially assembled transposed action.
static const IntegrationRule & GetRule(const FiniteElement &trial_fe, const FiniteElement &test_fe, const ElementTransformation &Trans)
VectorDivergenceIntegrator(Coefficient &q)
VectorDivergenceIntegrator()
void AddMultPA(const Vector &x, Vector &y) const override
Method for partially assembled action.
void AssembleElementMatrix2(const FiniteElement &trial_fe, const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &elmat) override
VectorDivergenceIntegrator(Coefficient *q_)
Integrator for (Q u.n, v.n) for RT elements.
void AssembleElementMatrix2(const FiniteElement &trial_fe, const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &elmat) override
void AssembleElementMatrix(const FiniteElement &el, ElementTransformation &Trans, DenseMatrix &elmat) override
Given a particular Finite Element computes the element matrix elmat.
VectorFEBoundaryFluxIntegrator(Coefficient &q)
VectorFEBoundaryFluxIntegrator()
VectorFECurlIntegrator(Coefficient &q)
void AssembleElementMatrix(const FiniteElement &el, ElementTransformation &Trans, DenseMatrix &elmat) override
Given a particular Finite Element computes the element matrix elmat.
void AssembleElementMatrix2(const FiniteElement &trial_fe, const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &elmat) override
void AddMultPA(const Vector &, Vector &) const override
Method for partially assembled action.
void AssembleElementMatrix2(const FiniteElement &trial_fe, const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &elmat) override
VectorFEDivergenceIntegrator(Coefficient &q)
void AddMultTransposePA(const Vector &, Vector &) const override
Method for partially assembled transposed action.
VectorFEDivergenceIntegrator()
void AssemblePA(const FiniteElementSpace &trial_fes, const FiniteElementSpace &test_fes) override
void AssembleElementMatrix(const FiniteElement &el, ElementTransformation &Trans, DenseMatrix &elmat) override
Given a particular Finite Element computes the element matrix elmat.
void AssembleDiagonalPA_ADAt(const Vector &D, Vector &diag) override
Assemble diagonal of ( is this integrator) and add it to diag.
void AddMultPA(const Vector &x, Vector &y) const override
Method for partially assembled action.
VectorFEMassIntegrator(DiagonalMatrixCoefficient *dq_)
void AssembleDiagonalPA(Vector &diag) override
Assemble diagonal and add it to Vector diag.
const Coefficient * GetCoefficient() const
VectorFEMassIntegrator(MatrixCoefficient &mq)
void AssembleElementMatrix(const FiniteElement &el, ElementTransformation &Trans, DenseMatrix &elmat) override
Given a particular Finite Element computes the element matrix elmat.
VectorFEMassIntegrator(MatrixCoefficient *mq_)
void AssembleElementMatrix2(const FiniteElement &trial_fe, const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &elmat) override
void AddAbsMultPA(const Vector &x, Vector &y) const override
VectorFEMassIntegrator(Coefficient *q_)
const DofToQuad * mapsO
Not owned. DOF-to-quad map, open.
void AssembleEA(const FiniteElementSpace &fes, Vector &emat, const bool add) override
Method defining element assembly.
const DofToQuad * mapsOtest
Not owned. DOF-to-quad map, open.
VectorFEMassIntegrator(DiagonalMatrixCoefficient &dq)
VectorFEMassIntegrator(Coefficient &q)
void AssemblePA(const FiniteElementSpace &fes) override
Method defining partial assembly.
bool symmetric
False if using a nonsymmetric matrix coefficient.
void AddMultTransposePA(const Vector &x, Vector &y) const override
Method for partially assembled transposed action.
DiagonalMatrixCoefficient * DQ
const DofToQuad * mapsCtest
Not owned. DOF-to-quad map, closed.
const GeometricFactors * geom
Not owned.
const DofToQuad * mapsC
Not owned. DOF-to-quad map, closed.
VectorFEWeakDivergenceIntegrator()
VectorFEWeakDivergenceIntegrator(Coefficient &q)
void AssembleElementMatrix(const FiniteElement &el, ElementTransformation &Trans, DenseMatrix &elmat) override
Given a particular Finite Element computes the element matrix elmat.
void AssembleElementMatrix2(const FiniteElement &trial_fe, const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &elmat) override
Class identical to IdentityInterpolator with the exception that it requires the vector dimension (num...
VectorIdentityInterpolator(int vdim_)
void AssembleElementMatrix2(const FiniteElement &rt_fe, const FiniteElement &l2_fe, ElementTransformation &Trans, DenseMatrix &elmat) override
VectorInnerProductInterpolator(VectorCoefficient &vc)
void AssembleMF(const FiniteElementSpace &fes) override
Method defining matrix-free assembly.
void AssembleDiagonalPA(Vector &diag) override
Assemble diagonal and add it to Vector diag.
MFEM_REGISTER_KERNELS(VectorMassAddMultPA, VectorMassAddMultPAType,(int, int, int))
void AddMultMF(const Vector &x, Vector &y) const override
const DofToQuad * maps
Not owned.
VectorMassIntegrator(VectorCoefficient &q, int qo=0)
Construct an integrator with diagonal coefficient q.
VectorMassIntegrator(Coefficient &q, int qo=0)
void AddMultPA(const Vector &x, Vector &y) const override
Method for partially assembled action.
void AssembleDiagonalMF(Vector &diag) override
Assemble diagonal and add it to Vector diag.
void AssembleElementMatrix2(const FiniteElement &trial_fe, const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &elmat) override
VectorMassIntegrator()=default
Construct an integrator with coefficient 1.0.
VectorMassIntegrator(MatrixCoefficient &q, int qo=0)
Construct an integrator with matrix coefficient q.
void AssemblePA(const FiniteElementSpace &fes) override
Method defining partial assembly.
VectorMassIntegrator(Coefficient &q, const IntegrationRule *ir)
const GeometricFactors * geom
Not owned.
void AssembleElementMatrix(const FiniteElement &el, ElementTransformation &Trans, DenseMatrix &elmat) override
Given a particular Finite Element computes the element matrix elmat.
void(*)(const int, const int, const Array< real_t > &, const Vector &, const Vector &, Vector &, const int, const int) VectorMassAddMultPAType
bool SupportsCeed() const override
Indicates whether this integrator can use a Ceed backend.
VectorScalarProductInterpolator(VectorCoefficient &vc)
void AssembleElementMatrix2(const FiniteElement &dom_fe, const FiniteElement &ran_fe, ElementTransformation &Trans, DenseMatrix &elmat) override
int Size() const
Returns the size of the vector.
real_t * GetData() const
Return a pointer to the beginning of the Vector data.
void trans(const Vector &u, Vector &x)
real_t u(const Vector &xvec)
void add(const Vector &v1, const Vector &v2, Vector &v)
bool DeviceCanUseCeed()
Function that determines if a CEED kernel should be used, based on the current mfem::Device configura...