15 #include "../config/config.hpp"
19 #include "../general/communication.hpp"
20 #include "../general/globals.hpp"
42 Vert3(
int v0,
int v1,
int v2) {
v[0] = v0;
v[1] = v1;
v[2] = v2; }
43 void Set(
int v0,
int v1,
int v2) {
v[0] = v0;
v[1] = v1;
v[2] = v2; }
44 void Set(
const int *w) {
v[0] = w[0];
v[1] = w[1];
v[2] = w[2]; }
51 Vert4(
int v0,
int v1,
int v2,
int v3)
52 {
v[0] = v0;
v[1] = v1;
v[2] = v2;
v[3] = v3; }
53 void Set(
int v0,
int v1,
int v2,
int v3)
54 {
v[0] = v0;
v[1] = v1;
v[2] = v2;
v[3] = v3; }
55 void Set(
const int *w)
56 {
v[0] = w[0];
v[1] = w[1];
v[2] = w[2];
v[3] = w[3]; }
145 double threshold,
int nc_limit = 0,
166 Table* &edge_element);
180 int &nstria,
int &nsquad);
187 const Mesh &mesh,
int *partitioning,
194 const Table *edge_element);
229 ParMesh(MPI_Comm comm,
Mesh &mesh,
int *partitioning_ = NULL,
230 int part_method = 1);
240 ParMesh(MPI_Comm comm, std::istream &input,
bool refine =
true);
272 virtual void Finalize(
bool refine =
false,
bool fix_orientation =
false);
325 void GroupEdge(
int group,
int i,
int &edge,
int &o);
336 virtual void SetCurvature(
int order,
bool discont =
false,
int space_dim = -1,
398 virtual void Save(
const char *fname,
int precision=16)
const;
400 #ifdef MFEM_USE_ADIOS2
418 void SaveAsOne(
const char *fname,
int precision=16)
const;
426 virtual void PrintVTU(std::string pathname,
428 bool high_order_output=
false,
429 int compression_level=0,
433 virtual void Load(std::istream &input,
int generate_edges = 0,
434 int refine = 1,
bool fix_orientation =
true);
441 double &kappa_min,
double &kappa_max);
463 #ifdef MFEM_USE_ADIOS2
470 #endif // MFEM_USE_MPI
int GetNFaceNeighbors() const
void PrintAsOneXG(std::ostream &out=mfem::out)
Old mesh format (Netgen/Truegrid) version of 'PrintAsOne'.
int Size() const
Return the logical size of the array.
void GetGhostFaceTransformation(FaceElementTransformations *FETr, Element::Type face_type, Geometry::Type face_geom)
void LoadSharedEntities(std::istream &input)
long glob_offset_sequence
void UniformRefineGroups2D(int old_nv)
ParMesh & operator=(ParMesh &&mesh)
Move assignment operator.
void MakeRefined_(ParMesh &orig_mesh, int ref_factor, int ref_type)
Internal function used in ParMesh::MakeRefined (and related constructor)
int FindSharedVertices(const int *partition, Table *vertex_element, ListOfIntegerSets &groups)
ElementTransformation * GetFaceNbrElementTransformation(int i)
virtual void SetCurvature(int order, bool discont=false, int space_dim=-1, int ordering=1)
static ParMesh MakeRefined(ParMesh &orig_mesh, int ref_factor, int ref_type)
Create a uniformly refined (by any factor) version of orig_mesh.
int BuildLocalVertices(const Mesh &global_mesh, const int *partitioning, Array< int > &vert_global_local)
Fills out partitioned Mesh::vertices.
virtual void ReorientTetMesh()
See the remarks for the serial version in mesh.hpp.
void GetGlobalElementIndices(Array< HYPRE_Int > &gi) const
AMR meshes are supported.
Array< Element * > face_nbr_elements
int GetNSharedFaces() const
Return the number of shared faces (3D), edges (2D), vertices (1D)
void BuildSharedFaceElems(int ntri_faces, int nquad_faces, const Mesh &mesh, int *partitioning, const STable3D *faces_tbl, const Array< int > &face_group, const Array< int > &vert_global_local)
virtual void LocalRefinement(const Array< int > &marked_el, int type=3)
This function is not public anymore. Use GeneralRefinement instead.
Data type dense matrix using column-major storage.
void GetRow(int i, Array< int > &row) const
Return row i in array row (the Table must be finalized)
void GetCharacteristics(double &h_min, double &h_max, double &kappa_min, double &kappa_max)
void EnsureParNodes()
If the mesh is curved, make sure 'Nodes' is ParGridFunction.
void UniformRefineGroups3D(int old_nv, int old_nedges, const DSTable &old_v_to_v, const STable3D &old_faces, Array< int > *f2qf)
Array< Vert3 > shared_trias
Array< int > face_nbr_vertices_offset
virtual void Save(const char *fname, int precision=16) const
virtual void Load(std::istream &input, int generate_edges=0, int refine=1, bool fix_orientation=true)
Parallel version of Mesh::Load().
Array< int > face_nbr_group
virtual void SetAttributes()
void RebalanceImpl(const Array< int > *partition)
void BuildFaceGroup(int ngroups, const Mesh &mesh, const Array< int > &face_group, int &nstria, int &nsquad)
void Set(int v0, int v1, int v2)
virtual void MarkTetMeshForRefinement(DSTable &v_to_v)
int GroupNQuadrilaterals(int group)
void GroupTriangle(int group, int i, int &face, int &o)
void GetGlobalEdgeIndices(Array< HYPRE_Int > &gi) const
AMR meshes are not supported.
bool WantSkipSharedMaster(const NCMesh::Master &master) const
A parallel extension of the NCMesh class.
Class for PUMI parallel meshes.
int FindSharedEdges(const Mesh &mesh, const int *partition, Table *&edge_element, ListOfIntegerSets &groups)
long GetGlobalElementNum(int local_element_num) const
Map a local element number to a global element number.
int GroupVertex(int group, int i)
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...
void ExchangeFaceNbrData()
void BuildSharedVertMapping(int nvert, const Table *vert_element, const Array< int > &vert_global_local)
Vert4(int v0, int v1, int v2, int v3)
virtual void UniformRefinement2D()
Refine a mixed 2D mesh uniformly.
int GetLocalElementNum(long global_element_num) const
int BuildLocalBoundary(const Mesh &global_mesh, const int *partitioning, const Array< int > &vert_global_local, Array< bool > &activeBdrElem, Table *&edge_element)
Fills out partitioned Mesh::boundary.
Array< int > face_nbr_elements_offset
Symmetric 3D Table stored as an array of rows each of which has a stack of column, floor, number nodes. The number of the node is assigned by counting the nodes from zero as they are pushed into the table. Diagonals of any kind are not allowed so the row, column and floor must all be different for each node. Only one node is stored for all 6 symmetric entries that are indexable by unique triplets of row, column, and floor.
void GetBoundingBox(Vector &p_min, Vector &p_max, int ref=2)
Array< Element * > shared_edges
virtual void NonconformingRefinement(const Array< Refinement > &refinements, int nc_limit=0)
This function is not public anymore. Use GeneralRefinement instead.
int GetSharedFace(int sface) const
Return the local face index for the given shared face.
void BuildSharedEdgeElems(int nedges, Mesh &mesh, const Array< int > &vert_global_local, const Table *edge_element)
FaceElementTransformations * GetSharedFaceTransformations(int sf, bool fill2=true)
void GetGlobalVertexIndices(Array< HYPRE_Int > &gi) const
AMR meshes are not supported.
Table send_face_nbr_vertices
Type
Constants for the classes derived from Element.
virtual void Print(std::ostream &out=mfem::out) const
void Set(int v0, int v1, int v2, int v3)
int GroupNVertices(int group)
Array< Vert4 > shared_quads
int GetFaceNbrGroup(int fn) const
int GetNFaceNeighborElements() const
void GetGlobalFaceIndices(Array< HYPRE_Int > &gi) const
AMR meshes are not supported.
void GroupQuadrilateral(int group, int i, int &face, int &o)
int GroupNTriangles(int group)
void FindSharedFaces(const Mesh &mesh, const int *partition, Array< int > &face_group, ListOfIntegerSets &groups)
void RefineGroups(const DSTable &v_to_v, int *middle)
Update the groups after triangle refinement.
virtual bool NonconformingDerefinement(Array< double > &elem_error, double threshold, int nc_limit=0, int op=1)
NC version of GeneralDerefinement.
Array< Vertex > face_nbr_vertices
void Swap(ParMesh &other)
void PrintSharedEntities(const char *fname_prefix) const
Debugging method.
virtual long ReduceInt(int value) const
Utility function: sum integers from all processors (Allreduce).
ParMesh()
Default constructor. Create an empty ParMesh.
void BuildVertexGroup(int ngroups, const Table &vert_element)
void GetFaceNbrElementTransformation(int i, IsoparametricTransformation *ElTr)
void DistributeAttributes(Array< int > &attr)
Ensure that bdr_attributes and attributes agree across processors.
void Swap(Mesh &other, bool non_geometry)
void BuildEdgeGroup(int ngroups, const Table &edge_element)
void GetFaceSplittings(const int *fv, const HashTable< Hashed2 > &v_to_v, Array< unsigned > &codes)
Append codes identifying how the given face has been split to codes.
void ComputeGlobalElementOffset() const
void ExchangeFaceNbrNodes()
int BuildLocalElements(const Mesh &global_mesh, const int *partitioning, const Array< int > &vert_global_local)
Fills out partitioned Mesh::elements.
Table group_svert
Shared objects in each group.
bool DecodeFaceSplittings(HashTable< Hashed2 > &v_to_v, const int *v, const Array< unsigned > &codes, int &pos)
double GetFaceNbrElementSize(int i, int type=0)
virtual void UniformRefinement3D()
Refine a mixed 3D mesh uniformly.
int NGroups() const
Return the number of groups.
virtual void Finalize(bool refine=false, bool fix_orientation=false)
Finalize the construction of a general Mesh.
IsoparametricTransformation FaceNbrTransformation
int GetEdgeSplittings(Element *edge, const DSTable &v_to_v, int *middle)
Return a number(0-1) identifying how the given edge has been split.
virtual void PrintXG(std::ostream &out=mfem::out) const
void GroupEdge(int group, int i, int &edge, int &o)
static ParMesh MakeSimplicial(ParMesh &orig_mesh)
void PrintAsOne(std::ostream &out=mfem::out) const
Array< int > svert_lvert
Shared to local index mapping.
void SaveAsOne(const char *fname, int precision=16) const
Table send_face_nbr_elements
virtual void PrintInfo(std::ostream &out=mfem::out)
Print various parallel mesh stats.
Table * GetFaceToAllElementTable() const
OutStream out(std::cout)
Global stream used by the library for standard output. Initially it uses the same std::streambuf as s...
void ParPrint(std::ostream &out) const
Save the mesh in a parallel mesh format.
Class for parallel meshes.
Abstract data type element.
int GetFaceNbrRank(int fn) const
virtual void PrintVTU(std::string pathname, VTKFormat format=VTKFormat::ASCII, bool high_order_output=false, int compression_level=0, bool bdr=false)
void GenerateOffsets(int N, HYPRE_BigInt loc_sizes[], Array< HYPRE_BigInt > *offsets[]) const
Vert3(int v0, int v1, int v2)
int GroupNEdges(int group)
virtual void NURBSUniformRefinement()
Refine NURBS mesh.