1 /*****************************************************************************/
2 /* XDMF */
3 /* eXtensible Data Model and Format */
4 /* */
5 /* Id : XdmfTopology.cpp */
6 /* */
7 /* Author: */
8 /* Kenneth Leiter */
9 /* kenneth.leiter@arl.army.mil */
10 /* US Army Research Laboratory */
11 /* Aberdeen Proving Ground, MD */
12 /* */
13 /* Copyright @ 2011 US Army Research Laboratory */
14 /* All Rights Reserved */
15 /* See Copyright.txt for details */
16 /* */
17 /* This software is distributed WITHOUT ANY WARRANTY; without */
18 /* even the implied warranty of MERCHANTABILITY or FITNESS */
19 /* FOR A PARTICULAR PURPOSE. See the above copyright notice */
20 /* for more information. */
21 /* */
22 /*****************************************************************************/
23
24 #include <sstream>
25 #include <utility>
26 #include "XdmfError.hpp"
27 #include "XdmfFunction.hpp"
28 #include "XdmfTopology.hpp"
29 #include "XdmfTopologyType.hpp"
30
31 shared_ptr<XdmfTopology>
New()32 XdmfTopology::New()
33 {
34 shared_ptr<XdmfTopology> p(new XdmfTopology());
35 return p;
36 }
37
XdmfTopology()38 XdmfTopology::XdmfTopology() :
39 mType(XdmfTopologyType::NoTopologyType()),
40 mBaseOffset(0)
41 {
42 }
43
XdmfTopology(XdmfTopology & refTopo)44 XdmfTopology::XdmfTopology(XdmfTopology & refTopo) :
45 XdmfArray(refTopo),
46 mType(refTopo.mType)
47 {
48 }
49
~XdmfTopology()50 XdmfTopology::~XdmfTopology()
51 {
52 }
53
54 const std::string XdmfTopology::ItemTag = "Topology";
55
56 int
getBaseOffset() const57 XdmfTopology::getBaseOffset() const
58 {
59 return mBaseOffset;
60 }
61
62 std::string
getItemTag() const63 XdmfTopology::getItemTag() const
64 {
65 return ItemTag;
66 }
67
68 std::map<std::string, std::string>
getItemProperties() const69 XdmfTopology::getItemProperties() const
70 {
71 std::map<std::string, std::string> topologyProperties;
72 mType->getProperties(topologyProperties);
73 if(mType->getCellType() != XdmfTopologyType::Structured) {
74 std::stringstream numElements;
75 numElements << this->getNumberElements();
76 topologyProperties.insert(std::make_pair("Dimensions", numElements.str()));
77 }
78 if (mBaseOffset != 0)
79 {
80 std::stringstream offsetString;
81 offsetString << mBaseOffset;
82 topologyProperties.insert(std::make_pair("BaseOffset", offsetString.str()));
83 }
84 return topologyProperties;
85 }
86
87 unsigned int
getNumberElements() const88 XdmfTopology::getNumberElements() const
89 {
90 // deal with special cases first (mixed / no topology)
91 if(mType->getNodesPerElement() == 0) {
92 if(mType == XdmfTopologyType::Mixed()) {
93 unsigned int index = 0;
94 unsigned int numberElements = 0;
95 // iterate over all values in connectivity, pulling topology type ids
96 // and counting number of elements
97 while(index < this->getSize()) {
98 const unsigned int id = this->getValue<unsigned int>(index);
99 const shared_ptr<const XdmfTopologyType> topologyType =
100 XdmfTopologyType::New(id);
101 if(topologyType == NULL) {
102 XdmfError::message(XdmfError::FATAL,
103 "Invalid topology type id found in connectivity "
104 "when parsing mixed topology.");
105 }
106 if(topologyType == XdmfTopologyType::Polyvertex()) {
107 const unsigned int numberPolyvertexElements =
108 this->getValue<unsigned int>(index + 1);
109 numberElements += numberPolyvertexElements;
110 index += numberPolyvertexElements + 2;
111 }
112 else if(topologyType == XdmfTopologyType::Polyline(0) ||
113 topologyType == XdmfTopologyType::Polygon(0)) {
114 const unsigned int numberNodes =
115 this->getValue<unsigned int>(index + 1);
116 numberElements += 1;
117 index += numberNodes + 2;
118 }
119 else if(topologyType == XdmfTopologyType::Polyhedron()) {
120 // get number of face
121 const unsigned int numberFaces =
122 this->getValue<unsigned int>(index + 1);
123 // skip to first face
124 index += 2;
125 // iterate over all faces and add number of nodes per face to index
126 for(unsigned int i=0; i<numberFaces; ++i) {
127 index += this->getValue<unsigned int>(index) + 1;
128 }
129 numberElements += 1;
130 }
131 else {
132 // add 1 to element count and move to next element id
133 numberElements += 1;
134 index += topologyType->getNodesPerElement() + 1;
135 }
136 }
137 return numberElements;
138 }
139 return 0;
140 }
141 return this->getSize() / mType->getNodesPerElement();
142 }
143
144 shared_ptr<const XdmfTopologyType>
getType() const145 XdmfTopology::getType() const
146 {
147 return mType;
148 }
149
150 void
populateItem(const std::map<std::string,std::string> & itemProperties,const std::vector<shared_ptr<XdmfItem>> & childItems,const XdmfCoreReader * const reader)151 XdmfTopology::populateItem(const std::map<std::string, std::string> & itemProperties,
152 const std::vector<shared_ptr<XdmfItem> > & childItems,
153 const XdmfCoreReader * const reader)
154 {
155 XdmfItem::populateItem(itemProperties, childItems, reader);
156 mType = XdmfTopologyType::New(itemProperties);
157 for(std::vector<shared_ptr<XdmfItem> >::const_iterator iter = childItems.begin();
158 iter != childItems.end();
159 ++iter) {
160 if(shared_ptr<XdmfArray> array = shared_dynamic_cast<XdmfArray>(*iter)) {
161 this->swap(array);
162 if (array->getReference()) {
163 this->setReference(array->getReference());
164 this->setReadMode(XdmfArray::Reference);
165 }
166 break;
167 }
168 }
169
170 std::map<std::string, std::string>::const_iterator type =
171 itemProperties.find("Offset");
172 if (type != itemProperties.end()) {
173 type = itemProperties.find("BaseOffset");
174 }
175 if (type != itemProperties.end()) {
176 // Convert to double
177 double offset = atof(type->second.c_str());
178 std::stringstream expressionStream;
179 expressionStream << offset << "+X";
180 std::map<std::string, shared_ptr<XdmfArray> > offsetMap;
181 shared_ptr<XdmfArray> offsetBase = XdmfArray::New();
182 this->swap(offsetBase);
183 offsetMap["X"] = offsetBase;
184 shared_ptr<XdmfFunction> offsetFunction = XdmfFunction::New(expressionStream.str(), offsetMap);
185 this->setReference(offsetFunction);
186 this->setReadMode(XdmfArray::Reference);
187 }
188 }
189
190 void
setBaseOffset(int offset)191 XdmfTopology::setBaseOffset(int offset)
192 {
193 mBaseOffset = offset;
194 }
195
196 void
setType(const shared_ptr<const XdmfTopologyType> type)197 XdmfTopology::setType(const shared_ptr<const XdmfTopologyType> type)
198 {
199 mType = type;
200 this->setIsChanged(true);
201 }
202
203 // C Wrappers
204
XdmfTopologyNew()205 XDMFTOPOLOGY * XdmfTopologyNew()
206 {
207 try
208 {
209 shared_ptr<XdmfTopology> generatedTopology = XdmfTopology::New();
210 return (XDMFTOPOLOGY *)((void *)(new XdmfTopology(*generatedTopology.get())));
211 }
212 catch (...)
213 {
214 shared_ptr<XdmfTopology> generatedTopology = XdmfTopology::New();
215 return (XDMFTOPOLOGY *)((void *)(new XdmfTopology(*generatedTopology.get())));
216 }
217 }
218
XdmfTopologyGetNumberElements(XDMFTOPOLOGY * topology,int * status)219 unsigned int XdmfTopologyGetNumberElements(XDMFTOPOLOGY * topology, int * status)
220 {
221 XDMF_ERROR_WRAP_START(status)
222 return ((XdmfTopology *)topology)->getNumberElements();
223 XDMF_ERROR_WRAP_END(status)
224 return 0;
225 }
226
XdmfTopologyGetType(XDMFTOPOLOGY * topology)227 int XdmfTopologyGetType(XDMFTOPOLOGY * topology)
228 {
229 shared_ptr<const XdmfTopologyType> type = ((XdmfTopology *)topology)->getType();
230 int returnType = -1;
231
232 if (type->getID() == XdmfTopologyType::Polyvertex()->getID()) {
233 returnType = XDMF_TOPOLOGY_TYPE_POLYVERTEX;
234 }
235 else if (type->getID() == XdmfTopologyType::Polyline(0)->getID()) {
236 returnType = XDMF_TOPOLOGY_TYPE_POLYLINE;
237 }
238 else if (type->getID() == XdmfTopologyType::Polygon(0)->getID()) {
239 returnType = XDMF_TOPOLOGY_TYPE_POLYGON;
240 }
241 else if (type->getID() == XdmfTopologyType::Triangle()->getID()) {
242 returnType = XDMF_TOPOLOGY_TYPE_TRIANGLE;
243 }
244 else if (type->getID() == XdmfTopologyType::Quadrilateral()->getID()) {
245 returnType = XDMF_TOPOLOGY_TYPE_QUADRILATERAL;
246 }
247 else if (type->getID() == XdmfTopologyType::Tetrahedron()->getID()) {
248 returnType = XDMF_TOPOLOGY_TYPE_TETRAHEDRON;
249 }
250 else if (type->getID() == XdmfTopologyType::Pyramid()->getID()) {
251 returnType = XDMF_TOPOLOGY_TYPE_PYRAMID;
252 }
253 else if (type->getID() == XdmfTopologyType::Wedge()->getID()) {
254 returnType = XDMF_TOPOLOGY_TYPE_WEDGE;
255 }
256 else if (type->getID() == XdmfTopologyType::Hexahedron()->getID()) {
257 returnType = XDMF_TOPOLOGY_TYPE_HEXAHEDRON;
258 }
259 else if (type->getID() == XdmfTopologyType::Edge_3()->getID()) {
260 returnType = XDMF_TOPOLOGY_TYPE_EDGE_3;
261 }
262 else if (type->getID() == XdmfTopologyType::Triangle_6()->getID()) {
263 returnType = XDMF_TOPOLOGY_TYPE_TRIANGLE_6;
264 }
265 else if (type->getID() == XdmfTopologyType::Quadrilateral_8()->getID()) {
266 returnType = XDMF_TOPOLOGY_TYPE_QUADRILATERAL_8;
267 }
268 else if (type->getID() == XdmfTopologyType::Quadrilateral_9()->getID()) {
269 returnType = XDMF_TOPOLOGY_TYPE_QUADRILATERAL_9;
270 }
271 else if (type->getID() == XdmfTopologyType::Tetrahedron_10()->getID()) {
272 returnType = XDMF_TOPOLOGY_TYPE_TETRAHEDRON_10;
273 }
274 else if (type->getID() == XdmfTopologyType::Pyramid_13()->getID()) {
275 returnType = XDMF_TOPOLOGY_TYPE_PYRAMID_13;
276 }
277 else if (type->getID() == XdmfTopologyType::Wedge_15()->getID()) {
278 returnType = XDMF_TOPOLOGY_TYPE_WEDGE_15;
279 }
280 else if (type->getID() == XdmfTopologyType::Wedge_18()->getID()) {
281 returnType = XDMF_TOPOLOGY_TYPE_WEDGE_18;
282 }
283 else if (type->getID() == XdmfTopologyType::Hexahedron_20()->getID()) {
284 returnType = XDMF_TOPOLOGY_TYPE_HEXAHEDRON_20;
285 }
286 else if (type->getID() == XdmfTopologyType::Hexahedron_24()->getID()) {
287 returnType = XDMF_TOPOLOGY_TYPE_HEXAHEDRON_24;
288 }
289 else if (type->getID() == XdmfTopologyType::Hexahedron_27()->getID()) {
290 returnType = XDMF_TOPOLOGY_TYPE_HEXAHEDRON_27;
291 }
292 else if (type->getID() == XdmfTopologyType::Hexahedron_64()->getID()) {
293 returnType = XDMF_TOPOLOGY_TYPE_HEXAHEDRON_64;
294 }
295 else if (type->getID() == XdmfTopologyType::Hexahedron_125()->getID()) {
296 returnType = XDMF_TOPOLOGY_TYPE_HEXAHEDRON_125;
297 }
298 else if (type->getID() == XdmfTopologyType::Hexahedron_216()->getID()) {
299 returnType = XDMF_TOPOLOGY_TYPE_HEXAHEDRON_216;
300 }
301 else if (type->getID() == XdmfTopologyType::Hexahedron_343()->getID()) {
302 returnType = XDMF_TOPOLOGY_TYPE_HEXAHEDRON_343;
303 }
304 else if (type->getID() == XdmfTopologyType::Hexahedron_512()->getID()) {
305 returnType = XDMF_TOPOLOGY_TYPE_HEXAHEDRON_512;
306 }
307 else if (type->getID() == XdmfTopologyType::Hexahedron_729()->getID()) {
308 returnType = XDMF_TOPOLOGY_TYPE_HEXAHEDRON_729;
309 }
310 else if (type->getID() == XdmfTopologyType::Hexahedron_1000()->getID()) {
311 returnType = XDMF_TOPOLOGY_TYPE_HEXAHEDRON_1000;
312 }
313 else if (type->getID() == XdmfTopologyType::Hexahedron_1331()->getID()) {
314 returnType = XDMF_TOPOLOGY_TYPE_HEXAHEDRON_1331;
315 }
316 else if (type->getID() == XdmfTopologyType::Hexahedron_Spectral_64()->getID()) {
317 returnType = XDMF_TOPOLOGY_TYPE_HEXAHEDRON_SPECTRAL_64;
318 }
319 else if (type->getID() == XdmfTopologyType::Hexahedron_Spectral_125()->getID()) {
320 returnType = XDMF_TOPOLOGY_TYPE_HEXAHEDRON_SPECTRAL_125;
321 }
322 else if (type->getID() == XdmfTopologyType::Hexahedron_Spectral_216()->getID()) {
323 returnType = XDMF_TOPOLOGY_TYPE_HEXAHEDRON_SPECTRAL_216;
324 }
325 else if (type->getID() == XdmfTopologyType::Hexahedron_Spectral_343()->getID()) {
326 returnType = XDMF_TOPOLOGY_TYPE_HEXAHEDRON_SPECTRAL_343;
327 }
328 else if (type->getID() == XdmfTopologyType::Hexahedron_Spectral_512()->getID()) {
329 returnType = XDMF_TOPOLOGY_TYPE_HEXAHEDRON_SPECTRAL_512;
330 }
331 else if (type->getID() == XdmfTopologyType::Hexahedron_Spectral_729()->getID()) {
332 returnType = XDMF_TOPOLOGY_TYPE_HEXAHEDRON_SPECTRAL_729;
333 }
334 else if (type->getID() == XdmfTopologyType::Hexahedron_Spectral_1000()->getID()) {
335 returnType = XDMF_TOPOLOGY_TYPE_HEXAHEDRON_SPECTRAL_1000;
336 }
337 else if (type->getID() == XdmfTopologyType::Hexahedron_Spectral_1331()->getID()) {
338 returnType = XDMF_TOPOLOGY_TYPE_HEXAHEDRON_SPECTRAL_1331;
339 }
340 else if (type->getID() == XdmfTopologyType::Mixed()->getID()) {
341 returnType = XDMF_TOPOLOGY_TYPE_MIXED;
342 }
343 else {
344 returnType = -1;
345 }
346
347 return returnType;
348 }
349
XdmfTopologySetType(XDMFTOPOLOGY * topology,int type,int * status)350 void XdmfTopologySetType(XDMFTOPOLOGY * topology, int type, int * status)
351 {
352 XDMF_ERROR_WRAP_START(status)
353 shared_ptr<const XdmfTopologyType> newType = shared_ptr<const XdmfTopologyType>();
354
355 switch (type) {
356 case XDMF_TOPOLOGY_TYPE_POLYVERTEX:
357 newType = XdmfTopologyType::Polyvertex();
358 break;
359 case XDMF_TOPOLOGY_TYPE_POLYLINE:
360 newType = XdmfTopologyType::Polyline(0);
361 break;
362 case XDMF_TOPOLOGY_TYPE_POLYGON:
363 newType = XdmfTopologyType::Polygon(0);
364 break;
365 case XDMF_TOPOLOGY_TYPE_TRIANGLE:
366 newType = XdmfTopologyType::Triangle();
367 break;
368 case XDMF_TOPOLOGY_TYPE_QUADRILATERAL:
369 newType = XdmfTopologyType::Quadrilateral();
370 break;
371 case XDMF_TOPOLOGY_TYPE_TETRAHEDRON:
372 newType = XdmfTopologyType::Tetrahedron();
373 break;
374 case XDMF_TOPOLOGY_TYPE_PYRAMID:
375 newType = XdmfTopologyType::Pyramid();
376 break;
377 case XDMF_TOPOLOGY_TYPE_WEDGE:
378 newType = XdmfTopologyType::Wedge();
379 break;
380 case XDMF_TOPOLOGY_TYPE_HEXAHEDRON:
381 newType = XdmfTopologyType::Hexahedron();
382 break;
383 case XDMF_TOPOLOGY_TYPE_EDGE_3:
384 newType = XdmfTopologyType::Edge_3();
385 break;
386 case XDMF_TOPOLOGY_TYPE_TRIANGLE_6:
387 newType = XdmfTopologyType::Triangle_6();
388 break;
389 case XDMF_TOPOLOGY_TYPE_QUADRILATERAL_8:
390 newType = XdmfTopologyType::Quadrilateral_8();
391 break;
392 case XDMF_TOPOLOGY_TYPE_QUADRILATERAL_9:
393 newType = XdmfTopologyType::Quadrilateral_9();
394 break;
395 case XDMF_TOPOLOGY_TYPE_TETRAHEDRON_10:
396 newType = XdmfTopologyType::Tetrahedron_10();
397 break;
398 case XDMF_TOPOLOGY_TYPE_PYRAMID_13:
399 newType = XdmfTopologyType::Pyramid_13();
400 break;
401 case XDMF_TOPOLOGY_TYPE_WEDGE_15:
402 newType = XdmfTopologyType::Wedge_15();
403 break;
404 case XDMF_TOPOLOGY_TYPE_WEDGE_18:
405 newType = XdmfTopologyType::Wedge_18();
406 break;
407 case XDMF_TOPOLOGY_TYPE_HEXAHEDRON_20:
408 newType = XdmfTopologyType::Hexahedron_20();
409 break;
410 case XDMF_TOPOLOGY_TYPE_HEXAHEDRON_24:
411 newType = XdmfTopologyType::Hexahedron_24();
412 break;
413 case XDMF_TOPOLOGY_TYPE_HEXAHEDRON_27:
414 newType = XdmfTopologyType::Hexahedron_27();
415 break;
416 case XDMF_TOPOLOGY_TYPE_HEXAHEDRON_64:
417 newType = XdmfTopologyType::Hexahedron_64();
418 break;
419 case XDMF_TOPOLOGY_TYPE_HEXAHEDRON_125:
420 newType = XdmfTopologyType::Hexahedron_125();
421 break;
422 case XDMF_TOPOLOGY_TYPE_HEXAHEDRON_216:
423 newType = XdmfTopologyType::Hexahedron_216();
424 break;
425 case XDMF_TOPOLOGY_TYPE_HEXAHEDRON_343:
426 newType = XdmfTopologyType::Hexahedron_343();
427 break;
428 case XDMF_TOPOLOGY_TYPE_HEXAHEDRON_512:
429 newType = XdmfTopologyType::Hexahedron_512();
430 break;
431 case XDMF_TOPOLOGY_TYPE_HEXAHEDRON_729:
432 newType = XdmfTopologyType::Hexahedron_729();
433 break;
434 case XDMF_TOPOLOGY_TYPE_HEXAHEDRON_1000:
435 newType = XdmfTopologyType::Hexahedron_1000();
436 break;
437 case XDMF_TOPOLOGY_TYPE_HEXAHEDRON_1331:
438 newType = XdmfTopologyType::Hexahedron_1331();
439 break;
440 case XDMF_TOPOLOGY_TYPE_HEXAHEDRON_SPECTRAL_64:
441 newType = XdmfTopologyType::Hexahedron_Spectral_64();
442 break;
443 case XDMF_TOPOLOGY_TYPE_HEXAHEDRON_SPECTRAL_125:
444 newType = XdmfTopologyType::Hexahedron_Spectral_125();
445 break;
446 case XDMF_TOPOLOGY_TYPE_HEXAHEDRON_SPECTRAL_216:
447 newType = XdmfTopologyType::Hexahedron_Spectral_216();
448 break;
449 case XDMF_TOPOLOGY_TYPE_HEXAHEDRON_SPECTRAL_343:
450 newType = XdmfTopologyType::Hexahedron_Spectral_343();
451 break;
452 case XDMF_TOPOLOGY_TYPE_HEXAHEDRON_SPECTRAL_512:
453 newType = XdmfTopologyType::Hexahedron_Spectral_512();
454 break;
455 case XDMF_TOPOLOGY_TYPE_HEXAHEDRON_SPECTRAL_729:
456 newType = XdmfTopologyType::Hexahedron_Spectral_729();
457 break;
458 case XDMF_TOPOLOGY_TYPE_HEXAHEDRON_SPECTRAL_1000:
459 newType = XdmfTopologyType::Hexahedron_Spectral_1000();
460 break;
461 case XDMF_TOPOLOGY_TYPE_HEXAHEDRON_SPECTRAL_1331:
462 newType = XdmfTopologyType::Hexahedron_Spectral_1331();
463 break;
464 case XDMF_TOPOLOGY_TYPE_MIXED:
465 newType = XdmfTopologyType::Mixed();
466 break;
467 default:
468 {
469 std::stringstream sstr;
470 sstr << "Error: Invalid Topology Type: Code " << type;
471 XdmfError::message(XdmfError::FATAL, sstr.str());
472 }
473 break;
474 }
475
476 ((XdmfTopology *)topology)->setType(newType);
477 XDMF_ERROR_WRAP_END(status)
478 }
479
XdmfTopologySetPolyType(XDMFTOPOLOGY * topology,int type,int nodes,int * status)480 void XdmfTopologySetPolyType(XDMFTOPOLOGY * topology, int type, int nodes, int * status)
481 {
482 XDMF_ERROR_WRAP_START(status)
483 shared_ptr<const XdmfTopologyType> newType = shared_ptr<const XdmfTopologyType>();
484
485 switch (type) {
486 case XDMF_TOPOLOGY_TYPE_POLYVERTEX:
487 newType = XdmfTopologyType::Polyvertex();
488 break;
489 case XDMF_TOPOLOGY_TYPE_POLYLINE:
490 newType = XdmfTopologyType::Polyline(nodes);
491 break;
492 case XDMF_TOPOLOGY_TYPE_POLYGON:
493 newType = XdmfTopologyType::Polygon(nodes);
494 break;
495 case XDMF_TOPOLOGY_TYPE_TRIANGLE:
496 newType = XdmfTopologyType::Triangle();
497 break;
498 case XDMF_TOPOLOGY_TYPE_QUADRILATERAL:
499 newType = XdmfTopologyType::Quadrilateral();
500 break;
501 case XDMF_TOPOLOGY_TYPE_TETRAHEDRON:
502 newType = XdmfTopologyType::Tetrahedron();
503 break;
504 case XDMF_TOPOLOGY_TYPE_PYRAMID:
505 newType = XdmfTopologyType::Pyramid();
506 break;
507 case XDMF_TOPOLOGY_TYPE_WEDGE:
508 newType = XdmfTopologyType::Wedge();
509 break;
510 case XDMF_TOPOLOGY_TYPE_HEXAHEDRON:
511 newType = XdmfTopologyType::Hexahedron();
512 break;
513 case XDMF_TOPOLOGY_TYPE_EDGE_3:
514 newType = XdmfTopologyType::Edge_3();
515 break;
516 case XDMF_TOPOLOGY_TYPE_TRIANGLE_6:
517 newType = XdmfTopologyType::Triangle_6();
518 break;
519 case XDMF_TOPOLOGY_TYPE_QUADRILATERAL_8:
520 newType = XdmfTopologyType::Quadrilateral_8();
521 break;
522 case XDMF_TOPOLOGY_TYPE_QUADRILATERAL_9:
523 newType = XdmfTopologyType::Quadrilateral_9();
524 break;
525 case XDMF_TOPOLOGY_TYPE_TETRAHEDRON_10:
526 newType = XdmfTopologyType::Tetrahedron_10();
527 break;
528 case XDMF_TOPOLOGY_TYPE_PYRAMID_13:
529 newType = XdmfTopologyType::Pyramid_13();
530 break;
531 case XDMF_TOPOLOGY_TYPE_WEDGE_15:
532 newType = XdmfTopologyType::Wedge_15();
533 break;
534 case XDMF_TOPOLOGY_TYPE_WEDGE_18:
535 newType = XdmfTopologyType::Wedge_18();
536 break;
537 case XDMF_TOPOLOGY_TYPE_HEXAHEDRON_20:
538 newType = XdmfTopologyType::Hexahedron_20();
539 break;
540 case XDMF_TOPOLOGY_TYPE_HEXAHEDRON_24:
541 newType = XdmfTopologyType::Hexahedron_24();
542 break;
543 case XDMF_TOPOLOGY_TYPE_HEXAHEDRON_27:
544 newType = XdmfTopologyType::Hexahedron_27();
545 break;
546 case XDMF_TOPOLOGY_TYPE_HEXAHEDRON_64:
547 newType = XdmfTopologyType::Hexahedron_64();
548 break;
549 case XDMF_TOPOLOGY_TYPE_HEXAHEDRON_125:
550 newType = XdmfTopologyType::Hexahedron_125();
551 break;
552 case XDMF_TOPOLOGY_TYPE_HEXAHEDRON_216:
553 newType = XdmfTopologyType::Hexahedron_216();
554 break;
555 case XDMF_TOPOLOGY_TYPE_HEXAHEDRON_343:
556 newType = XdmfTopologyType::Hexahedron_343();
557 break;
558 case XDMF_TOPOLOGY_TYPE_HEXAHEDRON_512:
559 newType = XdmfTopologyType::Hexahedron_512();
560 break;
561 case XDMF_TOPOLOGY_TYPE_HEXAHEDRON_729:
562 newType = XdmfTopologyType::Hexahedron_729();
563 break;
564 case XDMF_TOPOLOGY_TYPE_HEXAHEDRON_1000:
565 newType = XdmfTopologyType::Hexahedron_1000();
566 break;
567 case XDMF_TOPOLOGY_TYPE_HEXAHEDRON_1331:
568 newType = XdmfTopologyType::Hexahedron_1331();
569 break;
570 case XDMF_TOPOLOGY_TYPE_HEXAHEDRON_SPECTRAL_64:
571 newType = XdmfTopologyType::Hexahedron_Spectral_64();
572 break;
573 case XDMF_TOPOLOGY_TYPE_HEXAHEDRON_SPECTRAL_125:
574 newType = XdmfTopologyType::Hexahedron_Spectral_125();
575 break;
576 case XDMF_TOPOLOGY_TYPE_HEXAHEDRON_SPECTRAL_216:
577 newType = XdmfTopologyType::Hexahedron_Spectral_216();
578 break;
579 case XDMF_TOPOLOGY_TYPE_HEXAHEDRON_SPECTRAL_343:
580 newType = XdmfTopologyType::Hexahedron_Spectral_343();
581 break;
582 case XDMF_TOPOLOGY_TYPE_HEXAHEDRON_SPECTRAL_512:
583 newType = XdmfTopologyType::Hexahedron_Spectral_512();
584 break;
585 case XDMF_TOPOLOGY_TYPE_HEXAHEDRON_SPECTRAL_729:
586 newType = XdmfTopologyType::Hexahedron_Spectral_729();
587 break;
588 case XDMF_TOPOLOGY_TYPE_HEXAHEDRON_SPECTRAL_1000:
589 newType = XdmfTopologyType::Hexahedron_Spectral_1000();
590 break;
591 case XDMF_TOPOLOGY_TYPE_HEXAHEDRON_SPECTRAL_1331:
592 newType = XdmfTopologyType::Hexahedron_Spectral_1331();
593 break;
594 case XDMF_TOPOLOGY_TYPE_MIXED:
595 newType = XdmfTopologyType::Mixed();
596 break;
597 default:
598 {
599 std::stringstream sstr;
600 sstr << "Error: Invalid Topology Type: Code " << type;
601 XdmfError::message(XdmfError::FATAL, sstr.str());
602 }
603 break;
604 }
605 ((XdmfTopology *)topology)->setType(newType);
606 XDMF_ERROR_WRAP_END(status)
607 }
608
609 XDMF_ITEM_C_CHILD_WRAPPER(XdmfTopology, XDMFTOPOLOGY)
610 XDMF_ARRAY_C_CHILD_WRAPPER(XdmfTopology, XDMFTOPOLOGY)
611