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,544 @@
1
+ #ifndef FILE_OBJECTS
2
+ #define FILE_OBJECTS
3
+
4
+ /* *************************************************************************/
5
+ /* File: geomobjects.hpp */
6
+ /* Author: Joachim Schoeberl */
7
+ /* Date: 20. Jul. 02 */
8
+ /* *************************************************************************/
9
+
10
+ #include <core/array.hpp>
11
+
12
+ #include <general/ngarray.hpp>
13
+
14
+ namespace netgen
15
+ {
16
+ using namespace ngcore;
17
+
18
+ template <int D, typename T = double> class Vec;
19
+ template <int D, typename T = double> class Point;
20
+
21
+
22
+ template <int D, typename T>
23
+ class Point
24
+ {
25
+
26
+ protected:
27
+ T x[D];
28
+
29
+ public:
30
+ Point () { ; }
31
+ Point (T ax) { for (int i = 0; i < D; i++) x[i] = ax; }
32
+ Point (T ax, T ay)
33
+ {
34
+ // static_assert(D==2, "Point<D> constructor with 2 args called");
35
+ x[0] = ax; x[1] = ay;
36
+ }
37
+ Point (T ax, T ay, T az)
38
+ {
39
+ // static_assert(D==3, "Point<D> constructor with 3 args called");
40
+ x[0] = ax; x[1] = ay; x[2] = az;
41
+ }
42
+ Point (T ax, T ay, T az, T au)
43
+ { x[0] = ax; x[1] = ay; x[2] = az; x[3] = au;}
44
+
45
+ template <typename T2>
46
+ Point (const Point<D,T2> & p2)
47
+ { for (int i = 0; i < D; i++) x[i] = p2(i); }
48
+
49
+ explicit Point (const Vec<D,T> & v)
50
+ { for (int i = 0; i < D; i++) x[i] = v(i); }
51
+
52
+
53
+ template <typename T2>
54
+ Point & operator= (const Point<D,T2> & p2)
55
+ {
56
+ for (int i = 0; i < D; i++) x[i] = p2(i);
57
+ return *this;
58
+ }
59
+
60
+ Point & operator= (T val)
61
+ {
62
+ for (int i = 0; i < D; i++) x[i] = val;
63
+ return *this;
64
+ }
65
+
66
+ T & operator() (int i) { return x[i]; }
67
+ const T & operator() (int i) const { return x[i]; }
68
+
69
+ T& operator[] (int i) { return x[i]; }
70
+ const T& operator[] (int i) const { return x[i]; }
71
+
72
+ operator const T* () const { return x; }
73
+
74
+ template<typename ARCHIVE>
75
+ void DoArchive(ARCHIVE& archive)
76
+ {
77
+ for(int i=0; i<D; i++)
78
+ archive & x[i];
79
+ }
80
+ };
81
+
82
+ template <int D, typename T>
83
+ class Vec
84
+ {
85
+
86
+ protected:
87
+ T x[D];
88
+
89
+ public:
90
+ Vec () { ; } // for (int i = 0; i < D; i++) x[i] = 0; }
91
+ Vec (T ax) { for (int i = 0; i < D; i++) x[i] = ax; }
92
+ Vec (T ax, T ay)
93
+ {
94
+ // static_assert(D==2, "Vec<D> constructor with 2 args called");
95
+ x[0] = ax; x[1] = ay;
96
+ }
97
+ Vec (T ax, T ay, T az)
98
+ {
99
+ // static_assert(D==3, "Vec<D> constructor with 3 args called");
100
+ x[0] = ax; x[1] = ay; x[2] = az;
101
+ }
102
+ Vec (T ax, T ay, T az, T au)
103
+ { x[0] = ax; x[1] = ay; x[2] = az; x[3] = au; }
104
+
105
+ Vec (const Vec<D> & p2)
106
+ { for (int i = 0; i < D; i++) x[i] = p2.x[i]; }
107
+
108
+ explicit Vec (const Point<D,T> & p)
109
+ { for (int i = 0; i < D; i++) x[i] = p(i); }
110
+
111
+ explicit Vec(const Point<D,T>& p1, const Point<D,T>& p2)
112
+ { for(int i=0; i<D; i++) x[i] = p2(i)-p1(i); }
113
+
114
+ template <typename T2>
115
+ Vec & operator= (const Vec<D,T2> & p2)
116
+ {
117
+ for (int i = 0; i < D; i++) x[i] = p2(i);
118
+ return *this;
119
+ }
120
+
121
+ Vec & operator= (T s)
122
+ {
123
+ for (int i = 0; i < D; i++) x[i] = s;
124
+ return *this;
125
+ }
126
+
127
+ bool operator== (const Vec<D,T> &a) const
128
+ {
129
+ bool res = true;
130
+ for (auto i : Range(D))
131
+ res &= (x[i]==a.x[i]);
132
+ return res;
133
+ }
134
+
135
+ T & operator() (int i) { return x[i]; }
136
+ const T & operator() (int i) const { return x[i]; }
137
+
138
+ T& operator[] (int i) { return x[i]; }
139
+ const T& operator[] (int i) const { return x[i]; }
140
+
141
+ operator const T* () const { return x; }
142
+
143
+ template <typename ARCHIVE>
144
+ void DoArchive(ARCHIVE& archive)
145
+ {
146
+ for(int i=0; i<D; i++)
147
+ archive & x[i];
148
+ }
149
+
150
+ T Length () const
151
+ {
152
+ T l = 0;
153
+ for (int i = 0; i < D; i++)
154
+ l += x[i] * x[i];
155
+ return sqrt (l);
156
+ }
157
+
158
+ T Length2 () const
159
+ {
160
+ T l = 0;
161
+ for (int i = 0; i < D; i++)
162
+ l += x[i] * x[i];
163
+ return l;
164
+ }
165
+
166
+ Vec & Normalize ()
167
+ {
168
+ T l = Length();
169
+ // if (l != 0)
170
+ for (int i = 0; i < D; i++)
171
+ x[i] /= (l+1e-40);
172
+ return *this;
173
+ }
174
+
175
+ Vec<D> GetNormal () const;
176
+ };
177
+
178
+ template <int D>
179
+ inline ostream & operator<< (ostream & ost, const Vec<D> & a)
180
+ {
181
+ ost << "(";
182
+ for (int i = 0; i < D-1; i++)
183
+ ost << a(i) << ", ";
184
+ ost << a(D-1) << ")";
185
+ return ost;
186
+ }
187
+
188
+ template <int D>
189
+ inline ostream & operator<< (ostream & ost, const Point<D> & a)
190
+ {
191
+ ost << "(";
192
+ for (int i = 0; i < D-1; i++)
193
+ ost << a(i) << ", ";
194
+ ost << a(D-1) << ")";
195
+ return ost;
196
+ }
197
+
198
+ template<int D>
199
+ inline Vec<D> operator-(const Point<D>& p1, const Point<D>& p2)
200
+ {
201
+ Vec<D> result;
202
+ for(auto i : Range(D))
203
+ result[i] = p1[i] - p2[i];
204
+ return result;
205
+ }
206
+
207
+ template<int D>
208
+ inline Vec<D> operator*(const Vec<D>& v, double d)
209
+ {
210
+ Vec<D> result;
211
+ for(auto i : Range(D))
212
+ result[i] = d*v[i];
213
+ return result;
214
+ }
215
+
216
+ inline double Cross2(const Vec<2>& v1, const Vec<2>& v2)
217
+ {
218
+ return v1[0] * v2[1] - v1[1] * v2[0];
219
+ }
220
+
221
+ // are points clockwise?
222
+ inline bool CW(const Point<2>& p1, const Point<2>& p2,
223
+ const Point<2>& p3)
224
+ {
225
+ return Cross2(p2-p1, p3-p2) < 0;
226
+ }
227
+
228
+ // are points counterclockwise?
229
+ inline bool CCW(const Point<2>& p1, const Point<2>& p2,
230
+ const Point<2>& p3)
231
+ {
232
+ return Cross2(p2-p1, p3-p2) > 0;
233
+ }
234
+
235
+ // are strictly points counterclockwise?
236
+ inline bool CCW(const Point<2>& p1, const Point<2>& p2,
237
+ const Point<2>& p3, double eps)
238
+ {
239
+ auto v1 = p2-p1;
240
+ auto v2 = p3-p2;
241
+ return Cross2(v1, v2) > eps*eps*max2(v1.Length2(),
242
+ v2.Length2());
243
+ }
244
+
245
+
246
+ template <int H, int W=H, typename T = double>
247
+ class Mat
248
+ {
249
+
250
+ protected:
251
+ T x[H*W];
252
+
253
+ public:
254
+ Mat () { ; }
255
+ Mat (const Mat & b)
256
+ { for (int i = 0; i < H*W; i++) x[i] = b.x[i]; }
257
+
258
+ Mat & operator= (T s)
259
+ {
260
+ for (int i = 0; i < H*W; i++) x[i] = s;
261
+ return *this;
262
+ }
263
+
264
+ Mat & operator= (const Mat & b)
265
+ {
266
+ for (int i = 0; i < H*W; i++) x[i] = b.x[i];
267
+ return *this;
268
+ }
269
+
270
+ T & operator() (int i, int j) { return x[i*W+j]; }
271
+ const T & operator() (int i, int j) const { return x[i*W+j]; }
272
+ T & operator() (int i) { return x[i]; }
273
+ const T & operator() (int i) const { return x[i]; }
274
+
275
+ Vec<H,T> Col (int i) const
276
+ {
277
+ Vec<H,T> hv;
278
+ for (int j = 0; j < H; j++)
279
+ hv(j) = x[j*W+i];
280
+ return hv;
281
+ }
282
+
283
+ Vec<W,T> Row (int i) const
284
+ {
285
+ Vec<W,T> hv;
286
+ for (int j = 0; j < W; j++)
287
+ hv(j) = x[i*W+j];
288
+ return hv;
289
+ }
290
+
291
+ void Solve (const Vec<H,T> & rhs, Vec<W,T> & sol) const
292
+ {
293
+ Mat<W,H,T> inv;
294
+ CalcInverse (*this, inv);
295
+ sol = inv * rhs;
296
+ }
297
+
298
+ template <typename ARCHIVE>
299
+ void DoArchive(ARCHIVE & ar)
300
+ {
301
+ ar.Do(x, H*W);
302
+ }
303
+ };
304
+
305
+
306
+
307
+
308
+ template <int D>
309
+ class Box
310
+ {
311
+ protected:
312
+ Point<D> pmin, pmax;
313
+ public:
314
+ Box () { ; }
315
+
316
+ Box ( const Point<D> & p1)
317
+ {
318
+ for (int i = 0; i < D; i++)
319
+ pmin(i) = pmax(i) = p1(i);
320
+ }
321
+
322
+
323
+ Box ( const Point<D> & p1, const Point<D> & p2)
324
+ {
325
+ for (int i = 0; i < D; i++)
326
+ {
327
+ pmin(i) = min2(p1(i), p2(i));
328
+ pmax(i) = max2(p1(i), p2(i));
329
+ }
330
+ }
331
+
332
+ Box (const Point<D> & p1, const Point<D> & p2, const Point<D> & p3)
333
+ : Box(p1,p2)
334
+ {
335
+ Add (p3);
336
+ }
337
+
338
+ enum EB_TYPE { EMPTY_BOX = 1 };
339
+ Box ( EB_TYPE et )
340
+ {
341
+ for (int i = 0; i < D; i++)
342
+ {
343
+ pmin(i) = 1e99;
344
+ pmax(i) = -1e99;
345
+ }
346
+ }
347
+
348
+ const Point<D> & PMin () const { return pmin; }
349
+ const Point<D> & PMax () const { return pmax; }
350
+
351
+ void Set (const Point<D> & p)
352
+ { pmin = pmax = p; }
353
+
354
+ void Add (const Point<D> & p)
355
+ {
356
+ for (int i = 0; i < D; i++)
357
+ {
358
+ if (p(i) < pmin(i)) pmin(i) = p(i);
359
+ /* else */ if (p(i) > pmax(i)) pmax(i) = p(i);
360
+ // optimization invalid for empty-box !
361
+ }
362
+ }
363
+
364
+ template <typename T1, typename T2>
365
+ void Set (const NgIndirectArray<T1, T2> & points)
366
+ {
367
+ // Set (points[points.Begin()]);
368
+ Set (points[*points.Range().begin()]);
369
+ // for (int i = points.Begin()+1; i < points.End(); i++)
370
+ for (int i : points.Range().Modify(1,0))
371
+ Add (points[i]);
372
+ }
373
+
374
+ template <typename T1, typename T2>
375
+ void Add (const NgIndirectArray<T1, T2> & points)
376
+ {
377
+ // for (int i = points.Begin(); i < points.End(); i++)
378
+ for (int i : points.Range())
379
+ Add (points[i]);
380
+ }
381
+
382
+
383
+ Point<D> Center () const
384
+ {
385
+ Point<D> c;
386
+ for (int i = 0; i < D; i++)
387
+ c(i) = 0.5 * (pmin(i)+pmax(i));
388
+ return c;
389
+ }
390
+ double Diam () const { return Abs (pmax-pmin); }
391
+
392
+ Point<D> GetPointNr (int nr) const
393
+ {
394
+ Point<D> p;
395
+ for (int i = 0; i < D; i++)
396
+ {
397
+ p(i) = (nr & 1) ? pmax(i) : pmin(i);
398
+ nr >>= 1;
399
+ }
400
+ return p;
401
+ }
402
+
403
+
404
+ bool Intersect (const Box<D> & box2) const
405
+ {
406
+ for (int i = 0; i < D; i++)
407
+ if (pmin(i) > box2.pmax(i) ||
408
+ pmax(i) < box2.pmin(i)) return 0;
409
+ return 1;
410
+ }
411
+
412
+
413
+ bool IsIn (const Point<D> & p) const
414
+ {
415
+ for (int i = 0; i < D; i++)
416
+ if (p(i) < pmin(i) || p(i) > pmax(i)) return false;
417
+ return true;
418
+ }
419
+
420
+ // is point in eps-increased box
421
+ bool IsIn (const Point<D> & p, double eps) const
422
+ {
423
+ for (int i = 0; i < D; i++)
424
+ if (p(i) < pmin(i)-eps || p(i) > pmax(i)+eps) return false;
425
+ return true;
426
+ }
427
+
428
+
429
+ void Increase (double dist)
430
+ {
431
+ for (int i = 0; i < D; i++)
432
+ {
433
+ pmin(i) -= dist;
434
+ pmax(i) += dist;
435
+ }
436
+ }
437
+
438
+ void Scale (double factor)
439
+ {
440
+ auto center = Center();
441
+ pmin = center + factor*(pmin-center);
442
+ pmax = center + factor*(pmax-center);
443
+ }
444
+
445
+ template <typename ARCHIVE>
446
+ void DoArchive(ARCHIVE & archive)
447
+ { archive & pmin & pmax; }
448
+ };
449
+
450
+
451
+
452
+
453
+ template <int D>
454
+ class BoxSphere : public Box<D>
455
+ {
456
+ protected:
457
+ ///
458
+ Point<D> c;
459
+ ///
460
+ double diam;
461
+ ///
462
+ double inner;
463
+ public:
464
+ ///
465
+ BoxSphere () { };
466
+ ///
467
+ BoxSphere (const Box<D> & box)
468
+ : Box<D> (box)
469
+ {
470
+ CalcDiamCenter();
471
+ };
472
+
473
+ ///
474
+ BoxSphere ( Point<D> apmin, Point<D> apmax )
475
+ : Box<D> (apmin, apmax)
476
+ {
477
+ CalcDiamCenter();
478
+ }
479
+
480
+ ///
481
+ const Point<D> & Center () const { return c; }
482
+ ///
483
+ double Diam () const { return diam; }
484
+ ///
485
+ double Inner () const { return inner; }
486
+
487
+
488
+ ///
489
+ void GetSubBox (int nr, BoxSphere & sbox) const
490
+ {
491
+ for (int i = 0; i < D; i++)
492
+ {
493
+ if (nr & 1)
494
+ {
495
+ sbox.pmin(i) = c(i);
496
+ sbox.pmax(i) = this->pmax(i);
497
+ }
498
+ else
499
+ {
500
+ sbox.pmin(i) = this->pmin(i);
501
+ sbox.pmax(i) = c(i);
502
+ }
503
+ sbox.c(i) = 0.5 * (sbox.pmin(i) + sbox.pmax(i));
504
+ nr >>= 1;
505
+ }
506
+ sbox.diam = 0.5 * diam;
507
+ sbox.inner = 0.5 * inner;
508
+ }
509
+
510
+
511
+ ///
512
+ void CalcDiamCenter ()
513
+ {
514
+ c = Box<D>::Center ();
515
+ diam = Dist (this->pmin, this->pmax);
516
+
517
+ inner = this->pmax(0) - this->pmin(0);
518
+ for (int i = 1; i < D; i++)
519
+ if (this->pmax(i) - this->pmin(i) < inner)
520
+ inner = this->pmax(i) - this->pmin(i);
521
+ }
522
+
523
+ };
524
+
525
+
526
+ #ifdef PARALLEL_OLD
527
+ template <>
528
+ inline MPI_Datatype MyGetMPIType<Vec<3, double> > ()
529
+ {
530
+ static MPI_Datatype MPI_T = 0;
531
+ if (!MPI_T)
532
+ {
533
+ MPI_Type_contiguous ( 3, MPI_DOUBLE, &MPI_T);
534
+ MPI_Type_commit ( &MPI_T );
535
+ }
536
+ return MPI_T;
537
+ };
538
+ #endif
539
+
540
+
541
+ }
542
+
543
+
544
+ #endif