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,1107 @@
1
+ #ifndef FILE_HDIVHOFE_IMPL
2
+ #define FILE_HDIVHOFE_IMPL
3
+
4
+ /*********************************************************************/
5
+ /* File: hdivhofe_impl.hpp */
6
+ /* Author: A. Becirovic, S. Zaglmayr, J. Schoeberl */
7
+ /* Date: 15. Feb. 2003 */
8
+ /*********************************************************************/
9
+
10
+ #include "recursive_pol_tet.hpp"
11
+
12
+ namespace ngfem
13
+ {
14
+
15
+
16
+ template <>
17
+ class HDivHighOrderFE_Shape<ET_TRIG> : public HDivHighOrderFE<ET_TRIG>
18
+ {
19
+ public:
20
+ template<typename Tx, typename TFA>
21
+ // void T_CalcShape (Tx hx[2], TFA & shape) const;
22
+ INLINE void T_CalcShape (TIP<2,Tx> ip, TFA & shape) const;
23
+
24
+ template <typename MIP, typename TFA>
25
+ inline void CalcDualShape2 (const MIP & mip, TFA & shape) const;
26
+ };
27
+
28
+ template <>
29
+ class HDivHighOrderFE_Shape<ET_QUAD> : public HDivHighOrderFE<ET_QUAD>
30
+ {
31
+ public:
32
+ template<typename Tx, typename TFA>
33
+ INLINE void T_CalcShape (TIP<2,Tx> ip, TFA & shape) const;
34
+
35
+ template <typename MIP, typename TFA>
36
+ inline void CalcDualShape2 (const MIP & mip, TFA & shape) const
37
+ {
38
+ throw Exception(string("CalcDualShape missing for HighOrderHDiv element ")+ElementTopology::GetElementName(ET_QUAD));
39
+ }
40
+ };
41
+
42
+ template<>
43
+ class HDivHighOrderFE_Shape<ET_TET> : public HDivHighOrderFE<ET_TET>
44
+ {
45
+ typedef TetShapesInnerLegendre T_INNERSHAPES;
46
+ typedef TetShapesFaceLegendre T_FACESHAPES;
47
+ public:
48
+ template<typename Tx, typename TFA>
49
+ inline void T_CalcShape (TIP<3,Tx> ip, TFA & shape) const;
50
+ template <typename MIP, typename TFA>
51
+ inline void CalcDualShape2 (const MIP & mip, TFA & shape) const;
52
+ };
53
+
54
+ template<>
55
+ class HDivHighOrderFE_Shape<ET_PRISM> : public HDivHighOrderFE<ET_PRISM>
56
+ {
57
+ typedef TrigShapesInnerLegendre T_TRIGFACESHAPES;
58
+ public:
59
+ template<typename Tx, typename TFA>
60
+ void T_CalcShape (TIP<3,Tx> ip, TFA & shape) const;
61
+
62
+ template <typename MIP, typename TFA>
63
+ inline void CalcDualShape2 (const MIP & mip, TFA & shape) const
64
+ {
65
+ throw Exception(string("CalcDualShape missing for HighOrderHDiv element ")+ElementTopology::GetElementName(ET_PRISM));
66
+ }
67
+ };
68
+
69
+ template<>
70
+ class HDivHighOrderFE_Shape<ET_HEX> : public HDivHighOrderFE<ET_HEX>
71
+ {
72
+ public:
73
+ template<typename Tx, typename TFA>
74
+ void T_CalcShape (TIP<3,Tx> ip, TFA & shape) const;
75
+
76
+ template <typename MIP, typename TFA>
77
+ inline void CalcDualShape2 (const MIP & mip, TFA & shape) const
78
+ {
79
+ throw Exception(string("CalcDualShape missing for HighOrderHDiv element ")+ElementTopology::GetElementName(ET_HEX));
80
+ }
81
+ };
82
+
83
+
84
+
85
+
86
+
87
+
88
+ template<typename Tx, typename TFA>
89
+ INLINE void HDivHighOrderFE_Shape<ET_TRIG> :: T_CalcShape (TIP<2,Tx> ip, TFA & shape) const
90
+ {
91
+ if (only_ho_div && (order_inner[0] <= 1)) return;
92
+
93
+ Tx lam[3] = { ip.x, ip.y, 1-ip.x-ip.y };
94
+
95
+ int ii = 3;
96
+ if (!only_ho_div)
97
+ {
98
+ for (int i = 0; i < 3; i++)
99
+ {
100
+ IVec<2> e = ET_trait<ET_TRIG>::GetEdgeSort (i, vnums);
101
+
102
+ //Nedelec low order edge shape function
103
+ shape[i] = uDv_minus_vDu (lam[e[0]], lam[e[1]]);
104
+
105
+ int p = order_facet[i][0];
106
+ //HO-Edge shapes (Gradient Fields)
107
+ if(p > 0) // && usegrad_edge[i])
108
+ {
109
+ Tx xi = lam[e[1]] - lam[e[0]];
110
+
111
+ // LegendrePolynomial::
112
+ IntLegNoBubble::
113
+ EvalScaledMult (p-1, xi, lam[e[0]]+lam[e[1]],
114
+ lam[e[0]]*lam[e[1]],
115
+ SBLambda([&](int i, Tx v)
116
+ {
117
+ shape[ii++] = Du(v);
118
+ }));
119
+ }
120
+ }
121
+ }
122
+ else
123
+ ii = 0;
124
+
125
+ //Inner shapes (Face)
126
+ int p = order_inner[0];
127
+ int pd = p;
128
+ if (RT) pd++;
129
+
130
+ if (pd > 1)
131
+ {
132
+ IVec<4> fav = ET_trait<ET_TRIG>::GetFaceSort (0, vnums);
133
+
134
+ // rotated gradients:
135
+ //if(!only_ho_div)
136
+ if(p>1 && !only_ho_div)
137
+ {
138
+ DubinerBasis::EvalMult (p-2, lam[fav[0]], lam[fav[1]],
139
+ lam[fav[0]]*lam[fav[1]]*lam[fav[2]],
140
+ SBLambda ([&](int nr, Tx val)
141
+ {
142
+ shape[ii++] = Du(val);
143
+ }));
144
+ }
145
+
146
+ if (!ho_div_free)
147
+ {
148
+ // Tx x = lam[fav[0]];
149
+ // Tx y = lam[fav[1]];
150
+ LegendrePolynomial leg;
151
+ // IntLegNoBubble leg;
152
+ /*
153
+ leg.EvalScaledMult1Assign
154
+ (pd-2, y-(1-x-y), 1-x, y*(1-x-y),
155
+ SBLambda ([&] (int i, Tx val1) LAMBDA_INLINE
156
+ {
157
+ JacobiPolynomialAlpha jac(1+2*i);
158
+ jac.EvalMult1Assign
159
+ (pd-2-i, 2*x-1, x,
160
+ SBLambda([&](int j, Tx val2)
161
+ {
162
+ shape[ii++] = uDv_minus_vDu (val1,val2);
163
+ }));
164
+ }));
165
+
166
+ // rec_pol * Nedelec0
167
+ leg.EvalMult
168
+ (pd-2, 2*x-1, x,
169
+ SBLambda([&] (int j, Tx val)
170
+ {
171
+ shape[ii++] = wuDv_minus_wvDu (lam[fav[1]], lam[fav[2]], val);
172
+ }));
173
+ */
174
+ // the correct RT !
175
+ auto l0 = lam[0];
176
+ auto l1 = lam[1];
177
+ auto l2 = lam[2];
178
+
179
+ DubinerBasis::EvalMult (pd-2, lam[0], lam[1],
180
+ lam[0],
181
+ SBLambda ([l1,l2,shape,&ii](int nr, Tx val)
182
+ {
183
+ shape[ii++] = wuDv_minus_wvDu (l1, l2, val);
184
+ }));
185
+
186
+ LegendrePolynomial::EvalScaledMult
187
+ (pd-2, l2-l1, l1+l2, l2,
188
+ SBLambda([shape,l0,l1,&ii] (int j, Tx val)
189
+ {
190
+ shape[ii++] = wuDv_minus_wvDu (l1, l0, val);
191
+ }));
192
+ }
193
+
194
+ }
195
+ }
196
+
197
+
198
+
199
+
200
+ template <typename MIP, typename TFA>
201
+ inline void HDivHighOrderFE_Shape<ET_TRIG>::CalcDualShape2 (const MIP & mip, TFA & shape) const
202
+ {
203
+ auto & ip = mip.IP();
204
+ typedef typename std::remove_const<typename std::remove_reference<decltype(mip.IP()(0))>::type>::type T;
205
+ T x = ip(0), y = ip(1);
206
+ T lam[3] = { x, y, 1-x-y };
207
+ Vec<2,T> pnts[3] = { { 1, 0 }, { 0, 1 } , { 0, 0 } };
208
+ int facetnr = ip.FacetNr();
209
+
210
+ int ii = 3;
211
+
212
+ if (ip.VB() == BND)
213
+ { // facet shapes
214
+ for (int i = 0; i < 3; i++)
215
+ {
216
+ int p = order_facet[i][0];
217
+ if (i == facetnr)
218
+ {
219
+
220
+ IVec<2> e = GetEdgeSort (i, vnums);
221
+ T xi = lam[e[1]]-lam[e[0]];
222
+ Vec<2,T> tauref = pnts[e[1]] - pnts[e[0]];
223
+
224
+ Vec<2,T> nvref = Vec<2,T>(tauref[1],-tauref[0]);
225
+ auto nv = L2Norm(nvref) / L2Norm(Trans(mip.GetJacobianInverse())*nvref) * Trans(mip.GetJacobianInverse())*nvref; // latest version, see TET for derivation
226
+
227
+ LegendrePolynomial::Eval
228
+ (p, xi,
229
+ SBLambda([&] (size_t nr, T val)
230
+ {
231
+ auto vshape = val * nv;
232
+ if (nr==0)
233
+ shape[i] = vshape;
234
+ else
235
+ shape[ii+nr-1] = vshape;
236
+ }));
237
+ }
238
+ ii += p;
239
+ }
240
+ }
241
+ else
242
+ {
243
+ for (int i = 0; i < 3; i++)
244
+ ii += order_facet[i][0];
245
+ }
246
+ if (ip.VB() == VOL)
247
+ {
248
+ DubinerBasis::Eval(order_inner[0]-2+RT, x, y,
249
+ SBLambda([&] (size_t nr, auto val)
250
+ {
251
+ shape[ii++] = Trans(mip.GetJacobianInverse())*Vec<2,T> (val, 0);
252
+ if(RT)
253
+ shape[ii++] = Trans(mip.GetJacobianInverse())*Vec<2,T> (0,val);
254
+ else
255
+ shape[ii++] = Trans(mip.GetJacobianInverse())*Vec<2,T> (val*y, -val*x);
256
+ }));
257
+
258
+ if(!RT)
259
+ LegendrePolynomial::Eval(order_inner[0]-2,y,
260
+ SBLambda([&] (size_t nr, auto val)
261
+ {
262
+ shape[ii++] = Trans(mip.GetJacobianInverse())*Vec<2,T>(0,val);
263
+ }));
264
+
265
+ }
266
+ }
267
+
268
+
269
+
270
+
271
+
272
+ template<typename Tx, typename TFA>
273
+ void HDivHighOrderFE_Shape<ET_QUAD> :: T_CalcShape (TIP<2,Tx> ip, TFA & shape) const
274
+ {
275
+
276
+ if (only_ho_div && (order_inner[0]<=1 && order_inner[1]<=1)) return;
277
+ Tx x = ip.x, y = ip.y;
278
+
279
+ Tx lami[4] = {(1-x)*(1-y),x*(1-y),x*y,(1-x)*y};
280
+ Tx sigma[4] = {(1-x)+(1-y),x+(1-y),x+y,(1-x)+y};
281
+
282
+ size_t ii = 4;
283
+ STACK_ARRAY(Tx, mem, 2*order+4);
284
+ Tx * pol_xi = &mem[0];
285
+ Tx * pol_eta = &mem[order+2];
286
+
287
+ if (!only_ho_div){
288
+ // edges
289
+ // const EDGE * edges = ElementTopology::GetEdges (ET_QUAD);
290
+ for (int i = 0; i < 4; i++)
291
+ {
292
+ int p = order_facet[i][0];
293
+ // int es = edges[i][0], ee = edges[i][1];
294
+ // if (vnums[es] > vnums[ee]) swap (es, ee);
295
+ IVec<2> e = GetVertexOrientedEdge (i);
296
+
297
+ Tx xi = sigma[e[1]]-sigma[e[0]];
298
+ Tx lam_e = lami[e[1]]+lami[e[0]];
299
+
300
+ // Nedelec0-shapes
301
+ shape[i] = uDv (0.5 * lam_e, xi);
302
+
303
+ // High Order edges ... Gradient fields
304
+ // if(usegrad_edge[i])
305
+ {
306
+ IntLegNoBubble::
307
+ EvalMult (p-1, xi, 0.25*(1-xi*xi)*lam_e,
308
+ SBLambda([&] (size_t j, Tx val)
309
+ {
310
+ shape[ii++] = Du(val);
311
+ }));
312
+ }
313
+ }
314
+ }
315
+ else
316
+ ii = 0;
317
+
318
+ // IVec<2> p = order_face[0]; // (order_cell[0],order_cell[1]);
319
+ IVec<2> p (order_inner[0], order_inner[1]); // (order_cell[0],order_cell[1]);
320
+ int fmax = 0;
321
+ for (int j = 1; j < 4; j++)
322
+ if (vnums[j] > vnums[fmax])
323
+ fmax = j;
324
+
325
+ int f1 = (fmax+3)%4;
326
+ int f2 = (fmax+1)%4;
327
+ if(vnums[f2] > vnums[f1]) swap(f1,f2); // fmax > f2 > f1;
328
+
329
+ Tx xi = sigma[fmax]-sigma[f1]; // in [-1,1]
330
+ Tx eta = sigma[fmax]-sigma[f2]; // in [-1,1]
331
+
332
+ /*
333
+ T_ORTHOPOL::Calc(p[0]+1, xi,pol_xi);
334
+ T_ORTHOPOL::Calc(p[1]+1,eta,pol_eta);
335
+ */
336
+ IntLegNoBubble::EvalMult (p[0]-1, xi, 0.25*(1-xi*xi), pol_xi);
337
+ IntLegNoBubble::EvalMult (p[1]-1, eta, 0.25*(1-eta*eta), pol_eta);
338
+ if (!only_ho_div)
339
+ {
340
+ //Gradient fields
341
+ // if(usegrad_face[0])
342
+ for (size_t k = 0; k < p[0]; k++)
343
+ {
344
+ auto val_k = pol_xi[k];
345
+ for (size_t j= 0; j < p[1]; j++)
346
+ shape[ii++] = Du(val_k*pol_eta[j]);
347
+ }
348
+ }
349
+
350
+ if (!ho_div_free)
351
+ {
352
+ //Rotation of Gradient fields
353
+ for (int k = 0; k < p[0]; k++)
354
+ for (int j= 0; j < p[1]; j++)
355
+ shape[ii++] = uDv_minus_vDu (pol_eta[j], pol_xi[k]);
356
+
357
+ //Missing ones
358
+ for(int j = 0; j< p[0]; j++)
359
+ shape[ii++] = uDv (0.5*pol_xi[j], eta);
360
+
361
+ for(int j = 0; j < p[1]; j++)
362
+ shape[ii++] = uDv (0.5*pol_eta[j], xi);
363
+ }
364
+ }
365
+
366
+
367
+
368
+
369
+
370
+
371
+
372
+
373
+
374
+
375
+
376
+
377
+
378
+
379
+
380
+ /// compute shape
381
+ template<typename Tx, typename TFA>
382
+ inline void HDivHighOrderFE_Shape<ET_TET> :: T_CalcShape (TIP<3,Tx> ip, TFA & shape) const
383
+ {
384
+ if (only_ho_div && order_inner[0]<=1) return;
385
+ Tx x = ip.x, y = ip.y, z = ip.z;
386
+ Tx lami[4] = { x, y, z, 1-x-y-z };
387
+
388
+
389
+ size_t ii = 4;
390
+ if (!only_ho_div)
391
+ {
392
+ const FACE * faces = ElementTopology::GetFaces (ET_TET);
393
+ for (size_t i = 0; i < 4; i++)
394
+ {
395
+ int p = order_facet[i][0];
396
+
397
+ int fav[3];
398
+ for(int j = 0; j < 3; j++) fav[j]=faces[i][j];
399
+
400
+ //Sort vertices first edge op minimal vertex
401
+ if(vnums[fav[0]] > vnums[fav[1]]) swap(fav[0],fav[1]);
402
+ if(vnums[fav[1]] > vnums[fav[2]]) swap(fav[1],fav[2]);
403
+ if(vnums[fav[0]] > vnums[fav[1]]) swap(fav[0],fav[1]);
404
+ int fop = 6 - fav[0] - fav[1] - fav[2];
405
+
406
+ // RT lowest order
407
+ shape[i] = uDvDw_Cyclic (lami[fav[0]], lami[fav[1]], lami[fav[2]]);
408
+
409
+ Tx xi = lami[fav[1]]-lami[fav[0]];
410
+ Tx sum = lami[fav[1]]+lami[fav[0]];
411
+ Tx bub = lami[fav[1]]*lami[fav[0]];
412
+ Tx eta = lami[fav[2]];
413
+ Tx zeta = lami[fop];
414
+
415
+ // Typ 1
416
+ IntLegNoBubble::
417
+ EvalScaledMult (p-1, xi, sum, bub,
418
+ SBLambda([&](int k, Tx polk) LAMBDA_INLINE
419
+ {
420
+ IntegratedJacobiPolynomialAlpha jac(2*k+3);
421
+ jac.EvalScaledMult(p-k-1, eta-sum, 1-zeta, eta,
422
+ SBLambda ([&](int i, Tx val) LAMBDA_INLINE
423
+ {
424
+ shape[ii++] =
425
+ Du_Cross_Dv (val, polk);
426
+ }));
427
+ }));
428
+
429
+ IntegratedJacobiPolynomialAlpha jac(3);
430
+ jac.EvalScaledMult(p-1, eta-sum, 1-zeta, eta,
431
+ SBLambda ([&](int i, Tx val) LAMBDA_INLINE
432
+ {
433
+ shape[ii++] =
434
+ curl_uDvw_minus_Duvw (lami[fav[0]], lami[fav[1]], val);
435
+ }));
436
+ }
437
+ }
438
+ else
439
+ ii = 0;
440
+ // cell-based shapes
441
+ int p = order_inner[0];
442
+ int pc = order_inner[0]; // should be order_inner_curl
443
+ // int pp = max2(p,pc);
444
+ int pd = p;
445
+ if (RT) pd++;
446
+ if ( order >= 2 )
447
+ {
448
+ STACK_ARRAY(Tx, mem, 3*order);
449
+ Tx * adpol1 = &mem[0];
450
+ Tx * adpol2 = &mem[order];
451
+ Tx * adpol3 = &mem[2*order];
452
+
453
+ T_INNERSHAPES::CalcSplitted(order+2, lami[0]-lami[3], lami[1], lami[2], adpol1, adpol2, adpol3 );
454
+
455
+ if (pc >= 2 && !only_ho_div){
456
+ // Curl-Fields
457
+ for (int i = 0; i <= pc-2; i++)
458
+ for (int j = 0; j <= pc-2-i; j++)
459
+ for (int k = 0; k <= pc-2-i-j; k++)
460
+ {
461
+ // grad v x grad (uw)
462
+ shape[ii++] = Du_Cross_Dv (adpol2[j], adpol1[i]*adpol3[k]);
463
+
464
+ // grad w x grad (uv)
465
+ shape[ii++] = Du_Cross_Dv (adpol3[k], adpol1[i]*adpol2[j]);
466
+ }
467
+
468
+
469
+ // Type 1 : Curl(T3)
470
+ // ned = lami[0] * nabla(lami[3]) - lami[3] * nabla(lami[0])
471
+ for (int j= 0; j <= pc-2; j++)
472
+ for (int k = 0; k <= pc-2-j; k++)
473
+ shape[ii++] = curl_uDvw_minus_Duvw (lami[0], lami[3], adpol2[j]*adpol3[k]);
474
+ }
475
+
476
+ if (!ho_div_free)
477
+ {
478
+ // Type 2:
479
+ // (grad u x grad v) w
480
+ /*
481
+ for (int i = 0; i <= pd-2; i++)
482
+ for (int j = 0; j <= pd-2-i; j++)
483
+ for (int k = 0; k <= pd-2-i-j; k++)
484
+ shape[ii++] = wDu_Cross_Dv<3> (adpol1[i], adpol2[j], adpol3[k]);
485
+
486
+ // (ned0 x grad v) w
487
+ for (int j = 0; j <= pd-2; j++)
488
+ for (int k= 0; k <= pd-2-j; k++)
489
+ shape[ii++] = wDu_Cross_Dv<3> (lami[0], adpol2[j], lami[3]*adpol3[k]);
490
+
491
+ // Type 3:
492
+ // (ned0 x e_z) v = (N_y, -N_x,0)^T * v )
493
+ for (int j=0; j<=pd-2; j++)
494
+ shape[ii++] = wDu_Cross_Dv<3> (lami[0], z, lami[3]*adpol2[j]);
495
+ */
496
+
497
+
498
+
499
+ DubinerBasis3D::EvalMult (pd-2, lami[0], lami[1], lami[2],
500
+ lami[0],
501
+ SBLambda ([&](int nr, Tx val)
502
+ {
503
+ shape[ii++] = z_times_uDvDw_Cyclic (lami[1], lami[2], lami[3], val);
504
+ }));
505
+
506
+
507
+ DubinerBasis::EvalScaledMult (pd-2, lami[1], lami[2], 1-lami[0],
508
+ lami[1],
509
+ SBLambda ([&](int nr, Tx val)
510
+ {
511
+ shape[ii++] = z_times_uDvDw_Cyclic (lami[0], lami[2], lami[3], val);
512
+ }));
513
+
514
+ LegendrePolynomial::EvalScaledMult
515
+ (pd-2, lami[2]-lami[3], lami[2]+lami[3], lami[2],
516
+ SBLambda([&] (int j, Tx val)
517
+ {
518
+ shape[ii++] = z_times_uDvDw_Cyclic (lami[0], lami[1], lami[3], val);
519
+ }));
520
+ }
521
+ }
522
+ }
523
+
524
+
525
+
526
+
527
+
528
+ template <typename MIP, typename TFA>
529
+ inline void HDivHighOrderFE_Shape<ET_TET> ::
530
+ CalcDualShape2 (const MIP & mip, TFA & shape) const
531
+ {
532
+ typedef typename std::remove_const<typename std::remove_reference<decltype(mip.IP()(0))>::type>::type T;
533
+ auto & ip = mip.IP();
534
+ T x = ip(0), y = ip(1), z = ip(2);
535
+ T lam[4] = { x, y, z, 1-x-y-z };
536
+ Vec<3> pnts[4] = { { 1, 0, 0 }, { 0, 1, 0 } , { 0, 0, 1 }, { 0, 0, 0 } };
537
+ int facetnr = ip.FacetNr();
538
+ int ii = 4;
539
+
540
+ if (ip.VB() == BND)
541
+ { // facet shapes
542
+ for (int i = 0; i < 4; i++)
543
+ {
544
+ int p = order_facet[i][0];
545
+ if (i == facetnr)
546
+ {
547
+ IVec<4> fav = GetFaceSort (i, vnums);
548
+ T xi = lam[fav[0]]-lam[fav[2]];
549
+ T eta = lam[fav[1]]-lam[fav[2]];
550
+ Vec<3,T> tauref1 = pnts[fav[1]] - pnts[fav[0]];
551
+ Vec<3,T> tauref2 = pnts[fav[2]] - pnts[fav[0]];
552
+ Vec<3,T> nvref = Cross(tauref1,tauref2);
553
+
554
+
555
+
556
+ // Rewrite new version: use often that Cof(F) = Det(F)*F^{-T}
557
+ // Cross(F*tauref1, F*tauref2): Cross(F*tauref1,F*tauref2)*v = Det(F*tauref1,F*tauref2,v) = Det(F)*Det(tauref1,tauref2,F^{-1}v) = Det(F)F^{-T}Cross(tauref1,tauref2)*v = Cof(F)*nvref*v
558
+ // -> Cross(F*tauref1, F*tauref2) = Cof(F)*nvref
559
+ // -> nv = L2Norm(nvref) / L2Norm(Cof(F)*nvref) * Cof(F) * nvref;
560
+ // 1/L2Norm(Cof(F)*nvref) * Cof(F)*nvref = Det(F)/Det(F) * 1/L2Norm(Cof(F)*nvref) * Cof(F)*nvref = 1/L2Norm(1/Det(F)*Cof(F)*nvref) * 1/Det(F)*Cof(F)*nvref
561
+ // = 1/L2Norm(F^{-T}*nvref) * F^{-T}*nvref
562
+ // -> nv = L2Norm(nvref)/L2Norm(F^{-T}*nvref) * F^{-T}*nvref
563
+ Vec<3,T> nv = L2Norm(nvref) / L2Norm(Trans(mip.GetJacobianInverse())*nvref) * Trans(mip.GetJacobianInverse())*nvref; // latest version
564
+
565
+ DubinerBasis::Eval(order_facet[i][0], xi, eta,
566
+ SBLambda([&] (size_t nr, auto val)
567
+ {
568
+ Vec<3,T> vshape = val * nv;
569
+ if (nr==0)
570
+ shape[i] = vshape;
571
+ else
572
+ shape[ii+nr-1] = vshape;
573
+ }));
574
+ }
575
+ ii += (p+1)*(p+2)/2-1;
576
+ }
577
+ }
578
+ else
579
+ {
580
+ for (int i = 0; i < 4; i++)
581
+ ii += (order_facet[i][0]+1)*(order_facet[i][0]+2)/2-1;
582
+ }
583
+
584
+ if (ip.VB() == VOL && order > 1)
585
+ {
586
+ DubinerBasis3D::Eval (order-2, lam[0], lam[1], lam[2],
587
+ SBLambda([&](size_t j, T val) LAMBDA_INLINE
588
+ {
589
+ if(RT)
590
+ {
591
+ shape[ii++] = Trans(mip.GetJacobianInverse())*Vec<3,T>(val,0,0);
592
+ shape[ii++] = Trans(mip.GetJacobianInverse())*Vec<3,T>(0,val,0);
593
+ shape[ii++] = Trans(mip.GetJacobianInverse())*Vec<3,T>(0,0,val);
594
+ }
595
+ else
596
+ {
597
+ shape[ii++] = Trans(mip.GetJacobianInverse())*Cross(Vec<3,T>(val,0,0),Vec<3,T>(x,y,z));
598
+ shape[ii++] = Trans(mip.GetJacobianInverse())*Cross(Vec<3,T>(0,val,0),Vec<3,T>(x,y,z));
599
+ shape[ii++] = Trans(mip.GetJacobianInverse())*Vec<3,T>(val, 0, 0);
600
+ }
601
+ }));
602
+ if (!RT)
603
+ {
604
+ DubinerBasis::Eval(order_inner[0]-2, x, y,
605
+ SBLambda([&] (size_t nr, auto val)
606
+ {
607
+ shape[ii++] = Trans(mip.GetJacobianInverse())*Cross(Vec<3,T>(0,0,val),Vec<3,T>(x,y,z));
608
+ }));
609
+
610
+ DubinerBasis::Eval(order_inner[0]-2, y, z,
611
+ SBLambda([&] (size_t nr, auto val)
612
+ {
613
+ shape[ii++] = Trans(mip.GetJacobianInverse())*Vec<3,T>(0,val,0);
614
+ }));
615
+
616
+ LegendrePolynomial::Eval(order_inner[0]-2,z,
617
+ SBLambda([&] (size_t nr, auto val)
618
+ {
619
+ shape[ii++] = Trans(mip.GetJacobianInverse())*Vec<3,T>(0,0,val);
620
+ }));
621
+ }
622
+ }
623
+ }
624
+
625
+
626
+
627
+
628
+
629
+
630
+
631
+ template<typename Tx, typename TFA>
632
+ void HDivHighOrderFE_Shape<ET_PRISM> :: T_CalcShape (TIP<3,Tx> ip, TFA & shape) const
633
+ {
634
+ Tx x = ip.x, y = ip.y, z = ip.z;
635
+
636
+ Tx lami[6] = { x, y, 1-x-y, x, y, 1-x-y };
637
+ Tx muz[6] = { 1-z, 1-z, 1-z, z, z, z };
638
+
639
+ const FACE * faces = ElementTopology::GetFaces (ET_PRISM);
640
+
641
+ ArrayMem<Tx,20> adpolxy1(order+4),adpolxy2(order+4);
642
+ ArrayMem<Tx,20> adpolz(order+4);
643
+ ArrayMem<Tx,10> adpol1(order), adpol2(order), adpol3(order);
644
+
645
+ // trig faces
646
+
647
+ int ii = 5;
648
+ for (int i = 0; i < 2; i++)
649
+ {
650
+ int p = order_facet[i][0];
651
+ int fav[3] = {faces[i][0], faces[i][1], faces[i][2]};
652
+
653
+ if(vnums[fav[0]] > vnums[fav[1]]) swap(fav[0],fav[1]);
654
+ if(vnums[fav[1]] > vnums[fav[2]]) swap(fav[1],fav[2]);
655
+ if(vnums[fav[0]] > vnums[fav[1]]) swap(fav[0],fav[1]);
656
+
657
+ shape[i] = wDu_Cross_Dv (lami[fav[0]], lami[fav[1]], muz[fav[0]]);
658
+
659
+ Tx xi = lami[fav[1]]-lami[fav[0]];
660
+ Tx eta = lami[fav[2]];
661
+
662
+ Tx sum = lami[fav[1]]+lami[fav[0]];
663
+ Tx bub = lami[fav[1]]*lami[fav[0]];
664
+ // AutoDiff<3> zeta = lami[fop];
665
+
666
+
667
+ /*
668
+ T_TRIGFACESHAPES::CalcSplitted(p+2,xi,eta,adpol1,adpol2);
669
+ for (int k = 0; k < adpol1.Size(); k++)
670
+ adpol1[k] *= 0.5;
671
+
672
+ // Curl (Type 2) 2*grad v x grad u
673
+ for (int j = 0; j <= p-1; j++)
674
+ for (int k = 0; k <= p-1-j; k++)
675
+ shape[ii++] = Du_Cross_Dv<3> (adpol2[k]*muz[fav[2]], adpol1[j]);
676
+
677
+ // Curl (Type 3) //curl( * v) = nabla v x ned + curl(ned)*v
678
+ for (int j = 0; j <= p-1; j++)
679
+ shape[ii++] = curl_uDvw_minus_Duvw<3> (lami[fav[0]], lami[fav[1]], adpol2[j]*muz[fav[2]]);
680
+ */
681
+
682
+ IntLegNoBubble::EvalScaledMult (p-1, xi, sum, bub, adpol1);
683
+
684
+ // Typ 1
685
+ for (int k = 0; k <= p-1; k++)
686
+ {
687
+ IntegratedJacobiPolynomialAlpha jac(2*k+3);
688
+ // jac.EvalScaledMult(p-1, eta-sum, 1-zeta, eta, adpol2);
689
+ jac.EvalMult(p-1, eta-sum, eta, adpol2);
690
+ for (int l = 0; l <= p-1-k; l++)
691
+ shape[ii++] = Du_Cross_Dv (adpol2[l]*muz[fav[2]], adpol1[k]);
692
+ }
693
+
694
+ IntegratedJacobiPolynomialAlpha jac(3);
695
+ // jac.EvalScaledMult(p-1, eta-sum, 1-zeta, eta, adpol2);
696
+ jac.EvalMult(p-1, eta-sum, eta, adpol2);
697
+ for (int j = 0; j <= p-1; j++)
698
+ shape[ii++] = curl_uDvw_minus_Duvw (lami[fav[0]], lami[fav[1]], adpol2[j]*muz[fav[2]]);
699
+ }
700
+
701
+ // quad faces
702
+ for (int i = 2; i < 5; i++)
703
+ {
704
+ IVec<2> p = order_facet[i];
705
+
706
+ int fmax = 0;
707
+ for (int j = 1; j < 4; j++)
708
+ if (vnums[faces[i][j]] < vnums[faces[i][fmax]]) fmax = j;
709
+
710
+ int fz = 3-fmax;
711
+ int ftrig = fmax^1;
712
+ int f = faces[i][fmax];
713
+ int f1 = faces[i][ftrig];
714
+ int f2 = faces[i][fz];
715
+
716
+ Tx xi = lami[faces[i][fmax]]-lami[faces[i][ftrig]];
717
+ Tx eta = 1-lami[faces[i][fmax]]-lami[faces[i][ftrig]];
718
+ Tx zeta = muz[faces[i][fmax]]-muz[faces[i][fz]];
719
+
720
+ int pp = int(max2(p[0],p[1]))+1;
721
+ /*
722
+ T_ORTHOPOL::CalcTrigExt(pp,xi,eta,adpolxy1);
723
+ T_ORTHOPOL::Calc(pp,zeta,adpolz);
724
+ */
725
+
726
+ Tx bub = lami[faces[i][fmax]]*lami[faces[i][ftrig]];
727
+ IntLegNoBubble::EvalScaledMult (pp-1, xi, 1-eta, 4*bub, adpolxy1);
728
+ IntLegNoBubble::EvalMult (pp-1, zeta, 1-zeta*zeta, adpolz);
729
+
730
+ double fac = (vnums[faces[i][fz]] > vnums[faces[i][ftrig]]) ? 1 : -1;
731
+
732
+ shape[i] = uDvDw_minus_DuvDw (lami[faces[i][fmax]],
733
+ lami[faces[i][ftrig]], -0.5*fac*zeta);
734
+
735
+
736
+ if (vnums[f1] < vnums[f2])
737
+ {
738
+ for (int k = 0; k <= p[0]-1; k++)
739
+ for (int j = 0; j <= p[1]-1; j++, ii++)
740
+ shape[ii] = Du_Cross_Dv (adpolxy1[k], -2*adpolz[j]);
741
+ }
742
+ else
743
+ {
744
+ for (int j = 0; j <= p[1]-1; j++)
745
+ for (int k = 0; k <= p[0]-1; k++, ii++)
746
+ shape[ii] = Du_Cross_Dv (adpolxy1[k], 2*adpolz[j]);
747
+ }
748
+
749
+
750
+ if (vnums[f1] < vnums[f2])
751
+ {
752
+ for (int j= 0; j <= p[0]-1; j++, ii++)
753
+ shape[ii] = Du_Cross_Dv (adpolxy1[j], zeta);
754
+ for(int j=0; j<= p[1]-1;j++,ii++)
755
+ shape[ii] = curl_uDvw_minus_Duvw (lami[f1], lami[f], 2*adpolz[j]);
756
+ }
757
+ else
758
+ {
759
+ for(int j = 0; j <= p[0]-1; j++,ii++)
760
+ shape[ii] = curl_uDvw_minus_Duvw (lami[f1], lami[f], 2*adpolz[j]);
761
+ for (int j= 0; j <= p[1]-1; j++, ii++)
762
+ shape[ii] = Du_Cross_Dv (adpolxy1[j], zeta);
763
+ }
764
+ }
765
+
766
+ int p = order_inner[0];
767
+ int pz = order_inner[2];
768
+ if(p >= 1 && pz >= 1)
769
+ {
770
+ T_TRIGFACESHAPES::CalcSplitted(p+2,x-y,1-x-y,adpolxy1,adpolxy2);
771
+ T_ORTHOPOL::Calc(pz+2,2*z-1,adpolz);
772
+
773
+
774
+ for(int i=0;i<=p-1;i++)
775
+ for(int j=0;j<=p-1-i;j++)
776
+ for(int k=0;k<=pz-1;k++)
777
+ shape[ii++] = Du_Cross_Dv (adpolxy1[i],adpolxy2[j]*adpolz[k]);
778
+
779
+ for(int i=0;i<=p-1;i++)
780
+ for(int j=0;j<=p-1-i;j++)
781
+ for(int k=0;k<=pz-1;k++)
782
+ shape[ii++] = curl_uDvw_minus_Duvw (adpolxy1[i],adpolxy2[j],adpolz[k]);
783
+
784
+ for(int j=0;j<=p-1;j++)
785
+ for (int k=0;k<=pz-1;k++)
786
+ shape[ii++] = curl_uDvw_minus_Duvw (x,y, adpolxy2[j]*adpolz[k]);
787
+
788
+ for(int i = 0; i <= p-1; i++)
789
+ for(int j = 0; j <= p-1-i; j++)
790
+ shape[ii++] = curl_uDvw_minus_Duvw (z,1-z, adpolxy1[i]*adpolxy2[j]);
791
+
792
+ if (!ho_div_free)
793
+ { // not yet verified
794
+ ScaledLegendrePolynomial (p, x-y, x+y, adpolxy1);
795
+ LegendrePolynomial (p, 1-2*x, adpolxy2);
796
+ LegendrePolynomial (pz, 1-2*z, adpolz);
797
+
798
+ /*
799
+ for (int i = 0; i <= p; i++)
800
+ for (int j = 0; j <= p-i; j++)
801
+ for (int k = 0; k <= pz; k++)
802
+ if (i+j+k > 0)
803
+ shape[ii++] = wDu_Cross_Dv<3> ((x-y)*adpolxy1[i], x*adpolxy2[j], z*(1-z)*adpolz[k]);
804
+ */
805
+
806
+ for (int i = 0; i <= p; i++)
807
+ for (int j = 0; j <= p-i; j++)
808
+ for (int k = 0; k < pz; k++)
809
+ shape[ii++] = wDu_Cross_Dv ((x-y)*adpolxy1[i], x*adpolxy2[j], z*(1-z)*adpolz[k]);
810
+
811
+ for (int i = 0; i < p; i++)
812
+ for (int j = 0; j < p-i; j++)
813
+ shape[ii++] = wDu_Cross_Dv (z, x*y*adpolxy1[i], (1-x-y)*adpolxy2[j]);
814
+
815
+ for (int i = 0; i < p; i++)
816
+ shape[ii++] = wDu_Cross_Dv (z, x, y*(1-x-y)*adpolxy1[i]);
817
+
818
+
819
+ /*
820
+ for (int i = 0; i <= p-1; i++)
821
+ for (int k = 0; k <= pz; k++)
822
+ shape[ii++] = wDu_Cross_Dv<3> (x*y*adpolxy1[i], z*adpolz[k], 1-x-y);
823
+ */
824
+ }
825
+ }
826
+
827
+ if (ii != ndof) cout << "hdiv-prism: dofs missing, ndof = " << ndof << ", ii = " << ii << endl;
828
+ }
829
+
830
+
831
+ template<typename Tx, typename TFA>
832
+ void HDivHighOrderFE_Shape<ET_HEX> :: T_CalcShape (TIP<3,Tx> ip, TFA & shape) const
833
+ {
834
+ Tx x = ip.x, y = ip.y, z = ip.z;
835
+
836
+ Tx lami[8]={(1-x)*(1-y)*(1-z),x*(1-y)*(1-z),x*y*(1-z),(1-x)*y*(1-z),
837
+ (1-x)*(1-y)*z,x*(1-y)*z,x*y*z,(1-x)*y*z};
838
+ Tx sigma[8]={(1-x)+(1-y)+(1-z),x+(1-y)+(1-z),x+y+(1-z),(1-x)+y+(1-z),
839
+ (1-x)+(1-y)+z,x+(1-y)+z,x+y+z,(1-x)+y+z};
840
+
841
+ ArrayMem<Tx, 20> pol_xi(order+2),pol_eta(order+2),pol_zeta(order+2);
842
+
843
+ int ii = 6;
844
+
845
+ //Faces
846
+ const FACE * faces = ElementTopology::GetFaces (ET_HEX);
847
+ for (int i = 0; i < 6; i++)
848
+ {
849
+ IVec<2> p = order_facet[i];
850
+
851
+ Tx lam_f(0);
852
+ for (int j = 0; j < 4; j++)
853
+ lam_f += lami[faces[i][j]];
854
+
855
+ IVec<4> f = GetFaceSort (i, vnums);
856
+ Tx xi = sigma[f[0]]-sigma[f[1]];
857
+ Tx eta = sigma[f[0]]-sigma[f[3]];
858
+
859
+ shape[i] = wDu_Cross_Dv(eta, xi, -0.25*lam_f);
860
+
861
+ ArrayMem<Tx, 20> L_xi(order+2),L_eta(order+2);
862
+
863
+ IntegratedLegendrePolynomial::Eval(p[0]+1,xi,L_xi);
864
+ IntegratedLegendrePolynomial::Eval(p[1]+1,eta,L_eta);
865
+
866
+ // if (p[0] >= 1)
867
+ // IntLegNoBubble::EvalMult(p[0]-1, xi, 1-xi*xi, pol_xi);
868
+ // if (p[1] >= 1)
869
+ // IntLegNoBubble::EvalMult(p[1]-1,eta, 1-eta*eta, pol_eta);
870
+
871
+ for (int k = 0; k < p[0]; k++)
872
+ for (int l = 0; l < p[1]; l++, ii++)
873
+ //shape[ii] = wDu_Cross_Dv<3> (pol_eta[l], pol_xi[k], 2*lam_f);
874
+ shape[ii] = curl_uDvw_minus_Duvw(L_xi[k+2],L_eta[l+2],-lam_f); //divfree
875
+
876
+ for (int k = 0; k < p[0]; k++)
877
+ //shape[ii++] = wDu_Cross_Dv<3> (-eta, pol_xi[k], lam_f);
878
+ shape[ii++] = Du_Cross_Dv(L_xi[k+2]*lam_f,eta); //divfree
879
+
880
+ for (int k = 0; k < p[1]; k++)
881
+ //shape[ii++] = wDu_Cross_Dv<3> (-xi, pol_eta[k], lam_f);
882
+ shape[ii++] = Du_Cross_Dv(L_eta[k+2]*lam_f,xi); //divfree
883
+ }
884
+
885
+ auto p = order_inner;
886
+
887
+ LegendrePolynomial::Eval(p[0], 2*x-1, pol_xi);
888
+ LegendrePolynomial::Eval(p[1], 2*y-1, pol_eta);
889
+ LegendrePolynomial::Eval(p[2], 2*z-1, pol_zeta);
890
+
891
+ // ----------------------- hodivfree-SZ-basis -----------------------
892
+ Tx xi = 2*x-1;
893
+ Tx eta = 2*y-1;
894
+ Tx zeta = 2*z-1;
895
+
896
+ ArrayMem<Tx, 20> L_xi(order+2),L_eta(order+2),L_zeta(order+2);
897
+
898
+ IntegratedLegendrePolynomial::Eval(p[0]+1,xi,L_xi);
899
+ IntegratedLegendrePolynomial::Eval(p[1]+1,eta,L_eta);
900
+ IntegratedLegendrePolynomial::Eval(p[2]+1,zeta,L_zeta);
901
+
902
+ // Type 1 (divergence-free):
903
+ for (int i = 0; i < p[0]; i++)
904
+ for (int j = 0; j < p[1]; j++)
905
+ for (int k = 0; k < p[2]; k++)
906
+ shape[ii++] = wDu_Cross_Dv (L_xi[i+2]*L_zeta[k+2], y, -4*pol_eta[j+1]);
907
+
908
+ for (int i = 0; i < p[0]; i++)
909
+ for (int j = 0; j < p[1]; j++)
910
+ for (int k = 0; k < p[2]; k++)
911
+ shape[ii++] = wDu_Cross_Dv (L_eta[j+2]*L_zeta[k+2], x, 4*pol_xi[i+1]);
912
+
913
+ for (int j = 0; j < p[1]; j++)
914
+ for (int k = 0; k < p[2]; k++)
915
+ shape[ii++] = Du_Cross_Dv (L_eta[j+2]*L_zeta[k+2], 2*xi);
916
+
917
+ for (int i = 0; i < p[0]; i++)
918
+ for (int k = 0; k < p[2]; k++)
919
+ shape[ii++] = Du_Cross_Dv (L_xi[i+2]*L_zeta[k+2], 2*eta);
920
+
921
+ for (int i = 0; i < p[0]; i++)
922
+ for (int j = 0; j < p[1]; j++)
923
+ shape[ii++] = Du_Cross_Dv (L_xi[i+2]*L_eta[j+2], 2*zeta);
924
+
925
+
926
+ if (!ho_div_free)
927
+ // ----------------------- remaining-SZ-basis -----------------------
928
+ {
929
+ // Type 2:
930
+ for (int i = 0; i < p[0]; i++)
931
+ for (int j = 0; j < p[1]; j++)
932
+ for (int k = 0; k < p[2]; k++)
933
+ shape[ii++] = uDvDw_minus_DuvDw (L_xi[i+2], L_eta[j+2], L_zeta[k+2]);
934
+
935
+ for (int j = 0; j < p[1]; j++)
936
+ for (int k = 0; k < p[2]; k++)
937
+ shape[ii++] = uDvDw_minus_DuvDw (L_eta[j+2], L_zeta[k+2], x);
938
+
939
+ for (int i = 0; i < p[0]; i++)
940
+ for (int k = 0; k < p[2]; k++)
941
+ shape[ii++] = uDvDw_minus_DuvDw (L_zeta[k+2], L_xi[i+2], y);
942
+
943
+ for (int i = 0; i < p[0]; i++)
944
+ for (int j = 0; j < p[1]; j++)
945
+ shape[ii++] = uDvDw_minus_DuvDw (L_xi[i+2], L_eta[j+2], z);
946
+
947
+ // Type 3:
948
+ for (int i = 0; i < p[0]; i++)
949
+ shape[ii++] = wDu_Cross_Dv (y, z, L_xi[i+2]);
950
+
951
+ for (int j = 0; j < p[1]; j++)
952
+ shape[ii++] = wDu_Cross_Dv (x, -z, L_eta[j+2]);
953
+
954
+ for (int k = 0; k < p[2]; k++)
955
+ shape[ii++] = wDu_Cross_Dv (x, y, L_zeta[k+2]);
956
+ }
957
+
958
+ /*// ----------------------- full-non-SZ-basis -----------------------
959
+
960
+ for (int i = 0; i <= p[0]; i++)
961
+ for (int j = 0; j <= p[1]; j++)
962
+ for (int k = 0; k < p[2]; k++)
963
+ shape[ii++] = wDu_Cross_Dv (x, y, pol_xi[i]*pol_eta[j]*pol_zeta[k]*z*(1-z));
964
+ for (int i = 0; i <= p[0]; i++)
965
+ for (int j = 0; j < p[1]; j++)
966
+ for (int k = 0; k <= p[2]; k++)
967
+ shape[ii++] = wDu_Cross_Dv (x, z, pol_xi[i]*pol_eta[j]*pol_zeta[k]*y*(1-y));
968
+ for (int i = 0; i < p[0]; i++)
969
+ for (int j = 0; j <= p[1]; j++)
970
+ for (int k = 0; k <= p[2]; k++)
971
+ shape[ii++] = wDu_Cross_Dv (y, z, pol_xi[i]*pol_eta[j]*pol_zeta[k]*x*(1-x));
972
+
973
+ */
974
+
975
+ }
976
+
977
+
978
+ template<>
979
+ void HDivHighOrderFE<ET_TRIG> ::
980
+ CalcNormalShape (const IntegrationPoint & ip,
981
+ BareSliceVector<> nshape) const
982
+ {
983
+ // Vector<> nshape1(nshape.Size());
984
+ // HDivFiniteElement<2>::CalcNormalShape (ip, nshape1);
985
+
986
+ int fnr = ip.FacetNr();
987
+ double lam[] = { ip(0), ip(1), 1-ip(0)-ip(1) };
988
+
989
+ IVec<2> e0 = ET_trait<ET_TRIG>::GetEdge (fnr);
990
+ double fac = vnums[e0[0]] > vnums[e0[1]] ? 1 : -1;
991
+ IVec<2> e = ET_trait<ET_TRIG>::GetEdgeSort (fnr, vnums);
992
+ AutoDiff<1> xi (lam[e[1]]-lam[e[0]], 0);
993
+
994
+ ArrayMem<AutoDiff<1>,10> adpol1(order);
995
+
996
+ nshape[0] = fac*xi.DValue(0);
997
+
998
+ int p = order_inner[0];
999
+ IntLegNoBubble:: EvalMult (p-1, xi, 0.25*(1-xi*xi), adpol1);
1000
+
1001
+ for(int j = 0; j < p; j++)
1002
+ nshape[j+1] = -2*fac*adpol1[j].DValue(0);
1003
+ /*
1004
+ cout << "nshape = " << nshape << endl;
1005
+ cout << "nshape1 = " << nshape1 << endl;
1006
+ cout << "************************************ diff = " << L2Norm (nshape-nshape1) << endl;
1007
+ */
1008
+ }
1009
+
1010
+
1011
+ template<>
1012
+ void HDivHighOrderFE<ET_QUAD> ::
1013
+ CalcNormalShape (const IntegrationPoint & ip,
1014
+ BareSliceVector<> nshape) const
1015
+ {
1016
+ // Vector<> nshape1(nshape.Size());
1017
+ // HDivFiniteElement<2>::CalcNormalShape (ip, nshape1);
1018
+
1019
+ int fnr = ip.FacetNr();
1020
+ double lam[] = { (1-ip(0))*(1-ip(1)), ip(0)*(1-ip(1)), ip(0)*ip(1),(1-ip(0))*ip(1) };
1021
+
1022
+ IVec<2> e0 = ET_trait<ET_QUAD>::GetEdge (fnr);
1023
+ double fac = vnums[e0[0]] > vnums[e0[1]] ? 1 : -1;
1024
+ IVec<2> e = ET_trait<ET_QUAD>::GetEdgeSort (fnr, vnums);
1025
+ AutoDiff<1> xi (lam[e[1]]-lam[e[0]], 0);
1026
+
1027
+ ArrayMem<AutoDiff<1>,10> adpol1(order);
1028
+
1029
+ nshape[0] = fac*xi.DValue(0);
1030
+
1031
+ int p = order_inner[0];
1032
+ IntLegNoBubble:: EvalMult (p-1, xi, 0.25*(1-xi*xi), adpol1);
1033
+
1034
+ for(int j = 0; j < p; j++)
1035
+ nshape[j+1] = -2*fac*adpol1[j].DValue(0);
1036
+ /*
1037
+ cout << "nshape = " << nshape << endl;
1038
+ cout << "nshape1 = " << nshape1 << endl;
1039
+ cout << "************************************ diff = " << L2Norm (nshape-nshape1) << endl;
1040
+ */
1041
+ }
1042
+
1043
+
1044
+
1045
+ template<>
1046
+ void HDivHighOrderFE<ET_TET> ::
1047
+ CalcNormalShape (const IntegrationPoint & ip,
1048
+ BareSliceVector<> nshape) const
1049
+ {
1050
+ // Vector<> nshape1(nshape.Size());
1051
+ // HDivFiniteElement<3>::CalcNormalShape (ip, nshape1);
1052
+
1053
+ int fnr = ip.FacetNr();
1054
+ double lam[] = { ip(0), ip(1), ip(2), 1-ip(0)-ip(1)-ip(2) };
1055
+
1056
+ IVec<4> face = ET_trait<ET_TET>::GetFace(fnr);
1057
+
1058
+ IntegrationPoint ip2d(lam[face[0]], lam[face[1]], lam[face[2]]);
1059
+ ArrayMem<int,3> vnumsf(3);
1060
+ for (int j = 0; j < 3; j++) vnumsf[j] = vnums[face[j]];
1061
+
1062
+ HDivHighOrderNormalTrig<> trig(order_facet[fnr][0]);
1063
+ trig.SetVertexNumbers (vnumsf);
1064
+
1065
+ VectorMem<20> tmp(ndof); // nshape.Size());
1066
+ trig.CalcShape (ip2d, tmp);
1067
+ nshape = -tmp;
1068
+ // cout << "nshape1 = " << endl << nshape1 << endl;
1069
+ // cout << "nshape = " << endl << nshape << endl;
1070
+ // cout << "******************************************** diff = " << L2Norm (nshape-nshape1) << endl;
1071
+ }
1072
+
1073
+
1074
+ template <ELEMENT_TYPE ET>
1075
+ void HDivHighOrderFE<ET> ::
1076
+ CalcNormalShape(const IntegrationPoint & ip,
1077
+ BareSliceVector<> nshape) const
1078
+ {
1079
+ cout << "HDivHOFE, calcnormalshape not overloaded" << endl;
1080
+ }
1081
+
1082
+
1083
+ template <ELEMENT_TYPE ET>
1084
+ void HDivHighOrderFE<ET> ::
1085
+ CalcDualShape (const BaseMappedIntegrationPoint & bmip, BareSliceMatrix<> shape) const
1086
+ {
1087
+ shape.AddSize(this->ndof, bmip.DimSpace()) = 0.0;
1088
+ Switch<4-DIM>
1089
+ (bmip.DimSpace()-DIM,[this,&bmip,shape](auto CODIM)
1090
+ {
1091
+ auto & mip = static_cast<const MappedIntegrationPoint<DIM,DIM+CODIM.value>&> (bmip);
1092
+
1093
+ static_cast<const HDivHighOrderFE_Shape<ET>*> (this)
1094
+ -> CalcDualShape2 (mip, SBLambda([shape] (size_t i, auto val)
1095
+ {
1096
+ shape.Row(i) = val;
1097
+ }));
1098
+ });
1099
+ }
1100
+
1101
+
1102
+
1103
+ }
1104
+
1105
+
1106
+
1107
+ #endif