ngsolve 6.2.2506.post216.dev0__cp314-cp314-manylinux_2_28_x86_64.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 (306) hide show
  1. ngsolve-6.2.2506.post216.dev0.data/data/bin/ngs_nvcc +22 -0
  2. ngsolve-6.2.2506.post216.dev0.data/data/bin/ngs_nvlink +17 -0
  3. ngsolve-6.2.2506.post216.dev0.data/data/bin/ngscxx +15 -0
  4. ngsolve-6.2.2506.post216.dev0.data/data/bin/ngsld +11 -0
  5. ngsolve-6.2.2506.post216.dev0.data/data/bin/ngsolve.tcl +648 -0
  6. ngsolve-6.2.2506.post216.dev0.data/data/bin/ngspy +2 -0
  7. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/analytic_integrals.hpp +10 -0
  8. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/arnoldi.hpp +55 -0
  9. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/bandmatrix.hpp +334 -0
  10. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/basematrix.hpp +963 -0
  11. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/basevector.hpp +1268 -0
  12. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/bdbequations.hpp +2807 -0
  13. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/bdbintegrator.hpp +1660 -0
  14. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/bem_diffops.hpp +475 -0
  15. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/bessel.hpp +1064 -0
  16. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/bilinearform.hpp +966 -0
  17. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/bla.hpp +29 -0
  18. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/blockalloc.hpp +95 -0
  19. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/blockjacobi.hpp +328 -0
  20. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/bspline.hpp +116 -0
  21. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/calcinverse.hpp +141 -0
  22. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/cg.hpp +368 -0
  23. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/chebyshev.hpp +44 -0
  24. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/cholesky.hpp +720 -0
  25. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/clapack.h +7254 -0
  26. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/code_generation.hpp +296 -0
  27. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/coefficient.hpp +2033 -0
  28. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/coefficient_impl.hpp +19 -0
  29. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/coefficient_stdmath.hpp +167 -0
  30. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/commutingAMG.hpp +106 -0
  31. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/comp.hpp +79 -0
  32. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/compatibility.hpp +41 -0
  33. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/complex_wrapper.hpp +101 -0
  34. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/compressedfespace.hpp +110 -0
  35. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/contact.hpp +239 -0
  36. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/cuda_core.hpp +216 -0
  37. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/cuda_linalg.hpp +185 -0
  38. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/cuda_ngbla.hpp +317 -0
  39. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/cuda_ngstd.hpp +414 -0
  40. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/cuda_profiler.hpp +240 -0
  41. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/diagonalmatrix.hpp +160 -0
  42. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/differentialoperator.hpp +276 -0
  43. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/diffop.hpp +1286 -0
  44. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/diffop_impl.hpp +328 -0
  45. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/diffopwithfactor.hpp +123 -0
  46. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/discontinuous.hpp +84 -0
  47. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/dump.hpp +949 -0
  48. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/ectypes.hpp +121 -0
  49. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/eigen.hpp +60 -0
  50. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/eigensystem.hpp +18 -0
  51. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/elasticity_equations.hpp +595 -0
  52. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/elementbyelement.hpp +201 -0
  53. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/elementtopology.hpp +1760 -0
  54. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/elementtransformation.hpp +339 -0
  55. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/evalfunc.hpp +405 -0
  56. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/expr.hpp +1693 -0
  57. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/facetfe.hpp +175 -0
  58. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/facetfespace.hpp +180 -0
  59. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/facethofe.hpp +111 -0
  60. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/facetsurffespace.hpp +112 -0
  61. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/fe_interfaces.hpp +32 -0
  62. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/fem.hpp +87 -0
  63. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/fesconvert.hpp +14 -0
  64. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/fespace.hpp +1454 -0
  65. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/finiteelement.hpp +286 -0
  66. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/globalinterfacespace.hpp +77 -0
  67. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/globalspace.hpp +115 -0
  68. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/gridfunction.hpp +525 -0
  69. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/h1amg.hpp +124 -0
  70. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/h1hofe.hpp +188 -0
  71. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/h1hofe_impl.hpp +1262 -0
  72. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/h1hofefo.hpp +148 -0
  73. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/h1hofefo_impl.hpp +185 -0
  74. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/h1hofespace.hpp +167 -0
  75. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/h1lofe.hpp +1240 -0
  76. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/h1lumping.hpp +41 -0
  77. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hcurl_equations.hpp +1381 -0
  78. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hcurlcurlfe.hpp +2241 -0
  79. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hcurlcurlfespace.hpp +78 -0
  80. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hcurlfe.hpp +259 -0
  81. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hcurlfe_utils.hpp +107 -0
  82. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hcurlhdiv_dshape.hpp +857 -0
  83. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hcurlhdivfes.hpp +308 -0
  84. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hcurlhofe.hpp +175 -0
  85. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hcurlhofe_impl.hpp +1871 -0
  86. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hcurlhofespace.hpp +193 -0
  87. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hcurllofe.hpp +1146 -0
  88. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hdiv_equations.hpp +880 -0
  89. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hdivdivfe.hpp +2923 -0
  90. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hdivdivsurfacespace.hpp +76 -0
  91. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hdivfe.hpp +206 -0
  92. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hdivfe_utils.hpp +717 -0
  93. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hdivfes.hpp +75 -0
  94. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hdivhofe.hpp +447 -0
  95. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hdivhofe_impl.hpp +1107 -0
  96. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hdivhofefo.hpp +229 -0
  97. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hdivhofespace.hpp +177 -0
  98. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hdivhosurfacefespace.hpp +106 -0
  99. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hdivlofe.hpp +773 -0
  100. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hidden.hpp +74 -0
  101. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/householder.hpp +181 -0
  102. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hypre_ams_precond.hpp +123 -0
  103. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/hypre_precond.hpp +73 -0
  104. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/integrator.hpp +2012 -0
  105. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/integratorcf.hpp +253 -0
  106. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/interpolate.hpp +49 -0
  107. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/intrule.hpp +2542 -0
  108. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/intrules_SauterSchwab.hpp +25 -0
  109. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/irspace.hpp +49 -0
  110. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/jacobi.hpp +153 -0
  111. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/kernels.hpp +724 -0
  112. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/l2hofe.hpp +194 -0
  113. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/l2hofe_impl.hpp +564 -0
  114. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/l2hofefo.hpp +542 -0
  115. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/l2hofespace.hpp +344 -0
  116. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/la.hpp +38 -0
  117. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/linalg_kernels.hpp +70 -0
  118. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/linearform.hpp +266 -0
  119. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/matrix.hpp +2145 -0
  120. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/memusage.hpp +41 -0
  121. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/meshaccess.hpp +1359 -0
  122. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/mgpre.hpp +204 -0
  123. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/mp_coefficient.hpp +145 -0
  124. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/mptools.hpp +2281 -0
  125. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/multigrid.hpp +42 -0
  126. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/multivector.hpp +447 -0
  127. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/mumpsinverse.hpp +187 -0
  128. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/mycomplex.hpp +361 -0
  129. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/ng_lapack.hpp +1661 -0
  130. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/ngblas.hpp +1232 -0
  131. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/ngs_defines.hpp +30 -0
  132. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/ngs_stdcpp_include.hpp +106 -0
  133. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/ngs_utils.hpp +121 -0
  134. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/ngsobject.hpp +1019 -0
  135. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/ngsstream.hpp +113 -0
  136. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/ngstd.hpp +72 -0
  137. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/nodalhofe.hpp +96 -0
  138. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/nodalhofe_impl.hpp +141 -0
  139. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/normalfacetfe.hpp +223 -0
  140. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/normalfacetfespace.hpp +98 -0
  141. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/normalfacetsurfacefespace.hpp +84 -0
  142. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/order.hpp +251 -0
  143. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/parallel_matrices.hpp +222 -0
  144. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/paralleldofs.hpp +340 -0
  145. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/parallelngs.hpp +23 -0
  146. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/parallelvector.hpp +269 -0
  147. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/pardisoinverse.hpp +200 -0
  148. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/periodic.hpp +129 -0
  149. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/plateaufespace.hpp +25 -0
  150. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/pml.hpp +275 -0
  151. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/pmltrafo.hpp +631 -0
  152. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/postproc.hpp +142 -0
  153. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/potentialtools.hpp +22 -0
  154. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/precomp.hpp +60 -0
  155. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/preconditioner.hpp +602 -0
  156. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/prolongation.hpp +380 -0
  157. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/python_comp.hpp +107 -0
  158. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/python_fem.hpp +89 -0
  159. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/python_linalg.hpp +58 -0
  160. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/python_ngstd.hpp +386 -0
  161. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/recursive_pol.hpp +4896 -0
  162. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/recursive_pol_tet.hpp +395 -0
  163. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/recursive_pol_trig.hpp +492 -0
  164. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/reorderedfespace.hpp +81 -0
  165. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/sample_sort.hpp +105 -0
  166. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/scalarfe.hpp +335 -0
  167. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/shapefunction_utils.hpp +113 -0
  168. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/simd_complex.hpp +329 -0
  169. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/smoother.hpp +253 -0
  170. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/solve.hpp +89 -0
  171. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/sparsecholesky.hpp +317 -0
  172. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/sparsefactorization_interface.hpp +159 -0
  173. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/sparsematrix.hpp +1052 -0
  174. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/sparsematrix_dyn.hpp +90 -0
  175. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/sparsematrix_impl.hpp +1055 -0
  176. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/special_matrix.hpp +463 -0
  177. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/specialelement.hpp +125 -0
  178. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/statushandler.hpp +33 -0
  179. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/stringops.hpp +12 -0
  180. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/superluinverse.hpp +136 -0
  181. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/symbolicintegrator.hpp +850 -0
  182. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/symmetricmatrix.hpp +144 -0
  183. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/tangentialfacetfe.hpp +224 -0
  184. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/tangentialfacetfespace.hpp +91 -0
  185. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/tensor.hpp +522 -0
  186. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/tensorcoefficient.hpp +446 -0
  187. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/tensorproductintegrator.hpp +113 -0
  188. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/thcurlfe.hpp +128 -0
  189. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/thcurlfe_impl.hpp +380 -0
  190. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/thdivfe.hpp +80 -0
  191. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/thdivfe_impl.hpp +492 -0
  192. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/tpdiffop.hpp +461 -0
  193. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/tpfes.hpp +133 -0
  194. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/tpintrule.hpp +224 -0
  195. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/triangular.hpp +465 -0
  196. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/tscalarfe.hpp +245 -0
  197. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/tscalarfe_impl.hpp +1029 -0
  198. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/umfpackinverse.hpp +148 -0
  199. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/unifiedvector.hpp +103 -0
  200. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/vector.hpp +1452 -0
  201. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/voxelcoefficientfunction.hpp +41 -0
  202. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/vtkoutput.hpp +198 -0
  203. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/vvector.hpp +208 -0
  204. ngsolve-6.2.2506.post216.dev0.data/data/include/netgen/webgui.hpp +92 -0
  205. ngsolve-6.2.2506.post216.dev0.data/data/lib/cmake/ngsolve/NGSolveConfig.cmake +102 -0
  206. ngsolve-6.2.2506.post216.dev0.data/data/lib/cmake/ngsolve/ngsolve-targets-release.cmake +89 -0
  207. ngsolve-6.2.2506.post216.dev0.data/data/lib/cmake/ngsolve/ngsolve-targets.cmake +180 -0
  208. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngbla.so +0 -0
  209. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngcomp.so +0 -0
  210. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngfem.so +0 -0
  211. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngla.so +0 -0
  212. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngsbem.so +0 -0
  213. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngscudalib.so +0 -0
  214. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngsolve.so +0 -0
  215. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngstd.so +0 -0
  216. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/TensorProductTools.py +210 -0
  217. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/__console.py +94 -0
  218. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/__expr.py +181 -0
  219. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/__init__.py +148 -0
  220. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/_scikit_build_core_dependencies.py +30 -0
  221. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/bvp.py +78 -0
  222. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/config/__init__.py +1 -0
  223. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/config/__main__.py +4 -0
  224. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/config/config.py +60 -0
  225. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/TensorProduct/__init__.py +0 -0
  226. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/TensorProduct/tp_dg_1d_1d.py +80 -0
  227. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/TensorProduct/tp_dg_1d_2d.py +73 -0
  228. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/TensorProduct/tp_dg_2d_1d.py +72 -0
  229. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/TensorProduct/tp_dg_2d_2d.py +66 -0
  230. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/__init__.py +0 -0
  231. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/__init__.py +0 -0
  232. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/hhj.py +44 -0
  233. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/hybrid_dg.py +53 -0
  234. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/mixed.py +30 -0
  235. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/nonlin.py +29 -0
  236. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/pickling.py +26 -0
  237. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/pml.py +31 -0
  238. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/taskmanager.py +20 -0
  239. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/tdnns.py +47 -0
  240. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/timeDG-skeleton.py +45 -0
  241. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/timeDG.py +38 -0
  242. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/timeDGlap.py +42 -0
  243. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/timeDGwave.py +61 -0
  244. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/__init__.py +0 -0
  245. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/adaptive.py +123 -0
  246. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/cmagnet.py +59 -0
  247. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/elasticity.py +76 -0
  248. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/navierstokes.py +74 -0
  249. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/poisson.ipynb +170 -0
  250. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/poisson.py +41 -0
  251. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/mpi/__init__.py +0 -0
  252. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/mpi/mpi_cmagnet.py +87 -0
  253. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/mpi/mpi_navierstokes.py +117 -0
  254. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/mpi/mpi_poisson.py +89 -0
  255. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/mpi/mpi_timeDG.py +82 -0
  256. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/directsolvers.py +14 -0
  257. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/eigenvalues.py +364 -0
  258. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/internal.py +89 -0
  259. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/krylovspace.py +1182 -0
  260. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/meshes.py +748 -0
  261. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/ngs2petsc.py +310 -0
  262. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/ngscuda.so +0 -0
  263. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/ngscxx.py +42 -0
  264. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/ngslib.so +0 -0
  265. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/nonlinearsolvers.py +203 -0
  266. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/preconditioners.py +11 -0
  267. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/solve_implementation.py +168 -0
  268. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/solvers/__init__.py +7 -0
  269. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/solvers/cudss.py +112 -0
  270. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/timestepping.py +185 -0
  271. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/timing.py +108 -0
  272. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/utils.py +167 -0
  273. ngsolve-6.2.2506.post216.dev0.data/data/lib/python3.14/site-packages/ngsolve/webgui.py +671 -0
  274. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/beam.geo +17 -0
  275. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/beam.vol +240 -0
  276. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/chip.in2d +41 -0
  277. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/chip.vol +614 -0
  278. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/coil.geo +12 -0
  279. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/coil.vol +2560 -0
  280. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/coilshield.geo +24 -0
  281. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/coilshield.vol +3179 -0
  282. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/cube.geo +19 -0
  283. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/cube.vol +1832 -0
  284. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/d10_DGdoubleglazing.pde +50 -0
  285. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/d11_chip_nitsche.pde +40 -0
  286. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/d1_square.pde +43 -0
  287. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/d2_chip.pde +35 -0
  288. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/d3_helmholtz.pde +22 -0
  289. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/d4_cube.pde +46 -0
  290. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/d5_beam.pde +74 -0
  291. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/d6_shaft.pde +73 -0
  292. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/d7_coil.pde +50 -0
  293. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/d8_coilshield.pde +49 -0
  294. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/d9_hybridDG.pde +72 -0
  295. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/doubleglazing.in2d +27 -0
  296. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/doubleglazing.vol +737 -0
  297. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/piezo2d40round4.vol.gz +0 -0
  298. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/shaft.geo +73 -0
  299. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/shaft.vol +4291 -0
  300. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/square.in2d +17 -0
  301. ngsolve-6.2.2506.post216.dev0.data/data/share/ngsolve/square.vol +149 -0
  302. ngsolve-6.2.2506.post216.dev0.dist-info/METADATA +14 -0
  303. ngsolve-6.2.2506.post216.dev0.dist-info/RECORD +306 -0
  304. ngsolve-6.2.2506.post216.dev0.dist-info/WHEEL +5 -0
  305. ngsolve-6.2.2506.post216.dev0.dist-info/licenses/LICENSE +504 -0
  306. ngsolve-6.2.2506.post216.dev0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,671 @@
1
+ import math
2
+ import numpy as np
3
+ import ngsolve as ngs
4
+ from typing import Optional
5
+ from netgen.webgui import Draw, register_draw_type, WebGLScene, encodeData
6
+
7
+ np.seterr(all='ignore', divide='ignore', invalid='ignore') # , over='ignore')
8
+
9
+ def updatePMinMax( pmat, pmima=None ):
10
+ pmima_new = [ngs.Vector(pmat[:,i], copy=False).MinMax(ignore_inf=True) for i in range(3)]
11
+
12
+ if pmima is not None:
13
+ for i in range(3):
14
+ minmax = ( min(pmima[i][0], pmima_new[i][0]), max(pmima[i][1], pmima_new[i][1]) )
15
+ pmima_new[i] = minmax
16
+
17
+ return pmima_new
18
+
19
+ def getMinMax( vals, fmin=None, fmax=None ):
20
+ funcmin,funcmax = ngs.Vector(vals, copy=False).MinMax(True)
21
+ if fmin is not None:
22
+ funcmin = min(funcmin, fmin)
23
+ if fmax is not None:
24
+ funcmax = max(funcmax, fmax)
25
+ return funcmin, funcmax
26
+
27
+
28
+ def _make_trig(N, x0=0, y0=0, dx=1, dy=1):
29
+ return [(x0+i*dx/N,y0+j*dy/N) for j in range(N+1) for i in range(N+1-j)]
30
+
31
+ def _make_quad(N, x0=0, y0=0, dx=1, dy=1):
32
+ return [(x0+i*dx/N,y0+j*dy/N) for j in range(N+1) for i in range(N+1-j)] + [(x0+dx-i*dx/N,1-(y0+j*dy/N)) for j in range(N+1) for i in range(N+1-j)]
33
+
34
+ _intrules = {}
35
+ def get_intrules(dim:int, order: int):
36
+ if (dim,order) in _intrules:
37
+ return _intrules[(dim, order)]
38
+
39
+ rules = {}
40
+ if dim == 2:
41
+ if order > 3:
42
+ n = (order+2)//3
43
+
44
+ trig_points = []
45
+ h = 1/n
46
+ for i in range(n):
47
+ for j in range(n-i):
48
+ trig_points += _make_trig(3, i*h, j*h, h, h)
49
+
50
+ for i in range(n-1):
51
+ for j in range(n-i-1):
52
+ trig_points += _make_trig(3, (i+1)*h, (j+1)*h, -h, -h)
53
+
54
+ quad_points = []
55
+ for i in range(n):
56
+ for j in range(n):
57
+ quad_points += _make_quad(3, i*h, j*h, h, h)
58
+
59
+ else:
60
+ trig_points = _make_trig(order)
61
+ quad_points = _make_quad(order)
62
+
63
+ rules[ngs.ET.TRIG] = ngs.IntegrationRule(trig_points, [0,]*len(trig_points))
64
+ rules[ngs.ET.QUAD] = ngs.IntegrationRule(quad_points, [0,]*len(quad_points))
65
+
66
+ elif dim == 3:
67
+ if order > 2:
68
+ raise RuntimeError("only order 1 and 2 supported in 3D")
69
+
70
+ p1_tets = {}
71
+ p1_tets[ngs.ET.TET] = [[(1,0,0), (0,1,0), (0,0,1), (0,0,0)]]
72
+ p1_tets[ngs.ET.PYRAMID]=[[(1,0,0), (0,1,0), (0,0,1), (0,0,0)],
73
+ [(1,0,0), (0,1,0), (0,0,1), (1,1,0)]]
74
+ p1_tets[ngs.ET.PRISM] = [[(1,0,0), (0,1,0), (0,0,1), (0,0,0)],
75
+ [(0,0,1), (0,1,0), (0,1,1), (1,0,0)],
76
+ [(1,0,1), (0,1,1), (1,0,0), (0,0,1)]]
77
+ p1_tets[ngs.ET.HEX] = [[(1,0,0), (0,1,0), (0,0,1), (0,0,0)],
78
+ [(0,1,1), (1,1,1), (1,1,0), (1,0,1)],
79
+ [(1,0,1), (0,1,1), (1,0,0), (0,0,1)],
80
+ [(0,1,1), (1,1,0), (0,1,0), (1,0,0)],
81
+ [(0,0,1), (0,1,0), (0,1,1), (1,0,0)],
82
+ [(1,0,1), (1,1,0), (0,1,1), (1,0,0)]]
83
+
84
+ def makeP2Tets( p1_tets ):
85
+ midpoint = lambda p0, p1: tuple((0.5*(p0[i]+p1[i]) for i in range(3)))
86
+ p2_tets = []
87
+ for tet in p1_tets:
88
+ tet.append( midpoint(tet[0], tet[3]) )
89
+ tet.append( midpoint(tet[1], tet[3]) )
90
+ tet.append( midpoint(tet[2], tet[3]) )
91
+ tet.append( midpoint(tet[0], tet[1]) )
92
+ tet.append( midpoint(tet[0], tet[2]) )
93
+ tet.append( midpoint(tet[1], tet[2]) )
94
+ p2_tets.append(tet)
95
+ return p2_tets
96
+ for eltype in p1_tets:
97
+ points = p1_tets[eltype]
98
+ if order == 2:
99
+ points = makeP2Tets( points )
100
+ rules[eltype] = ngs.IntegrationRule( sum(points, []) )
101
+ else:
102
+ raise RuntimeError(f"invalid dimension: {dim}")
103
+ _intrules[(dim, order)] = rules
104
+ return rules
105
+
106
+ @register_draw_type(ngs.Mesh, ngs.CoefficientFunction, ngs.GridFunction, ngs.comp.GridFunctionCoefficientFunction)
107
+ def GetData(obj, args, kwargs):
108
+ regions = {}
109
+
110
+ cf = None
111
+ if isinstance(obj, ngs.GridFunction):
112
+ cf = obj
113
+ mesh = obj.space.mesh
114
+ if len(args) and isinstance(args[0], (ngs.Region, ngs.Mesh)):
115
+ mesh = args[0]
116
+ elif isinstance(obj, ngs.CoefficientFunction):
117
+ cf = obj
118
+ if len(args)<1:
119
+ raise RuntimeError("Cannot draw CoefficientFunction without mesh")
120
+ mesh = args[0]
121
+ else:
122
+ # assume, mesh is given
123
+ mesh = obj
124
+
125
+ # got one region as input: draw only on region and region.Boundaries()
126
+ if isinstance(mesh, ngs.comp.Region):
127
+ region = mesh
128
+ mesh = region.mesh
129
+ regions[region.VB()] = region
130
+ while region.VB() != ngs.BBND:
131
+ bnd_reg = region.Boundaries()
132
+ regions[bnd_reg.VB()] = bnd_reg
133
+ region = bnd_reg
134
+
135
+ # draw exactly on given list of regions (no regions.Boundaries())
136
+ elif isinstance(mesh, list):
137
+ regions = {}
138
+ list_ = mesh
139
+ mesh = None
140
+ for reg in list_:
141
+ if isinstance(reg, ngs.comp.Region):
142
+ mesh = reg.mesh
143
+ regions[reg.VB()] = reg
144
+ if isinstance(reg, ngs.comp.VorB):
145
+ regions[reg] = reg
146
+ if mesh is None:
147
+ raise RuntimeError("missing mesh/region")
148
+
149
+ # draw on whole mesh
150
+ elif isinstance(mesh, ngs.comp.Mesh):
151
+ for vb in [ngs.VOL, ngs.BND, ngs.BBND]:
152
+ regions[vb] = vb
153
+ else:
154
+ raise RuntimeError("invalid input mesh")
155
+
156
+ # fill with empty regions
157
+ for vb in [ngs.VOL, ngs.BND, ngs.BBND]:
158
+ if vb not in regions:
159
+ regions[vb] = mesh.Region(vb, None)
160
+
161
+ if 'intpoints' not in kwargs:
162
+ kwargs['intpoints'] = None
163
+ d = BuildRenderData(mesh, cf, order=kwargs['order'], draw_surf=kwargs['draw_surf'], draw_vol=kwargs['draw_vol'], intpoints=kwargs['intpoints'], deformation=kwargs['deformation'], regions=regions, objects=kwargs['objects'], nodal_p1=kwargs['nodal_p1'], settings=kwargs['settings'])
164
+
165
+ if isinstance(cf, ngs.GridFunction) and len(cf.vecs)>1:
166
+ # multidim gridfunction - generate data for each component
167
+ gf = ngs.GridFunction(cf.space)
168
+ dim = len(cf.vecs)
169
+
170
+ md_deformation = False;
171
+ if 'deformation' in kwargs:
172
+ deformation = kwargs['deformation']
173
+ if isinstance(deformation, ngs.GridFunction) and len(deformation.vecs)==dim:
174
+ md_deformation = True
175
+ deformation_gf = ngs.GridFunction(deformation.space)
176
+ else:
177
+ deformation_gf = deformation
178
+
179
+ data = []
180
+ for i in range(1,dim):
181
+ gf.vec.data = cf.vecs[i]
182
+
183
+ if md_deformation:
184
+ deformation_gf.vec.data = deformation.vecs[i]
185
+
186
+ data.append(BuildRenderData(mesh, gf, order=kwargs['order'], draw_surf=kwargs['draw_surf'], draw_vol=kwargs['draw_vol'], intpoints=kwargs['intpoints'], deformation=deformation_gf, regions=regions, objects=kwargs['objects'], nodal_p1=kwargs['nodal_p1'], settings=kwargs['settings']))
187
+ d['multidim_data'] = data
188
+ d['multidim_interpolate'] = kwargs.get('interpolate_multidim', False)
189
+ d['multidim_animate'] = kwargs.get('animate', False)
190
+
191
+ d['deformation_scale'] = kwargs.get('scale', 1.0)
192
+
193
+ if 'is_complex' in d and d['is_complex'] or 'animate_complex' in kwargs:
194
+ s = d['gui_settings']
195
+ if 'Complex' not in s:
196
+ s['Complex'] = dict(phase= 0.0, speed=1, animate=False)
197
+ s['Complex']['animate'] = kwargs.get('animate_complex', False)
198
+
199
+ if 'colors' in kwargs:
200
+ d['colors'] = kwargs['colors']
201
+
202
+
203
+ return d
204
+
205
+
206
+ bezier_trig_trafos = { } # cache trafos for different orders
207
+
208
+ timer = ngs.Timer("BuildRenderData")
209
+ timerp1 = ngs.Timer("GetNodalP1Data")
210
+ timer2map = ngs.Timer("edges map")
211
+ timer2 = ngs.Timer("edges")
212
+ timermult = ngs.Timer("timer2 - mult")
213
+ timer3 = ngs.Timer("els")
214
+ timer3Bvals = ngs.Timer("timer3, bezier")
215
+ timer3minmax = ngs.Timer("els minmax")
216
+ timer2list = ngs.Timer("timer2 - make list")
217
+ timer3list = ngs.Timer("timer3 - make list")
218
+ timer4 = ngs.Timer("func")
219
+
220
+ timer3multnumpy = ngs.Timer("timer3 mul numpy")
221
+ timer3multngs = ngs.Timer("timer3 mul ngs")
222
+
223
+ def GetNodalP1Data(encode, mesh, cf, cf2=None):
224
+ if cf2 is not None:
225
+ cf = ngs.CF((cf,cf2))
226
+ timerp1.Start()
227
+ fes = ngs.NodalFESpace(mesh, order=1)**cf.dim
228
+ gfu = ngs.GridFunction(fes)
229
+ gfu.Interpolate(cf, ngs.BND)
230
+ function_values = gfu.vec.FV().NumPy()
231
+ nvert = mesh.nv
232
+ function_values = function_values.reshape(-1, nvert).transpose().flatten()
233
+ fmin, fmax = ngs.Vector(function_values, copy=False).MinMax(True)
234
+ vertices = np.array(mesh.ngmesh._getVertices(), dtype=np.float32)
235
+
236
+ pmat = vertices.reshape(-1, 3)
237
+ pmin = pmat.min(axis=0)
238
+ pmax = pmat.max(axis=0)
239
+ mesh_center = list(np.array(0.5*(pmin+pmax), dtype=np.float64))
240
+ mesh_radius = float(np.linalg.norm(pmax-pmin)/2)
241
+
242
+ segments = mesh.ngmesh._getSegments()
243
+
244
+ d = {}
245
+ d['vertices'] = encode(vertices, dtype=np.float32)
246
+ d['nodal_function_values'] = encode(function_values, dtype=np.float32)
247
+ d['trigs'] = encode(np.array(mesh.ngmesh._get2dElementsAsTriangles(), dtype=np.int32))
248
+ d['tets'] = encode(np.array(mesh.ngmesh._get3dElementsAsTets(), dtype=np.int32))
249
+ d['segs'] = encode(np.array(segments, dtype=np.int32))
250
+ d['mesh_center'] = mesh_center
251
+ d['mesh_radius'] = mesh_radius
252
+ d['funcmin'] = fmin
253
+ d['funcmax'] = fmax
254
+
255
+ timerp1.Stop()
256
+ return d
257
+
258
+
259
+ def BuildRenderData(mesh, func, order=2, draw_surf=True, draw_vol=True, intpoints=None, deformation=None, regions=None, objects=[], nodal_p1=False, encoding='b64', settings={}):
260
+ timer.Start()
261
+
262
+ import inspect
263
+ # stay backwards-compatible with older verisons of webgui_jupyter_widgets
264
+ if 'encoding' in inspect.signature(encodeData).parameters:
265
+ def encode(*args, **kwargs):
266
+ return encodeData(*args, **kwargs, encoding=encoding)
267
+ else:
268
+ def encode(*args, **kwargs):
269
+ return encodeData(*args, **kwargs)
270
+
271
+ if isinstance(deformation, ngs.CoefficientFunction) and deformation.dim==2:
272
+ deformation = ngs.CoefficientFunction((deformation, 0.0))
273
+
274
+ #TODO: handle quads and non-smooth functions
275
+ #TODO: subdivision
276
+
277
+ d = {}
278
+ d['gui_settings'] = settings
279
+ d['ngsolve_version'] = ngs.__version__
280
+ d['mesh_dim'] = mesh.dim
281
+ # order = order or mesh.GetCurveOrder()
282
+ if (not func) and (mesh.GetCurveOrder()==1) and (mesh.nv==len(mesh.ngmesh.Points())):
283
+ order=1
284
+ order2d = min(order, 3)
285
+ order3d = min(order, 2)
286
+ d['order2d'] = order2d
287
+ d['order3d'] = order3d
288
+
289
+ d['draw_vol'] = func and mesh.dim==3 and draw_vol and mesh.ne>0
290
+ d['draw_surf'] = func and draw_surf
291
+
292
+ d['objects'] = []
293
+ for obj in objects:
294
+ if isinstance(obj, dict):
295
+ d['objects'].append(obj)
296
+ else:
297
+ d['objects'].append(obj._GetWebguiData())
298
+
299
+ if isinstance(deformation, bool):
300
+ d['deformation'] = deformation
301
+ deformation = None
302
+
303
+ func0 = None
304
+ func2 = None
305
+ if func and func.is_complex:
306
+ d['is_complex'] = True
307
+ func1 = func[0].real
308
+ func2 = ngs.CoefficientFunction( (func[0].imag, 0.0) )
309
+ d['funcdim'] = 2
310
+ elif func and func.dim>1:
311
+ func1 = func[0]
312
+ func2 = ngs.CoefficientFunction( tuple(func[i] if i<func.dim else 0.0 for i in range(1,3)) ) # max 3-dimensional functions
313
+ d['funcdim'] = func.dim
314
+ elif func:
315
+ func1 = func
316
+ d['funcdim'] = 1
317
+ else:
318
+ # no function at all -> we are just drawing a mesh, eval mesh element index instead
319
+ mats = mesh.GetMaterials()
320
+ bnds = mesh.GetBoundaries()
321
+ bbnds = mesh.GetBBoundaries()
322
+ nmats = len(mesh.GetMaterials())
323
+ nbnds = len(mesh.GetBoundaries())
324
+ n = max(nmats, nbnds, len(bbnds))
325
+ func1 = ngs.CoefficientFunction(list(range(n)))
326
+ n_regions = [0, 0, nmats, nbnds]
327
+ d['mesh_regions_2d'] = n_regions[mesh.dim]
328
+ d['mesh_regions_3d'] = nmats if mesh.dim==3 else 0
329
+ d['names'] = bnds if mesh.dim==3 else mats
330
+ d['edge_names'] = bbnds if mesh.dim==3 else bnds
331
+ d['funcdim'] = 0
332
+ fds = mesh.ngmesh.FaceDescriptors()
333
+ d["colors"] = [fd.color + (fd.transparency,) for fd in fds]
334
+
335
+ func0 = func1
336
+
337
+ if func0 is None:
338
+ func0 = ngs.CoefficientFunction( 0.0 )
339
+
340
+ d['show_wireframe'] = order2d>0
341
+ d['show_mesh'] = order2d>0
342
+
343
+ if order==1 and nodal_p1:
344
+ d.update(GetNodalP1Data(encode, mesh, func1, func2))
345
+ if '_override_data' in settings:
346
+ d.update(settings['_override_data'])
347
+ timer.Stop()
348
+ return d
349
+
350
+ func1 = ngs.CoefficientFunction( (ngs.x, ngs.y, ngs.z, func1 ) )
351
+ func0 = ngs.CoefficientFunction( (ngs.x, ngs.y, ngs.z, func0 ) )
352
+
353
+ if deformation is not None:
354
+ func1 += ngs.CoefficientFunction((deformation, 0.0))
355
+ func0 += ngs.CoefficientFunction((deformation, 0.0))
356
+
357
+ if order2d>0:
358
+ og = order2d
359
+ timer2.Start()
360
+
361
+ timer3Bvals.Start()
362
+
363
+ # transform point-values to Bernsteinbasis
364
+ def Binomial(n,i): return math.factorial(n) / math.factorial(i) / math.factorial(n-i)
365
+ def Bernstein(x, i, n): return Binomial(n,i) * x**i*(1-x)**(n-i)
366
+ Bvals = ngs.Matrix(og+1,og+1)
367
+ for i in range(og+1):
368
+ for j in range(og+1):
369
+ Bvals[i,j] = Bernstein(i/og, j, og)
370
+ iBvals = Bvals.I
371
+ timer3Bvals.Stop()
372
+ # print (Bvals)
373
+ # print (iBvals)
374
+
375
+
376
+ Bezier_points = []
377
+
378
+ # TODO: Quads
379
+ ipts = [(i/og,0) for i in range(og+1)] + [(0, i/og) for i in range(og+1)] + [(i/og,1.0-i/og) for i in range(og+1)]
380
+ ir_trig = ngs.IntegrationRule(ipts, [0,]*len(ipts))
381
+ ipts = [(i/og,0) for i in range(og+1)] + [(0, i/og) for i in range(og+1)] + [(i/og,1.0) for i in range(og+1)] + [(1.0, i/og) for i in range(og+1)]
382
+ ir_quad = ngs.IntegrationRule(ipts, [0,]*len(ipts))
383
+
384
+ vb = [ngs.VOL, ngs.BND][mesh.dim-2]
385
+ reg = regions[vb]
386
+ cf = func1 if draw_surf else func0
387
+ timer2map.Start()
388
+ pts = mesh.MapToAllElements({ngs.ET.TRIG: ir_trig, ngs.ET.QUAD: ir_quad}, reg)
389
+ timer2map.Stop()
390
+ pmat = cf(pts)
391
+
392
+ pmima = updatePMinMax(pmat)
393
+
394
+ timermult.Start()
395
+ pmat = pmat.reshape(-1, og+1, 4)
396
+ if False:
397
+ BezierPnts = np.tensordot(iBvals.NumPy(), pmat, axes=(1,1))
398
+ else:
399
+ BezierPnts = np.zeros( (og+1, pmat.shape[0], 4) )
400
+ for i in range(4):
401
+ ngsmat = ngs.Matrix(pmat[:,:,i].transpose())
402
+ BezierPnts[:,:,i] = iBvals * ngsmat
403
+ timermult.Stop()
404
+
405
+ timer2list.Start()
406
+ for i in range(og+1):
407
+ Bezier_points.append(encode(BezierPnts[i], dtype=np.float32))
408
+ timer2list.Stop()
409
+
410
+ if func2 and draw_surf:
411
+ pmat = func2(pts)
412
+ pmat = pmat.reshape(-1, og+1, 2)
413
+ timermult.Start()
414
+ BezierPnts = np.tensordot(iBvals.NumPy(), pmat, axes=(1,1))
415
+ timermult.Stop()
416
+ timer2list.Start()
417
+ for i in range(og+1):
418
+ Bezier_points.append(encode(BezierPnts[i], dtype=np.float32))
419
+ timer2list.Stop()
420
+
421
+ d['Bezier_points'] = Bezier_points
422
+
423
+ ipts = [(i/og,0) for i in range(og+1)]
424
+ ir_seg = ngs.IntegrationRule(ipts, [0,]*len(ipts))
425
+ vb = [ngs.VOL, ngs.BND, ngs.BBND][mesh.dim-1]
426
+ reg = regions[vb]
427
+ pts = mesh.MapToAllElements(ir_seg, reg)
428
+ pmat = func0(pts)
429
+ pmima = updatePMinMax(pmat)
430
+ pmat = pmat.reshape(-1, og+1, 4)
431
+ edge_data = np.tensordot(iBvals.NumPy(), pmat, axes=(1,1))
432
+ edges = []
433
+ for i in range(og+1):
434
+ edges.append(encode(edge_data[i], dtype=np.float32))
435
+ d['edges'] = edges
436
+
437
+ timer2.Stop()
438
+ timer3.Start()
439
+
440
+ ndtrig = int((og+1)*(og+2)/2)
441
+
442
+ if og in bezier_trig_trafos.keys():
443
+ iBvals_trig = bezier_trig_trafos[og]
444
+ else:
445
+ def BernsteinTrig(x, y, i, j, n):
446
+ return math.factorial(n)/math.factorial(i)/math.factorial(j)/math.factorial(n-i-j) \
447
+ * x**i*y**j*(1-x-y)**(n-i-j)
448
+ Bvals = ngs.Matrix(ndtrig, ndtrig)
449
+ ii = 0
450
+ for ix in range(og+1):
451
+ for iy in range(og+1-ix):
452
+ jj = 0
453
+ for jx in range(og+1):
454
+ for jy in range(og+1-jx):
455
+ Bvals[ii,jj] = BernsteinTrig(ix/og, iy/og, jx, jy, og)
456
+ jj += 1
457
+ ii += 1
458
+ iBvals_trig = Bvals.I
459
+ bezier_trig_trafos[og] = iBvals_trig
460
+
461
+
462
+ # Bezier_points = [ [] for i in range(ndtrig) ]
463
+ Bezier_points = []
464
+
465
+ vb = [ngs.VOL, ngs.BND][mesh.dim-2]
466
+ reg = regions[vb]
467
+ if intpoints is not None:
468
+ pts = mesh.MapToAllElements(intpoints, reg)
469
+ else:
470
+ pts = mesh.MapToAllElements(get_intrules(2, order), reg)
471
+
472
+ pmat = ngs.CoefficientFunction( func1 if draw_surf else func0 ) (pts)
473
+
474
+
475
+ n_points_per_trig = len(get_intrules(2, order2d)[ngs.ET.TRIG])
476
+
477
+ timer3minmax.Start()
478
+ pmima = updatePMinMax(pmat, pmima)
479
+ funcmin,funcmax = getMinMax(pmat[:,3])
480
+ timer3minmax.Stop()
481
+
482
+ pmin, pmax = [ngs.Vector(p) for p in zip(*pmima)]
483
+ mesh_center = 0.5*(pmin+pmax)
484
+ mesh_radius = float(np.linalg.norm(pmax-pmin)/2)
485
+
486
+ pmat = pmat.reshape(-1, n_points_per_trig, 4)
487
+
488
+ if False:
489
+ timer3multnumpy.Start()
490
+ BezierPnts = np.tensordot(iBvals_trig.NumPy(), pmat, axes=(1,1))
491
+ timer3multnumpy.Stop()
492
+ else:
493
+ timer3multngs.Start()
494
+ BezierPnts = np.zeros( (n_points_per_trig, pmat.shape[0], 4) )
495
+ for i in range(4):
496
+ ngsmat = ngs.Matrix(pmat[:,:,i].transpose())
497
+ BezierPnts[:,:,i] = iBvals_trig * ngsmat
498
+ timer3multngs.Stop()
499
+
500
+ timer3list.Start()
501
+ for i in range(ndtrig):
502
+ Bezier_points.append(encode(BezierPnts[i], dtype=np.float32))
503
+ timer3list.Stop()
504
+
505
+ if func2 and draw_surf:
506
+ pmat = ngs.CoefficientFunction( func2 ) (pts)
507
+
508
+ pmat = pmat.reshape(-1, n_points_per_trig, 2)
509
+
510
+ funcmin, funcmax = getMinMax(pmat.flatten(), funcmin, funcmax)
511
+ BezierPnts = np.tensordot(iBvals_trig.NumPy(), pmat, axes=(1,1))
512
+ if og==1:
513
+ for i in range(ndtrig):
514
+ Bezier_points.append(encode(BezierPnts[i], dtype=np.float32))
515
+ else:
516
+ BezierPnts = BezierPnts.transpose((1,0,2)).reshape(-1, n_points_per_trig//2, 4).transpose((1,0,2))
517
+
518
+ for i in range(ndtrig//2):
519
+ Bezier_points.append(encode(BezierPnts[i], dtype=np.float32))
520
+
521
+ d['Bezier_trig_points'] = Bezier_points
522
+ d['mesh_center'] = list(mesh_center)
523
+ d['mesh_radius'] = mesh_radius
524
+ timer3.Stop()
525
+
526
+
527
+
528
+ timer4.Start()
529
+
530
+ if d['draw_vol']:
531
+ p0 = []
532
+ p1 = []
533
+ p2 = []
534
+ p3 = []
535
+ values = []
536
+ tets = []
537
+
538
+ intrules = get_intrules(3, order3d)
539
+
540
+ if intpoints is not None:
541
+ pts = mesh.MapToAllElements(intpoints, regions[ngs.VOL])
542
+ else:
543
+ pts = mesh.MapToAllElements(get_intrules(3, order3d), regions[ngs.VOL])
544
+
545
+ pmat = func1(pts)
546
+
547
+ np_per_tet = len(intrules[ngs.ET.TET])
548
+
549
+ ne = mesh.GetNE(ngs.VOL)
550
+ pmat = pmat.reshape(-1, np_per_tet, 4)
551
+
552
+ funcmin, funcmax = getMinMax(pmat[:,:,3].flatten(), funcmin, funcmax)
553
+ points3d = []
554
+ for i in range(np_per_tet):
555
+ points3d.append(encode(pmat[:,i,:], dtype=np.float32))
556
+
557
+ if func2:
558
+ pmat = func2(pts).reshape(-1, np_per_tet//2, 4)
559
+ funcmin, funcmax = getMinMax(pmat.flatten(), funcmin, funcmax)
560
+ for i in range(np_per_tet//2):
561
+ points3d.append(encode(pmat[:,i,:], dtype=np.float32))
562
+ d['points3d'] = points3d
563
+ if func:
564
+ d['funcmin'] = funcmin
565
+ d['funcmax'] = funcmax
566
+ if '_override_data' in settings:
567
+ d.update(settings['_override_data'])
568
+ timer4.Stop()
569
+ timer.Stop()
570
+ return d
571
+
572
+ def AddFieldLines(data: dict, add_data: dict):
573
+ if "num_points" not in data:
574
+ data["num_points"] = [len(data["value"])]
575
+
576
+ data["num_points"].append(len(add_data["value"]))
577
+ data["pstart"] += add_data["pstart"]
578
+ data["pend"] += add_data["pend"]
579
+ data["value"] += add_data["value"]
580
+
581
+ return data
582
+
583
+ def FieldLines(
584
+ function: ngs.CoefficientFunction,
585
+ start_region: Optional[ngs.Region] = None,
586
+ mesh: Optional[ngs.Mesh] = None,
587
+ start_points: Optional[list] = None,
588
+ num_lines: int = 100,
589
+ length: float = 0.5,
590
+ name: str = "fieldlines",
591
+ max_points_per_line: float = 500,
592
+ thickness: float = 0.0015,
593
+ tolerance: float = 0.0005,
594
+ direction: int = 0,
595
+ ):
596
+ assert start_region or (mesh and start_points), "Either start_region or mesh and start_points must be provided"
597
+ rules = {}
598
+ # use 5th order integration rule for all element types as potential starting points
599
+ for et in [
600
+ ngs.ET.TRIG,
601
+ ngs.ET.QUAD,
602
+ ngs.ET.TET,
603
+ ngs.ET.HEX,
604
+ ngs.ET.PRISM,
605
+ ngs.ET.PYRAMID,
606
+ ngs.ET.SEGM
607
+ ]:
608
+ rules[et] = ngs.IntegrationRule(et, 5)
609
+
610
+ if function.is_complex:
611
+ num_lines = num_lines // 10
612
+
613
+ if start_points is not None:
614
+ all_mapped_points = mesh(start_points[:,0], start_points[:,1], start_points[:,2])
615
+ else:
616
+ mesh = start_region.mesh
617
+ all_mapped_points = mesh.MapToAllElements(rules, start_region)
618
+
619
+ num_angles = 100 if function.is_complex else 1
620
+ for a in range(num_angles):
621
+ phi = 2 * np.pi * a / num_angles
622
+
623
+ if function.is_complex:
624
+ cf = ngs.cos(phi) * function.real - ngs.sin(phi) * function.imag
625
+ else:
626
+ cf = function
627
+
628
+ # randomize starting points to choose approx num_lines, higher function values increase selection probability
629
+ values = ngs.Norm(cf)(all_mapped_points).flatten()
630
+ sum_values = sum(values)
631
+
632
+ rand_values = np.random.rand(len(values))
633
+ selection = np.where(values > sum_values/num_lines * rand_values)
634
+ mapped_points = all_mapped_points[selection]
635
+
636
+ # generate raw staring point coordinates and call low_level interface routing
637
+ points = ngs.CF((ngs.x, ngs.y, ngs.z))(mapped_points)
638
+
639
+ data = cf._BuildFieldLines(
640
+ mesh,
641
+ points,
642
+ len(points),
643
+ length,
644
+ max_points_per_line,
645
+ thickness,
646
+ tolerance,
647
+ direction,
648
+ False,
649
+ )
650
+ if a == 0:
651
+ global_data = data
652
+ global_data["min"] = min(values)
653
+ global_data["max"] = max(values)
654
+ if function.is_complex:
655
+ global_data["max_phase_dist"] = np.pi / 180 * 15
656
+ global_data["phase"] = [phi]
657
+ global_data["offset"] = [0]
658
+ else:
659
+ global_data["max_phase_dist"] = 0.5
660
+ else:
661
+ AddFieldLines(global_data, data)
662
+ global_data["phase"].append(phi)
663
+ global_data["min"] = min(global_data["min"], min(values))
664
+ global_data["max"] = max(global_data["max"], max(values))
665
+
666
+ global_data["fade_dist"] = 0.0
667
+ global_data["name"] = name
668
+ return global_data
669
+
670
+
671
+ __all__ = ["Draw", "FieldLines", "AddFieldLines"]
@@ -0,0 +1,17 @@
1
+ algebraic3d
2
+
3
+ # the first plane gets boundary condition nr 1:
4
+
5
+ solid p1 = plane (0, 0, 0; -1, 0, 0) -bc=1;
6
+
7
+ # and the other faces b.c. number = 2:
8
+ solid beam = plane (0, 0, 0; 0, 0, -1)
9
+ and plane (0, 0, 0; 0, -1, 0)
10
+ and p1
11
+ and plane (10, 2, 1; 0, 0, 1)
12
+ and plane (10, 2, 1; 0, 1, 0)
13
+ and plane (10, 2, 1; 1, 0, 0) -bc=2 -maxh=2;
14
+
15
+ tlo beam;
16
+
17
+