ngsolve 6.2.2406.post126.dev1__cp310-cp310-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.

Potentially problematic release.


This version of ngsolve might be problematic. Click here for more details.

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