netgen-mesher 6.2.2506.post35.dev0__cp314-cp314-win_amd64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (340) hide show
  1. netgen/NgOCC.py +7 -0
  2. netgen/__init__.py +114 -0
  3. netgen/__init__.pyi +22 -0
  4. netgen/__main__.py +53 -0
  5. netgen/cmake/NetgenConfig.cmake +79 -0
  6. netgen/cmake/netgen-targets-release.cmake +69 -0
  7. netgen/cmake/netgen-targets.cmake +146 -0
  8. netgen/config/__init__.py +1 -0
  9. netgen/config/__init__.pyi +52 -0
  10. netgen/config/__main__.py +4 -0
  11. netgen/config/config.py +68 -0
  12. netgen/config/config.pyi +54 -0
  13. netgen/csg.py +25 -0
  14. netgen/geom2d.py +178 -0
  15. netgen/gui.py +82 -0
  16. netgen/include/core/archive.hpp +1256 -0
  17. netgen/include/core/array.hpp +1760 -0
  18. netgen/include/core/autodiff.hpp +1131 -0
  19. netgen/include/core/autodiffdiff.hpp +733 -0
  20. netgen/include/core/bitarray.hpp +240 -0
  21. netgen/include/core/concurrentqueue.h +3619 -0
  22. netgen/include/core/exception.hpp +145 -0
  23. netgen/include/core/flags.hpp +199 -0
  24. netgen/include/core/hashtable.hpp +1281 -0
  25. netgen/include/core/localheap.hpp +318 -0
  26. netgen/include/core/logging.hpp +117 -0
  27. netgen/include/core/memtracer.hpp +221 -0
  28. netgen/include/core/mpi4py_pycapi.h +245 -0
  29. netgen/include/core/mpi_wrapper.hpp +643 -0
  30. netgen/include/core/ng_mpi.hpp +94 -0
  31. netgen/include/core/ng_mpi_generated_declarations.hpp +155 -0
  32. netgen/include/core/ng_mpi_native.hpp +25 -0
  33. netgen/include/core/ngcore.hpp +32 -0
  34. netgen/include/core/ngcore_api.hpp +152 -0
  35. netgen/include/core/ngstream.hpp +115 -0
  36. netgen/include/core/paje_trace.hpp +279 -0
  37. netgen/include/core/profiler.hpp +382 -0
  38. netgen/include/core/python_ngcore.hpp +457 -0
  39. netgen/include/core/ranges.hpp +109 -0
  40. netgen/include/core/register_archive.hpp +100 -0
  41. netgen/include/core/signal.hpp +82 -0
  42. netgen/include/core/simd.hpp +160 -0
  43. netgen/include/core/simd_arm64.hpp +407 -0
  44. netgen/include/core/simd_avx.hpp +394 -0
  45. netgen/include/core/simd_avx512.hpp +285 -0
  46. netgen/include/core/simd_generic.hpp +1053 -0
  47. netgen/include/core/simd_math.hpp +178 -0
  48. netgen/include/core/simd_sse.hpp +289 -0
  49. netgen/include/core/statushandler.hpp +37 -0
  50. netgen/include/core/symboltable.hpp +153 -0
  51. netgen/include/core/table.hpp +810 -0
  52. netgen/include/core/taskmanager.hpp +1161 -0
  53. netgen/include/core/type_traits.hpp +65 -0
  54. netgen/include/core/utils.hpp +385 -0
  55. netgen/include/core/version.hpp +102 -0
  56. netgen/include/core/xbool.hpp +47 -0
  57. netgen/include/csg/algprim.hpp +563 -0
  58. netgen/include/csg/brick.hpp +150 -0
  59. netgen/include/csg/csg.hpp +43 -0
  60. netgen/include/csg/csgeom.hpp +389 -0
  61. netgen/include/csg/csgparser.hpp +101 -0
  62. netgen/include/csg/curve2d.hpp +67 -0
  63. netgen/include/csg/edgeflw.hpp +112 -0
  64. netgen/include/csg/explicitcurve2d.hpp +113 -0
  65. netgen/include/csg/extrusion.hpp +185 -0
  66. netgen/include/csg/gencyl.hpp +70 -0
  67. netgen/include/csg/geoml.hpp +16 -0
  68. netgen/include/csg/identify.hpp +213 -0
  69. netgen/include/csg/manifold.hpp +29 -0
  70. netgen/include/csg/meshsurf.hpp +46 -0
  71. netgen/include/csg/polyhedra.hpp +121 -0
  72. netgen/include/csg/revolution.hpp +180 -0
  73. netgen/include/csg/singularref.hpp +84 -0
  74. netgen/include/csg/solid.hpp +295 -0
  75. netgen/include/csg/specpoin.hpp +194 -0
  76. netgen/include/csg/spline3d.hpp +99 -0
  77. netgen/include/csg/splinesurface.hpp +85 -0
  78. netgen/include/csg/surface.hpp +394 -0
  79. netgen/include/csg/triapprox.hpp +63 -0
  80. netgen/include/csg/vscsg.hpp +34 -0
  81. netgen/include/general/autodiff.hpp +356 -0
  82. netgen/include/general/autoptr.hpp +39 -0
  83. netgen/include/general/gzstream.h +121 -0
  84. netgen/include/general/hashtabl.hpp +1692 -0
  85. netgen/include/general/myadt.hpp +48 -0
  86. netgen/include/general/mystring.hpp +226 -0
  87. netgen/include/general/netgenout.hpp +205 -0
  88. netgen/include/general/ngarray.hpp +797 -0
  89. netgen/include/general/ngbitarray.hpp +149 -0
  90. netgen/include/general/ngpython.hpp +74 -0
  91. netgen/include/general/optmem.hpp +44 -0
  92. netgen/include/general/parthreads.hpp +138 -0
  93. netgen/include/general/seti.hpp +50 -0
  94. netgen/include/general/sort.hpp +47 -0
  95. netgen/include/general/spbita2d.hpp +59 -0
  96. netgen/include/general/stack.hpp +114 -0
  97. netgen/include/general/table.hpp +280 -0
  98. netgen/include/general/template.hpp +509 -0
  99. netgen/include/geom2d/csg2d.hpp +750 -0
  100. netgen/include/geom2d/geometry2d.hpp +280 -0
  101. netgen/include/geom2d/spline2d.hpp +234 -0
  102. netgen/include/geom2d/vsgeom2d.hpp +28 -0
  103. netgen/include/gprim/adtree.hpp +1392 -0
  104. netgen/include/gprim/geom2d.hpp +858 -0
  105. netgen/include/gprim/geom3d.hpp +749 -0
  106. netgen/include/gprim/geomfuncs.hpp +212 -0
  107. netgen/include/gprim/geomobjects.hpp +544 -0
  108. netgen/include/gprim/geomops.hpp +404 -0
  109. netgen/include/gprim/geomtest3d.hpp +101 -0
  110. netgen/include/gprim/gprim.hpp +33 -0
  111. netgen/include/gprim/spline.hpp +778 -0
  112. netgen/include/gprim/splinegeometry.hpp +73 -0
  113. netgen/include/gprim/transform3d.hpp +216 -0
  114. netgen/include/include/acisgeom.hpp +3 -0
  115. netgen/include/include/csg.hpp +1 -0
  116. netgen/include/include/geometry2d.hpp +1 -0
  117. netgen/include/include/gprim.hpp +1 -0
  118. netgen/include/include/incopengl.hpp +62 -0
  119. netgen/include/include/inctcl.hpp +13 -0
  120. netgen/include/include/incvis.hpp +6 -0
  121. netgen/include/include/linalg.hpp +1 -0
  122. netgen/include/include/meshing.hpp +1 -0
  123. netgen/include/include/myadt.hpp +1 -0
  124. netgen/include/include/mydefs.hpp +70 -0
  125. netgen/include/include/mystdlib.h +59 -0
  126. netgen/include/include/netgen_config.hpp +27 -0
  127. netgen/include/include/netgen_version.hpp +9 -0
  128. netgen/include/include/nginterface_v2_impl.hpp +395 -0
  129. netgen/include/include/ngsimd.hpp +1 -0
  130. netgen/include/include/occgeom.hpp +1 -0
  131. netgen/include/include/opti.hpp +1 -0
  132. netgen/include/include/parallel.hpp +1 -0
  133. netgen/include/include/stlgeom.hpp +1 -0
  134. netgen/include/include/visual.hpp +1 -0
  135. netgen/include/interface/rw_medit.hpp +11 -0
  136. netgen/include/interface/writeuser.hpp +80 -0
  137. netgen/include/linalg/densemat.hpp +414 -0
  138. netgen/include/linalg/linalg.hpp +29 -0
  139. netgen/include/linalg/opti.hpp +142 -0
  140. netgen/include/linalg/polynomial.hpp +47 -0
  141. netgen/include/linalg/vector.hpp +217 -0
  142. netgen/include/meshing/adfront2.hpp +274 -0
  143. netgen/include/meshing/adfront3.hpp +332 -0
  144. netgen/include/meshing/basegeom.hpp +370 -0
  145. netgen/include/meshing/bcfunctions.hpp +53 -0
  146. netgen/include/meshing/bisect.hpp +72 -0
  147. netgen/include/meshing/boundarylayer.hpp +113 -0
  148. netgen/include/meshing/classifyhpel.hpp +1984 -0
  149. netgen/include/meshing/clusters.hpp +46 -0
  150. netgen/include/meshing/curvedelems.hpp +274 -0
  151. netgen/include/meshing/delaunay2d.hpp +73 -0
  152. netgen/include/meshing/fieldlines.hpp +103 -0
  153. netgen/include/meshing/findip.hpp +198 -0
  154. netgen/include/meshing/findip2.hpp +103 -0
  155. netgen/include/meshing/geomsearch.hpp +69 -0
  156. netgen/include/meshing/global.hpp +54 -0
  157. netgen/include/meshing/hpref_hex.hpp +330 -0
  158. netgen/include/meshing/hpref_prism.hpp +3405 -0
  159. netgen/include/meshing/hpref_pyramid.hpp +154 -0
  160. netgen/include/meshing/hpref_quad.hpp +2082 -0
  161. netgen/include/meshing/hpref_segm.hpp +122 -0
  162. netgen/include/meshing/hpref_tet.hpp +4230 -0
  163. netgen/include/meshing/hpref_trig.hpp +848 -0
  164. netgen/include/meshing/hprefinement.hpp +366 -0
  165. netgen/include/meshing/improve2.hpp +178 -0
  166. netgen/include/meshing/improve3.hpp +151 -0
  167. netgen/include/meshing/localh.hpp +223 -0
  168. netgen/include/meshing/meshclass.hpp +1076 -0
  169. netgen/include/meshing/meshfunc.hpp +47 -0
  170. netgen/include/meshing/meshing.hpp +63 -0
  171. netgen/include/meshing/meshing2.hpp +163 -0
  172. netgen/include/meshing/meshing3.hpp +123 -0
  173. netgen/include/meshing/meshtool.hpp +90 -0
  174. netgen/include/meshing/meshtype.hpp +1930 -0
  175. netgen/include/meshing/msghandler.hpp +62 -0
  176. netgen/include/meshing/paralleltop.hpp +172 -0
  177. netgen/include/meshing/python_mesh.hpp +206 -0
  178. netgen/include/meshing/ruler2.hpp +172 -0
  179. netgen/include/meshing/ruler3.hpp +211 -0
  180. netgen/include/meshing/soldata.hpp +141 -0
  181. netgen/include/meshing/specials.hpp +17 -0
  182. netgen/include/meshing/surfacegeom.hpp +73 -0
  183. netgen/include/meshing/topology.hpp +1003 -0
  184. netgen/include/meshing/validate.hpp +21 -0
  185. netgen/include/meshing/visual_interface.hpp +71 -0
  186. netgen/include/mydefs.hpp +70 -0
  187. netgen/include/nginterface.h +474 -0
  188. netgen/include/nginterface_v2.hpp +406 -0
  189. netgen/include/nglib.h +697 -0
  190. netgen/include/nglib_occ.h +50 -0
  191. netgen/include/occ/occ_edge.hpp +47 -0
  192. netgen/include/occ/occ_face.hpp +52 -0
  193. netgen/include/occ/occ_solid.hpp +23 -0
  194. netgen/include/occ/occ_utils.hpp +376 -0
  195. netgen/include/occ/occ_vertex.hpp +30 -0
  196. netgen/include/occ/occgeom.hpp +659 -0
  197. netgen/include/occ/occmeshsurf.hpp +168 -0
  198. netgen/include/occ/vsocc.hpp +33 -0
  199. netgen/include/pybind11/LICENSE +29 -0
  200. netgen/include/pybind11/attr.h +722 -0
  201. netgen/include/pybind11/buffer_info.h +208 -0
  202. netgen/include/pybind11/cast.h +2361 -0
  203. netgen/include/pybind11/chrono.h +228 -0
  204. netgen/include/pybind11/common.h +2 -0
  205. netgen/include/pybind11/complex.h +74 -0
  206. netgen/include/pybind11/conduit/README.txt +15 -0
  207. netgen/include/pybind11/conduit/pybind11_conduit_v1.h +116 -0
  208. netgen/include/pybind11/conduit/pybind11_platform_abi_id.h +87 -0
  209. netgen/include/pybind11/conduit/wrap_include_python_h.h +72 -0
  210. netgen/include/pybind11/critical_section.h +56 -0
  211. netgen/include/pybind11/detail/class.h +823 -0
  212. netgen/include/pybind11/detail/common.h +1348 -0
  213. netgen/include/pybind11/detail/cpp_conduit.h +75 -0
  214. netgen/include/pybind11/detail/descr.h +226 -0
  215. netgen/include/pybind11/detail/dynamic_raw_ptr_cast_if_possible.h +39 -0
  216. netgen/include/pybind11/detail/exception_translation.h +71 -0
  217. netgen/include/pybind11/detail/function_record_pyobject.h +191 -0
  218. netgen/include/pybind11/detail/init.h +538 -0
  219. netgen/include/pybind11/detail/internals.h +799 -0
  220. netgen/include/pybind11/detail/native_enum_data.h +209 -0
  221. netgen/include/pybind11/detail/pybind11_namespace_macros.h +82 -0
  222. netgen/include/pybind11/detail/struct_smart_holder.h +378 -0
  223. netgen/include/pybind11/detail/type_caster_base.h +1591 -0
  224. netgen/include/pybind11/detail/typeid.h +65 -0
  225. netgen/include/pybind11/detail/using_smart_holder.h +22 -0
  226. netgen/include/pybind11/detail/value_and_holder.h +90 -0
  227. netgen/include/pybind11/eigen/common.h +9 -0
  228. netgen/include/pybind11/eigen/matrix.h +723 -0
  229. netgen/include/pybind11/eigen/tensor.h +521 -0
  230. netgen/include/pybind11/eigen.h +12 -0
  231. netgen/include/pybind11/embed.h +320 -0
  232. netgen/include/pybind11/eval.h +161 -0
  233. netgen/include/pybind11/functional.h +147 -0
  234. netgen/include/pybind11/gil.h +199 -0
  235. netgen/include/pybind11/gil_safe_call_once.h +102 -0
  236. netgen/include/pybind11/gil_simple.h +37 -0
  237. netgen/include/pybind11/iostream.h +265 -0
  238. netgen/include/pybind11/native_enum.h +67 -0
  239. netgen/include/pybind11/numpy.h +2312 -0
  240. netgen/include/pybind11/operators.h +202 -0
  241. netgen/include/pybind11/options.h +92 -0
  242. netgen/include/pybind11/pybind11.h +3645 -0
  243. netgen/include/pybind11/pytypes.h +2680 -0
  244. netgen/include/pybind11/stl/filesystem.h +114 -0
  245. netgen/include/pybind11/stl.h +666 -0
  246. netgen/include/pybind11/stl_bind.h +858 -0
  247. netgen/include/pybind11/subinterpreter.h +299 -0
  248. netgen/include/pybind11/trampoline_self_life_support.h +65 -0
  249. netgen/include/pybind11/type_caster_pyobject_ptr.h +61 -0
  250. netgen/include/pybind11/typing.h +298 -0
  251. netgen/include/pybind11/warnings.h +75 -0
  252. netgen/include/stlgeom/meshstlsurface.hpp +67 -0
  253. netgen/include/stlgeom/stlgeom.hpp +491 -0
  254. netgen/include/stlgeom/stlline.hpp +193 -0
  255. netgen/include/stlgeom/stltool.hpp +331 -0
  256. netgen/include/stlgeom/stltopology.hpp +419 -0
  257. netgen/include/stlgeom/vsstl.hpp +58 -0
  258. netgen/include/visualization/meshdoc.hpp +42 -0
  259. netgen/include/visualization/mvdraw.hpp +325 -0
  260. netgen/include/visualization/vispar.hpp +128 -0
  261. netgen/include/visualization/visual.hpp +28 -0
  262. netgen/include/visualization/visual_api.hpp +10 -0
  263. netgen/include/visualization/vssolution.hpp +399 -0
  264. netgen/lib/libnggui.lib +0 -0
  265. netgen/lib/ngcore.lib +0 -0
  266. netgen/lib/nglib.lib +0 -0
  267. netgen/lib/togl.lib +0 -0
  268. netgen/libnggui.dll +0 -0
  269. netgen/libngguipy.lib +0 -0
  270. netgen/libngguipy.pyd +0 -0
  271. netgen/libngpy/_NgOCC.pyi +1545 -0
  272. netgen/libngpy/__init__.pyi +7 -0
  273. netgen/libngpy/_csg.pyi +259 -0
  274. netgen/libngpy/_geom2d.pyi +323 -0
  275. netgen/libngpy/_meshing.pyi +1111 -0
  276. netgen/libngpy/_stl.pyi +131 -0
  277. netgen/libngpy.lib +0 -0
  278. netgen/libngpy.pyd +0 -0
  279. netgen/meshing.py +65 -0
  280. netgen/ngcore.dll +0 -0
  281. netgen/nglib.dll +0 -0
  282. netgen/occ.py +52 -0
  283. netgen/read_gmsh.py +259 -0
  284. netgen/read_meshio.py +22 -0
  285. netgen/stl.py +2 -0
  286. netgen/togl.dll +0 -0
  287. netgen/version.py +2 -0
  288. netgen/webgui.py +529 -0
  289. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/boundarycondition.geo +16 -0
  290. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/boxcyl.geo +32 -0
  291. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/circle_on_cube.geo +27 -0
  292. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/cone.geo +13 -0
  293. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/cube.geo +16 -0
  294. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/cubeandring.geo +55 -0
  295. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/cubeandspheres.geo +21 -0
  296. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/cubemcyl.geo +18 -0
  297. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/cubemsphere.geo +19 -0
  298. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/cylinder.geo +12 -0
  299. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/cylsphere.geo +12 -0
  300. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/doc/ng4.pdf +0 -0
  301. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/ellipsoid.geo +8 -0
  302. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/ellipticcyl.geo +10 -0
  303. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/extrusion.geo +99 -0
  304. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/fichera.geo +24 -0
  305. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/frame.step +11683 -0
  306. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/hinge.stl +8486 -0
  307. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/lshape3d.geo +26 -0
  308. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/manyholes.geo +26 -0
  309. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/manyholes2.geo +26 -0
  310. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/matrix.geo +27 -0
  311. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/ortho.geo +11 -0
  312. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/part1.stl +2662 -0
  313. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/period.geo +33 -0
  314. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/py_tutorials/exportNeutral.py +26 -0
  315. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/py_tutorials/mesh.py +19 -0
  316. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/py_tutorials/shaft.geo +65 -0
  317. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/revolution.geo +18 -0
  318. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/screw.step +1694 -0
  319. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/sculpture.geo +13 -0
  320. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/shaft.geo +65 -0
  321. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/shell.geo +10 -0
  322. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/sphere.geo +8 -0
  323. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/sphereincube.geo +17 -0
  324. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/square.in2d +35 -0
  325. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/squarecircle.in2d +48 -0
  326. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/squarehole.in2d +47 -0
  327. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/torus.geo +8 -0
  328. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/trafo.geo +57 -0
  329. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/twobricks.geo +15 -0
  330. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/twocubes.geo +18 -0
  331. netgen_mesher-6.2.2506.post35.dev0.data/data/share/netgen/twocyl.geo +16 -0
  332. netgen_mesher-6.2.2506.post35.dev0.dist-info/METADATA +15 -0
  333. netgen_mesher-6.2.2506.post35.dev0.dist-info/RECORD +340 -0
  334. netgen_mesher-6.2.2506.post35.dev0.dist-info/WHEEL +5 -0
  335. netgen_mesher-6.2.2506.post35.dev0.dist-info/entry_points.txt +2 -0
  336. netgen_mesher-6.2.2506.post35.dev0.dist-info/licenses/AUTHORS +1 -0
  337. netgen_mesher-6.2.2506.post35.dev0.dist-info/licenses/LICENSE +504 -0
  338. netgen_mesher-6.2.2506.post35.dev0.dist-info/top_level.txt +2 -0
  339. pyngcore/__init__.py +1 -0
  340. pyngcore/pyngcore.cp314-win_amd64.pyd +0 -0
@@ -0,0 +1,1003 @@
1
+ #ifndef TOPOLOGY
2
+ #define TOPOLOGY
3
+
4
+ /**************************************************************************/
5
+ /* File: topology.hh */
6
+ /* Author: Joachim Schoeberl */
7
+ /* Date: 27. Apr. 01 */
8
+ /**************************************************************************/
9
+
10
+ /*
11
+ Mesh topology
12
+ (Elements, Faces, Edges, Vertices
13
+ */
14
+
15
+ #include "meshtype.hpp"
16
+
17
+ namespace netgen
18
+ {
19
+ // typedef int T_EDGE;
20
+ // typedef int T_FACE;
21
+
22
+ class EdgeIndex : public Index<int,EdgeIndex,0>
23
+ {
24
+ public:
25
+ using Index::Index;
26
+ };
27
+
28
+ class FaceIndex : public Index<int,FaceIndex,0>
29
+ {
30
+ public:
31
+ using Index::Index;
32
+ };
33
+
34
+ typedef EdgeIndex T_EDGE;
35
+ typedef FaceIndex T_FACE;
36
+
37
+ class MeshTopology
38
+ {
39
+ const Mesh * mesh;
40
+ bool buildvertex2element;
41
+ bool buildedges;
42
+ bool buildfaces;
43
+ bool build_parent_edges = false; // may be changed to default = false
44
+ bool build_parent_faces = false; // may be changed to default = false
45
+ static bool static_buildedges, static_buildfaces, static_buildvertex2element;
46
+
47
+ Array<std::array<PointIndex,2>> edge2vert;
48
+ Array<std::array<PointIndex,4>> face2vert;
49
+
50
+ Array<std::array<EdgeIndex,12>, ElementIndex> edges;
51
+ Array<std::array<FaceIndex,6>, ElementIndex> faces;
52
+ Array<std::array<EdgeIndex,4>, SurfaceElementIndex> surfedges;
53
+
54
+ Array<EdgeIndex,SegmentIndex> segedges;
55
+ Array<FaceIndex,SurfaceElementIndex> surffaces;
56
+ // Array<INDEX_2, SurfaceElementIndex> surf2volelement;
57
+ Array<std::array<ElementIndex,2>, SurfaceElementIndex> surf2volelement;
58
+ Array<SurfaceElementIndex> face2surfel;
59
+
60
+ Array<SegmentIndex> edge2segment;
61
+ Table<ElementIndex, PointIndex> vert2element;
62
+ Table<SurfaceElementIndex, PointIndex> vert2surfelement;
63
+ Table<SegmentIndex,PointIndex> vert2segment;
64
+ Table<int,PointIndex> vert2pointelement;
65
+ int timestamp;
66
+ public:
67
+ MeshTopology () = default;
68
+ MeshTopology (MeshTopology && top) = default;
69
+ DLL_HEADER MeshTopology (const Mesh & amesh);
70
+ DLL_HEADER ~MeshTopology ();
71
+ MeshTopology & operator= (MeshTopology && top) = default;
72
+
73
+ void SetBuildVertex2Element (bool bv2e) { buildvertex2element = bv2e; }
74
+ void SetBuildEdges (bool be) { buildedges = be; }
75
+ void SetBuildFaces (bool bf) { buildfaces = bf; }
76
+ void SetBuildParentEdges (bool bh) { build_parent_edges = bh; }
77
+ void SetBuildParentFaces (bool bh) { build_parent_faces = bh; }
78
+
79
+ DLL_HEADER void EnableTable (string name, bool set);
80
+ static void EnableTableStatic (string name, bool set);
81
+
82
+ bool HasEdges () const { return buildedges; }
83
+ bool HasFaces () const { return buildfaces; }
84
+ bool HasParentEdges () const { return build_parent_edges; }
85
+
86
+ void Update(NgTaskManager tm = &DummyTaskManager, NgTracer tracer = &DummyTracer);
87
+ bool NeedsUpdate() const;
88
+
89
+
90
+ size_t GetNEdges () const { return edge2vert.Size(); }
91
+ size_t GetNFaces () const { return face2vert.Size(); }
92
+
93
+ static inline short int GetNVertices (ELEMENT_TYPE et);
94
+ static inline short int GetNPoints (ELEMENT_TYPE et);
95
+ static inline short int GetNEdges (ELEMENT_TYPE et);
96
+ static inline short int GetNFaces (ELEMENT_TYPE et);
97
+
98
+ DLL_HEADER static const Point3d * GetVertices (ELEMENT_TYPE et);
99
+ inline static const ELEMENT_EDGE * GetEdges1 (ELEMENT_TYPE et);
100
+ inline static const ELEMENT_EDGE * GetEdges0 (ELEMENT_TYPE et);
101
+ inline static FlatArray<ELEMENT_EDGE> GetEdges (ELEMENT_TYPE et);
102
+ inline static const ELEMENT_FACE * GetFaces1 (ELEMENT_TYPE et);
103
+ inline static const ELEMENT_FACE * GetFaces0 (ELEMENT_TYPE et);
104
+
105
+ [[deprecated("use GetEdge(SegmentIndex) instead")]]
106
+ EdgeIndex GetSegmentEdge (int segnr) const { return segedges[segnr-1]+1; }
107
+
108
+ EdgeIndex GetEdge (SegmentIndex segnr) const { return segedges[segnr]; }
109
+
110
+ [[deprecated("use GetEdge(SegmentIndex) instead")]]
111
+ void GetSegmentEdge (int segnr, int & enr, int & orient) const;
112
+
113
+ [[deprecated("use GetEdges (ElementIndex) -> FlatArray")]]
114
+ void GetElementEdges (int elnr, NgArray<int> & edges) const;
115
+ [[deprecated("use GetFaces (ElementIndex) -> FlatArray")]]
116
+ void GetElementFaces (int elnr, NgArray<int> & faces) const;
117
+ void GetElementFaces (int elnr, NgArray<int> & faces, bool withorientation) const;
118
+
119
+ // definition in meshclass.hpp
120
+ inline FlatArray<EdgeIndex> GetEdges (ElementIndex elnr) const;
121
+ inline FlatArray<FaceIndex> GetFaces (ElementIndex elnr) const;
122
+
123
+
124
+ // [[deprecated("use GetElementEdge instead")]]
125
+ void GetElementEdgeOrientations (int elnr, NgArray<int> & eorient) const;
126
+ // [[deprecated("use GetElementEdge instead")]]
127
+ void GetElementFaceOrientations (int elnr, NgArray<int> & forient) const;
128
+
129
+ [[deprecated("use GetEdges (ElementIndex) -> FlatArray")]]
130
+ int GetElementEdges (int elnr, int * edges, int * orient) const;
131
+
132
+ // [[deprecated("use GetFaces (ElementIndex) -> FlatArray")]]
133
+ int GetElementFaces (int elnr, int * faces, int * orient) const;
134
+
135
+ // [[deprecated("use GetElementEdge instead")]]
136
+ int GetElementEdgeOrientation (int elnr, int locedgenr) const; // old style
137
+ // [[deprecated("use GetElementEdge instead")]]
138
+ int GetElementFaceOrientation (int elnr, int locfacenr) const; // old style
139
+ // [[deprecated("use GetElementEdge instead")]]
140
+ int GetSurfaceElementEdgeOrientation (int elnr, int locedgenr) const; // old style
141
+ // [[deprecated("use GetElementEdge instead")]]
142
+ int GetSurfaceElementFaceOrientation2 (int elnr) const; // old style
143
+ // [[deprecated("use GetElementEdge instead")]]
144
+ int GetSegmentEdgeOrientation (int elnr) const; // old style
145
+
146
+ DLL_HEADER void GetFaceVertices (int fnr, NgArray<int> & vertices) const;
147
+ DLL_HEADER void GetFaceVertices (int fnr, int * vertices) const;
148
+ auto GetFaceVertices (int fnr) const
149
+ { return FlatArray (face2vert[fnr][3].IsValid() ? 4 : 3, &face2vert[fnr][0]); }
150
+ [[deprecated("use GetEdgeVertices -> tupe(v0,v1) instead")]]
151
+ DLL_HEADER void GetEdgeVertices (int enr, int & v1, int & v2) const;
152
+ [[deprecated("use GetEdgeVertices -> tupe(v0,v1) instead")]]
153
+ DLL_HEADER void GetEdgeVertices (int enr, PointIndex & v1, PointIndex & v2) const;
154
+ auto GetEdgeVertices (int enr) const { return std::array{edge2vert[enr][0], edge2vert[enr][1]}; }
155
+ auto GetEdgeVerticesPtr (int enr) const { return &edge2vert[enr][0]; }
156
+ auto GetFaceVerticesPtr (int fnr) const { return &face2vert[fnr][0]; }
157
+ DLL_HEADER void GetFaceEdges (int fnr, NgArray<int> & edges, bool withorientation = false) const;
158
+
159
+ ELEMENT_TYPE GetFaceType (int fnr) const
160
+ { return (!face2vert[fnr-1][3].IsValid()) ? TRIG : QUAD; }
161
+
162
+ [[deprecated("use GetEdges (SurfaceElementIndex) -> FlatArray")]]
163
+ void GetSurfaceElementEdges (int elnr, NgArray<int> & edges) const;
164
+ [[deprecated("use GetFace(SurfaceElementIndex")]]
165
+ int GetSurfaceElementFace1 (int elnr) const { return surffaces[elnr-1]+1; }
166
+ [[deprecated("orientation is outdated")]]
167
+ void GetSurfaceElementEdgeOrientations (int elnr, NgArray<int> & eorient) const;
168
+ // [[deprecated("orientation is outdated")]]
169
+ int GetSurfaceElementFaceOrientation (int elnr) const;
170
+
171
+ [[deprecated("use GetEdge -> FlatArray instead")]]
172
+ void GetEdges (SurfaceElementIndex elnr, NgArray<int> & edges) const;
173
+
174
+ inline FlatArray<EdgeIndex> GetEdges (SurfaceElementIndex elnr) const;
175
+ // { return FlatArray<EdgeIndex>(GetNEdges ( (*mesh)[elnr].GetType()), &surfedges[elnr][0]); }
176
+
177
+ int GetFace (SurfaceElementIndex elnr) const
178
+ { return surffaces[elnr]; }
179
+
180
+ int GetSurfaceElementEdges (int elnr, int * edges, int * orient) const;
181
+
182
+ int GetNSurfedges() const {return surfedges.Size();}
183
+ [[deprecated("use GetEdges(ElementIndex) instead")]]
184
+ const EdgeIndex * GetElementEdgesPtr (int elnr) const { return &edges[IndexBASE<ElementIndex>()+elnr][0]; }
185
+ const EdgeIndex * GetSurfaceElementEdgesPtr (int selnr) const { return &surfedges[selnr][0]; }
186
+ const EdgeIndex * GetSegmentElementEdgesPtr (int selnr) const { return &segedges[selnr]; }
187
+
188
+ const FaceIndex * GetElementFacesPtr (int elnr) const { return &faces[IndexBASE<ElementIndex>()+elnr][0]; }
189
+ const FaceIndex * GetSurfaceElementFacesPtr (int selnr) const { return &surffaces[selnr]; }
190
+
191
+
192
+ void GetSurface2VolumeElement (int selnr, int & elnr1, int & elnr2) const
193
+ {
194
+ elnr1 = surf2volelement[SurfaceElementIndex::Base() + selnr-1][0]+1 - ElementIndex::Base();
195
+ elnr2 = surf2volelement[SurfaceElementIndex::Base() + selnr-1][1]+1 - ElementIndex::Base();
196
+ }
197
+
198
+ std::array<ElementIndex,2> GetSurface2VolumeElement (SurfaceElementIndex sei)
199
+ {
200
+ return surf2volelement[sei];
201
+ }
202
+
203
+ [[deprecated("use GetSurfaceEleement -> SurfaceElementIndex")]]
204
+ int GetFace2SurfaceElement1 (int fnr) const { return face2surfel[fnr-1]+1 - SurfaceElementIndex::Base(); }
205
+ SurfaceElementIndex GetFace2SurfaceElement (int fnr) const { return face2surfel[fnr]; }
206
+
207
+ SegmentIndex GetSegmentOfEdge(int edgenr) const { return edge2segment[edgenr-1]; }
208
+
209
+ [[deprecated("use GetVertexElements -> FlatArray instead")]]
210
+ void GetVertexElements (int vnr, Array<ElementIndex> & elements) const;
211
+
212
+ FlatArray<ElementIndex> GetVertexElements (PointIndex vnr) const
213
+ { return vert2element[vnr]; }
214
+
215
+ [[deprecated("use GetVertexSurfaceElements -> FlatArray instead")]]
216
+ void GetVertexSurfaceElements( int vnr, Array<SurfaceElementIndex>& elements ) const;
217
+ const auto & GetVertexSurfaceElements( ) const { return vert2surfelement; }
218
+
219
+ FlatArray<SurfaceElementIndex> GetVertexSurfaceElements(PointIndex vnr) const
220
+ { return vert2surfelement[vnr]; }
221
+
222
+ FlatArray<SegmentIndex> GetVertexSegments (PointIndex vnr) const
223
+ { return vert2segment[vnr]; }
224
+
225
+ FlatArray<int> GetVertexPointElements (PointIndex vnr) const
226
+ { return vert2pointelement[vnr]; }
227
+
228
+ DLL_HEADER int GetVerticesEdge ( PointIndex v1, PointIndex v2) const;
229
+ void GetSegmentVolumeElements ( int segnr, NgArray<ElementIndex> & els ) const;
230
+ void GetSegmentSurfaceElements ( int segnr, NgArray<SurfaceElementIndex> & els ) const;
231
+
232
+ // Call this before Update() to discard old edges
233
+ void ClearEdges() { edge2vert.SetSize0(); }
234
+
235
+ private:
236
+ Array<std::tuple<int, std::array<int,3>>> parent_edges;
237
+ void BuildParentEdges ();
238
+
239
+ Array<std::tuple<int, std::array<int,4>>> parent_faces;
240
+ void BuildParentFaces ();
241
+ public:
242
+ auto GetParentEdges (int enr) const { return parent_edges[enr]; }
243
+ auto GetParentFaces (int fnr) const { return parent_faces[fnr]; }
244
+ };
245
+
246
+
247
+
248
+
249
+
250
+
251
+
252
+
253
+
254
+
255
+ inline short int MeshTopology :: GetNVertices (ELEMENT_TYPE et)
256
+ {
257
+ switch (et)
258
+ {
259
+ case SEGMENT:
260
+ case SEGMENT3:
261
+ return 2;
262
+
263
+ case TRIG:
264
+ case TRIG6:
265
+ return 3;
266
+
267
+ case QUAD:
268
+ case QUAD6:
269
+ case QUAD8:
270
+ return 4;
271
+
272
+ case TET:
273
+ case TET10:
274
+ return 4;
275
+
276
+ case PYRAMID:
277
+ case PYRAMID13:
278
+ return 5;
279
+
280
+ case PRISM:
281
+ case PRISM12:
282
+ case PRISM15:
283
+ return 6;
284
+
285
+ case HEX7:
286
+ return 7;
287
+
288
+ case HEX:
289
+ case HEX20:
290
+ return 8;
291
+
292
+ // default:
293
+ // cerr << "Ng_ME_GetNVertices, illegal element type " << et << endl;
294
+ }
295
+ return 0;
296
+ }
297
+
298
+
299
+ inline short int MeshTopology :: GetNPoints (ELEMENT_TYPE et)
300
+ {
301
+ switch (et)
302
+ {
303
+ case SEGMENT:
304
+ return 2;
305
+ case SEGMENT3:
306
+ return 3;
307
+
308
+ case TRIG:
309
+ return 3;
310
+ case TRIG6:
311
+ return 6;
312
+
313
+ case QUAD:
314
+ case QUAD6:
315
+ return 4;
316
+
317
+ case QUAD8:
318
+ return 8;
319
+
320
+ case TET:
321
+ return 4;
322
+ case TET10:
323
+ return 10;
324
+
325
+ case PYRAMID:
326
+ return 5;
327
+ case PYRAMID13:
328
+ return 13;
329
+
330
+ case PRISM:
331
+ return 6;
332
+ case PRISM12:
333
+ return 12;
334
+ case PRISM15:
335
+ return 15;
336
+
337
+ case HEX7:
338
+ return 7;
339
+
340
+ case HEX:
341
+ return 8;
342
+
343
+ case HEX20:
344
+ return 20;
345
+ // default:
346
+ // cerr << "Ng_ME_GetNVertices, illegal element type " << et << endl;
347
+ }
348
+ return -99;
349
+ }
350
+
351
+
352
+
353
+ inline short int MeshTopology :: GetNEdges (ELEMENT_TYPE et)
354
+ {
355
+ // __assume(et >= SEGMENT && et <= PYRAMID13);
356
+ switch (et)
357
+ {
358
+ case SEGMENT:
359
+ case SEGMENT3:
360
+ return 1;
361
+
362
+ case TRIG:
363
+ case TRIG6:
364
+ return 3;
365
+
366
+ case QUAD:
367
+ case QUAD6:
368
+ case QUAD8:
369
+ return 4;
370
+
371
+ case TET:
372
+ case TET10:
373
+ return 6;
374
+
375
+ case PYRAMID:
376
+ case PYRAMID13:
377
+ return 8;
378
+
379
+ case PRISM:
380
+ case PRISM12:
381
+ case PRISM15:
382
+ return 9;
383
+
384
+ case HEX7:
385
+ return 11;
386
+
387
+ case HEX:
388
+ case HEX20:
389
+ return 12;
390
+ // default:
391
+ // cerr << "Ng_ME_GetNEdges, illegal element type " << et << endl;
392
+ }
393
+ return -99;
394
+ }
395
+
396
+
397
+ inline short int MeshTopology :: GetNFaces (ELEMENT_TYPE et)
398
+ {
399
+ // __assume(et >= SEGMENT && et <= PYRAMID13);
400
+ switch (et)
401
+ {
402
+ case SEGMENT:
403
+ case SEGMENT3:
404
+ return 0;
405
+
406
+ case TRIG:
407
+ case TRIG6:
408
+ return 1;
409
+
410
+ case QUAD:
411
+ case QUAD6:
412
+ case QUAD8:
413
+ return 1;
414
+
415
+ case TET:
416
+ case TET10:
417
+ return 4;
418
+
419
+ case PYRAMID:
420
+ case PYRAMID13:
421
+ return 5;
422
+
423
+ case PRISM:
424
+ case PRISM12:
425
+ case PRISM15:
426
+ return 5;
427
+
428
+ case HEX:
429
+ case HEX20:
430
+ case HEX7:
431
+ return 6;
432
+
433
+ default:
434
+ return -99;
435
+ // default:
436
+ // cerr << "Ng_ME_GetNVertices, illegal element type " << et << endl;
437
+ }
438
+ }
439
+
440
+
441
+
442
+
443
+
444
+
445
+ const ELEMENT_EDGE * MeshTopology :: GetEdges1 (ELEMENT_TYPE et)
446
+ {
447
+ static ELEMENT_EDGE segm_edges[1] =
448
+ { { 1, 2 }};
449
+
450
+ static ELEMENT_EDGE trig_edges[3] =
451
+ { { 3, 1 },
452
+ { 2, 3 },
453
+ { 1, 2 }};
454
+
455
+ static ELEMENT_EDGE quad_edges[4] =
456
+ { { 1, 2 },
457
+ { 3, 4 },
458
+ { 4, 1 },
459
+ { 2, 3 }};
460
+
461
+
462
+ static ELEMENT_EDGE tet_edges[6] =
463
+ { { 4, 1 },
464
+ { 4, 2 },
465
+ { 4, 3 },
466
+ { 1, 2 },
467
+ { 1, 3 },
468
+ { 2, 3 }};
469
+
470
+ static ELEMENT_EDGE prism_edges[9] =
471
+ { { 3, 1 },
472
+ { 1, 2 },
473
+ { 3, 2 },
474
+ { 6, 4 },
475
+ { 4, 5 },
476
+ { 6, 5 },
477
+ { 3, 6 },
478
+ { 1, 4 },
479
+ { 2, 5 }};
480
+
481
+ static ELEMENT_EDGE pyramid_edges[8] =
482
+ { { 1, 2 },
483
+ { 2, 3 },
484
+ { 1, 4 },
485
+ { 4, 3 },
486
+ { 1, 5 },
487
+ { 2, 5 },
488
+ { 3, 5 },
489
+ { 4, 5 }};
490
+
491
+ static ELEMENT_EDGE hex7_edges[11] =
492
+ {
493
+ { 1, 2 },
494
+ { 3, 4 },
495
+ { 4, 1 },
496
+ { 2, 3 },
497
+ { 5, 6 },
498
+ { 7, 5 },
499
+ { 6, 7 },
500
+ { 1, 5 },
501
+ { 2, 6 },
502
+ { 3, 7 },
503
+ { 4, 7 },
504
+ };
505
+
506
+ static ELEMENT_EDGE hex_edges[12] =
507
+ {
508
+ { 1, 2 },
509
+ { 3, 4 },
510
+ { 4, 1 },
511
+ { 2, 3 },
512
+ { 5, 6 },
513
+ { 7, 8 },
514
+ { 8, 5 },
515
+ { 6, 7 },
516
+ { 1, 5 },
517
+ { 2, 6 },
518
+ { 3, 7 },
519
+ { 4, 8 },
520
+ };
521
+
522
+
523
+ switch (et)
524
+ {
525
+ case SEGMENT:
526
+ case SEGMENT3:
527
+ return segm_edges;
528
+
529
+ case TRIG:
530
+ case TRIG6:
531
+ return trig_edges;
532
+
533
+ case QUAD:
534
+ case QUAD6:
535
+ case QUAD8:
536
+ return quad_edges;
537
+
538
+ case TET:
539
+ case TET10:
540
+ return tet_edges;
541
+
542
+ case PYRAMID:
543
+ case PYRAMID13:
544
+ return pyramid_edges;
545
+
546
+ case PRISM:
547
+ case PRISM12:
548
+ case PRISM15:
549
+ return prism_edges;
550
+
551
+ case HEX7:
552
+ return hex7_edges;
553
+
554
+ case HEX:
555
+ case HEX20:
556
+ return hex_edges;
557
+ // default:
558
+ // cerr << "Ng_ME_GetEdges, illegal element type " << et << endl;
559
+ }
560
+ return 0;
561
+ }
562
+
563
+
564
+
565
+ const ELEMENT_EDGE * MeshTopology :: GetEdges0 (ELEMENT_TYPE et)
566
+ {
567
+ static ELEMENT_EDGE segm_edges[1] =
568
+ { { 0, 1 }};
569
+
570
+ static ELEMENT_EDGE trig_edges[3] =
571
+ { { 2, 0 },
572
+ { 1, 2 },
573
+ { 0, 1 }};
574
+
575
+ static ELEMENT_EDGE quad_edges[4] =
576
+ { { 0, 1 },
577
+ { 2, 3 },
578
+ { 3, 0 },
579
+ { 1, 2 }};
580
+
581
+
582
+ static ELEMENT_EDGE tet_edges[6] =
583
+ { { 3, 0 },
584
+ { 3, 1 },
585
+ { 3, 2 },
586
+ { 0, 1 },
587
+ { 0, 2 },
588
+ { 1, 2 }};
589
+
590
+ static ELEMENT_EDGE prism_edges[9] =
591
+ { { 2, 0 },
592
+ { 0, 1 },
593
+ { 2, 1 },
594
+ { 5, 3 },
595
+ { 3, 4 },
596
+ { 5, 4 },
597
+ { 2, 5 },
598
+ { 0, 3 },
599
+ { 1, 4 }};
600
+
601
+ static ELEMENT_EDGE pyramid_edges[8] =
602
+ { { 0, 1 },
603
+ { 1, 2 },
604
+ { 0, 3 },
605
+ { 3, 2 },
606
+ { 0, 4 },
607
+ { 1, 4 },
608
+ { 2, 4 },
609
+ { 3, 4 }};
610
+
611
+ static ELEMENT_EDGE hex7_edges[11] =
612
+ {
613
+ { 0, 1 },
614
+ { 2, 3 },
615
+ { 3, 0 },
616
+ { 1, 2 },
617
+ { 4, 5 },
618
+ { 6, 4 },
619
+ { 5, 6 },
620
+ { 0, 4 },
621
+ { 1, 5 },
622
+ { 2, 6 },
623
+ { 3, 6 },
624
+ };
625
+
626
+ static ELEMENT_EDGE hex_edges[12] =
627
+ {
628
+ { 0, 1 },
629
+ { 2, 3 },
630
+ { 3, 0 },
631
+ { 1, 2 },
632
+ { 4, 5 },
633
+ { 6, 7 },
634
+ { 7, 4 },
635
+ { 5, 6 },
636
+ { 0, 4 },
637
+ { 1, 5 },
638
+ { 2, 6 },
639
+ { 3, 7 },
640
+ };
641
+
642
+
643
+ switch (et)
644
+ {
645
+ case SEGMENT:
646
+ case SEGMENT3:
647
+ return segm_edges;
648
+
649
+ case TRIG:
650
+ case TRIG6:
651
+ return trig_edges;
652
+
653
+ case QUAD:
654
+ case QUAD6:
655
+ case QUAD8:
656
+ return quad_edges;
657
+
658
+ case TET:
659
+ case TET10:
660
+ return tet_edges;
661
+
662
+ case PYRAMID:
663
+ case PYRAMID13:
664
+ return pyramid_edges;
665
+
666
+ case PRISM:
667
+ case PRISM12:
668
+ case PRISM15:
669
+ return prism_edges;
670
+
671
+ case HEX7:
672
+ return hex7_edges;
673
+
674
+ case HEX:
675
+ case HEX20:
676
+ return hex_edges;
677
+ // default:
678
+ // cerr << "Ng_ME_GetEdges, illegal element type " << et << endl;
679
+ }
680
+ return 0;
681
+ }
682
+
683
+
684
+ FlatArray<ELEMENT_EDGE> MeshTopology :: GetEdges (ELEMENT_TYPE et)
685
+ {
686
+ static ELEMENT_EDGE segm_edges[1] =
687
+ { { 0, 1 }};
688
+
689
+ static ELEMENT_EDGE trig_edges[3] =
690
+ { { 2, 0 },
691
+ { 1, 2 },
692
+ { 0, 1 }};
693
+
694
+ static ELEMENT_EDGE quad_edges[4] =
695
+ { { 0, 1 },
696
+ { 2, 3 },
697
+ { 3, 0 },
698
+ { 1, 2 }};
699
+
700
+
701
+ static ELEMENT_EDGE tet_edges[6] =
702
+ { { 3, 0 },
703
+ { 3, 1 },
704
+ { 3, 2 },
705
+ { 0, 1 },
706
+ { 0, 2 },
707
+ { 1, 2 }};
708
+
709
+ static ELEMENT_EDGE prism_edges[9] =
710
+ { { 2, 0 },
711
+ { 0, 1 },
712
+ { 2, 1 },
713
+ { 5, 3 },
714
+ { 3, 4 },
715
+ { 5, 4 },
716
+ { 2, 5 },
717
+ { 0, 3 },
718
+ { 1, 4 }};
719
+
720
+ static ELEMENT_EDGE pyramid_edges[8] =
721
+ { { 0, 1 },
722
+ { 1, 2 },
723
+ { 0, 3 },
724
+ { 3, 2 },
725
+ { 0, 4 },
726
+ { 1, 4 },
727
+ { 2, 4 },
728
+ { 3, 4 }};
729
+
730
+ static ELEMENT_EDGE hex7_edges[11] =
731
+ {
732
+ { 0, 1 },
733
+ { 2, 3 },
734
+ { 3, 0 },
735
+ { 1, 2 },
736
+ { 4, 5 },
737
+ { 6, 4 },
738
+ { 5, 6 },
739
+ { 0, 4 },
740
+ { 1, 5 },
741
+ { 2, 6 },
742
+ { 3, 6 },
743
+ };
744
+
745
+ static ELEMENT_EDGE hex_edges[12] =
746
+ {
747
+ { 0, 1 },
748
+ { 2, 3 },
749
+ { 3, 0 },
750
+ { 1, 2 },
751
+ { 4, 5 },
752
+ { 6, 7 },
753
+ { 7, 4 },
754
+ { 5, 6 },
755
+ { 0, 4 },
756
+ { 1, 5 },
757
+ { 2, 6 },
758
+ { 3, 7 },
759
+ };
760
+
761
+ switch (et)
762
+ {
763
+ case SEGMENT:
764
+ case SEGMENT3:
765
+ return { 1, segm_edges };
766
+
767
+ case TRIG:
768
+ case TRIG6:
769
+ return { 3, trig_edges };
770
+
771
+ case QUAD:
772
+ case QUAD6:
773
+ case QUAD8:
774
+ return { 4, quad_edges };
775
+
776
+ case TET:
777
+ case TET10:
778
+ return { 6, tet_edges };
779
+
780
+ case PYRAMID:
781
+ case PYRAMID13:
782
+ return { 8, pyramid_edges };
783
+
784
+ case PRISM:
785
+ case PRISM12:
786
+ case PRISM15:
787
+ return { 9, prism_edges };
788
+
789
+ case HEX7:
790
+ return { 11, hex7_edges };
791
+
792
+ case HEX:
793
+ case HEX20:
794
+ return { 12, hex_edges };
795
+ // default:
796
+ // cerr << "Ng_ME_GetEdges, illegal element type " << et << endl;
797
+ }
798
+ return { 0, nullptr };
799
+ }
800
+
801
+
802
+
803
+
804
+
805
+
806
+
807
+
808
+ inline const ELEMENT_FACE * MeshTopology :: GetFaces1 (ELEMENT_TYPE et)
809
+ {
810
+ static const ELEMENT_FACE trig_faces[1] =
811
+ { { 1, 2, 3, 0 } };
812
+ static const ELEMENT_FACE quad_faces[1] =
813
+ { { 1, 2, 3, 4 } };
814
+
815
+ static const ELEMENT_FACE tet_faces[4] =
816
+ { { 4, 2, 3, 0 },
817
+ { 4, 3, 1, 0 },
818
+ { 4, 1, 2, 0 },
819
+ { 1, 3, 2, 0 } };
820
+
821
+ static const ELEMENT_FACE prism_faces[5] =
822
+ {
823
+ { 1, 3, 2, 0 },
824
+ { 4, 5, 6, 0 },
825
+ { 3, 1, 4, 6 },
826
+ { 1, 2, 5, 4 },
827
+ { 2, 3, 6, 5 }
828
+ };
829
+
830
+ static const ELEMENT_FACE pyramid_faces[5] =
831
+ {
832
+ { 1, 2, 5, 0 },
833
+ { 2, 3, 5, 0 },
834
+ { 3, 4, 5, 0 },
835
+ { 4, 1, 5, 0 },
836
+ { 1, 4, 3, 2 }
837
+ };
838
+
839
+ static const ELEMENT_FACE hex7_faces[6] =
840
+ {
841
+ { 1, 4, 3, 2 },
842
+ { 5, 6, 7, 0 },
843
+ { 1, 2, 6, 5 },
844
+ { 2, 3, 7, 6 },
845
+ { 3, 4, 7, 0 },
846
+ { 4, 1, 5, 7 }
847
+ };
848
+
849
+
850
+ static const ELEMENT_FACE hex_faces[6] =
851
+ {
852
+ { 1, 4, 3, 2 },
853
+ { 5, 6, 7, 8 },
854
+ { 1, 2, 6, 5 },
855
+ { 2, 3, 7, 6 },
856
+ { 3, 4, 8, 7 },
857
+ { 4, 1, 5, 8 }
858
+ };
859
+
860
+
861
+
862
+ switch (et)
863
+ {
864
+ case TRIG:
865
+ case TRIG6:
866
+ return trig_faces;
867
+
868
+ case QUAD:
869
+ case QUAD6:
870
+ case QUAD8:
871
+ return quad_faces;
872
+
873
+
874
+ case TET:
875
+ case TET10:
876
+ return tet_faces;
877
+
878
+ case PRISM:
879
+ case PRISM12:
880
+ case PRISM15:
881
+ return prism_faces;
882
+
883
+ case PYRAMID:
884
+ case PYRAMID13:
885
+ return pyramid_faces;
886
+
887
+ case SEGMENT:
888
+ case SEGMENT3:
889
+
890
+ case HEX7:
891
+ return hex7_faces;
892
+
893
+ case HEX:
894
+ case HEX20:
895
+ return hex_faces;
896
+
897
+ // default:
898
+ // cerr << "Ng_ME_GetVertices, illegal element type " << et << endl;
899
+ }
900
+ return 0;
901
+ }
902
+
903
+
904
+
905
+
906
+
907
+ inline const ELEMENT_FACE * MeshTopology :: GetFaces0 (ELEMENT_TYPE et)
908
+ {
909
+ static const ELEMENT_FACE trig_faces[1] =
910
+ { { 0, 1, 2, -1 } };
911
+ static const ELEMENT_FACE quad_faces[1] =
912
+ { { 0, 1, 2, 3 } };
913
+
914
+ static const ELEMENT_FACE tet_faces[4] =
915
+ { { 3, 1, 2, -1 },
916
+ { 3, 2, 0, -1 },
917
+ { 3, 0, 1, -1 },
918
+ { 0, 2, 1, -1 } };
919
+
920
+ static const ELEMENT_FACE prism_faces[5] =
921
+ {
922
+ { 0, 2, 1, -1 },
923
+ { 3, 4, 5, -1 },
924
+ { 2, 0, 3, 5 },
925
+ { 0, 1, 4, 3 },
926
+ { 1, 2, 5, 4 }
927
+ };
928
+
929
+ static const ELEMENT_FACE pyramid_faces[5] =
930
+ {
931
+ { 0, 1, 4, -1 },
932
+ { 1, 2, 4, -1 },
933
+ { 2, 3, 4, -1 },
934
+ { 3, 0, 4, -1 },
935
+ { 0, 3, 2, 1 }
936
+ };
937
+
938
+ static const ELEMENT_FACE hex7_faces[6] =
939
+ {
940
+ { 0, 3, 2, 1 },
941
+ { 4, 5, 6, -1},
942
+ { 0, 1, 5, 4 },
943
+ { 1, 2, 6, 5 },
944
+ { 2, 3, 6, -1},
945
+ { 3, 0, 4, 6 }
946
+ };
947
+
948
+ static const ELEMENT_FACE hex_faces[6] =
949
+ {
950
+ { 0, 3, 2, 1 },
951
+ { 4, 5, 6, 7 },
952
+ { 0, 1, 5, 4 },
953
+ { 1, 2, 6, 5 },
954
+ { 2, 3, 7, 6 },
955
+ { 3, 0, 4, 7 }
956
+ };
957
+
958
+
959
+
960
+ switch (et)
961
+ {
962
+ case TRIG:
963
+ case TRIG6:
964
+ return trig_faces;
965
+
966
+ case QUAD:
967
+ case QUAD6:
968
+ case QUAD8:
969
+ return quad_faces;
970
+
971
+
972
+ case TET:
973
+ case TET10:
974
+ return tet_faces;
975
+
976
+ case PRISM:
977
+ case PRISM12:
978
+ case PRISM15:
979
+ return prism_faces;
980
+
981
+ case PYRAMID:
982
+ case PYRAMID13:
983
+ return pyramid_faces;
984
+
985
+ case SEGMENT:
986
+ case SEGMENT3:
987
+
988
+ case HEX7:
989
+ return hex7_faces;
990
+
991
+ case HEX:
992
+ case HEX20:
993
+ return hex_faces;
994
+
995
+ // default:
996
+ // cerr << "Ng_ME_GetVertices, illegal element type " << et << endl;
997
+ }
998
+ return 0;
999
+ }
1000
+
1001
+ }
1002
+
1003
+ #endif