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,318 @@
1
+ #ifndef NETGEN_CORE_LOCALHEAP_HPP
2
+ #define NETGEN_CORE_LOCALHEAP_HPP
3
+
4
+ /**************************************************************************/
5
+ /* File: localheap.hpp */
6
+ /* Author: Joachim Schoeberl */
7
+ /* Date: 19. Apr. 2000 */
8
+ /**************************************************************************/
9
+
10
+ #include <cstdlib>
11
+
12
+ #include "exception.hpp"
13
+ #include "ngcore_api.hpp"
14
+ #include "utils.hpp"
15
+
16
+ namespace ngcore
17
+ {
18
+
19
+ class Allocator
20
+ {
21
+ public:
22
+ virtual ~Allocator() {}
23
+ virtual void * Alloc (size_t size)
24
+ {
25
+ return new char[size];
26
+ }
27
+ virtual void Delete(void* p)
28
+ {
29
+ delete (char*) p;
30
+ }
31
+ virtual void ArrayDelete(void* p)
32
+ {
33
+ delete [] (char*) p;
34
+ }
35
+ };
36
+ static Allocator global_alloc;
37
+
38
+ /**
39
+ Exception on heap overflow.
40
+ Thrown by allocation on LocalHeap.
41
+ */
42
+ class NGCORE_API LocalHeapOverflow : public Exception
43
+ {
44
+ public:
45
+ LocalHeapOverflow (size_t size);
46
+ virtual ~LocalHeapOverflow ();
47
+ };
48
+
49
+
50
+
51
+ /**
52
+ Optimized memory handler.
53
+ One block of data is organized as stack memory.
54
+ One can allocate memory out of it. This increases the stack pointer.
55
+ With \Ref{CleanUp}, the pointer is reset to the beginning or to a
56
+ specific position.
57
+ */
58
+ class LocalHeap : public Allocator
59
+ {
60
+ char * data;
61
+ char * next;
62
+ char * p;
63
+ size_t totsize;
64
+ public:
65
+ bool owner;
66
+ const char * name;
67
+
68
+ #if defined(__MIC__) || defined (__AVX512F__)
69
+ enum { ALIGN = 64 };
70
+ #else
71
+ enum { ALIGN = 32 };
72
+ #endif
73
+
74
+ public:
75
+ /// Allocate one block of size asize.
76
+ NGCORE_API LocalHeap (size_t asize,
77
+ const char * aname = "noname",
78
+ bool mult_by_threads = false);
79
+
80
+ /// Use provided memory for the LocalHeap
81
+ NETGEN_INLINE LocalHeap (char * adata, size_t asize,
82
+ const char * aname = "noname") throw ()
83
+ {
84
+ totsize = asize;
85
+ data = adata;
86
+ next = data + totsize;
87
+ owner = 0;
88
+ // p = data;
89
+ name = aname;
90
+ CleanUp();
91
+ }
92
+
93
+ /*
94
+ /// Use provided memory for the LocalHeap
95
+ NETGEN_INLINE LocalHeap (const LocalHeap & lh2)
96
+ : data(lh2.data), p(lh2.p), totsize(lh2.totsize), owner(false),
97
+ name(lh2.name)
98
+ {
99
+ next = data + totsize;
100
+ }
101
+ */
102
+ NETGEN_INLINE LocalHeap (const LocalHeap & lh2) = delete;
103
+
104
+ NETGEN_INLINE LocalHeap (LocalHeap && lh2)
105
+ : data(lh2.data), p(lh2.p), totsize(lh2.totsize), owner(lh2.owner),
106
+ name(lh2.name)
107
+ {
108
+ next = data + totsize;
109
+ lh2.owner = false;
110
+ }
111
+
112
+ NETGEN_INLINE LocalHeap Borrow()
113
+ {
114
+ return LocalHeap (p, Available());
115
+ }
116
+
117
+
118
+ NETGEN_INLINE LocalHeap & operator= (LocalHeap && lh2)
119
+ {
120
+ if (owner)
121
+ delete [] data;
122
+
123
+ data = lh2.data;
124
+ p = lh2.p;
125
+ totsize = lh2.totsize;
126
+ owner = lh2.owner;
127
+ name = lh2.name;
128
+
129
+ next = data + totsize;
130
+ lh2.owner = false;
131
+ return *this;
132
+ }
133
+
134
+ NETGEN_INLINE LocalHeap ()
135
+ : data(nullptr), next(nullptr), p(nullptr), totsize(0), owner(false) { ; }
136
+
137
+
138
+ /// free memory
139
+ virtual ~LocalHeap ()
140
+ {
141
+ if (owner)
142
+ delete [] data;
143
+ }
144
+
145
+ /// delete all memory on local heap
146
+ NETGEN_INLINE void CleanUp() throw ()
147
+ {
148
+ p = data;
149
+ // p += (16 - (long(p) & 15) );
150
+ p += (ALIGN - (size_t(p) & (ALIGN-1) ) );
151
+ }
152
+
153
+ /// returns heap-pointer
154
+ NETGEN_INLINE void * GetPointer () throw ()
155
+ {
156
+ return p;
157
+ }
158
+
159
+ /// deletes memory back to heap-pointer
160
+ NETGEN_INLINE void CleanUp (void * addr) throw ()
161
+ {
162
+ p = (char*)addr;
163
+ }
164
+
165
+ /// allocates size bytes of memory from local heap
166
+ void * Alloc (size_t size) final // throw (LocalHeapOverflow)
167
+ {
168
+ char * oldp = p;
169
+
170
+ // 16 byte alignment
171
+ size += (ALIGN - size % ALIGN);
172
+ p += size;
173
+
174
+ // if ( size_t(p - data) >= totsize )
175
+ #ifndef FULLSPEED
176
+ if (likely(p >= next))
177
+ ThrowException();
178
+ #endif
179
+ return oldp;
180
+ }
181
+
182
+ /// allocates size objects of type T on local heap
183
+ template <typename T>
184
+ T * Alloc (size_t size) // throw (LocalHeapOverflow)
185
+ {
186
+ char * oldp = p;
187
+ size *= sizeof (T);
188
+
189
+ // 16 byte alignment
190
+ size += (ALIGN - size % ALIGN);
191
+ p += size;
192
+
193
+ #ifndef FULLSPEED
194
+ if (likely(p >= next))
195
+ ThrowException();
196
+ #endif
197
+
198
+ return reinterpret_cast<T*> (oldp);
199
+ }
200
+
201
+ virtual void Delete(void* /* p */) {}
202
+
203
+ virtual void ArrayDelete(void* /* p */) {}
204
+ private:
205
+ ///
206
+ #ifndef __CUDA_ARCH__
207
+ [[noreturn]] NGCORE_API void ThrowException();
208
+ #else
209
+ NETGEN_INLINE void ThrowException() { ; }
210
+ #endif
211
+
212
+ public:
213
+ /// free memory (dummy function)
214
+ NETGEN_INLINE void Free (void * /* data */) throw ()
215
+ {
216
+ ;
217
+ }
218
+
219
+ /// available memory on LocalHeap
220
+ NETGEN_INLINE size_t Available () const throw () { return (totsize - (p-data)); }
221
+
222
+ /// Split free memory on heap into pieces for each thread
223
+ NGCORE_API LocalHeap Split () const;
224
+
225
+ /// Split free memory on heap into pieces
226
+ NETGEN_INLINE LocalHeap Split (int partnr, int nparts) const
227
+ {
228
+ int pieces = nparts;
229
+ int i = partnr;
230
+
231
+ size_t freemem = totsize - (p - data);
232
+ size_t size_of_piece = freemem / pieces;
233
+ return LocalHeap (p + i * size_of_piece, size_of_piece, name);
234
+ }
235
+
236
+
237
+ NETGEN_INLINE void ClearValues ()
238
+ {
239
+ for (size_t i = 0; i < totsize; i++) data[i] = 47;
240
+ }
241
+
242
+ NETGEN_INLINE size_t UsedSize ()
243
+ {
244
+ for (size_t i = totsize-1; i != 0; i--)
245
+ if (data[i] != 47) return i;
246
+ return 0;
247
+ }
248
+ };
249
+
250
+
251
+
252
+ /**
253
+ Optimized memory handler.
254
+ Provides static memory for the local heap. The template argument specifies the size in number of chars.
255
+ */
256
+ template <int S>
257
+ class LocalHeapMem : public LocalHeap
258
+ {
259
+ char mem[S];
260
+ public:
261
+ NETGEN_INLINE LocalHeapMem (const char * aname) throw () : LocalHeap (mem, S, aname) { ; }
262
+ };
263
+
264
+
265
+
266
+
267
+
268
+
269
+
270
+
271
+ /**
272
+ A reset for the heap-pointer of a LocalHeap..
273
+ The constructor stores the heap-pointer, the constructor at the end of the regions resets the heap-pointer.
274
+ */
275
+ class HeapReset
276
+ {
277
+ LocalHeap & lh;
278
+ void * pointer;
279
+ public:
280
+ ///
281
+ NETGEN_INLINE HeapReset (LocalHeap & alh)
282
+ : lh(alh), pointer (alh.GetPointer()) { ; }
283
+
284
+ ///
285
+ NETGEN_INLINE ~HeapReset ()
286
+ {
287
+ lh.CleanUp (pointer);
288
+ }
289
+ };
290
+
291
+ }
292
+
293
+
294
+
295
+ NETGEN_INLINE void * operator new (size_t size, ngcore::Allocator & alloc)
296
+ {
297
+ return alloc.Alloc(size);
298
+ }
299
+
300
+ NETGEN_INLINE void * operator new [] (size_t size, ngcore::Allocator & alloc)
301
+ {
302
+ return alloc.Alloc(size);
303
+ }
304
+
305
+
306
+ NETGEN_INLINE void operator delete (void * p, ngcore::Allocator & lh)
307
+ {
308
+ lh.Delete(p);
309
+ }
310
+
311
+ NETGEN_INLINE void operator delete [] (void * p, ngcore::Allocator & lh)
312
+ {
313
+ lh.ArrayDelete(p);
314
+ }
315
+
316
+
317
+
318
+ #endif // NETGEN_CORE_LOCALHEAP_HPP
@@ -0,0 +1,117 @@
1
+ #ifndef NETGEN_CORE_LOGGING_HPP
2
+ #define NETGEN_CORE_LOGGING_HPP
3
+
4
+ #include <iostream>
5
+ #include <memory>
6
+ #include <string>
7
+ #include <vector>
8
+
9
+ #include "exception.hpp"
10
+ #include "ngcore_api.hpp"
11
+ #include "utils.hpp"
12
+
13
+ #ifndef NETGEN_DEBUG_LOG
14
+ #define NETGEN_DEBUG_LOG(logger, ...)
15
+ #endif // NETGEN_DEBUG_LOG
16
+
17
+ namespace spdlog
18
+ {
19
+ class logger;
20
+ } // namespace spdlog
21
+
22
+ namespace ngcore
23
+ {
24
+ NGCORE_API extern std::ostream* testout; // NOLINT
25
+
26
+ namespace level
27
+ {
28
+ enum level_enum
29
+ {
30
+ trace = 0,
31
+ debug = 1,
32
+ info = 2,
33
+ warn = 3,
34
+ err = 4,
35
+ critical = 5,
36
+ off = 6
37
+ };
38
+ } // namespace level
39
+
40
+ class Logger
41
+ {
42
+ static NGCORE_API level::level_enum global_level;
43
+
44
+ public:
45
+ static auto SetGlobalLoggingLevel( level::level_enum level )
46
+ {
47
+ auto oldval = global_level;
48
+ global_level = level;
49
+ return oldval;
50
+ }
51
+
52
+ std::shared_ptr<spdlog::logger> logger;
53
+
54
+ Logger(std::shared_ptr<spdlog::logger> l) : logger(std::move(l)) {}
55
+
56
+ void NGCORE_API log( level::level_enum level, std::string && s);
57
+
58
+ template<typename T>
59
+ std::string replace(std::string s, const T & t)
60
+ {
61
+ auto p0 = s.find_first_of('{');
62
+ auto p1 = s.find_first_of('}', p0);
63
+ if(p0==std::string::npos || p1==std::string::npos)
64
+ throw Exception("invalid format string");
65
+ s.replace(p0, p1-p0+1, ToString(t));
66
+ return s;
67
+ }
68
+
69
+ std::string log_helper(std::string s)
70
+ {
71
+ return s;
72
+ }
73
+
74
+ template<typename T>
75
+ std::string log_helper(std::string s, const T &t)
76
+ {
77
+ return replace(s,t);
78
+ }
79
+
80
+ template<typename T, typename ... Args>
81
+ std::string log_helper( std::string s, const T &t, Args ... args)
82
+ {
83
+ return log_helper(replace(s,t), args...);
84
+ }
85
+
86
+ template<typename ... Args>
87
+ void log( level::level_enum level, const char* str, Args ... args)
88
+ {
89
+ log(level, log_helper(std::string(str), args...));
90
+ }
91
+
92
+ template<typename ... Args>
93
+ void trace( const char* str, Args ... args) { log(level::level_enum::trace, str, args...); }
94
+ template<typename ... Args>
95
+ void debug( const char* str, Args ... args) { log(level::level_enum::debug, str, args...); }
96
+ template<typename ... Args>
97
+ void info( const char* str, Args ... args) { log(level::level_enum::info, str, args...); }
98
+ template<typename ... Args>
99
+ void warn( const char* str, Args ... args) { log(level::level_enum::warn, str, args...); }
100
+ template<typename ... Args>
101
+ void error( const char* str, Args ... args) { log(level::level_enum::err, str, args...); }
102
+ template<typename ... Args>
103
+ void critical( const char* str, Args ... args) { log(level::level_enum::critical, str, args...); }
104
+ };
105
+
106
+
107
+
108
+
109
+ NGCORE_API std::shared_ptr<Logger> GetLogger(const std::string& name);
110
+ NGCORE_API void SetLoggingLevel(level::level_enum level, const std::string& name);
111
+ NGCORE_API void AddFileSink(const std::string& filename, level::level_enum level, const std::string& logger);
112
+ NGCORE_API void AddConsoleSink(level::level_enum level, const std::string& logger);
113
+ NGCORE_API void ClearLoggingSinks(const std::string& logger);
114
+ NGCORE_API void FlushOnLoggingLevel(level::level_enum level, const std::string& logger);
115
+ } // namespace ngcore
116
+
117
+ #endif // NETGEN_CORE_LOGGING_HPP
@@ -0,0 +1,221 @@
1
+ #ifndef NETGEN_CORE_MEMTRACER_HPP
2
+ #define NETGEN_CORE_MEMTRACER_HPP
3
+
4
+ #include <array>
5
+ #include <chrono>
6
+ #include <string>
7
+
8
+ #include "array.hpp"
9
+ #include "logging.hpp"
10
+ #include "paje_trace.hpp"
11
+ #include "utils.hpp"
12
+
13
+ namespace ngcore
14
+ {
15
+
16
+ class MemoryTracer;
17
+
18
+ namespace detail
19
+ {
20
+ //Type trait to check if a class implements a 'void SetMemoryTacing(int)' function
21
+ template<typename T>
22
+ struct has_StartMemoryTracing
23
+ {
24
+ private:
25
+ template<typename T2>
26
+ static constexpr auto check(T2*) ->
27
+ typename std::is_same<decltype(std::declval<T2>().StartMemoryTracing()),void>::type;
28
+ template<typename>
29
+ static constexpr std::false_type check(...);
30
+ using type = decltype(check<T>(nullptr)); // NOLINT
31
+ public:
32
+ static constexpr bool value = type::value;
33
+ };
34
+ } // namespace detail
35
+
36
+ class MemoryTracer
37
+ {
38
+ #if defined(NETGEN_TRACE_MEMORY) && !defined(__CUDA_ARCH__)
39
+ NGCORE_API static std::vector<std::string> names;
40
+ NGCORE_API static std::vector<int> parents;
41
+
42
+ #if defined(NETGEN_CHECK_RANGE)
43
+ NGCORE_API static std::atomic<size_t> total_memory;
44
+ mutable size_t allocated_memory = 0;
45
+ #endif // NETGEN_CHECK_RANGE
46
+
47
+ static int CreateId(const std::string& name = "")
48
+ {
49
+ int id = names.size();
50
+ names.push_back(name);
51
+ parents.push_back(0);
52
+ if(id==10*8*1024)
53
+ std::cerr << "Allocated " << id << " MemoryTracer objects" << std::endl;
54
+ return id;
55
+ }
56
+ mutable int id = 0;
57
+
58
+ public:
59
+
60
+ MemoryTracer( std::string name )
61
+ {
62
+ id = CreateId(name);
63
+ }
64
+
65
+ MemoryTracer() { }
66
+
67
+ MemoryTracer(const MemoryTracer & tracer)
68
+ {
69
+ (*this) = tracer;
70
+ }
71
+
72
+ MemoryTracer(MemoryTracer && tracer)
73
+ {
74
+ (*this) = std::move(tracer);
75
+ }
76
+
77
+ MemoryTracer & operator=(const MemoryTracer & tracer) {
78
+ if(tracer.id)
79
+ id = CreateId(names[tracer.id]);
80
+ return *this;
81
+ }
82
+
83
+ MemoryTracer & operator=(MemoryTracer && tracer) {
84
+ ngcore::Swap(id, tracer.id);
85
+
86
+ #if defined(NETGEN_CHECK_RANGE)
87
+ ngcore::Swap(allocated_memory, tracer.allocated_memory);
88
+ #endif // NETGEN_CHECK_RANGE
89
+
90
+ return *this;
91
+ }
92
+
93
+ template <typename... TRest>
94
+ MemoryTracer( std::string name, TRest & ... rest )
95
+ {
96
+ id = CreateId(name);
97
+ Track(rest...);
98
+ }
99
+
100
+ #if defined(NETGEN_CHECK_RANGE)
101
+ // check if all memory was freed when object is destroyed
102
+ ~MemoryTracer()
103
+ {
104
+ NETGEN_CHECK_SAME(allocated_memory, 0);
105
+ }
106
+ #endif // NETGEN_CHECK_RANGE
107
+
108
+ NETGEN_INLINE void Alloc(size_t size) const
109
+ {
110
+ #if defined(NETGEN_CHECK_RANGE)
111
+ // Trace also nameless Memtracer objects if range checks are active
112
+ if(!id && size)
113
+ id = CreateId();
114
+ #endif // NETGEN_CHECK_RANGE
115
+
116
+ if(id && trace)
117
+ trace->AllocMemory(id, size);
118
+
119
+ #if defined(NETGEN_CHECK_RANGE)
120
+ if(id)
121
+ {
122
+ allocated_memory += size;
123
+ total_memory += size;
124
+ }
125
+ #endif // NETGEN_CHECK_RANGE
126
+ }
127
+
128
+ void Free(size_t size) const
129
+ {
130
+ if(id && trace)
131
+ trace->FreeMemory(id, size);
132
+
133
+ #if defined(NETGEN_CHECK_RANGE)
134
+ if(id)
135
+ {
136
+ // check if we have at least size bytes of memory currently allocated (such that allocated_memory doesn't get negative)
137
+ NETGEN_CHECK_RANGE(allocated_memory, static_cast<ptrdiff_t>(size), std::numeric_limits<ptrdiff_t>::max());
138
+ allocated_memory -= size;
139
+ total_memory -= size;
140
+ #endif // NETGEN_CHECK_RANGE
141
+ }
142
+ }
143
+
144
+ int GetId() const { return id; }
145
+
146
+ template <typename T1, typename... TRest>
147
+ void Track( T1 & obj, const std::string& name, TRest & ... rest ) const
148
+ {
149
+ Track(obj, name);
150
+ Track(rest...);
151
+ }
152
+
153
+ template<typename T>
154
+ void Track( T & obj, const std::string& name ) const
155
+ {
156
+ obj.GetMemoryTracer().Activate(obj, name);
157
+ parents[obj.GetMemoryTracer().GetId()] = id;
158
+ }
159
+
160
+ static std::string GetName(int id)
161
+ {
162
+ return names[id];
163
+ }
164
+
165
+ std::string GetName() const
166
+ {
167
+ return names[id];
168
+ }
169
+
170
+ template<typename T>
171
+ void Activate(T& me, const std::string& name) const
172
+ {
173
+ if(!id)
174
+ {
175
+ const_cast<MemoryTracer*>(this)->id = CreateId(name);
176
+ if constexpr(detail::has_StartMemoryTracing<T>::value)
177
+ me.StartMemoryTracing();
178
+ }
179
+ else
180
+ SetName(name);
181
+ }
182
+
183
+ void SetName(const std::string& name) const
184
+ {
185
+ names[id] = name;
186
+ }
187
+
188
+
189
+ static const std::vector<std::string> & GetNames() { return names; }
190
+ static const std::vector<int> & GetParents() { return parents; }
191
+ static size_t GetTotalMemory()
192
+ {
193
+ #if defined(NETGEN_CHECK_RANGE)
194
+ return total_memory;
195
+ #else
196
+ return 0;
197
+ #endif // NETGEN_CHECK_RANGE
198
+ }
199
+ #else // defined(NETGEN_TRACE_MEMORY) && !defined(__CUDA_ARCH__)
200
+ public:
201
+ NETGEN_INLINE MemoryTracer() {}
202
+ MemoryTracer( std::string /* name */ ) {}
203
+ template <typename... TRest>
204
+ MemoryTracer( std::string /* name */, TRest & ... ) {}
205
+
206
+ void Alloc(size_t /* size */) const {}
207
+ void Free(size_t /* size */) const {}
208
+ int GetId() const { return 0; }
209
+
210
+ template <typename... TRest>
211
+ void Track(TRest&...) const {}
212
+
213
+ static std::string GetName(int /* id */) { return ""; }
214
+ std::string GetName() const { return ""; }
215
+ void SetName(std::string /* name */) const {}
216
+ static size_t GetTotalMemory() { return 0; }
217
+ #endif // NETGEN_TRACE_MEMORY
218
+ };
219
+ } // namespace ngcore
220
+
221
+ #endif // NETGEN_CORE_MEMTRACER_HPP