MFEM  v3.4
Finite element discretization library
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Pages
Classes | Public Member Functions | Static Public Member Functions | Protected Member Functions | Static Protected Member Functions | Protected Attributes | List of all members
mfem::FiniteElementSpace Class Reference

Class FiniteElementSpace - responsible for providing FEM view of the mesh, mainly managing the set of degrees of freedom. More...

#include <fespace.hpp>

Inheritance diagram for mfem::FiniteElementSpace:
[legend]
Collaboration diagram for mfem::FiniteElementSpace:
[legend]

Classes

class  RefinementOperator
 GridFunction interpolation operator applicable after mesh refinement. More...
 

Public Member Functions

 FiniteElementSpace ()
 Default constructor: the object is invalid until initialized using the method Load(). More...
 
 FiniteElementSpace (const FiniteElementSpace &orig, Mesh *mesh=NULL, const FiniteElementCollection *fec=NULL)
 Copy constructor: deep copy all data from orig except the Mesh, the FiniteElementCollection, ans some derived data. More...
 
 FiniteElementSpace (Mesh *mesh, const FiniteElementCollection *fec, int vdim=1, int ordering=Ordering::byNODES)
 
 FiniteElementSpace (Mesh *mesh, NURBSExtension *ext, const FiniteElementCollection *fec, int vdim=1, int ordering=Ordering::byNODES)
 Construct a NURBS FE space based on the given NURBSExtension, ext. More...
 
MeshGetMesh () const
 Returns the mesh. More...
 
const NURBSExtensionGetNURBSext () const
 
NURBSExtensionGetNURBSext ()
 
NURBSExtensionStealNURBSext ()
 
bool Conforming () const
 
bool Nonconforming () const
 
const SparseMatrixGetConformingProlongation () const
 
const SparseMatrixGetConformingRestriction () const
 
virtual const OperatorGetProlongationMatrix () const
 
virtual const SparseMatrixGetRestrictionMatrix () const
 
int GetVDim () const
 Returns vector dimension. More...
 
int GetOrder (int i) const
 Returns the order of the i'th finite element. More...
 
int GetFaceOrder (int i) const
 Returns the order of the i'th face finite element. More...
 
int GetNDofs () const
 Returns number of degrees of freedom. More...
 
int GetVSize () const
 Return the number of vector dofs, i.e. GetNDofs() x GetVDim(). More...
 
virtual int GetTrueVSize () const
 Return the number of vector true (conforming) dofs. More...
 
int GetNConformingDofs () const
 
int GetConformingVSize () const
 
Ordering::Type GetOrdering () const
 Return the ordering method. More...
 
const FiniteElementCollectionFEColl () const
 
int GetNVDofs () const
 
int GetNEDofs () const
 
int GetNFDofs () const
 
int GetNV () const
 Returns number of vertices in the mesh. More...
 
int GetNE () const
 Returns number of elements in the mesh. More...
 
int GetNF () const
 Returns number of faces (i.e. co-dimension 1 entities) in the mesh. More...
 
int GetNBE () const
 Returns number of boundary elements in the mesh. More...
 
int GetElementType (int i) const
 Returns the type of element i. More...
 
void GetElementVertices (int i, Array< int > &vertices) const
 Returns the vertices of element i. More...
 
int GetBdrElementType (int i) const
 Returns the type of boundary element i. More...
 
ElementTransformationGetElementTransformation (int i) const
 Returns ElementTransformation for the i-th element. More...
 
void GetElementTransformation (int i, IsoparametricTransformation *ElTr)
 Returns the transformation defining the i-th element in the user-defined variable ElTr. More...
 
ElementTransformationGetBdrElementTransformation (int i) const
 Returns ElementTransformation for the i-th boundary element. More...
 
int GetAttribute (int i) const
 
int GetBdrAttribute (int i) const
 
virtual void GetElementDofs (int i, Array< int > &dofs) const
 Returns indexes of degrees of freedom in array dofs for i'th element. More...
 
virtual void GetBdrElementDofs (int i, Array< int > &dofs) const
 Returns indexes of degrees of freedom for i'th boundary element. More...
 
virtual void GetFaceDofs (int i, Array< int > &dofs) const
 
void GetEdgeDofs (int i, Array< int > &dofs) const
 
void GetVertexDofs (int i, Array< int > &dofs) const
 
void GetElementInteriorDofs (int i, Array< int > &dofs) const
 
void GetFaceInteriorDofs (int i, Array< int > &dofs) const
 
int GetNumElementInteriorDofs (int i) const
 
void GetEdgeInteriorDofs (int i, Array< int > &dofs) const
 
void DofsToVDofs (Array< int > &dofs, int ndofs=-1) const
 
void DofsToVDofs (int vd, Array< int > &dofs, int ndofs=-1) const
 
int DofToVDof (int dof, int vd, int ndofs=-1) const
 
int VDofToDof (int vdof) const
 
void GetElementVDofs (int i, Array< int > &vdofs) const
 Returns indexes of degrees of freedom in array dofs for i'th element. More...
 
void GetBdrElementVDofs (int i, Array< int > &vdofs) const
 Returns indexes of degrees of freedom for i'th boundary element. More...
 
void GetFaceVDofs (int i, Array< int > &vdofs) const
 Returns indexes of degrees of freedom for i'th face element (2D and 3D). More...
 
void GetEdgeVDofs (int i, Array< int > &vdofs) const
 Returns indexes of degrees of freedom for i'th edge. More...
 
void GetVertexVDofs (int i, Array< int > &vdofs) const
 
void GetElementInteriorVDofs (int i, Array< int > &vdofs) const
 
void GetEdgeInteriorVDofs (int i, Array< int > &vdofs) const
 
void RebuildElementToDofTable ()
 
void ReorderElementToDofTable ()
 Reorder the scalar DOFs based on the element ordering. More...
 
void BuildDofToArrays ()
 
const TableGetElementToDofTable () const
 
const TableGetBdrElementToDofTable () const
 
int GetElementForDof (int i) const
 
int GetLocalDofForDof (int i) const
 
const FiniteElementGetFE (int i) const
 Returns pointer to the FiniteElement associated with i'th element. More...
 
const FiniteElementGetBE (int i) const
 Returns pointer to the FiniteElement for the i'th boundary element. More...
 
const FiniteElementGetFaceElement (int i) const
 
const FiniteElementGetEdgeElement (int i) const
 
const FiniteElementGetTraceElement (int i, int geom_type) const
 Return the trace element from element 'i' to the given 'geom_type'. More...
 
virtual void GetEssentialVDofs (const Array< int > &bdr_attr_is_ess, Array< int > &ess_vdofs, int component=-1) const
 
virtual void GetEssentialTrueDofs (const Array< int > &bdr_attr_is_ess, Array< int > &ess_tdof_list, int component=-1)
 
void ConvertToConformingVDofs (const Array< int > &dofs, Array< int > &cdofs)
 
void ConvertFromConformingVDofs (const Array< int > &cdofs, Array< int > &dofs)
 
SparseMatrixD2C_GlobalRestrictionMatrix (FiniteElementSpace *cfes)
 
SparseMatrixD2Const_GlobalRestrictionMatrix (FiniteElementSpace *cfes)
 
SparseMatrixH2L_GlobalRestrictionMatrix (FiniteElementSpace *lfes)
 
void GetTransferOperator (const FiniteElementSpace &coarse_fes, OperatorHandle &T) const
 Construct and return an Operator that can be used to transfer GridFunction data from coarse_fes, defined on a coarse mesh, to this FE space, defined on a refined mesh. More...
 
virtual void GetTrueTransferOperator (const FiniteElementSpace &coarse_fes, OperatorHandle &T) const
 Construct and return an Operator that can be used to transfer true-dof data from coarse_fes, defined on a coarse mesh, to this FE space, defined on a refined mesh. More...
 
virtual void Update (bool want_transform=true)
 
const OperatorGetUpdateOperator ()
 Get the GridFunction update operator. More...
 
void GetUpdateOperator (OperatorHandle &T)
 Return the update operator in the given OperatorHandle, T. More...
 
void SetUpdateOperatorOwner (bool own)
 Set the ownership of the update operator: if set to false, the Operator returned by GetUpdateOperator() must be deleted outside the FiniteElementSpace. More...
 
void SetUpdateOperatorType (Operator::Type tid)
 Specify the Operator::Type to be used by the update operators. More...
 
virtual void UpdatesFinished ()
 Free the GridFunction update operator (if any), to save memory. More...
 
long GetSequence () const
 Return update counter (see Mesh::sequence) More...
 
void Save (std::ostream &out) const
 
FiniteElementCollectionLoad (Mesh *m, std::istream &input)
 Read a FiniteElementSpace from a stream. The returned FiniteElementCollection is owned by the caller. More...
 
virtual ~FiniteElementSpace ()
 

Static Public Member Functions

static void AdjustVDofs (Array< int > &vdofs)
 
static void MarkerToList (const Array< int > &marker, Array< int > &list)
 Convert a Boolean marker array to a list containing all marked indices. More...
 
static void ListToMarker (const Array< int > &list, int marker_size, Array< int > &marker, int mark_val=-1)
 

Protected Member Functions

void UpdateNURBS ()
 
void Construct ()
 
void Destroy ()
 
void BuildElementToDofTable () const
 
void GetEntityDofs (int entity, int index, Array< int > &dofs) const
 Helper to get vertex, edge or face DOFs (entity=0,1,2 resp.). More...
 
void BuildConformingInterpolation () const
 Calculate the cP and cR matrices for a nonconforming mesh. More...
 
void MakeVDimMatrix (SparseMatrix &mat) const
 
SparseMatrixRefinementMatrix_main (const int coarse_ndofs, const Table &coarse_elem_dof, const DenseTensor &localP) const
 
void GetLocalRefinementMatrices (DenseTensor &localP) const
 
void GetLocalDerefinementMatrices (DenseTensor &localR) const
 
SparseMatrixRefinementMatrix (int old_ndofs, const Table *old_elem_dof)
 
SparseMatrixDerefinementMatrix (int old_ndofs, const Table *old_elem_dof)
 Calculate GridFunction restriction matrix after mesh derefinement. More...
 
void GetLocalRefinementMatrices (const FiniteElementSpace &coarse_fes, DenseTensor &localP) const
 
void Constructor (Mesh *mesh, NURBSExtension *ext, const FiniteElementCollection *fec, int vdim=1, int ordering=Ordering::byNODES)
 Help function for constructors + Load(). More...
 

Static Protected Member Functions

static int DecodeDof (int dof, double &sign)
 Helper to remove encoded sign from a DOF. More...
 
static void AddDependencies (SparseMatrix &deps, Array< int > &master_dofs, Array< int > &slave_dofs, DenseMatrix &I)
 
static bool DofFinalizable (int dof, const Array< bool > &finalized, const SparseMatrix &deps)
 

Protected Attributes

Meshmesh
 The mesh that FE space lives on (not owned). More...
 
const FiniteElementCollectionfec
 Associated FE collection (not owned). More...
 
int vdim
 Vector dimension (number of unknowns per degree of freedom). More...
 
Ordering::Type ordering
 
int ndofs
 Number of degrees of freedom. Number of unknowns is ndofs * vdim. More...
 
int nvdofs
 
int nedofs
 
int nfdofs
 
int nbdofs
 
int * fdofs
 
int * bdofs
 
Tableelem_dof
 
TablebdrElem_dof
 
Array< int > dof_elem_array
 
Array< int > dof_ldof_array
 
NURBSExtensionNURBSext
 
int own_ext
 
SparseMatrixcP
 
SparseMatrixcR
 Conforming restriction matrix such that cR.cP=I. More...
 
bool cP_is_set
 
OperatorHandle Th
 Transformation to apply to GridFunctions after space Update(). More...
 
long sequence
 

Detailed Description

Class FiniteElementSpace - responsible for providing FEM view of the mesh, mainly managing the set of degrees of freedom.

Definition at line 66 of file fespace.hpp.

Constructor & Destructor Documentation

mfem::FiniteElementSpace::FiniteElementSpace ( )

Default constructor: the object is invalid until initialized using the method Load().

Definition at line 58 of file fespace.cpp.

mfem::FiniteElementSpace::FiniteElementSpace ( const FiniteElementSpace orig,
Mesh mesh = NULL,
const FiniteElementCollection fec = NULL 
)

Copy constructor: deep copy all data from orig except the Mesh, the FiniteElementCollection, ans some derived data.

If the mesh or fec pointers are NULL (default), then the new FiniteElementSpace will reuse the respective pointers from orig. If any of these pointers is not NULL, the given pointer will be used instead of the one used by orig.

Note
The objects pointed to by the mesh and fec parameters must be either the same objects as the ones used by orig, or copies of them. Otherwise, the behavior is undefined.
Derived data objects, such as the conforming prolongation and restriction matrices, and the update operator, will not be copied, even if they are created in the orig object.

Definition at line 69 of file fespace.cpp.

mfem::FiniteElementSpace::FiniteElementSpace ( Mesh mesh,
const FiniteElementCollection fec,
int  vdim = 1,
int  ordering = Ordering::byNODES 
)
inline

Definition at line 209 of file fespace.hpp.

mfem::FiniteElementSpace::FiniteElementSpace ( Mesh mesh,
NURBSExtension ext,
const FiniteElementCollection fec,
int  vdim = 1,
int  ordering = Ordering::byNODES 
)
inline

Construct a NURBS FE space based on the given NURBSExtension, ext.

Note
If the pointer ext is NULL, this constructor is equivalent to the standard constructor with the same arguments minus the NURBSExtension, ext.

Definition at line 218 of file fespace.hpp.

mfem::FiniteElementSpace::~FiniteElementSpace ( )
virtual

Definition at line 1631 of file fespace.cpp.

Member Function Documentation

void mfem::FiniteElementSpace::AddDependencies ( SparseMatrix deps,
Array< int > &  master_dofs,
Array< int > &  slave_dofs,
DenseMatrix I 
)
staticprotected

Definition at line 526 of file fespace.cpp.

void mfem::FiniteElementSpace::AdjustVDofs ( Array< int > &  vdofs)
static

Definition at line 158 of file fespace.cpp.

void mfem::FiniteElementSpace::BuildConformingInterpolation ( ) const
protected

Calculate the cP and cR matrices for a nonconforming mesh.

Definition at line 576 of file fespace.cpp.

void mfem::FiniteElementSpace::BuildDofToArrays ( )

Definition at line 262 of file fespace.cpp.

void mfem::FiniteElementSpace::BuildElementToDofTable ( ) const
protected

Definition at line 213 of file fespace.cpp.

bool mfem::FiniteElementSpace::Conforming ( ) const
inline

Definition at line 230 of file fespace.hpp.

void mfem::FiniteElementSpace::Construct ( )
protected

Definition at line 1165 of file fespace.cpp.

void mfem::FiniteElementSpace::Constructor ( Mesh mesh,
NURBSExtension ext,
const FiniteElementCollection fec,
int  vdim = 1,
int  ordering = Ordering::byNODES 
)
protected

Help function for constructors + Load().

Definition at line 1092 of file fespace.cpp.

void mfem::FiniteElementSpace::ConvertFromConformingVDofs ( const Array< int > &  cdofs,
Array< int > &  dofs 
)

For a partially conforming FE space, convert a marker array (nonzero entries are true) on the conforming dofs to a marker array on the (partially conforming) dofs. A dof is marked iff it depends on a marked conforming dofs, where dependency is defined by the ConformingRestriction matrix; in other words, a dof is marked iff it corresponds to a marked conforming dof.

Definition at line 420 of file fespace.cpp.

void mfem::FiniteElementSpace::ConvertToConformingVDofs ( const Array< int > &  dofs,
Array< int > &  cdofs 
)

For a partially conforming FE space, convert a marker array (nonzero entries are true) on the partially conforming dofs to a marker array on the conforming dofs. A conforming dofs is marked iff at least one of its dependent dofs is marked.

Definition at line 412 of file fespace.cpp.

SparseMatrix * mfem::FiniteElementSpace::D2C_GlobalRestrictionMatrix ( FiniteElementSpace cfes)

Generate the global restriction matrix from a discontinuous FE space to the continuous FE space of the same polynomial degree.

Definition at line 429 of file fespace.cpp.

SparseMatrix * mfem::FiniteElementSpace::D2Const_GlobalRestrictionMatrix ( FiniteElementSpace cfes)

Generate the global restriction matrix from a discontinuous FE space to the piecewise constant FE space.

Definition at line 461 of file fespace.cpp.

static int mfem::FiniteElementSpace::DecodeDof ( int  dof,
double &  sign 
)
inlinestaticprotected

Helper to remove encoded sign from a DOF.

Definition at line 118 of file fespace.hpp.

SparseMatrix * mfem::FiniteElementSpace::DerefinementMatrix ( int  old_ndofs,
const Table old_elem_dof 
)
protected

Calculate GridFunction restriction matrix after mesh derefinement.

Definition at line 1011 of file fespace.cpp.

void mfem::FiniteElementSpace::Destroy ( )
protected

Definition at line 1636 of file fespace.cpp.

bool mfem::FiniteElementSpace::DofFinalizable ( int  dof,
const Array< bool > &  finalized,
const SparseMatrix deps 
)
staticprotected

Definition at line 550 of file fespace.cpp.

void mfem::FiniteElementSpace::DofsToVDofs ( Array< int > &  dofs,
int  ndofs = -1 
) const

Definition at line 106 of file fespace.cpp.

void mfem::FiniteElementSpace::DofsToVDofs ( int  vd,
Array< int > &  dofs,
int  ndofs = -1 
) const

Definition at line 121 of file fespace.cpp.

int mfem::FiniteElementSpace::DofToVDof ( int  dof,
int  vd,
int  ndofs = -1 
) const

Definition at line 142 of file fespace.cpp.

const FiniteElementCollection* mfem::FiniteElementSpace::FEColl ( ) const
inline

Definition at line 267 of file fespace.hpp.

int mfem::FiniteElementSpace::GetAttribute ( int  i) const
inline

Definition at line 313 of file fespace.hpp.

int mfem::FiniteElementSpace::GetBdrAttribute ( int  i) const
inline

Definition at line 315 of file fespace.hpp.

void mfem::FiniteElementSpace::GetBdrElementDofs ( int  i,
Array< int > &  dofs 
) const
virtual

Returns indexes of degrees of freedom for i'th boundary element.

Reimplemented in mfem::ParFiniteElementSpace.

Definition at line 1348 of file fespace.cpp.

const Table& mfem::FiniteElementSpace::GetBdrElementToDofTable ( ) const
inline

Definition at line 385 of file fespace.hpp.

ElementTransformation* mfem::FiniteElementSpace::GetBdrElementTransformation ( int  i) const
inline

Returns ElementTransformation for the i-th boundary element.

Definition at line 310 of file fespace.hpp.

int mfem::FiniteElementSpace::GetBdrElementType ( int  i) const
inline

Returns the type of boundary element i.

Definition at line 297 of file fespace.hpp.

void mfem::FiniteElementSpace::GetBdrElementVDofs ( int  i,
Array< int > &  vdofs 
) const

Returns indexes of degrees of freedom for i'th boundary element.

Definition at line 177 of file fespace.cpp.

const FiniteElement * mfem::FiniteElementSpace::GetBE ( int  i) const

Returns pointer to the FiniteElement for the i'th boundary element.

Definition at line 1571 of file fespace.cpp.

const SparseMatrix * mfem::FiniteElementSpace::GetConformingProlongation ( ) const

Definition at line 761 of file fespace.cpp.

const SparseMatrix * mfem::FiniteElementSpace::GetConformingRestriction ( ) const

Definition at line 768 of file fespace.cpp.

int mfem::FiniteElementSpace::GetConformingVSize ( ) const
inline

Definition at line 262 of file fespace.hpp.

void mfem::FiniteElementSpace::GetEdgeDofs ( int  i,
Array< int > &  dofs 
) const

Returns the indexes of the degrees of freedom for i'th edge including the dofs for the vertices of the edge.

Definition at line 1490 of file fespace.cpp.

const FiniteElement * mfem::FiniteElementSpace::GetEdgeElement ( int  i) const

Definition at line 1620 of file fespace.cpp.

void mfem::FiniteElementSpace::GetEdgeInteriorDofs ( int  i,
Array< int > &  dofs 
) const

Definition at line 1544 of file fespace.cpp.

void mfem::FiniteElementSpace::GetEdgeInteriorVDofs ( int  i,
Array< int > &  vdofs 
) const

Definition at line 207 of file fespace.cpp.

void mfem::FiniteElementSpace::GetEdgeVDofs ( int  i,
Array< int > &  vdofs 
) const

Returns indexes of degrees of freedom for i'th edge.

Definition at line 189 of file fespace.cpp.

void mfem::FiniteElementSpace::GetElementDofs ( int  i,
Array< int > &  dofs 
) const
virtual

Returns indexes of degrees of freedom in array dofs for i'th element.

Reimplemented in mfem::ParFiniteElementSpace.

Definition at line 1233 of file fespace.cpp.

int mfem::FiniteElementSpace::GetElementForDof ( int  i) const
inline

Definition at line 387 of file fespace.hpp.

void mfem::FiniteElementSpace::GetElementInteriorDofs ( int  i,
Array< int > &  dofs 
) const

Definition at line 1531 of file fespace.cpp.

void mfem::FiniteElementSpace::GetElementInteriorVDofs ( int  i,
Array< int > &  vdofs 
) const

Definition at line 201 of file fespace.cpp.

const Table& mfem::FiniteElementSpace::GetElementToDofTable ( ) const
inline

Definition at line 384 of file fespace.hpp.

ElementTransformation* mfem::FiniteElementSpace::GetElementTransformation ( int  i) const
inline

Returns ElementTransformation for the i-th element.

Definition at line 301 of file fespace.hpp.

void mfem::FiniteElementSpace::GetElementTransformation ( int  i,
IsoparametricTransformation ElTr 
)
inline

Returns the transformation defining the i-th element in the user-defined variable ElTr.

Definition at line 306 of file fespace.hpp.

int mfem::FiniteElementSpace::GetElementType ( int  i) const
inline

Returns the type of element i.

Definition at line 289 of file fespace.hpp.

void mfem::FiniteElementSpace::GetElementVDofs ( int  i,
Array< int > &  vdofs 
) const

Returns indexes of degrees of freedom in array dofs for i'th element.

Definition at line 171 of file fespace.cpp.

void mfem::FiniteElementSpace::GetElementVertices ( int  i,
Array< int > &  vertices 
) const
inline

Returns the vertices of element i.

Definition at line 293 of file fespace.hpp.

void mfem::FiniteElementSpace::GetEntityDofs ( int  entity,
int  index,
Array< int > &  dofs 
) const
protected

Helper to get vertex, edge or face DOFs (entity=0,1,2 resp.).

Definition at line 565 of file fespace.cpp.

void mfem::FiniteElementSpace::GetEssentialTrueDofs ( const Array< int > &  bdr_attr_is_ess,
Array< int > &  ess_tdof_list,
int  component = -1 
)
virtual

Get a list of essential true dofs, ess_tdof_list, corresponding to the boundary attributes marked in the array bdr_attr_is_ess. For spaces with 'vdim' > 1, the 'component' parameter can be used to restricts the marked tDOFs to the specified component.

Reimplemented in mfem::ParFiniteElementSpace.

Definition at line 365 of file fespace.cpp.

void mfem::FiniteElementSpace::GetEssentialVDofs ( const Array< int > &  bdr_attr_is_ess,
Array< int > &  ess_vdofs,
int  component = -1 
) const
virtual

Mark degrees of freedom associated with boundary elements with the specified boundary attributes (marked in 'bdr_attr_is_ess'). For spaces with 'vdim' > 1, the 'component' parameter can be used to restricts the marked vDOFs to the specified component.

Reimplemented in mfem::ParFiniteElementSpace.

Definition at line 296 of file fespace.cpp.

void mfem::FiniteElementSpace::GetFaceDofs ( int  i,
Array< int > &  dofs 
) const
virtual

Returns the indexes of the degrees of freedom for i'th face including the dofs for the edges and the vertices of the face.

Reimplemented in mfem::ParFiniteElementSpace.

Definition at line 1431 of file fespace.cpp.

const FiniteElement * mfem::FiniteElementSpace::GetFaceElement ( int  i) const

Definition at line 1597 of file fespace.cpp.

void mfem::FiniteElementSpace::GetFaceInteriorDofs ( int  i,
Array< int > &  dofs 
) const

Definition at line 1556 of file fespace.cpp.

int mfem::FiniteElementSpace::GetFaceOrder ( int  i) const

Returns the order of the i'th face finite element.

Definition at line 100 of file fespace.cpp.

void mfem::FiniteElementSpace::GetFaceVDofs ( int  i,
Array< int > &  vdofs 
) const

Returns indexes of degrees of freedom for i'th face element (2D and 3D).

Definition at line 183 of file fespace.cpp.

const FiniteElement * mfem::FiniteElementSpace::GetFE ( int  i) const

Returns pointer to the FiniteElement associated with i'th element.

Definition at line 1335 of file fespace.cpp.

void mfem::FiniteElementSpace::GetLocalDerefinementMatrices ( DenseTensor localR) const
protected

Definition at line 961 of file fespace.cpp.

int mfem::FiniteElementSpace::GetLocalDofForDof ( int  i) const
inline

Definition at line 388 of file fespace.hpp.

void mfem::FiniteElementSpace::GetLocalRefinementMatrices ( DenseTensor localP) const
protected

Definition at line 832 of file fespace.cpp.

void mfem::FiniteElementSpace::GetLocalRefinementMatrices ( const FiniteElementSpace coarse_fes,
DenseTensor localP 
) const
protected

Definition at line 1066 of file fespace.cpp.

Mesh* mfem::FiniteElementSpace::GetMesh ( ) const
inline

Returns the mesh.

Definition at line 224 of file fespace.hpp.

int mfem::FiniteElementSpace::GetNBE ( ) const
inline

Returns number of boundary elements in the mesh.

Definition at line 286 of file fespace.hpp.

int mfem::FiniteElementSpace::GetNConformingDofs ( ) const

Returns the number of conforming ("true") degrees of freedom (if the space is on a nonconforming mesh with hanging nodes).

Definition at line 775 of file fespace.cpp.

int mfem::FiniteElementSpace::GetNDofs ( ) const
inline

Returns number of degrees of freedom.

Definition at line 250 of file fespace.hpp.

int mfem::FiniteElementSpace::GetNE ( ) const
inline

Returns number of elements in the mesh.

Definition at line 277 of file fespace.hpp.

int mfem::FiniteElementSpace::GetNEDofs ( ) const
inline

Definition at line 270 of file fespace.hpp.

int mfem::FiniteElementSpace::GetNF ( ) const
inline

Returns number of faces (i.e. co-dimension 1 entities) in the mesh.

The co-dimension 1 entities are those that have dimension 1 less than the mesh dimension, e.g. for a 2D mesh, the faces are the 1D entities, i.e. the edges.

Definition at line 283 of file fespace.hpp.

int mfem::FiniteElementSpace::GetNFDofs ( ) const
inline

Definition at line 271 of file fespace.hpp.

int mfem::FiniteElementSpace::GetNumElementInteriorDofs ( int  i) const
inline

Definition at line 337 of file fespace.hpp.

const NURBSExtension* mfem::FiniteElementSpace::GetNURBSext ( ) const
inline

Definition at line 226 of file fespace.hpp.

NURBSExtension* mfem::FiniteElementSpace::GetNURBSext ( )
inline

Definition at line 227 of file fespace.hpp.

int mfem::FiniteElementSpace::GetNV ( ) const
inline

Returns number of vertices in the mesh.

Definition at line 274 of file fespace.hpp.

int mfem::FiniteElementSpace::GetNVDofs ( ) const
inline

Definition at line 269 of file fespace.hpp.

int mfem::FiniteElementSpace::GetOrder ( int  i) const

Returns the order of the i'th finite element.

Definition at line 94 of file fespace.cpp.

Ordering::Type mfem::FiniteElementSpace::GetOrdering ( ) const
inline

Return the ordering method.

Definition at line 265 of file fespace.hpp.

virtual const Operator* mfem::FiniteElementSpace::GetProlongationMatrix ( ) const
inlinevirtual

Reimplemented in mfem::ParFiniteElementSpace.

Definition at line 236 of file fespace.hpp.

virtual const SparseMatrix* mfem::FiniteElementSpace::GetRestrictionMatrix ( ) const
inlinevirtual

Reimplemented in mfem::ParFiniteElementSpace.

Definition at line 238 of file fespace.hpp.

long mfem::FiniteElementSpace::GetSequence ( ) const
inline

Return update counter (see Mesh::sequence)

Definition at line 517 of file fespace.hpp.

const FiniteElement * mfem::FiniteElementSpace::GetTraceElement ( int  i,
int  geom_type 
) const

Return the trace element from element 'i' to the given 'geom_type'.

Definition at line 1625 of file fespace.cpp.

void mfem::FiniteElementSpace::GetTransferOperator ( const FiniteElementSpace coarse_fes,
OperatorHandle T 
) const

Construct and return an Operator that can be used to transfer GridFunction data from coarse_fes, defined on a coarse mesh, to this FE space, defined on a refined mesh.

It is assumed that the mesh of this FE space is a refinement of the mesh of coarse_fes and the CoarseFineTransformations returned by the method Mesh::GetRefinementTransforms() of the refined mesh are set accordingly. The Operator::Type of T can be set to request an Operator of the set type. Currently, only Operator::MFEM_SPARSEMAT and Operator::ANY_TYPE (matrix-free) are supported. When Operator::ANY_TYPE is requested, the choice of the particular Operator sub-class is left to the method. This method also works in parallel because the transfer operator is local to the MPI task when the input is a synchronized ParGridFunction.

Definition at line 1659 of file fespace.cpp.

void mfem::FiniteElementSpace::GetTrueTransferOperator ( const FiniteElementSpace coarse_fes,
OperatorHandle T 
) const
virtual

Construct and return an Operator that can be used to transfer true-dof data from coarse_fes, defined on a coarse mesh, to this FE space, defined on a refined mesh.

This method calls GetTransferOperator() and multiplies the result by the prolongation operator of coarse_fes on the right, and by the restriction operator of this FE space on the left.

The Operator::Type of T can be set to request an Operator of the set type. In serial, the supported types are: Operator::MFEM_SPARSEMAT and Operator::ANY_TYPE (matrix-free). In parallel, the supported types are: Operator::Hypre_ParCSR and Operator::ANY_TYPE. Any other type is treated as Operator::ANY_TYPE: the operator representation choice is made by this method.

Reimplemented in mfem::ParFiniteElementSpace.

Definition at line 1678 of file fespace.cpp.

virtual int mfem::FiniteElementSpace::GetTrueVSize ( ) const
inlinevirtual

Return the number of vector true (conforming) dofs.

Reimplemented in mfem::ParFiniteElementSpace.

Definition at line 256 of file fespace.hpp.

const Operator* mfem::FiniteElementSpace::GetUpdateOperator ( )
inline

Get the GridFunction update operator.

Definition at line 493 of file fespace.hpp.

void mfem::FiniteElementSpace::GetUpdateOperator ( OperatorHandle T)
inline

Return the update operator in the given OperatorHandle, T.

Definition at line 496 of file fespace.hpp.

int mfem::FiniteElementSpace::GetVDim ( ) const
inline

Returns vector dimension.

Definition at line 242 of file fespace.hpp.

void mfem::FiniteElementSpace::GetVertexDofs ( int  i,
Array< int > &  dofs 
) const

Definition at line 1519 of file fespace.cpp.

void mfem::FiniteElementSpace::GetVertexVDofs ( int  i,
Array< int > &  vdofs 
) const

Definition at line 195 of file fespace.cpp.

int mfem::FiniteElementSpace::GetVSize ( ) const
inline

Return the number of vector dofs, i.e. GetNDofs() x GetVDim().

Definition at line 253 of file fespace.hpp.

SparseMatrix * mfem::FiniteElementSpace::H2L_GlobalRestrictionMatrix ( FiniteElementSpace lfes)

Construct the restriction matrix from the FE space given by (*this) to the lower degree FE space given by (*lfes) which is defined on the same mesh.

Definition at line 492 of file fespace.cpp.

void mfem::FiniteElementSpace::ListToMarker ( const Array< int > &  list,
int  marker_size,
Array< int > &  marker,
int  mark_val = -1 
)
static

Convert an array of indices (list) to a Boolean marker array where all indices in the list are marked with the given value and the rest are set to zero.

Definition at line 401 of file fespace.cpp.

FiniteElementCollection * mfem::FiniteElementSpace::Load ( Mesh m,
std::istream &  input 
)

Read a FiniteElementSpace from a stream. The returned FiniteElementCollection is owned by the caller.

Definition at line 1857 of file fespace.cpp.

void mfem::FiniteElementSpace::MakeVDimMatrix ( SparseMatrix mat) const
protected

Definition at line 733 of file fespace.cpp.

void mfem::FiniteElementSpace::MarkerToList ( const Array< int > &  marker,
Array< int > &  list 
)
static

Convert a Boolean marker array to a list containing all marked indices.

Definition at line 384 of file fespace.cpp.

bool mfem::FiniteElementSpace::Nonconforming ( ) const
inline

Definition at line 231 of file fespace.hpp.

void mfem::FiniteElementSpace::RebuildElementToDofTable ( )

Definition at line 235 of file fespace.cpp.

SparseMatrix * mfem::FiniteElementSpace::RefinementMatrix ( int  old_ndofs,
const Table old_elem_dof 
)
protected

Calculate explicit GridFunction interpolation matrix (after mesh refinement). NOTE: consider using the RefinementOperator class instead of the fully assembled matrix, which can take a lot of memory.

Definition at line 855 of file fespace.cpp.

SparseMatrix * mfem::FiniteElementSpace::RefinementMatrix_main ( const int  coarse_ndofs,
const Table coarse_elem_dof,
const DenseTensor localP 
) const
protected

Definition at line 781 of file fespace.cpp.

void mfem::FiniteElementSpace::ReorderElementToDofTable ( )

Reorder the scalar DOFs based on the element ordering.

The new ordering is constructed as follows: 1) loop over all elements as ordered in the Mesh; 2) for each element, assign new indices to all of its current DOFs that are still unassigned; the new indices we assign are simply the sequence 0,1,2,...; if there are any signed DOFs their sign is preserved.

Definition at line 242 of file fespace.cpp.

void mfem::FiniteElementSpace::Save ( std::ostream &  out) const

Definition at line 1796 of file fespace.cpp.

void mfem::FiniteElementSpace::SetUpdateOperatorOwner ( bool  own)
inline

Set the ownership of the update operator: if set to false, the Operator returned by GetUpdateOperator() must be deleted outside the FiniteElementSpace.

The update operator ownership is automatically reset to true when a new update operator is created by the Update() method.

Definition at line 503 of file fespace.hpp.

void mfem::FiniteElementSpace::SetUpdateOperatorType ( Operator::Type  tid)
inline

Specify the Operator::Type to be used by the update operators.

The default type is Operator::ANY_TYPE which leaves the choice to this class. The other currently supported option is Operator::MFEM_SPARSEMAT which is only guaranteed to be honored for a refinement update operator. Any other type will be treated as Operator::ANY_TYPE.

Note
This operation destroys the current update operator (if owned).

Definition at line 511 of file fespace.hpp.

NURBSExtension * mfem::FiniteElementSpace::StealNURBSext ( )

Definition at line 1138 of file fespace.cpp.

void mfem::FiniteElementSpace::Update ( bool  want_transform = true)
virtual

Reflect changes in the mesh: update number of DOFs, etc. Also, calculate GridFunction transformation operator (unless want_transform is false). Safe to call multiple times, does nothing if space already up to date.

Reimplemented in mfem::ParFiniteElementSpace.

Definition at line 1719 of file fespace.cpp.

void mfem::FiniteElementSpace::UpdateNURBS ( )
protected

Definition at line 1149 of file fespace.cpp.

virtual void mfem::FiniteElementSpace::UpdatesFinished ( )
inlinevirtual

Free the GridFunction update operator (if any), to save memory.

Reimplemented in mfem::ParFiniteElementSpace.

Definition at line 514 of file fespace.hpp.

int mfem::FiniteElementSpace::VDofToDof ( int  vdof) const
inline

Definition at line 348 of file fespace.hpp.

Member Data Documentation

int * mfem::FiniteElementSpace::bdofs
protected

Definition at line 87 of file fespace.hpp.

Table* mfem::FiniteElementSpace::bdrElem_dof
protected

Definition at line 90 of file fespace.hpp.

SparseMatrix* mfem::FiniteElementSpace::cP
mutableprotected

Matrix representing the prolongation from the global conforming dofs to a set of intermediate partially conforming dofs, e.g. the dofs associated with a "cut" space on a non-conforming mesh.

Definition at line 100 of file fespace.hpp.

bool mfem::FiniteElementSpace::cP_is_set
mutableprotected

Definition at line 103 of file fespace.hpp.

SparseMatrix* mfem::FiniteElementSpace::cR
mutableprotected

Conforming restriction matrix such that cR.cP=I.

Definition at line 102 of file fespace.hpp.

Array<int> mfem::FiniteElementSpace::dof_elem_array
protected

Definition at line 92 of file fespace.hpp.

Array<int> mfem::FiniteElementSpace::dof_ldof_array
protected

Definition at line 92 of file fespace.hpp.

Table* mfem::FiniteElementSpace::elem_dof
mutableprotected

Definition at line 89 of file fespace.hpp.

int* mfem::FiniteElementSpace::fdofs
protected

Definition at line 87 of file fespace.hpp.

const FiniteElementCollection* mfem::FiniteElementSpace::fec
protected

Associated FE collection (not owned).

Definition at line 73 of file fespace.hpp.

Mesh* mfem::FiniteElementSpace::mesh
protected

The mesh that FE space lives on (not owned).

Definition at line 70 of file fespace.hpp.

int mfem::FiniteElementSpace::nbdofs
protected

Definition at line 86 of file fespace.hpp.

int mfem::FiniteElementSpace::ndofs
protected

Number of degrees of freedom. Number of unknowns is ndofs * vdim.

Definition at line 84 of file fespace.hpp.

int mfem::FiniteElementSpace::nedofs
protected

Definition at line 86 of file fespace.hpp.

int mfem::FiniteElementSpace::nfdofs
protected

Definition at line 86 of file fespace.hpp.

NURBSExtension* mfem::FiniteElementSpace::NURBSext
protected

Definition at line 94 of file fespace.hpp.

int mfem::FiniteElementSpace::nvdofs
protected

Definition at line 86 of file fespace.hpp.

Ordering::Type mfem::FiniteElementSpace::ordering
protected

Type of ordering of the vector dofs when vdim > 1.

Definition at line 81 of file fespace.hpp.

int mfem::FiniteElementSpace::own_ext
protected

Definition at line 95 of file fespace.hpp.

long mfem::FiniteElementSpace::sequence
protected

Definition at line 108 of file fespace.hpp.

OperatorHandle mfem::FiniteElementSpace::Th
protected

Transformation to apply to GridFunctions after space Update().

Definition at line 106 of file fespace.hpp.

int mfem::FiniteElementSpace::vdim
protected

Vector dimension (number of unknowns per degree of freedom).

Definition at line 76 of file fespace.hpp.


The documentation for this class was generated from the following files: