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,631 @@
1
+ #ifndef FILE_PMLTRAFO
2
+ #define FILE_PMLTRAFO
3
+
4
+ /*********************************************************************/
5
+ /* File: pmltrafo.hpp */
6
+ /* Author: M. Wess, J. Schoeberl */
7
+ /* Date: 2016 */
8
+ /*********************************************************************/
9
+
10
+ #include <coefficient.hpp>
11
+
12
+ namespace ngcomp
13
+ {
14
+ //PML base object for mapping points to Vec<DIM> cast to PML_TransformationDim
15
+ class PML_Transformation
16
+ {
17
+ int dim;
18
+ public:
19
+
20
+ PML_Transformation(int _dim) : dim(_dim) { ; }
21
+
22
+ virtual ~PML_Transformation() { ; }
23
+
24
+ INLINE int GetDimension() const { return dim; }
25
+
26
+ virtual string ParameterString() const = 0;
27
+
28
+ virtual void MapPointV(const BaseMappedIntegrationPoint & hpoint, FlatVector<Complex> point, FlatMatrix<Complex> jac) const = 0;
29
+
30
+ virtual void MapPointV(FlatVector<double> hpoint, FlatVector<Complex> point, FlatMatrix<Complex> jac) const = 0;
31
+
32
+ };
33
+
34
+
35
+ /// print PML
36
+ inline ostream & operator<< (ostream & ost, const PML_Transformation & pml)
37
+ {
38
+ ost << typeid(pml).name() << endl << pml.ParameterString();
39
+ return ost;
40
+ }
41
+
42
+ template <int DIM>
43
+ class PML_TransformationDim;
44
+
45
+ class PML_CF : public CoefficientFunction
46
+ {
47
+ shared_ptr<PML_Transformation> pmltrafo;
48
+ int dim;
49
+ public:
50
+
51
+ PML_CF(shared_ptr<PML_Transformation> _pmltrafo) :
52
+ CoefficientFunction(_pmltrafo->GetDimension(),true),
53
+ pmltrafo(_pmltrafo), dim(_pmltrafo->GetDimension())
54
+ { ; }
55
+ using CoefficientFunction::Evaluate;
56
+ double Evaluate(const BaseMappedIntegrationPoint & ip) const
57
+ {
58
+ throw Exception("PML_CF::Evaluate: PML_CF is complex");
59
+ }
60
+ void Evaluate(const BaseMappedIntegrationPoint & ip, FlatVector<Complex> values) const
61
+ {
62
+ STACK_ARRAY(double,jacmem,2*dim*dim);
63
+ FlatMatrix<Complex> jac(dim,dim,reinterpret_cast<Complex*>(&jacmem[0]));
64
+ if (ip.IsComplex())
65
+ {
66
+ STACK_ARRAY(double,pmem,dim);
67
+ FlatVector<> rpoint(dim,pmem);
68
+ for (int i : Range(dim))
69
+ rpoint(i)=ip.GetPointComplex()(i).real();
70
+ pmltrafo->MapPointV(rpoint,values,jac);
71
+ }
72
+ else
73
+ pmltrafo->MapPointV(ip,values,jac);
74
+ }
75
+ };
76
+
77
+ class PML_Jac : public CoefficientFunction
78
+ {
79
+ shared_ptr<PML_Transformation> pmltrafo;
80
+ int dim;
81
+ public:
82
+
83
+ PML_Jac(shared_ptr<PML_Transformation> _pmltrafo) :
84
+ CoefficientFunction(sqr(_pmltrafo->GetDimension()),true),
85
+ pmltrafo(_pmltrafo), dim(_pmltrafo->GetDimension())
86
+ {
87
+ SetDimensions (ngstd::IVec<2>(dim,dim));
88
+ }
89
+ using CoefficientFunction::Evaluate;
90
+ double Evaluate(const BaseMappedIntegrationPoint & ip) const
91
+ {
92
+ throw Exception("PML_Jac::Evaluate: PML_Jac is complex");
93
+ }
94
+ void Evaluate(const BaseMappedIntegrationPoint & ip, FlatVector<Complex> values) const
95
+ {
96
+ STACK_ARRAY(double,jacmem,2*dim*dim);
97
+ STACK_ARRAY(double,vmem,dim);
98
+ FlatMatrix<Complex> jac(dim,dim,reinterpret_cast<Complex*>(&jacmem[0]));
99
+ FlatVector<Complex> vec(dim,reinterpret_cast<Complex*>(&vmem[0]));
100
+ if (ip.IsComplex())
101
+ {
102
+ STACK_ARRAY(double,pmem,dim);
103
+ FlatVector<> rpoint(dim,pmem);
104
+ for (int i : Range(dim))
105
+ rpoint(i)=ip.GetPointComplex()(i).real();
106
+ pmltrafo->MapPointV(rpoint,vec,jac);
107
+ }
108
+ else
109
+ pmltrafo->MapPointV(ip,vec,jac);
110
+ values = jac.AsVector();
111
+ }
112
+ };
113
+ class PML_JacInv : public CoefficientFunction
114
+ {
115
+ shared_ptr<PML_Transformation> pmltrafo;
116
+ int dim;
117
+ public:
118
+
119
+ PML_JacInv(shared_ptr<PML_Transformation> _pmltrafo) :
120
+ CoefficientFunction(_pmltrafo->GetDimension()*_pmltrafo->GetDimension(),true),
121
+ pmltrafo(_pmltrafo),
122
+ dim(_pmltrafo->GetDimension())
123
+ {
124
+ SetDimensions(ngstd::IVec<2>(dim,dim));
125
+ }
126
+ using CoefficientFunction::Evaluate;
127
+ double Evaluate(const BaseMappedIntegrationPoint & ip) const
128
+ {
129
+ throw Exception("PML_JacInv::Evaluate: PML_JacInv is complex");
130
+ }
131
+ void Evaluate(const BaseMappedIntegrationPoint & ip, FlatVector<Complex> values) const
132
+ {
133
+ STACK_ARRAY(double,jacmem,2*dim*dim);
134
+ STACK_ARRAY(double,vmem,2*dim);
135
+ FlatMatrix<Complex> jac(dim,dim,reinterpret_cast<Complex*>(&jacmem[0]));
136
+ FlatVector<Complex> vec(dim,reinterpret_cast<Complex*>(&vmem[0]));
137
+ if (ip.IsComplex())
138
+ {
139
+ STACK_ARRAY(double,pmem,dim);
140
+ FlatVector<> rpoint(dim,pmem);
141
+ for (int i : Range(dim))
142
+ rpoint(i)=ip.GetPointComplex()(i).real();
143
+ pmltrafo->MapPointV(rpoint,vec,jac);
144
+ }
145
+ else
146
+ pmltrafo->MapPointV(ip,vec,jac);
147
+ CalcInverse(jac);
148
+ values=jac.AsVector();
149
+ }
150
+ };
151
+ class PML_Det : public CoefficientFunction
152
+ {
153
+ shared_ptr<PML_Transformation> pmltrafo;
154
+ int dim;
155
+ public:
156
+
157
+ PML_Det(shared_ptr<PML_Transformation> _pmltrafo) :
158
+ CoefficientFunction(1,true), pmltrafo(_pmltrafo),dim(_pmltrafo->GetDimension())
159
+ { ; }
160
+ using CoefficientFunction::Evaluate;
161
+ double Evaluate(const BaseMappedIntegrationPoint & ip) const
162
+ {
163
+ throw Exception("PML_Det::Evaluate: PML_Det is complex");
164
+ }
165
+ Complex EvaluateComplex(const BaseMappedIntegrationPoint & ip) const
166
+ {
167
+ STACK_ARRAY(double,jacmem,2*dim*dim);
168
+ STACK_ARRAY(double,vmem,2*dim);
169
+ FlatMatrix<Complex> jac(dim,dim,reinterpret_cast<Complex*>(&jacmem[0]));
170
+ FlatVector<Complex> vec(dim,reinterpret_cast<Complex*>(&vmem[0]));
171
+ if (ip.IsComplex())
172
+ {
173
+ STACK_ARRAY(double,pmem,dim);
174
+ FlatVector<> rpoint(dim,pmem);
175
+ for (int i : Range(dim))
176
+ rpoint(i)=ip.GetPointComplex()(i).real();
177
+ pmltrafo->MapPointV(rpoint,vec,jac);
178
+ }
179
+ else
180
+ pmltrafo->MapPointV(ip,vec,jac);
181
+ return Det(jac);
182
+ }
183
+ void Evaluate(const BaseMappedIntegrationPoint & ip, FlatVector<Complex> value) const
184
+ {
185
+ STACK_ARRAY(double,jacmem,2*dim*dim);
186
+ STACK_ARRAY(double,vmem,dim);
187
+ FlatMatrix<Complex> jac(dim,dim,reinterpret_cast<Complex*>(&jacmem[0]));
188
+ FlatVector<Complex> vec(dim,reinterpret_cast<Complex*>(&vmem[0]));
189
+ if (ip.IsComplex())
190
+ {
191
+ STACK_ARRAY(double,pmem,dim);
192
+ FlatVector<> rpoint(dim,pmem);
193
+ for (int i : Range(dim))
194
+ rpoint(i)=ip.GetPointComplex()(i).real();
195
+ pmltrafo->MapPointV(rpoint,vec,jac);
196
+ }
197
+ else
198
+ pmltrafo->MapPointV(ip,vec,jac);
199
+ value = Det(jac);
200
+ }
201
+ };
202
+
203
+ template <int DIM>
204
+ class PML_TransformationDim : public PML_Transformation
205
+ {
206
+ public:
207
+
208
+ PML_TransformationDim() : PML_Transformation(DIM) { ; }
209
+
210
+ virtual void MapIntegrationPoint(const BaseMappedIntegrationPoint & ip, Vec<DIM,Complex> & point,
211
+ Mat<DIM,DIM,Complex> & jac) const
212
+ {
213
+ Vec<DIM> hpoint = ip.GetPoint();
214
+ MapPoint(hpoint, point, jac);
215
+ }
216
+
217
+ virtual void MapPoint(Vec<DIM> & hpoint, Vec<DIM,Complex> & point,
218
+ Mat<DIM,DIM,Complex> & jac) const
219
+ {
220
+ throw Exception("PML_TransformationDim::MapPoint: no transformation specified");
221
+ }
222
+
223
+ virtual void MapPointV(const BaseMappedIntegrationPoint & hpoint, FlatVector<Complex> point, FlatMatrix<Complex> jac) const
224
+ {
225
+ Vec<DIM,Complex> vpoint;
226
+ Mat<DIM,DIM,Complex> mjac;
227
+ MapIntegrationPoint(hpoint,vpoint,mjac);
228
+ point = FlatVector<Complex>(vpoint);
229
+ jac = FlatMatrix<Complex>(mjac);
230
+ }
231
+
232
+ virtual void MapPointV(FlatVector<double> hpoint, FlatVector<Complex> point, FlatMatrix<Complex> jac) const
233
+ {
234
+ Vec<DIM,Complex> vpoint;
235
+ Mat<DIM,DIM,Complex> mjac;
236
+ Vec<DIM> vhpoint = hpoint;
237
+ MapPoint(vhpoint,vpoint,mjac);
238
+ point = FlatVector<Complex>(vpoint);
239
+ jac = FlatMatrix<Complex>(mjac);
240
+ }
241
+
242
+ };
243
+
244
+ template <int DIM>
245
+ class RadialPML_Transformation : public PML_TransformationDim<DIM>
246
+ {
247
+ Complex alpha;
248
+ double rad;
249
+ Vec<DIM> origin;
250
+ public:
251
+
252
+ RadialPML_Transformation(double _rad, Complex _alpha, FlatVector<double> _origin)
253
+ : PML_TransformationDim<DIM>(), alpha(_alpha), rad(_rad)
254
+ {
255
+ origin = 0.;
256
+ for (int i : Range(min(int(_origin.Size()),DIM)))
257
+ origin(i)=_origin(i);
258
+ }
259
+
260
+ ~RadialPML_Transformation() {;}
261
+
262
+ virtual string ParameterString() const
263
+ {
264
+ stringstream str;
265
+ str << "alpha: " << alpha << endl;
266
+ str << "radius: " << rad << endl;
267
+ str << "origin: " << origin;
268
+ return str.str();
269
+ }
270
+
271
+ virtual void MapPoint (Vec<DIM> & hpoint, Vec<DIM,Complex> & point,
272
+ Mat<DIM,DIM,Complex> & jac) const
273
+ {
274
+ Vec<DIM,double> rel_point = hpoint-origin;
275
+ double abs_x = L2Norm (rel_point);
276
+ if (abs_x <= rad)
277
+ {
278
+ point = hpoint;
279
+ jac = Id<DIM>();
280
+ }
281
+ else
282
+ {
283
+ Complex g = 1.+alpha*(1.0-rad/abs_x);
284
+ point = origin + g * rel_point;
285
+ // SZ: sollte da nicht abs_x * abs_x anstelle abs_x*abs_x * abs_x stehen?
286
+ // JS: das hat schon so gestimmt
287
+ jac =
288
+ g * Id<DIM>() + (rad*alpha/(abs_x*abs_x*abs_x)) *
289
+ (rel_point * Trans(rel_point));
290
+ }
291
+
292
+ }
293
+ };
294
+ template <int DIM>
295
+ class CartesianPML_Transformation : public PML_TransformationDim<DIM>
296
+ {
297
+ Mat<DIM,2> bounds;
298
+ Complex alpha;
299
+ public:
300
+
301
+ CartesianPML_Transformation(Mat<DIM,2> _bounds, Complex _alpha)
302
+ : PML_TransformationDim<DIM>(), bounds(_bounds), alpha(_alpha)
303
+ {
304
+ /*
305
+ bounds = 0.;
306
+ for (int i : Range(min(int(_bounds.Height()),DIM)))
307
+ for (int j : Range(min(int(_bounds.Width()),2)))
308
+ bounds(i,j)=_bounds(i,j);
309
+ */
310
+ ;
311
+ }
312
+
313
+ ~CartesianPML_Transformation() {;}
314
+
315
+ virtual string ParameterString() const
316
+ {
317
+ stringstream str;
318
+ str << "alpha: " << alpha << endl;
319
+ str << "bounds: " << bounds;
320
+ return str.str();
321
+ }
322
+
323
+ virtual void MapPoint (Vec<DIM> & hpoint, Vec<DIM,Complex> & point,
324
+ Mat<DIM,DIM,Complex> & jac) const
325
+ {
326
+ point = hpoint;
327
+ jac = Id<DIM>();
328
+ for (int j : Range(DIM))
329
+ {
330
+ if (hpoint(j)<bounds(j,0))
331
+ {
332
+ point(j)+=alpha*(hpoint(j)-bounds(j,0));
333
+ jac(j,j)+=alpha;
334
+ }
335
+ else if (hpoint(j)>bounds(j,1))
336
+ {
337
+ point(j)+=alpha*(hpoint(j)-bounds(j,1));
338
+ jac(j,j)+=alpha;
339
+ }
340
+ }
341
+ }
342
+ };
343
+
344
+
345
+ template <int DIM>
346
+ class HalfSpacePML_Transformation : public PML_TransformationDim<DIM>
347
+ {
348
+ Vec<DIM> point, normal;
349
+ Complex alpha;
350
+ public:
351
+ HalfSpacePML_Transformation(FlatVector<double> _point, FlatVector<double> _normal, Complex _alpha)
352
+ : PML_TransformationDim<DIM>(), alpha(_alpha)
353
+ {
354
+ point = 0.;
355
+ normal = 0.;
356
+ for (int i : Range(min(int(_point.Size()),DIM)))
357
+ point(i)=_point(i);
358
+ for (int i : Range(min(int(_normal.Size()),DIM)))
359
+ normal(i)=_normal(i);
360
+ normal/=L2Norm(normal);
361
+ }
362
+
363
+ ~HalfSpacePML_Transformation() {;}
364
+
365
+ virtual string ParameterString() const
366
+ {
367
+ stringstream str;
368
+ str << "point: " << point << endl;
369
+ str << "normal: " << normal;
370
+ return str.str();
371
+ }
372
+
373
+ virtual void MapPoint (Vec<DIM> & hpoint, Vec<DIM,Complex> & out,
374
+ Mat<DIM,DIM,Complex> & jac) const
375
+ {
376
+ out = hpoint;
377
+ jac = Id<DIM>();
378
+ double dot = InnerProduct(hpoint-point,normal); //normal has already norm 1
379
+ if (dot>0.)
380
+ {
381
+ out += alpha*dot*normal;
382
+ jac += alpha*normal*Trans(normal);
383
+ }
384
+ }
385
+ };
386
+ template <int DIM>
387
+ class BrickRadialPML_Transformation : public PML_TransformationDim<DIM>
388
+ {
389
+ Mat<DIM,2> bounds;
390
+ Complex alpha;
391
+ Vec<DIM> origin;
392
+ public:
393
+ BrickRadialPML_Transformation(FlatMatrix<double> _bounds, Complex _alpha, FlatVector<double> _origin)
394
+ : PML_TransformationDim<DIM>(), bounds(_bounds), alpha(_alpha)
395
+ {
396
+ origin = 0.;
397
+ for (int i : Range(min(int(_origin.Size()),DIM)))
398
+ origin(i)=_origin(i);
399
+ bounds = 0.;
400
+ for (int i : Range(min(int(_bounds.Height()),DIM)))
401
+ for (int j : Range(min(int(_bounds.Width()),2)))
402
+ bounds(i,j)=_bounds(i,j);
403
+ }
404
+
405
+ ~BrickRadialPML_Transformation() {;}
406
+
407
+ virtual string ParameterString() const
408
+ {
409
+ stringstream str;
410
+ str << "alpha: " << alpha << endl;
411
+ str << "bounds: " << bounds << endl;
412
+ str << "origin: " << origin;
413
+ return str.str();
414
+ }
415
+
416
+ virtual void MapPoint (Vec<DIM> & hpoint, Vec<DIM,Complex> & point,
417
+ Mat<DIM,DIM,Complex> & jac) const
418
+ {
419
+ point = hpoint;
420
+ jac = Id<DIM>();
421
+ double tmp = 0;
422
+ double scal = 0;
423
+ int maxind = -1;
424
+ Vec<DIM> rel_point = hpoint - origin;
425
+ for (int j : Range(DIM))
426
+ {
427
+ if (hpoint(j)<bounds(j,0))
428
+ tmp=(hpoint(j)-bounds(j,0))/rel_point(j);
429
+ else if (hpoint(j)>bounds(j,1))
430
+ tmp=(hpoint(j)-bounds(j,1))/rel_point(j);
431
+ if (tmp>scal)
432
+ {
433
+ scal=tmp;
434
+ maxind=j;
435
+ }
436
+ }
437
+ Vec<DIM> tmpvec = 0.;
438
+ if (maxind>=0)
439
+ {
440
+ tmpvec(maxind)=1/rel_point(maxind)-scal/rel_point(maxind);
441
+ point += alpha*scal*rel_point;
442
+ jac += alpha * (scal*Id<DIM>() + rel_point * Trans(tmpvec));
443
+ }
444
+ }
445
+ };
446
+
447
+
448
+ template <int DIM>
449
+ class CustomPML_Transformation : public PML_TransformationDim<DIM>
450
+ {
451
+ shared_ptr<CoefficientFunction> trafo, jac;
452
+ public:
453
+
454
+ CustomPML_Transformation(shared_ptr<CoefficientFunction> _trafo,shared_ptr<CoefficientFunction> _jac)
455
+ : PML_TransformationDim<DIM>(), trafo(_trafo), jac(_jac) {
456
+ if (jac->Dimension()!=trafo->Dimension()*trafo->Dimension())
457
+ throw Exception( string("CustomPML_Transformation::CustomPML_Transformation: dimensions of jacobian and transformation do not match!"));
458
+ jac->SetDimensions(ngstd::IVec<2>(trafo->Dimension(),trafo->Dimension()));
459
+ }
460
+
461
+ ~CustomPML_Transformation() {;}
462
+
463
+ virtual string ParameterString() const
464
+ {
465
+ stringstream str;
466
+ str << "trafo: " << trafo << endl;
467
+ str << "jac: " << jac;
468
+ return str.str();
469
+ }
470
+
471
+ virtual void MapIntegrationPoint (const BaseMappedIntegrationPoint & hpoint, Vec<DIM,Complex> & point,
472
+ Mat<DIM,DIM,Complex> & jacmat) const
473
+ {
474
+ STACK_ARRAY(double,jacmem,2*jac->Dimension());
475
+ STACK_ARRAY(double,vmem,2*trafo->Dimension());
476
+ FlatVector<Complex> fvjac(jac->Dimension(),reinterpret_cast<Complex*>(&jacmem[0]));
477
+ FlatVector<Complex> fvpoint(trafo->Dimension(),reinterpret_cast<Complex*>(&vmem[0]));
478
+ trafo->Evaluate(hpoint,fvpoint);
479
+ point = fvpoint;
480
+ jac->Evaluate(hpoint,fvjac);
481
+ jacmat = fvjac.AsMatrix(DIM,DIM);
482
+ }
483
+
484
+ virtual void MapPoint (Vec<DIM> & hpoint, Vec<DIM,Complex> & point,
485
+ Mat<DIM,DIM,Complex> & jac) const
486
+ {
487
+ throw Exception("CustomPML_Transformation::MapPoint: can only map integration Points");
488
+ }
489
+ };
490
+
491
+ template <int DIM>
492
+ class SumPML : public PML_TransformationDim<DIM>
493
+ {
494
+ shared_ptr<PML_Transformation> pml1,pml2;
495
+ public:
496
+
497
+ SumPML(shared_ptr<PML_Transformation> _pml1,shared_ptr<PML_Transformation> _pml2)
498
+ : PML_TransformationDim<DIM>(), pml1(_pml1), pml2(_pml2) {
499
+ if (pml1->GetDimension() != pml2->GetDimension())
500
+ throw Exception("SumPML::SumPML: dimensions do not match");
501
+ }
502
+
503
+ ~SumPML() {;}
504
+
505
+ virtual string ParameterString() const
506
+ {
507
+ stringstream str;
508
+ str << "pml1: " << GetName(*pml1) << endl;
509
+ str << "pml2: " << GetName(*pml2);
510
+ return str.str();
511
+ }
512
+
513
+ virtual void MapIntegrationPoint (const BaseMappedIntegrationPoint & hpoint, Vec<DIM,Complex> & point,
514
+ Mat<DIM,DIM,Complex> & jacmat) const
515
+ {
516
+ static_cast<PML_TransformationDim<DIM> &>(*pml1).MapIntegrationPoint(hpoint,point,jacmat);
517
+ Vec<DIM,Complex> point2;
518
+ Mat<DIM,DIM,Complex> jac2;
519
+ static_cast<PML_TransformationDim<DIM> &>(*pml2).MapIntegrationPoint(hpoint,point2,jac2);
520
+ point+=point2-hpoint.GetPoint();
521
+ jacmat+=jac2-Id<DIM>();
522
+ }
523
+
524
+ virtual void MapPoint (Vec<DIM> & hpoint, Vec<DIM,Complex> & point,
525
+ Mat<DIM,DIM,Complex> & jac) const
526
+ {
527
+ static_cast<PML_TransformationDim<DIM> &>(*pml1).MapPoint(hpoint,point,jac);
528
+ Vec<DIM,Complex> point2;
529
+ Mat<DIM,DIM,Complex> jac2;
530
+ static_cast<PML_TransformationDim<DIM> &>(*pml2).MapPoint(hpoint,point2,jac2);
531
+ point+=point2-hpoint;
532
+ jac+=jac2-Id<DIM>();
533
+ }
534
+ };
535
+
536
+ template <int DIM, int DIMA, int DIMB>
537
+ class CompoundPML : public PML_TransformationDim<DIM>
538
+ {
539
+ shared_ptr<PML_Transformation> pml1,pml2;
540
+ Vec<DIMA,int> dims1;
541
+ Vec<DIMB,int> dims2;
542
+ public:
543
+
544
+ CompoundPML(
545
+ shared_ptr<PML_Transformation> _pml1,
546
+ shared_ptr<PML_Transformation> _pml2,
547
+ FlatVector<int> _dims1,
548
+ FlatVector<int> _dims2)
549
+ : PML_TransformationDim<DIM>(),
550
+ pml1(_pml1), pml2(_pml2)
551
+ {
552
+ if (DIMA+DIMB!=DIM)
553
+ throw Exception("CompoundPML::CompoundPML: dimensions do not match");
554
+ if (dims1.Size()<DIMA || dims2.Size()<DIMB)
555
+ throw Exception("CompoundPML::CompoundPML: one of the dims vectors too short");
556
+ BitArray count(DIM);
557
+ count.Clear();
558
+ for (int i : Range(DIMA))
559
+ {
560
+ dims1(i)=_dims1(i);
561
+ if (dims1(i)<1 || dims1(i)>DIM)
562
+ throw Exception("CompoundPML::CompoundPML: dims1 vector is weird");
563
+ count.SetBit(dims1(i)-1);
564
+ }
565
+ if (count.NumSet()<DIMA)
566
+ throw Exception("CompoundPML::CompoundPML: dims1 vector is weird");
567
+
568
+ for (int i : Range(DIMB))
569
+ {
570
+ dims2(i)=_dims2(i);
571
+ if (dims2(i)<1 || dims2(i)>DIM)
572
+ throw Exception("CompoundPML::CompoundPML: dims2 vector is weird");
573
+ count.SetBit(dims2(i)-1);
574
+ }
575
+ if (count.NumSet()<DIM)
576
+ throw Exception("CompoundPML::CompoundPML: dims2 vector is weird");
577
+ }
578
+
579
+ ~CompoundPML() {;}
580
+
581
+ virtual string ParameterString() const
582
+ {
583
+ stringstream str;
584
+ str << "pml1: " << GetName(*pml1) << endl;
585
+ str << "pml2: " << GetName(*pml2) << endl;
586
+ str << "dims1: " << dims1 << endl;
587
+ str << "dims2: " << dims2;
588
+ return str.str();
589
+ }
590
+
591
+ virtual void MapPoint (Vec<DIM> & hpoint, Vec<DIM,Complex> & point,
592
+ Mat<DIM,DIM,Complex> & jac) const
593
+ {
594
+ if (DIMA)
595
+ {
596
+ Vec<DIMA> hpoint1;
597
+ for (int i : Range(DIMA))
598
+ hpoint1(i)=hpoint(dims1[i]-1);
599
+
600
+ Vec<DIMA,Complex> point1;
601
+ Mat<DIMA,DIMA,Complex> jac1;
602
+ static_cast<const PML_TransformationDim<DIMA>& > (*pml1).MapPoint(hpoint1,point1,jac1);
603
+
604
+ for (int i : Range(DIMA))
605
+ {
606
+ point(dims1[i]-1)=point1(i);
607
+ for (int j : Range(DIMA))
608
+ jac(dims1[i]-1,dims1[j]-1)=jac1(i,j);
609
+ }
610
+ }
611
+ if (DIMB)
612
+ {
613
+ Vec<DIMB> hpoint2;
614
+ for (int i : Range(DIMB))
615
+ hpoint2(i)=hpoint(dims2[i]-1);
616
+ Vec<DIMB,Complex> point2;
617
+ Mat<DIMB,DIMB,Complex> jac2;
618
+ static_cast<PML_TransformationDim<DIMB>& > (*pml2).MapPoint(hpoint2,point2,jac2);
619
+
620
+ for (int i : Range(DIMB))
621
+ {
622
+ point(dims2[i]-1)=point2[i];
623
+ for (int j : Range(DIMB))
624
+ jac(dims2[i]-1,dims2[j]-1)=jac2(i,j);
625
+ }
626
+ }
627
+ }
628
+
629
+ };
630
+ }
631
+ #endif