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,168 @@
1
+ import functools
2
+
3
+ from ngsolve import (
4
+ BilinearForm,
5
+ GridFunction,
6
+ CoefficientFunction,
7
+ Region,
8
+ BND,
9
+ Preconditioner,
10
+ )
11
+ from .nonlinearsolvers import NewtonSolver
12
+ from .krylovspace import GMResSolver, LinearSolver
13
+
14
+
15
+ class Dirichlet:
16
+ def __init__(self, cf, region):
17
+ self.cf = cf
18
+ self.region = region
19
+
20
+
21
+ class Application:
22
+ def __init__(self, a: BilinearForm, gf: GridFunction):
23
+ self.a = a
24
+ self.gf = gf
25
+
26
+ def Solve(
27
+ self,
28
+ rhs,
29
+ *args,
30
+ dirichlet = None,
31
+ pre = None,
32
+ printrates: bool = False,
33
+ **kwargs,
34
+ ):
35
+ raise NotImplementedError("Solve method must be implemented in subclasses")
36
+
37
+ def __eq__(self, other):
38
+ return Equation(self, other)
39
+
40
+
41
+ class NonLinearApplication(Application):
42
+ def Solve(
43
+ self,
44
+ rhs=None,
45
+ dirichlet = None,
46
+ printing: bool = False,
47
+ **kwargs,
48
+ ):
49
+ solver_args = {}
50
+
51
+ if rhs is not None and rhs != 0:
52
+ rhs.Assemble()
53
+ solver_args["rhs"] = rhs
54
+ if "freedofs" in kwargs:
55
+ solver_args["freedofs"] = kwargs.pop("freedofs")
56
+ if "inverse" in kwargs:
57
+ solver_args["inverse"] = kwargs.pop("inverse")
58
+ solver = NewtonSolver(self.a, self.gf, **solver_args)
59
+ if dirichlet is not None:
60
+ dirichlet_gf = GridFunction(self.gf.space)
61
+ if isinstance(dirichlet, list):
62
+ for i in range(len(dirichlet)):
63
+ if dirichlet[i] is not None:
64
+ if isinstance(dirichlet[i], Dirichlet):
65
+ dirichlet_gf.components[i].Set(
66
+ dirichlet[i].cf, definedon=dirichlet[i].region
67
+ )
68
+ else:
69
+ dirichlet_gf.components[i].Set(dirichlet[i], BND)
70
+ elif isinstance(dirichlet, Dirichlet):
71
+ dirichlet_gf.Set(dirichlet.cf, definedon=dirichlet.region)
72
+ else:
73
+ dirichlet_gf.Set(dirichlet, BND)
74
+ solver.SetDirichlet(dirichlet_gf.vec)
75
+ solver.Solve(printing=printing, **kwargs)
76
+
77
+
78
+ class LinearApplication(Application):
79
+ def Assemble(self):
80
+ if not hasattr(self, "vec"):
81
+ self.vec = self.gf.vec.CreateVector()
82
+ self.a.Apply(self.gf.vec, self.vec)
83
+
84
+ def Solve(
85
+ self,
86
+ rhs,
87
+ *args,
88
+ dirichlet = None,
89
+ pre = None,
90
+ lin_solver=None,
91
+ lin_solver_args = None,
92
+ printrates: bool = False,
93
+ ):
94
+ self.a.Assemble()
95
+ for arg in args:
96
+ if isinstance(arg, Dirichlet) or isinstance(arg, CoefficientFunction):
97
+ assert dirichlet is None, "Only one dirichlet condition can be set"
98
+ dirichlet = arg
99
+ if isinstance(arg, Preconditioner):
100
+ assert pre is None, "Only one preconditioner can be set"
101
+ pre = arg
102
+ if isinstance(arg, type) and issubclass(arg, LinearSolver):
103
+ assert lin_solver is None, "Only one linear solver can be set"
104
+ lin_solver = arg
105
+ rhs.Assemble()
106
+ if dirichlet is not None:
107
+ if isinstance(dirichlet, list):
108
+ for i in range(len(dirichlet)):
109
+ if dirichlet[i] is not None:
110
+ if isinstance(dirichlet[i], Dirichlet):
111
+ self.gf.components[i].Set(
112
+ dirichlet[i].cf, definedon=dirichlet[i].region
113
+ )
114
+ else:
115
+ self.gf.components[i].Set(dirichlet[i], BND)
116
+ elif isinstance(dirichlet, Dirichlet):
117
+ self.gf.Set(dirichlet.cf, definedon=dirichlet.region)
118
+ else:
119
+ self.gf.Set(dirichlet, BND)
120
+ rhs.vec.data += -self.a.mat * self.gf.vec
121
+ else:
122
+ self.gf.vec[:] = 0.0
123
+ if self.a.condense:
124
+ rhs.vec.data += self.a.harmonic_extension_trans * rhs.vec
125
+ if pre is None and lin_solver is None:
126
+ ainv = self.a.mat.Inverse(self.a.space.FreeDofs(self.a.condense))
127
+ else:
128
+ if lin_solver is None:
129
+ lin_solver = GMResSolver
130
+ if lin_solver_args is None:
131
+ lin_solver_args = {}
132
+ if pre is None:
133
+ freedofs = self.a.space.FreeDofs(self.a.condense)
134
+ else:
135
+ freedofs = None
136
+ if "printrates" not in lin_solver_args:
137
+ lin_solver_args["printrates"] = printrates
138
+ ainv = lin_solver(
139
+ mat=self.a.mat, pre=pre, freedofs=freedofs, **lin_solver_args
140
+ )
141
+ self.gf.vec.data += ainv * rhs.vec
142
+ if self.a.condense:
143
+ self.gf.vec.data += self.a.harmonic_extension * self.gf.vec
144
+ self.gf.vec.data += self.a.inner_solve * rhs.vec
145
+
146
+
147
+ class Equation:
148
+ def __init__(self, lhs, rhs):
149
+ self.lhs = lhs
150
+ self.rhs = rhs
151
+
152
+ @functools.wraps(Application.Solve)
153
+ def Solve(self, *args, **kwargs):
154
+ self.lhs.Solve(self.rhs, *args, **kwargs)
155
+
156
+
157
+ def _create_lin_appl(self, gfu: GridFunction) -> LinearApplication:
158
+ if not isinstance(gfu, GridFunction):
159
+ raise TypeError("gfu must be a GridFunction")
160
+ return LinearApplication(self, gfu)
161
+
162
+
163
+ BilinearForm.__mul__ = _create_lin_appl
164
+
165
+
166
+ @functools.wraps(Application.Solve)
167
+ def Solve(eq: Equation, *args, **kwargs):
168
+ eq.Solve(*args, **kwargs)
@@ -0,0 +1,7 @@
1
+ from ngsolve.eigenvalues import PINVIT, LOBPCG
2
+ from ngsolve.krylovspace import CG, QMR, TFQMR, MinRes, PreconditionedRichardson, GMRes
3
+ from ngsolve.krylovspace import CGSolver
4
+ from ngsolve.nonlinearsolvers import Newton, NewtonMinimization
5
+ from ngsolve.bvp import BVP
6
+ from ngsolve.directsolvers import SuperLU
7
+
@@ -0,0 +1,112 @@
1
+ try:
2
+ import nvmath.sparse.advanced as nvs
3
+ from nvmath.internal import utils
4
+ from nvmath.internal.tensor_ifc_numpy import NumpyTensor
5
+ except ImportError:
6
+ raise ImportError("CUDSS solver requires nvmath-python module.")
7
+
8
+ import ngsolve.la as ngla
9
+ import scipy.sparse as sp
10
+ import numpy as np
11
+
12
+ from ngsolve import TimeFunction
13
+
14
+ class CudssSolver(ngla.SparseFactorizationInterface):
15
+ solver: nvs.DirectSolver = None
16
+
17
+ @TimeFunction
18
+ def Analyze(self):
19
+ if hasattr(self, "solver") and self.solver is not None:
20
+ self.solver.free()
21
+ del self.solver
22
+
23
+ csr = sp.csr_matrix(self.GetInnerMatrix().CSR())
24
+
25
+ options = make_directsolver_options()
26
+ self.extract_symmetric = (csr != csr.T).nnz == 0
27
+ if self.extract_symmetric:
28
+ csr = sp.triu(csr, format="csr")
29
+ options.sparse_system_type = nvs.DirectSolverMatrixType.SYMMETRIC
30
+ options.sparse_system_view = nvs.DirectSolverMatrixViewType.UPPER
31
+
32
+ tmp = np.empty(csr.shape[1], dtype=csr.dtype)
33
+ self.solver = nvs.DirectSolver(csr, tmp, options=options)
34
+ self.solver.plan()
35
+ self._is_first_factor_call = True
36
+
37
+ @TimeFunction
38
+ def Factor(self):
39
+ if not self._is_first_factor_call:
40
+ mat = self.GetInnerMatrix()
41
+ if self.extract_symmetric:
42
+ csr = sp.csr_matrix(mat.CSR())
43
+ csr = sp.triu(csr, format="csr")
44
+ values = csr.data
45
+ else:
46
+ values = mat.AsVector().FV().NumPy()
47
+ stream_holder = utils.get_or_create_stream(self.solver.device_id, None, self.solver.rhs_package)
48
+ values_tensor = NumpyTensor(values)
49
+ self.solver.a.values.copy_(values_tensor, stream_holder)
50
+ self.solver.factorize()
51
+ self._is_first_factor_call = False
52
+
53
+ @TimeFunction
54
+ def Solve(self, b, sol):
55
+ stream_holder = utils.get_or_create_stream(self.solver.device_id, None, self.solver.rhs_package)
56
+ self.solver.b.copy_(NumpyTensor(b.FV().NumPy()), stream_holder)
57
+ sol.FV().NumPy()[:] = self.solver.solve()
58
+
59
+ def __del__(self):
60
+ if self.solver is not None:
61
+ self.solver.free()
62
+ del self.solver
63
+
64
+
65
+ ngla.RegisterInverseType("cudss", CudssSolver)
66
+
67
+
68
+ # find cudss multithreading lib from installed distribution
69
+
70
+ import os, pathlib
71
+ from importlib import util as importlib_util
72
+ from importlib import metadata as importlib_metadata
73
+
74
+ def _from_dist_files():
75
+ # Use the wheel’s file manifest (most reliable)
76
+ candidates = []
77
+ # for dist_name in ("nvidia-cudss-cu12", "nvidia_cudss_cu12", "nvidia-cudss"): # try common variants
78
+ for dist_name in ("nvidia-cudss-cu12", "nvidia_cudss_cu12", "nvidia-cudss",
79
+ "nvidia-cudss-cu13", "nvidia_cudss_cu13"): # try common variants
80
+ try:
81
+ dist = importlib_metadata.distribution(dist_name)
82
+ except importlib_metadata.PackageNotFoundError:
83
+ continue
84
+ for f in dist.files or []:
85
+ name = f.name.lower()
86
+ # check for name ends in .so or .so.*
87
+ endwith_so = name.endswith(".so") or (".so." in name and name.rsplit(".so.", 1)[1].replace(".", "").isdigit())
88
+ if name.startswith("libcudss_mtlayer_") and endwith_so:
89
+ candidates.append(dist.locate_file(f))
90
+ if name.startswith("cudss_mtlayer_") and name.endswith(".dll"):
91
+ candidates.append(dist.locate_file(f))
92
+ if candidates:
93
+ # Prefer anything in bin/ or lib/ if multiple
94
+ candidates.sort(key=lambda p: ("bin" not in str(p) and "lib" not in str(p), str(p)))
95
+ return str(candidates[0])
96
+ return None
97
+
98
+
99
+ def make_directsolver_options():
100
+ # Helpful on Windows (Python 3.8+): ensure DLL deps can be found
101
+ if os.name == "nt":
102
+ for var in ("CUDA_PATH", "CUDSS_PATH", "CONDA_PREFIX"):
103
+ base = os.environ.get(var)
104
+ if base:
105
+ p = pathlib.Path(base) / "bin"
106
+ if p.exists():
107
+ try:
108
+ os.add_dll_directory(str(p))
109
+ except Exception:
110
+ pass
111
+ mtlib = _from_dist_files()
112
+ return nvs.DirectSolverOptions(multithreading_lib=mtlib)
@@ -0,0 +1,185 @@
1
+
2
+ import ngsolve as ngs
3
+ from typing import Type, Optional, Union, Callable
4
+
5
+ class ImplicitEuler:
6
+ def __init__(self,
7
+ equation: ngs.comp.SumOfIntegrals,
8
+ dt: Union[float, ngs.Parameter],
9
+ time: ngs.Parameter = ngs.Parameter(0),
10
+ pc_cls: Type = ngs.preconditioners.MultiGrid,
11
+ pc_args: Optional[dict] = None,
12
+ lin_solver_cls: Type = ngs.solvers.CGSolver,
13
+ lin_solver_args: Optional[dict] = None):
14
+
15
+ self.time = time
16
+ proxies = equation.GetProxies()
17
+ udts = list(filter(lambda u: u.dt_order == 1, proxies))
18
+ self.gfu_old = ngs.GridFunction(udts[0].space)
19
+ self.dt = ngs.Parameter(dt) if (isinstance(dt, float) or isinstance(dt, int)) else dt
20
+ replacements = {}
21
+ for udt in udts:
22
+ replacements[udt] = 1/self.dt * (udt.anti_dt - udt.anti_dt.ReplaceFunction(self.gfu_old))
23
+ self.bfmstar = ngs.BilinearForm(equation.Replace(replacements))
24
+ self.bfmstar.Assemble()
25
+ self.c = pc_cls(self.bfmstar, **(pc_args or {}))
26
+ self._lin_solver_cls = lin_solver_cls
27
+ self._lin_solver_args = lin_solver_args
28
+
29
+ def Integrate(self, u_start: ngs.GridFunction,
30
+ end_time: float,
31
+ start_time: Optional[float] = None,
32
+ newton_args: Optional[dict] = None,
33
+ callback: Optional[Callable] = None):
34
+ u = u_start
35
+ if start_time is not None:
36
+ self.time.Set(start_time)
37
+ while self.time.Get() < end_time * (1-1e-10):
38
+ dt = min(self.dt.Get(), end_time - self.time.Get())
39
+ self.time.Set(self.time.Get() + dt)
40
+ self.Step(u, dt=dt, newton_args=newton_args)
41
+ if callback is not None:
42
+ callback(self.time.Get(), u)
43
+ return u
44
+
45
+ def Step(self, u: ngs.GridFunction, dt: Optional[float] = None,
46
+ newton_args: Optional[dict] = None):
47
+ if dt is not None:
48
+ self.dt.Set(dt)
49
+ self.gfu_old.vec.data = u.vec
50
+ lin_solver = self._lin_solver_cls(mat=self.bfmstar.mat,
51
+ pre=self.c,
52
+ **(self._lin_solver_args or {}))
53
+ newton = ngs.nonlinearsolvers.NewtonSolver(a=self.bfmstar,
54
+ u=u,
55
+ solver=lin_solver)
56
+ newton.Solve(**(newton_args or {}))
57
+
58
+ class Newmark:
59
+ def __init__(self,
60
+ equation: ngs.comp.SumOfIntegrals,
61
+ dt: Union[float, ngs.Parameter],
62
+ time: ngs.Parameter = ngs.Parameter(0),
63
+ pc_cls: Type = ngs.preconditioners.MultiGrid,
64
+ pc_args: Optional[dict] = None,
65
+ lin_solver_cls: Type = ngs.solvers.CGSolver,
66
+ lin_solver_args: Optional[dict] = None):
67
+ self.time = time
68
+ proxies = equation.GetProxies()
69
+ udt2 = list(filter(lambda u: u.dt_order == 2, proxies))
70
+ if len(udt2) != 1:
71
+ raise ValueError("Only u.dt.dt allowed as time derivatives in newmark!")
72
+ udt2 = udt2[0]
73
+ self.gfu_old = ngs.GridFunction(udt2.space)
74
+ self.gfv_old = ngs.GridFunction(udt2.space)
75
+ self.gfa_old = ngs.GridFunction(udt2.space)
76
+ self.dt = ngs.Parameter(dt) if (isinstance(dt, float) or isinstance(dt, int)) else dt
77
+ self.bfmstar = ngs.BilinearForm(udt2.space)
78
+ u = udt2.anti_dt.anti_dt
79
+ vel_new = 2/self.dt * (u-self.gfu_old) - self.gfv_old
80
+ acc_new = 2/self.dt * (vel_new-self.gfv_old) - self.gfa_old
81
+ self.bfmstar += equation.Replace({ udt2: acc_new })
82
+ self.bfmstar.Assemble()
83
+ self.c = pc_cls(self.bfmstar, **(pc_args or {}))
84
+ self._lin_solver_cls = lin_solver_cls
85
+ self._lin_solver_args = lin_solver_args
86
+
87
+ def Integrate(self, u: ngs.GridFunction,
88
+ end_time: float,
89
+ v: Optional[ngs.GridFunction] = None,
90
+ a: Optional[ngs.GridFunction] = None,
91
+ start_time: Optional[float] = None,
92
+ newton_args: Optional[dict] = None,
93
+ callback: Optional[Callable] = None):
94
+ if start_time is not None:
95
+ self.time.Set(start_time)
96
+ if v is None:
97
+ v = ngs.GridFunction(u.space)
98
+ if a is None:
99
+ a = ngs.GridFunction(u.space)
100
+ while self.time.Get() < end_time * (1-1e-10):
101
+ dt = min(self.dt.Get(), end_time - self.time.Get())
102
+ self.time.Set(self.time.Get() + dt)
103
+ self.Step(u, v, a, dt=dt, newton_args=newton_args)
104
+ if callback is not None:
105
+ callback(self.time.Get(), u)
106
+ return u
107
+
108
+ def Step(self, u: ngs.GridFunction,
109
+ v: ngs.GridFunction,
110
+ a: ngs.GridFunction,
111
+ dt: Optional[float] = None,
112
+ newton_args: Optional[dict] = None):
113
+ if dt is not None:
114
+ self.dt.Set(dt)
115
+ self.gfu_old.vec.data = u.vec
116
+ self.gfv_old.vec.data = v.vec
117
+ self.gfa_old.vec.data = a.vec
118
+ lin_solver = self._lin_solver_cls(mat=self.bfmstar.mat,
119
+ pre=self.c,
120
+ **(self._lin_solver_args or {}))
121
+ newton = ngs.nonlinearsolvers.NewtonSolver(a=self.bfmstar,
122
+ u=u,
123
+ solver=lin_solver)
124
+ newton.Solve(**(newton_args or {}))
125
+ v.vec.data = 2/self.dt.Get() * (u.vec - self.gfu_old.vec) - self.gfv_old.vec
126
+ a.vec.data = 2/self.dt.Get() * (v.vec - self.gfv_old.vec) - self.gfa_old.vec
127
+
128
+
129
+ class CrankNicolson:
130
+ def __init__(self,
131
+ equation: ngs.comp.SumOfIntegrals,
132
+ dt: Union[float, ngs.Parameter],
133
+ time: ngs.Parameter = ngs.Parameter(0),
134
+ pc_cls: Type = ngs.preconditioners.MultiGrid,
135
+ pc_args: Optional[dict] = None,
136
+ lin_solver_cls: Type = ngs.solvers.CGSolver,
137
+ lin_solver_args: Optional[dict] = None):
138
+ self.time = time
139
+ proxies = equation.GetProxies()
140
+ fes = proxies[0].space
141
+ self.dt = ngs.Parameter(dt) if (isinstance(dt, float) or isinstance(dt, int)) else dt
142
+ self.gfu_old = ngs.GridFunction(fes)
143
+ replacements = {}
144
+ for p in proxies:
145
+ if p.dt_order == 1:
146
+ replacements[p] = 1/self.dt * (p.anti_dt - p.anti_dt.ReplaceFunction(self.gfu_old))
147
+ terms = 0.5 * equation.Replace(replacements)
148
+ for p in proxies:
149
+ if p.dt_order == 0:
150
+ replacements[p] = p.ReplaceFunction(self.gfu_old)
151
+ terms += 0.5 * equation.Replace(replacements)
152
+ self.bfmstar = ngs.BilinearForm(terms)
153
+ self.bfmstar.Assemble()
154
+ self.c = pc_cls(self.bfmstar, **(pc_args or {}))
155
+ self._lin_solver_cls = lin_solver_cls
156
+ self._lin_solver_args = lin_solver_args
157
+
158
+ def Integrate(self, u_start: ngs.GridFunction,
159
+ end_time: float,
160
+ start_time: Optional[float] = None,
161
+ newton_args: Optional[dict] = None,
162
+ callback: Optional[Callable] = None):
163
+ u = u_start
164
+ if start_time is not None:
165
+ self.time.Set(start_time)
166
+ while self.time.Get() < end_time * (1-1e-10):
167
+ dt = min(self.dt.Get(), end_time - self.time.Get())
168
+ self.time.Set(self.time.Get() + dt)
169
+ self.Step(u, dt=dt, newton_args=newton_args)
170
+ if callback is not None:
171
+ callback(self.time.Get(), u)
172
+ return u
173
+
174
+ def Step(self, u: ngs.GridFunction, dt: Optional[float] = None,
175
+ newton_args: Optional[dict] = None):
176
+ if dt is not None:
177
+ self.dt.Set(dt)
178
+ self.gfu_old.vec.data = u.vec
179
+ lin_solver = self._lin_solver_cls(mat=self.bfmstar.mat,
180
+ pre=self.c,
181
+ **(self._lin_solver_args or {}))
182
+ newton = ngs.nonlinearsolvers.NewtonSolver(a=self.bfmstar,
183
+ u=u,
184
+ solver=lin_solver)
185
+ newton.Solve(**(newton_args or {}))
@@ -0,0 +1,108 @@
1
+ import os
2
+ import pickle
3
+ from ngsolve import TaskManager
4
+
5
+ class Timing():
6
+ """
7
+ Class for timing analysis of performance critical functions. Some
8
+ classes export a C++ function as __timing__, which returns a map
9
+ of performance critical parts with their timings. The class can save
10
+ these maps, load them and compare them. It can be saved as a benchmark
11
+ to be compared against.
12
+
13
+ 2 overloaded __init__ functions:
14
+
15
+ 1. __init__(name,obj,parallel=True,serial=True)
16
+ 2. __init__(filename)
17
+
18
+ Parameters
19
+ ----------
20
+
21
+ name (str): Name for the timed class (for output formatting and
22
+ saving/loading of results)
23
+ obj (NGSolve object): Some NGSolve class which has the __timing__
24
+ functionality implemented. Currently supported classes:
25
+ FESpace
26
+ filename (str): Filename to load a previously saved Timing
27
+ parallel (bool=True): Time in parallel (using TaskManager)
28
+ serial (bool=True): Time not in parallel (not using TaskManager)
29
+
30
+ """
31
+ def __init__(self,name=None,obj=None,filename=None,parallel=True,serial=True):
32
+ assert (not name and not obj and filename) or (name and obj and not filename)
33
+ if filename:
34
+ myself = pickle.load(open(filename,"rb"))
35
+ self.timings = myself.timings
36
+ self.name = myself.name
37
+ self.timings_par = myself.timings_par
38
+ else:
39
+ if serial:
40
+ self.timings = obj.__timing__()
41
+ else:
42
+ self.timings = None
43
+ if parallel:
44
+ with TaskManager():
45
+ self.timings_par = obj.__timing__()
46
+ else:
47
+ self.timings_par = None
48
+ self.name = name
49
+
50
+ def __str__(self):
51
+ string = "Timing for " + self.name + ":"
52
+ if self.timings:
53
+ for key, value in self.timings:
54
+ string += "\n" + key + ": " + value
55
+ if self.timings_par:
56
+ for key, value in self.timings_par:
57
+ string += "\n" + key + " parallel: " + value
58
+ return string
59
+
60
+ def Save(self, folder):
61
+ """ Saves the pickled results in folder 'folder' """
62
+ if not os.path.exists(folder):
63
+ os.makedirs(folder)
64
+ if folder[-1] == "/":
65
+ pickle.dump(self,open(folder + self.name + ".dat","wb"))
66
+ else:
67
+ pickle.dump(self,open(folder + "/" + self.name + ".dat","wb"))
68
+
69
+ def CompareTo(self,folder):
70
+ """
71
+ Compares the timing with the one saved in folder 'folder' with filename
72
+ 'name.dat'.
73
+ """
74
+ try:
75
+ if folder[-1] == "/":
76
+ other = Timing(filename=folder + self.name + ".dat")
77
+ else:
78
+ other = Timing(filename=folder + "/" + self.name + ".dat")
79
+ except:
80
+ raise Exception("Other timing couldn't be loaded!")
81
+ result = []
82
+ dict_self = { key : value for key,value in self.timings }
83
+ dict_other = { key : value for key,value in other.timings }
84
+ for i, val in enumerate(self.timings):
85
+ try:
86
+ result.append((val[0], dict_self[val[0]]/dict_other[val[0]]))
87
+ except KeyError:
88
+ print("WARNING: No timing for '", val[0], "' in other file!")
89
+ dict_self_par = { key : value for key,value in self.timings_par }
90
+ dict_other_par = { key : value for key,value in other.timings_par }
91
+ for i,val in enumerate(self.timings_par):
92
+ try:
93
+ result.append((val[0]+" parallel", dict_self_par[val[0]]/dict_other_par[val[0]]))
94
+ except KeyError:
95
+ print("WARNING: No timing for '",val[0],"' with parallel in other file!")
96
+ return result
97
+
98
+ def CompareToBenchmark(self):
99
+ """ Compares the timing with the one stored as benchmark"""
100
+ return self.CompareTo("benchmark")
101
+
102
+ def SaveBenchmark(self):
103
+ """ Makes the timing the new benchmark for that object. """
104
+ self.Save("benchmark")
105
+
106
+
107
+ __all__ = ["Timing"]
108
+