23 if (!maybe_delta || !maybe_delta->
IsDelta())
29 dlfi_delta.Append(maybe_delta);
41 flfi_marker.Append(NULL);
48 flfi_marker.Append(&bdr_attr_marker);
62 for (i = 0; i < fes -> GetNE(); i++)
64 fes -> GetElementVDofs (i, vdofs);
65 eltrans = fes -> GetElementTransformation (i);
66 for (
int k=0; k < dlfi.Size(); k++)
68 dlfi[k]->AssembleRHSElementVect(*fes->
GetFE(i), *eltrans, elemvect);
76 for (i = 0; i < fes -> GetNBE(); i++)
78 fes -> GetBdrElementVDofs (i, vdofs);
79 eltrans = fes -> GetBdrElementTransformation (i);
80 for (
int k=0; k < blfi.Size(); k++)
82 blfi[k]->AssembleRHSElementVect(*fes->
GetBE(i), *eltrans, elemvect);
96 for (
int k = 0; k < flfi.Size(); k++)
98 if (flfi_marker[k] == NULL)
104 MFEM_ASSERT(bdr_marker.
Size() == bdr_attr_marker.
Size(),
105 "invalid boundary marker for boundary face integrator #"
106 << k <<
", counting from zero");
107 for (
int i = 0; i < bdr_attr_marker.
Size(); i++)
109 bdr_attr_marker[i] |= bdr_marker[i];
113 for (i = 0; i < mesh->
GetNBE(); i++)
116 if (bdr_attr_marker[bdr_attr-1] == 0) {
continue; }
121 fes -> GetElementVDofs (tr -> Elem1No, vdofs);
122 for (
int k = 0; k < flfi.Size(); k++)
124 if (flfi_marker[k] &&
125 (*flfi_marker[k])[bdr_attr-1] == 0) {
continue; }
127 flfi[k] -> AssembleRHSElementVect (*fes->
GetFE(tr -> Elem1No),
140 ResetDeltaLocations();
145 if (dlfi_delta.Size() == 0) {
return; }
147 if (!HaveDeltaLocations())
152 for (
int i = 0; i < centers.Width(); i++)
155 dlfi_delta[i]->GetDeltaCenter(center);
156 MFEM_VERIFY(center.
Size() == sdim,
157 "Point dim " << center.
Size() <<
158 " does not match space dim " << sdim);
165 for (
int i = 0; i < dlfi_delta.Size(); i++)
167 int elem_id = dlfi_delta_elem_id[i];
170 if (elem_id < 0) {
continue; }
177 dlfi_delta[i]->AssembleDeltaElementVect(*fes->
GetFE(elem_id),
Trans,
186 for (k=0; k < dlfi_delta.Size(); k++) {
delete dlfi_delta[k]; }
187 for (k=0; k < dlfi.Size(); k++) {
delete dlfi[k]; }
188 for (k=0; k < blfi.Size(); k++) {
delete blfi[k]; }
189 for (k=0; k < flfi.Size(); k++) {
delete flfi[k]; }
int Size() const
Logical size of the array.
int GetBdrAttribute(int i) const
Return the attribute of boundary element i.
void NewDataAndSize(double *d, int s)
Set the Vector data and size, deleting the old data, if owned.
int GetNBE() const
Returns number of boundary elements.
void GetElementVDofs(int i, Array< int > &vdofs) const
Returns indexes of degrees of freedom in array dofs for i'th element.
Data type dense matrix using column-major storage.
int Size() const
Returns the size of the vector.
Vector & operator=(const double *v)
Copy Size() entries from v.
Mesh * GetMesh() const
Returns the mesh.
T Max() const
Find the maximal element in the array, using the comparison operator < for class T.
FaceElementTransformations * GetBdrFaceTransformations(int BdrElemNo)
bool IsDelta() const
Returns true if the derived class instance uses a delta coefficient.
void AddElementVector(const Array< int > &dofs, const Vector &elemvect)
Add (element) subvector to the vector.
int SpaceDimension() const
ElementTransformation * GetElementTransformation(int i) const
Returns ElementTransformation for the i'th element.
Array< int > bdr_attributes
A list of all unique boundary attributes used by the Mesh.
void GetColumnReference(int c, Vector &col)
Abstract class for integrators that support delta coefficients.
Class for integration point with weight.
const FiniteElement * GetFE(int i) const
Returns pointer to the FiniteElement associated with i'th element.
virtual int FindPoints(DenseMatrix &point_mat, Array< int > &elem_ids, Array< IntegrationPoint > &ips, bool warn=true, InverseElementTransformation *inv_trans=NULL)
Find the ids of the elements that contain the given points, and their corresponding reference coordin...
const FiniteElement * GetBE(int i) const
Returns pointer to the FiniteElement for the i'th boundary element.