MFEM  v4.1.0
Finite element discretization library
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Pages
pmesh.hpp
Go to the documentation of this file.
1 // Copyright (c) 2010-2020, Lawrence Livermore National Security, LLC. Produced
2 // at the Lawrence Livermore National Laboratory. All Rights reserved. See files
3 // LICENSE and NOTICE for details. LLNL-CODE-806117.
4 //
5 // This file is part of the MFEM library. For more information and source code
6 // availability visit https://mfem.org.
7 //
8 // MFEM is free software; you can redistribute it and/or modify it under the
9 // terms of the BSD-3 license. We welcome feedback and contributions, see file
10 // CONTRIBUTING.md for details.
11 
12 #ifndef MFEM_PMESH
13 #define MFEM_PMESH
14 
15 #include "../config/config.hpp"
16 
17 #ifdef MFEM_USE_MPI
18 
19 #include "../general/communication.hpp"
20 #include "../general/globals.hpp"
21 #include "mesh.hpp"
22 #include "pncmesh.hpp"
23 #include <iostream>
24 
25 namespace mfem
26 {
27 #ifdef MFEM_USE_PUMI
28 class ParPumiMesh;
29 #endif
30 
31 /// Class for parallel meshes
32 class ParMesh : public Mesh
33 {
34 protected:
35  ParMesh() : MyComm(0), NRanks(0), MyRank(-1),
36  have_face_nbr_data(false), pncmesh(NULL) {}
37 
38  MPI_Comm MyComm;
39  int NRanks, MyRank;
40 
41  struct Vert3
42  {
43  int v[3];
44  Vert3() { }
45  Vert3(int v0, int v1, int v2) { v[0] = v0; v[1] = v1; v[2] = v2; }
46  void Set(int v0, int v1, int v2) { v[0] = v0; v[1] = v1; v[2] = v2; }
47  void Set(const int *w) { v[0] = w[0]; v[1] = w[1]; v[2] = w[2]; }
48  };
49 
50  struct Vert4
51  {
52  int v[4];
53  Vert4() { }
54  Vert4(int v0, int v1, int v2, int v3)
55  { v[0] = v0; v[1] = v1; v[2] = v2; v[3] = v3; }
56  void Set(int v0, int v1, int v2, int v3)
57  { v[0] = v0; v[1] = v1; v[2] = v2; v[3] = v3; }
58  void Set(const int *w)
59  { v[0] = w[0]; v[1] = w[1]; v[2] = w[2]; v[3] = w[3]; }
60  };
61 
63  // shared face id 'i' is:
64  // * triangle id 'i', if i < shared_trias.Size()
65  // * quad id 'i-shared_trias.Size()', otherwise
68 
69  /// Shared objects in each group.
72  Table group_stria; // contains shared triangle indices
73  Table group_squad; // contains shared quadrilateral indices
74 
75  /// Shared to local index mapping.
78  // sface ids: all triangles first, then all quads
80 
81  /// Create from a nonconforming mesh.
82  ParMesh(const ParNCMesh &pncmesh);
83 
84  // Convert the local 'meshgen' to a global one.
85  void ReduceMeshGen();
86 
87  // Determine sedge_ledge and sface_lface.
88  void FinalizeParTopo();
89 
90  // Mark all tets to ensure consistency across MPI tasks; also mark the
91  // shared and boundary triangle faces using the consistently marked tets.
92  virtual void MarkTetMeshForRefinement(DSTable &v_to_v);
93 
94  /// Return a number(0-1) identifying how the given edge has been split
95  int GetEdgeSplittings(Element *edge, const DSTable &v_to_v, int *middle);
96  /// Append codes identifying how the given face has been split to @a codes
97  void GetFaceSplittings(const int *fv, const HashTable<Hashed2> &v_to_v,
98  Array<unsigned> &codes);
99 
100  bool DecodeFaceSplittings(HashTable<Hashed2> &v_to_v, const int *v,
101  const Array<unsigned> &codes, int &pos);
102 
104  int i, IsoparametricTransformation *ElTr);
105 
107  FaceElementTransformations* FETr, Element::Type face_type,
108  Geometry::Type face_geom);
109 
110  /// Update the groups after triangle refinement
111  void RefineGroups(const DSTable &v_to_v, int *middle);
112 
113  /// Update the groups after tetrahedron refinement
114  void RefineGroups(int old_nv, const HashTable<Hashed2> &v_to_v);
115 
116  void UniformRefineGroups2D(int old_nv);
117 
118  // f2qf can be NULL if all faces are quads or there are no quad faces
119  void UniformRefineGroups3D(int old_nv, int old_nedges,
120  const DSTable &old_v_to_v,
121  const STable3D &old_faces,
122  Array<int> *f2qf);
123 
124  void ExchangeFaceNbrData(Table *gr_sface, int *s2l_face);
125 
126  /// Refine a mixed 2D mesh uniformly.
127  virtual void UniformRefinement2D();
128 
129  /// Refine a mixed 3D mesh uniformly.
130  virtual void UniformRefinement3D();
131 
132  virtual void NURBSUniformRefinement();
133 
134  /// This function is not public anymore. Use GeneralRefinement instead.
135  virtual void LocalRefinement(const Array<int> &marked_el, int type = 3);
136 
137  /// This function is not public anymore. Use GeneralRefinement instead.
138  virtual void NonconformingRefinement(const Array<Refinement> &refinements,
139  int nc_limit = 0);
140 
141  virtual bool NonconformingDerefinement(Array<double> &elem_error,
142  double threshold, int nc_limit = 0,
143  int op = 1);
144 
145  void RebalanceImpl(const Array<int> *partition);
146 
147  void DeleteFaceNbrData();
148 
149  bool WantSkipSharedMaster(const NCMesh::Master &master) const;
150 
151  /// Fills out partitioned Mesh::vertices
152  int BuildLocalVertices(const Mesh& global_mesh, const int *partitioning,
153  Array<int> &vert_global_local);
154 
155  /// Fills out partitioned Mesh::elements
156  int BuildLocalElements(const Mesh& global_mesh, const int *partitioning,
157  const Array<int> &vert_global_local);
158 
159  /// Fills out partitioned Mesh::boundary
160  int BuildLocalBoundary(const Mesh& global_mesh, const int *partitioning,
161  const Array<int> &vert_global_local,
162  Array<bool>& activeBdrElem,
163  Table* &edge_element);
164 
165  void FindSharedFaces(const Mesh &mesh, const int* partition,
166  Array<int>& face_group,
167  ListOfIntegerSets& groups);
168 
169  int FindSharedEdges(const Mesh &mesh, const int* partition,
170  Table* &edge_element, ListOfIntegerSets& groups);
171 
172  int FindSharedVertices(const int *partition, Table* vertex_element,
173  ListOfIntegerSets& groups);
174 
175  void BuildFaceGroup(int ngroups, const Mesh &mesh,
176  const Array<int>& face_group,
177  int &nstria, int &nsquad);
178 
179  void BuildEdgeGroup(int ngroups, const Table& edge_element);
180 
181  void BuildVertexGroup(int ngroups, const Table& vert_element);
182 
183  void BuildSharedFaceElems(int ntri_faces, int nquad_faces,
184  const Mesh &mesh, int *partitioning,
185  const STable3D *faces_tbl,
186  const Array<int> &face_group,
187  const Array<int> &vert_global_local);
188 
189  void BuildSharedEdgeElems(int nedges, Mesh &mesh,
190  const Array<int> &vert_global_local,
191  const Table *edge_element);
192 
193  void BuildSharedVertMapping(int nvert, const Table* vert_element,
194  const Array<int> &vert_global_local);
195 
196  /// Ensure that bdr_attributes and attributes agree across processors
197  void DistributeAttributes(Array<int> &attr);
198 
199 public:
200  /** Copy constructor. Performs a deep copy of (almost) all data, so that the
201  source mesh can be modified (e.g. deleted, refined) without affecting the
202  new mesh. If 'copy_nodes' is false, use a shallow (pointer) copy for the
203  nodes, if present. */
204  explicit ParMesh(const ParMesh &pmesh, bool copy_nodes = true);
205 
206  ParMesh(MPI_Comm comm, Mesh &mesh, int *partitioning_ = NULL,
207  int part_method = 1);
208 
209  /// Read a parallel mesh, each MPI rank from its own file/stream.
210  /** The @a refine parameter is passed to the method Mesh::Finalize(). */
211  ParMesh(MPI_Comm comm, std::istream &input, bool refine = true);
212 
213  /// Create a uniformly refined (by any factor) version of @a orig_mesh.
214  /** @param[in] orig_mesh The starting coarse mesh.
215  @param[in] ref_factor The refinement factor, an integer > 1.
216  @param[in] ref_type Specify the positions of the new vertices. The
217  options are BasisType::ClosedUniform or
218  BasisType::GaussLobatto.
219 
220  The refinement data which can be accessed with GetRefinementTransforms()
221  is set to reflect the performed refinements.
222 
223  @note The constructed ParMesh is linear, i.e. it does not have nodes. */
224  ParMesh(ParMesh *orig_mesh, int ref_factor, int ref_type);
225 
226  virtual void Finalize(bool refine = false, bool fix_orientation = false);
227 
228  virtual void SetAttributes();
229 
230  MPI_Comm GetComm() const { return MyComm; }
231  int GetNRanks() const { return NRanks; }
232  int GetMyRank() const { return MyRank; }
233 
235 
236  // Face-neighbor elements and vertices
243  // Local face-neighbor elements and vertices ordered by face-neighbor
246 
248 
249  int GetNGroups() const { return gtopo.NGroups(); }
250 
251  ///@{ @name These methods require group > 0
252  int GroupNVertices(int group) { return group_svert.RowSize(group-1); }
253  int GroupNEdges(int group) { return group_sedge.RowSize(group-1); }
254  int GroupNTriangles(int group) { return group_stria.RowSize(group-1); }
255  int GroupNQuadrilaterals(int group) { return group_squad.RowSize(group-1); }
256 
257  int GroupVertex(int group, int i)
258  { return svert_lvert[group_svert.GetRow(group-1)[i]]; }
259  void GroupEdge(int group, int i, int &edge, int &o);
260  void GroupTriangle(int group, int i, int &face, int &o);
261  void GroupQuadrilateral(int group, int i, int &face, int &o);
262  ///@}
263 
264  void GenerateOffsets(int N, HYPRE_Int loc_sizes[],
265  Array<HYPRE_Int> *offsets[]) const;
266 
267  void ExchangeFaceNbrData();
268  void ExchangeFaceNbrNodes();
269 
270  virtual void SetCurvature(int order, bool discont = false, int space_dim = -1,
271  int ordering = 1);
272 
273  int GetNFaceNeighbors() const { return face_nbr_group.Size(); }
274  int GetFaceNbrGroup(int fn) const { return face_nbr_group[fn]; }
275  int GetFaceNbrRank(int fn) const;
276 
277  /** Similar to Mesh::GetFaceToElementTable with added face-neighbor elements
278  with indices offset by the local number of elements. */
280 
281  /** Get the FaceElementTransformations for the given shared face (edge 2D).
282  In the returned object, 1 and 2 refer to the local and the neighbor
283  elements, respectively. */
285  GetSharedFaceTransformations(int sf, bool fill2 = true);
286 
287  /// Return the number of shared faces (3D), edges (2D), vertices (1D)
288  int GetNSharedFaces() const;
289 
290  /// Return the local face index for the given shared face.
291  int GetSharedFace(int sface) const;
292 
293  /// See the remarks for the serial version in mesh.hpp
294  virtual void ReorientTetMesh();
295 
296  /// Utility function: sum integers from all processors (Allreduce).
297  virtual long ReduceInt(int value) const;
298 
299  /** Load balance the mesh by equipartitioning the global space-filling
300  sequence of elements. Works for nonconforming meshes only. */
301  void Rebalance();
302 
303  /** Load balance a nonconforming mesh using a user-defined partition.
304  Each local element 'i' is migrated to processor rank 'partition[i]',
305  for 0 <= i < GetNE(). */
306  void Rebalance(const Array<int> &partition);
307 
308  /** Print the part of the mesh in the calling processor adding the interface
309  as boundary (for visualization purposes) using the mfem v1.0 format. */
310  virtual void Print(std::ostream &out = mfem::out) const;
311 
312  /** Print the part of the mesh in the calling processor adding the interface
313  as boundary (for visualization purposes) using Netgen/Truegrid format .*/
314  virtual void PrintXG(std::ostream &out = mfem::out) const;
315 
316  /** Write the mesh to the stream 'out' on Process 0 in a form suitable for
317  visualization: the mesh is written as a disjoint mesh and the shared
318  boundary is added to the actual boundary; both the element and boundary
319  attributes are set to the processor number. */
320  void PrintAsOne(std::ostream &out = mfem::out);
321 
322  /// Old mesh format (Netgen/Truegrid) version of 'PrintAsOne'
323  void PrintAsOneXG(std::ostream &out = mfem::out);
324 
325  /// Returns the minimum and maximum corners of the mesh bounding box. For
326  /// high-order meshes, the geometry is refined first "ref" times.
327  void GetBoundingBox(Vector &p_min, Vector &p_max, int ref = 2);
328 
329  void GetCharacteristics(double &h_min, double &h_max,
330  double &kappa_min, double &kappa_max);
331 
332  /// Print various parallel mesh stats
333  virtual void PrintInfo(std::ostream &out = mfem::out);
334 
335  /// Save the mesh in a parallel mesh format.
336  void ParPrint(std::ostream &out) const;
337 
338  virtual int FindPoints(DenseMatrix& point_mat, Array<int>& elem_ids,
339  Array<IntegrationPoint>& ips, bool warn = true,
340  InverseElementTransformation *inv_trans = NULL);
341 
342  /// Debugging method
343  void PrintSharedEntities(const char *fname_prefix) const;
344 
345  virtual ~ParMesh();
346 
347  friend class ParNCMesh;
348 #ifdef MFEM_USE_PUMI
349  friend class ParPumiMesh;
350 #endif
351 };
352 
353 }
354 
355 #endif // MFEM_USE_MPI
356 
357 #endif
int GetNFaceNeighbors() const
Definition: pmesh.hpp:273
void PrintAsOneXG(std::ostream &out=mfem::out)
Old mesh format (Netgen/Truegrid) version of &#39;PrintAsOne&#39;.
Definition: pmesh.cpp:4540
int Size() const
Logical size of the array.
Definition: array.hpp:124
virtual ~ParMesh()
Definition: pmesh.cpp:5430
void UniformRefineGroups2D(int old_nv)
Definition: pmesh.cpp:3627
int NRanks
Definition: pmesh.hpp:39
int FindSharedVertices(const int *partition, Table *vertex_element, ListOfIntegerSets &groups)
Definition: pmesh.cpp:564
void Set(const int *w)
Definition: pmesh.hpp:58
virtual void SetCurvature(int order, bool discont=false, int space_dim=-1, int ordering=1)
Definition: pmesh.cpp:1715
int BuildLocalVertices(const Mesh &global_mesh, const int *partitioning, Array< int > &vert_global_local)
Fills out partitioned Mesh::vertices.
Definition: pmesh.cpp:281
int GetNGroups() const
Definition: pmesh.hpp:249
virtual void ReorientTetMesh()
See the remarks for the serial version in mesh.hpp.
Definition: pmesh.cpp:2508
Array< Element * > face_nbr_elements
Definition: pmesh.hpp:241
int GetNSharedFaces() const
Return the number of shared faces (3D), edges (2D), vertices (1D)
Definition: pmesh.cpp:2441
Array< int > sface_lface
Definition: pmesh.hpp:79
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)
Definition: pmesh.cpp:699
virtual void LocalRefinement(const Array< int > &marked_el, int type=3)
This function is not public anymore. Use GeneralRefinement instead.
Definition: pmesh.cpp:2698
Data type dense matrix using column-major storage.
Definition: densemat.hpp:23
void GetRow(int i, Array< int > &row) const
Return row i in array row (the Table must be finalized)
Definition: table.cpp:191
void GetCharacteristics(double &h_min, double &h_max, double &kappa_min, double &kappa_max)
Definition: pmesh.cpp:5086
void UniformRefineGroups3D(int old_nv, int old_nedges, const DSTable &old_v_to_v, const STable3D &old_faces, Array< int > *f2qf)
Definition: pmesh.cpp:3678
bool have_face_nbr_data
Definition: pmesh.hpp:237
Array< Vert3 > shared_trias
Definition: pmesh.hpp:66
Array< int > face_nbr_vertices_offset
Definition: pmesh.hpp:240
Array< int > face_nbr_group
Definition: pmesh.hpp:238
virtual void SetAttributes()
Definition: pmesh.cpp:1337
The inverse transformation of a given ElementTransformation.
Definition: eltrans.hpp:115
void RebalanceImpl(const Array< int > *partition)
Definition: pmesh.cpp:3322
void BuildFaceGroup(int ngroups, const Mesh &mesh, const Array< int > &face_group, int &nstria, int &nsquad)
Definition: pmesh.cpp:601
void Set(int v0, int v1, int v2)
Definition: pmesh.hpp:46
virtual void MarkTetMeshForRefinement(DSTable &v_to_v)
Definition: pmesh.cpp:1385
int GroupNQuadrilaterals(int group)
Definition: pmesh.hpp:255
void Set(const int *w)
Definition: pmesh.hpp:47
Array< int > sedge_ledge
Definition: pmesh.hpp:77
Table group_stria
Definition: pmesh.hpp:72
void GroupTriangle(int group, int i, int &face, int &o)
Definition: pmesh.cpp:1363
bool WantSkipSharedMaster(const NCMesh::Master &master) const
Definition: pmesh.cpp:4089
A parallel extension of the NCMesh class.
Definition: pncmesh.hpp:64
ParNCMesh * pncmesh
Definition: pmesh.hpp:247
Class for PUMI parallel meshes.
Definition: pumi.hpp:72
int FindSharedEdges(const Mesh &mesh, const int *partition, Table *&edge_element, ListOfIntegerSets &groups)
Definition: pmesh.cpp:510
int GetNRanks() const
Definition: pmesh.hpp:231
int GroupVertex(int group, int i)
Definition: pmesh.hpp:257
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...
Definition: pmesh.cpp:5294
void ExchangeFaceNbrData()
Definition: pmesh.cpp:1735
void BuildSharedVertMapping(int nvert, const Table *vert_element, const Array< int > &vert_global_local)
Definition: pmesh.cpp:813
Vert4(int v0, int v1, int v2, int v3)
Definition: pmesh.hpp:54
void ReduceMeshGen()
Definition: pmesh.cpp:844
virtual void UniformRefinement2D()
Refine a mixed 2D mesh uniformly.
Definition: pmesh.cpp:3827
void Rebalance()
Definition: pmesh.cpp:3312
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.
Definition: pmesh.cpp:362
Array< int > face_nbr_elements_offset
Definition: pmesh.hpp:239
MPI_Comm MyComm
Definition: pmesh.hpp:38
Symmetric 3D Table.
Definition: stable3d.hpp:29
void GetBoundingBox(Vector &p_min, Vector &p_max, int ref=2)
Definition: pmesh.cpp:5070
Array< Element * > shared_edges
Definition: pmesh.hpp:62
virtual void NonconformingRefinement(const Array< Refinement > &refinements, int nc_limit=0)
This function is not public anymore. Use GeneralRefinement instead.
Definition: pmesh.cpp:3202
int GetSharedFace(int sface) const
Return the local face index for the given shared face.
Definition: pmesh.cpp:2460
void BuildSharedEdgeElems(int nedges, Mesh &mesh, const Array< int > &vert_global_local, const Table *edge_element)
Definition: pmesh.cpp:776
void PrintAsOne(std::ostream &out=mfem::out)
Definition: pmesh.cpp:4231
FaceElementTransformations * GetSharedFaceTransformations(int sf, bool fill2=true)
Definition: pmesh.cpp:2356
Table send_face_nbr_vertices
Definition: pmesh.hpp:245
Type
Constants for the classes derived from Element.
Definition: element.hpp:41
virtual void Print(std::ostream &out=mfem::out) const
Definition: pmesh.cpp:4102
void Set(int v0, int v1, int v2, int v3)
Definition: pmesh.hpp:56
int GroupNVertices(int group)
Definition: pmesh.hpp:252
Array< Vert4 > shared_quads
Definition: pmesh.hpp:67
int GetFaceNbrGroup(int fn) const
Definition: pmesh.hpp:274
void GroupQuadrilateral(int group, int i, int &face, int &o)
Definition: pmesh.cpp:1374
int GroupNTriangles(int group)
Definition: pmesh.hpp:254
void FindSharedFaces(const Mesh &mesh, const int *partition, Array< int > &face_group, ListOfIntegerSets &groups)
Definition: pmesh.cpp:483
int GetMyRank() const
Definition: pmesh.hpp:232
void RefineGroups(const DSTable &v_to_v, int *middle)
Update the groups after triangle refinement.
Definition: pmesh.cpp:3370
MPI_Comm GetComm() const
Definition: pmesh.hpp:230
virtual bool NonconformingDerefinement(Array< double > &elem_error, double threshold, int nc_limit=0, int op=1)
NC version of GeneralDerefinement.
Definition: pmesh.cpp:3254
Array< Vertex > face_nbr_vertices
Definition: pmesh.hpp:242
void PrintSharedEntities(const char *fname_prefix) const
Debugging method.
Definition: pmesh.cpp:5343
virtual long ReduceInt(int value) const
Utility function: sum integers from all processors (Allreduce).
Definition: pmesh.cpp:5211
void BuildVertexGroup(int ngroups, const Table &vert_element)
Definition: pmesh.cpp:673
void GetFaceNbrElementTransformation(int i, IsoparametricTransformation *ElTr)
Definition: pmesh.cpp:1642
void DistributeAttributes(Array< int > &attr)
Ensure that bdr_attributes and attributes agree across processors.
Definition: pmesh.cpp:1295
void BuildEdgeGroup(int ngroups, const Table &edge_element)
Definition: pmesh.cpp:647
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.
Definition: pmesh.cpp:1528
Table group_sedge
Definition: pmesh.hpp:71
void ExchangeFaceNbrNodes()
Definition: pmesh.cpp:2189
int BuildLocalElements(const Mesh &global_mesh, const int *partitioning, const Array< int > &vert_global_local)
Fills out partitioned Mesh::elements.
Definition: pmesh.cpp:329
Table group_svert
Shared objects in each group.
Definition: pmesh.hpp:70
bool DecodeFaceSplittings(HashTable< Hashed2 > &v_to_v, const int *v, const Array< unsigned > &codes, int &pos)
Definition: pmesh.cpp:1563
ElementTransformation * GetGhostFaceTransformation(FaceElementTransformations *FETr, Element::Type face_type, Geometry::Type face_geom)
Definition: pmesh.cpp:2324
virtual void UniformRefinement3D()
Refine a mixed 3D mesh uniformly.
Definition: pmesh.cpp:3851
int NGroups() const
virtual void Finalize(bool refine=false, bool fix_orientation=false)
Finalize the construction of a general Mesh.
Definition: pmesh.cpp:1281
int GetEdgeSplittings(Element *edge, const DSTable &v_to_v, int *middle)
Return a number(0-1) identifying how the given edge has been split.
Definition: pmesh.cpp:1513
virtual void PrintXG(std::ostream &out=mfem::out) const
Definition: pmesh.cpp:3888
void GroupEdge(int group, int i, int &edge, int &o)
Definition: pmesh.cpp:1355
Vector data type.
Definition: vector.hpp:48
void GenerateOffsets(int N, HYPRE_Int loc_sizes[], Array< HYPRE_Int > *offsets[]) const
Definition: pmesh.cpp:1599
Array< int > svert_lvert
Shared to local index mapping.
Definition: pmesh.hpp:76
int MyRank
Definition: pmesh.hpp:39
int RowSize(int i) const
Definition: table.hpp:108
Table send_face_nbr_elements
Definition: pmesh.hpp:244
virtual void PrintInfo(std::ostream &out=mfem::out)
Print various parallel mesh stats.
Definition: pmesh.cpp:5099
List of integer sets.
Definition: sets.hpp:54
Table * GetFaceToAllElementTable() const
Definition: pmesh.cpp:2266
void FinalizeParTopo()
Definition: pmesh.cpp:850
void DeleteFaceNbrData()
Definition: pmesh.cpp:1694
OutStream out(std::cout)
Global stream used by the library for standard output. Initially it uses the same std::streambuf as s...
Definition: globals.hpp:66
GroupTopology gtopo
Definition: pmesh.hpp:234
void ParPrint(std::ostream &out) const
Save the mesh in a parallel mesh format.
Definition: pmesh.cpp:5218
Class for parallel meshes.
Definition: pmesh.hpp:32
Abstract data type element.
Definition: element.hpp:28
int GetFaceNbrRank(int fn) const
Definition: pmesh.cpp:2249
Table group_squad
Definition: pmesh.hpp:73
Vert3(int v0, int v1, int v2)
Definition: pmesh.hpp:45
int GroupNEdges(int group)
Definition: pmesh.hpp:253
virtual void NURBSUniformRefinement()
Refine NURBS mesh.
Definition: pmesh.cpp:3880