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 "
976 return "MixedScalarWeakGradientIntegrator: "
977 "Trial space must be a scalar field "
978 "and the test space must be H(Div)";
1015 return (trial_fe.
GetDim() == 2 && test_fe.
GetDim() == 2 &&
1022 return "MixedScalarCurlIntegrator: "
1023 "Trial must be H(Curl) and the test space must be a "
1071 return (trial_fe.
GetDim() == 2 && test_fe.
GetDim() == 2 &&
1078 return "MixedScalarWeakCurlIntegrator: "
1079 "Trial space must be a scalar field "
1080 "and the test space must be H(Curl)";
1135 return "MixedDotProductIntegrator: "
1136 "Trial space must be a vector field "
1137 "and the test space must be a scalar field";
1153 int dim = 0, ne = 0, dofs1D = 0, dofs1Dtest = 0, quad1D = 0;
1154 bool test_map_integral =
false;
1177 return "MixedWeakGradDotIntegrator: "
1178 "Trial space must be a vector field "
1179 "and the test space must be a vector field with a divergence";
1215 return "MixedWeakDivCrossIntegrator: "
1216 "Trial space must be a vector field in 3D "
1217 "and the test space must be a scalar field with a gradient";
1255 return "MixedGradGradIntegrator: "
1256 "Trial and test spaces must both be scalar fields "
1257 "with a gradient operator.";
1307 return "MixedCrossGradGradIntegrator: "
1308 "Trial and test spaces must both be scalar fields "
1309 "with a gradient operator.";
1356 return "MixedCurlCurlIntegrator"
1357 "Trial and test spaces must both be vector fields in 3D "
1400 return "MixedCrossCurlCurlIntegrator: "
1401 "Trial and test spaces must both be vector fields in 3D "
1443 return "MixedCrossCurlGradIntegrator"
1444 "Trial space must be a vector field in 3D with a curl"
1445 "and the test space must be a scalar field with a gradient";
1486 return "MixedCrossGradCurlIntegrator"
1487 "Trial space must be a scalar field in 3D with a gradient"
1488 "and the test space must be a vector field with a curl";
1529 return "MixedWeakCurlCrossIntegrator: "
1530 "Trial space must be a vector field in 3D "
1531 "and the test space must be a vector field with a curl";
1556 return (trial_fe.
GetDim() == 2 && test_fe.
GetDim() == 2 &&
1564 return "MixedScalarWeakCurlCrossIntegrator: "
1565 "Trial space must be a vector field in 2D "
1566 "and the test space must be a vector field with a curl";
1599 return "MixedCrossGradIntegrator: "
1600 "Trial space must be a scalar field with a gradient operator"
1601 " and the test space must be a vector field both in 3D.";
1639 return "MixedCrossCurlIntegrator: "
1640 "Trial space must be a vector field in 3D with a curl "
1641 "and the test space must be a vector field";
1666 return (trial_fe.
GetDim() == 2 && test_fe.
GetDim() == 2 &&
1674 return "MixedCrossCurlIntegrator: "
1675 "Trial space must be a vector field in 2D with a curl "
1676 "and the test space must be a vector field";
1700 return (trial_fe.
GetDim() == 2 && test_fe.
GetDim() == 2 &&
1708 return "MixedScalarCrossGradIntegrator: "
1709 "Trial space must be a scalar field in 2D with a gradient "
1710 "and the test space must be a scalar field";
1741 return (trial_fe.
GetDim() == 2 && test_fe.
GetDim() == 2 &&
1748 return "MixedScalarCrossProductIntegrator: "
1749 "Trial space must be a vector field in 2D "
1750 "and the test space must be a scalar field";
1759 int dim = 0, ne = 0, dofs1D = 0, dofs1Dtest = 0, quad1D = 0;
1760 bool test_map_integral =
false;
1787 return (trial_fe.
GetDim() == 2 && test_fe.
GetDim() == 2 &&
1794 return "MixedScalarWeakCrossProductIntegrator: "
1795 "Trial space must be a scalar field in 2D "
1796 "and the test space must be a vector field";
1810 int dim = 0, ne = 0, dofs1D = 0, dofs1Dtrial = 0, quad1D = 0;
1811 bool trial_map_integral =
false;
1833 return "MixedDirectionalDerivativeIntegrator: "
1834 "Trial space must be a scalar field with a gradient "
1835 "and the test space must be a scalar field";
1867 return "MixedGradDivIntegrator: "
1868 "Trial space must be a scalar field with a gradient"
1869 "and the test space must be a vector field with a divergence";
1907 return "MixedDivGradIntegrator: "
1908 "Trial space must be a vector field with a divergence"
1909 "and the test space must be a scalar field with a gradient";
1945 return "MixedScalarWeakDivergenceIntegrator: "
1946 "Trial space must be a scalar field "
1947 "and the test space must be a scalar field with a gradient";
1987 return "MixedVectorGradientIntegrator: "
1988 "Trial spaces must be $H^1$ and the test space must be a "
1989 "vector field in 2D or 3D";
2017 int dim, ne, dofs1D, quad1D;
2049 return "MixedVectorCurlIntegrator: "
2050 "Trial space must be H(Curl) and the test space must be a "
2051 "vector field in 3D";
2079 int dim, ne, dofs1D, dofs1Dtest,quad1D, testType, trialType, coeffDim;
2108 return "MixedVectorWeakCurlIntegrator: "
2109 "Trial space must be vector field in 3D and the "
2110 "test space must be H(Curl)";
2136 int dim, ne, dofs1D, quad1D, testType, trialType, coeffDim;
2164 return "MixedVectorWeakDivergenceIntegrator: "
2165 "Trial space must be vector field and the "
2166 "test space must be H1";
2199 const DofToQuad *trial_maps, *test_maps;
2202 int trial_dofs1D, test_dofs1D, quad1D;
2206 Q{NULL}, trial_maps{NULL}, test_maps{NULL}, geom{NULL}
2209 Q{q_}, trial_maps{NULL}, test_maps{NULL}, geom{NULL}
2212 Q{&q}, trial_maps{NULL}, test_maps{NULL}, geom{NULL}
2250 Vector&,
const int,
const int);
2259 Vector&,
const int,
const int);
2263 const int,
const int);
2277 Vector vec, vecdxt, pointflux, shape;
2278#ifndef MFEM_THREAD_SAFE
2279 DenseMatrix dshape, dshapedxt, invdfdx, M, dshapedxt_m;
2288 int dim, ne, dofs1D, quad1D;
2290 bool symmetric =
true;
2296 typedef std::vector<std::vector<int>> IntArrayVar2D;
2299 static constexpr int numTypes = 2;
2321 std::vector<std::vector<Vector>> reducedWeights;
2322 std::vector<IntArrayVar2D> reducedIDs;
2323 std::vector<Array<int>> pQ1D, pD1D;
2324 std::vector<std::vector<Array2D<real_t>>> pB, pG;
2325 std::vector<IntArrayVar2D> pminD, pmaxD, pminQ, pmaxQ, pminDD, pmaxDD;
2327 std::vector<Array<const IntegrationRule*>> pir1d;
2329 void SetupPatchPA(
const int patch,
Mesh *mesh,
bool unitWeights=
false);
2331 void SetupPatchBasisData(
Mesh *mesh,
unsigned int patch);
2335 void AssemblePatchMatrix_fullQuadrature(
const int patch,
2341 void AssemblePatchMatrix_reducedQuadrature(
const int patch,
2386 Vector &flux,
bool with_coef =
true,
2399 const bool add)
override;
2421 const bool stroud =
false);
2427 template <
int DIM,
int D1D,
int Q1D>
2430 ApplyPAKernels::Specialization<DIM,D1D,Q1D>::Add();
2431 DiagonalPAKernels::Specialization<DIM,D1D,Q1D>::Add();
2435 template <
int DIM,
int D1D,
int Q1D>
2438 ApplySimplexPAKernels::Specialization<DIM,D1D,Q1D>::Add();
2446 return &
GetRule(trial_fe, test_fe);
2455#ifndef MFEM_THREAD_SAFE
2482 const int,
const int);
2518 const bool add)
override;
2521 const bool add)
override;
2540 const bool stroud =
false);
2546 template <
int DIM,
int D1D,
int Q1D>
2549 ApplyPAKernels::Specialization<DIM,D1D,Q1D>::Add();
2550 DiagonalPAKernels::Specialization<DIM,D1D,Q1D>::Add();
2554 template <
int DIM,
int D1D,
int Q1D>
2557 ApplySimplexPAKernels::Specialization<DIM,D1D,Q1D>::Add();
2596#ifndef MFEM_THREAD_SAFE
2598 Vector shape, vec2, BdFidxT;
2614 const bool add)
override;
2648 template <
int DIM,
int D1D,
int Q1D>
2651 ApplyPAKernels::Specialization<DIM, D1D, Q1D>::Add();
2652 ApplyPATKernels::Specialization<DIM, D1D, Q1D>::Add();
2702 int vdim = -1, Q_order = 0;
2703 Vector shape, te_shape, vec;
2731 vdim(q.
GetVDim()), Q_order(qo),
VQ(&q) { }
2735 vdim(q.
GetVDim()), Q_order(qo),
MQ(&q) { }
2759 void(*)(
const int,
const int,
2768 void(*)(
const int,
const int,
const int,
2797#ifndef MFEM_THREAD_SAFE
2806 int dim, ne, dofs1D, L2dofs1D, quad1D;
2831#ifndef MFEM_THREAD_SAFE
2858#ifndef MFEM_THREAD_SAFE
2880#ifndef MFEM_THREAD_SAFE
2923#ifndef MFEM_THREAD_SAFE
2966 Vector &flux,
bool with_coef,
2984 const int,
const int,
const bool,
const int,
const Array<real_t> &,
3005 ApplyPAKernels::Specialization<DIM, D1D, Q1D>::Add();
3006 DiagonalPAKernels::Specialization<DIM, D1D, Q1D>::Add();
3015#ifndef MFEM_THREAD_SAFE
3016 DenseMatrix dshape_hat, dshape, curlshape, Jadj, grad_hat, grad;
3034 const Vector &elfun)
override;
3076#ifndef MFEM_THREAD_SAFE
3126 const bool add)
override;
3131 void (*)(
const int NE,
bool symmetric,
const bool scalar_coeff,
3135 const int triald1d,
const int testd1d,
const int q1d);
3140 int,
int,
int,
int));
3146 int TEST_D1D,
int Q1D>
3149 ApplyPAKernels::Specialization<TrialType, TestType,
DIM, TRIAL_D1D,
3150 TEST_D1D, Q1D>
::Add();
3169 const DofToQuad *trial_maps, *test_maps;
3171 int dim, sdim, ne, nq;
3172 int trial_dofs1D, test_dofs1D, quad1D;
3176 Q(NULL), trial_maps(NULL), test_maps(NULL), geom(NULL)
3179 Q(q_), trial_maps(NULL), test_maps(NULL), geom(NULL)
3182 Q(&q), trial_maps(NULL), test_maps(NULL), geom(NULL)
3198 void (*)(
const int ne,
3201 const int tr_d1d,
const int te_d1d,
const int q1d);
3204 (
int,
int,
int,
int));
3207 void (*)(
const int ne,
3210 const int tr_d1d,
const int te_d1d,
const int q1d);
3213 (
int,
int,
int,
int));
3236#ifndef MFEM_THREAD_SAFE
3237 Vector divshape, te_divshape;
3245 int dim, ne, dofs1D, quad1D;
3266 const bool add)
override;
3365 const int,
const int,
const int);
3370 template <
int DIM,
int VDIM,
int D1D,
int Q1D>
3373 ApplyPAKernels::Specialization<DIM, VDIM, D1D, Q1D>::Add();
3395#ifndef MFEM_THREAD_SAFE
3408 std::unique_ptr<QuadratureSpace> q_space;
3410 std::unique_ptr<CoefficientVector> lambda_quad, mu_quad;
3412 std::unique_ptr<QuadratureFunction> q_vec;
3451 Vector &flux,
bool with_coef =
true,
3493 const bool add =
true)
override;
3541 Vector tr_shape1, te_shape1, tr_shape2, te_shape2;
3580 const bool add)
override;
3584 const bool add)
override;
3605 ApplyPAKernels::Specialization<DIM, D1D, Q1D>::Add();
3606 ApplyPATKernels::Specialization<DIM, D1D, Q1D>::Add();
3707 const int,
const int);
3714 ApplyPAKernels::Specialization<DIM, D1D, Q1D>::Add();
3863#ifndef MFEM_THREAD_SAFE
3885 const int dim,
const int row_ndofs,
const int col_ndofs,
3886 const int row_offset,
const int col_offset,
3899 Vector face_shape, shape1, shape2;
3917 Vector face_shape, normal, shape1_n, shape2_n;
3933 const bool add =
true)
override;
3943 Vector face_shape, shape;
3959 Vector face_shape, normal, shape_n;
3986 MFEM_VERIFY(Y.
Width() ==
dim,
"Size mismatch");
3992 for (
int i = 0; i<h; i++)
3994 Z(i,0) = x(2) * Y(i,1) - x(1) * Y(i,2);
3995 Z(i,1) = x(0) * Y(i,2) - x(2) * Y(i,0);
3996 Z(i,2) = x(1) * Y(i,0) - x(0) * Y(i,1);
4001 for (
int i = 0; i<h; i++)
4003 Z(i,0) = x(1) * Y(i,0) - x(0) * Y(i,1);
4057 int dim, ne, o_dofs1D, c_dofs1D;
4084 ran_fe.
Project(dom_fe, Trans, elmat);
4088 ran_fe.
Project(dom_fe, Trans, elmat_block);
4091 for (
int i = 0; i <
vdim; i++)
4107 std::unique_ptr<FiniteElement> dofquad_fe;
4111 int dim, ne, o_dofs1D, c_dofs1D;
4134 std::unique_ptr<FiniteElement> closed_dofquad_fe;
4135 std::unique_ptr<FiniteElement> open_dofquad_fe;
4173 const int nquad_o,
const Vector &pa,
4183 ApplyPAKernels::Specialization<DIM, NDOF_O, NQUAD_O>::Add();
4184 ApplyTPAKernels::Specialization<DIM, NDOF_O, NQUAD_O>::Add();
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
MFEM_REGISTER_KERNELS(ApplyTPAKernels, ApplyKernelType,(int, int, int))
arguments: DIM, ndof_o, nquad_o
void AddMultTransposePA(const Vector &x, Vector &y) const override
Method for partially assembled transposed action.
void AssemblePA(const FiniteElementSpace &dom_fes, const FiniteElementSpace &ran_fes) override
void AddMultPA(const Vector &x, Vector &y) const override
Method for partially assembled action.
static void AddSpecialization()
MFEM_REGISTER_KERNELS(ApplyPAKernels, ApplyKernelType,(int, int, int))
arguments: DIM, ndof_o, nquad_o
void AssemblePA(const FiniteElementSpace &fes) override
Method defining partial assembly.
void(*)(const int ne, const int ndof_o, const int nquad_o, const Vector &pa, const Vector &x, Vector &y) ApplyKernelType
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)
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(*)(const int, const bool, const Array< int > &, const Array< int > &, const Array< int > &, const Array< int > &, const Array< 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 int, const int) ApplySimplexKernelType
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.
static const IntegrationRule & GetRule(const FiniteElement &trial_fe, const FiniteElement &test_fe, const bool stroud=false)
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.
static void AddSimplexSpecialization()
MFEM_REGISTER_KERNELS(ApplySimplexPAKernels, ApplySimplexKernelType,(int, int, int))
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.
DerivType
Enumeration for DerivType: defines which derivative method is implemented.
@ DIV
Implements CalcDivShape methods.
@ NONE
No derivatives implemented.
@ 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...
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
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
static void AddSimplexSpecialization()
void AssembleMF(const FiniteElementSpace &fes) override
Method defining matrix-free assembly.
void AssembleElementMatrix(const FiniteElement &el, ElementTransformation &Trans, DenseMatrix &elmat) override
static const IntegrationRule & GetRule(const FiniteElement &trial_fe, const FiniteElement &test_fe, const ElementTransformation &Trans, const bool stroud=false)
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)
MFEM_REGISTER_KERNELS(ApplySimplexPAKernels, ApplySimplexKernelType,(int, int, int))
bool SupportsCeed() const override
Indicates whether this integrator can use a Ceed backend.
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.
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(*)(const int, const Array< int > &, const Array< int > &, const Array< int > &, const Array< int > &, const Array< 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 int, const int) ApplySimplexKernelType
void AddAbsMultTransposePA(const Vector &, Vector &) const override
static void AddSpecialization()
const Coefficient * GetCoefficient() const
int GetTrialVDim(const FiniteElement &trial_fe) override
int GetTestVDim(const FiniteElement &test_fe) override
MixedCrossCurlCurlIntegrator(VectorCoefficient &vq)
void CalcTestShape(const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &shape) override
void CalcTrialShape(const FiniteElement &trial_fe, ElementTransformation &Trans, DenseMatrix &shape) override
bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const override
const char * FiniteElementTypeFailureMessage() const override
void CalcTrialShape(const FiniteElement &trial_fe, ElementTransformation &Trans, DenseMatrix &shape) override
bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const override
int GetTestVDim(const FiniteElement &test_fe) override
MixedCrossCurlGradIntegrator(VectorCoefficient &vq)
const char * FiniteElementTypeFailureMessage() const override
int GetTrialVDim(const FiniteElement &trial_fe) override
void CalcTestShape(const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &shape) override
const char * FiniteElementTypeFailureMessage() const override
int GetTrialVDim(const FiniteElement &trial_fe) override
MixedCrossCurlIntegrator(VectorCoefficient &vq)
void CalcTrialShape(const FiniteElement &trial_fe, ElementTransformation &Trans, DenseMatrix &shape) override
bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const override
void CalcTrialShape(const FiniteElement &trial_fe, ElementTransformation &Trans, DenseMatrix &shape) override
void CalcTestShape(const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &shape) override
int GetTrialVDim(const FiniteElement &trial_fe) override
MixedCrossGradCurlIntegrator(VectorCoefficient &vq)
bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const override
const char * FiniteElementTypeFailureMessage() const override
int GetTestVDim(const FiniteElement &test_fe) override
MixedCrossGradGradIntegrator(VectorCoefficient &vq)
void CalcTestShape(const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &shape) override
const char * FiniteElementTypeFailureMessage() const override
int GetTrialVDim(const FiniteElement &trial_fe) override
void CalcTrialShape(const FiniteElement &trial_fe, ElementTransformation &Trans, DenseMatrix &shape) override
bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const override
int GetTestVDim(const FiniteElement &test_fe) override
const char * FiniteElementTypeFailureMessage() const override
MixedCrossGradIntegrator(VectorCoefficient &vq)
bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const override
void CalcTrialShape(const FiniteElement &trial_fe, ElementTransformation &Trans, DenseMatrix &shape) override
int GetTrialVDim(const FiniteElement &trial_fe) override
void CalcTestShape(const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &shape) override
MixedCrossProductIntegrator(VectorCoefficient &vq)
MixedCurlCurlIntegrator()
void CalcTrialShape(const FiniteElement &trial_fe, ElementTransformation &Trans, DenseMatrix &shape) override
void CalcTestShape(const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &shape) override
const char * FiniteElementTypeFailureMessage() const override
MixedCurlCurlIntegrator(MatrixCoefficient &mq)
int GetTestVDim(const FiniteElement &test_fe) override
int GetTrialVDim(const FiniteElement &trial_fe) override
MixedCurlCurlIntegrator(DiagonalMatrixCoefficient &dq)
bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const override
MixedCurlCurlIntegrator(Coefficient &q)
MixedCurlIntegrator(Coefficient &q)
MixedCurlIntegrator(Coefficient *q_)
void AssembleElementMatrix2(const FiniteElement &trial_fe, const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &elmat) override
void CalcVShape(const FiniteElement &vector_fe, ElementTransformation &Trans, DenseMatrix &shape) override
int GetVDim(const FiniteElement &vector_fe) override
MixedDirectionalDerivativeIntegrator(VectorCoefficient &vq)
const char * FiniteElementTypeFailureMessage() const override
bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const override
MixedDivGradIntegrator(VectorCoefficient &vq)
void CalcShape(const FiniteElement &scalar_fe, ElementTransformation &Trans, Vector &shape) override
void CalcVShape(const FiniteElement &vector_fe, ElementTransformation &Trans, DenseMatrix &shape) override
const char * FiniteElementTypeFailureMessage() const override
int GetVDim(const FiniteElement &vector_fe) override
bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const override
void AddMultTransposePA(const Vector &, Vector &) const override
Method for partially assembled transposed action.
void AssemblePA(const FiniteElementSpace &trial_fes, const FiniteElementSpace &test_fes) override
bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const override
void AddMultPA(const Vector &, Vector &) const override
Method for partially assembled action.
MixedDotProductIntegrator(VectorCoefficient &vq)
const char * FiniteElementTypeFailureMessage() const override
void CalcShape(const FiniteElement &scalar_fe, ElementTransformation &Trans, Vector &shape) override
MixedGradDivIntegrator(VectorCoefficient &vq)
const char * FiniteElementTypeFailureMessage() const override
bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const override
int GetVDim(const FiniteElement &vector_fe) override
void CalcVShape(const FiniteElement &vector_fe, ElementTransformation &Trans, DenseMatrix &shape) override
MixedGradGradIntegrator()
MixedGradGradIntegrator(DiagonalMatrixCoefficient &dq)
bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const override
MixedGradGradIntegrator(Coefficient &q)
const char * FiniteElementTypeFailureMessage() const override
void CalcTestShape(const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &shape) override
int GetTrialVDim(const FiniteElement &trial_fe) override
MixedGradGradIntegrator(MatrixCoefficient &mq)
void CalcTrialShape(const FiniteElement &trial_fe, ElementTransformation &Trans, DenseMatrix &shape) override
int GetIntegrationOrder(const FiniteElement &trial_fe, const FiniteElement &test_fe, ElementTransformation &Trans) override
int GetTestVDim(const FiniteElement &test_fe) override
MixedScalarCrossCurlIntegrator(VectorCoefficient &vq)
const char * FiniteElementTypeFailureMessage() const override
bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const override
void CalcShape(const FiniteElement &scalar_fe, ElementTransformation &Trans, Vector &shape) override
bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const override
int GetVDim(const FiniteElement &vector_fe) override
void CalcVShape(const FiniteElement &vector_fe, ElementTransformation &Trans, DenseMatrix &shape) override
MixedScalarCrossGradIntegrator(VectorCoefficient &vq)
const char * FiniteElementTypeFailureMessage() const override
bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const override
const char * FiniteElementTypeFailureMessage() const override
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.
MixedScalarCrossProductIntegrator(VectorCoefficient &vq)
void AddMultTransposePA(const Vector &x, Vector &y) const override
Method for partially assembled transposed action.
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)
MixedScalarDerivativeIntegrator()
const char * FiniteElementTypeFailureMessage() const override
bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const override
void CalcTrialShape(const FiniteElement &trial_fe, ElementTransformation &Trans, Vector &shape) override
void CalcTrialShape(const FiniteElement &trial_fe, ElementTransformation &Trans, Vector &shape) override
int GetIntegrationOrder(const FiniteElement &trial_fe, const FiniteElement &test_fe, ElementTransformation &Trans) override
const char * FiniteElementTypeFailureMessage() const override
bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const override
MixedScalarDivergenceIntegrator()
MixedScalarDivergenceIntegrator(Coefficient &q)
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_)
Class for integrating the bilinear form in 2D and where is a vector coefficient is in or ,...
MixedScalarWeakCrossProductIntegrator(VectorCoefficient &vq)
const char * FiniteElementTypeFailureMessage() const override
void AddMultTransposePA(const Vector &x, Vector &y) const override
Method for partially assembled transposed action.
void CalcShape(const FiniteElement &scalar_fe, ElementTransformation &Trans, Vector &shape) override
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.
bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const override
bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const override
const char * FiniteElementTypeFailureMessage() const override
void CalcShape(const FiniteElement &scalar_fe, ElementTransformation &Trans, Vector &shape) override
MixedScalarWeakCurlCrossIntegrator(VectorCoefficient &vq)
MixedScalarWeakCurlIntegrator()
void CalcTestShape(const FiniteElement &test_fe, ElementTransformation &Trans, Vector &shape) override
MixedScalarWeakCurlIntegrator(Coefficient &q)
const char * FiniteElementTypeFailureMessage() const override
bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const override
MixedScalarWeakDerivativeIntegrator(Coefficient &q)
const char * FiniteElementTypeFailureMessage() const override
bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const override
void CalcTestShape(const FiniteElement &test_fe, ElementTransformation &Trans, Vector &shape) override
MixedScalarWeakDerivativeIntegrator()
MixedScalarWeakDivergenceIntegrator(VectorCoefficient &vq)
bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const override
void CalcVShape(const FiniteElement &vector_fe, ElementTransformation &Trans, DenseMatrix &shape) override
const char * FiniteElementTypeFailureMessage() const override
int GetVDim(const FiniteElement &vector_fe) override
int GetIntegrationOrder(const FiniteElement &trial_fe, const FiniteElement &test_fe, ElementTransformation &Trans) override
const DofToQuad * L2mapsO
Not owned. Scalar open/closed map.
void CalcTestShape(const FiniteElement &test_fe, ElementTransformation &Trans, Vector &shape) override
bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const override
void AssemblePA(const FiniteElementSpace &trial_fes, const FiniteElementSpace &test_fes) override
const DofToQuad * mapsO
Not owned. HDiv open map.
void AddMultPA(const Vector &x, Vector &y) const override
Method for partially assembled action.
MixedScalarWeakGradientIntegrator()
const DofToQuad * mapsC
Not owned. HDiv closed map.
MixedScalarWeakGradientIntegrator(Coefficient &q)
const char * FiniteElementTypeFailureMessage() const override
void AddMultTransposePA(const Vector &x, Vector &y) const override
Method for partially assembled transposed action.
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()
MixedVectorDivergenceIntegrator(VectorCoefficient &vq)
bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const override
void CalcShape(const FiniteElement &scalar_fe, ElementTransformation &Trans, Vector &shape) override
const char * FiniteElementTypeFailureMessage() const override
int GetIntegrationOrder(const FiniteElement &trial_fe, const FiniteElement &test_fe, ElementTransformation &Trans) override
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
int GetTestVDim(const FiniteElement &test_fe) override
void CalcTestShape(const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &shape) override
MixedVectorWeakDivergenceIntegrator(Coefficient &q)
MixedVectorWeakDivergenceIntegrator()
MixedVectorWeakDivergenceIntegrator(DiagonalMatrixCoefficient &dq)
bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const override
const char * FiniteElementTypeFailureMessage() const override
MixedVectorWeakDivergenceIntegrator(MatrixCoefficient &mq)
void CalcTestShape(const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &shape) override
bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const override
int GetTestVDim(const FiniteElement &test_fe) override
const char * FiniteElementTypeFailureMessage() const override
MixedWeakCurlCrossIntegrator(VectorCoefficient &vq)
MixedWeakDivCrossIntegrator(VectorCoefficient &vq)
bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const override
int GetTestVDim(const FiniteElement &test_fe) override
void CalcTestShape(const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &shape) override
const char * FiniteElementTypeFailureMessage() const override
const char * FiniteElementTypeFailureMessage() const override
MixedWeakGradDotIntegrator(VectorCoefficient &vq)
int GetIntegrationOrder(const FiniteElement &trial_fe, const FiniteElement &test_fe, ElementTransformation &Trans) override
bool VerifyFiniteElementTypes(const FiniteElement &trial_fe, const FiniteElement &test_fe) const override
void CalcShape(const FiniteElement &scalar_fe, ElementTransformation &Trans, Vector &shape) override
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
void(*)(const int ne, const Array< real_t > &bt, const Array< real_t > >, const Array< real_t > &b, const Vector &q, const Vector &x, Vector &y, const int tr_d1d, const int te_d1d, const int q1d) VectorDivergenceAddMultTransposePAType
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.
MFEM_REGISTER_KERNELS(VectorDivergenceAddMultPA, VectorDivergenceAddMultPAType,(int, int, int, int))
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
void(*)(const int ne, const Array< real_t > &b, const Array< real_t > &g, const Array< real_t > &bt, const Vector &op, const Vector &x, Vector &y, const int tr_d1d, const int te_d1d, const int q1d) VectorDivergenceAddMultPAType
MFEM_REGISTER_KERNELS(VectorDivergenceAddMultTransposePA, VectorDivergenceAddMultTransposePAType,(int, int, int, int))
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)
static void AddSpecialization()
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
FiniteElement::DerivType trial_fetype
void AddAbsMultPA(const Vector &x, Vector &y) const override
void(*)(const int NE, bool symmetric, const bool scalar_coeff, const Array< real_t > &trialBO, const Array< real_t > &trialBC, const Array< real_t > &testBOt, const Array< real_t > &testBCt, const Vector &pa_data, const Vector &x, Vector &y, const int triald1d, const int testd1d, const int q1d) ApplyKernelType
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.
FiniteElement::DerivType test_fetype
MFEM_REGISTER_KERNELS(ApplyPAKernels, ApplyKernelType,(FiniteElement::DerivType, FiniteElement::DerivType, int, int, int, int))
parameters: trial_fetype, test_fetype, ndims, trial_d1d, test_d1d, q1d
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.
void(*)(const int, const int, const int, const real_t *, const real_t *, real_t *) VectorMassAssembleDiagonalPAType
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.
MFEM_REGISTER_KERNELS(VectorMassAssembleDiagonalPA, VectorMassAssembleDiagonalPAType,(int, int))
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...
void Add(const DenseMatrix &A, const DenseMatrix &B, real_t alpha, DenseMatrix &C)
C = A + alpha*B.