15 #include "../config/config.hpp"
19 #include "../linalg/hypre.hpp"
20 #include "../mesh/pmesh.hpp"
21 #include "../mesh/nurbs.hpp"
85 void GenerateGlobalOffsets();
88 void ConstructTrueDofs();
89 void ConstructTrueNURBSDofs();
98 Dependency(
int r,
int d,
double c) : rank(r), dof(d), coef(c) {}
107 DepList() : type(0) {}
109 bool IsTrueDof(
int my_rank)
const
110 {
return type == 0 || (type == 1 && list[0].rank == my_rank); }
113 void AddSlaveDependencies(DepList deps[],
int master_rank,
114 const Array<int> &master_dofs,
int master_ndofs,
117 void Add1To1Dependencies(DepList deps[],
int owner_rank,
118 const Array<int> &owner_dofs,
int owner_ndofs,
121 void GetDofs(
int type,
int index,
Array<int>& dofs);
122 void ReorderFaceDofs(
Array<int> &dofs,
int orient);
125 void Build_Dof_TrueDof_Matrix();
130 void GetParallelConformingInterpolation();
136 const Table* old_elem_dof);
143 const Table *old_elem_dof);
194 {
if (!P) { Build_Dof_TrueDof_Matrix(); }
return P; }
265 virtual void Update(
bool want_transform =
true);
282 #endif // MFEM_USE_MPI
Abstract class for Finite Elements.
virtual int GetTrueVSize()
Return the number of local vector true dofs.
HypreParVector * NewTrueDofVector()
virtual void Update(bool want_transform=true)
int VDofToDof(int vdof) const
HYPRE_Int * GetDofOffsets()
HYPRE_Int GlobalTrueVSize()
Data type dense matrix using column-major storage.
virtual const Operator * GetProlongationMatrix()
void DivideByGroupSize(double *vec)
Scale a vector of true dofs.
Abstract parallel finite element space.
void Synchronize(Array< int > &ldof_marker) const
virtual const SparseMatrix * GetRestrictionMatrix()
Get the R matrix which restricts a local dof vector to true dof vector.
void Lose_Dof_TrueDof_Matrix()
HypreParMatrix * GetPartialConformingInterpolation()
For a non-conforming mesh, construct and return the interpolation matrix from the partially conformin...
const HYPRE_Int * GetFaceNbrGlobalDofMap()
HYPRE_Int GetMyDofOffset() const
void DeleteAll()
Delete whole array.
void GetSharedEdgeDofs(int group, int ei, Array< int > &dofs) const
HYPRE_Int * GetTrueDofOffsets()
virtual void GetBdrElementDofs(int i, Array< int > &dofs) const
Returns indexes of degrees of freedom for i'th boundary element.
void GetFaceNbrElementVDofs(int i, Array< int > &vdofs) const
HYPRE_Int GetGlobalNumRows() const
const FiniteElement * GetFaceNbrFE(int i) const
void GetSharedFaceDofs(int group, int fi, Array< int > &dofs) const
void ExchangeFaceNbrData()
HYPRE_Int GetGlobalNumCols() const
void LoseTrueDofOffsets()
void LoseData()
NULL-ifies the data.
HYPRE_Int GetMyTDofOffset() const
int GetLocalTDofNumber(int ldof)
virtual void GetFaceDofs(int i, Array< int > &dofs) const
Wrapper for hypre's parallel vector class.
virtual void GetEssentialTrueDofs(const Array< int > &bdr_attr_is_ess, Array< int > &ess_tdof_list)
GroupCommunicator & GroupComm()
Return a reference to the internal GroupCommunicator (on VDofs)
HYPRE_Int GetGlobalScalarTDofNumber(int sldof)
bool Nonconforming() const
virtual void GetElementDofs(int i, Array< int > &dofs) const
Returns indexes of degrees of freedom in array dofs for i'th element.
Table face_nbr_element_dof
virtual ~ParFiniteElementSpace()
const FiniteElement * GetFaceNbrFaceFE(int i) const
int GetFaceNbrVSize() const
void GetFaceNbrFaceVDofs(int i, Array< int > &vdofs) const
virtual void UpdatesFinished()
Free GridFunction transformation matrix (if any), to save memory.
virtual void GetEssentialVDofs(const Array< int > &bdr_attr_is_ess, Array< int > &ess_dofs) const
Determine the boundary degrees of freedom.
NURBSExtension * NURBSext
Wrapper for hypre's ParCSR matrix class.
virtual void UpdatesFinished()
Free ParGridFunction transformation matrix (if any), to save memory.
HypreParMatrix * Dof_TrueDof_Matrix()
The true dof-to-dof interpolation matrix.
GroupCommunicator * ScalarGroupComm()
Return a new GroupCommunicator on Dofs.
Class for parallel meshes.
ParFiniteElementSpace(ParMesh *pm, const FiniteElementCollection *f, int dim=1, int ordering=Ordering::byNODES)
HYPRE_Int GetGlobalTDofNumber(int ldof)
Returns the global tdof number of the given local degree of freedom.
Array< HYPRE_Int > face_nbr_glob_dof_map