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]; }
148 double threshold,
int nc_limit = 0,
169 Table* &edge_element);
183 int &nstria,
int &nsquad);
190 const Mesh &mesh,
int *partitioning,
197 const Table *edge_element);
212 ParMesh(MPI_Comm comm,
Mesh &mesh,
int *partitioning_ = NULL,
213 int part_method = 1);
217 ParMesh(MPI_Comm comm, std::istream &input,
bool refine =
true);
232 virtual void Finalize(
bool refine =
false,
bool fix_orientation =
false);
272 void GroupEdge(
int group,
int i,
int &edge,
int &o);
283 virtual void SetCurvature(
int order,
bool discont =
false,
int space_dim = -1,
333 #ifdef MFEM_USE_ADIOS2
357 double &kappa_min,
double &kappa_max);
368 virtual void PrintVTU(std::string pathname,
370 bool high_order_output=
false,
371 int compression_level=0,
388 #ifdef MFEM_USE_ADIOS2
395 #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)
long glob_offset_sequence
void UniformRefineGroups2D(int old_nv)
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)
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)
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)
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 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)
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)
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
virtual void PrintVTU(std::string pathname, VTKFormat format=VTKFormat::ASCII, bool high_order_output=false, int compression_level=0, bool bdr=false)
Vert3(int v0, int v1, int v2)
int GroupNEdges(int group)
virtual void NURBSUniformRefinement()
Refine NURBS mesh.