22 MFEM_ABORT(
"Not supported.");
28 mfem_error(
"LinearFormIntegrator::AssembleRHSElementVect(...)");
35 mfem_error(
"LinearFormIntegrator::AssembleRHSElementVect(...)");
65 add(elvect, ip.
weight * val, shape, elvect);
72 MFEM_ASSERT(
delta != NULL,
"coefficient must be DeltaCoefficient");
103 Q.
Eval(Qvec, Tr, ip);
113 MFEM_ASSERT(
vec_delta != NULL,
"coefficient must be VectorDeltaCoefficient");
123 dshape.
Mult(Qvec, elvect);
138 int intorder = oa * el.
GetOrder() + ob;
151 add(elvect, ip.
weight * val, shape, elvect);
167 int intorder = oa * el.
GetOrder() + ob;
185 add(elvect, val, shape, elvect);
203 int intorder = oa * el.
GetOrder() + ob;
220 Q.
Eval(Qvec, Tr, ip);
241 mfem_error(
"These methods make sense only in 2D problems.");
247 int intorder = oa * el.
GetOrder() + ob;
257 tangent(0) = Jac(0,0);
258 tangent(1) = Jac(1,0);
260 Q.
Eval(Qvec, Tr, ip);
264 add(elvect, ip.
weight*(Qvec*tangent), shape, elvect);
296 Q.
Eval (Qvec, Tr, ip);
298 for (
int k = 0; k < vdim; k++)
302 for (
int s = 0;
s < dof;
s++)
304 elvect(dof*k+
s) += ip.
weight * cf * shape(
s);
313 MFEM_ASSERT(
vec_delta != NULL,
"coefficient must be VectorDeltaCoefficient");
324 MultVWt(shape, Qvec, elvec_as_mat);
331 const int dof = el.
GetDof();
337 elvect.
SetSize(dof*(vdim/sdim));
357 Q.
Eval(Qvec, Tr, ip);
360 for (
int k = 0; k < vdim/sdim; k++)
362 for (
int d=0; d < sdim; ++d) { part_x(d) = Qvec(k*sdim+d); }
363 dshape.
Mult(part_x, pelvect);
364 for (
int s = 0;
s < dof; ++
s) { elvect(
s+k*dof) += pelvect(
s); }
372 MFEM_ABORT(
"Not implemented!");
402 for (
int k = 0; k < vdim; k++)
403 for (
int s = 0;
s < dof;
s++)
405 elvect(dof*k+
s) += vec(k) * shape(
s);
443 for (
int k = 0; k < vdim; k++)
445 for (
int s = 0;
s < dof;
s++)
447 elvect(dof*k+
s) += vec(k) * shape(
s);
481 QF.
Eval (vec, Tr, ip);
490 MFEM_ASSERT(
vec_delta != NULL,
"coefficient must be VectorDeltaCoefficient");
500 vshape.
Mult(vec, elvect);
508 int n=(spaceDim == 3)? spaceDim : 1;
528 QF->
Eval(vec, Tr, ip);
531 curlshape.
AddMult (vec, elvect);
540 "coefficient must be VectorDeltaCoefficient");
542 int n=(spaceDim == 3)? spaceDim : 1;
549 curlshape.
Mult(vec, elvect);
576 add(elvect, ip.
weight * val, divshape, elvect);
583 MFEM_ASSERT(
delta != NULL,
"coefficient must be DeltaCoefficient");
612 nor *= Sign * ip.
weight * F -> Eval (Tr, ip);
613 for (
int j = 0; j < dof; j++)
614 for (
int k = 0; k <
dim; k++)
616 elvect(dof*k+j) += nor(k) * shape(j);
634 int intorder = oa * el.
GetOrder() + ob;
647 val *= F->
Eval(Tr, ip);
650 elvect.
Add(val, shape);
664 MFEM_VERIFY(vdim == 2,
"VectorFEBoundaryTangentLFIntegrator "
665 "must be called with vector basis functions of dimension 2.");
673 int intorder = oa * el.
GetOrder() + ob;
684 f.
Eval(f_loc, Tr, ip);
693 f_hat(0) = J(0,0) * f_loc(0) + J(1,0) * f_loc(1);
703 f_hat(0) = -f_hat(0);
713 mfem_error(
"BoundaryFlowIntegrator::AssembleRHSElementVect\n"
714 " is not implemented as boundary integrator!\n"
715 " Use LinearForm::AddBdrFaceIntegrator instead of\n"
716 " LinearForm::AddBoundaryIntegrator.");
722 int dim, ndof, order;
723 real_t un, w, vu_data[3], nor_data[3];
762 nor(0) = 2*eip.
x - 1.0;
770 w = 0.5*alpha*un - beta*fabs(un);
772 elvect.
Add(w, shape);
779 mfem_error(
"DGDirichletLFIntegrator::AssembleRHSElementVect");
786 bool kappa_is_nonzero = (
kappa != 0.);
828 nor(0) = 2*eip.
x - 1.0;
860 if (kappa_is_nonzero)
870 mfem_error(
"DGElasticityDirichletLFIntegrator::AssembleRHSElementVect");
876 MFEM_ASSERT(Tr.
Elem2No < 0,
"interior boundary is not supported");
878#ifdef MFEM_THREAD_SAFE
890 const int ndofs = el.
GetDof();
891 const int nvdofs =
dim*ndofs;
933 nor(0) = 2*eip.
x - 1.0;
989 for (
int im = 0, i = 0; im <
dim; ++im)
994 for (
int idof = 0; idof < ndofs; ++idof, ++i)
1012 for (
int i = 0; i < n; i++)
1014 elvect(i) = dist(generator);
1019 if (!save_factors || !L[iel])
1051 const int vdim = vqfc.
GetVDim();
1052 const int ndofs = fe.
GetDof();
1057 for (
int q = 0; q < nqp; q++)
1062 vqfc.
Eval(temp, Tr, ip);
1064 for (
int ind = 0; ind < vdim; ind++)
1066 for (
int nd = 0; nd < ndofs; nd++)
1068 elvect(nd + ind * ndofs) += w * shape(nd) * temp(ind);
1083 const int ndofs = fe.
GetDof();
1087 for (
int q = 0; q < nqp; q++)
1094 shape *= (w * temp);
virtual void AssembleRHSElementVect(const FiniteElement &el, ElementTransformation &Tr, Vector &elvect)
virtual void AssembleRHSElementVect(const FiniteElement &el, ElementTransformation &Tr, Vector &elvect)
virtual void AssembleRHSElementVect(const FiniteElement &el, ElementTransformation &Tr, Vector &elvect)
virtual void AssembleRHSElementVect(const FiniteElement &el, ElementTransformation &Tr, Vector &elvect)
virtual bool Factor(int m, real_t TOL=0.0)
Compute the Cholesky factorization of the current matrix.
void LMult(int m, int n, real_t *X) const
virtual real_t Eval(ElementTransformation &T, const IntegrationPoint &ip)=0
Evaluate the coefficient in the element described by T at the point ip.
virtual void AssembleRHSElementVect(const FiniteElement &el, ElementTransformation &Tr, Vector &elvect)
virtual void AssembleRHSElementVect(const FiniteElement &el, ElementTransformation &Tr, Vector &elvect)
virtual real_t EvalDelta(ElementTransformation &T, const IntegrationPoint &ip)
The value of the function assuming we are evaluating at the delta center.
VectorDeltaCoefficient * vec_delta
Data type dense matrix using column-major storage.
void Mult(const real_t *x, real_t *y) const
Matrix vector multiplication.
void MultTranspose(const real_t *x, real_t *y) const
Multiply a vector with the transpose matrix.
real_t * Data() const
Returns the matrix data array.
void SetSize(int s)
Change the size of the DenseMatrix to s x s.
virtual void AddMult(const Vector &x, Vector &y, const real_t a=1.0) const
y += a * A.x
virtual void AssembleRHSElementVect(const FiniteElement &el, ElementTransformation &Tr, Vector &elvect)
virtual void AssembleDeltaElementVect(const FiniteElement &fe, ElementTransformation &Trans, Vector &elvect)
Assemble the delta coefficient at the IntegrationPoint set in Trans which is assumed to map to the de...
virtual void AssembleDeltaElementVect(const FiniteElement &fe, ElementTransformation &Trans, Vector &elvect)
Assemble the delta coefficient at the IntegrationPoint set in Trans which is assumed to map to the de...
virtual void AssembleRHSElementVect(const FiniteElement &el, ElementTransformation &Tr, Vector &elvect)
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...
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 GetDim() const
Returns the reference space dimension for the finite element.
virtual void CalcDShape(const IntegrationPoint &ip, DenseMatrix &dshape) const =0
Evaluate the gradients of all shape functions of a scalar finite element in reference space at the gi...
Geometry::Type GetGeomType() const
Returns the Geometry::Type of the reference element.
int Space() const
Returns the type of FunctionSpace on the element.
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...
void CalcPhysVShape(ElementTransformation &Trans, DenseMatrix &shape) const
Equivalent to the CalcVShape() method with the same arguments.
virtual void CalcShape(const IntegrationPoint &ip, Vector &shape) const =0
Evaluate the values of all shape functions of a scalar finite element in reference space at the given...
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...
int GetDof() const
Returns the number of degrees of freedom in the finite element.
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.
Class for integration point with weight.
Class for an integration rule - an Array of IntegrationPoint.
int GetNPoints() const
Returns the number of the points in the integration rule.
IntegrationPoint & IntPoint(int i)
Returns a reference to the i-th integration point.
const IntegrationRule & Get(int GeomType, int Order)
Returns an integration rule for given GeomType and Order.
virtual void AssembleElementMatrix(const FiniteElement &el, ElementTransformation &Trans, DenseMatrix &elmat)
virtual void Eval(DenseMatrix &K, ElementTransformation &T, const IntegrationPoint &ip)=0
Evaluate the matrix coefficient in the element described by T at the point ip, storing the result in ...
int Height() const
Get the height (size of output) of the Operator. Synonym with NumRows().
virtual real_t Eval(ElementTransformation &T, const IntegrationPoint &ip)
Evaluate the coefficient in the element described by T at the point ip.
const QuadratureFunction & GetQuadFunction() const
QuadratureSpaceBase * GetSpace()
Get the associated QuadratureSpaceBase object.
virtual void AssembleRHSElementVect(const FiniteElement &fe, ElementTransformation &Tr, Vector &elvect)
const IntegrationRule & GetIntRule(int idx) const
Return the IntegrationRule associated with entity idx.
virtual void AssembleRHSElementVect(const FiniteElement &el, ElementTransformation &Tr, Vector &elvect)
virtual void AssembleRHSElementVect(const FiniteElement &el, ElementTransformation &Tr, Vector &elvect)
int GetVDim()
Returns dimension of the vector.
virtual void Eval(Vector &V, ElementTransformation &T, const IntegrationPoint &ip)=0
Evaluate the vector coefficient in the element described by T at the point ip, storing the result in ...
virtual void EvalDelta(Vector &V, ElementTransformation &T, const IntegrationPoint &ip)
Return the specified direction vector multiplied by the value returned by DeltaCoefficient::EvalDelta...
virtual void AssembleRHSElementVect(const FiniteElement &el, ElementTransformation &Tr, Vector &elvect) override
virtual void AssembleDeltaElementVect(const FiniteElement &fe, ElementTransformation &Trans, Vector &elvect) override
Assemble the delta coefficient at the IntegrationPoint set in Trans which is assumed to map to the de...
virtual void AssembleRHSElementVect(const FiniteElement &el, ElementTransformation &Tr, Vector &elvect)
virtual void AssembleDeltaElementVect(const FiniteElement &fe, ElementTransformation &Trans, Vector &elvect)
Assemble the delta coefficient at the IntegrationPoint set in Trans which is assumed to map to the de...
virtual void AssembleRHSElementVect(const FiniteElement &el, ElementTransformation &Tr, Vector &elvect)
virtual void AssembleRHSElementVect(const FiniteElement &el, ElementTransformation &Tr, Vector &elvect)
virtual void AssembleRHSElementVect(const FiniteElement &el, ElementTransformation &Tr, Vector &elvect)
virtual void AssembleDeltaElementVect(const FiniteElement &fe, ElementTransformation &Trans, Vector &elvect)
Assemble the delta coefficient at the IntegrationPoint set in Trans which is assumed to map to the de...
virtual void AssembleRHSElementVect(const FiniteElement &el, ElementTransformation &Tr, Vector &elvect)
virtual void AssembleDeltaElementVect(const FiniteElement &fe, ElementTransformation &Trans, Vector &elvect)
Assemble the delta coefficient at the IntegrationPoint set in Trans which is assumed to map to the de...
virtual void AssembleDeltaElementVect(const FiniteElement &fe, ElementTransformation &Trans, Vector &elvect)
Assemble the delta coefficient at the IntegrationPoint set in Trans which is assumed to map to the de...
virtual void AssembleRHSElementVect(const FiniteElement &el, ElementTransformation &Tr, Vector &elvect)
virtual void Eval(Vector &V, ElementTransformation &T, const IntegrationPoint &ip)
Evaluate the vector coefficient in the element described by T at the point ip, storing the result in ...
const QuadratureFunction & GetQuadFunction() const
virtual void AssembleRHSElementVect(const FiniteElement &fe, ElementTransformation &Tr, Vector &elvect)
Vector & Set(const real_t a, const Vector &x)
(*this) = a * x
void SetSize(int s)
Resize the vector to size s.
real_t * GetData() const
Return a pointer to the beginning of the Vector data.
Vector & Add(const real_t a, const Vector &Va)
(*this) += a * Va
virtual void AssembleRHSElementVect(const FiniteElement &el, ElementTransformation &Tr, Vector &elvect)
void CalcOrtho(const DenseMatrix &J, Vector &n)
void Swap(Array< T > &, Array< T > &)
void mfem_error(const char *msg)
void Mult(const Table &A, const Table &B, Table &C)
C = A * B (as boolean matrices)
void MultVWt(const Vector &v, const Vector &w, DenseMatrix &VWt)
void add(const Vector &v1, const Vector &v2, Vector &v)
void CalcAdjugate(const DenseMatrix &a, DenseMatrix &adja)
IntegrationRules IntRules(0, Quadrature1D::GaussLegendre)
A global object with all integration rules (defined in intrules.cpp)
real_t p(const Vector &x, real_t t)