ngsolve 6.2.2506.post75.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.

Potentially problematic release.


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

Files changed (303) hide show
  1. ngsolve-6.2.2506.post75.dev0.data/data/bin/ngs_nvcc +14 -0
  2. ngsolve-6.2.2506.post75.dev0.data/data/bin/ngs_nvlink +14 -0
  3. ngsolve-6.2.2506.post75.dev0.data/data/bin/ngscxx +15 -0
  4. ngsolve-6.2.2506.post75.dev0.data/data/bin/ngsld +11 -0
  5. ngsolve-6.2.2506.post75.dev0.data/data/bin/ngsolve.tcl +648 -0
  6. ngsolve-6.2.2506.post75.dev0.data/data/bin/ngspy +2 -0
  7. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/analytic_integrals.hpp +10 -0
  8. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/arnoldi.hpp +55 -0
  9. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/bandmatrix.hpp +334 -0
  10. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/basematrix.hpp +957 -0
  11. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/basevector.hpp +1268 -0
  12. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/bdbequations.hpp +2805 -0
  13. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/bdbintegrator.hpp +1660 -0
  14. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/bem_diffops.hpp +475 -0
  15. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/bessel.hpp +1064 -0
  16. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/bilinearform.hpp +963 -0
  17. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/bla.hpp +29 -0
  18. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/blockalloc.hpp +95 -0
  19. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/blockjacobi.hpp +328 -0
  20. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/bspline.hpp +116 -0
  21. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/calcinverse.hpp +141 -0
  22. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/cg.hpp +368 -0
  23. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/chebyshev.hpp +44 -0
  24. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/cholesky.hpp +720 -0
  25. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/clapack.h +7254 -0
  26. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/code_generation.hpp +296 -0
  27. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/coefficient.hpp +2033 -0
  28. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/coefficient_impl.hpp +19 -0
  29. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/coefficient_stdmath.hpp +167 -0
  30. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/commutingAMG.hpp +106 -0
  31. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/comp.hpp +79 -0
  32. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/compatibility.hpp +41 -0
  33. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/complex_wrapper.hpp +73 -0
  34. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/compressedfespace.hpp +110 -0
  35. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/contact.hpp +235 -0
  36. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/cuda_linalg.hpp +175 -0
  37. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/cuda_ngbla.hpp +226 -0
  38. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/cuda_ngstd.hpp +527 -0
  39. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/cuda_profiler.hpp +240 -0
  40. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/diagonalmatrix.hpp +154 -0
  41. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/differentialoperator.hpp +276 -0
  42. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/diffop.hpp +1286 -0
  43. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/diffop_impl.hpp +328 -0
  44. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/diffopwithfactor.hpp +123 -0
  45. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/discontinuous.hpp +84 -0
  46. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/dump.hpp +949 -0
  47. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/ectypes.hpp +121 -0
  48. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/eigen.hpp +60 -0
  49. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/eigensystem.hpp +18 -0
  50. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/elasticity_equations.hpp +595 -0
  51. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/elementbyelement.hpp +195 -0
  52. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/elementtopology.hpp +1760 -0
  53. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/elementtransformation.hpp +339 -0
  54. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/evalfunc.hpp +405 -0
  55. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/expr.hpp +1686 -0
  56. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/facetfe.hpp +175 -0
  57. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/facetfespace.hpp +180 -0
  58. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/facethofe.hpp +111 -0
  59. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/facetsurffespace.hpp +112 -0
  60. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/fe_interfaces.hpp +32 -0
  61. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/fem.hpp +87 -0
  62. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/fesconvert.hpp +14 -0
  63. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/fespace.hpp +1449 -0
  64. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/finiteelement.hpp +286 -0
  65. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/globalinterfacespace.hpp +77 -0
  66. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/globalspace.hpp +115 -0
  67. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/gridfunction.hpp +525 -0
  68. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/h1amg.hpp +124 -0
  69. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/h1hofe.hpp +188 -0
  70. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/h1hofe_impl.hpp +1262 -0
  71. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/h1hofefo.hpp +148 -0
  72. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/h1hofefo_impl.hpp +185 -0
  73. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/h1hofespace.hpp +167 -0
  74. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/h1lofe.hpp +1240 -0
  75. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/h1lumping.hpp +41 -0
  76. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurl_equations.hpp +1381 -0
  77. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurlcurlfe.hpp +2241 -0
  78. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurlcurlfespace.hpp +78 -0
  79. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurlfe.hpp +259 -0
  80. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurlfe_utils.hpp +107 -0
  81. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurlhdiv_dshape.hpp +857 -0
  82. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurlhdivfes.hpp +308 -0
  83. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurlhofe.hpp +175 -0
  84. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurlhofe_impl.hpp +1871 -0
  85. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurlhofespace.hpp +193 -0
  86. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurllofe.hpp +1146 -0
  87. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdiv_equations.hpp +880 -0
  88. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivdivfe.hpp +2923 -0
  89. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivdivsurfacespace.hpp +76 -0
  90. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivfe.hpp +206 -0
  91. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivfe_utils.hpp +717 -0
  92. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivfes.hpp +75 -0
  93. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivhofe.hpp +447 -0
  94. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivhofe_impl.hpp +1107 -0
  95. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivhofefo.hpp +229 -0
  96. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivhofespace.hpp +177 -0
  97. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivhosurfacefespace.hpp +106 -0
  98. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivlofe.hpp +773 -0
  99. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hidden.hpp +74 -0
  100. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/householder.hpp +181 -0
  101. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hypre_ams_precond.hpp +123 -0
  102. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hypre_precond.hpp +73 -0
  103. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/integrator.hpp +2012 -0
  104. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/integratorcf.hpp +253 -0
  105. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/interpolate.hpp +49 -0
  106. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/intrule.hpp +2542 -0
  107. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/intrules_SauterSchwab.hpp +25 -0
  108. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/irspace.hpp +49 -0
  109. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/jacobi.hpp +153 -0
  110. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/kernels.hpp +762 -0
  111. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/l2hofe.hpp +194 -0
  112. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/l2hofe_impl.hpp +564 -0
  113. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/l2hofefo.hpp +542 -0
  114. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/l2hofespace.hpp +344 -0
  115. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/la.hpp +38 -0
  116. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/linalg_kernels.hpp +102 -0
  117. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/linearform.hpp +266 -0
  118. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/matrix.hpp +2140 -0
  119. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/memusage.hpp +41 -0
  120. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/meshaccess.hpp +1359 -0
  121. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/mgpre.hpp +204 -0
  122. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/mp_coefficient.hpp +145 -0
  123. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/mptools.hpp +2281 -0
  124. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/multigrid.hpp +42 -0
  125. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/multivector.hpp +447 -0
  126. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/mumpsinverse.hpp +187 -0
  127. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/mycomplex.hpp +361 -0
  128. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/ng_lapack.hpp +1661 -0
  129. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/ngblas.hpp +1232 -0
  130. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/ngs_defines.hpp +30 -0
  131. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/ngs_stdcpp_include.hpp +106 -0
  132. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/ngs_utils.hpp +121 -0
  133. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/ngsobject.hpp +1019 -0
  134. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/ngsstream.hpp +113 -0
  135. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/ngstd.hpp +72 -0
  136. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/nodalhofe.hpp +96 -0
  137. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/nodalhofe_impl.hpp +141 -0
  138. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/normalfacetfe.hpp +223 -0
  139. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/normalfacetfespace.hpp +98 -0
  140. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/normalfacetsurfacefespace.hpp +84 -0
  141. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/order.hpp +251 -0
  142. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/parallel_matrices.hpp +222 -0
  143. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/paralleldofs.hpp +340 -0
  144. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/parallelngs.hpp +23 -0
  145. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/parallelvector.hpp +269 -0
  146. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/pardisoinverse.hpp +200 -0
  147. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/periodic.hpp +129 -0
  148. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/plateaufespace.hpp +25 -0
  149. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/pml.hpp +275 -0
  150. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/pmltrafo.hpp +631 -0
  151. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/postproc.hpp +142 -0
  152. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/potentialtools.hpp +22 -0
  153. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/precomp.hpp +60 -0
  154. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/preconditioner.hpp +602 -0
  155. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/prolongation.hpp +377 -0
  156. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/python_comp.hpp +107 -0
  157. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/python_fem.hpp +89 -0
  158. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/python_linalg.hpp +58 -0
  159. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/python_ngstd.hpp +386 -0
  160. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/recursive_pol.hpp +4896 -0
  161. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/recursive_pol_tet.hpp +395 -0
  162. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/recursive_pol_trig.hpp +492 -0
  163. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/reorderedfespace.hpp +81 -0
  164. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/sample_sort.hpp +105 -0
  165. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/scalarfe.hpp +335 -0
  166. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/shapefunction_utils.hpp +113 -0
  167. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/simd_complex.hpp +329 -0
  168. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/smoother.hpp +253 -0
  169. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/solve.hpp +89 -0
  170. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/sparsecholesky.hpp +313 -0
  171. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/sparsematrix.hpp +1038 -0
  172. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/sparsematrix_dyn.hpp +90 -0
  173. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/sparsematrix_impl.hpp +1013 -0
  174. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/special_matrix.hpp +463 -0
  175. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/specialelement.hpp +125 -0
  176. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/statushandler.hpp +33 -0
  177. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/stringops.hpp +12 -0
  178. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/superluinverse.hpp +136 -0
  179. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/symbolicintegrator.hpp +850 -0
  180. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/symmetricmatrix.hpp +144 -0
  181. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tangentialfacetfe.hpp +224 -0
  182. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tangentialfacetfespace.hpp +91 -0
  183. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tensor.hpp +522 -0
  184. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tensorcoefficient.hpp +446 -0
  185. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tensorproductintegrator.hpp +113 -0
  186. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/thcurlfe.hpp +128 -0
  187. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/thcurlfe_impl.hpp +380 -0
  188. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/thdivfe.hpp +80 -0
  189. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/thdivfe_impl.hpp +492 -0
  190. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tpdiffop.hpp +461 -0
  191. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tpfes.hpp +133 -0
  192. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tpintrule.hpp +224 -0
  193. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/triangular.hpp +465 -0
  194. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tscalarfe.hpp +245 -0
  195. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tscalarfe_impl.hpp +1029 -0
  196. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/umfpackinverse.hpp +148 -0
  197. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/unifiedvector.hpp +103 -0
  198. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/vector.hpp +1273 -0
  199. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/voxelcoefficientfunction.hpp +41 -0
  200. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/vtkoutput.hpp +198 -0
  201. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/vvector.hpp +208 -0
  202. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/webgui.hpp +92 -0
  203. ngsolve-6.2.2506.post75.dev0.data/data/lib/cmake/ngsolve/NGSolveConfig.cmake +102 -0
  204. ngsolve-6.2.2506.post75.dev0.data/data/lib/cmake/ngsolve/ngsolve-targets-release.cmake +89 -0
  205. ngsolve-6.2.2506.post75.dev0.data/data/lib/cmake/ngsolve/ngsolve-targets.cmake +173 -0
  206. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngbla.so +0 -0
  207. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngcomp.so +0 -0
  208. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngfem.so +0 -0
  209. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngla.so +0 -0
  210. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngsbem.so +0 -0
  211. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngscudalib.so +0 -0
  212. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngsolve.so +0 -0
  213. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngstd.so +0 -0
  214. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/TensorProductTools.py +210 -0
  215. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/__console.py +94 -0
  216. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/__expr.py +181 -0
  217. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/__init__.py +148 -0
  218. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/_scikit_build_core_dependencies.py +30 -0
  219. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/bvp.py +78 -0
  220. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/config/__init__.py +1 -0
  221. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/config/__main__.py +4 -0
  222. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/config/config.py +60 -0
  223. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/TensorProduct/__init__.py +0 -0
  224. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/TensorProduct/tp_dg_1d_1d.py +80 -0
  225. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/TensorProduct/tp_dg_1d_2d.py +73 -0
  226. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/TensorProduct/tp_dg_2d_1d.py +72 -0
  227. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/TensorProduct/tp_dg_2d_2d.py +66 -0
  228. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/__init__.py +0 -0
  229. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/__init__.py +0 -0
  230. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/hhj.py +44 -0
  231. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/hybrid_dg.py +53 -0
  232. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/mixed.py +30 -0
  233. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/nonlin.py +29 -0
  234. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/pickling.py +26 -0
  235. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/pml.py +31 -0
  236. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/taskmanager.py +20 -0
  237. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/tdnns.py +47 -0
  238. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/timeDG-skeleton.py +45 -0
  239. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/timeDG.py +38 -0
  240. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/timeDGlap.py +42 -0
  241. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/timeDGwave.py +61 -0
  242. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/__init__.py +0 -0
  243. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/adaptive.py +123 -0
  244. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/cmagnet.py +59 -0
  245. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/elasticity.py +76 -0
  246. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/navierstokes.py +74 -0
  247. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/poisson.ipynb +170 -0
  248. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/poisson.py +41 -0
  249. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/mpi/__init__.py +0 -0
  250. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/mpi/mpi_cmagnet.py +87 -0
  251. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/mpi/mpi_navierstokes.py +117 -0
  252. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/mpi/mpi_poisson.py +89 -0
  253. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/mpi/mpi_timeDG.py +82 -0
  254. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/directsolvers.py +26 -0
  255. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/eigenvalues.py +364 -0
  256. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/internal.py +89 -0
  257. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/krylovspace.py +1013 -0
  258. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/meshes.py +748 -0
  259. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/ngs2petsc.py +310 -0
  260. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/ngscuda.so +0 -0
  261. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/ngscxx.py +42 -0
  262. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/ngslib.so +0 -0
  263. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/nonlinearsolvers.py +203 -0
  264. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/preconditioners.py +11 -0
  265. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/solve_implementation.py +168 -0
  266. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/solvers.py +7 -0
  267. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/timestepping.py +185 -0
  268. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/timing.py +108 -0
  269. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/utils.py +167 -0
  270. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/webgui.py +670 -0
  271. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/beam.geo +17 -0
  272. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/beam.vol +240 -0
  273. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/chip.in2d +41 -0
  274. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/chip.vol +614 -0
  275. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/coil.geo +12 -0
  276. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/coil.vol +2560 -0
  277. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/coilshield.geo +24 -0
  278. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/coilshield.vol +3179 -0
  279. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/cube.geo +19 -0
  280. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/cube.vol +1832 -0
  281. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d10_DGdoubleglazing.pde +50 -0
  282. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d11_chip_nitsche.pde +40 -0
  283. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d1_square.pde +43 -0
  284. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d2_chip.pde +35 -0
  285. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d3_helmholtz.pde +22 -0
  286. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d4_cube.pde +46 -0
  287. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d5_beam.pde +74 -0
  288. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d6_shaft.pde +73 -0
  289. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d7_coil.pde +50 -0
  290. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d8_coilshield.pde +49 -0
  291. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d9_hybridDG.pde +72 -0
  292. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/doubleglazing.in2d +27 -0
  293. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/doubleglazing.vol +737 -0
  294. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/piezo2d40round4.vol.gz +0 -0
  295. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/shaft.geo +73 -0
  296. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/shaft.vol +4291 -0
  297. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/square.in2d +17 -0
  298. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/square.vol +149 -0
  299. ngsolve-6.2.2506.post75.dev0.dist-info/METADATA +14 -0
  300. ngsolve-6.2.2506.post75.dev0.dist-info/RECORD +303 -0
  301. ngsolve-6.2.2506.post75.dev0.dist-info/WHEEL +5 -0
  302. ngsolve-6.2.2506.post75.dev0.dist-info/licenses/LICENSE +504 -0
  303. ngsolve-6.2.2506.post75.dev0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,857 @@
1
+ #ifndef FILE_HCURLHDIV_DSHAPE
2
+ #define FILE_HCURLHDIV_DSHAPE
3
+
4
+
5
+ #include "finiteelement.hpp"
6
+ #include "diffop.hpp"
7
+
8
+ namespace ngfem
9
+ {
10
+
11
+ /** calculates [du1/dx1 du2/dx1 (du3/dx1) du1/dx2 du2/dx2 (du3/dx2) (du1/dx3 du2/dx3 du3/dx3)] */
12
+ template<typename FEL, int DIMSPACE, int DIM, int DIM_STRESS>
13
+ void CalcDShapeFE(const FEL & fel, const MappedIntegrationPoint<DIM,DIMSPACE>& mip,
14
+ BareSliceMatrix<> bmatu, LocalHeap& lh, double eps = 1e-4)
15
+ {
16
+ HeapReset hr(lh);
17
+ // bmatu = 0;
18
+ // evaluate dshape by numerical diff
19
+ //fel, eltrans, mip, returnval, lh
20
+ int nd_u = fel.GetNDof();
21
+ const IntegrationPoint& ip = mip.IP();//volume_ir[i];
22
+ const ElementTransformation & eltrans = mip.GetTransformation();
23
+ FlatMatrixFixWidth<DIM_STRESS> shape_ul(nd_u, lh);
24
+ FlatMatrixFixWidth<DIM_STRESS> shape_ur(nd_u, lh);
25
+ FlatMatrixFixWidth<DIM_STRESS> shape_ull(nd_u, lh);
26
+ FlatMatrixFixWidth<DIM_STRESS> shape_urr(nd_u, lh);
27
+ FlatMatrixFixWidth<DIM_STRESS> dshape_u_ref(nd_u, lh);//(shape_ur); ///saves "reserved lh-memory"
28
+
29
+ FlatMatrixFixWidth<DIM> dshape_u_ref_comp(nd_u, lh);
30
+ FlatMatrixFixWidth<DIMSPACE> dshape_u(nd_u, lh);//(shape_ul);///saves "reserved lh-memory"
31
+
32
+ for (int j = 0; j < DIM; j++) // d / dxj
33
+ {
34
+ IntegrationPoint ipl(ip);
35
+ ipl(j) -= eps;
36
+ IntegrationPoint ipr(ip);
37
+ ipr(j) += eps;
38
+ IntegrationPoint ipll(ip);
39
+ ipll(j) -= 2*eps;
40
+ IntegrationPoint iprr(ip);
41
+ iprr(j) += 2*eps;
42
+
43
+ MappedIntegrationPoint<DIM,DIMSPACE> mipl(ipl, eltrans);
44
+ MappedIntegrationPoint<DIM,DIMSPACE> mipr(ipr, eltrans);
45
+ MappedIntegrationPoint<DIM,DIMSPACE> mipll(ipll, eltrans);
46
+ MappedIntegrationPoint<DIM,DIMSPACE> miprr(iprr, eltrans);
47
+
48
+ fel.CalcMappedShape (mipl, shape_ul);
49
+ fel.CalcMappedShape (mipr, shape_ur);
50
+ fel.CalcMappedShape (mipll, shape_ull);
51
+ fel.CalcMappedShape (miprr, shape_urr);
52
+
53
+ dshape_u_ref = (1.0/(12.0*eps)) * (8.0*shape_ur-8.0*shape_ul-shape_urr+shape_ull);
54
+ for (int l = 0; l < DIM_STRESS; l++)
55
+ bmatu.Col(j*DIM_STRESS+l) = dshape_u_ref.Col(l);
56
+ }
57
+
58
+ for (int j = 0; j < DIM_STRESS; j++)
59
+ {
60
+ for (int k = 0; k < nd_u; k++)
61
+ for (int l = 0; l < DIM; l++)
62
+ dshape_u_ref_comp(k,l) = bmatu(k, l*DIM_STRESS+j);
63
+
64
+ dshape_u = dshape_u_ref_comp * mip.GetJacobianInverse();
65
+
66
+ for (int k = 0; k < nd_u; k++)
67
+ for (int l = 0; l < DIMSPACE; l++)
68
+ bmatu(k, l*DIM_STRESS+j) = dshape_u(k,l);
69
+ }
70
+ }
71
+
72
+
73
+ template<typename FEL, int DIMSPACE, int DIM, int DIM_STRESS, class TVX, class TVY>
74
+ void ApplyDShapeFE(const FEL & fel, const MappedIntegrationPoint<DIM,DIMSPACE>& mip, const TVX & x, TVY & y, LocalHeap& lh, double eps = 1e-4)
75
+ {
76
+ const IntegrationPoint& ip = mip.IP();
77
+ const ElementTransformation & eltrans = mip.GetTransformation();
78
+ Mat<DIM_STRESS,1> shape_ul;
79
+ Mat<DIM_STRESS,1> shape_ur;
80
+ Mat<DIM_STRESS,1> shape_ull;
81
+ Mat<DIM_STRESS,1> shape_urr;
82
+ Mat<DIM_STRESS,1> dshape_u_ref;
83
+
84
+ Vec<DIM> dshape_u_ref_comp;
85
+ Vec<DIMSPACE> dshape_u;
86
+
87
+ for (int j = 0; j < DIM; j++) // d / dxj
88
+ {
89
+ IntegrationPoint ipl(ip);
90
+ ipl(j) -= eps;
91
+ IntegrationPoint ipr(ip);
92
+ ipr(j) += eps;
93
+ IntegrationPoint ipll(ip);
94
+ ipll(j) -= 2*eps;
95
+ IntegrationPoint iprr(ip);
96
+ iprr(j) += 2*eps;
97
+
98
+ MappedIntegrationPoint<DIM,DIMSPACE> mipl(ipl, eltrans);
99
+ MappedIntegrationPoint<DIM,DIMSPACE> mipr(ipr, eltrans);
100
+ MappedIntegrationPoint<DIM,DIMSPACE> mipll(ipll, eltrans);
101
+ MappedIntegrationPoint<DIM,DIMSPACE> miprr(iprr, eltrans);
102
+
103
+ fel.EvaluateMappedShape (mipl, x, shape_ul);
104
+ fel.EvaluateMappedShape (mipr, x, shape_ur);
105
+ fel.EvaluateMappedShape (mipll, x, shape_ull);
106
+ fel.EvaluateMappedShape (miprr, x, shape_urr);
107
+
108
+ dshape_u_ref = (1.0/(12.0*eps)) * (8.0*shape_ur-8.0*shape_ul-shape_urr+shape_ull);
109
+
110
+ for (int l = 0; l < DIM_STRESS; l++)
111
+ y(j*DIM_STRESS+l) = dshape_u_ref(l);
112
+ }
113
+
114
+ for (int j = 0; j < DIM_STRESS; j++)
115
+ {
116
+ for (int l = 0; l < DIM; l++)
117
+ dshape_u_ref_comp(l) = y(l*DIM_STRESS+j);
118
+
119
+ dshape_u = Trans(mip.GetJacobianInverse()) * dshape_u_ref_comp;
120
+
121
+ for (int l = 0; l < DIMSPACE; l++)
122
+ y(l*DIM_STRESS+j) = dshape_u(l);
123
+ }
124
+ }
125
+
126
+ template<typename FEL, int DIMSPACE, int DIM, int DIM_STRESS, class TVX, class TVY>
127
+ void ApplyTransDShapeFE(const FEL & fel_u, const MappedIntegrationPoint<DIM,DIMSPACE>& mip, const TVX & x, TVY & by, LocalHeap & lh, double eps = 1e-4)
128
+ {
129
+ typedef typename TVX::TSCAL TSCALX;
130
+
131
+ HeapReset hr(lh);
132
+ int nd_u = fel_u.GetNDof();
133
+ FlatMatrixFixWidth<DIM_STRESS*DIMSPACE> bmatu(nd_u,lh);
134
+
135
+ auto y = by.Range(0, nd_u);
136
+ const IntegrationPoint& ip = mip.IP();
137
+ const ElementTransformation & eltrans = mip.GetTransformation();
138
+ FlatMatrixFixWidth<DIM_STRESS> shape_ul(nd_u, lh);
139
+ FlatMatrixFixWidth<DIM_STRESS> shape_ur(nd_u, lh);
140
+ FlatMatrixFixWidth<DIM_STRESS> shape_ull(nd_u, lh);
141
+ FlatMatrixFixWidth<DIM_STRESS> shape_urr(nd_u, lh);
142
+ FlatMatrixFixWidth<DIM_STRESS> dshape_u_ref(nd_u, lh);
143
+ FlatMatrixFixWidth<DIM_STRESS> dshape_u(nd_u, lh);
144
+
145
+ FlatMatrix<TSCALX> hx(DIMSPACE,DIM_STRESS,&x(0));
146
+ Mat<DIM,DIM_STRESS,TSCALX> tx = mip.GetJacobianInverse() * hx;
147
+
148
+ y = 0;
149
+ for (int j = 0; j < DIM; j++) // d / dxj
150
+ {
151
+ IntegrationPoint ipts[4];
152
+
153
+ ipts[0] = ip;
154
+ ipts[0](j) -= eps;
155
+ ipts[1] = ip;
156
+ ipts[1](j) += eps;
157
+ ipts[2] = ip;
158
+ ipts[2](j) -= 2*eps;
159
+ ipts[3] = ip;
160
+ ipts[3](j) += 2*eps;
161
+
162
+ IntegrationRule ir(4, ipts);
163
+ MappedIntegrationRule<DIM,DIMSPACE> mirl(ir, eltrans, lh);
164
+
165
+ fel_u.CalcMappedShape (mirl[0], shape_ul);
166
+ fel_u.CalcMappedShape (mirl[1], shape_ur);
167
+ fel_u.CalcMappedShape (mirl[2], shape_ull);
168
+ fel_u.CalcMappedShape (mirl[3], shape_urr);
169
+
170
+ dshape_u_ref = (1.0/(12.0*eps)) * (8.0*shape_ur-8.0*shape_ul-shape_urr+shape_ull);
171
+ y += dshape_u_ref * tx.Row(j);
172
+ }
173
+ }
174
+
175
+
176
+
177
+ template<typename FEL, int DIMSPACE, int DIM, int DIM_STRESS>
178
+ void CalcSIMDDShapeFE(const FEL & fel, const SIMD_MappedIntegrationRule<DIM,DIMSPACE>& mir, BareSliceMatrix<SIMD<double>> mat, double eps = 1e-4)
179
+ {
180
+ size_t nd_u = fel.GetNDof();
181
+
182
+ STACK_ARRAY(SIMD<double>, mem1, 2*DIM_STRESS*nd_u);
183
+ FlatMatrix<SIMD<double>> shape_u_tmp(nd_u*DIM_STRESS, 1, &mem1[0]);
184
+
185
+ FlatMatrix<SIMD<double>> dshape_u_ref(nd_u*DIM_STRESS, 1, &mem1[DIM_STRESS*nd_u]);
186
+
187
+ LocalHeapMem<10000> lh("diffopgrad-lh");
188
+
189
+ auto & ir = mir.IR();
190
+ for (size_t i = 0; i < mir.Size(); i++)
191
+ {
192
+ const SIMD<IntegrationPoint> & ip = ir[i];
193
+ const ElementTransformation & eltrans = mir[i].GetTransformation();
194
+
195
+ for (int j = 0; j < DIM; j++) // d / dxj
196
+ {
197
+ HeapReset hr(lh);
198
+ SIMD<IntegrationPoint> ipts[4];
199
+ ipts[0] = ip;
200
+ ipts[0](j) -= eps;
201
+ ipts[1] = ip;
202
+ ipts[1](j) += eps;
203
+ ipts[2] = ip;
204
+ ipts[2](j) -= 2*eps;
205
+ ipts[3] = ip;
206
+ ipts[3](j) += 2*eps;
207
+
208
+ SIMD_IntegrationRule ir(4, ipts);
209
+ SIMD_MappedIntegrationRule<DIM,DIMSPACE> mirl(ir, eltrans, lh);
210
+
211
+ fel.CalcMappedShape (mirl[2], shape_u_tmp);
212
+ dshape_u_ref = 1.0/(12.0*eps) * shape_u_tmp;
213
+ fel.CalcMappedShape (mirl[3], shape_u_tmp);
214
+ dshape_u_ref -= 1.0/(12.0*eps) * shape_u_tmp;
215
+ fel.CalcMappedShape (mirl[0], shape_u_tmp);
216
+ dshape_u_ref -= 8.0/(12.0*eps) * shape_u_tmp;
217
+ fel.CalcMappedShape (mirl[1], shape_u_tmp);
218
+ dshape_u_ref += 8.0/(12.0*eps) * shape_u_tmp;
219
+
220
+ // dshape_u_ref = (8.0*shape_ur-8.0*shape_ul-shape_urr+shape_ull);
221
+ for (size_t l = 0; l < DIM_STRESS; l++)
222
+ for (size_t k = 0; k < nd_u; k++)
223
+ mat(k*DIM_STRESS*DIM+j*DIM_STRESS+l, i) = dshape_u_ref(k*DIM_STRESS+l, 0);
224
+ }
225
+
226
+ for (size_t j = 0; j < DIM_STRESS; j++)
227
+ for (size_t k = 0; k < nd_u; k++)
228
+ {
229
+ Vec<DIM,SIMD<double>> dshape_u_ref, dshape_u;
230
+ for (size_t l = 0; l < DIM; l++)
231
+ dshape_u_ref(l) = mat(k*DIM_STRESS*DIM+l*DIM+j, i);
232
+
233
+ dshape_u = Trans(mir[i].GetJacobianInverse()) * dshape_u_ref;
234
+
235
+ for (size_t l = 0; l < DIMSPACE; l++)
236
+ mat(k*DIM_STRESS*DIMSPACE+l*DIM_STRESS+j, i) = dshape_u(l);
237
+ }
238
+ }
239
+ }
240
+
241
+ template<typename FEL, int DIMSPACE, int DIM, int DIM_STRESS>
242
+ void ApplySIMDDShapeFE (const FEL & fel_u, const SIMD_BaseMappedIntegrationRule & bmir,
243
+ BareSliceVector<double> x, BareSliceMatrix<SIMD<double>> y, double eps = 1e-4)
244
+ {
245
+ constexpr size_t BS = 64; // number of simd-points
246
+ size_t maxnp = min2(BS, bmir.Size());
247
+ size_t size = (maxnp+1)*SIMD<double>::Size()*500 + 5*DIM_STRESS*BS*sizeof(SIMD<double>);
248
+ STACK_ARRAY(char, data, size);
249
+ LocalHeap lh(data, size);
250
+
251
+ auto & mir = static_cast<const SIMD_MappedIntegrationRule<DIM,DIMSPACE>&> (bmir);
252
+ auto & ir = mir.IR();
253
+ const ElementTransformation & trafo = mir.GetTransformation();
254
+
255
+ for (int k = 0; k < mir.Size(); k++)
256
+ for (int m = 0; m < DIM_STRESS*DIMSPACE; m++)
257
+ y(m, k) = SIMD<double> (0.0);
258
+
259
+ for (size_t base = 0; base < ir.Size(); base += BS)
260
+ {
261
+ HeapReset hr(lh);
262
+ size_t num = min2(BS, ir.Size()-base);
263
+
264
+ FlatMatrix<SIMD<double>> hxl(DIM_STRESS, num, lh);
265
+ FlatMatrix<SIMD<double>> hxr(DIM_STRESS, num, lh);
266
+ FlatMatrix<SIMD<double>> hxll(DIM_STRESS, num, lh);
267
+ FlatMatrix<SIMD<double>> hxrr(DIM_STRESS, num, lh);
268
+ FlatMatrix<SIMD<double>> hx(DIM_STRESS, num, lh);
269
+
270
+ for (int j = 0; j < DIM; j++)
271
+ {
272
+ // hx = (F^-1 * x).Row(j)
273
+ {
274
+ HeapReset hr(lh);
275
+ SIMD_IntegrationRule irl(num*SIMD<double>::Size(), lh);
276
+ for (int k = 0; k < irl.Size(); k++)
277
+ {
278
+ irl[k] = ir[base+k];
279
+ irl[k](j) -= eps;
280
+ }
281
+ SIMD_MappedIntegrationRule<DIM,DIMSPACE> mirl(irl, trafo, lh);
282
+ fel_u.Evaluate (mirl, x, hxl);
283
+ }
284
+ {
285
+ HeapReset hr(lh);
286
+ SIMD_IntegrationRule irr(num*SIMD<double>::Size(), lh);
287
+ for (int k = 0; k < irr.Size(); k++)
288
+ {
289
+ irr[k] = ir[base+k];
290
+ irr[k](j) += eps;
291
+ }
292
+ SIMD_MappedIntegrationRule<DIM,DIMSPACE> mirr(irr, trafo, lh);
293
+ fel_u.Evaluate (mirr, x, hxr);
294
+ }
295
+ {
296
+ HeapReset hr(lh);
297
+ SIMD_IntegrationRule irll(num*SIMD<double>::Size(), lh);
298
+ for (int k = 0; k < irll.Size(); k++)
299
+ {
300
+ irll[k] = ir[base+k];
301
+ irll[k](j) -= 2*eps;
302
+ }
303
+ SIMD_MappedIntegrationRule<DIM,DIMSPACE> mirll(irll, trafo, lh);
304
+ fel_u.Evaluate (mirll, x, hxll);
305
+ }
306
+ {
307
+ HeapReset hr(lh);
308
+ SIMD_IntegrationRule irrr(num*SIMD<double>::Size(), lh);
309
+ for (int k = 0; k < irrr.Size(); k++)
310
+ {
311
+ irrr[k] = ir[base+k];
312
+ irrr[k](j) += 2*eps;
313
+ }
314
+ SIMD_MappedIntegrationRule<DIM,DIMSPACE> mirrr(irrr, trafo, lh);
315
+ fel_u.Evaluate (mirrr, x, hxrr);
316
+ }
317
+ // hx = 1.0/(2*eps) * (hxr-hxl);
318
+ hx = 1.0/(12*eps) * (8*hxr-8*hxl-hxrr+hxll);
319
+ for (int k = 0; k < num; k++)
320
+ {
321
+ auto jacinv = mir[base+k].GetJacobianInverse();
322
+ for (int l = 0; l < DIM_STRESS; l++)
323
+ {
324
+ for (int m = 0; m < DIMSPACE; m++)
325
+ y(m*DIM_STRESS+l, base+k) += jacinv(j,m) * hx(l, k);
326
+ }
327
+ }
328
+ }
329
+ }
330
+ }
331
+
332
+
333
+
334
+
335
+ template<typename FEL, int DIMSPACE, int DIM, int DIM_STRESS>
336
+ void AddTransSIMDDShapeFE (const FEL & fel_u, const SIMD_BaseMappedIntegrationRule & bmir,
337
+ BareSliceMatrix<SIMD<double>> x, BareSliceVector<double> y, double eps = 1e-4)
338
+ {
339
+ constexpr size_t BS = 64; // number of simd-points
340
+ size_t maxnp = min2(BS, bmir.Size());
341
+ size_t size = (maxnp+1)*SIMD<double>::Size()*500;
342
+
343
+ STACK_ARRAY(char, data, size);
344
+ LocalHeap lh(data, size);
345
+
346
+ auto & mir = static_cast<const SIMD_MappedIntegrationRule<DIM,DIMSPACE>&> (bmir);
347
+ auto & ir = mir.IR();
348
+ const ElementTransformation & trafo = mir.GetTransformation();
349
+
350
+ for (size_t base = 0; base < ir.Size(); base += BS)
351
+ {
352
+ HeapReset hr(lh);
353
+ size_t num = min2(BS, ir.Size()-base);
354
+
355
+ FlatMatrix<SIMD<double>> hx1(DIM_STRESS, num, lh);
356
+ FlatMatrix<SIMD<double>> hx2(DIM_STRESS, num, lh);
357
+
358
+ for (size_t j = 0; j < DIM; j++)
359
+ {
360
+ // hx = (F^-1 * x).Row(j)
361
+ for (size_t k = 0; k < num; k++)
362
+ {
363
+ auto jacinv = mir[base+k].GetJacobianInverse();
364
+ for (int l = 0; l < DIM_STRESS; l++)
365
+ {
366
+ SIMD<double> sum = 0;
367
+ for (int m = 0; m < DIMSPACE; m++)
368
+ sum += jacinv(j,m) * x(m*DIM_STRESS+l, base+k);
369
+
370
+ hx1(l,k) = (-(8/(12*eps)) * sum).Data();
371
+ hx2(l,k) = ( (1/(12*eps)) * sum).Data();
372
+ }
373
+ }
374
+
375
+ {
376
+ HeapReset hr(lh);
377
+ SIMD_IntegrationRule irl(num*SIMD<double>::Size(), lh);
378
+ for (size_t k = 0; k < irl.Size(); k++)
379
+ {
380
+ irl[k] = ir[base+k];
381
+ irl[k](j) -= eps;
382
+ }
383
+ SIMD_MappedIntegrationRule<DIM,DIMSPACE> mirl(irl, trafo, lh);
384
+ fel_u.AddTrans (mirl, hx1, y);
385
+ irl.NothingToDelete();
386
+ }
387
+ {
388
+ HeapReset hr(lh);
389
+ hx1 *= -1;
390
+ SIMD_IntegrationRule irr(num*SIMD<double>::Size(), lh);
391
+ for (int k = 0; k < irr.Size(); k++)
392
+ {
393
+ irr[k] = ir[base+k];
394
+ irr[k](j) += eps;
395
+ }
396
+ SIMD_MappedIntegrationRule<DIM,DIMSPACE> mirr(irr, trafo, lh);
397
+ fel_u.AddTrans (mirr, hx1, y);
398
+ }
399
+ {
400
+ HeapReset hr(lh);
401
+ SIMD_IntegrationRule irl(num*SIMD<double>::Size(), lh);
402
+ for (int k = 0; k < irl.Size(); k++)
403
+ {
404
+ irl[k] = ir[base+k];
405
+ irl[k](j) -= 2*eps;
406
+ }
407
+ SIMD_MappedIntegrationRule<DIM,DIMSPACE> mirl(irl, trafo, lh);
408
+ fel_u.AddTrans (mirl, hx2, y);
409
+ }
410
+ {
411
+ HeapReset hr(lh);
412
+ hx2 *= -1;
413
+ SIMD_IntegrationRule irr(num*SIMD<double>::Size(), lh);
414
+ for (int k = 0; k < irr.Size(); k++)
415
+ {
416
+ irr[k] = ir[base+k];
417
+ irr[k](j) += 2*eps;
418
+ }
419
+ SIMD_MappedIntegrationRule<DIM,DIMSPACE> mirr(irr, trafo, lh);
420
+ fel_u.AddTrans (mirr, hx2, y);
421
+ }
422
+ }
423
+ }
424
+ }
425
+
426
+
427
+
428
+ template <typename ME, typename ORIG, typename FEL>
429
+ class NumDiffGradient : public DiffOp<ME>
430
+ {
431
+ typedef DiffOp<ME> BASE;
432
+ public:
433
+ static constexpr double eps() { return 1e-4; }
434
+
435
+ static constexpr int DIM = ORIG::DIM;
436
+ static constexpr int DIM_SPACE = ORIG::DIM_SPACE;
437
+ static constexpr int DIM_ELEMENT = ORIG::DIM_ELEMENT;
438
+ static constexpr int DIM_DMAT = ORIG::DIM_DMAT*ORIG::DIM_SPACE;
439
+ static constexpr int DIFFORDER = ORIG::DIFFORDER+1;
440
+
441
+
442
+ template <typename AFEL, typename SIP, typename MAT,
443
+ typename std::enable_if<!std::is_convertible<MAT,BareSliceMatrix<double,ColMajor>>::value, int>::type = 0>
444
+ static void GenerateMatrix (const AFEL & fel, const SIP & sip,
445
+ MAT & mat, LocalHeap & lh)
446
+ {
447
+ cout << "nicht gut" << endl;
448
+ cout << "type(fel) = " << typeid(fel).name() << ", sip = " << typeid(sip).name()
449
+ << ", mat = " << typeid(mat).name() << endl;
450
+ }
451
+
452
+
453
+ static int DimRef() { return DIM_DMAT + ORIG::DIM_DMAT; } // grad(u), u
454
+
455
+ template <typename IP, typename MAT>
456
+ static void GenerateMatrixRef (const FiniteElement & fel, const IP & ip,
457
+ MAT && mat, LocalHeap & lh)
458
+ {
459
+ int nd_u = fel.GetNDof();
460
+
461
+ FlatMatrixFixWidth<ORIG::DIM_DMAT> shape_ul(nd_u, lh);
462
+ FlatMatrixFixWidth<ORIG::DIM_DMAT> shape_ur(nd_u, lh);
463
+ FlatMatrixFixWidth<ORIG::DIM_DMAT> shape_ull(nd_u, lh);
464
+ FlatMatrixFixWidth<ORIG::DIM_DMAT> shape_urr(nd_u, lh);
465
+ FlatMatrixFixWidth<ORIG::DIM_DMAT> dshape_u_ref(nd_u, lh);
466
+
467
+ FlatMatrixFixWidth<DIM_ELEMENT> dshape_u_ref_comp(nd_u, lh);
468
+ FlatMatrixFixWidth<DIM_SPACE> dshape_u(nd_u, lh);
469
+
470
+ for (int j = 0; j < DIM_ELEMENT; j++) // d / dxj
471
+ {
472
+ IntegrationPoint ipl(ip);
473
+ ipl(j) -= eps();
474
+ IntegrationPoint ipr(ip);
475
+ ipr(j) += eps();
476
+ IntegrationPoint ipll(ip);
477
+ ipll(j) -= 2*eps();
478
+ IntegrationPoint iprr(ip);
479
+ iprr(j) += 2*eps();
480
+
481
+
482
+ ORIG::GenerateMatrixRef (fel, ipl, Trans(shape_ul), lh);
483
+ ORIG::GenerateMatrixRef (fel, ipr, Trans(shape_ur), lh);
484
+ ORIG::GenerateMatrixRef (fel, ipll, Trans(shape_ull), lh);
485
+ ORIG::GenerateMatrixRef (fel, iprr, Trans(shape_urr), lh);
486
+
487
+ dshape_u_ref = (1.0/(12.0*eps())) * (8.0*shape_ur-8.0*shape_ul-shape_urr+shape_ull);
488
+ for (int l = 0; l < ORIG::DIM_DMAT; l++)
489
+ mat.Row(j*ORIG::DIM_DMAT+l) = dshape_u_ref.Col(l);
490
+ }
491
+
492
+ ORIG::GenerateMatrixRef (fel, ip, mat.Rows(DIM_DMAT, DIM_DMAT+ORIG::DIM_DMAT), lh);
493
+ }
494
+
495
+
496
+
497
+ template <typename MIP, typename MAT>
498
+ static void CalcTransformationMatrix (const MIP & mip,
499
+ MAT & mat, LocalHeap & lh)
500
+ {
501
+ auto matgrad = Trans(static_cast<const MappedIntegrationPoint<DIM_SPACE,DIM_SPACE>&>(mip).GetJacobianInverse());
502
+ Mat<DIM_SPACE,DIM_SPACE> matshape;
503
+ ORIG::CalcTransformationMatrix (mip, matshape, lh);
504
+
505
+ // input: du0/dx0, du1/dx0, du2/dx0, d0/dx1, ....
506
+ // output du0/dx0, du1/dx0, du2/dx0 ...
507
+ for (int i = 0; i < DIM_SPACE; i++)
508
+ for (int j = 0; j < DIM_SPACE; j++)
509
+ for (int k = 0; k < DIM_SPACE; k++)
510
+ for (int l = 0; l < DIM_SPACE; l++)
511
+ mat(k*DIM_SPACE+i, l*DIM_SPACE+j) = matshape(i,j) * matgrad(k,l);
512
+
513
+
514
+ // numerical diff of ORIG::CalcTransformationMatrix (mip, matshape, lh);
515
+
516
+ for (int i = 0; i < DIM_SPACE; i++)
517
+ for (int j = 0; j < DIM_SPACE; j++)
518
+ for (int k = 0; k < DIM_SPACE; k++)
519
+ mat(k*DIM_SPACE+i, DIM_SPACE*DIM_SPACE+j) = 0.0;
520
+
521
+ Mat<DIM_SPACE,DIM_SPACE> dmatshape_dxj;
522
+ const IntegrationPoint& ip = mip.IP();
523
+ const ElementTransformation & eltrans = mip.GetTransformation();
524
+ for (int j = 0; j < DIM_ELEMENT; j++) // d / dxj
525
+ {
526
+ IntegrationPoint ipl(ip);
527
+ ipl(j) -= eps();
528
+ IntegrationPoint ipr(ip);
529
+ ipr(j) += eps();
530
+ IntegrationPoint ipll(ip);
531
+ ipll(j) -= 2*eps();
532
+ IntegrationPoint iprr(ip);
533
+ iprr(j) += 2*eps();
534
+
535
+ MappedIntegrationPoint<DIM_ELEMENT,DIM_SPACE> mipl(ipl, eltrans);
536
+ MappedIntegrationPoint<DIM_ELEMENT,DIM_SPACE> mipr(ipr, eltrans);
537
+ MappedIntegrationPoint<DIM_ELEMENT,DIM_SPACE> mipll(ipll, eltrans);
538
+ MappedIntegrationPoint<DIM_ELEMENT,DIM_SPACE> miprr(iprr, eltrans);
539
+
540
+ Mat<DIM_SPACE,DIM_SPACE> dml, dmll, dmr, dmrr;
541
+ ORIG::CalcTransformationMatrix (mipl, dml, lh);
542
+ ORIG::CalcTransformationMatrix (mipr, dmr, lh);
543
+ ORIG::CalcTransformationMatrix (mipll, dmll, lh);
544
+ ORIG::CalcTransformationMatrix (miprr, dmrr, lh);
545
+
546
+ dmatshape_dxj = (1.0/(12.0*eps())) * (8.0*dmr-8.0*dml-dmrr+dmll);
547
+
548
+ for (int i = 0; i < DIM_SPACE; i++)
549
+ for (int l = 0; l < DIM_SPACE; l++)
550
+ for (int k = 0; k < DIM_SPACE; k++)
551
+ mat(k*DIM_SPACE+i, DIM_SPACE*DIM_SPACE+l) += matgrad(k,j) * dmatshape_dxj(i,l);
552
+ }
553
+
554
+
555
+ }
556
+
557
+
558
+
559
+
560
+ template <typename AFEL, typename MIP, typename MAT,
561
+ typename std::enable_if<std::is_convertible<MAT,BareSliceMatrix<double,ColMajor>>::value, int>::type = 0>
562
+ static void GenerateMatrix (const AFEL & bfel, const MIP & mip,
563
+ MAT mat, LocalHeap & lh)
564
+ {
565
+ // CalcDShapeFE<FEL,DIM_SPACE,DIM_ELEMENT,ORIG::DIM_DMAT>
566
+ // (static_cast<const FEL&>(fel), mip, Trans(mat), lh, eps());
567
+
568
+ HeapReset hr(lh);
569
+
570
+ int nd_u = bfel.GetNDof();
571
+ const IntegrationPoint& ip = mip.IP();
572
+ const ElementTransformation & eltrans = mip.GetTransformation();
573
+ FlatMatrixFixWidth<ORIG::DIM_DMAT> shape_ul(nd_u, lh);
574
+ FlatMatrixFixWidth<ORIG::DIM_DMAT> shape_ur(nd_u, lh);
575
+ FlatMatrixFixWidth<ORIG::DIM_DMAT> shape_ull(nd_u, lh);
576
+ FlatMatrixFixWidth<ORIG::DIM_DMAT> shape_urr(nd_u, lh);
577
+ FlatMatrixFixWidth<ORIG::DIM_DMAT> dshape_u_ref(nd_u, lh);
578
+
579
+ FlatMatrixFixWidth<DIM_ELEMENT> dshape_u_ref_comp(nd_u, lh);
580
+ FlatMatrixFixWidth<DIM_SPACE> dshape_u(nd_u, lh);
581
+
582
+ for (int j = 0; j < DIM_ELEMENT; j++) // d / dxj
583
+ {
584
+ IntegrationPoint ipl(ip);
585
+ ipl(j) -= eps();
586
+ IntegrationPoint ipr(ip);
587
+ ipr(j) += eps();
588
+ IntegrationPoint ipll(ip);
589
+ ipll(j) -= 2*eps();
590
+ IntegrationPoint iprr(ip);
591
+ iprr(j) += 2*eps();
592
+
593
+ MappedIntegrationPoint<DIM_ELEMENT,DIM_SPACE> mipl(ipl, eltrans);
594
+ MappedIntegrationPoint<DIM_ELEMENT,DIM_SPACE> mipr(ipr, eltrans);
595
+ MappedIntegrationPoint<DIM_ELEMENT,DIM_SPACE> mipll(ipll, eltrans);
596
+ MappedIntegrationPoint<DIM_ELEMENT,DIM_SPACE> miprr(iprr, eltrans);
597
+
598
+ ORIG::GenerateMatrix (bfel, mipl, Trans(shape_ul), lh);
599
+ ORIG::GenerateMatrix (bfel, mipr, Trans(shape_ur), lh);
600
+ ORIG::GenerateMatrix (bfel, mipll, Trans(shape_ull), lh);
601
+ ORIG::GenerateMatrix (bfel, miprr, Trans(shape_urr), lh);
602
+
603
+ dshape_u_ref = (1.0/(12.0*eps())) * (8.0*shape_ur-8.0*shape_ul-shape_urr+shape_ull);
604
+ for (int l = 0; l < ORIG::DIM_DMAT; l++)
605
+ mat.Row(j*ORIG::DIM_DMAT+l) = dshape_u_ref.Col(l);
606
+ }
607
+
608
+ for (int j = 0; j < ORIG::DIM_DMAT; j++)
609
+ {
610
+ for (int k = 0; k < nd_u; k++)
611
+ for (int l = 0; l < DIM_ELEMENT; l++)
612
+ dshape_u_ref_comp(k,l) = mat(l*ORIG::DIM_DMAT+j, k);
613
+
614
+ dshape_u = dshape_u_ref_comp * mip.GetJacobianInverse();
615
+
616
+ for (int k = 0; k < nd_u; k++)
617
+ for (int l = 0; l < DIM_SPACE; l++)
618
+ mat(l*ORIG::DIM_DMAT+j, k) = dshape_u(k,l);
619
+ }
620
+ }
621
+
622
+
623
+
624
+ /*
625
+ template <typename AFEL, typename MIP, typename MAT,
626
+ typename std::enable_if<std::is_convertible<MAT,SliceMatrix<double,ColMajor>>::value, int>::type = 0>
627
+ static void GenerateMatrix (const AFEL & fel, const MIP & mip,
628
+ MAT mat, LocalHeap & lh)
629
+ {
630
+ CalcDShapeFE<FEL,DIM_SPACE,DIM_ELEMENT,ORIG::DIM_DMAT>
631
+ (static_cast<const FEL&>(fel), mip, Trans(mat), lh, eps());
632
+ }
633
+
634
+ template <typename AFEL, typename MIP, class TVX, class TVY>
635
+ static void Apply (const AFEL & fel, const MIP & mip,
636
+ const TVX & x, TVY && y,
637
+ LocalHeap & lh)
638
+ {
639
+ HeapReset hr(lh);
640
+ FlatMatrixFixWidth<DIM_SPACE*ORIG::DIM_DMAT> hm(fel.GetNDof(),lh);
641
+ CalcDShapeFE<FEL,DIM_SPACE,DIM_ELEMENT,ORIG::DIM_DMAT>
642
+ (static_cast<const FEL&>(fel), mip, hm, lh, eps());
643
+ y = Trans(hm)*x;
644
+ }
645
+
646
+ template <typename AFEL, typename MIP, class TVX, class TVY>
647
+ static void ApplyTrans (const AFEL & fel, const MIP & mip,
648
+ const TVX & x, TVY & by,
649
+ LocalHeap & lh)
650
+ {
651
+ ApplyTransDShapeFE<FEL,DIM_SPACE,DIM_ELEMENT,ORIG::DIM_DMAT>
652
+ (static_cast<const FEL&>(fel), mip, x, by, lh, eps());
653
+ }
654
+ */
655
+
656
+
657
+ static void GenerateMatrixSIMDIR (const FiniteElement & bfel,
658
+ const SIMD_BaseMappedIntegrationRule & bmir, BareSliceMatrix<SIMD<double>> mat)
659
+ {
660
+ /*
661
+ CalcSIMDDShapeFE<FEL,DIM_SPACE,DIM_ELEMENT,ORIG::DIM_DMAT>
662
+ (static_cast<const FEL&>(bfel), static_cast<const SIMD_MappedIntegrationRule<DIM_ELEMENT,DIM_SPACE> &>(bmir), mat, eps());
663
+ return;
664
+ */
665
+
666
+ auto & mir = static_cast<const SIMD_MappedIntegrationRule<DIM_ELEMENT,DIM_SPACE>&> (bmir);
667
+ // auto & fel_u = static_cast<const FEL&>(bfel);
668
+ size_t nd_u = bfel.GetNDof();
669
+
670
+ STACK_ARRAY(SIMD<double>, mem1, 5*ORIG::DIM_DMAT*nd_u);
671
+ FlatMatrix<SIMD<double>> shape_u_tmp(nd_u*ORIG::DIM_DMAT, 4, &mem1[0]);
672
+ FlatMatrix<SIMD<double>> dshape_u_ref(nd_u*ORIG::DIM_DMAT, 1, &mem1[4*ORIG::DIM_DMAT*nd_u]);
673
+
674
+ LocalHeapMem<10000> lh("diffopgrad-lh");
675
+
676
+ auto & ir = mir.IR();
677
+ for (size_t i = 0; i < mir.Size(); i++)
678
+ {
679
+ const SIMD<IntegrationPoint> & ip = ir[i];
680
+ const ElementTransformation & eltrans = mir[i].GetTransformation();
681
+
682
+ double dist[] = { 1, -1, 2, -2 };
683
+ double weight[] = { 8/12., -8/12., -1/12., 1/12. };
684
+
685
+ for (int j = 0; j < DIM_ELEMENT; j++) // d / dxj
686
+ {
687
+ HeapReset hr(lh);
688
+ SIMD<IntegrationPoint> ipts[4];
689
+ for (int i = 0; i < 4; i++)
690
+ {
691
+ ipts[i] = ip;
692
+ ipts[i](j) += dist[i]*eps();
693
+ }
694
+ SIMD_IntegrationRule ir(4, ipts);
695
+ SIMD_MappedIntegrationRule<DIM_ELEMENT,DIM_SPACE> mirl(ir, eltrans, lh);
696
+ ORIG::GenerateMatrixSIMDIR (bfel, mirl, shape_u_tmp);
697
+
698
+ dshape_u_ref.Col(0) =
699
+ weight[0]/eps() * shape_u_tmp.Col(0) +
700
+ weight[1]/eps() * shape_u_tmp.Col(1) +
701
+ weight[2]/eps() * shape_u_tmp.Col(2) +
702
+ weight[3]/eps() * shape_u_tmp.Col(3);
703
+
704
+ for (size_t l = 0; l < ORIG::DIM_DMAT; l++)
705
+ for (size_t k = 0; k < nd_u; k++)
706
+ mat(k*ORIG::DIM_DMAT*DIM_ELEMENT+j*ORIG::DIM_DMAT+l, i) = dshape_u_ref(k*ORIG::DIM_DMAT+l, 0);
707
+ }
708
+
709
+ for (size_t j = 0; j < ORIG::DIM_DMAT; j++)
710
+ for (size_t k = 0; k < nd_u; k++)
711
+ {
712
+ Vec<DIM_ELEMENT,SIMD<double>> dshape_u_ref;
713
+ Vec<DIM_SPACE,SIMD<double>> dshape_u;
714
+
715
+ for (size_t l = 0; l < DIM_ELEMENT; l++)
716
+ dshape_u_ref(l) = mat(k*ORIG::DIM_DMAT*DIM_ELEMENT+l*DIM_ELEMENT+j, i);
717
+
718
+ dshape_u = Trans(mir[i].GetJacobianInverse()) * dshape_u_ref;
719
+
720
+ for (size_t l = 0; l < DIM_SPACE; l++)
721
+ mat(k*ORIG::DIM_DMAT*DIM_SPACE+l*ORIG::DIM_DMAT+j, i) = dshape_u(l);
722
+ }
723
+ }
724
+ }
725
+
726
+
727
+
728
+ using BASE::ApplySIMDIR;
729
+ static void ApplySIMDIR (const FiniteElement & fel, const SIMD_BaseMappedIntegrationRule & bmir,
730
+ BareSliceVector<double> x, BareSliceMatrix<SIMD<double>> y)
731
+ {
732
+ // ApplySIMDDShapeFE<FEL,ORIG::DIM_SPACE,ORIG::DIM_ELEMENT,ORIG::DIM_DMAT>(static_cast<const FEL&>(fel), bmir, x, y, eps());
733
+ // return;
734
+
735
+ constexpr size_t BS = 16; // number of simd-points
736
+ size_t maxnp = min2(BS, bmir.Size());
737
+ size_t size = (maxnp+1)*SIMD<double>::Size()*500 + 5*ORIG::DIM_DMAT*BS*sizeof(SIMD<double>);
738
+ size *= 4;
739
+ STACK_ARRAY(char, data, size);
740
+ LocalHeap lh(data, size);
741
+
742
+ auto & mir = static_cast<const SIMD_MappedIntegrationRule<DIM_ELEMENT,DIM_SPACE>&> (bmir);
743
+ auto & ir = mir.IR();
744
+ const ElementTransformation & trafo = mir.GetTransformation();
745
+
746
+ y.AddSize(ORIG::DIM_DMAT*DIM_SPACE, mir.Size()) = SIMD<double>(0.);
747
+ for (size_t base = 0; base < ir.Size(); base += BS)
748
+ {
749
+ HeapReset hr(lh);
750
+ size_t num = std::min(BS, ir.Size()-base);
751
+ FlatMatrix<SIMD<double>> hxi(ORIG::DIM_DMAT, 4*num, lh);
752
+
753
+ static constexpr double dist[] = { 1, -1, 2, -2 };
754
+ static constexpr double weight[] = { 8/12., -8/12., -1/12., 1/12. };
755
+
756
+ for (int j = 0; j < DIM_ELEMENT; j++)
757
+ {
758
+ HeapReset hr(lh);
759
+
760
+ SIMD_IntegrationRule iri(4*num*SIMD<double>::Size(), lh);
761
+
762
+ for (int k = 0; k < num; k++)
763
+ for (int i = 0; i < 4; i++)
764
+ {
765
+ iri[4*k+i] = ir[base+k];
766
+ iri[4*k+i](j) += dist[i]*eps();
767
+ }
768
+
769
+ SIMD_MappedIntegrationRule<DIM_ELEMENT,DIM_SPACE> mir2(iri, trafo, lh);
770
+ ORIG::ApplySIMDIR (fel, mir2, x, hxi);
771
+
772
+ for (int k = 0; k < num; k++)
773
+ {
774
+ Vec<ORIG::DIM_DMAT, SIMD<double>> hxk =
775
+ weight[0]/eps() * hxi.Col(4*k) +
776
+ weight[1]/eps() * hxi.Col(4*k+1) +
777
+ weight[2]/eps() * hxi.Col(4*k+2) +
778
+ weight[3]/eps() * hxi.Col(4*k+3);
779
+
780
+ auto jacinv = mir[base+k].GetJacobianInverse();
781
+ for (int l = 0; l < ORIG::DIM_DMAT; l++)
782
+ for (int m = 0; m < DIM_SPACE; m++)
783
+ y(m*ORIG::DIM_DMAT+l, base+k) += jacinv(j,m) * hxk(l); // , k);
784
+ }
785
+ }
786
+ }
787
+ }
788
+
789
+
790
+
791
+
792
+ using BASE::AddTransSIMDIR;
793
+ static void AddTransSIMDIR (const FiniteElement & fel, const SIMD_BaseMappedIntegrationRule & bmir,
794
+ BareSliceMatrix<SIMD<double>> x, BareSliceVector<double> y)
795
+ {
796
+ // AddTransSIMDDShapeFE<FEL,DIM_SPACE,DIM_ELEMENT,ORIG::DIM_DMAT>(static_cast<const FEL&>(fel), bmir, x, y, eps());
797
+ // return;
798
+
799
+ // auto & fel_u = static_cast<const FEL&>(fel);
800
+ constexpr size_t BS = 64; // number of simd-points
801
+ size_t maxnp = std::min(BS, bmir.Size());
802
+ size_t size = (maxnp+1)*SIMD<double>::Size()*500;
803
+
804
+ STACK_ARRAY(char, data, size);
805
+ LocalHeap lh(data, size);
806
+
807
+ auto & mir = static_cast<const SIMD_MappedIntegrationRule<DIM_ELEMENT,DIM_SPACE>&> (bmir);
808
+ auto & ir = mir.IR();
809
+ const ElementTransformation & trafo = mir.GetTransformation();
810
+
811
+ for (size_t base = 0; base < ir.Size(); base += BS)
812
+ {
813
+ HeapReset hr(lh);
814
+ size_t num = min2(BS, ir.Size()-base);
815
+
816
+ FlatMatrix<SIMD<double>> hx1(ORIG::DIM_DMAT, num, lh);
817
+ FlatMatrix<SIMD<double>> hx(ORIG::DIM_DMAT, num, lh);
818
+
819
+ for (size_t j = 0; j < DIM_ELEMENT; j++)
820
+ {
821
+ // hx = (F^-1 * x).Row(j)
822
+ for (size_t k = 0; k < num; k++)
823
+ {
824
+ auto jacinv = mir[base+k].GetJacobianInverse();
825
+ for (int l = 0; l < ORIG::DIM_DMAT; l++)
826
+ {
827
+ SIMD<double> sum = 0;
828
+ for (int m = 0; m < DIM_SPACE; m++)
829
+ sum += jacinv(j,m) * x(m*ORIG::DIM_DMAT+l, base+k);
830
+ hx(l,k) = sum;
831
+ }
832
+ }
833
+
834
+ double dist[] = { 1, -1, 2, -2 };
835
+ double weight[] = { 8/12., -8/12., -1/12., 1/12. };
836
+ for (int i = 0; i < 4; i++)
837
+ {
838
+ HeapReset hr(lh);
839
+ SIMD_IntegrationRule irl(num*SIMD<double>::Size(), lh);
840
+ for (size_t k = 0; k < irl.Size(); k++)
841
+ {
842
+ irl[k] = ir[base+k];
843
+ irl[k](j) += dist[i]*eps();
844
+ }
845
+ SIMD_MappedIntegrationRule<DIM_ELEMENT,DIM_SPACE> mirl(irl, trafo, lh);
846
+ hx1 = weight[i]/eps() * hx;
847
+ // fel_u.AddTrans (mirl, hx1, y);
848
+ ORIG::AddTransSIMDIR(fel, mirl, hx1, y);
849
+ irl.NothingToDelete();
850
+ }
851
+ }
852
+ }
853
+ }
854
+ };
855
+ }
856
+
857
+ #endif