MFEM
v3.3
Finite element discretization library
|
Abstract parallel finite element space. More...
#include <pfespace.hpp>
Public Member Functions | |
ParFiniteElementSpace (ParMesh *pm, const FiniteElementCollection *f, int dim=1, int ordering=Ordering::byNODES) | |
MPI_Comm | GetComm () |
int | GetNRanks () |
int | GetMyRank () |
ParMesh * | GetParMesh () |
int | GetDofSign (int i) |
HYPRE_Int * | GetDofOffsets () |
HYPRE_Int * | GetTrueDofOffsets () |
HYPRE_Int | GlobalVSize () |
HYPRE_Int | GlobalTrueVSize () |
virtual int | GetTrueVSize () |
Return the number of local vector true dofs. More... | |
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 | GetSharedEdgeDofs (int group, int ei, Array< int > &dofs) const |
void | GetSharedFaceDofs (int group, int fi, Array< int > &dofs) const |
HypreParMatrix * | Dof_TrueDof_Matrix () |
The true dof-to-dof interpolation matrix. More... | |
HypreParMatrix * | GetPartialConformingInterpolation () |
For a non-conforming mesh, construct and return the interpolation matrix from the partially conforming true dofs to the local dofs. The returned pointer must be deleted by the caller. More... | |
HypreParVector * | NewTrueDofVector () |
void | DivideByGroupSize (double *vec) |
Scale a vector of true dofs. More... | |
GroupCommunicator & | GroupComm () |
Return a reference to the internal GroupCommunicator (on VDofs) More... | |
GroupCommunicator * | ScalarGroupComm () |
Return a new GroupCommunicator on Dofs. More... | |
void | Synchronize (Array< int > &ldof_marker) const |
virtual void | GetEssentialVDofs (const Array< int > &bdr_attr_is_ess, Array< int > &ess_dofs) const |
Determine the boundary degrees of freedom. More... | |
virtual void | GetEssentialTrueDofs (const Array< int > &bdr_attr_is_ess, Array< int > &ess_tdof_list) |
int | GetLocalTDofNumber (int ldof) |
HYPRE_Int | GetGlobalTDofNumber (int ldof) |
Returns the global tdof number of the given local degree of freedom. More... | |
HYPRE_Int | GetGlobalScalarTDofNumber (int sldof) |
HYPRE_Int | GetMyDofOffset () const |
HYPRE_Int | GetMyTDofOffset () const |
virtual const Operator * | GetProlongationMatrix () |
virtual const SparseMatrix * | GetRestrictionMatrix () |
Get the R matrix which restricts a local dof vector to true dof vector. More... | |
void | ExchangeFaceNbrData () |
int | GetFaceNbrVSize () const |
void | GetFaceNbrElementVDofs (int i, Array< int > &vdofs) const |
void | GetFaceNbrFaceVDofs (int i, Array< int > &vdofs) const |
const FiniteElement * | GetFaceNbrFE (int i) const |
const FiniteElement * | GetFaceNbrFaceFE (int i) const |
const HYPRE_Int * | GetFaceNbrGlobalDofMap () |
void | Lose_Dof_TrueDof_Matrix () |
void | LoseDofOffsets () |
void | LoseTrueDofOffsets () |
bool | Conforming () const |
bool | Nonconforming () const |
virtual void | Update (bool want_transform=true) |
virtual void | UpdatesFinished () |
Free ParGridFunction transformation matrix (if any), to save memory. More... | |
virtual | ~ParFiniteElementSpace () |
int | TrueVSize () |
Public Member Functions inherited from mfem::FiniteElementSpace | |
FiniteElementSpace (Mesh *mesh, const FiniteElementCollection *fec, int vdim=1, int ordering=Ordering::byNODES) | |
Mesh * | GetMesh () const |
Returns the mesh. More... | |
NURBSExtension * | GetNURBSext () |
NURBSExtension * | StealNURBSext () |
bool | Conforming () const |
bool | Nonconforming () const |
const SparseMatrix * | GetConformingProlongation () |
const SparseMatrix * | GetConformingRestriction () |
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 |
int | GetNConformingDofs () |
int | GetConformingVSize () |
Ordering::Type | GetOrdering () const |
Return the ordering method. More... | |
const FiniteElementCollection * | FEColl () const |
int | GetNVDofs () const |
int | GetNEDofs () const |
int | GetNFDofs () const |
int | GetNE () const |
Returns number of elements in the mesh. More... | |
int | GetNV () const |
Returns number of nodes 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... | |
ElementTransformation * | GetElementTransformation (int i) const |
Returns ElementTransformation for the i'th element. More... | |
void | GetElementTransformation (int i, IsoparametricTransformation *ElTr) |
ElementTransformation * | GetBdrElementTransformation (int i) const |
Returns ElementTransformation for the i'th boundary element. More... | |
int | GetAttribute (int i) const |
int | GetBdrAttribute (int i) 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 Table & | GetElementToDofTable () const |
const Table & | GetBdrElementToDofTable () const |
int | GetElementForDof (int i) const |
int | GetLocalDofForDof (int i) const |
const FiniteElement * | GetFE (int i) const |
Returns pointer to the FiniteElement associated with i'th element. More... | |
const FiniteElement * | GetBE (int i) const |
Returns pointer to the FiniteElement for the i'th boundary element. More... | |
const FiniteElement * | GetFaceElement (int i) const |
const FiniteElement * | GetEdgeElement (int i) const |
const FiniteElement * | GetTraceElement (int i, int geom_type) const |
Return the trace element from element 'i' to the given 'geom_type'. More... | |
void | ConvertToConformingVDofs (const Array< int > &dofs, Array< int > &cdofs) |
void | ConvertFromConformingVDofs (const Array< int > &cdofs, Array< int > &dofs) |
SparseMatrix * | D2C_GlobalRestrictionMatrix (FiniteElementSpace *cfes) |
SparseMatrix * | D2Const_GlobalRestrictionMatrix (FiniteElementSpace *cfes) |
SparseMatrix * | H2L_GlobalRestrictionMatrix (FiniteElementSpace *lfes) |
const Operator * | GetUpdateOperator () |
Get the GridFunction update matrix. 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... | |
long | GetSequence () const |
Return update counter (see Mesh::sequence) More... | |
void | Save (std::ostream &out) const |
virtual | ~FiniteElementSpace () |
Public Attributes | |
int | num_face_nbr_dofs |
Table | face_nbr_element_dof |
Table | face_nbr_ldof |
Array< HYPRE_Int > | face_nbr_glob_dof_map |
Table | send_face_nbr_ldof |
Additional Inherited Members | |
Static Public Member Functions inherited from mfem::FiniteElementSpace | |
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 inherited from mfem::FiniteElementSpace | |
void | UpdateNURBS () |
void | Construct () |
void | Destroy () |
void | BuildElementToDofTable () const |
void | GetEdgeFaceDofs (int type, int index, Array< int > &dofs) |
void | GetConformingInterpolation () |
Calculate the cP and cR matrices for a nonconforming mesh. More... | |
void | MakeVDimMatrix (SparseMatrix &mat) const |
SparseMatrix * | RefinementMatrix (int old_ndofs, const Table *old_elem_dof) |
Calculate GridFunction interpolation matrix after mesh refinement. More... | |
void | GetLocalDerefinementMatrices (int geom, const CoarseFineTransformations &dt, DenseTensor &localR) |
SparseMatrix * | DerefinementMatrix (int old_ndofs, const Table *old_elem_dof) |
Calculate GridFunction restriction matrix after mesh derefinement. More... | |
Protected Attributes inherited from mfem::FiniteElementSpace | |
Mesh * | mesh |
The mesh that FE space lives on. More... | |
const FiniteElementCollection * | fec |
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 are ndofs*vdim. More... | |
int | nvdofs |
int | nedofs |
int | nfdofs |
int | nbdofs |
int * | fdofs |
int * | bdofs |
Table * | elem_dof |
Table * | bdrElem_dof |
Array< int > | dof_elem_array |
Array< int > | dof_ldof_array |
NURBSExtension * | NURBSext |
int | own_ext |
SparseMatrix * | cP |
SparseMatrix * | cR |
Conforming restriction matrix such that cR.cP=I. More... | |
bool | cP_is_set |
Operator * | T |
Transformation to apply to GridFunctions after space Update(). More... | |
bool | own_T |
long | sequence |
Abstract parallel finite element space.
Definition at line 28 of file pfespace.hpp.
mfem::ParFiniteElementSpace::ParFiniteElementSpace | ( | ParMesh * | pm, |
const FiniteElementCollection * | f, | ||
int | dim = 1 , |
||
int | ordering = Ordering::byNODES |
||
) |
Definition at line 27 of file pfespace.cpp.
|
inlinevirtual |
Definition at line 274 of file pfespace.hpp.
|
inline |
Definition at line 260 of file pfespace.hpp.
void mfem::ParFiniteElementSpace::DivideByGroupSize | ( | double * | vec | ) |
Scale a vector of true dofs.
Definition at line 455 of file pfespace.cpp.
|
inline |
The true dof-to-dof interpolation matrix.
Definition at line 193 of file pfespace.hpp.
void mfem::ParFiniteElementSpace::ExchangeFaceNbrData | ( | ) |
Definition at line 622 of file pfespace.cpp.
|
virtual |
Returns indexes of degrees of freedom for i'th boundary element.
Reimplemented from mfem::FiniteElementSpace.
Definition at line 275 of file pfespace.cpp.
|
inline |
Definition at line 161 of file pfespace.hpp.
|
inline |
Definition at line 169 of file pfespace.hpp.
|
inline |
Definition at line 167 of file pfespace.hpp.
|
virtual |
Returns indexes of degrees of freedom in array dofs for i'th element.
Reimplemented from mfem::FiniteElementSpace.
Definition at line 261 of file pfespace.cpp.
|
virtual |
Get a list of essential true dofs, ess_tdof_list, corresponding to the boundary attributes marked in the array bdr_attr_is_ess.
Reimplemented from mfem::FiniteElementSpace.
Definition at line 521 of file pfespace.cpp.
|
virtual |
Determine the boundary degrees of freedom.
Reimplemented from mfem::FiniteElementSpace.
Definition at line 508 of file pfespace.cpp.
|
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 from mfem::FiniteElementSpace.
Definition at line 289 of file pfespace.cpp.
void mfem::ParFiniteElementSpace::GetFaceNbrElementVDofs | ( | int | i, |
Array< int > & | vdofs | ||
) | const |
Definition at line 842 of file pfespace.cpp.
const FiniteElement * mfem::ParFiniteElementSpace::GetFaceNbrFaceFE | ( | int | i | ) | const |
Definition at line 890 of file pfespace.cpp.
void mfem::ParFiniteElementSpace::GetFaceNbrFaceVDofs | ( | int | i, |
Array< int > & | vdofs | ||
) | const |
Definition at line 848 of file pfespace.cpp.
const FiniteElement * mfem::ParFiniteElementSpace::GetFaceNbrFE | ( | int | i | ) | const |
Definition at line 876 of file pfespace.cpp.
|
inline |
Definition at line 254 of file pfespace.hpp.
|
inline |
Definition at line 249 of file pfespace.hpp.
HYPRE_Int mfem::ParFiniteElementSpace::GetGlobalScalarTDofNumber | ( | int | sldof | ) |
Returns the global tdof number of the given local degree of freedom in the scalar version of the current finite element space. The input should be a scalar local dof.
Definition at line 575 of file pfespace.cpp.
HYPRE_Int mfem::ParFiniteElementSpace::GetGlobalTDofNumber | ( | int | ldof | ) |
Returns the global tdof number of the given local degree of freedom.
Definition at line 552 of file pfespace.cpp.
int mfem::ParFiniteElementSpace::GetLocalTDofNumber | ( | int | ldof | ) |
If the given ldof is owned by the current processor, return its local tdof number, otherwise return -1
Definition at line 531 of file pfespace.cpp.
HYPRE_Int mfem::ParFiniteElementSpace::GetMyDofOffset | ( | ) | const |
Definition at line 612 of file pfespace.cpp.
|
inline |
Definition at line 163 of file pfespace.hpp.
HYPRE_Int mfem::ParFiniteElementSpace::GetMyTDofOffset | ( | ) | const |
Definition at line 617 of file pfespace.cpp.
|
inline |
Definition at line 162 of file pfespace.hpp.
|
inline |
Definition at line 165 of file pfespace.hpp.
HypreParMatrix * mfem::ParFiniteElementSpace::GetPartialConformingInterpolation | ( | ) |
For a non-conforming mesh, construct and return the interpolation matrix from the partially conforming true dofs to the local dofs. The returned pointer must be deleted by the caller.
Definition at line 1544 of file pfespace.cpp.
|
inlinevirtual |
Reimplemented from mfem::FiniteElementSpace.
Definition at line 241 of file pfespace.hpp.
|
inlinevirtual |
Get the R matrix which restricts a local dof vector to true dof vector.
Reimplemented from mfem::FiniteElementSpace.
Definition at line 244 of file pfespace.hpp.
void mfem::ParFiniteElementSpace::GetSharedEdgeDofs | ( | int | group, |
int | ei, | ||
Array< int > & | dofs | ||
) | const |
Definition at line 298 of file pfespace.cpp.
void mfem::ParFiniteElementSpace::GetSharedFaceDofs | ( | int | group, |
int | fi, | ||
Array< int > & | dofs | ||
) | const |
Definition at line 321 of file pfespace.cpp.
|
inline |
Definition at line 170 of file pfespace.hpp.
|
inlinevirtual |
Return the number of local vector true dofs.
Reimplemented from mfem::FiniteElementSpace.
Definition at line 177 of file pfespace.hpp.
|
inline |
Definition at line 173 of file pfespace.hpp.
|
inline |
Definition at line 171 of file pfespace.hpp.
|
inline |
Return a reference to the internal GroupCommunicator (on VDofs)
Definition at line 210 of file pfespace.hpp.
void mfem::ParFiniteElementSpace::Lose_Dof_TrueDof_Matrix | ( | ) |
Definition at line 899 of file pfespace.cpp.
|
inline |
Definition at line 257 of file pfespace.hpp.
|
inline |
Definition at line 258 of file pfespace.hpp.
|
inline |
Create and return a new HypreParVector on the true dofs, which is owned by (i.e. it must be destroyed by) the calling function.
Definition at line 203 of file pfespace.hpp.
|
inline |
Definition at line 261 of file pfespace.hpp.
GroupCommunicator * mfem::ParFiniteElementSpace::ScalarGroupComm | ( | ) |
Return a new GroupCommunicator on Dofs.
Definition at line 471 of file pfespace.cpp.
void mfem::ParFiniteElementSpace::Synchronize | ( | Array< int > & | ldof_marker | ) | const |
Given an integer array on the local degrees of freedom, perform a bitwise OR between the shared dofs.
Definition at line 491 of file pfespace.cpp.
|
inline |
Definition at line 277 of file pfespace.hpp.
|
virtual |
Reflect changes in the mesh. Calculate one of the refinement/derefinement /rebalance matrices, unless want_transform is false.
Reimplemented from mfem::FiniteElementSpace.
Definition at line 2198 of file pfespace.cpp.
|
inlinevirtual |
Free ParGridFunction transformation matrix (if any), to save memory.
Reimplemented from mfem::FiniteElementSpace.
Definition at line 268 of file pfespace.hpp.
Table mfem::ParFiniteElementSpace::face_nbr_element_dof |
Definition at line 150 of file pfespace.hpp.
Array<HYPRE_Int> mfem::ParFiniteElementSpace::face_nbr_glob_dof_map |
Definition at line 154 of file pfespace.hpp.
Table mfem::ParFiniteElementSpace::face_nbr_ldof |
Definition at line 152 of file pfespace.hpp.
int mfem::ParFiniteElementSpace::num_face_nbr_dofs |
Definition at line 148 of file pfespace.hpp.
Table mfem::ParFiniteElementSpace::send_face_nbr_ldof |
Definition at line 156 of file pfespace.hpp.