49{
52
53 if (argc != 2)
54 {
55 fprintf(stderr, "Usage: CheckXmlFile meshfile.xml\n");
56 exit(1);
57 }
58
60 LibUtilities::SessionReader::CreateInstance(argc, argv);
61
62
63
64 string meshfile(argv[argc - 1]);
66 SpatialDomains::MeshGraph::Read(vSession);
67
68
69
70
71 int expdim = mesh->GetMeshDimension();
72
73 switch (expdim)
74 {
75 case 1:
77 break;
78 case 2:
79 {
81 string outname(strtok(argv[argc - 1], "."));
82 outname += ".dat";
83 FILE *fp = fopen(outname.c_str(), "w");
84
87
88 int nverts = mesh->GetNvertices();
89
91
92 for (int i = 0; i < nverts; ++i)
93 {
94 mesh->GetVertex(i)->GetCoords(x, y,
z);
95 xc[i] = x;
96 yc[i] = y;
98 }
99
100 std::map<int, SpatialDomains::TriGeomSharedPtr>::iterator triIter;
101 for (triIter = trigeom.begin(); triIter != trigeom.end(); ++triIter)
102 {
103 fprintf(fp, "%d %d %d %d\n", (triIter->second)->GetVid(0) + 1,
104 (triIter->second)->GetVid(1) + 1,
105 (triIter->second)->GetVid(2) + 1,
106 (triIter->second)->GetVid(2) + 1);
107 }
108
109 std::map<int, SpatialDomains::QuadGeomSharedPtr>::iterator quadIter;
110 for (quadIter = quadgeom.begin(); quadIter != quadgeom.end();
111 ++quadIter)
112 {
113 fprintf(fp, "%d %d %d %d\n", (quadIter->second)->GetVid(0) + 1,
114 (quadIter->second)->GetVid(1) + 1,
115 (quadIter->second)->GetVid(2) + 1,
116 (quadIter->second)->GetVid(3) + 1);
117 }
118 }
119 break;
120 case 3:
121 {
123 string outname(strtok(argv[argc - 1], "."));
124 outname += ".dat";
125
130
131 int nverts = mesh->GetNvertices();
132
134
135 for (int i = 0; i < nverts; ++i)
136 {
137
138 mesh->GetVertex(i)->GetCoords(x, y,
z);
139 xc[i] = x;
140 yc[i] = y;
142 }
143
144 for (int i = 0; i < nverts; ++i)
145 {
146 for (int j = i + 1; j < nverts; ++j)
147 {
148 if ((xc[i] - xc[j]) * (xc[i] - xc[j]) +
149 (yc[i] - yc[j]) * (yc[i] - yc[j]) +
150 (zc[i] - zc[j]) * (zc[i] - zc[j]) <
151 1e-10)
152 {
153 cout << "Duplicate vertices: " << i << " " << j << endl;
154 }
155 }
156 }
157
158 std::map<int, SpatialDomains::TetGeomSharedPtr>::iterator tetIter;
159 int cnt = 0;
160 bool NoRotateIssues = true;
161 bool NoOrientationIssues = true;
162 for (tetIter = tetgeom.begin(); tetIter != tetgeom.end(); ++tetIter)
163 {
164
165 NoOrientationIssues =
167
168
169 if ((tetIter->second)->GetFace(0)->GetVid(2) !=
170 (tetIter->second)->GetVid(2))
171 {
172 cout << "ERROR: Face " << tetIter->second->GetFid(0)
173 << " (vert "
174 << (tetIter->second)->GetFace(0)->GetVid(2)
175 << ") is not aligned with base vertex of Tet "
176 << (tetIter->second)->GetGlobalID() << " (vert "
177 << (tetIter->second)->GetVid(2) << ")" << endl;
178 NoRotateIssues = false;
179 }
180
181 for (int i = 1; i < 4; ++i)
182
183 {
184 if ((tetIter->second)->GetFace(i)->GetVid(2) !=
185 (tetIter->second)->GetVid(3))
186 {
187 cout << "ERROR: Face " << tetIter->second->GetFid(i)
188 << " is not aligned with top Vertex of Tet "
189 << (tetIter->second)->GetGlobalID() << endl;
190 NoRotateIssues = false;
191 }
192 }
193 }
194 if (NoOrientationIssues)
195 {
196 cout << "All Tet have correct ordering for anticlockwise "
197 "rotation"
198 << endl;
199 }
200
201 if (NoRotateIssues)
202 {
203 cout << "All Tet faces are correctly aligned" << endl;
204 }
205
206 std::map<int, SpatialDomains::PyrGeomSharedPtr>::iterator pyrIter;
207 for (pyrIter = pyrgeom.begin(); pyrIter != pyrgeom.end(); ++pyrIter)
208 {
209
210 }
211
212
213 std::map<int, SpatialDomains::PrismGeomSharedPtr>::iterator Iter;
214 NoRotateIssues = true;
215 NoOrientationIssues = true;
216 for (Iter = prismgeom.begin(); Iter != prismgeom.end(); ++Iter)
217 {
218
219
220 if ((Iter->second)->GetFace(1)->GetVid(2) !=
221 (Iter->second)->GetVid(4))
222 {
223 cout << "ERROR: Face " << Iter->second->GetFid(1)
224 << " (vert " << (Iter->second)->GetFace(1)->GetVid(2)
225 << ") not aligned to face 1 singular vert of Prism "
226 << (Iter->second)->GetGlobalID() << " (vert "
227 << (Iter->second)->GetVid(4) << ")" << endl;
228 NoRotateIssues = false;
229 }
230
231
232 if ((Iter->second)->GetFace(3)->GetVid(2) !=
233 (Iter->second)->GetVid(5))
234 {
235 cout << "ERROR: Face " << Iter->second->GetFid(3)
236 << " (vert " << (Iter->second)->GetFace(3)->GetVid(2)
237 << ") not aligned to face 3 singular vert of Prism "
238 << (Iter->second)->GetGlobalID() << " (vert "
239 << (Iter->second)->GetVid(5) << ")" << endl;
240 NoRotateIssues = false;
241 }
242 }
243
244 if (NoRotateIssues)
245 {
246 cout << "All Prism Tri faces are correctly aligned" << endl;
247 }
248
249 std::map<int, SpatialDomains::HexGeomSharedPtr>::iterator hexIter;
250 for (hexIter = hexgeom.begin(); hexIter != hexgeom.end(); ++hexIter)
251 {
252
253 }
254 }
255
256 break;
257 default:
258 ASSERTL0(
false,
"Expansion dimension not recognised");
259 break;
260 }
261
262
263
264 return 0;
265}
bool CheckTetRotation(Array< OneD, NekDouble > &xc, Array< OneD, NekDouble > &yc, Array< OneD, NekDouble > &xz, std::map< int, SpatialDomains::TetGeomSharedPtr >::iterator &tetIter, int id)
#define ASSERTL0(condition, msg)
std::shared_ptr< SessionReader > SessionReaderSharedPtr
std::map< int, TriGeomSharedPtr > TriGeomMap
std::map< int, PyrGeomSharedPtr > PyrGeomMap
std::map< int, QuadGeomSharedPtr > QuadGeomMap
std::map< int, TetGeomSharedPtr > TetGeomMap
std::shared_ptr< MeshGraph > MeshGraphSharedPtr
std::map< int, PrismGeomSharedPtr > PrismGeomMap
std::map< int, HexGeomSharedPtr > HexGeomMap