15 #include "../config/config.hpp"
19 #include "../general/communication.hpp"
20 #include "../general/globals.hpp"
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]; }
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]; }
142 double threshold,
int nc_limit = 0,
163 Table* &edge_element);
177 int &nstria,
int &nsquad);
184 const Mesh &mesh,
int *partitioning,
191 const Table *edge_element);
206 ParMesh(MPI_Comm comm,
Mesh &mesh,
int *partitioning_ = NULL,
207 int part_method = 1);
211 ParMesh(MPI_Comm comm, std::istream &input,
bool refine =
true);
226 virtual void Finalize(
bool refine =
false,
bool fix_orientation =
false);
259 void GroupEdge(
int group,
int i,
int &edge,
int &o);
270 virtual void SetCurvature(
int order,
bool discont =
false,
int space_dim = -1,
330 double &kappa_min,
double &kappa_max);
355 #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
Logical size of the array.
void UniformRefineGroups2D(int old_nv)
int FindSharedVertices(const int *partition, Table *vertex_element, ListOfIntegerSets &groups)
virtual void SetCurvature(int order, bool discont=false, int space_dim=-1, int ordering=1)
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.
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 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
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)
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)
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 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
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)
void PrintAsOne(std::ostream &out=mfem::out)
FaceElementTransformations * GetSharedFaceTransformations(int sf, bool fill2=true)
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
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 PrintSharedEntities(const char *fname_prefix) const
Debugging method.
virtual long ReduceInt(int value) const
Utility function: sum integers from all processors (Allreduce).
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 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 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)
ElementTransformation * GetGhostFaceTransformation(FaceElementTransformations *FETr, Element::Type face_type, Geometry::Type face_geom)
virtual void UniformRefinement3D()
Refine a mixed 3D mesh uniformly.
virtual void Finalize(bool refine=false, bool fix_orientation=false)
Finalize the construction of a general Mesh.
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)
void GenerateOffsets(int N, HYPRE_Int loc_sizes[], Array< HYPRE_Int > *offsets[]) const
Array< int > svert_lvert
Shared to local index mapping.
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
Vert3(int v0, int v1, int v2)
int GroupNEdges(int group)
virtual void NURBSUniformRefinement()
Refine NURBS mesh.