ngsolve 6.2.2506.post74.dev0__cp314-cp314-macosx_10_15_universal2.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 (315) hide show
  1. netgen/include/analytic_integrals.hpp +10 -0
  2. netgen/include/arnoldi.hpp +55 -0
  3. netgen/include/bandmatrix.hpp +334 -0
  4. netgen/include/basematrix.hpp +957 -0
  5. netgen/include/basevector.hpp +1268 -0
  6. netgen/include/bdbequations.hpp +2805 -0
  7. netgen/include/bdbintegrator.hpp +1660 -0
  8. netgen/include/bem_diffops.hpp +475 -0
  9. netgen/include/bessel.hpp +1064 -0
  10. netgen/include/bilinearform.hpp +963 -0
  11. netgen/include/bla.hpp +29 -0
  12. netgen/include/blockalloc.hpp +95 -0
  13. netgen/include/blockjacobi.hpp +328 -0
  14. netgen/include/bspline.hpp +116 -0
  15. netgen/include/calcinverse.hpp +141 -0
  16. netgen/include/cg.hpp +368 -0
  17. netgen/include/chebyshev.hpp +44 -0
  18. netgen/include/cholesky.hpp +720 -0
  19. netgen/include/clapack.h +7254 -0
  20. netgen/include/code_generation.hpp +296 -0
  21. netgen/include/coefficient.hpp +2033 -0
  22. netgen/include/coefficient_impl.hpp +19 -0
  23. netgen/include/coefficient_stdmath.hpp +167 -0
  24. netgen/include/commutingAMG.hpp +106 -0
  25. netgen/include/comp.hpp +79 -0
  26. netgen/include/compatibility.hpp +41 -0
  27. netgen/include/complex_wrapper.hpp +73 -0
  28. netgen/include/compressedfespace.hpp +110 -0
  29. netgen/include/contact.hpp +235 -0
  30. netgen/include/diagonalmatrix.hpp +154 -0
  31. netgen/include/differentialoperator.hpp +276 -0
  32. netgen/include/diffop.hpp +1286 -0
  33. netgen/include/diffop_impl.hpp +328 -0
  34. netgen/include/diffopwithfactor.hpp +123 -0
  35. netgen/include/discontinuous.hpp +84 -0
  36. netgen/include/dump.hpp +949 -0
  37. netgen/include/ectypes.hpp +121 -0
  38. netgen/include/eigen.hpp +60 -0
  39. netgen/include/eigensystem.hpp +18 -0
  40. netgen/include/elasticity_equations.hpp +595 -0
  41. netgen/include/elementbyelement.hpp +195 -0
  42. netgen/include/elementtopology.hpp +1760 -0
  43. netgen/include/elementtransformation.hpp +339 -0
  44. netgen/include/evalfunc.hpp +405 -0
  45. netgen/include/expr.hpp +1686 -0
  46. netgen/include/facetfe.hpp +175 -0
  47. netgen/include/facetfespace.hpp +180 -0
  48. netgen/include/facethofe.hpp +111 -0
  49. netgen/include/facetsurffespace.hpp +112 -0
  50. netgen/include/fe_interfaces.hpp +32 -0
  51. netgen/include/fem.hpp +87 -0
  52. netgen/include/fesconvert.hpp +14 -0
  53. netgen/include/fespace.hpp +1449 -0
  54. netgen/include/finiteelement.hpp +286 -0
  55. netgen/include/globalinterfacespace.hpp +77 -0
  56. netgen/include/globalspace.hpp +115 -0
  57. netgen/include/gridfunction.hpp +525 -0
  58. netgen/include/h1amg.hpp +124 -0
  59. netgen/include/h1hofe.hpp +188 -0
  60. netgen/include/h1hofe_impl.hpp +1262 -0
  61. netgen/include/h1hofefo.hpp +148 -0
  62. netgen/include/h1hofefo_impl.hpp +185 -0
  63. netgen/include/h1hofespace.hpp +167 -0
  64. netgen/include/h1lofe.hpp +1240 -0
  65. netgen/include/h1lumping.hpp +41 -0
  66. netgen/include/hcurl_equations.hpp +1381 -0
  67. netgen/include/hcurlcurlfe.hpp +2241 -0
  68. netgen/include/hcurlcurlfespace.hpp +78 -0
  69. netgen/include/hcurlfe.hpp +259 -0
  70. netgen/include/hcurlfe_utils.hpp +107 -0
  71. netgen/include/hcurlhdiv_dshape.hpp +857 -0
  72. netgen/include/hcurlhdivfes.hpp +308 -0
  73. netgen/include/hcurlhofe.hpp +175 -0
  74. netgen/include/hcurlhofe_impl.hpp +1871 -0
  75. netgen/include/hcurlhofespace.hpp +193 -0
  76. netgen/include/hcurllofe.hpp +1146 -0
  77. netgen/include/hdiv_equations.hpp +880 -0
  78. netgen/include/hdivdivfe.hpp +2923 -0
  79. netgen/include/hdivdivsurfacespace.hpp +76 -0
  80. netgen/include/hdivfe.hpp +206 -0
  81. netgen/include/hdivfe_utils.hpp +717 -0
  82. netgen/include/hdivfes.hpp +75 -0
  83. netgen/include/hdivhofe.hpp +447 -0
  84. netgen/include/hdivhofe_impl.hpp +1107 -0
  85. netgen/include/hdivhofefo.hpp +229 -0
  86. netgen/include/hdivhofespace.hpp +177 -0
  87. netgen/include/hdivhosurfacefespace.hpp +106 -0
  88. netgen/include/hdivlofe.hpp +773 -0
  89. netgen/include/hidden.hpp +74 -0
  90. netgen/include/householder.hpp +181 -0
  91. netgen/include/hypre_ams_precond.hpp +123 -0
  92. netgen/include/hypre_precond.hpp +73 -0
  93. netgen/include/integrator.hpp +2012 -0
  94. netgen/include/integratorcf.hpp +253 -0
  95. netgen/include/interpolate.hpp +49 -0
  96. netgen/include/intrule.hpp +2542 -0
  97. netgen/include/intrules_SauterSchwab.hpp +25 -0
  98. netgen/include/irspace.hpp +49 -0
  99. netgen/include/jacobi.hpp +153 -0
  100. netgen/include/kernels.hpp +762 -0
  101. netgen/include/l2hofe.hpp +194 -0
  102. netgen/include/l2hofe_impl.hpp +564 -0
  103. netgen/include/l2hofefo.hpp +542 -0
  104. netgen/include/l2hofespace.hpp +344 -0
  105. netgen/include/la.hpp +38 -0
  106. netgen/include/linearform.hpp +266 -0
  107. netgen/include/matrix.hpp +2140 -0
  108. netgen/include/memusage.hpp +41 -0
  109. netgen/include/meshaccess.hpp +1359 -0
  110. netgen/include/mgpre.hpp +204 -0
  111. netgen/include/mp_coefficient.hpp +145 -0
  112. netgen/include/mptools.hpp +2281 -0
  113. netgen/include/multigrid.hpp +42 -0
  114. netgen/include/multivector.hpp +447 -0
  115. netgen/include/mumpsinverse.hpp +187 -0
  116. netgen/include/mycomplex.hpp +361 -0
  117. netgen/include/ng_lapack.hpp +1661 -0
  118. netgen/include/ngblas.hpp +1232 -0
  119. netgen/include/ngs_defines.hpp +30 -0
  120. netgen/include/ngs_stdcpp_include.hpp +106 -0
  121. netgen/include/ngs_utils.hpp +121 -0
  122. netgen/include/ngsobject.hpp +1019 -0
  123. netgen/include/ngsstream.hpp +113 -0
  124. netgen/include/ngstd.hpp +72 -0
  125. netgen/include/nodalhofe.hpp +96 -0
  126. netgen/include/nodalhofe_impl.hpp +141 -0
  127. netgen/include/normalfacetfe.hpp +223 -0
  128. netgen/include/normalfacetfespace.hpp +98 -0
  129. netgen/include/normalfacetsurfacefespace.hpp +84 -0
  130. netgen/include/order.hpp +251 -0
  131. netgen/include/parallel_matrices.hpp +222 -0
  132. netgen/include/paralleldofs.hpp +340 -0
  133. netgen/include/parallelngs.hpp +23 -0
  134. netgen/include/parallelvector.hpp +269 -0
  135. netgen/include/pardisoinverse.hpp +200 -0
  136. netgen/include/periodic.hpp +129 -0
  137. netgen/include/plateaufespace.hpp +25 -0
  138. netgen/include/pml.hpp +275 -0
  139. netgen/include/pmltrafo.hpp +631 -0
  140. netgen/include/postproc.hpp +142 -0
  141. netgen/include/potentialtools.hpp +22 -0
  142. netgen/include/precomp.hpp +60 -0
  143. netgen/include/preconditioner.hpp +602 -0
  144. netgen/include/prolongation.hpp +377 -0
  145. netgen/include/python_comp.hpp +107 -0
  146. netgen/include/python_fem.hpp +89 -0
  147. netgen/include/python_linalg.hpp +58 -0
  148. netgen/include/python_ngstd.hpp +386 -0
  149. netgen/include/recursive_pol.hpp +4896 -0
  150. netgen/include/recursive_pol_tet.hpp +395 -0
  151. netgen/include/recursive_pol_trig.hpp +492 -0
  152. netgen/include/reorderedfespace.hpp +81 -0
  153. netgen/include/sample_sort.hpp +105 -0
  154. netgen/include/scalarfe.hpp +335 -0
  155. netgen/include/shapefunction_utils.hpp +113 -0
  156. netgen/include/simd_complex.hpp +329 -0
  157. netgen/include/smoother.hpp +253 -0
  158. netgen/include/solve.hpp +89 -0
  159. netgen/include/sparsecholesky.hpp +313 -0
  160. netgen/include/sparsematrix.hpp +1038 -0
  161. netgen/include/sparsematrix_dyn.hpp +90 -0
  162. netgen/include/sparsematrix_impl.hpp +1013 -0
  163. netgen/include/special_matrix.hpp +463 -0
  164. netgen/include/specialelement.hpp +125 -0
  165. netgen/include/statushandler.hpp +33 -0
  166. netgen/include/stringops.hpp +12 -0
  167. netgen/include/superluinverse.hpp +136 -0
  168. netgen/include/symbolicintegrator.hpp +850 -0
  169. netgen/include/symmetricmatrix.hpp +144 -0
  170. netgen/include/tangentialfacetfe.hpp +224 -0
  171. netgen/include/tangentialfacetfespace.hpp +91 -0
  172. netgen/include/tensor.hpp +522 -0
  173. netgen/include/tensorcoefficient.hpp +446 -0
  174. netgen/include/tensorproductintegrator.hpp +113 -0
  175. netgen/include/thcurlfe.hpp +128 -0
  176. netgen/include/thcurlfe_impl.hpp +380 -0
  177. netgen/include/thdivfe.hpp +80 -0
  178. netgen/include/thdivfe_impl.hpp +492 -0
  179. netgen/include/tpdiffop.hpp +461 -0
  180. netgen/include/tpfes.hpp +133 -0
  181. netgen/include/tpintrule.hpp +224 -0
  182. netgen/include/triangular.hpp +465 -0
  183. netgen/include/tscalarfe.hpp +245 -0
  184. netgen/include/tscalarfe_impl.hpp +1029 -0
  185. netgen/include/umfpackinverse.hpp +148 -0
  186. netgen/include/vector.hpp +1273 -0
  187. netgen/include/voxelcoefficientfunction.hpp +41 -0
  188. netgen/include/vtkoutput.hpp +198 -0
  189. netgen/include/vvector.hpp +208 -0
  190. netgen/include/webgui.hpp +92 -0
  191. netgen/libngbla.dylib +0 -0
  192. netgen/libngcomp.dylib +0 -0
  193. netgen/libngfem.dylib +0 -0
  194. netgen/libngla.dylib +0 -0
  195. netgen/libngsbem.dylib +0 -0
  196. netgen/libngsolve.dylib +0 -0
  197. netgen/libngstd.dylib +0 -0
  198. ngsolve/TensorProductTools.py +210 -0
  199. ngsolve/__console.py +94 -0
  200. ngsolve/__expr.py +181 -0
  201. ngsolve/__init__.py +148 -0
  202. ngsolve/__init__.pyi +233 -0
  203. ngsolve/_scikit_build_core_dependencies.py +30 -0
  204. ngsolve/bla.pyi +1153 -0
  205. ngsolve/bvp.py +78 -0
  206. ngsolve/bvp.pyi +32 -0
  207. ngsolve/cmake/NGSolveConfig.cmake +102 -0
  208. ngsolve/cmake/ngsolve-targets-release.cmake +79 -0
  209. ngsolve/cmake/ngsolve-targets.cmake +163 -0
  210. ngsolve/comp/__init__.pyi +5449 -0
  211. ngsolve/comp/pml.pyi +89 -0
  212. ngsolve/config/__init__.py +1 -0
  213. ngsolve/config/__init__.pyi +43 -0
  214. ngsolve/config/__main__.py +4 -0
  215. ngsolve/config/config.py +60 -0
  216. ngsolve/config/config.pyi +45 -0
  217. ngsolve/demos/TensorProduct/__init__.py +0 -0
  218. ngsolve/demos/TensorProduct/tp_dg_1d_1d.py +80 -0
  219. ngsolve/demos/TensorProduct/tp_dg_1d_2d.py +73 -0
  220. ngsolve/demos/TensorProduct/tp_dg_2d_1d.py +72 -0
  221. ngsolve/demos/TensorProduct/tp_dg_2d_2d.py +66 -0
  222. ngsolve/demos/__init__.py +0 -0
  223. ngsolve/demos/howto/__init__.py +0 -0
  224. ngsolve/demos/howto/hhj.py +44 -0
  225. ngsolve/demos/howto/hybrid_dg.py +53 -0
  226. ngsolve/demos/howto/mixed.py +30 -0
  227. ngsolve/demos/howto/nonlin.py +29 -0
  228. ngsolve/demos/howto/pickling.py +26 -0
  229. ngsolve/demos/howto/pml.py +31 -0
  230. ngsolve/demos/howto/taskmanager.py +20 -0
  231. ngsolve/demos/howto/tdnns.py +47 -0
  232. ngsolve/demos/howto/timeDG-skeleton.py +45 -0
  233. ngsolve/demos/howto/timeDG.py +38 -0
  234. ngsolve/demos/howto/timeDGlap.py +42 -0
  235. ngsolve/demos/howto/timeDGwave.py +61 -0
  236. ngsolve/demos/intro/__init__.py +0 -0
  237. ngsolve/demos/intro/adaptive.py +123 -0
  238. ngsolve/demos/intro/cmagnet.py +59 -0
  239. ngsolve/demos/intro/elasticity.py +76 -0
  240. ngsolve/demos/intro/navierstokes.py +74 -0
  241. ngsolve/demos/intro/poisson.ipynb +170 -0
  242. ngsolve/demos/intro/poisson.py +41 -0
  243. ngsolve/demos/mpi/__init__.py +0 -0
  244. ngsolve/demos/mpi/mpi_cmagnet.py +87 -0
  245. ngsolve/demos/mpi/mpi_navierstokes.py +117 -0
  246. ngsolve/demos/mpi/mpi_poisson.py +89 -0
  247. ngsolve/demos/mpi/mpi_timeDG.py +82 -0
  248. ngsolve/directsolvers.py +26 -0
  249. ngsolve/directsolvers.pyi +15 -0
  250. ngsolve/eigenvalues.py +364 -0
  251. ngsolve/eigenvalues.pyi +30 -0
  252. ngsolve/fem.pyi +1647 -0
  253. ngsolve/internal.py +89 -0
  254. ngsolve/krylovspace.py +1013 -0
  255. ngsolve/krylovspace.pyi +298 -0
  256. ngsolve/la.pyi +1230 -0
  257. ngsolve/meshes.py +748 -0
  258. ngsolve/ngs2petsc.py +310 -0
  259. ngsolve/ngscxx.py +42 -0
  260. ngsolve/ngslib.so +0 -0
  261. ngsolve/ngstd.pyi +59 -0
  262. ngsolve/nonlinearsolvers.py +203 -0
  263. ngsolve/nonlinearsolvers.pyi +95 -0
  264. ngsolve/preconditioners.py +11 -0
  265. ngsolve/preconditioners.pyi +7 -0
  266. ngsolve/solve.pyi +109 -0
  267. ngsolve/solve_implementation.py +168 -0
  268. ngsolve/solve_implementation.pyi +42 -0
  269. ngsolve/solvers.py +7 -0
  270. ngsolve/solvers.pyi +14 -0
  271. ngsolve/timestepping.py +185 -0
  272. ngsolve/timestepping.pyi +28 -0
  273. ngsolve/timing.py +108 -0
  274. ngsolve/timing.pyi +54 -0
  275. ngsolve/utils.py +167 -0
  276. ngsolve/utils.pyi +273 -0
  277. ngsolve/webgui.py +670 -0
  278. ngsolve-6.2.2506.post74.dev0.data/data/Netgen.icns +0 -0
  279. ngsolve-6.2.2506.post74.dev0.data/data/bin/ngscxx +17 -0
  280. ngsolve-6.2.2506.post74.dev0.data/data/bin/ngsld +13 -0
  281. ngsolve-6.2.2506.post74.dev0.data/data/bin/ngsolve.tcl +648 -0
  282. ngsolve-6.2.2506.post74.dev0.data/data/bin/ngspy +2 -0
  283. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/beam.geo +17 -0
  284. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/beam.vol +240 -0
  285. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/chip.in2d +41 -0
  286. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/chip.vol +614 -0
  287. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/coil.geo +12 -0
  288. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/coil.vol +2560 -0
  289. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/coilshield.geo +24 -0
  290. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/coilshield.vol +3179 -0
  291. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/cube.geo +19 -0
  292. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/cube.vol +1832 -0
  293. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d10_DGdoubleglazing.pde +50 -0
  294. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d11_chip_nitsche.pde +40 -0
  295. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d1_square.pde +43 -0
  296. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d2_chip.pde +35 -0
  297. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d3_helmholtz.pde +22 -0
  298. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d4_cube.pde +46 -0
  299. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d5_beam.pde +74 -0
  300. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d6_shaft.pde +73 -0
  301. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d7_coil.pde +50 -0
  302. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d8_coilshield.pde +49 -0
  303. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d9_hybridDG.pde +72 -0
  304. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/doubleglazing.in2d +27 -0
  305. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/doubleglazing.vol +737 -0
  306. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/piezo2d40round4.vol.gz +0 -0
  307. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/shaft.geo +73 -0
  308. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/shaft.vol +4291 -0
  309. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/square.in2d +17 -0
  310. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/square.vol +149 -0
  311. ngsolve-6.2.2506.post74.dev0.dist-info/METADATA +13 -0
  312. ngsolve-6.2.2506.post74.dev0.dist-info/RECORD +315 -0
  313. ngsolve-6.2.2506.post74.dev0.dist-info/WHEEL +5 -0
  314. ngsolve-6.2.2506.post74.dev0.dist-info/licenses/LICENSE +504 -0
  315. ngsolve-6.2.2506.post74.dev0.dist-info/top_level.txt +2 -0
@@ -0,0 +1,542 @@
1
+ #ifndef FILE_L2HOFEFO
2
+ #define FILE_L2HOFEFO
3
+
4
+ /*********************************************************************/
5
+ /* File: l2hofefo.hpp */
6
+ /* Author: Joachim Schoeberl */
7
+ /* Date: Apr. 2009 */
8
+ /*********************************************************************/
9
+
10
+
11
+ // #include "tscalarfe_impl.hpp"
12
+ // #include "l2hofe_impl.hpp"
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+ template <int O, int IX, int IY>
21
+ class Cl_IterateTrig
22
+ {
23
+ public:
24
+ template <typename FUNC>
25
+ static INLINE void Do (FUNC f)
26
+ {
27
+ Cl_IterateTrig<O,IX,IY-1>::Do(f);
28
+ f(IX,IY);
29
+ }
30
+ };
31
+
32
+ template <int O, int IX>
33
+ class Cl_IterateTrig<O,IX,0>
34
+ {
35
+ public:
36
+ template <typename FUNC>
37
+ static INLINE void Do (FUNC f)
38
+ {
39
+ Cl_IterateTrig<O,IX-1,O-IX+1>::Do(f);
40
+ f(IX,0);
41
+ }
42
+ };
43
+
44
+ template <int O>
45
+ class Cl_IterateTrig<O,0,0>
46
+ {
47
+ public:
48
+ template <typename FUNC>
49
+ static INLINE void Do (FUNC f)
50
+ {
51
+ f(0,0);
52
+ }
53
+ };
54
+
55
+
56
+
57
+
58
+
59
+
60
+
61
+
62
+
63
+ template <int O, int IX, int IY>
64
+ class Cl_IterateTrig3b
65
+ {
66
+ public:
67
+ template <typename FUNC>
68
+ static INLINE void Do (FUNC && f)
69
+ {
70
+ Cl_IterateTrig3b<O,IX,IY-1>::Do(f);
71
+ f(IX,IY);
72
+ }
73
+ };
74
+ template <int O, int IX>
75
+ class Cl_IterateTrig3b<O,IX,0>
76
+ {
77
+ public:
78
+ template <typename FUNC>
79
+ static INLINE void Do (FUNC && f)
80
+ {
81
+ f(IX,0);
82
+ }
83
+ };
84
+
85
+
86
+ template <int O, int IX>
87
+ class Cl_IterateTrig3
88
+ {
89
+ public:
90
+ template <typename FUNC>
91
+ static INLINE void Do (FUNC && f)
92
+ {
93
+ Cl_IterateTrig3<O,IX-1>::Do(f);
94
+ Cl_IterateTrig3b<O,IX,O-IX>::Do (f);
95
+ }
96
+ };
97
+ template <int O>
98
+ class Cl_IterateTrig3<O,0>
99
+ {
100
+ public:
101
+ template <typename FUNC>
102
+ static INLINE void Do (FUNC && f)
103
+ {
104
+ Cl_IterateTrig3b<O,0,O>::Do (f);
105
+ }
106
+ };
107
+
108
+
109
+
110
+
111
+
112
+
113
+
114
+
115
+
116
+
117
+
118
+
119
+ template <int NUM, typename FUNC>
120
+ INLINE void IterateTrig (FUNC && f)
121
+ {
122
+ // Cl_IterateTrig<NUM,NUM,0>::Do(f);
123
+ Cl_IterateTrig3<NUM,NUM>::Do(f);
124
+ }
125
+
126
+
127
+
128
+
129
+
130
+
131
+
132
+ namespace ngfem
133
+ {
134
+
135
+
136
+
137
+ /**
138
+ High order finite elements for L2 of fixed order
139
+ */
140
+
141
+ class GenericOrientation;
142
+ template <int V1, int V2, int V3, int V4=-1> class FixedOrientation;
143
+
144
+ template <ELEMENT_TYPE ET, int ORDER, typename ORIENTATION = GenericOrientation>
145
+ class L2HighOrderFEFO_Shapes;
146
+
147
+
148
+
149
+ template <ELEMENT_TYPE ET, int ORDER,
150
+ typename ORIENTATION = GenericOrientation,
151
+ typename BASE = L2HighOrderFE<ET, L2HighOrderFEFO_Shapes<ET,ORDER,ORIENTATION> > >
152
+
153
+ class L2HighOrderFEFO : public BASE
154
+ {
155
+ protected:
156
+ // using typename BASE::T_IMPL;
157
+ using typename BASE::T_SHAPES;
158
+ typedef L2HighOrderFEFO_Shapes<ET,ORDER,ORIENTATION> SHAPES;
159
+
160
+
161
+ enum { DIM = ET_trait<ET>::DIM };
162
+
163
+ using ScalarFiniteElement<DIM>::ndof;
164
+ using ScalarFiniteElement<DIM>::order;
165
+ using DGFiniteElement<ET>::vnums;
166
+
167
+ public:
168
+
169
+ INLINE L2HighOrderFEFO ()
170
+ {
171
+ for (int i = 0; i < ET_trait<ET>::N_VERTEX; i++) vnums[i] = i;
172
+ order = ORDER;
173
+ ndof = SHAPES::NDOF;
174
+ }
175
+
176
+ /*
177
+ virtual void PrecomputeShapes (const IntegrationRule & ir)
178
+ {
179
+ int classnr = ET_trait<ET>::GetClassNr (vnums);
180
+
181
+ PrecomputedScalShapes<DIM> * pre = new PrecomputedScalShapes<DIM> (ir.GetNIP(), ndof);
182
+
183
+ Mat<SHAPES::NDOF, DIM> dshapes;
184
+ for (int i = 0; i < ir.GetNIP(); i++)
185
+ {
186
+ this->CalcShape (ir[i], pre->shapes.Row(i));
187
+ this->CalcDShape (ir[i], FlatMatrix<> (dshapes));
188
+ pre->dshapes.Rows (DIM*i, DIM*(i+1)) = Trans (dshapes);
189
+ }
190
+
191
+ SHAPES::precomp.Add (classnr, order, ir.GetNIP(), pre);
192
+ }
193
+ */
194
+
195
+ HD virtual void Evaluate (const IntegrationRule & ir, BareSliceVector<double> coefs, FlatVector<double> vals) const
196
+ {
197
+ // static Timer t("evaluate");
198
+ // RegionTimer r(t);
199
+ // t.AddFlops (ir.GetNIP()*coefs.Size());
200
+
201
+ /*
202
+ #ifndef __CUDA_ARCH__
203
+ int classnr = ET_trait<ET>::GetClassNr (vnums);
204
+ PrecomputedScalShapes<DIM> * pre = SHAPES::precomp.Get (classnr, order, ir.GetNIP());
205
+ if (pre)
206
+ vals = FlatMatrixFixWidth<SHAPES::NDOF> (pre->shapes) * coefs;
207
+ else
208
+ #endif
209
+ */
210
+ this -> BASE::T_IMPL::Evaluate (ir, coefs, vals);
211
+ }
212
+
213
+ HD virtual void EvaluateGradTrans (const IntegrationRule & ir, BareSliceMatrix<> values, BareSliceVector<> coefs) const
214
+ {
215
+ /*
216
+ static Timer t("evaluate grad trans");
217
+ RegionTimer r(t);
218
+ t.AddFlops (DIM*ir.GetNIP()*coefs.Size());
219
+ */
220
+ #ifndef __CUDA_ARCH__
221
+ int classnr = ET_trait<ET>::GetClassNr (vnums);
222
+
223
+ PrecomputedScalShapes<DIM> * pre = SHAPES::precomp.Get (classnr, order, ir.GetNIP());
224
+ if (pre)
225
+ // coefs.Range(0,SHAPES::NDOF) = Trans (FlatMatrixFixWidth<SHAPES::NDOF> (pre->dshapes)) * FlatVector<> (DIM*SHAPES::NDOF, &values(0,0));
226
+ coefs.Range(0,SHAPES::NDOF) = Trans (pre->dshapes) * FlatVector<> (DIM*SHAPES::NDOF, &values(0,0));
227
+ else
228
+ #endif
229
+ BASE::T_IMPL:: EvaluateGradTrans (ir, values, coefs);
230
+ }
231
+
232
+ /*
233
+ NGS_DLL_HEADER virtual void GetTrace (int facet, FlatVector<> coefs, FlatVector<> fcoefs) const
234
+ {
235
+ cout << "L2HighOrderFEFO::GetTrace not available" << endl;
236
+ }
237
+
238
+ NGS_DLL_HEADER virtual void GetTraceTrans (int facet, FlatVector<> fcoefs, FlatVector<> coefs) const
239
+ {
240
+ cout << "L2HighOrderFEFO::GetTraceTrans not available" << endl;
241
+ }
242
+ */
243
+
244
+ HD NGS_DLL_HEADER virtual void GetDiagMassMatrix (FlatVector<> mass) const
245
+ {
246
+ if (ET == ET_SEGM)
247
+ {
248
+ Iterate<ORDER+1> ([&] (int i) { mass[i] = 1.0 / (2*i+1); });
249
+ }
250
+ else if (ET == ET_TRIG)
251
+ {
252
+ int ii = 0;
253
+
254
+ IterateTrig<ORDER> ([&] (int ix, int iy) LAMBDA_INLINE
255
+ {
256
+ mass[ii] = 1.0 / ((2 * ix + 1) * (2 * ix + 2 * iy + 2));
257
+ ii++;
258
+ });
259
+
260
+ /*
261
+ for (int ix = 0, ii = 0; ix <= ORDER; ix++)
262
+ for (int iy = 0; iy <= ORDER - ix; iy++, ii++)
263
+ mass(ii) = 1.0 / ((2 * iy + 1) * (2 * ix + 2 * iy + 2));
264
+ */
265
+ }
266
+ else if (ET == ET_TET)
267
+ {
268
+ /*
269
+ int order = ORDER;
270
+ for (int ix = 0, ii = 0; ix <= order; ix++)
271
+ for (int iy = 0; iy <= order - ix; iy++)
272
+ for (int iz = 0; iz <= order - ix-iy; iz++, ii++)
273
+ mass(ii) = 1.0 / ((2 * ix + 1) * (2 * ix + 2 * iy + 2) * (2 * ix + 2 * iy + 2 * iz + 3));
274
+ */
275
+ int ii = 0;
276
+ Iterate<ORDER+1>
277
+ ([mass, &ii] (auto ix)
278
+ {
279
+ Iterate<ORDER+1-ix.value>
280
+ ([mass, ix, &ii] (auto iy)
281
+ {
282
+ Iterate<ORDER+1-ix.value-iy.value>
283
+ ([mass, ix, iy, &ii] (auto iz)
284
+ {
285
+ mass(ii) = 1.0 / ((2 * ix + 1) * (2 * ix + 2 * iy + 2) * (2 * ix + 2 * iy + 2 * iz + 3));
286
+ ii++;
287
+ });
288
+ });
289
+ });
290
+
291
+ }
292
+ #ifndef __CUDA_ARCH__
293
+ else
294
+ {
295
+ cerr << "L2HighOrderFEFO::getdiagmass not implemented" << endl;
296
+ }
297
+ #endif
298
+ }
299
+ };
300
+
301
+
302
+
303
+
304
+ /**
305
+ High order triangular finite element
306
+ */
307
+ template <int ORDER>
308
+ class L2HighOrderFEFO_Shapes<ET_SEGM, ORDER> : public L2HighOrderFEFO<ET_SEGM, ORDER>
309
+ {
310
+ using L2HighOrderFEFO<ET_SEGM, ORDER>::ndof;
311
+ using L2HighOrderFEFO<ET_SEGM, ORDER>::vnums;
312
+ using L2HighOrderFEFO<ET_SEGM, ORDER>::DIM;
313
+
314
+ public:
315
+
316
+ enum { NDOF = (ORDER+1) };
317
+
318
+ template<typename Tx, typename TFA>
319
+ INLINE void T_CalcShape (const TIP<DIM,Tx> & ip, TFA & shape) const
320
+ {
321
+ Tx lam[2] = { ip.x, 1-ip.x };
322
+ IVec<2> e = this -> GetEdgeSort (0, vnums);
323
+ // LegendrePolynomial_Old::EvalFO<ORDER> (lam[e[1]]-lam[e[0]], shape);
324
+ LegendrePolynomial::EvalFO<ORDER> (lam[e[1]]-lam[e[0]], shape);
325
+ }
326
+ };
327
+
328
+
329
+
330
+
331
+ /**
332
+ High order triangular finite element
333
+ */
334
+ template <int ORDER>
335
+ class L2HighOrderFEFO_Shapes<ET_TRIG, ORDER, GenericOrientation>
336
+ : public L2HighOrderFEFO<ET_TRIG, ORDER, GenericOrientation>
337
+ {
338
+ using L2HighOrderFEFO<ET_TRIG, ORDER>::ndof;
339
+ using L2HighOrderFEFO<ET_TRIG, ORDER>::vnums;
340
+
341
+ public:
342
+ enum { NDOF = (ORDER+1)*(ORDER+2)/2 };
343
+
344
+ template<typename Tx, typename TFA>
345
+ INLINE void T_CalcShape (const TIP<2,Tx> & ip, TFA & shape) const
346
+ {
347
+ Tx lam[3] = { ip.x, ip.y, 1-ip.x-ip.y };
348
+ IVec<4> f = this -> GetFaceSort (0, vnums);
349
+
350
+ Tx x = lam[f[0]];
351
+ Tx y = lam[f[1]];
352
+
353
+ int ii = 0;
354
+ JacobiPolynomialAlpha jac(1);
355
+ LegendrePolynomial::EvalScaled
356
+ (IC<ORDER>(),
357
+ y-(1-x-y), 1-x,
358
+ SBLambda ([&] (auto i, Tx val) LAMBDA_INLINE
359
+ {
360
+ // JacobiPolynomialFix<1+2*i,0> jac;
361
+ jac.EvalMult (IC<ORDER-i.value>(), 2*x-1, val,
362
+ SBLambda([&](auto j, Tx v2)
363
+ {
364
+ shape[ii++] = v2;
365
+ }));
366
+ jac.IncAlpha2();
367
+ }));
368
+ }
369
+ };
370
+
371
+
372
+ template <int ORDER, int V1, int V2, int V3>
373
+ class L2HighOrderFEFO_Shapes<ET_TRIG, ORDER, FixedOrientation<V1,V2,V3>>
374
+ : public L2HighOrderFEFO<ET_TRIG, ORDER, FixedOrientation<V1,V2,V3>>
375
+ {
376
+ using L2HighOrderFEFO<ET_TRIG, ORDER, FixedOrientation<V1,V2,V3>>::ndof;
377
+ using L2HighOrderFEFO<ET_TRIG, ORDER, FixedOrientation<V1,V2,V3>>::vnums;
378
+ using L2HighOrderFEFO<ET_TRIG, ORDER, FixedOrientation<V1,V2,V3>>::DIM;
379
+
380
+ public:
381
+ enum { NDOF = (ORDER+1)*(ORDER+2)/2 };
382
+
383
+ template<typename Tx, typename TFA>
384
+ INLINE void T_CalcShape (const TIP<DIM,Tx> & ip, TFA & shape) const
385
+ {
386
+ Tx lam[3] = { ip.x, ip.y, 1-ip.x-ip.y };
387
+
388
+ IVec<3> hvnums(V1,V2,V3);
389
+ IVec<4> f = this -> GetFaceSort (0, hvnums);
390
+
391
+ Tx x = lam[f[0]];
392
+ Tx y = lam[f[1]];
393
+
394
+ int ii = 0;
395
+ JacobiPolynomialAlpha jac(1);
396
+ LegendrePolynomial::EvalScaled
397
+ (IC<ORDER>(),
398
+ y-(1-x-y), 1-x,
399
+ SBLambda ([&] (auto i, Tx val) LAMBDA_INLINE
400
+ {
401
+ jac.EvalMult (IC<ORDER-i.value>(), 2*x-1, val, shape+ii);
402
+ ii += IC<ORDER-i.value+1>();
403
+ jac.IncAlpha2();
404
+ }));
405
+ }
406
+ };
407
+
408
+ template <int ORDER, int V1, int V2, int V3, int V4>
409
+ class L2HighOrderFEFO_Shapes<ET_TET, ORDER, FixedOrientation<V1,V2,V3,V4>>
410
+ : public L2HighOrderFEFO<ET_TET, ORDER, FixedOrientation<V1,V2,V3,V4>>
411
+ {
412
+ using L2HighOrderFEFO<ET_TET, ORDER, FixedOrientation<V1,V2,V3,V4>>::ndof;
413
+ using L2HighOrderFEFO<ET_TET, ORDER, FixedOrientation<V1,V2,V3,V4>>::vnums;
414
+
415
+ public:
416
+ enum { NDOF = (ORDER+1)*(ORDER+2)*(ORDER+3)/6 };
417
+
418
+ template<typename Tx, typename TFA>
419
+ INLINE void T_CalcShape (const TIP<3,Tx> & ip, TFA & shape) const
420
+ {
421
+ // Tx lami[4] = { ip.x, ip.y, ip.z, 1-ip.x-ip.y-ip.z };
422
+ //
423
+ // IVec<4> hvnums(V1,V2,V3,V4);
424
+ // unsigned char sort[4] = { 0, 1, 2, 3 };
425
+ // if (hvnums[sort[0]] > hvnums[sort[1]]) Swap (sort[0], sort[1]);
426
+ // if (hvnums[sort[2]] > hvnums[sort[3]]) Swap (sort[2], sort[3]);
427
+ // if (hvnums[sort[0]] > hvnums[sort[2]]) Swap (sort[0], sort[2]);
428
+ // if (hvnums[sort[1]] > hvnums[sort[3]]) Swap (sort[1], sort[3]);
429
+ // if (hvnums[sort[1]] > hvnums[sort[2]]) Swap (sort[1], sort[2]);
430
+ //
431
+ // Tx lamis[4];
432
+ // for (int i = 0; i < 4; i++)
433
+ // lamis[i] = lami[sort[i]];
434
+
435
+ // Hack: only working because there are currently only 2 possibilities for V1-V4:
436
+ // 0,1,2,3
437
+ // 0,1,3,2
438
+ const Tx l4 = 1-ip.x-ip.y-ip.z;
439
+ auto const lamis = make_tuple( ip.x, ip.y, V3<V4 ? ip.z : l4, V3<V4 ? l4 : ip.z );
440
+ const auto & lami0 = get<0>(lamis);
441
+ const auto & lami1 = get<1>(lamis);
442
+ const auto & lami2 = get<2>(lamis);
443
+ const auto & lami3 = get<3>(lamis);
444
+
445
+ size_t ii = 0;
446
+ LegendrePolynomial leg;
447
+ JacobiPolynomialAlpha jac1(1);
448
+ leg.EvalScaled
449
+ (IC<ORDER>(), lami2-lami3, lami2+lami3,
450
+ SBLambda ([&](auto k, Tx polz) LAMBDA_INLINE
451
+ {
452
+ JacobiPolynomialAlpha jac2(2*k+2);
453
+ jac1.EvalScaledMult
454
+ (IC<ORDER-k.value>(), lami1-lami2-lami3, 1-lami0, polz,
455
+ SBLambda ([&] (auto j, Tx polsy) LAMBDA_INLINE
456
+ {
457
+ jac2.EvalMult(IC<ORDER-k.value-j.value>(), 2 * lami0 - 1, polsy, shape+ii);
458
+ ii += IC<ORDER-k.value-j.value+1>();
459
+ jac2.IncAlpha2();
460
+ }));
461
+ jac1.IncAlpha2();
462
+ }));
463
+ /*
464
+ size_t ii = 0;
465
+ LegendrePolynomial leg;
466
+ // JacobiPolynomialAlpha jac1(1);
467
+ leg.EvalScaled
468
+ (IC<ORDER>(), lami[0], lami[0]+lami[1],
469
+ SBLambda ([&](auto k, Tx polz) LAMBDA_INLINE
470
+ {
471
+ JacobiPolynomialFix<1+2*k,0> jac1;
472
+ // JacobiPolynomialAlpha jac2(2*k+2);
473
+ jac1.EvalScaledMult
474
+ (IC<ORDER-k>(), lami[1], lami[0]+lami[1]+lami[2], polz,
475
+ SBLambda ([&] (auto j, Tx polsy) LAMBDA_INLINE
476
+ {
477
+ JacobiPolynomialFix<2+2*k+2*j,0> jac2;
478
+ jac2.EvalMult(IC<ORDER-k-j>(), lami[2], polsy, shape+ii);
479
+ ii += IC<ORDER-k-j+1>();
480
+ // jac2.IncAlpha2();
481
+ }));
482
+ // jac1.IncAlpha2();
483
+ }));
484
+ */
485
+ }
486
+ };
487
+
488
+
489
+
490
+ #ifdef FILE_L2HOFEFO_CPP
491
+ #define L2HOFEFO_EXTERN
492
+
493
+ #else
494
+ #define L2HOFEFO_EXTERN extern
495
+ #endif
496
+
497
+ /*
498
+ L2HOFEFO_EXTERN template class T_ScalarFiniteElement< L2HighOrderFEFO_Shapes<ET_TRIG,0>, ET_TRIG, DGFiniteElement<2>>;
499
+ L2HOFEFO_EXTERN template class T_ScalarFiniteElement< L2HighOrderFEFO_Shapes<ET_TRIG,1>, ET_TRIG, DGFiniteElement<2>>;
500
+ L2HOFEFO_EXTERN template class T_ScalarFiniteElement< L2HighOrderFEFO_Shapes<ET_TRIG,2>, ET_TRIG, DGFiniteElement<2>>;
501
+ L2HOFEFO_EXTERN template class T_ScalarFiniteElement< L2HighOrderFEFO_Shapes<ET_TRIG,3>, ET_TRIG, DGFiniteElement<2>>;
502
+ L2HOFEFO_EXTERN template class T_ScalarFiniteElement< L2HighOrderFEFO_Shapes<ET_TRIG,4>, ET_TRIG, DGFiniteElement<2>>;
503
+ L2HOFEFO_EXTERN template class T_ScalarFiniteElement< L2HighOrderFEFO_Shapes<ET_TRIG,5>, ET_TRIG, DGFiniteElement<2>>;
504
+ L2HOFEFO_EXTERN template class T_ScalarFiniteElement< L2HighOrderFEFO_Shapes<ET_TRIG,6>, ET_TRIG, DGFiniteElement<2>>;
505
+ L2HOFEFO_EXTERN template class T_ScalarFiniteElement< L2HighOrderFEFO_Shapes<ET_TRIG,7>, ET_TRIG, DGFiniteElement<2>>;
506
+ L2HOFEFO_EXTERN template class T_ScalarFiniteElement< L2HighOrderFEFO_Shapes<ET_TRIG,8>, ET_TRIG, DGFiniteElement<2>>;
507
+ */
508
+
509
+ /*
510
+ L2HOFEFO_EXTERN template class L2HighOrderFE<ET_TRIG, L2HighOrderFEFO_Shapes<ET_TRIG,0>>;
511
+ L2HOFEFO_EXTERN template class L2HighOrderFE<ET_TRIG, L2HighOrderFEFO_Shapes<ET_TRIG,1>>;
512
+ L2HOFEFO_EXTERN template class L2HighOrderFE<ET_TRIG, L2HighOrderFEFO_Shapes<ET_TRIG,2>>;
513
+ L2HOFEFO_EXTERN template class L2HighOrderFE<ET_TRIG, L2HighOrderFEFO_Shapes<ET_TRIG,3>>;
514
+ L2HOFEFO_EXTERN template class L2HighOrderFE<ET_TRIG, L2HighOrderFEFO_Shapes<ET_TRIG,4>>;
515
+ L2HOFEFO_EXTERN template class L2HighOrderFE<ET_TRIG, L2HighOrderFEFO_Shapes<ET_TRIG,5>>;
516
+ L2HOFEFO_EXTERN template class L2HighOrderFE<ET_TRIG, L2HighOrderFEFO_Shapes<ET_TRIG,6>>;
517
+ L2HOFEFO_EXTERN template class L2HighOrderFE<ET_TRIG, L2HighOrderFEFO_Shapes<ET_TRIG,7>>;
518
+ L2HOFEFO_EXTERN template class L2HighOrderFE<ET_TRIG, L2HighOrderFEFO_Shapes<ET_TRIG,8>>;
519
+ // L2HOFEFO_EXTERN template class L2HighOrderFE<ET_TRIG, L2HighOrderFEFO_Shapes<ET_TRIG,9>>;
520
+ // L2HOFEFO_EXTERN template class L2HighOrderFE<ET_TRIG, L2HighOrderFEFO_Shapes<ET_TRIG,10>>;
521
+ */
522
+
523
+ /*
524
+ L2HOFEFO_EXTERN template class L2HighOrderFEFO<ET_TRIG,0>;
525
+ L2HOFEFO_EXTERN template class L2HighOrderFEFO<ET_TRIG,1>;
526
+ L2HOFEFO_EXTERN template class L2HighOrderFEFO<ET_TRIG,2>;
527
+ L2HOFEFO_EXTERN template class L2HighOrderFEFO<ET_TRIG,3>;
528
+ L2HOFEFO_EXTERN template class L2HighOrderFEFO<ET_TRIG,4>;
529
+ L2HOFEFO_EXTERN template class L2HighOrderFEFO<ET_TRIG,5>;
530
+ L2HOFEFO_EXTERN template class L2HighOrderFEFO<ET_TRIG,6>;
531
+ L2HOFEFO_EXTERN template class L2HighOrderFEFO<ET_TRIG,7>;
532
+ L2HOFEFO_EXTERN template class L2HighOrderFEFO<ET_TRIG,8>;
533
+ */
534
+ // L2HOFEFO_EXTERN template class L2HighOrderFEFO<ET_TRIG,9>;
535
+ // L2HOFEFO_EXTERN template class L2HighOrderFEFO<ET_TRIG,10>;
536
+
537
+
538
+ }
539
+
540
+
541
+ #endif
542
+