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,10 @@
1
+ #include <bla.hpp>
2
+
3
+ namespace ngsbem
4
+ {
5
+ using namespace ngbla;
6
+
7
+ NGS_DLL_HEADER double LaplaceSL_Triangle (Vec<3> a, Vec<3> b, Vec<3> c, Vec<3> x);
8
+ NGS_DLL_HEADER double LaplaceDL_Triangle (Vec<3> a, Vec<3> b, Vec<3> c, Vec<3> x);
9
+ }
10
+
@@ -0,0 +1,55 @@
1
+ #ifndef FILE_ARNOLDI
2
+ #define FILE_ARNOLDI
3
+
4
+
5
+ /**************************************************************************/
6
+ /* File: arnoldi.hpp */
7
+ /* Author: Joachim Schoeberl */
8
+ /* Date: 5. Jul. 96 */
9
+ /**************************************************************************/
10
+
11
+
12
+ #include "basematrix.hpp"
13
+
14
+ namespace ngla
15
+ {
16
+ /**
17
+ Arnoldi Eigenvalue Solver.
18
+
19
+ Solve the generalized evp
20
+
21
+ A x = lam B x
22
+
23
+ B must by symmetric and (in theory) positive definite
24
+ A can be non-symmetric
25
+
26
+ It uses a shift-and-invert Arnoldi method
27
+ */
28
+
29
+ template <typename SCAL>
30
+ class NGS_DLL_HEADER Arnoldi
31
+ {
32
+ shared_ptr<BaseMatrix> a;
33
+ shared_ptr<BaseMatrix> b;
34
+ shared_ptr<BitArray> freedofs;
35
+ SCAL shift;
36
+ optional<string> inversetype;
37
+ public:
38
+ Arnoldi (shared_ptr<BaseMatrix> aa, shared_ptr<BaseMatrix> ab, shared_ptr<BitArray> afreedofs = nullptr)
39
+ : a(aa), b(ab), freedofs(afreedofs)
40
+ {
41
+ shift = 1.0;
42
+ }
43
+
44
+ void SetShift (SCAL ashift)
45
+ { shift = ashift; }
46
+ void SetInverseType (optional<string> ainv)
47
+ { inversetype = ainv; }
48
+
49
+ void Calc (int numval, Array<Complex> & lam, int nev,
50
+ Array<shared_ptr<BaseVector>> & evecs,
51
+ shared_ptr<BaseMatrix> pre = nullptr) const;
52
+ };
53
+ }
54
+
55
+ #endif
@@ -0,0 +1,334 @@
1
+ #ifndef FILE_BANDMATRIX
2
+ #define FILE_BANDMATRIX
3
+
4
+ /****************************************************************************/
5
+ /* File: bandmatrix.hpp */
6
+ /* Author: Joachim Schoeberl */
7
+ /* Date: 14. Aug. 2002 */
8
+ /****************************************************************************/
9
+
10
+ namespace ngbla
11
+ {
12
+
13
+ /**
14
+ A symmetric band-matrix.
15
+ */
16
+ template <class T = double>
17
+ class FlatSymBandMatrix
18
+ {
19
+ protected:
20
+ /// the matrix size
21
+ int n;
22
+ /// number of bands in the triangular matrix
23
+ int bw;
24
+ /// the matrix entries
25
+ T *data;
26
+ public:
27
+ /// the according vector type
28
+ typedef typename mat_traits<T>::TV_COL TV;
29
+
30
+ /// Construction of FlatSymBandMatirx
31
+ FlatSymBandMatrix (int an, int abw, T * adata)
32
+ : n(an), bw(abw), data(adata)
33
+ { ; }
34
+
35
+ /// Matrix vector multiplication
36
+ void Mult (const FlatVector<TV> & x, FlatVector<TV> & y) const
37
+ {
38
+ for (int i = 0; i < n; i++)
39
+ y(i) = (*this)(i,i) * x(i);
40
+ for (int i = 0; i < n; i++)
41
+ for (int j = max2(i-bw+1, 0); j < i; j++)
42
+ {
43
+ y(i) += (*this)(i,j) * x(j);
44
+ y(j) += Trans((*this)(i,j)) * x(i);
45
+ }
46
+ }
47
+
48
+ /// Print matrix to stream
49
+ ostream & Print (ostream & ost) const
50
+ {
51
+ for (int i = 0; i < n; i++)
52
+ {
53
+ for (int j = 0; j < n; j++)
54
+ if (Used (i, j))
55
+ ost << setw(8) << (*this)(i,j) << " ";
56
+ else if (Used (j,i))
57
+ ost << setw(8) << "sym" << " ";
58
+ else
59
+ ost << setw(8) << 0;
60
+ ost << endl;
61
+ }
62
+ return ost;
63
+ }
64
+
65
+ /// matrix height
66
+ int Height() const { return n; }
67
+
68
+ /// matrix width
69
+ int BandWidth() const { return bw; }
70
+
71
+ /// access operator. Assumes that $i \geq j$ referes to an element in the band
72
+ const T & operator() (int i, int j) const
73
+ { return data[i * bw + j - i + bw-1]; }
74
+
75
+ /// access operator. Assumes that $i \geq j$ referes to an element in the band
76
+ T & operator() (int i, int j)
77
+ { return data[i * bw + j - i + bw-1]; }
78
+
79
+ /// check whether i, j refers to a valid element
80
+ bool Used (int i, int j) const
81
+ {
82
+ return (n > i && i >= j && j >= 0 && i-j < bw);
83
+ }
84
+
85
+ /// assigns a constant value
86
+ FlatSymBandMatrix & operator= (const T & val)
87
+ {
88
+ for (int i = 0; i < bw * n; i++)
89
+ data[i] = val;
90
+ return *this;
91
+ }
92
+
93
+
94
+ /// computes required memory
95
+ static int RequiredMem (int n, int bw)
96
+ { return n*bw; }
97
+ };
98
+
99
+
100
+
101
+ /// output operator
102
+ template<typename T>
103
+ inline std::ostream & operator<< (std::ostream & s, const FlatSymBandMatrix<T> & m)
104
+ {
105
+ m.Print (s);
106
+ return s;
107
+ }
108
+
109
+
110
+
111
+
112
+ /**
113
+ A symmetric band-matrix with memory management.
114
+ */
115
+ template <class T = double>
116
+ class SymBandMatrix : public FlatSymBandMatrix<T>
117
+ {
118
+ public:
119
+ typedef typename mat_traits<T>::TV_COL TV;
120
+
121
+ /// Generates a symmetric band matrix
122
+ SymBandMatrix (int an, int abw)
123
+ : FlatSymBandMatrix<T> (an, abw, new T[an*abw])
124
+ { ; }
125
+
126
+ /// Deletes matrix
127
+ ~SymBandMatrix ()
128
+ { delete [] this->data; }
129
+
130
+ /// assigns a constant value
131
+ SymBandMatrix & operator= (const T & val)
132
+ {
133
+ for (int i = 0; i < this->bw * this->n; i++)
134
+ this->data[i] = val;
135
+ return *this;
136
+ }
137
+ };
138
+
139
+
140
+
141
+
142
+
143
+
144
+
145
+
146
+
147
+
148
+
149
+
150
+
151
+ /**
152
+ Cholesky factors of a band matrix.
153
+ This class does not provide memory management.
154
+
155
+
156
+ storage:
157
+
158
+ lfact (bw = 3)
159
+
160
+ \begin{verbatim}
161
+ d0
162
+ 0 d1
163
+ 1 2 d2
164
+ 3 4 d3
165
+ \end{verbatim}
166
+ */
167
+ template <class T = double>
168
+ class FlatBandCholeskyFactors
169
+ {
170
+ protected:
171
+ /// matrix dimension
172
+ int n;
173
+ /// number of bands in the triangular matrix
174
+ int bw;
175
+ /// matrix matrix data, first diags, than lfact
176
+ T * mem;
177
+ public:
178
+ // typedef typename mat_traits<T>::TV_COL TV;
179
+ typedef typename mat_traits<T>::TSCAL TSCAL;
180
+
181
+ /// assign dimension, bandwidth and memory
182
+ FlatBandCholeskyFactors (int an, int abw, T * amem)
183
+ { n = an, bw = abw, mem = amem; }
184
+
185
+ /// default constructor
186
+ FlatBandCholeskyFactors ()
187
+ { n = bw = 0; mem = 0; }
188
+
189
+ /// factor bandmatrix a
190
+ NGS_DLL_HEADER void Factor (const FlatSymBandMatrix<T> & a);
191
+
192
+ /// solve with factored matrices
193
+ template <class TVX, class TVY>
194
+ void Mult (const FlatVector<TVX> & x, FlatVector<TVY> & y) const
195
+ {
196
+ // const TVX * hx = x.Addr(0);
197
+ // TVY * hy = y.Addr(0);
198
+ FlatVector<TVX> hx = x;
199
+ FlatVector<TVY> hy = y;
200
+ const T * hm = &mem[0];
201
+
202
+ for (int i = 0; i < n; i++)
203
+ hy[i] = hx[i];
204
+
205
+ int i, jj = n;
206
+ for (i = 0; i < bw-1; i++)
207
+ {
208
+ typedef typename mat_traits<TVY>::TSCAL TTSCAL;
209
+ TVY sum = TTSCAL(0.0);
210
+
211
+ for (int j = 0; j < i; j++, jj++)
212
+ sum += hm[jj] * hy[j];
213
+
214
+ hy[i] -= sum;
215
+ }
216
+
217
+ for ( ; i < n; i++)
218
+ {
219
+ typedef typename mat_traits<TVY>::TSCAL TTSCAL;
220
+ TVY sum = TTSCAL(0.0);
221
+
222
+ for (int j = i-bw+1; j < i; j++, jj++)
223
+ sum += hm[jj] * hy[j];
224
+
225
+ hy[i] -= sum;
226
+ }
227
+
228
+ for (int i = 0; i < n; i++)
229
+ {
230
+ TVY sum = mem[i] * hy[i];
231
+ hy[i] = sum;
232
+ }
233
+
234
+ // jj = n + (n-1) * (bw-1) - bw*(bw-1)/2;
235
+ for (i = n-1; i >= bw-1; i--)
236
+ {
237
+ jj -= bw-1;
238
+ TVY val = hy[i];
239
+
240
+ int firstj = i-bw+1;
241
+ for (int j = 0; j < bw-1; j++)
242
+ hy[firstj+j] -= Trans (mem[jj+j]) * val;
243
+ }
244
+
245
+ for ( ; i >= 0; i--)
246
+ {
247
+ jj -= i;
248
+ TVY val = hy[i];
249
+
250
+ for (int j = 0; j < i; j++)
251
+ hy[j] -= Trans (mem[jj+j]) * val;
252
+ }
253
+ }
254
+
255
+
256
+
257
+ /// print matrix factors
258
+ ostream & Print (ostream & ost) const;
259
+
260
+ /// compute linear position of matrix element (i,j)
261
+ int Index (int i, int j) const
262
+ {
263
+ if (i < bw)
264
+ return n + (i * (i-1)) / 2 + j;
265
+ else
266
+ return n + i * (bw-2) + j - ((bw-1)*(bw-2))/2;
267
+ }
268
+
269
+ /// matrix element (i,j), (i,j) must be a valid position
270
+ const T & operator() (int i, int j) const
271
+ {
272
+ if (i < bw)
273
+ return mem[n + (i * (i-1)) / 2 + j];
274
+ else
275
+ return mem[n + i * (bw-2) + j - ((bw-1)*(bw-2))/2];
276
+ }
277
+
278
+ /// matrix element (i,j), (i,j) must be a valid position
279
+ T & operator() (int i, int j)
280
+ {
281
+ if (i < bw)
282
+ return mem[n + (i * (i-1)) / 2 + j];
283
+ else
284
+ return mem[n + i * (bw-2) + j - ((bw-1)*(bw-2))/2];
285
+ }
286
+
287
+ /// matrix size
288
+ int Size() const { return n; }
289
+ /// band-width of triangular matrix
290
+ int BandWidth() const { return bw; }
291
+ /// computes required memory
292
+ static int RequiredMem (int n, int bw)
293
+ { return n*bw - (bw * (bw-1)) / 2 + n; }
294
+ };
295
+
296
+
297
+ /// output operator.
298
+ template<typename T>
299
+ inline std::ostream & operator<< (std::ostream & s, const FlatBandCholeskyFactors<T> & m)
300
+ {
301
+ m.Print (s);
302
+ return s;
303
+ }
304
+
305
+
306
+
307
+
308
+
309
+ /**
310
+ Cholesky factors of a band matrix.
311
+ */
312
+ template <class T = double>
313
+ class BandCholeskyFactors : public FlatBandCholeskyFactors<T>
314
+ {
315
+ public:
316
+ /// allocate memory and factor the matrix a
317
+ BandCholeskyFactors (const SymBandMatrix<T> & a)
318
+ : FlatBandCholeskyFactors<T> (a.Height(),
319
+ a.BandWidth(),
320
+ new T[FlatBandCholeskyFactors<T>::RequiredMem (a.Height(), a.BandWidth())])
321
+ {
322
+ this->Factor (a);
323
+ }
324
+
325
+ /// delete memory
326
+ ~BandCholeskyFactors ()
327
+ {
328
+ delete [] this->mem;
329
+ }
330
+ };
331
+
332
+ }
333
+
334
+ #endif