initial commit for version 1.6.x patch release
[OpenFOAM-1.6.x.git] / applications / utilities / mesh / manipulation / checkMesh / printMeshStats.C
blob269656594c5c6524c6508c7c602967ac419173df
1 #include "printMeshStats.H"
2 #include "polyMesh.H"
3 #include "globalMeshData.H"
5 #include "hexMatcher.H"
6 #include "wedgeMatcher.H"
7 #include "prismMatcher.H"
8 #include "pyrMatcher.H"
9 #include "tetWedgeMatcher.H"
10 #include "tetMatcher.H"
13 void Foam::printMeshStats(const polyMesh& mesh, const bool allTopology)
15     Info<< "Mesh stats" << nl
16         << "    points:           "
17         << returnReduce(mesh.points().size(), sumOp<label>()) << nl;
19     label nInternalPoints = returnReduce
20     (
21         mesh.nInternalPoints(),
22         sumOp<label>()
23     );
25     if (nInternalPoints != -Pstream::nProcs())
26     {
27         Info<< "    internal points:  " << nInternalPoints << nl;
29         if (returnReduce(mesh.nInternalPoints(), minOp<label>()) == -1)
30         {
31             WarningIn("Foam::printMeshStats(const polyMesh&, const bool)")
32                 << "Some processors have their points sorted into internal"
33                 << " and external and some do not." << endl
34                 << "This can cause problems later on." << endl;
35         }
36     }
38     if (allTopology && nInternalPoints != -Pstream::nProcs())
39     {
40         label nEdges = returnReduce(mesh.nEdges(), sumOp<label>());
41         label nInternalEdges = returnReduce
42         (
43             mesh.nInternalEdges(),
44             sumOp<label>()
45         );
46         label nInternal1Edges = returnReduce
47         (
48             mesh.nInternal1Edges(),
49             sumOp<label>()
50         );
51         label nInternal0Edges = returnReduce
52         (
53             mesh.nInternal0Edges(),
54             sumOp<label>()
55         );
57         Info<< "    edges:            " << nEdges << nl
58             << "    internal edges:   " << nInternalEdges << nl
59             << "    internal edges using one boundary point:   "
60             << nInternal1Edges-nInternal0Edges << nl
61             << "    internal edges using two boundary points:  "
62             << nInternalEdges-nInternal1Edges << nl;
63     }
65     Info<< "    faces:            "
66         << returnReduce(mesh.faces().size(), sumOp<label>()) << nl
67         << "    internal faces:   "
68         << returnReduce(mesh.faceNeighbour().size(), sumOp<label>()) << nl
69         << "    cells:            "
70         << returnReduce(mesh.cells().size(), sumOp<label>()) << nl
71         << "    boundary patches: "
72         << mesh.boundaryMesh().size() << nl
73         << "    point zones:      "
74         << mesh.pointZones().size() << nl
75         << "    face zones:       "
76         << mesh.faceZones().size() << nl
77         << "    cell zones:       "
78         << mesh.cellZones().size() << nl
79         << endl;
82     // Construct shape recognizers
83     hexMatcher hex;
84     prismMatcher prism;
85     wedgeMatcher wedge;
86     pyrMatcher pyr;
87     tetWedgeMatcher tetWedge;
88     tetMatcher tet;
90     // Counters for different cell types
91     label nHex = 0;
92     label nWedge = 0;
93     label nPrism = 0;
94     label nPyr = 0;
95     label nTet = 0;
96     label nTetWedge = 0;
97     label nUnknown = 0;
99     for(label cellI = 0; cellI < mesh.nCells(); cellI++)
100     {
101         if (hex.isA(mesh, cellI))
102         {
103             nHex++;
104         }
105         else if (tet.isA(mesh, cellI))
106         {
107             nTet++;
108         }
109         else if (pyr.isA(mesh, cellI))
110         {
111             nPyr++;
112         }
113         else if (prism.isA(mesh, cellI))
114         {
115             nPrism++;
116         }
117         else if (wedge.isA(mesh, cellI))
118         {
119             nWedge++;
120         }
121         else if (tetWedge.isA(mesh, cellI))
122         {
123             nTetWedge++;
124         }
125         else
126         {
127             nUnknown++;
128         }
129     }
131     reduce(nHex,sumOp<label>());
132     reduce(nPrism,sumOp<label>()); 
133     reduce(nWedge,sumOp<label>());
134     reduce(nPyr,sumOp<label>());
135     reduce(nTetWedge,sumOp<label>());
136     reduce(nTet,sumOp<label>());
137     reduce(nUnknown,sumOp<label>());
139     Info<< "Overall number of cells of each type:" << nl
140         << "    hexahedra:     " << nHex << nl
141         << "    prisms:        " << nPrism << nl
142         << "    wedges:        " << nWedge << nl
143         << "    pyramids:      " << nPyr << nl
144         << "    tet wedges:    " << nTetWedge << nl
145         << "    tetrahedra:    " << nTet << nl
146         << "    polyhedra:     " << nUnknown
147         << nl << endl;