12#ifndef MFEM_BILININTEG
13#define MFEM_BILININTEG
97 const bool add =
true);
129 const bool add =
true);
134 const bool add =
true);
144 const bool add =
true);
148 const bool add =
true);
265 Vector &flux,
bool with_coef =
true,
340 { bfi = bfi_; own_bfi = own_bfi_; }
398 const bool add)
override;
404 const bool add)
override;
408 const bool add)
override;
421 { bfi = bfi_; own_bfi = own_bfi_; }
441 { integrator = integ; own_integrator = own_integ; }
466 { integrators.
Append(integ); }
510 const bool add)
override;
516 const bool add)
override;
520 const bool add)
override;
560 return "MixedScalarIntegrator: "
561 "Trial and test spaces must both be scalar fields.";
584#ifndef MFEM_THREAD_SAFE
634 return "MixedVectorIntegrator: "
635 "Trial and test spaces must both be vector fields";
668#ifndef MFEM_THREAD_SAFE
704 bool cross_2d_ =
false)
724 return "MixedScalarVectorIntegrator: "
725 "Trial space must be a vector field "
726 "and the test space must be a scalar field";
730 return "MixedScalarVectorIntegrator: "
731 "Trial space must be a scalar field "
732 "and the test space must be a vector field";
762#ifndef MFEM_THREAD_SAFE
806 return (trial_fe.
GetDim() == 1 && test_fe.
GetDim() == 1 &&
813 return "MixedScalarDerivativeIntegrator: "
814 "Trial and test spaces must both be scalar fields in 1D "
815 "and the trial space must implement CalcDShape.";
841 return (trial_fe.
GetDim() == 1 && test_fe.
GetDim() == 1 &&
848 return "MixedScalarWeakDerivativeIntegrator: "
849 "Trial and test spaces must both be scalar fields in 1D "
850 "and the test space must implement CalcDShape with "
851 "map type \"VALUE\".";
885 return "MixedScalarDivergenceIntegrator: "
886 "Trial must be $H(div)$ and the test space must be a "
920 return "MixedVectorDivergenceIntegrator: "
921 "Trial must be H(Div) and the test space must be a "
959 return "MixedScalarWeakGradientIntegrator: "
960 "Trial space must be a scalar field "
961 "and the test space must be H(Div)";
993 return (trial_fe.
GetDim() == 2 && test_fe.
GetDim() == 2 &&
1000 return "MixedScalarCurlIntegrator: "
1001 "Trial must be H(Curl) and the test space must be a "
1049 return (trial_fe.
GetDim() == 2 && test_fe.
GetDim() == 2 &&
1056 return "MixedScalarWeakCurlIntegrator: "
1057 "Trial space must be a scalar field "
1058 "and the test space must be H(Curl)";
1113 return "MixedDotProductIntegrator: "
1114 "Trial space must be a vector field "
1115 "and the test space must be a scalar field";
1139 return "MixedWeakGradDotIntegrator: "
1140 "Trial space must be a vector field "
1141 "and the test space must be a vector field with a divergence";
1177 return "MixedWeakDivCrossIntegrator: "
1178 "Trial space must be a vector field in 3D "
1179 "and the test space must be a scalar field with a gradient";
1217 return "MixedGradGradIntegrator: "
1218 "Trial and test spaces must both be scalar fields "
1219 "with a gradient operator.";
1269 return "MixedCrossGradGradIntegrator: "
1270 "Trial and test spaces must both be scalar fields "
1271 "with a gradient operator.";
1318 return "MixedCurlCurlIntegrator"
1319 "Trial and test spaces must both be vector fields in 3D "
1362 return "MixedCrossCurlCurlIntegrator: "
1363 "Trial and test spaces must both be vector fields in 3D "
1405 return "MixedCrossCurlGradIntegrator"
1406 "Trial space must be a vector field in 3D with a curl"
1407 "and the test space must be a scalar field with a gradient";
1448 return "MixedCrossGradCurlIntegrator"
1449 "Trial space must be a scalar field in 3D with a gradient"
1450 "and the test space must be a vector field with a curl";
1491 return "MixedWeakCurlCrossIntegrator: "
1492 "Trial space must be a vector field in 3D "
1493 "and the test space must be a vector field with a curl";
1518 return (trial_fe.
GetDim() == 2 && test_fe.
GetDim() == 2 &&
1526 return "MixedScalarWeakCurlCrossIntegrator: "
1527 "Trial space must be a vector field in 2D "
1528 "and the test space must be a vector field with a curl";
1561 return "MixedCrossGradIntegrator: "
1562 "Trial space must be a scalar field with a gradient operator"
1563 " and the test space must be a vector field both in 3D.";
1601 return "MixedCrossCurlIntegrator: "
1602 "Trial space must be a vector field in 3D with a curl "
1603 "and the test space must be a vector field";
1628 return (trial_fe.
GetDim() == 2 && test_fe.
GetDim() == 2 &&
1636 return "MixedCrossCurlIntegrator: "
1637 "Trial space must be a vector field in 2D with a curl "
1638 "and the test space must be a vector field";
1662 return (trial_fe.
GetDim() == 2 && test_fe.
GetDim() == 2 &&
1670 return "MixedScalarCrossGradIntegrator: "
1671 "Trial space must be a scalar field in 2D with a gradient "
1672 "and the test space must be a scalar field";
1696 return (trial_fe.
GetDim() == 2 && test_fe.
GetDim() == 2 &&
1703 return "MixedScalarCrossProductIntegrator: "
1704 "Trial space must be a vector field in 2D "
1705 "and the test space must be a scalar field";
1724 return (trial_fe.
GetDim() == 2 && test_fe.
GetDim() == 2 &&
1731 return "MixedScalarWeakCrossProductIntegrator: "
1732 "Trial space must be a scalar field in 2D "
1733 "and the test space must be a vector field";
1761 return "MixedDirectionalDerivativeIntegrator: "
1762 "Trial space must be a scalar field with a gradient "
1763 "and the test space must be a scalar field";
1795 return "MixedGradDivIntegrator: "
1796 "Trial space must be a scalar field with a gradient"
1797 "and the test space must be a vector field with a divergence";
1835 return "MixedDivGradIntegrator: "
1836 "Trial space must be a vector field with a divergence"
1837 "and the test space must be a scalar field with a gradient";
1873 return "MixedScalarWeakDivergenceIntegrator: "
1874 "Trial space must be a scalar field "
1875 "and the test space must be a scalar field with a gradient";
1915 return "MixedVectorGradientIntegrator: "
1916 "Trial spaces must be $H^1$ and the test space must be a "
1917 "vector field in 2D or 3D";
1945 int dim, ne, dofs1D, quad1D;
1974 return "MixedVectorCurlIntegrator: "
1975 "Trial space must be H(Curl) and the test space must be a "
1976 "vector field in 3D";
2004 int dim, ne, dofs1D, dofs1Dtest,quad1D, testType, trialType, coeffDim;
2033 return "MixedVectorWeakCurlIntegrator: "
2034 "Trial space must be vector field in 3D and the "
2035 "test space must be H(Curl)";
2061 int dim, ne, dofs1D, quad1D, testType, trialType, coeffDim;
2089 return "MixedVectorWeakDivergenceIntegrator: "
2090 "Trial space must be vector field and the "
2091 "test space must be H1";
2124 const DofToQuad *trial_maps, *test_maps;
2127 int trial_dofs1D, test_dofs1D, quad1D;
2131 Q{NULL}, trial_maps{NULL}, test_maps{NULL}, geom{NULL}
2134 Q{q_}, trial_maps{NULL}, test_maps{NULL}, geom{NULL}
2137 Q{&q}, trial_maps{NULL}, test_maps{NULL}, geom{NULL}
2175 Vector&,
const int,
const int);
2179 const int,
const int);
2191 Vector vec, vecdxt, pointflux, shape;
2192#ifndef MFEM_THREAD_SAFE
2193 DenseMatrix dshape, dshapedxt, invdfdx, M, dshapedxt_m;
2202 int dim, ne, dofs1D, quad1D;
2204 bool symmetric =
true;
2210 typedef std::vector<std::vector<int>> IntArrayVar2D;
2213 static constexpr int numTypes = 2;
2235 std::vector<std::vector<Vector>> reducedWeights;
2236 std::vector<IntArrayVar2D> reducedIDs;
2237 std::vector<Array<int>> pQ1D, pD1D;
2238 std::vector<std::vector<Array2D<real_t>>> pB, pG;
2239 std::vector<IntArrayVar2D> pminD, pmaxD, pminQ, pmaxQ, pminDD, pmaxDD;
2241 std::vector<Array<const IntegrationRule*>> pir1d;
2243 void SetupPatchPA(
const int patch,
Mesh *mesh,
bool unitWeights=
false);
2245 void SetupPatchBasisData(
Mesh *mesh,
unsigned int patch);
2249 void AssemblePatchMatrix_fullQuadrature(
const int patch,
2255 void AssemblePatchMatrix_reducedQuadrature(
const int patch,
2300 Vector &flux,
bool with_coef =
true,
2313 const bool add)
override;
2336 template <
int DIM,
int D1D,
int Q1D>
2339 ApplyPAKernels::Specialization<DIM,D1D,Q1D>::Add();
2340 DiagonalPAKernels::Specialization<DIM,D1D,Q1D>::Add();
2348 return &
GetRule(trial_fe, test_fe);
2357#ifndef MFEM_THREAD_SAFE
2409 const bool add)
override;
2412 const bool add)
override;
2432 template <
int DIM,
int D1D,
int Q1D>
2435 ApplyPAKernels::Specialization<DIM,D1D,Q1D>::Add();
2436 DiagonalPAKernels::Specialization<DIM,D1D,Q1D>::Add();
2475#ifndef MFEM_THREAD_SAFE
2477 Vector shape, vec2, BdFidxT;
2494 const bool add)
override;
2562 Vector shape, te_shape, vec;
2580 : vdim(-1), Q_order(0),
Q(NULL),
VQ(NULL),
MQ(NULL) { }
2585 : vdim(-1), Q_order(qo),
Q(&q),
VQ(NULL),
MQ(NULL) { }
2591 : vdim(q.
GetVDim()), Q_order(qo),
Q(NULL),
VQ(&q),
MQ(NULL) { }
2594 : vdim(q.
GetVDim()), Q_order(qo),
Q(NULL),
VQ(NULL),
MQ(&q) { }
2638#ifndef MFEM_THREAD_SAFE
2647 int dim, ne, dofs1D, L2dofs1D, quad1D;
2672#ifndef MFEM_THREAD_SAFE
2699#ifndef MFEM_THREAD_SAFE
2721#ifndef MFEM_THREAD_SAFE
2764#ifndef MFEM_THREAD_SAFE
2809 Vector &flux,
bool with_coef,
2829#ifndef MFEM_THREAD_SAFE
2830 DenseMatrix dshape_hat, dshape, curlshape, Jadj, grad_hat, grad;
2848 const Vector &elfun)
override;
2889 {
Q = q;
DQ = dq;
MQ = mq; }
2891#ifndef MFEM_THREAD_SAFE
2939 const bool add)
override;
2959 const DofToQuad *trial_maps, *test_maps;
2961 int dim, sdim, ne, nq;
2962 int trial_dofs1D, test_dofs1D, quad1D;
2966 Q(NULL), trial_maps(NULL), test_maps(NULL), geom(NULL)
2969 Q(q_), trial_maps(NULL), test_maps(NULL), geom(NULL)
2972 Q(&q), trial_maps(NULL), test_maps(NULL), geom(NULL)
3008#ifndef MFEM_THREAD_SAFE
3009 Vector divshape, te_divshape;
3017 int dim, ne, dofs1D, quad1D;
3038 const bool add)
override;
3082 : vdim(vector_dimension) { }
3099 :
Q(&q), vdim(vector_dimension) { }
3111 :
VQ(&vq), vdim(vq.GetVDim()) { }
3123 :
MQ(&mq), vdim(mq.GetVDim()) { }
3157#ifndef MFEM_THREAD_SAFE
3170 std::unique_ptr<QuadratureSpace> q_space;
3172 std::unique_ptr<CoefficientVector> lambda_quad, mu_quad;
3174 std::unique_ptr<QuadratureFunction> q_vec;
3213 Vector &flux,
bool with_coef =
true,
3255 const bool add =
true)
override;
3303 Vector tr_shape1, te_shape1, tr_shape2, te_shape2;
3343 const bool add)
override;
3347 const bool add)
override;
3588#ifndef MFEM_THREAD_SAFE
3610 const int dim,
const int row_ndofs,
const int col_ndofs,
3611 const int row_offset,
const int col_offset,
3624 Vector face_shape, shape1, shape2;
3642 Vector face_shape, normal, shape1_n, shape2_n;
3658 const bool add =
true)
override;
3668 Vector face_shape, shape;
3684 Vector face_shape, normal, shape_n;
3711 MFEM_VERIFY(Y.
Width() ==
dim,
"Size mismatch");
3717 for (
int i = 0; i<h; i++)
3719 Z(i,0) = x(2) * Y(i,1) - x(1) * Y(i,2);
3720 Z(i,1) = x(0) * Y(i,2) - x(2) * Y(i,0);
3721 Z(i,2) = x(1) * Y(i,0) - x(0) * Y(i,1);
3726 for (
int i = 0; i<h; i++)
3728 Z(i,0) = x(1) * Y(i,0) - x(0) * Y(i,1);
3782 int dim, ne, o_dofs1D, c_dofs1D;
3809 ran_fe.
Project(dom_fe, Trans, elmat);
3813 ran_fe.
Project(dom_fe, Trans, elmat_block);
3816 for (
int i = 0; i <
vdim; i++)
3832 std::unique_ptr<FiniteElement> dofquad_fe;
3836 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.
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
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 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.
void AssembleElementMatrix2(const FiniteElement &trial_fe, const FiniteElement &test_fe, ElementTransformation &Trans, DenseMatrix &elmat) override
CurlCurlIntegrator(Coefficient &q, const IntegrationRule *ir=NULL)
Construct a bilinear form integrator for Nedelec elements.
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 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
CurlCurlIntegrator(DiagonalMatrixCoefficient &dq, const IntegrationRule *ir=NULL)
CurlCurlIntegrator(MatrixCoefficient &mq, const IntegrationRule *ir=NULL)
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.
void AssemblePA(const FiniteElementSpace &fes) override
Method defining partial assembly.
const DofToQuad * mapsO
Not owned. DOF-to-quad map, open.
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...
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)
DGDiffusionIntegrator(Coefficient &q, const real_t s, const real_t k)
DGDiffusionIntegrator(MatrixCoefficient &q, const real_t s, const real_t k)
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
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.
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.
void AssemblePAInteriorFaces(const FiniteElementSpace &fes) override
static const IntegrationRule & GetRule(Geometry::Type geom, int order, const FaceElementTransformations &T)
DGTraceIntegrator(VectorCoefficient &u_, real_t a)
Construct integrator with , .
const FaceGeometricFactors * geom
Not owned.
DGTraceIntegrator(VectorCoefficient &u_, real_t a, real_t b)
Construct integrator with .
void AssembleEABoundaryFaces(const FiniteElementSpace &fes, Vector &ea_data_bdr, const bool add) override
DGTraceIntegrator(Coefficient &rho_, VectorCoefficient &u_, real_t a, real_t b)
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.
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(*)(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 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))
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.
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 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 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.
VectorDiffusionIntegrator(int vector_dimension)
Integrator with unit coefficient for caller-specified vector dimension.
VectorDiffusionIntegrator(Coefficient &q)
const DofToQuad * maps
Not owned.
VectorDiffusionIntegrator()
VectorDiffusionIntegrator(Coefficient &q, int vector_dimension)
Integrator with scalar coefficient for caller-specified vector dimension.
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(VectorCoefficient &vq)
Integrator with VectorCoefficient. The vector dimension of the FiniteElementSpace is assumed to be th...
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...
VectorDiffusionIntegrator(Coefficient &q, const IntegrationRule *ir)
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.
VectorDiffusionIntegrator(MatrixCoefficient &mq)
Integrator with MatrixCoefficient. The vector dimension of the FiniteElementSpace is assumed to be th...
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
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.
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(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)
VectorMassIntegrator()
Construct an integrator with coefficient 1.0.
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.
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...