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,366 @@
1
+ #ifndef FILE_HPREFINEMENT
2
+ #define FILE_HPREFINEMENT
3
+
4
+ /**************************************************************************/
5
+ /* File: hprefinement.hh */
6
+ /* Author: Joachim Schoeberl */
7
+ /* Date: 27. Oct. 2000 */
8
+ /**************************************************************************/
9
+
10
+ /*
11
+ HP Refinement
12
+ */
13
+
14
+ #include "bisect.hpp"
15
+ #include "meshtype.hpp"
16
+
17
+ namespace netgen
18
+ {
19
+
20
+
21
+ enum HPREF_ELEMENT_TYPE {
22
+ HP_NONE=0,
23
+
24
+ HP_SEGM = 1,
25
+ HP_SEGM_SINGCORNERL,
26
+ HP_SEGM_SINGCORNERR,
27
+ HP_SEGM_SINGCORNERS,
28
+
29
+ HP_TRIG = 10,
30
+ HP_TRIG_SINGCORNER,
31
+ HP_TRIG_SINGCORNER12,
32
+ HP_TRIG_SINGCORNER123,
33
+ HP_TRIG_SINGCORNER123_2D, // not rotational symmetric
34
+ HP_TRIG_SINGEDGE = 20,
35
+ HP_TRIG_SINGEDGECORNER1, // E = 100, V = 100
36
+ HP_TRIG_SINGEDGECORNER2, // E = 100, V = 010
37
+ HP_TRIG_SINGEDGECORNER12, // E = 100, V = 110
38
+ HP_TRIG_SINGEDGECORNER3,
39
+ HP_TRIG_SINGEDGECORNER13,
40
+ HP_TRIG_SINGEDGECORNER23,
41
+ HP_TRIG_SINGEDGECORNER123,
42
+ HP_TRIG_SINGEDGES = 30,
43
+ HP_TRIG_SINGEDGES2,
44
+ HP_TRIG_SINGEDGES3,
45
+ HP_TRIG_SINGEDGES23,
46
+ HP_TRIG_3SINGEDGES = 40,
47
+
48
+ HP_TRIG_ALFELD,
49
+ HP_TRIG_POWELL,
50
+
51
+ HP_QUAD = 50,
52
+ HP_QUAD_SINGCORNER,
53
+ HP_DUMMY_QUAD_SINGCORNER,
54
+ HP_QUAD_SINGEDGE,
55
+ HP_QUAD_0E_2VA, // V = 1100
56
+ HP_QUAD_0E_2VB, // V = 1010
57
+ HP_QUAD_0E_3V,
58
+ HP_QUAD_0E_4V,
59
+
60
+ // one edge: marked edge is always edge from vertex 1 to vertex 2 (E = 1000)
61
+ HP_QUAD_1E_1VA, // vertex on beginning of edge: V = 1000
62
+ HP_QUAD_1E_1VB, // vertex on end of edge: V = 0100
63
+ HP_QUAD_1E_1VC, // V = 0010
64
+ HP_QUAD_1E_1VD, // V = 0001
65
+
66
+ HP_QUAD_1E_2VA, // V = 1100
67
+ HP_QUAD_1E_2VB, // V = 1010
68
+ HP_QUAD_1E_2VC, // V = 1001
69
+ HP_QUAD_1E_2VD, // V = 0110
70
+ HP_QUAD_1E_2VE, // V = 0101
71
+ HP_QUAD_1E_2VF, // V = 0011
72
+
73
+ HP_QUAD_1E_3VA, // V = 1110
74
+ HP_QUAD_1E_3VB, // V = 1101
75
+ HP_QUAD_1E_3VC, // V = 1011
76
+ HP_QUAD_1E_3VD, // V = 0111
77
+
78
+ HP_QUAD_1E_4V, // V = 1111
79
+
80
+
81
+ HP_QUAD_2E, // E = 1001, V = 1000
82
+ HP_QUAD_2E_1VA, // E = 1001, V = 1100
83
+ HP_QUAD_2E_1VB, // E = 1001, V = 1010
84
+ HP_QUAD_2E_1VC, // E = 1001, V = 1001
85
+ HP_QUAD_2E_2VA, // E = 1001, V = 1110
86
+ HP_QUAD_2E_2VB, // E = 1001, V = 1101
87
+ HP_QUAD_2E_2VC, // E = 1001, V = 1011
88
+ HP_QUAD_2E_3V, // E = 1001, V = 1111
89
+
90
+ HP_QUAD_2EB_0V, // E = 1010, V = 0000
91
+ HP_QUAD_2EB_1VA, // E = 1010, V = 1000
92
+ HP_QUAD_2EB_1VB, // E = 1010, V = 0100
93
+ HP_QUAD_2EB_2VA, // E = 1010, V = 1100
94
+ HP_QUAD_2EB_2VB, // E = 1010, V = 1010
95
+ HP_QUAD_2EB_2VC, // E = 1010, V = 1001
96
+ HP_QUAD_2EB_2VD, // E = 1010, V = 0101
97
+ HP_QUAD_2EB_3VA, // E = 1010, V = 1110
98
+ HP_QUAD_2EB_3VB, // E = 1010, V = 1101
99
+
100
+ HP_QUAD_2EB_4V,
101
+
102
+
103
+ HP_QUAD_3E, // E = 1101, V = 1100
104
+ HP_QUAD_3E_3VA, // E = 1101, V = 1110
105
+ HP_QUAD_3E_3VB, // E = 1101, V = 1101
106
+ HP_QUAD_3E_4V, // E = 1101, V = 1111
107
+
108
+ HP_QUAD_4E,
109
+
110
+
111
+ HP_TET = 100, // no singular vertex/edge
112
+ HP_NONETET, // make void
113
+ HP_TET_0E_1V, // V1
114
+ HP_TET_0E_2V, // V1,2
115
+ HP_TET_0E_3V, // V1,2,3
116
+ HP_TET_0E_4V, // V1,2,3,4
117
+ HP_TET_1E_0V = 200, // E1-2
118
+ HP_TET_1E_1VA, // V1
119
+ HP_TET_1E_1VB, // V3
120
+ HP_TET_1E_2VA, // V1,2
121
+ HP_TET_1E_2VB, // V1,3
122
+ HP_TET_1E_2VC, // V1,4
123
+ HP_TET_1E_2VD, // V3,4
124
+ HP_TET_1E_3VA, // V1,2,3
125
+ HP_TET_1E_3VB, // V1,3,4
126
+ HP_TET_1E_4V, // V1,2,3,4
127
+
128
+
129
+ // 2 connected edges, additionally marked Vs
130
+ HP_TET_2EA_0V = 220, // E1-2, E1-3
131
+ HP_TET_2EA_1VA, // V2
132
+ HP_TET_2EA_1VB, // V3
133
+ HP_TET_2EA_1VC, // V4
134
+ HP_TET_2EA_2VA, // V2,3
135
+ HP_TET_2EA_2VB, // V2,4
136
+ HP_TET_2EA_2VC, // V3,4
137
+ HP_TET_2EA_3V, // V2,3,4
138
+
139
+ // 2 opposite edges
140
+ HP_TET_2EB_0V = 230, // E1-2, E3-4
141
+ HP_TET_2EB_1V, // V1
142
+ HP_TET_2EB_2VA, // V1,2
143
+ HP_TET_2EB_2VB, // V1,3
144
+ HP_TET_2EB_2VC, // V1,4
145
+ HP_TET_2EB_3V, // V1,2,3
146
+ HP_TET_2EB_4V, // V1,2,3,4
147
+
148
+ HP_TET_3EA_0V = 400, // E1-2, E1-3, E1-4, 3 edges connected
149
+ HP_TET_3EA_1V, // V2
150
+ HP_TET_3EA_2V, // V2,3
151
+ HP_TET_3EA_3V, // V2,3,4
152
+
153
+ HP_TET_3EB_0V = 420, // E1-2, E1-4, E2-3 3 edges chain
154
+ HP_TET_3EB_1V, //
155
+ HP_TET_3EB_2V, //
156
+ HP_TET_3EC_0V = 430, // 3 edges chain, alter
157
+ HP_TET_3EC_1V, // 3 edges chain, alter
158
+ HP_TET_3EC_2V, // 3 edges chain, alter
159
+ HP_TET_3ED_3V, // 3 edges in a loop e12, e13, e23 NEW .. done
160
+
161
+
162
+ HP_TET_1F_0E_0V = 500, // 1 singular face
163
+ HP_TET_1F_0E_1VA, // 1 sing vertex in face (V2) FIX ... (needs HEX7)
164
+ HP_TET_1F_0E_1VB, // 1 sing vertex not in face (V1)
165
+ HP_TET_1F_0E_2V, // 2 sing vertex in face (V2,V3) NEW .. done
166
+ HP_TET_1F_0E_3V, // 3 sing vertex in face (V2,V3,V4) NEWNEW
167
+ HP_TET_1F_1EA_0V, // 1 sing edge not in face
168
+ HP_TET_1F_1EB_0V, // 1 sing edge in face
169
+ HP_TET_1F_1E_1VA, // 1 sing edge in face e23, sing vert 2 NEW done
170
+ HP_TET_1F_1E_1VB, // 1 sing edge in face e24, sing vert 2 NEW done
171
+ HP_TET_1F_1E_2VA, // 1 sing edge not in face (e12), sing v2,v3 NEW done
172
+ HP_TET_1F_1E_2VB, // 1 sing edge not in face (e12), sing v2,v4 NEW done
173
+ HP_TET_1F_1E_2VC, // 1 sing edge not in face (e12), sing v3,v4 NEW
174
+ HP_TET_1F_1EA_3V, // 1 sing edge out of face e12, sing v2, v3, v4 NEWNEW WIP, need Pyramid with 1 sing trig-face
175
+ HP_TET_1F_1E_3V, // 1 sing edge in face e23, sing v2, v3, v4 NEWNEW done
176
+ HP_TET_1F_2Eoo_3V, // 2e out of face: f234, e12, e13, v1,v2,v3 NEWNEW
177
+ HP_TET_1F_2E_0VA, // edge6 && fedge3 .. 1 in face, 1 not in face NEW done
178
+ HP_TET_1F_2E_0VB, // edge6 && fedge2 .. 1 in face, 1 not in face NEW done
179
+ HP_TET_1F_2E_1V, // e4,e5 (E23,E24), V2 NEW NEW WIP
180
+ HP_TET_1F_2E_3V, // e4,e5 (E23,E24), V2,V3,V4 NEW NEW done
181
+
182
+ HP_TET_2F_0E_0V = 600, // 2 singular faces
183
+ HP_TET_2F_0E_1V, // 2 singular faces f234, f134, sing point V4 NEW
184
+ HP_TET_2F_1E_0VA, // 2 singular faces, sing edge e4 NEW done
185
+ HP_TET_2F_1E_0VB, // 2 singular faces, sing edge e5 NEW done
186
+
187
+ HP_TET_2F_1E_3VA, // 2 singular faces f234,f134, e23, v2,v3,v4 NEW3
188
+ HP_TET_2F_1E_4VA, // 2 singular faces f234,f134, e23, v2,v3,v4 NEW3
189
+
190
+ HP_TET_3F_0E_0V = 700, // 3 singular faces, no additional points or edges NEW done
191
+
192
+ HP_TET_ALFELD,
193
+
194
+ HP_PRISM = 1000,
195
+ HP_PRISM_SINGEDGE,
196
+ HP_PRISM_SINGEDGE_V12,
197
+ HP_PRISM_SINGEDGE_H1,
198
+ HP_PRISM_SINGEDGE_H12,
199
+
200
+ HP_PRISM_1FA_0E_0V, // 1 singular trig face
201
+ HP_PRISM_2FA_0E_0V, // 2 singular trig faces
202
+ HP_PRISM_1FB_0E_0V, // 1 singular quad face 1-2-4-5
203
+
204
+ HP_PRISM_1FB_1EA_0V, // 1 singular quad face, edge is 1-4
205
+ HP_PRISM_1FA_1E_0V,
206
+ HP_PRISM_2FA_1E_0V,
207
+ HP_PRISM_1FA_1FB_0E_0V,
208
+ HP_PRISM_2FA_1FB_0E_0V,
209
+ HP_PRISM_1FA_1FB_1EA_0V,
210
+ HP_PRISM_1FA_1FB_1EB_0V,
211
+ HP_PRISM_2FA_1FB_1EA_0V,
212
+ HP_PRISM_1FB_1EC_0V,
213
+ HP_PRISM_1FA_1FB_1EC_0V,
214
+ HP_PRISM_2FA_1FB_1EC_0V,
215
+ HP_PRISM_1FB_2EA_0V,
216
+ HP_PRISM_1FA_1FB_2EA_0V,
217
+ HP_PRISM_2FA_1FB_2EA_0V,
218
+ HP_PRISM_1FB_2EB_0V,
219
+ HP_PRISM_1FA_1FB_2EB_0V,
220
+ HP_PRISM_1FA_1FB_2EC_0V,
221
+ HP_PRISM_2FA_1FB_2EB_0V,
222
+ HP_PRISM_1FB_3E_0V,
223
+ HP_PRISM_1FA_1FB_3E_0V,
224
+ HP_PRISM_2FA_1FB_3E_0V,
225
+ HP_PRISM_2FB_0E_0V,
226
+ HP_PRISM_1FA_2FB_0E_0V,
227
+ HP_PRISM_2FA_2FB_0E_0V,
228
+ HP_PRISM_2FB_1EC_0V,
229
+ HP_PRISM_1FA_2FB_1EC_0V,
230
+ HP_PRISM_1FA_2FB_1EB_0V,
231
+ HP_PRISM_2FA_2FB_1EC_0V,
232
+ HP_PRISM_2FB_3E_0V,
233
+ HP_PRISM_1FA_2FB_3E_0V,
234
+ HP_PRISM_2FA_2FB_3E_0V,
235
+ HP_PRISM_1FA_2E_0V,
236
+ HP_PRISM_2FA_2E_0V,
237
+ HP_PRISM_3E_0V,
238
+ HP_PRISM_1FA_3E_0V,
239
+ HP_PRISM_2FA_3E_0V,
240
+ HP_PRISM_3FB_0V,
241
+ HP_PRISM_1FA_3FB_0V,
242
+ HP_PRISM_2FA_3FB_0V,
243
+ HP_PRISM_3E_4EH,
244
+
245
+
246
+
247
+ /* HP_PRISM_1FB_1EA_0V, // 1 singular quad face, edge is 1-4
248
+ HP_PRISM_1FB_1EB_0V, // 1 singular quad face, edge is 2-5
249
+ HP_PRISM_2F_0E_0V, // 2 singular quad faces
250
+ */
251
+
252
+ HP_PYRAMID = 2000,
253
+ HP_PYRAMID_0E_1V,
254
+ HP_PYRAMID_EDGES,
255
+ HP_PYRAMID_1FB_0E_0V, // 1 trig face F125
256
+ HP_PYRAMID_1FB_0E_1VA, // 1 trig face, top vertex
257
+
258
+ HP_HEX = 3000,
259
+ HP_HEX_0E_1V,
260
+ HP_HEX_1E_1V,
261
+ HP_HEX_1E_0V,
262
+ HP_HEX_3E_0V,
263
+ HP_HEX_1F_0E_0V,
264
+ HP_HEX_1FA_1FB_0E_0V,
265
+
266
+ HP_HEX7 = 3100,
267
+ HP_HEX7_1FA, // singular quad face 1,2,3,4
268
+ HP_HEX7_1FB // singular trig face 5,6,7
269
+ };
270
+
271
+
272
+
273
+ struct HPRef_Struct {
274
+ HPREF_ELEMENT_TYPE geom;
275
+ int (*splitedges)[3];
276
+ int (*splitfaces)[4];
277
+ int (*splitelements)[5];
278
+ HPREF_ELEMENT_TYPE * neweltypes;
279
+ int (*newels)[8];
280
+ };
281
+
282
+
283
+
284
+
285
+ class HPRefElement
286
+ {
287
+ private:
288
+ void Reset(void);
289
+
290
+ public:
291
+ HPRefElement ();
292
+ HPRefElement(Element & el);
293
+ HPRefElement(Element2d & el);
294
+ HPRefElement(Segment & el);
295
+ HPRefElement(HPRefElement & el);
296
+
297
+ void SetType( HPREF_ELEMENT_TYPE t);
298
+ // HPRefElement(HPRefElement & el, HPREF_ELEMENT_TYPE t);
299
+
300
+ /* HPRefElement(HPRefElement & el, HPREF_ELEMENT_TYPE t)
301
+ {
302
+ type = t;
303
+ HPRef_Struct * hprs = Get_HPRef_Struct(t);
304
+ for (int i=0; i<np ; i++)
305
+ {
306
+ pnums[i] = el[i];
307
+ for(int l=0; l<np; l++) param[i][l] = el.param[i][l];
308
+ }
309
+ switch(hprs->geom)
310
+ {
311
+ case HP_SEGM: np=2; sing_edge_left=0; sing_edge_right=0; break;
312
+ case HP_QUAD: np=4; break;
313
+ case HP_TRIG: np=3; break;
314
+ case HP_HEX: np=8; break;
315
+ case HP_PRISM: np=6; break;
316
+ case HP_TET: np=4; break;
317
+ case HP_PYRAMID: np=5; break;
318
+ }
319
+ index = el.index;
320
+ levelx = el.levelx;
321
+ levely = el.levely;
322
+ levelz = el.levelz;
323
+ type = el.type;
324
+ coarse_elnr = el.coarse_elnr;
325
+ singedge_left = el.singedge_left;
326
+ singedge_right = el.singedge_left;
327
+ } */
328
+
329
+ HPREF_ELEMENT_TYPE type;
330
+ PointIndex pnums[8];
331
+ double param[8][3];
332
+ int index;
333
+ int si;
334
+ int levelx;
335
+ int levely;
336
+ int levelz;
337
+ int np;
338
+ int coarse_elnr; // issue (JS): same class is for ElementIndex, SurfaceElementIndex, SegmentIndex
339
+ int domin, domout; // he: needed for segment!! in 3d there should be surf1, surf2!!
340
+ // int coarse_hpelnr;
341
+ PointIndex & operator[](int i) { return(pnums[i]);}
342
+ PointIndex & PNumMod(int i) { return pnums[(i-1) % np]; };
343
+ PointIndex & PNum(int i) {return pnums[(i-1)]; };
344
+ int GetIndex () const { return index; };
345
+ double singedge_left, singedge_right;
346
+ auto PNums() const { return FlatArray<const PointIndex>(np, &pnums[0]); }
347
+
348
+ // EdgePointGeomInfo epgeominfo[2];
349
+
350
+ };
351
+
352
+
353
+ enum SplittingType { SPLIT_HP, SPLIT_ALFELD, SPLIT_POWELL};
354
+
355
+ DLL_HEADER extern void HPRefinement (Mesh & mesh, Refinement * ref, SplittingType split, int levels,
356
+ double fac1=0.125, bool setorders=true, bool ref_level = false);
357
+
358
+ inline void HPRefinement (Mesh & mesh, Refinement * ref, int levels,
359
+ double fac1=0.125, bool setorders=true, bool ref_level = false)
360
+ {
361
+ HPRefinement (mesh, ref, SPLIT_HP, levels, fac1, setorders, ref_level);
362
+ }
363
+
364
+ } // namespace netgen
365
+ #endif
366
+
@@ -0,0 +1,178 @@
1
+ #ifndef NETGEN_IMPROVE2_HPP
2
+ #define NETGEN_IMPROVE2_HPP
3
+
4
+ #include "meshtype.hpp"
5
+
6
+ namespace netgen
7
+ {
8
+
9
+ inline void AppendEdges( const Element2d & elem, PointIndex pi, Array<std::tuple<PointIndex,PointIndex>> & edges )
10
+ {
11
+ for (int j = 0; j < 3; j++)
12
+ {
13
+ PointIndex pi0 = elem[j];
14
+ PointIndex pi1 = elem[(j+1)%3];
15
+ if (pi1 < pi0) Swap(pi0, pi1);
16
+ if(pi0==pi)
17
+ edges.Append(std::make_tuple(pi0, pi1));
18
+ }
19
+ }
20
+
21
+ inline void AppendEdges( const Element & elem, PointIndex pi, Array<std::tuple<PointIndex,PointIndex>> & edges )
22
+ {
23
+ static constexpr int tetedges[6][2] =
24
+ { { 0, 1 }, { 0, 2 }, { 0, 3 },
25
+ { 1, 2 }, { 1, 3 }, { 2, 3 } };
26
+
27
+ if(elem.Flags().fixed)
28
+ return;
29
+ for (int j = 0; j < 6; j++)
30
+ {
31
+ PointIndex pi0 = elem[tetedges[j][0]];
32
+ PointIndex pi1 = elem[tetedges[j][1]];
33
+ if (pi1 < pi0) Swap(pi0, pi1);
34
+ if(pi0==pi)
35
+ edges.Append(std::make_tuple(pi0, pi1));
36
+ }
37
+ }
38
+
39
+ template<typename T_PI2SEI>
40
+ void BuildEdgeList( const Mesh & mesh, const T_PI2SEI & elementsonnode, Array<std::tuple<PointIndex, PointIndex>> & edges )
41
+ {
42
+ // static_assert(is_same_v<TINDEX, ElementIndex>||is_same_v<TINDEX,SurfaceElementIndex>, "Invalid type for TINDEX");
43
+ static Timer tbuild_edges("Build edges"); RegionTimer reg(tbuild_edges);
44
+
45
+ int ntasks = 4*ngcore::TaskManager::GetMaxThreads();
46
+ Array<Array<std::tuple<PointIndex,PointIndex>>> task_edges(ntasks);
47
+
48
+ ParallelFor(IntRange(ntasks), [&] (int ti)
49
+ {
50
+ auto myrange = mesh.Points().Range().Split(ti, ntasks);
51
+ ArrayMem<std::tuple<PointIndex,PointIndex>, 100> local_edges;
52
+ for (auto pi : myrange)
53
+ {
54
+ local_edges.SetSize(0);
55
+
56
+ for(auto ei : elementsonnode[pi])
57
+ {
58
+ const auto & elem = mesh[ei];
59
+ if (elem.IsDeleted()) continue;
60
+
61
+ AppendEdges(elem, pi, local_edges);
62
+ }
63
+ QuickSort(local_edges);
64
+
65
+ auto edge_prev = std::make_tuple<PointIndex, PointIndex>(PointIndex::INVALID, PointIndex::INVALID);
66
+
67
+ for(auto edge : local_edges)
68
+ if(edge != edge_prev)
69
+ {
70
+ task_edges[ti].Append(edge);
71
+ edge_prev = edge;
72
+ }
73
+ }
74
+ }, ntasks);
75
+
76
+ int num_edges = 0;
77
+ for (auto & edg : task_edges)
78
+ num_edges += edg.Size();
79
+ edges.SetAllocSize(num_edges);
80
+ for (auto & edg : task_edges)
81
+ edges.Append(edg);
82
+ }
83
+
84
+
85
+ class Neighbour
86
+ {
87
+ int nr[3];
88
+ int orient[3];
89
+
90
+ public:
91
+ Neighbour () { ; }
92
+
93
+ void SetNr (int side, int anr) { nr[side] = anr; }
94
+ int GetNr (int side) { return nr[side]; }
95
+
96
+ void SetOrientation (int side, int aorient) { orient[side] = aorient; }
97
+ int GetOrientation (int side) { return orient[side]; }
98
+ };
99
+
100
+ ///
101
+ class MeshOptimize2d
102
+ {
103
+ int faceindex = 0;
104
+ int improveedges = 0;
105
+ double metricweight = 0.;
106
+ int writestatus = 1;
107
+ Mesh& mesh;
108
+ const NetgenGeometry& geo;
109
+ public:
110
+ ///
111
+ MeshOptimize2d(Mesh& amesh) : mesh(amesh), geo(*mesh.GetGeometry())
112
+ {}
113
+ virtual ~MeshOptimize2d() { ; }
114
+ ///
115
+ DLL_HEADER void ImproveMesh (const MeshingParameters & mp);
116
+ DLL_HEADER void ImproveMeshJacobian (const MeshingParameters & mp);
117
+ DLL_HEADER void ImproveVolumeMesh ();
118
+ DLL_HEADER void ProjectBoundaryPoints(NgArray<int> & surfaceindex,
119
+ const NgArray<Point<3>* > & from, NgArray<Point<3>* > & dest);
120
+
121
+ DLL_HEADER bool EdgeSwapping (const int usemetric, Array<Neighbour> &neighbors, Array<bool> &swapped,
122
+ const SurfaceElementIndex t1, const int edge, const int t, Array<int,PointIndex> &pdef, const bool check_only=false);
123
+ DLL_HEADER void EdgeSwapping (int usemetric);
124
+ DLL_HEADER void CombineImprove ();
125
+ DLL_HEADER void SplitImprove ();
126
+
127
+ DLL_HEADER void GenericImprove ();
128
+
129
+
130
+ void SetFaceIndex (int fi) { faceindex = fi; }
131
+ void SetImproveEdges (int ie) { improveedges = ie; }
132
+ void SetMetricWeight (double mw) { metricweight = mw; }
133
+ void SetWriteStatus (int ws) { writestatus = ws; }
134
+
135
+
136
+ /// liefert zu einem 3d-Punkt die geominfo (Dreieck) und liefert 1, wenn erfolgreich,
137
+ /// 0, wenn nicht (Punkt ausserhalb von chart)
138
+ ///
139
+
140
+ void CheckMeshApproximation (Mesh & mesh);
141
+
142
+
143
+ ///
144
+ friend class Opti2SurfaceMinFunction;
145
+ ///
146
+ friend class Opti2EdgeMinFunction;
147
+ ///
148
+ friend double Opti2FunctionValueGrad (const Vector & x, Vector & grad);
149
+ ///
150
+ friend double Opti2EdgeFunctionValueGrad (const Vector & x, Vector & grad);
151
+
152
+
153
+
154
+ };
155
+
156
+
157
+ extern void CalcTriangleBadness (double x2, double x3, double y3,
158
+ double metricweight,
159
+ double h, double & badness,
160
+ double & g1x, double & g1y);
161
+
162
+
163
+
164
+
165
+ extern double CalcTriangleBadness (const Point<3> & p1,
166
+ const Point<3> & p2,
167
+ const Point<3> & p3,
168
+ double metricweight,
169
+ double h);
170
+
171
+ extern double CalcTriangleBadness (const Point<3> & p1,
172
+ const Point<3> & p2,
173
+ const Point<3> & p3,
174
+ const Vec<3> & n,
175
+ double metricweight,
176
+ double h);
177
+ } // namespace netgen
178
+ #endif // NETGEN_IMPROVE2_HPP
@@ -0,0 +1,151 @@
1
+ #ifndef FILE_IMPROVE3
2
+ #define FILE_IMPROVE3
3
+
4
+ namespace netgen
5
+ {
6
+
7
+
8
+ ///
9
+ class MeshOptimize3d
10
+ {
11
+ Mesh & mesh;
12
+ const MeshingParameters & mp;
13
+ OPTIMIZEGOAL goal = OPT_QUALITY;
14
+ double min_badness = 0;
15
+
16
+ bool HasBadElement(FlatArray<ElementIndex> els);
17
+ bool HasIllegalElement(FlatArray<ElementIndex> els);
18
+ bool NeedsOptimization(FlatArray<ElementIndex> els);
19
+
20
+ public:
21
+
22
+ MeshOptimize3d (Mesh & m, const MeshingParameters & amp, OPTIMIZEGOAL agoal = OPT_QUALITY) :
23
+ mesh(m), mp(amp), goal(agoal) { ; }
24
+
25
+ void SetGoal(OPTIMIZEGOAL agoal) { goal = agoal; }
26
+ void SetMinBadness(double badness) { min_badness = badness; }
27
+
28
+ tuple<double, double, int> UpdateBadness();
29
+
30
+ double CombineImproveEdge (
31
+ Table<ElementIndex, PointIndex> & elements_of_point,
32
+ PointIndex pi0, PointIndex pi1,
33
+ FlatArray<bool, PointIndex> is_point_removed, bool check_only=false);
34
+
35
+ void CombineImprove ();
36
+
37
+ void SplitImprove ();
38
+ double SplitImproveEdge (Table<ElementIndex,PointIndex> & elementsonnode, NgArray<PointIndices<3>> &locfaces, double badmax, PointIndex pi1, PointIndex pi2, PointIndex ptmp, bool check_only=false);
39
+
40
+ void SplitImprove2 ();
41
+ double SplitImprove2Element (ElementIndex ei, const Table<ElementIndex, PointIndex> & elements_of_point, bool check_only);
42
+
43
+
44
+ double SwapImproveEdge (const TBitArray<ElementIndex> * working_elements, Table<ElementIndex,PointIndex> & elementsonnode, INDEX_3_HASHTABLE<int> & faces, PointIndex pi1, PointIndex pi2, bool check_only=false);
45
+ void SwapImprove (const TBitArray<ElementIndex> * working_elements = NULL);
46
+ void SwapImproveSurface (const TBitArray<ElementIndex> * working_elements = NULL,
47
+ const NgArray< idmap_type* > * idmaps = NULL);
48
+ void SwapImprove2 (bool conform_segments = false);
49
+ double SwapImprove2 (ElementIndex eli1, int face, Table<ElementIndex, PointIndex> & elementsonnode, DynamicTable<SurfaceElementIndex, PointIndex> & belementsonnode, bool conform_segments, bool check_only=false );
50
+
51
+ void ImproveMesh() { mesh.ImproveMesh(mp, goal); }
52
+
53
+ double
54
+ CalcBad (const Mesh::T_POINTS & points, const Element & elem, double h)
55
+ {
56
+ if (elem.GetType() == TET)
57
+ return CalcTetBadness (points[elem[0]], points[elem[1]],
58
+ points[elem[2]], points[elem[3]], h, mp);
59
+ return 0;
60
+ }
61
+
62
+
63
+ double GetLegalPenalty()
64
+ {
65
+ return goal == OPT_LEGAL ? 1e15 : 1e6;
66
+ }
67
+
68
+ };
69
+
70
+
71
+ inline double
72
+ CalcBad (const Mesh::T_POINTS & points, const Element & elem, double h, const MeshingParameters & mp)
73
+ {
74
+ if (elem.GetType() == TET)
75
+ return CalcTetBadness (points[elem[0]], points[elem[1]],
76
+ points[elem[2]], points[elem[3]], h, mp);
77
+ return 0;
78
+ }
79
+
80
+
81
+
82
+ extern int WrongOrientation (const Mesh::T_POINTS & points, const Element & el);
83
+
84
+
85
+ /* Functional depending of inner point inside triangular surface */
86
+
87
+
88
+ class MinFunctionSum : public MinFunction
89
+ {
90
+ protected:
91
+ NgArray<MinFunction*> functions;
92
+
93
+ public:
94
+
95
+ virtual double Func (const Vector & x) const;
96
+ virtual void Grad (const Vector & x, Vector & g) const;
97
+ virtual double FuncGrad (const Vector & x, Vector & g) const;
98
+ virtual double FuncDeriv (const Vector & x, const Vector & dir, double & deriv) const;
99
+ virtual double GradStopping (const Vector & x) const;
100
+
101
+ void AddFunction(MinFunction & fun);
102
+
103
+ const MinFunction & Function(int i) const;
104
+ MinFunction & Function(int i);
105
+ };
106
+
107
+
108
+ class PointFunction1 : public MinFunction
109
+ {
110
+ Mesh::T_POINTS & points;
111
+ const NgArray<PointIndices<3>> & faces;
112
+ const MeshingParameters & mp;
113
+ double h;
114
+ public:
115
+ PointFunction1 (Mesh::T_POINTS & apoints,
116
+ const NgArray<PointIndices<3>> & afaces,
117
+ const MeshingParameters & amp,
118
+ double ah);
119
+
120
+ virtual double Func (const Vector & x) const;
121
+ virtual double FuncDeriv (const Vector & x, const Vector & dir, double & deriv) const;
122
+ virtual double FuncGrad (const Vector & x, Vector & g) const;
123
+ virtual double GradStopping (const Vector & x) const;
124
+ };
125
+
126
+ class JacobianPointFunction : public MinFunction
127
+ {
128
+ public:
129
+ Mesh::T_POINTS & points;
130
+ const Array<Element, ElementIndex> & elements;
131
+ TABLE<INDEX> elementsonpoint;
132
+ PointIndex actpind;
133
+
134
+ bool onplane;
135
+ Vec<3> nv;
136
+
137
+ public:
138
+ JacobianPointFunction (Mesh::T_POINTS & apoints,
139
+ const Array<Element, ElementIndex> & aelements);
140
+ virtual ~JacobianPointFunction () { ; }
141
+ virtual void SetPointIndex (PointIndex aactpind);
142
+ virtual double Func (const Vector & x) const;
143
+ virtual double FuncGrad (const Vector & x, Vector & g) const;
144
+ virtual double FuncDeriv (const Vector & x, const Vector & dir, double & deriv) const;
145
+
146
+ inline void SetNV(const Vec<3> & anv) {nv = anv; onplane = true;}
147
+ inline void UnSetNV(void) {onplane = false;}
148
+ };
149
+
150
+ } // namespace netgen
151
+ #endif