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,1076 @@
1
+ #ifndef NETGEN_MESHCLASS_HPP
2
+ #define NETGEN_MESHCLASS_HPP
3
+
4
+ /**************************************************************************/
5
+ /* File: meshclass.hpp */
6
+ /* Author: Joachim Schoeberl */
7
+ /* Date: 20. Nov. 99 */
8
+ /**************************************************************************/
9
+
10
+ /*
11
+ The mesh class
12
+ */
13
+
14
+ #include<filesystem>
15
+
16
+ #include <gprim/adtree.hpp>
17
+ #include <gprim/transform3d.hpp>
18
+
19
+ #include "meshtype.hpp"
20
+ #include "localh.hpp"
21
+ #include "topology.hpp"
22
+ #include "paralleltop.hpp"
23
+
24
+ namespace netgen
25
+ {
26
+ class NetgenGeometry;
27
+ using namespace std;
28
+
29
+ static constexpr int NG_MPI_TAG_MESH = 210;
30
+
31
+
32
+ enum resthtype { RESTRICTH_FACE, RESTRICTH_EDGE,
33
+ RESTRICTH_SURFACEELEMENT, RESTRICTH_POINT, RESTRICTH_SEGMENT };
34
+
35
+ class HPRefElement;
36
+ class CurvedElements;
37
+ class AnisotropicClusters;
38
+ class ParallelMeshTopology;
39
+
40
+ class MarkedTet;
41
+ class MarkedPrism;
42
+ class MarkedIdentification;
43
+ class MarkedTri;
44
+ class MarkedQuad;
45
+
46
+ typedef Array<MarkedTet,ElementIndex> T_MTETS;
47
+ typedef NgArray<MarkedPrism> T_MPRISMS;
48
+ typedef NgArray<MarkedIdentification> T_MIDS;
49
+ typedef NgArray<MarkedTri> T_MTRIS;
50
+ typedef NgArray<MarkedQuad> T_MQUADS;
51
+
52
+ struct BisectionInfo
53
+ {
54
+ unique_ptr<T_MTETS> mtets;
55
+ unique_ptr<T_MPRISMS> mprisms;
56
+ unique_ptr<T_MIDS> mids;
57
+ unique_ptr<T_MTRIS> mtris;
58
+ unique_ptr<T_MQUADS> mquads;
59
+
60
+ BisectionInfo();
61
+ ~BisectionInfo();
62
+ };
63
+
64
+ /// 2d/3d mesh
65
+ class Mesh
66
+ {
67
+ public:
68
+ // typedef Array<MeshPoint, PointIndex> T_POINTS;
69
+ typedef netgen::T_POINTS T_POINTS;
70
+
71
+ private:
72
+ /// point coordinates
73
+ T_POINTS points;
74
+
75
+ // The communicator for this mesh. Just a dummy if compiled without MPI.
76
+ NgMPI_Comm comm;
77
+
78
+ /// line-segments at edges
79
+ Array<Segment, SegmentIndex> segments;
80
+ /// surface elements, 2d-inner elements
81
+ Array<Element2d, SurfaceElementIndex> surfelements;
82
+ /// volume elements
83
+ Array<Element, ElementIndex> volelements;
84
+ /// points will be fixed forever
85
+ Array<PointIndex> lockedpoints;
86
+
87
+
88
+ /// surface indices at boundary nodes
89
+ // TABLE<int,PointIndex::BASE> surfacesonnode;
90
+ /// boundary edges (1..normal bedge, 2..segment)
91
+ unique_ptr<INDEX_2_CLOSED_HASHTABLE<int>> boundaryedges;
92
+ ///
93
+ unique_ptr<INDEX_2_CLOSED_HASHTABLE<int>> segmentht;
94
+ ///
95
+ unique_ptr<INDEX_3_CLOSED_HASHTABLE<int>> surfelementht;
96
+ unique_ptr<INDEX_3_CLOSED_HASHTABLE<int>> illegal_trigs;
97
+
98
+ /// faces of rest-solid
99
+ NgArray<Element2d> openelements;
100
+ /// open segments for surface meshing
101
+ NgArray<Segment> opensegments;
102
+
103
+ Array<int> tets_in_qualclass;
104
+
105
+
106
+
107
+ /**
108
+ Representation of local mesh-size h (one function per mesh layer)
109
+ */
110
+ Array<shared_ptr<LocalH>> lochfunc;
111
+ ///
112
+ double hglob;
113
+ ///
114
+ double hmin;
115
+ ///
116
+ NgArray<double> maxhdomain;
117
+
118
+ /**
119
+ the face-index of the surface element maps into
120
+ this table.
121
+ */
122
+ Array<FaceDescriptor> facedecoding;
123
+
124
+
125
+ /**
126
+ the edge-index of the line element maps into
127
+ this table.
128
+ */
129
+ NgArray<EdgeDescriptor> edgedecoding;
130
+
131
+ Array<string*> region_name_cd[4];
132
+ Array<string*> & materials = region_name_cd[0];
133
+ Array<string*> & bcnames = region_name_cd[1];
134
+ Array<string*> & cd2names = region_name_cd[2];
135
+ Array<string*> & cd3names = region_name_cd[3];
136
+
137
+ /*
138
+ /// sub-domain materials
139
+ Array<string*> materials;
140
+
141
+ /// labels for boundary conditions
142
+ Array<string*> bcnames;
143
+
144
+ /// labels for co dim 2 bboundary conditions
145
+ Array<string*> cd2names;
146
+
147
+ /// labels for co dim 3 bbboundary conditions
148
+ Array<string*> cd3names;
149
+ */
150
+
151
+ /// Periodic surface, close surface, etc. identifications
152
+ unique_ptr<Identifications> ident;
153
+
154
+
155
+ /// number of vertices (if < 0, use np)
156
+ int numvertices;
157
+
158
+ /// geometric search tree for interval intersection search
159
+ unique_ptr<BoxTree<3, ElementIndex>> elementsearchtree_vol;
160
+ unique_ptr<BoxTree<3, SurfaceElementIndex>> elementsearchtree_surf;
161
+ /// time stamp for tree
162
+ mutable size_t elementsearchtreets[4];
163
+
164
+ /// element -> face, element -> edge etc ...
165
+ MeshTopology topology;
166
+ /// methods for high order elements
167
+ unique_ptr<CurvedElements> curvedelems;
168
+
169
+ /// nodes identified by close points
170
+ unique_ptr<AnisotropicClusters> clusters;
171
+
172
+ /// space dimension (2 or 3)
173
+ int dimension;
174
+
175
+ /// changed by every minor modification (addpoint, ...)
176
+ int timestamp;
177
+ /// changed after finishing global algorithm (improve, ...)
178
+ int majortimestamp;
179
+
180
+ /// mesh access semaphores.
181
+ NgMutex mutex;
182
+ /// mesh access semaphores.
183
+ NgMutex majormutex;
184
+
185
+ SymbolTable< NgArray<int>* > userdata_int;
186
+ SymbolTable< NgArray<double>* > userdata_double;
187
+
188
+
189
+ mutable NgArray< Point3d > pointcurves;
190
+ mutable NgArray<int> pointcurves_startpoint;
191
+ mutable NgArray<double> pointcurves_red,pointcurves_green,pointcurves_blue;
192
+
193
+
194
+ /// start element for point search (GetElementOfPoint)
195
+ mutable int ps_startelement;
196
+
197
+
198
+ #ifdef PARALLEL
199
+ /// connection to parallel meshes
200
+ unique_ptr<ParallelMeshTopology> paralleltop;
201
+ #endif
202
+
203
+
204
+ shared_ptr<NetgenGeometry> geometry;
205
+
206
+
207
+ public:
208
+ DLL_HEADER void BuildBoundaryEdges(bool rebuild=true);
209
+
210
+ DLL_HEADER bool PointContainedIn2DElement(const Point3d & p,
211
+ double lami[3],
212
+ SurfaceElementIndex element,
213
+ bool consider3D = false) const;
214
+ DLL_HEADER bool PointContainedIn3DElement(const Point3d & p,
215
+ double lami[3],
216
+ ElementIndex element,
217
+ double tol=1e-4) const;
218
+ DLL_HEADER bool PointContainedIn3DElementOld(const Point3d & p,
219
+ double lami[3],
220
+ const int element,
221
+ double tol=1e-4) const;
222
+
223
+ public:
224
+ Signal<> updateSignal;
225
+ BisectionInfo bisectioninfo;
226
+
227
+ // store coarse mesh before hp-refinement
228
+ unique_ptr<NgArray<HPRefElement>> hpelements;
229
+ unique_ptr<Mesh> coarsemesh;
230
+
231
+
232
+ /// number of refinement levels
233
+ // int mglevels;
234
+ // number of vertices on each refinement level:
235
+ NgArray<size_t> level_nv;
236
+ /// refinement hierarchy
237
+ Array<PointIndices<2>,PointIndex> mlbetweennodes;
238
+ /// parent element of volume element
239
+ Array<ElementIndex, ElementIndex> mlparentelement;
240
+ /// parent element of surface element
241
+ Array<SurfaceElementIndex, SurfaceElementIndex> mlparentsurfaceelement;
242
+
243
+
244
+
245
+ ///
246
+ DLL_HEADER Mesh();
247
+ ///
248
+ DLL_HEADER ~Mesh();
249
+
250
+ DLL_HEADER Mesh & operator= (const Mesh & mesh2);
251
+
252
+ ///
253
+ DLL_HEADER void DeleteMesh();
254
+
255
+ ///
256
+ void ClearSurfaceElements();
257
+
258
+ ///
259
+ DLL_HEADER void ClearVolumeElements()
260
+ {
261
+ volelements.SetSize(0);
262
+ timestamp = NextTimeStamp();
263
+ }
264
+
265
+ ///
266
+ DLL_HEADER void ClearSegments()
267
+ {
268
+ segments.SetSize(0);
269
+ timestamp = NextTimeStamp();
270
+ }
271
+
272
+ ///
273
+ bool TestOk () const;
274
+
275
+ void SetAllocSize(int nnodes, int nsegs, int nsel, int nel);
276
+
277
+
278
+ DLL_HEADER PointIndex AddPoint (const Point3d & p, int layer = 1);
279
+ DLL_HEADER PointIndex AddPoint (const Point3d & p, int layer, POINTTYPE type);
280
+
281
+ auto GetNP () const { return points.Size(); }
282
+
283
+ // [[deprecated("Use Point(PointIndex) instead of int !")]]
284
+ MeshPoint & Point(int i) // 1-based
285
+ {
286
+ // return points.Elem(i);
287
+ // return Point (PointIndex(i+PointIndex::BASE-1));
288
+ return Point (PointIndex(IndexBASE<PointIndex>()+i-1));
289
+ }
290
+ MeshPoint & Point(PointIndex pi) { return points[pi]; }
291
+ // [[deprecated("Use Point(PointIndex) instead of int !")]]
292
+ const MeshPoint & Point(int i) const
293
+ {
294
+ // return points.Get(i);
295
+ // return Point (PointIndex(i+PointIndex::BASE-1));
296
+ return Point (PointIndex(IndexBASE<PointIndex>()+i-1));
297
+ }
298
+ const MeshPoint & Point(PointIndex pi) const { return points[pi]; }
299
+
300
+ const MeshPoint & operator[] (PointIndex pi) const { return points[pi]; }
301
+ MeshPoint & operator[] (PointIndex pi) { return points[pi]; }
302
+
303
+ const T_POINTS & Points() const { return points; }
304
+ T_POINTS & Points() { return points; }
305
+
306
+
307
+ DLL_HEADER SegmentIndex AddSegment (const Segment & s);
308
+ void DeleteSegment (int segnr)
309
+ {
310
+ segments[segnr-1][0].Invalidate();
311
+ segments[segnr-1][1].Invalidate();
312
+ }
313
+ /*
314
+ void FullDeleteSegment (int segnr) // von wem ist das ???
315
+ {
316
+ segments.Delete(segnr-PointIndex::BASE);
317
+ }
318
+ */
319
+
320
+ int GetNSeg () const { return segments.Size(); }
321
+ // [[deprecated("Use LineSegment(SegmentIndex) instead of int !")]]
322
+ Segment & LineSegment(int i) { return segments[i-1]; }
323
+ // [[deprecated("Use LineSegment(SegmentIndex) instead of int !")]]
324
+ const Segment & LineSegment(int i) const { return segments[i-1]; }
325
+
326
+ Segment & LineSegment(SegmentIndex si) { return segments[si]; }
327
+ const Segment & LineSegment(SegmentIndex si) const { return segments[si]; }
328
+ const Segment & operator[] (SegmentIndex si) const { return segments[si]; }
329
+ Segment & operator[] (SegmentIndex si) { return segments[si]; }
330
+
331
+ const auto & LineSegments() const { return segments; }
332
+ auto & LineSegments() { return segments; }
333
+
334
+ Array<Element0d> pointelements; // only via python interface
335
+
336
+ DLL_HEADER SurfaceElementIndex AddSurfaceElement (const Element2d & el);
337
+ // write to pre-allocated container, thread-safe
338
+ DLL_HEADER void SetSurfaceElement (SurfaceElementIndex sei, const Element2d & el);
339
+
340
+ [[deprecated("Use Delete(SurfaceElementIndex) instead of int !")]]
341
+ void DeleteSurfaceElement (int eli)
342
+ {
343
+ /*
344
+ surfelements.Elem(eli).Delete();
345
+ surfelements.Elem(eli).PNum(1).Invalidate();
346
+ surfelements.Elem(eli).PNum(2).Invalidate();
347
+ surfelements.Elem(eli).PNum(3).Invalidate();
348
+ */
349
+ surfelements[eli-1].Delete();
350
+ /*
351
+ surfelements[eli-1].PNum(1).Invalidate();
352
+ surfelements[eli-1].PNum(2).Invalidate();
353
+ surfelements[eli-1].PNum(3).Invalidate();
354
+ */
355
+ timestamp = NextTimeStamp();
356
+ }
357
+
358
+ [[deprecated("Use Delete(SurfaceElementIndex) instead !")]]
359
+ void DeleteSurfaceElement (SurfaceElementIndex eli)
360
+ {
361
+ // for (auto & p : surfelements[eli].PNums()) p.Invalidate();
362
+ surfelements[eli].Delete();
363
+ timestamp = NextTimeStamp();
364
+ }
365
+
366
+ void Delete (SurfaceElementIndex eli)
367
+ {
368
+ // for (auto & p : surfelements[eli].PNums()) p.Invalidate();
369
+ surfelements[eli].Delete();
370
+ timestamp = NextTimeStamp();
371
+ }
372
+
373
+ auto GetNSE () const { return surfelements.Size(); }
374
+
375
+ // [[deprecated("Use SurfaceElement(SurfaceElementIndex) instead of int !")]]
376
+ Element2d & SurfaceElement(int i) { return surfelements[i-1]; }
377
+ // [[deprecated("Use SurfaceElement(SurfaceElementIndex) instead of int !")]]
378
+ const Element2d & SurfaceElement(int i) const { return surfelements[i-1]; }
379
+ // [[deprecated("Use mesh[](SurfaceElementIndex) instead !")]]
380
+ Element2d & SurfaceElement(SurfaceElementIndex i) { return surfelements[i]; }
381
+ // [[deprecated("Use mesh[](SurfaceElementIndex) instead !")]]
382
+ const Element2d & SurfaceElement(SurfaceElementIndex i) const { return surfelements[i]; }
383
+
384
+ const Element2d & operator[] (SurfaceElementIndex ei) const
385
+ { return surfelements[ei]; }
386
+ Element2d & operator[] (SurfaceElementIndex ei)
387
+ { return surfelements[ei]; }
388
+
389
+ const auto & SurfaceElements() const { return surfelements; }
390
+ auto & SurfaceElements() { return surfelements; }
391
+
392
+
393
+ DLL_HEADER void RebuildSurfaceElementLists ();
394
+ DLL_HEADER void GetSurfaceElementsOfFace (int facenr, Array<SurfaceElementIndex> & sei) const;
395
+
396
+ DLL_HEADER ElementIndex AddVolumeElement (const Element & el);
397
+ // write to pre-allocated container, thread-safe
398
+ DLL_HEADER void SetVolumeElement (ElementIndex sei, const Element & el);
399
+
400
+ auto GetNE () const { return volelements.Size(); }
401
+
402
+ // [[deprecated("Use VolumeElement(ElementIndex) instead of int !")]]
403
+ Element & VolumeElement(int i) { return volelements[IndexBASE<ElementIndex>()+(i-1)]; }
404
+ // [[deprecated("Use VolumeElement(ElementIndex) instead of int !")]]
405
+ const Element & VolumeElement(int i) const { return volelements[IndexBASE<ElementIndex>()+(i-1)]; }
406
+ // [[deprecated("Use mesh[](VolumeElementIndex) instead !")]]
407
+ Element & VolumeElement(ElementIndex i) { return volelements[i]; }
408
+ // [[deprecated("Use mesh[](VolumeElementIndex) instead !")]]
409
+ const Element & VolumeElement(ElementIndex i) const { return volelements[i]; }
410
+
411
+ const Element & operator[] (ElementIndex ei) const { return volelements[ei]; }
412
+ Element & operator[] (ElementIndex ei) { return volelements[ei]; }
413
+
414
+ ELEMENTTYPE ElementType (ElementIndex i) const
415
+ { return (volelements[i].Flags().fixed) ? FIXEDELEMENT : FREEELEMENT; }
416
+
417
+ const auto & VolumeElements() const { return volelements; }
418
+ auto & VolumeElements() { return volelements; }
419
+
420
+ ///
421
+ DLL_HEADER double ElementError (int eli, const MeshingParameters & mp) const;
422
+
423
+ ///
424
+ DLL_HEADER void AddLockedPoint (PointIndex pi);
425
+ ///
426
+ void ClearLockedPoints ();
427
+
428
+ const auto & LockedPoints() const { return lockedpoints; }
429
+
430
+ /// Returns number of domains
431
+ DLL_HEADER int GetNDomains() const;
432
+ ///
433
+ int GetDimension() const { return dimension; }
434
+ DLL_HEADER void SetDimension (int dim); // { dimension = dim; }
435
+
436
+ /// sets internal tables
437
+ DLL_HEADER void CalcSurfacesOfNode ();
438
+
439
+ /// additional (temporarily) fix points
440
+ void FixPoints (const TBitArray<PointIndex> & fixpoints);
441
+
442
+ /**
443
+ finds elements without neighbour and
444
+ boundary elements without inner element.
445
+ Results are stored in openelements.
446
+ if dom == 0, all sub-domains, else subdomain dom */
447
+ DLL_HEADER void FindOpenElements (int dom = 0);
448
+
449
+
450
+ /**
451
+ finds segments without surface element,
452
+ and surface elements without neighbours.
453
+ store in opensegmentsy
454
+ */
455
+ DLL_HEADER void FindOpenSegments (int surfnr = 0);
456
+ /**
457
+ remove one layer of surface elements
458
+ */
459
+ DLL_HEADER void RemoveOneLayerSurfaceElements ();
460
+
461
+
462
+ int GetNOpenSegments () { return opensegments.Size(); }
463
+ const Segment & GetOpenSegment (int nr) { return opensegments.Get(nr); }
464
+
465
+ /**
466
+ Checks overlap of boundary
467
+ return == 1, iff overlap
468
+ */
469
+ DLL_HEADER int CheckOverlappingBoundary ();
470
+ /**
471
+ Checks consistent boundary
472
+ return == 0, everything ok
473
+ */
474
+ DLL_HEADER int CheckConsistentBoundary () const;
475
+
476
+ /*
477
+ checks element orientation
478
+ */
479
+ DLL_HEADER int CheckVolumeMesh () const;
480
+
481
+
482
+ /**
483
+ finds average h of surface surfnr if surfnr > 0,
484
+ else of all surfaces.
485
+ */
486
+ DLL_HEADER double AverageH (int surfnr = 0) const;
487
+ /// Calculates localh
488
+ DLL_HEADER void CalcLocalH (double grading, int layer=1);
489
+ ///
490
+ DLL_HEADER void SetLocalH (netgen::Point<3> pmin, netgen::Point<3> pmax, double grading, int layer=1);
491
+ ///
492
+ DLL_HEADER void RestrictLocalH (const Point3d & p, double hloc, int layer=1);
493
+ ///
494
+ DLL_HEADER void RestrictLocalHLine (const Point3d & p1, const Point3d & p2,
495
+ double hloc, int layer=1);
496
+ /// number of elements per radius
497
+ DLL_HEADER void CalcLocalHFromSurfaceCurvature(double grading, double elperr, int layer=1);
498
+ ///
499
+ DLL_HEADER void CalcLocalHFromPointDistances(double grading, int layer=1);
500
+ ///
501
+ DLL_HEADER void RestrictLocalH (resthtype rht, int nr, double loch);
502
+ ///
503
+ DLL_HEADER void LoadLocalMeshSize (const filesystem::path & meshsizefilename);
504
+ ///
505
+ DLL_HEADER void SetGlobalH (double h);
506
+ ///
507
+ DLL_HEADER void SetMinimalH (double h);
508
+ ///
509
+ DLL_HEADER double MaxHDomain (int dom) const;
510
+ ///
511
+ DLL_HEADER void SetMaxHDomain (const NgArray<double> & mhd);
512
+ ///
513
+ DLL_HEADER double GetH (const Point3d & p, int layer=1) const;
514
+ DLL_HEADER double GetH (PointIndex pi) const { return GetH(points[pi], points[pi].GetLayer()); }
515
+ ///
516
+ double GetMinH (const Point3d & pmin, const Point3d & pmax, int layer=1);
517
+ ///
518
+ bool HasLocalHFunction (int layer=1) { return lochfunc[layer-1] != nullptr; }
519
+ ///
520
+ LocalH & LocalHFunction (int layer=1) { return * lochfunc[layer-1]; }
521
+
522
+ shared_ptr<LocalH> & GetLocalH(int layer=1) const
523
+ {
524
+ if(lochfunc.Size() == 1)
525
+ return lochfunc[0];
526
+ return lochfunc[layer-1];
527
+ }
528
+ DLL_HEADER void SetLocalH(shared_ptr<LocalH> loch, int layer=1);
529
+
530
+ ///
531
+ bool LocalHFunctionGenerated(int layer=1) const { return (lochfunc[layer-1] != NULL); }
532
+
533
+ /// Find bounding box
534
+ DLL_HEADER void GetBox (Point3d & pmin, Point3d & pmax, int dom = -1) const;
535
+
536
+ /// Find bounding box of points of typ ptyp or less
537
+ DLL_HEADER void GetBox (Point3d & pmin, Point3d & pmax, POINTTYPE ptyp ) const;
538
+
539
+ ///
540
+ int GetNOpenElements() const
541
+ { return openelements.Size(); }
542
+ ///
543
+ const Element2d & OpenElement(int i) const
544
+ { return openelements.Get(i); }
545
+
546
+ auto & OpenElements() const { return openelements; }
547
+
548
+ auto & OpenElements() { return openelements; }
549
+
550
+ /// are also quads open elements
551
+ bool HasOpenQuads () const;
552
+
553
+ /// split into connected pieces
554
+ DLL_HEADER void SplitIntoParts ();
555
+
556
+ ///
557
+ DLL_HEADER void SplitSeparatedFaces ();
558
+
559
+ /// Refines mesh and projects points to true surface
560
+ // void Refine (int levels, const CSGeometry * geom);
561
+
562
+ void ZRefine(const string& name, const Array<double>& slices);
563
+
564
+ bool BoundaryEdge (PointIndex pi1, PointIndex pi2) const
565
+ {
566
+ if(!boundaryedges)
567
+ const_cast<Mesh *>(this)->BuildBoundaryEdges();
568
+
569
+ PointIndices<2> i2(pi1, pi2);
570
+ i2.Sort();
571
+ return boundaryedges->Used (i2);
572
+ }
573
+
574
+ void DeleteBoundaryEdges ()
575
+ {
576
+ boundaryedges = nullptr;
577
+ }
578
+
579
+ bool IsSegment (PointIndex pi1, PointIndex pi2) const
580
+ {
581
+ PointIndices<2> i2 (pi1, pi2);
582
+ i2.Sort();
583
+ return segmentht->Used (i2);
584
+ }
585
+
586
+ SegmentIndex SegmentNr (PointIndex pi1, PointIndex pi2) const
587
+ {
588
+ PointIndices<2> i2(pi1, pi2);
589
+ i2.Sort();
590
+ return segmentht->Get (i2);
591
+ }
592
+
593
+
594
+ /**
595
+ Remove unused points. etc.
596
+ */
597
+ DLL_HEADER void Compress ();
598
+
599
+ /// first vertex has lowest index
600
+ void OrderElements();
601
+
602
+ ///
603
+ DLL_HEADER void Save (ostream & outfile) const;
604
+ ///
605
+ DLL_HEADER void Load (istream & infile);
606
+ ///
607
+ DLL_HEADER void Merge (istream & infile, const int surfindex_offset = 0);
608
+ ///
609
+ DLL_HEADER void Save (const filesystem::path & filename) const;
610
+ ///
611
+ DLL_HEADER void Load (const filesystem::path & filename);
612
+ ///
613
+ DLL_HEADER void Merge (const filesystem::path & filename, const int surfindex_offset = 0);
614
+
615
+
616
+ DLL_HEADER void DoArchive (Archive & archive);
617
+ ///
618
+ DLL_HEADER void ImproveMesh (const MeshingParameters & mp, OPTIMIZEGOAL goal = OPT_QUALITY);
619
+
620
+ ///
621
+ void ImproveMeshJacobian (const MeshingParameters & mp, OPTIMIZEGOAL goal = OPT_QUALITY,
622
+ const TBitArray<PointIndex> * usepoint = NULL);
623
+ ///
624
+ void ImproveMeshJacobianOnSurface (const MeshingParameters & mp,
625
+ const TBitArray<PointIndex> & usepoint,
626
+ const NgArray< Vec<3>* > & nv,
627
+ OPTIMIZEGOAL goal = OPT_QUALITY,
628
+ const NgArray< idmap_type* > * idmaps = NULL);
629
+ /**
630
+ free nodes in environment of openelements
631
+ for optimiztion
632
+ */
633
+ void FreeOpenElementsEnvironment (int layers);
634
+
635
+
636
+ DLL_HEADER double CalcTotalBad (const MeshingParameters & mp);
637
+ FlatArray<int> GetQualityHistogram() { return tets_in_qualclass; }
638
+
639
+ ///
640
+ bool LegalTet (Element & el) const
641
+ {
642
+ if (el.IllegalValid())
643
+ return !el.Illegal();
644
+ return LegalTet2 (el);
645
+ }
646
+ ///
647
+ bool LegalTet2 (Element & el) const;
648
+
649
+
650
+ ///
651
+ // Find trigs with same vertices
652
+ // return: number of illegal trigs
653
+ int FindIllegalTrigs ();
654
+
655
+ bool LegalTrig (const Element2d & el) const;
656
+ /**
657
+ if values non-null, return values in 4-double array:
658
+ triangle angles min/max, tetangles min/max
659
+ if null, output results on cout
660
+ */
661
+ DLL_HEADER void CalcMinMaxAngle (double badellimit, double * retvalues = NULL);
662
+
663
+ /*
664
+ Marks elements which are dangerous to refine
665
+ return: number of illegal elements
666
+ */
667
+ DLL_HEADER int MarkIllegalElements (int domain=0);
668
+
669
+ /// orient surface mesh, for one sub-domain only
670
+ DLL_HEADER void SurfaceMeshOrientation ();
671
+
672
+ /// convert mixed element mesh to tet-mesh
673
+ DLL_HEADER void Split2Tets();
674
+
675
+
676
+ /// build box-search tree
677
+ DLL_HEADER void BuildElementSearchTree (int dim);
678
+ BoxTree<3, ElementIndex>* GetElementSearchTree () const
679
+ {
680
+ return elementsearchtree_vol.get();
681
+ }
682
+
683
+ BoxTree<3, SurfaceElementIndex>* GetSurfaceElementSearchTree () const
684
+ {
685
+ return elementsearchtree_surf.get();
686
+ }
687
+
688
+ void SetPointSearchStartElement(const int el) const {ps_startelement = el;}
689
+
690
+ /// gives element of point, barycentric coordinates
691
+ DLL_HEADER ElementIndex
692
+ GetElementOfPoint (const netgen::Point<3> & p,
693
+ double * lami,
694
+ bool build_searchtree = false,
695
+ int index = -1,
696
+ bool allowindex = true,
697
+ double tol=1e-4) const;
698
+ DLL_HEADER ElementIndex
699
+ GetElementOfPoint (const netgen::Point<3> & p,
700
+ double * lami,
701
+ std::optional<FlatArray<int>> indices,
702
+ bool build_searchtree = 0,
703
+ bool allowindex = true,
704
+ double tol=1e-4) const;
705
+ DLL_HEADER SurfaceElementIndex
706
+ GetSurfaceElementOfPoint (const netgen::Point<3> & p,
707
+ double * lami,
708
+ bool build_searchtree = false,
709
+ int index = -1,
710
+ bool allowindex = true) const;
711
+ DLL_HEADER SurfaceElementIndex
712
+ GetSurfaceElementOfPoint (const netgen::Point<3> & p,
713
+ double * lami,
714
+ std::optional<FlatArray<int>> indices,
715
+ bool build_searchtree = false,
716
+ bool allowindex = true) const;
717
+
718
+ /// give list of vol elements which are int the box(p1,p2)
719
+ void GetIntersectingVolEls(const Point3d& p1, const Point3d& p2,
720
+ Array<ElementIndex> & locels) const;
721
+
722
+ ///
723
+ int AddFaceDescriptor(const FaceDescriptor& fd)
724
+ { facedecoding.Append(fd); return facedecoding.Size(); }
725
+
726
+ int AddEdgeDescriptor(const EdgeDescriptor & fd)
727
+ { edgedecoding.Append(fd); return edgedecoding.Size() - 1; }
728
+
729
+ auto & GetCommunicator() const { return this->comm; }
730
+ void SetCommunicator(NgMPI_Comm acomm);
731
+
732
+ DLL_HEADER void SplitFacesByAdjacentDomains();
733
+ DLL_HEADER shared_ptr<Mesh> GetSubMesh(string domains="", string faces="") const;
734
+
735
+ ///
736
+ DLL_HEADER void SetMaterial (int domnr, const string & mat);
737
+ ///
738
+ DLL_HEADER const string & GetMaterial (int domnr) const;
739
+ DLL_HEADER static string defaultmat;
740
+ const string * GetMaterialPtr (int domnr) const // 1-based
741
+ {
742
+ return domnr <= materials.Size() ? materials[domnr-1] : &defaultmat;
743
+ }
744
+
745
+ DLL_HEADER void SetNBCNames ( int nbcn );
746
+
747
+ DLL_HEADER void SetBCName ( int bcnr, const string & abcname );
748
+
749
+ DLL_HEADER const string & GetBCName ( int bcnr ) const;
750
+
751
+ DLL_HEADER void SetNCD2Names (int ncd2n);
752
+ DLL_HEADER void SetCD2Name (int cd2nr, const string & abcname);
753
+
754
+ DLL_HEADER const string & GetCD2Name (int cd2nr ) const;
755
+ DLL_HEADER static string cd2_default_name;
756
+ string * GetCD2NamePtr (int cd2nr ) const
757
+ {
758
+ if (cd2nr < cd2names.Size() && cd2names[cd2nr]) return cd2names[cd2nr];
759
+ return &cd2_default_name;
760
+ }
761
+ size_t GetNCD2Names() const { return cd2names.Size(); }
762
+
763
+ DLL_HEADER void SetNCD3Names (int ncd3n);
764
+ DLL_HEADER void SetCD3Name (int cd3nr, const string & abcname);
765
+ DLL_HEADER int AddCD3Name (const string & aname);
766
+
767
+ DLL_HEADER const string & GetCD3Name (int cd3nr ) const;
768
+ DLL_HEADER static string cd3_default_name;
769
+ string * GetCD3NamePtr (int cd3nr ) const
770
+ {
771
+ if (cd3nr < cd3names.Size() && cd3names[cd3nr]) return cd3names[cd3nr];
772
+ return &cd3_default_name;
773
+ }
774
+ size_t GetNCD3Names() const { return cd3names.Size(); }
775
+
776
+ DLL_HEADER static string default_bc;
777
+ string * GetBCNamePtr (int bcnr) const
778
+ { return (bcnr < bcnames.Size() && bcnames[bcnr]) ? bcnames[bcnr] : &default_bc; }
779
+
780
+
781
+ DLL_HEADER Array<string*> & GetRegionNamesCD (int codim);
782
+
783
+ DLL_HEADER std::string_view GetRegionName(const Segment & el) const;
784
+ DLL_HEADER std::string_view GetRegionName(const Element2d & el) const;
785
+ DLL_HEADER std::string_view GetRegionName(const Element & el) const;
786
+
787
+ std::string_view GetRegionName(SegmentIndex ei) const { return GetRegionName((*this)[ei]); }
788
+ std::string_view GetRegionName(SurfaceElementIndex ei) const { return GetRegionName((*this)[ei]); }
789
+ std::string_view GetRegionName(ElementIndex ei) const { return GetRegionName((*this)[ei]); }
790
+
791
+ DLL_HEADER static string_view defaultmat_sv;
792
+ std::string_view GetRegionName (int dim, int domnr) // 1-based domnr
793
+ {
794
+ domnr--;
795
+ auto & names = region_name_cd[dimension-dim];
796
+ if (domnr < names.Size() && names[domnr]) return *names[domnr];
797
+ return defaultmat_sv;
798
+ }
799
+
800
+ ///
801
+ void ClearFaceDescriptors()
802
+ { facedecoding.SetSize(0); }
803
+
804
+ ///
805
+ int GetNFD () const
806
+ { return facedecoding.Size(); }
807
+
808
+ const FaceDescriptor & GetFaceDescriptor (const Element2d & el) const
809
+ { return facedecoding[el.GetIndex()-1]; }
810
+
811
+ const FaceDescriptor & GetFaceDescriptor (int i) const
812
+ { return facedecoding[i-1]; }
813
+ // { return facedecoding.Get(i); }
814
+
815
+ auto & FaceDescriptors () const { return facedecoding; }
816
+
817
+ const EdgeDescriptor & GetEdgeDescriptor (int i) const
818
+ { return edgedecoding[i]; }
819
+
820
+
821
+ ///
822
+ FaceDescriptor & GetFaceDescriptor (int i)
823
+ { return facedecoding[i-1]; }
824
+ // { return facedecoding.Elem(i); }
825
+
826
+ int IdentifyPeriodicBoundaries(const string& id_name,
827
+ const string& s1,
828
+ const Transformation<3>& mapping,
829
+ double pointTolerance);
830
+
831
+ // #ifdef NONE
832
+ // /*
833
+ // Identify points pi1 and pi2, due to
834
+ // identification nr identnr
835
+ // */
836
+ // void AddIdentification (int pi1, int pi2, int identnr);
837
+
838
+ // int GetIdentification (int pi1, int pi2) const;
839
+ // int GetIdentificationSym (int pi1, int pi2) const;
840
+ // ///
841
+ // INDEX_2_HASHTABLE<int> & GetIdentifiedPoints ()
842
+ // {
843
+ // return *identifiedpoints;
844
+ // }
845
+
846
+ // ///
847
+ // void GetIdentificationMap (int identnr, NgArray<int> & identmap) const;
848
+ // ///
849
+ // void GetIdentificationPairs (int identnr, NgArray<INDEX_2> & identpairs) const;
850
+ // ///
851
+ // int GetMaxIdentificationNr () const
852
+ // {
853
+ // return maxidentnr;
854
+ // }
855
+ // #endif
856
+
857
+ /// return periodic, close surface etc. identifications
858
+ Identifications & GetIdentifications () { return *ident; }
859
+ /// return periodic, close surface etc. identifications
860
+ const Identifications & GetIdentifications () const { return *ident; }
861
+ ///
862
+ bool HasIdentifications() const { return ident != nullptr; }
863
+
864
+ DLL_HEADER void InitPointCurve(double red = 1, double green = 0, double blue = 0) const;
865
+ DLL_HEADER void AddPointCurvePoint(const Point3d & pt) const;
866
+ DLL_HEADER int GetNumPointCurves(void) const;
867
+ DLL_HEADER int GetNumPointsOfPointCurve(int curve) const;
868
+ DLL_HEADER Point3d & GetPointCurvePoint(int curve, int n) const;
869
+ DLL_HEADER void GetPointCurveColor(int curve, double & red, double & green, double & blue) const;
870
+
871
+
872
+
873
+
874
+ /// find number of vertices
875
+ DLL_HEADER void ComputeNVertices ();
876
+ /// number of vertices (no edge-midpoints)
877
+ DLL_HEADER int GetNV () const;
878
+ /// remove edge points
879
+ DLL_HEADER void SetNP (int np);
880
+
881
+
882
+
883
+ DLL_HEADER Table<ElementIndex, PointIndex> CreatePoint2ElementTable(std::optional<TBitArray<PointIndex>> points = std::nullopt, int domain = 0) const;
884
+ // DLL_HEADER Table<SurfaceElementIndex, PointIndex> CreatePoint2SurfaceElementTable( int faceindex=0 ) const;
885
+ DLL_HEADER Table<SurfaceElementIndex, PointIndex> CreatePoint2SurfaceElementTable( int faceindex=0 ) const;
886
+ DLL_HEADER CompressedTable<SurfaceElementIndex, PointIndex> CreateCompressedPoint2SurfaceElementTable( int faceindex=0 ) const;
887
+
888
+ DLL_HEADER bool PureTrigMesh (int faceindex = 0) const;
889
+ DLL_HEADER bool PureTetMesh () const;
890
+
891
+
892
+ const MeshTopology & GetTopology () const { return topology; }
893
+ MeshTopology & GetTopology () { return topology; }
894
+
895
+ DLL_HEADER void UpdateTopology (NgTaskManager tm = &DummyTaskManager,
896
+ NgTracer tracer = &DummyTracer);
897
+
898
+ class CurvedElements & GetCurvedElements () const
899
+ { return *curvedelems; }
900
+
901
+ DLL_HEADER void BuildCurvedElements (const class Refinement * ref, int aorder, bool arational = false);
902
+ DLL_HEADER void BuildCurvedElements (int aorder);
903
+
904
+ const class AnisotropicClusters & GetClusters () const
905
+ { return *clusters; }
906
+
907
+
908
+ class CSurfaceArea
909
+ {
910
+ const Mesh & mesh;
911
+ bool valid;
912
+ double area;
913
+ public:
914
+ CSurfaceArea (const Mesh & amesh)
915
+ : mesh(amesh), valid(false), area(0.) { ; }
916
+
917
+ void Add (const Element2d & sel)
918
+ {
919
+ if (sel.GetNP() == 3)
920
+ area += Cross ( mesh[sel[1]]-mesh[sel[0]],
921
+ mesh[sel[2]]-mesh[sel[0]] ).Length() / 2;
922
+ else
923
+ area += Cross (Vec3d (mesh[sel.PNum(1)], mesh[sel.PNum(3)]),
924
+ Vec3d (mesh[sel.PNum(1)], mesh[sel.PNum(4)])).Length() / 2;;
925
+ }
926
+ void ReCalc ()
927
+ {
928
+ area = 0;
929
+ /*
930
+ for (SurfaceElementIndex sei = 0; sei < mesh.GetNSE(); sei++)
931
+ Add (mesh[sei]);
932
+ */
933
+ for (const Element2d & el : mesh.SurfaceElements())
934
+ Add (el);
935
+ valid = true;
936
+ }
937
+
938
+ operator double () const { return area; }
939
+ bool Valid() const { return valid; }
940
+ };
941
+
942
+ CSurfaceArea surfarea;
943
+ CSurfaceArea & SurfaceArea() { return surfarea; }
944
+ const CSurfaceArea & SurfaceArea() const { return surfarea; }
945
+
946
+
947
+
948
+ int GetTimeStamp() const { return timestamp; }
949
+ void SetNextTimeStamp()
950
+ { timestamp = NextTimeStamp(); }
951
+
952
+ int GetMajorTimeStamp() const { return majortimestamp; }
953
+ void SetNextMajorTimeStamp()
954
+ { majortimestamp = timestamp = NextTimeStamp(); }
955
+
956
+
957
+ /// return mutex
958
+ NgMutex & Mutex () { return mutex; }
959
+ NgMutex & MajorMutex () { return majormutex; }
960
+
961
+
962
+ DLL_HEADER shared_ptr<NetgenGeometry> GetGeometry() const;
963
+ void SetGeometry (shared_ptr<NetgenGeometry> geom)
964
+ {
965
+ geometry = geom;
966
+ }
967
+
968
+ ///
969
+ void SetUserData(const char * id, NgArray<int> & data);
970
+ ///
971
+ bool GetUserData(const char * id, NgArray<int> & data, int shift = 0) const;
972
+ ///
973
+ void SetUserData(const char * id, NgArray<double> & data);
974
+ ///
975
+ bool GetUserData(const char * id, NgArray<double> & data, int shift = 0) const;
976
+
977
+ ///
978
+ friend void OptimizeRestart (Mesh & mesh3d);
979
+ ///
980
+ void PrintMemInfo (ostream & ost) const;
981
+ ///
982
+ friend class Meshing3;
983
+
984
+ // only for saving the geometry
985
+ enum GEOM_TYPE { NO_GEOM = 0, GEOM_2D = 1, GEOM_CSG = 10, GEOM_STL = 11, GEOM_OCC = 12, GEOM_ACIS = 13 };
986
+ GEOM_TYPE geomtype;
987
+
988
+
989
+ #ifdef PARALLEL
990
+ /// returns parallel topology
991
+ class ParallelMeshTopology & GetParallelTopology () const
992
+ { return *paralleltop; }
993
+
994
+ /// distributes the master-mesh to local meshes
995
+ DLL_HEADER void Distribute ();
996
+ DLL_HEADER void Distribute (NgArray<int> & volume_weights, NgArray<int> & surface_weights,
997
+ NgArray<int> & segment_weights);
998
+
999
+
1000
+ /// find connection to parallel meshes
1001
+ // void FindExchangePoints () ;
1002
+
1003
+ // void FindExchangeEdges ();
1004
+ // void FindExchangeFaces ();
1005
+
1006
+ /// use metis to decompose master mesh
1007
+ DLL_HEADER void ParallelMetis (int nproc);
1008
+ DLL_HEADER void ParallelMetis (NgArray<int> & volume_weights, NgArray<int> & surface_weights,
1009
+ NgArray<int> & segment_weights);
1010
+
1011
+ void PartHybridMesh ();
1012
+ void PartDualHybridMesh ();
1013
+ void PartDualHybridMesh2D ();
1014
+
1015
+ /// send mesh from master to local procs
1016
+ void SendRecvMesh ();
1017
+
1018
+ /// send mesh to parallel machine, keep global mesh at master
1019
+ void SendMesh ( ) const;
1020
+ /// loads a mesh sent from master processor
1021
+ void ReceiveParallelMesh ();
1022
+
1023
+
1024
+ #else
1025
+ void ParallelMetis (int /* nproc */) {}
1026
+ void Distribute () {}
1027
+ void SendRecvMesh () {}
1028
+ void Distribute (NgArray<int> & volume_weights, NgArray<int> & surface_weights,
1029
+ NgArray<int> & segment_weights){ }
1030
+ #endif
1031
+
1032
+ Array<int, ElementIndex> vol_partition;
1033
+ NgArray<int> surf_partition;
1034
+ NgArray<int> seg_partition;
1035
+
1036
+ shared_ptr<Mesh> Mirror( netgen::Point<3> p, Vec<3> n );
1037
+
1038
+ private:
1039
+ MemoryTracer mem_tracer = {"Mesh",
1040
+ points, "points",
1041
+ segments, "segments",
1042
+ surfelements, "surfelements",
1043
+ volelements, "volelements"
1044
+ };
1045
+ public:
1046
+ const MemoryTracer & GetMemoryTracer() { return mem_tracer; }
1047
+ };
1048
+
1049
+ inline ostream& operator<<(ostream& ost, const Mesh& mesh)
1050
+ {
1051
+ ost << "mesh: " << endl;
1052
+ mesh.Save(ost);
1053
+ return ost;
1054
+ }
1055
+
1056
+
1057
+
1058
+ FlatArray<T_EDGE> MeshTopology :: GetEdges (SurfaceElementIndex elnr) const
1059
+ {
1060
+ return FlatArray<T_EDGE>(GetNEdges ( (*mesh)[elnr].GetType()), &surfedges[elnr][0]);
1061
+ }
1062
+
1063
+ FlatArray<T_EDGE> MeshTopology :: GetEdges (ElementIndex elnr) const
1064
+ {
1065
+ return FlatArray<T_EDGE>(GetNEdges ( (*mesh)[elnr].GetType()), &edges[elnr][0]);
1066
+ }
1067
+
1068
+ FlatArray<T_FACE> MeshTopology :: GetFaces (ElementIndex elnr) const
1069
+ {
1070
+ return FlatArray<T_FACE>(GetNFaces ( (*mesh)[elnr].GetType()), &faces[elnr][0]);
1071
+ }
1072
+
1073
+ DLL_HEADER void AddFacesBetweenDomains(Mesh & mesh);
1074
+ }
1075
+
1076
+ #endif // NETGEN_MESHCLASS_HPP