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,328 @@
1
+ #ifndef FILE_DIFFOP_IMPL
2
+ #define FILE_DIFFOP_IMPL
3
+
4
+ /*********************************************************************/
5
+ /* File: diffop.hpp */
6
+ /* Author: Joachim Schoeberl */
7
+ /* Date: 24. Nov. 2009 */
8
+ /*********************************************************************/
9
+
10
+
11
+ #include "diffop.hpp"
12
+
13
+ namespace ngfem
14
+ {
15
+
16
+ /*
17
+ template <typename DIFFOP>
18
+ T_DifferentialOperator<DIFFOP> :: T_DifferentialOperator()
19
+ : DifferentialOperator(DIFFOP::DIM_DMAT, 1, VorB(int(DIM_SPACE)-int(DIM_ELEMENT)), DIFFOP::DIFFORDER)
20
+ {
21
+ static ngcore::RegisterClassForArchive<ngfem::T_DifferentialOperator<DIFFOP>, DifferentialOperator> reg;
22
+ Array<int> hdims;
23
+ hdims = DIFFOP::GetDimensions();
24
+ SetDimensions ( hdims );
25
+ }
26
+ */
27
+
28
+ template <typename DIFFOP>
29
+ void T_DifferentialOperator<DIFFOP> ::
30
+ CalcMatrix (const FiniteElement & bfel,
31
+ const BaseMappedIntegrationPoint & bmip,
32
+ BareSliceMatrix<double,ColMajor> mat,
33
+ LocalHeap & lh) const
34
+ {
35
+ const MappedIntegrationPoint<DIM_ELEMENT,DIM_SPACE> & mip =
36
+ static_cast<const MappedIntegrationPoint<DIM_ELEMENT,DIM_SPACE>&> (bmip);
37
+ auto mat2 = mat.Rows<DIM_DMAT>().Cols(DIM*bfel.GetNDof());
38
+ DIFFOP::GenerateMatrix (bfel, mip, mat2, lh);
39
+ }
40
+
41
+
42
+ template <bool ENABLE_PML>
43
+ class GenerateMatrix_PMLWrapper
44
+ {
45
+ public:
46
+ template <typename DIFFOP, typename FEL, typename MIP, typename MAT>
47
+ static void GenerateMatrix (const FEL & fel, const MIP & mip,
48
+ MAT & mat, LocalHeap & lh)
49
+ {
50
+ DIFFOP::GenerateMatrix (fel, mip, mat, lh);
51
+ }
52
+
53
+ template <typename DIFFOP, typename FEL, typename MIR, typename TVX, typename TVY>
54
+ static void ApplyIR (const FEL & fel, const MIR & mir,
55
+ const TVX & x, TVY & flux,
56
+ LocalHeap & lh)
57
+ {
58
+ DIFFOP::ApplyIR (fel, mir, x, flux, lh);
59
+ }
60
+ };
61
+
62
+ template <> class GenerateMatrix_PMLWrapper<false>
63
+ {
64
+ public:
65
+ template <typename DIFFOP, typename FEL, typename MIP, typename MAT>
66
+ static void GenerateMatrix (const FEL & fel, const MIP & mip,
67
+ MAT & mat, LocalHeap & lh)
68
+ {
69
+ Exception::Throw("PML not supported for diffop ", DIFFOP::Name(),
70
+ "\nit might be enough to set SUPPORT_PML to true in the diffop");
71
+ }
72
+ template <typename DIFFOP, typename FEL, typename MIR, typename TVX, typename TVY>
73
+ static void ApplyIR (const FEL & fel, const MIR & mir,
74
+ const TVX & x, TVY & y,
75
+ LocalHeap & lh)
76
+ {
77
+ Exception::Throw("PML not supported for diffop ", DIFFOP::Name(),
78
+ " ApplyIR\nit might be enough to set SUPPORT_PML to true in the diffop");
79
+ }
80
+ };
81
+
82
+
83
+
84
+
85
+ template <typename DIFFOP>
86
+ void T_DifferentialOperator<DIFFOP> ::
87
+ CalcMatrix (const FiniteElement & bfel,
88
+ const BaseMappedIntegrationPoint & bmip,
89
+ BareSliceMatrix<Complex,ColMajor> mat,
90
+ LocalHeap & lh) const
91
+ {
92
+ if (bmip.IsComplex())
93
+ {
94
+ const MappedIntegrationPoint<DIM_ELEMENT,DIM_SPACE,Complex> & mip =
95
+ static_cast<const MappedIntegrationPoint<DIM_ELEMENT,DIM_SPACE,Complex>&> (bmip);
96
+ // DIFFOP::GenerateMatrix (bfel, mip, mat, lh);
97
+ GenerateMatrix_PMLWrapper<DIFFOP::SUPPORT_PML>::template GenerateMatrix<DIFFOP> (bfel, mip, mat, lh);
98
+ }
99
+ else
100
+ {
101
+ const MappedIntegrationPoint<DIM_ELEMENT,DIM_SPACE> & mip =
102
+ static_cast<const MappedIntegrationPoint<DIM_ELEMENT,DIM_SPACE>&> (bmip);
103
+ GenerateMatrix_PMLWrapper<DIFFOP::SUPPORT_PML>::template GenerateMatrix<DIFFOP> (bfel, mip, mat, lh);
104
+ // DIFFOP::GenerateMatrix (bfel, mip, mat, lh);
105
+ // throw Exception ("cannot do complex matrix for real mip");
106
+ // ThrowException ("cannot do complex matrix for real mip");
107
+ }
108
+ }
109
+
110
+ template <typename DIFFOP>
111
+ void T_DifferentialOperator<DIFFOP> ::
112
+ CalcMatrix (const FiniteElement & bfel,
113
+ const BaseMappedIntegrationRule & bmir,
114
+ BareSliceMatrix<double,ColMajor> mat,
115
+ LocalHeap & lh) const
116
+ {
117
+ const MappedIntegrationRule<DIM_ELEMENT,DIM_SPACE> & mir =
118
+ static_cast<const MappedIntegrationRule<DIM_ELEMENT,DIM_SPACE>&> (bmir);
119
+ DIFFOP::GenerateMatrixIR (bfel, mir, mat, lh);
120
+ }
121
+
122
+ template <typename DIFFOP>
123
+ void T_DifferentialOperator<DIFFOP> ::
124
+ CalcMatrix (const FiniteElement & bfel,
125
+ const SIMD_BaseMappedIntegrationRule & bmir,
126
+ BareSliceMatrix<SIMD<double>> mat) const
127
+ {
128
+ DIFFOP::GenerateMatrixSIMDIR (bfel, bmir, mat);
129
+ }
130
+
131
+
132
+ template <typename DIFFOP>
133
+ void T_DifferentialOperator<DIFFOP> ::
134
+ Apply (const FiniteElement & bfel,
135
+ const BaseMappedIntegrationPoint & bmip,
136
+ BareSliceVector<double> x,
137
+ FlatVector<double> flux,
138
+ LocalHeap & lh) const
139
+ {
140
+ const MappedIntegrationPoint<DIM_ELEMENT,DIM_SPACE> & mip =
141
+ static_cast<const MappedIntegrationPoint<DIM_ELEMENT,DIM_SPACE>&> (bmip);
142
+ DIFFOP::Apply (bfel, mip, x, flux, lh);
143
+ }
144
+
145
+ #ifndef FASTCOMPILE
146
+ template <typename DIFFOP>
147
+ void T_DifferentialOperator<DIFFOP> ::
148
+ Apply (const FiniteElement & bfel,
149
+ const BaseMappedIntegrationRule & bmir,
150
+ BareSliceVector<double> x,
151
+ BareSliceMatrix<double> flux,
152
+ LocalHeap & lh) const
153
+ {
154
+ const MappedIntegrationRule<DIM_ELEMENT,DIM_SPACE> & mir =
155
+ static_cast<const MappedIntegrationRule<DIM_ELEMENT,DIM_SPACE>&> (bmir);
156
+ auto fluxsize = flux.AddSize(mir.Size(), DIFFOP::DIM_DMAT);
157
+ DIFFOP::ApplyIR (bfel, mir, x, fluxsize, lh);
158
+ }
159
+
160
+ template <typename DIFFOP>
161
+ void T_DifferentialOperator<DIFFOP> ::
162
+ Apply (const FiniteElement & bfel,
163
+ const BaseMappedIntegrationPoint & bmip,
164
+ BareSliceVector<Complex> x,
165
+ FlatVector<Complex> flux,
166
+ LocalHeap & lh) const
167
+ {
168
+ const MappedIntegrationPoint<DIM_ELEMENT,DIM_SPACE> & mip =
169
+ static_cast<const MappedIntegrationPoint<DIM_ELEMENT,DIM_SPACE>&> (bmip);
170
+ DIFFOP::Apply (bfel, mip, x, flux, lh);
171
+ }
172
+
173
+ template <typename DIFFOP>
174
+ void T_DifferentialOperator<DIFFOP> ::
175
+ Apply (const FiniteElement & bfel,
176
+ const BaseMappedIntegrationRule & bmir,
177
+ BareSliceVector<Complex> x,
178
+ BareSliceMatrix<Complex> flux,
179
+ LocalHeap & lh) const
180
+ {
181
+ auto fluxsize = flux.AddSize(bmir.Size(), DIFFOP::DIM_DMAT);
182
+ if (bmir.IsComplex())
183
+ {
184
+ const MappedIntegrationRule<DIM_ELEMENT,DIM_SPACE,Complex> & mir =
185
+ static_cast<const MappedIntegrationRule<DIM_ELEMENT,DIM_SPACE,Complex>&> (bmir);
186
+
187
+ GenerateMatrix_PMLWrapper<DIFFOP::SUPPORT_PML>::template ApplyIR<DIFFOP> (bfel, mir, x, fluxsize, lh);
188
+ // DIFFOP::ApplyIR (bfel, mir, x, flux, lh);
189
+ }
190
+ else
191
+ {
192
+ const MappedIntegrationRule<DIM_ELEMENT,DIM_SPACE> & mir =
193
+ static_cast<const MappedIntegrationRule<DIM_ELEMENT,DIM_SPACE>&> (bmir);
194
+ DIFFOP::ApplyIR (bfel, mir, x, fluxsize, lh);
195
+ }
196
+
197
+
198
+ }
199
+
200
+
201
+ template <typename DIFFOP>
202
+ void T_DifferentialOperator<DIFFOP> ::
203
+ Apply (const FiniteElement & bfel,
204
+ const SIMD_BaseMappedIntegrationRule & bmir,
205
+ BareSliceVector<double> x,
206
+ BareSliceMatrix<SIMD<double>> flux) const
207
+ {
208
+ DIFFOP::ApplySIMDIR (bfel, bmir, x, flux);
209
+ }
210
+
211
+ template <typename DIFFOP>
212
+ void T_DifferentialOperator<DIFFOP> ::
213
+ Apply (const FiniteElement & bfel,
214
+ const SIMD_BaseMappedIntegrationRule & bmir,
215
+ BareSliceVector<Complex> x,
216
+ BareSliceMatrix<SIMD<Complex>> flux) const
217
+ {
218
+ DIFFOP::ApplySIMDIR (bfel, bmir, x, flux);
219
+ }
220
+
221
+
222
+
223
+ template <typename DIFFOP>
224
+ void T_DifferentialOperator<DIFFOP> ::
225
+ ApplyTrans (const FiniteElement & bfel,
226
+ const BaseMappedIntegrationPoint & bmip,
227
+ FlatVector<double> flux,
228
+ BareSliceVector<double> x,
229
+ LocalHeap & lh) const
230
+ {
231
+ const MappedIntegrationPoint<DIM_ELEMENT,DIM_SPACE> & mip =
232
+ static_cast<const MappedIntegrationPoint<DIM_ELEMENT,DIM_SPACE>&> (bmip);
233
+ DIFFOP::ApplyTrans (bfel, mip, flux, x, lh);
234
+ }
235
+
236
+ template <typename DIFFOP>
237
+ void T_DifferentialOperator<DIFFOP> ::
238
+ ApplyTrans (const FiniteElement & bfel,
239
+ const BaseMappedIntegrationPoint & bmip,
240
+ FlatVector<Complex> flux,
241
+ BareSliceVector<Complex> x,
242
+ LocalHeap & lh) const
243
+ {
244
+ const MappedIntegrationPoint<DIM_ELEMENT,DIM_SPACE> & mip =
245
+ static_cast<const MappedIntegrationPoint<DIM_ELEMENT,DIM_SPACE>&> (bmip);
246
+ DIFFOP::ApplyTrans (bfel, mip, flux, x, lh);
247
+ }
248
+
249
+ template <typename DIFFOP>
250
+ void T_DifferentialOperator<DIFFOP> ::
251
+ ApplyTrans (const FiniteElement & bfel,
252
+ const BaseMappedIntegrationRule & bmir,
253
+ FlatMatrix<double> flux,
254
+ BareSliceVector<double> x,
255
+ LocalHeap & lh) const
256
+ {
257
+ const MappedIntegrationRule<DIM_ELEMENT,DIM_SPACE> & mir =
258
+ static_cast<const MappedIntegrationRule<DIM_ELEMENT,DIM_SPACE>&> (bmir);
259
+ DIFFOP::ApplyTransIR (bfel, mir, flux, x, lh);
260
+ }
261
+
262
+ template <typename DIFFOP>
263
+ void T_DifferentialOperator<DIFFOP> ::
264
+ ApplyTrans (const FiniteElement & bfel,
265
+ const BaseMappedIntegrationRule & bmir,
266
+ FlatMatrix<Complex> flux,
267
+ BareSliceVector<Complex> x,
268
+ LocalHeap & lh) const
269
+ {
270
+ const MappedIntegrationRule<DIM_ELEMENT,DIM_SPACE> & mir =
271
+ static_cast<const MappedIntegrationRule<DIM_ELEMENT,DIM_SPACE>&> (bmir);
272
+ DIFFOP::ApplyTransIR (bfel, mir, flux, x, lh);
273
+ }
274
+
275
+
276
+ template <typename DIFFOP>
277
+ void T_DifferentialOperator<DIFFOP> ::
278
+ AddTrans (const FiniteElement & bfel,
279
+ const SIMD_BaseMappedIntegrationRule & bmir,
280
+ BareSliceMatrix<SIMD<double>> flux,
281
+ BareSliceVector<double> x) const
282
+ {
283
+ DIFFOP::AddTransSIMDIR (bfel, bmir, flux, x);
284
+ }
285
+
286
+ template <typename DIFFOP>
287
+ void T_DifferentialOperator<DIFFOP> ::
288
+ AddTrans (const FiniteElement & bfel,
289
+ const SIMD_BaseMappedIntegrationRule & bmir,
290
+ BareSliceMatrix<SIMD<Complex>> flux,
291
+ BareSliceVector<Complex> x) const
292
+ {
293
+ DIFFOP::AddTransSIMDIR (bfel, bmir, flux, x);
294
+ }
295
+
296
+ template <typename DIFFOP>
297
+ int T_DifferentialOperator<DIFFOP> :: DimRef() const
298
+ {
299
+ return DIFFOP::DimRef();
300
+ }
301
+
302
+
303
+ template <typename DIFFOP>
304
+ void T_DifferentialOperator<DIFFOP> ::
305
+ CalcMatrix (const FiniteElement & fel,
306
+ const IntegrationPoint & ip,
307
+ BareSliceMatrix<double,ColMajor> mat,
308
+ LocalHeap & lh) const
309
+ {
310
+ DIFFOP::GenerateMatrixRef(fel, ip, mat, lh);
311
+ }
312
+
313
+ template <typename DIFFOP>
314
+ void T_DifferentialOperator<DIFFOP> ::
315
+ CalcTransformationMatrix (const BaseMappedIntegrationPoint & bmip,
316
+ SliceMatrix<double> trans,
317
+ LocalHeap & lh) const
318
+ {
319
+ const MappedIntegrationPoint<DIM_ELEMENT,DIM_SPACE> & mip =
320
+ static_cast<const MappedIntegrationPoint<DIM_ELEMENT,DIM_SPACE>&> (bmip);
321
+ DIFFOP::CalcTransformationMatrix(mip, trans, lh);
322
+ }
323
+
324
+ #endif
325
+ }
326
+
327
+
328
+ #endif
@@ -0,0 +1,123 @@
1
+ #ifndef DIFFOPWITHFACTOR_HPP
2
+ #define DIFFOPWITHFACTOR_HPP
3
+
4
+
5
+
6
+ namespace ngsbem
7
+ {
8
+ using namespace ngfem;
9
+
10
+ class DifferentialOperatorWithFactor : public DifferentialOperator
11
+ {
12
+ shared_ptr<DifferentialOperator> diffop;
13
+ shared_ptr<CoefficientFunction> factor;
14
+
15
+ public:
16
+ DifferentialOperatorWithFactor (shared_ptr<DifferentialOperator> adiffop,
17
+ shared_ptr<CoefficientFunction> afactor)
18
+ : DifferentialOperator(afactor->Dimensions()[0], 1, adiffop->VB(), adiffop->DiffOrder()),
19
+ diffop(adiffop), factor(afactor)
20
+ {
21
+ ;
22
+ }
23
+
24
+ int DimRef() const override { return diffop->DimRef(); }
25
+
26
+ virtual IntRange UsedDofs(const FiniteElement & fel) const override { return diffop->UsedDofs(fel); }
27
+
28
+ auto BaseDiffOp() const { return diffop; }
29
+
30
+ void CalcMatrix (const FiniteElement & fel,
31
+ const BaseMappedIntegrationPoint & mip,
32
+ BareSliceMatrix<double,ColMajor> mat,
33
+ LocalHeap & lh) const override
34
+ {
35
+ FlatMatrix<double,ColMajor> hmat(diffop->Dim(), fel.GetNDof(), lh);
36
+ diffop -> CalcMatrix (fel, mip, hmat, lh);
37
+
38
+ auto dims = factor->Dimensions();
39
+ FlatMatrix<double> factorx(dims[0], dims[1], lh);
40
+ factor->Evaluate (mip, factorx.AsVector());
41
+
42
+ IntRange used = diffop->UsedDofs(fel);
43
+ mat.Cols(used) = factorx * hmat.Cols(used);
44
+ }
45
+
46
+ void CalcMatrix (const FiniteElement & fel,
47
+ const SIMD_BaseMappedIntegrationRule & mir,
48
+ BareSliceMatrix<SIMD<double>> mat) const override
49
+ {
50
+ // *testout << "CalcMatrix SIMD" << endl;
51
+ Matrix<SIMD<double>> hmat (fel.GetNDof()*diffop->Dim(), mir.Size());
52
+ // hmat = SIMD<double>(0.0);
53
+ diffop -> CalcMatrix (fel, mir, hmat);
54
+
55
+ Matrix<SIMD<double>> fac(factor->Dimension(), mir.Size());
56
+ factor -> Evaluate (mir, fac);
57
+
58
+ auto dims = factor -> Dimensions();
59
+
60
+ mat.Rows(fel.GetNDof()*dims[1]).Cols(mir.Size()) = SIMD<double>(0.0);
61
+
62
+ for (size_t i = 0; i < mir.Size(); i++)
63
+ for (size_t j = 0; j < dims[0]; j++)
64
+ for (size_t k = 0; k < dims[1]; k++)
65
+ mat.Col(i).Slice(j,dims[0]) += fac(j*dims[1]+k, i) * hmat.Col(i).Slice(k, dims[1]);
66
+ }
67
+
68
+
69
+ void CalcMatrix (const FiniteElement & fel,
70
+ const IntegrationPoint & ip,
71
+ BareSliceMatrix<double,ColMajor> mat,
72
+ LocalHeap & lh) const override
73
+ {
74
+ diffop -> CalcMatrix(fel, ip, mat, lh);
75
+ /*
76
+ *testout << "calcmatrix mip" << endl
77
+ << mat.Rows(Dim()).Cols(fel.GetNDof()) << endl;
78
+ */
79
+ }
80
+
81
+ void CalcTransformationMatrix (const BaseMappedIntegrationPoint & mip,
82
+ SliceMatrix<double> trans,
83
+ LocalHeap & lh) const override
84
+ {
85
+ HeapReset hr(lh);
86
+ auto dims = factor->Dimensions();
87
+
88
+ FlatMatrix<double> factorx(dims[0], dims[1], lh);
89
+ factor->Evaluate (mip, factorx.AsVector());
90
+
91
+ FlatMatrix<double> basetrans(diffop->Dim(), diffop->DimRef(), lh);
92
+ diffop -> CalcTransformationMatrix(mip, basetrans, lh);
93
+
94
+ trans = factorx * basetrans;
95
+ // *testout << "trans = " << trans << endl;
96
+ }
97
+
98
+
99
+ void Apply (const FiniteElement & fel,
100
+ const SIMD_BaseMappedIntegrationRule & mir,
101
+ BareSliceVector<double> x,
102
+ BareSliceMatrix<SIMD<double>> flux) const override
103
+ {
104
+ auto dims = factor->Dimensions();
105
+
106
+ Matrix<SIMD<double>> tmpflux(dims[1], mir.Size());
107
+ Matrix<SIMD<double>> factorx(dims[0]*dims[1], mir.Size());
108
+
109
+ diffop -> Apply (fel, mir, x, tmpflux);
110
+ factor -> Evaluate (mir, factorx);
111
+ flux.Rows(0, dims[0]).Cols(0, mir.Size()) = SIMD<double>(0.0);
112
+ for (int i = 0; i < dims[0]; i++)
113
+ for (int j = 0; j < dims[1]; j++)
114
+ flux.Row(i).Range(mir.Size()) += pw_mult(factorx.Row(i*dims[1]+j), tmpflux.Row(j));
115
+ }
116
+
117
+
118
+ };
119
+
120
+
121
+ }
122
+
123
+ #endif
@@ -0,0 +1,84 @@
1
+ #ifndef FILE_DISCONTINUOUS_
2
+ #define FILE_DISCONTINUOUS_
3
+
4
+ /*********************************************************************/
5
+ /* File: discontinuous.hpp */
6
+ /* Author: Joachim Schoeberl */
7
+ /* Date: Jun 2019 */
8
+ /*********************************************************************/
9
+
10
+ #include "fespace.hpp"
11
+
12
+ namespace ngcomp
13
+ {
14
+
15
+ // A discontinuous wrapper class for fespaces
16
+
17
+ class DiscontinuousFESpace : public FESpace
18
+ {
19
+ protected:
20
+ Array<DofId> first_element_dof;
21
+ shared_ptr<FESpace> space;
22
+ VorB vb;
23
+
24
+ public:
25
+ DiscontinuousFESpace (shared_ptr<FESpace> space, const Flags & flags);
26
+
27
+ virtual ~DiscontinuousFESpace () { ; }
28
+ void Update () override;
29
+
30
+ void FinalizeUpdate() override
31
+ {
32
+ space->FinalizeUpdate();
33
+ FESpace::FinalizeUpdate();
34
+ }
35
+
36
+ virtual FlatArray<VorB> GetDualShapeNodes (VorB vb) const override
37
+ {
38
+ return space->GetDualShapeNodes(vb);
39
+ }
40
+
41
+
42
+ virtual string GetClassName() const override { return "Discontinuous" + space->GetClassName(); }
43
+ shared_ptr<FESpace> GetBaseSpace() const { return space; }
44
+
45
+ virtual FiniteElement & GetFE (ElementId ei, Allocator & alloc) const override;
46
+
47
+ // virtual size_t GetNDof () const override { return space->GetNDof(); }
48
+ // virtual size_t GetNDofLevel (int level) const override { return space->GetNDofLevel(level); }
49
+
50
+ virtual void GetDofNrs (ElementId ei, Array<DofId> & dnums) const override;
51
+ virtual void GetDofNrs (NodeId ni, Array<DofId> & dnums) const override;
52
+
53
+ virtual SymbolTable<shared_ptr<DifferentialOperator>> GetAdditionalEvaluators () const override
54
+ { return space->GetAdditionalEvaluators (); }
55
+
56
+ [[deprecated("Use GetDofNrs(NODE_TYPE(NT_VERTEX,nr) instead")]]
57
+ virtual void GetVertexDofNrs (int vnr, Array<DofId> & dnums) const override;
58
+
59
+ [[deprecated("Use GetDofNrs(NODE_TYPE(NT_EDGE,nr) instead")]]
60
+ virtual void GetEdgeDofNrs (int ednr, Array<DofId> & dnums) const override;
61
+
62
+ virtual void GetFaceDofNrs (int fanr, Array<DofId> & dnums) const override;
63
+
64
+ virtual void GetInnerDofNrs (int elnr, Array<DofId> & dnums) const override
65
+ { space->GetInnerDofNrs(elnr, dnums); }
66
+
67
+ virtual void VTransformMR (ElementId ei,
68
+ SliceMatrix<double> mat, TRANSFORM_TYPE tt) const override
69
+ { space-> VTransformMR(ei, mat, tt); }
70
+ virtual void VTransformMC (ElementId ei,
71
+ SliceMatrix<Complex> mat, TRANSFORM_TYPE tt) const override
72
+ { space->VTransformMC (ei, mat, tt); }
73
+ virtual void VTransformVR (ElementId ei,
74
+ SliceVector<double> vec, TRANSFORM_TYPE tt) const override
75
+ { space->VTransformVR(ei, vec, tt); }
76
+ virtual void VTransformVC (ElementId ei,
77
+ SliceVector<Complex> vec, TRANSFORM_TYPE tt) const override
78
+ { space->VTransformVC(ei, vec, tt); }
79
+ };
80
+
81
+ }
82
+
83
+
84
+ #endif // FILE_DISCONTINUOUS_