ngsolve 6.2.2501.post21.dev1__cp313-cp313-macosx_10_15_universal2.whl → 6.2.2501.post34.dev1__cp313-cp313-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 (286) hide show
  1. ngsolve/webgui.py +1 -1
  2. {ngsolve-6.2.2501.post21.dev1.dist-info → ngsolve-6.2.2501.post34.dev1.dist-info}/METADATA +2 -2
  3. ngsolve-6.2.2501.post34.dev1.dist-info/RECORD +25 -0
  4. netgen/include/arnoldi.hpp +0 -55
  5. netgen/include/bandmatrix.hpp +0 -334
  6. netgen/include/basematrix.hpp +0 -957
  7. netgen/include/basevector.hpp +0 -1268
  8. netgen/include/bdbequations.hpp +0 -2752
  9. netgen/include/bdbintegrator.hpp +0 -1659
  10. netgen/include/bessel.hpp +0 -1064
  11. netgen/include/bilinearform.hpp +0 -963
  12. netgen/include/bla.hpp +0 -29
  13. netgen/include/blockalloc.hpp +0 -95
  14. netgen/include/blockjacobi.hpp +0 -316
  15. netgen/include/bspline.hpp +0 -114
  16. netgen/include/calcinverse.hpp +0 -141
  17. netgen/include/cg.hpp +0 -368
  18. netgen/include/chebyshev.hpp +0 -44
  19. netgen/include/cholesky.hpp +0 -720
  20. netgen/include/clapack.h +0 -7254
  21. netgen/include/code_generation.hpp +0 -296
  22. netgen/include/coefficient.hpp +0 -2006
  23. netgen/include/coefficient_impl.hpp +0 -18
  24. netgen/include/coefficient_stdmath.hpp +0 -157
  25. netgen/include/commutingAMG.hpp +0 -106
  26. netgen/include/comp.hpp +0 -79
  27. netgen/include/compatibility.hpp +0 -41
  28. netgen/include/complex_wrapper.hpp +0 -73
  29. netgen/include/compressedfespace.hpp +0 -110
  30. netgen/include/contact.hpp +0 -231
  31. netgen/include/diagonalmatrix.hpp +0 -154
  32. netgen/include/differentialoperator.hpp +0 -276
  33. netgen/include/diffop.hpp +0 -1286
  34. netgen/include/diffop_impl.hpp +0 -326
  35. netgen/include/discontinuous.hpp +0 -84
  36. netgen/include/dump.hpp +0 -949
  37. netgen/include/eigen.hpp +0 -60
  38. netgen/include/eigensystem.hpp +0 -18
  39. netgen/include/elasticity_equations.hpp +0 -595
  40. netgen/include/elementbyelement.hpp +0 -195
  41. netgen/include/elementtopology.hpp +0 -1760
  42. netgen/include/elementtransformation.hpp +0 -339
  43. netgen/include/evalfunc.hpp +0 -405
  44. netgen/include/expr.hpp +0 -1655
  45. netgen/include/facetfe.hpp +0 -175
  46. netgen/include/facetfespace.hpp +0 -178
  47. netgen/include/facethofe.hpp +0 -111
  48. netgen/include/facetsurffespace.hpp +0 -112
  49. netgen/include/fe_interfaces.hpp +0 -32
  50. netgen/include/fem.hpp +0 -87
  51. netgen/include/fesconvert.hpp +0 -14
  52. netgen/include/fespace.hpp +0 -1445
  53. netgen/include/finiteelement.hpp +0 -286
  54. netgen/include/globalinterfacespace.hpp +0 -77
  55. netgen/include/globalspace.hpp +0 -115
  56. netgen/include/gridfunction.hpp +0 -525
  57. netgen/include/h1amg.hpp +0 -41
  58. netgen/include/h1hofe.hpp +0 -188
  59. netgen/include/h1hofe_impl.hpp +0 -1262
  60. netgen/include/h1hofefo.hpp +0 -148
  61. netgen/include/h1hofefo_impl.hpp +0 -185
  62. netgen/include/h1hofespace.hpp +0 -167
  63. netgen/include/h1lofe.hpp +0 -1237
  64. netgen/include/h1lumping.hpp +0 -35
  65. netgen/include/hcurl_equations.hpp +0 -1352
  66. netgen/include/hcurlcurlfe.hpp +0 -2221
  67. netgen/include/hcurlcurlfespace.hpp +0 -78
  68. netgen/include/hcurlfe.hpp +0 -259
  69. netgen/include/hcurlfe_utils.hpp +0 -107
  70. netgen/include/hcurlhdiv_dshape.hpp +0 -857
  71. netgen/include/hcurlhdivfes.hpp +0 -308
  72. netgen/include/hcurlhofe.hpp +0 -175
  73. netgen/include/hcurlhofe_impl.hpp +0 -1871
  74. netgen/include/hcurlhofespace.hpp +0 -193
  75. netgen/include/hcurllofe.hpp +0 -1146
  76. netgen/include/hdiv_equations.hpp +0 -865
  77. netgen/include/hdivdivfe.hpp +0 -2923
  78. netgen/include/hdivdivsurfacespace.hpp +0 -76
  79. netgen/include/hdivfe.hpp +0 -206
  80. netgen/include/hdivfe_utils.hpp +0 -716
  81. netgen/include/hdivfes.hpp +0 -75
  82. netgen/include/hdivhofe.hpp +0 -447
  83. netgen/include/hdivhofe_impl.hpp +0 -1107
  84. netgen/include/hdivhofefo.hpp +0 -229
  85. netgen/include/hdivhofespace.hpp +0 -175
  86. netgen/include/hdivhosurfacefespace.hpp +0 -106
  87. netgen/include/hdivlofe.hpp +0 -773
  88. netgen/include/hidden.hpp +0 -74
  89. netgen/include/householder.hpp +0 -181
  90. netgen/include/hypre_ams_precond.hpp +0 -123
  91. netgen/include/hypre_precond.hpp +0 -73
  92. netgen/include/integrator.hpp +0 -2024
  93. netgen/include/integratorcf.hpp +0 -253
  94. netgen/include/interpolate.hpp +0 -49
  95. netgen/include/intrule.hpp +0 -2541
  96. netgen/include/irspace.hpp +0 -49
  97. netgen/include/jacobi.hpp +0 -136
  98. netgen/include/l2hofe.hpp +0 -193
  99. netgen/include/l2hofe_impl.hpp +0 -564
  100. netgen/include/l2hofefo.hpp +0 -542
  101. netgen/include/l2hofespace.hpp +0 -344
  102. netgen/include/la.hpp +0 -38
  103. netgen/include/linearform.hpp +0 -266
  104. netgen/include/matrix.hpp +0 -2140
  105. netgen/include/memusage.hpp +0 -41
  106. netgen/include/meshaccess.hpp +0 -1358
  107. netgen/include/mgpre.hpp +0 -204
  108. netgen/include/mptools.hpp +0 -2145
  109. netgen/include/multigrid.hpp +0 -42
  110. netgen/include/multivector.hpp +0 -447
  111. netgen/include/mumpsinverse.hpp +0 -187
  112. netgen/include/mycomplex.hpp +0 -361
  113. netgen/include/ng_lapack.hpp +0 -1661
  114. netgen/include/ngblas.hpp +0 -1099
  115. netgen/include/ngs_defines.hpp +0 -30
  116. netgen/include/ngs_stdcpp_include.hpp +0 -106
  117. netgen/include/ngs_utils.hpp +0 -121
  118. netgen/include/ngsobject.hpp +0 -1019
  119. netgen/include/ngsstream.hpp +0 -113
  120. netgen/include/ngstd.hpp +0 -72
  121. netgen/include/nodalhofe.hpp +0 -96
  122. netgen/include/nodalhofe_impl.hpp +0 -141
  123. netgen/include/normalfacetfe.hpp +0 -223
  124. netgen/include/normalfacetfespace.hpp +0 -98
  125. netgen/include/normalfacetsurfacefespace.hpp +0 -84
  126. netgen/include/order.hpp +0 -251
  127. netgen/include/parallel_matrices.hpp +0 -222
  128. netgen/include/paralleldofs.hpp +0 -340
  129. netgen/include/parallelngs.hpp +0 -23
  130. netgen/include/parallelvector.hpp +0 -269
  131. netgen/include/pardisoinverse.hpp +0 -200
  132. netgen/include/periodic.hpp +0 -125
  133. netgen/include/plateaufespace.hpp +0 -25
  134. netgen/include/pml.hpp +0 -275
  135. netgen/include/pmltrafo.hpp +0 -631
  136. netgen/include/postproc.hpp +0 -142
  137. netgen/include/precomp.hpp +0 -60
  138. netgen/include/preconditioner.hpp +0 -602
  139. netgen/include/prolongation.hpp +0 -235
  140. netgen/include/python_comp.hpp +0 -107
  141. netgen/include/python_fem.hpp +0 -89
  142. netgen/include/python_linalg.hpp +0 -58
  143. netgen/include/python_ngstd.hpp +0 -385
  144. netgen/include/recursive_pol.hpp +0 -4844
  145. netgen/include/recursive_pol_tet.hpp +0 -395
  146. netgen/include/recursive_pol_trig.hpp +0 -492
  147. netgen/include/reorderedfespace.hpp +0 -81
  148. netgen/include/sample_sort.hpp +0 -105
  149. netgen/include/scalarfe.hpp +0 -335
  150. netgen/include/shapefunction_utils.hpp +0 -113
  151. netgen/include/simd_complex.hpp +0 -284
  152. netgen/include/smoother.hpp +0 -253
  153. netgen/include/solve.hpp +0 -89
  154. netgen/include/sparsecholesky.hpp +0 -313
  155. netgen/include/sparsematrix.hpp +0 -1038
  156. netgen/include/sparsematrix_dyn.hpp +0 -91
  157. netgen/include/sparsematrix_impl.hpp +0 -920
  158. netgen/include/special_matrix.hpp +0 -461
  159. netgen/include/specialelement.hpp +0 -125
  160. netgen/include/statushandler.hpp +0 -33
  161. netgen/include/stringops.hpp +0 -12
  162. netgen/include/superluinverse.hpp +0 -136
  163. netgen/include/symbolicintegrator.hpp +0 -849
  164. netgen/include/symmetricmatrix.hpp +0 -144
  165. netgen/include/tangentialfacetfe.hpp +0 -224
  166. netgen/include/tangentialfacetfespace.hpp +0 -106
  167. netgen/include/tensor.hpp +0 -522
  168. netgen/include/tensorcoefficient.hpp +0 -446
  169. netgen/include/tensorproductintegrator.hpp +0 -113
  170. netgen/include/thcurlfe.hpp +0 -128
  171. netgen/include/thcurlfe_impl.hpp +0 -380
  172. netgen/include/thdivfe.hpp +0 -80
  173. netgen/include/thdivfe_impl.hpp +0 -426
  174. netgen/include/tpdiffop.hpp +0 -461
  175. netgen/include/tpfes.hpp +0 -133
  176. netgen/include/tpintrule.hpp +0 -224
  177. netgen/include/triangular.hpp +0 -465
  178. netgen/include/tscalarfe.hpp +0 -245
  179. netgen/include/tscalarfe_impl.hpp +0 -1029
  180. netgen/include/umfpackinverse.hpp +0 -148
  181. netgen/include/vector.hpp +0 -1219
  182. netgen/include/voxelcoefficientfunction.hpp +0 -41
  183. netgen/include/vtkoutput.hpp +0 -198
  184. netgen/include/vvector.hpp +0 -208
  185. netgen/include/webgui.hpp +0 -92
  186. netgen/libngbla.dylib +0 -0
  187. netgen/libngcomp.dylib +0 -0
  188. netgen/libngfem.dylib +0 -0
  189. netgen/libngla.dylib +0 -0
  190. netgen/libngsolve.dylib +0 -0
  191. netgen/libngstd.dylib +0 -0
  192. ngsolve/__init__.pyi +0 -231
  193. ngsolve/bla.pyi +0 -1139
  194. ngsolve/bvp.pyi +0 -32
  195. ngsolve/cmake/NGSolveConfig.cmake +0 -102
  196. ngsolve/cmake/ngsolve-targets-release.cmake +0 -69
  197. ngsolve/cmake/ngsolve-targets.cmake +0 -163
  198. ngsolve/comp/__init__.pyi +0 -5382
  199. ngsolve/comp/pml.pyi +0 -89
  200. ngsolve/config/__init__.py +0 -1
  201. ngsolve/config/__init__.pyi +0 -43
  202. ngsolve/config/__main__.py +0 -4
  203. ngsolve/config/config.py +0 -60
  204. ngsolve/config/config.pyi +0 -45
  205. ngsolve/demos/TensorProduct/__init__.py +0 -0
  206. ngsolve/demos/TensorProduct/tp_dg_1d_1d.py +0 -80
  207. ngsolve/demos/TensorProduct/tp_dg_1d_2d.py +0 -73
  208. ngsolve/demos/TensorProduct/tp_dg_2d_1d.py +0 -72
  209. ngsolve/demos/TensorProduct/tp_dg_2d_2d.py +0 -66
  210. ngsolve/demos/__init__.py +0 -0
  211. ngsolve/demos/howto/__init__.py +0 -0
  212. ngsolve/demos/howto/hhj.py +0 -44
  213. ngsolve/demos/howto/hybrid_dg.py +0 -53
  214. ngsolve/demos/howto/mixed.py +0 -30
  215. ngsolve/demos/howto/nonlin.py +0 -29
  216. ngsolve/demos/howto/pickling.py +0 -26
  217. ngsolve/demos/howto/pml.py +0 -31
  218. ngsolve/demos/howto/taskmanager.py +0 -20
  219. ngsolve/demos/howto/tdnns.py +0 -47
  220. ngsolve/demos/howto/timeDG-skeleton.py +0 -45
  221. ngsolve/demos/howto/timeDG.py +0 -38
  222. ngsolve/demos/howto/timeDGlap.py +0 -42
  223. ngsolve/demos/howto/timeDGwave.py +0 -61
  224. ngsolve/demos/intro/__init__.py +0 -0
  225. ngsolve/demos/intro/adaptive.py +0 -123
  226. ngsolve/demos/intro/cmagnet.py +0 -62
  227. ngsolve/demos/intro/elasticity.py +0 -76
  228. ngsolve/demos/intro/navierstokes.py +0 -74
  229. ngsolve/demos/intro/poisson.ipynb +0 -170
  230. ngsolve/demos/intro/poisson.py +0 -41
  231. ngsolve/demos/mpi/__init__.py +0 -0
  232. ngsolve/demos/mpi/mpi_cmagnet.py +0 -87
  233. ngsolve/demos/mpi/mpi_navierstokes.py +0 -117
  234. ngsolve/demos/mpi/mpi_poisson.py +0 -89
  235. ngsolve/demos/mpi/mpi_timeDG.py +0 -82
  236. ngsolve/directsolvers.pyi +0 -18
  237. ngsolve/eigenvalues.pyi +0 -30
  238. ngsolve/fem.pyi +0 -1707
  239. ngsolve/krylovspace.pyi +0 -309
  240. ngsolve/la.pyi +0 -1218
  241. ngsolve/ngslib.so +0 -0
  242. ngsolve/ngstd.pyi +0 -58
  243. ngsolve/nonlinearsolvers.pyi +0 -98
  244. ngsolve/preconditioners.pyi +0 -6
  245. ngsolve/solve.pyi +0 -108
  246. ngsolve/solvers.pyi +0 -14
  247. ngsolve/timestepping.pyi +0 -34
  248. ngsolve/timing.pyi +0 -57
  249. ngsolve/utils.pyi +0 -279
  250. ngsolve-6.2.2501.post21.dev1.data/data/Netgen.icns +0 -0
  251. ngsolve-6.2.2501.post21.dev1.data/data/bin/ngscxx +0 -17
  252. ngsolve-6.2.2501.post21.dev1.data/data/bin/ngsld +0 -13
  253. ngsolve-6.2.2501.post21.dev1.data/data/bin/ngsolve.tcl +0 -648
  254. ngsolve-6.2.2501.post21.dev1.data/data/bin/ngspy +0 -2
  255. ngsolve-6.2.2501.post21.dev1.data/data/share/ngsolve/beam.geo +0 -17
  256. ngsolve-6.2.2501.post21.dev1.data/data/share/ngsolve/beam.vol +0 -240
  257. ngsolve-6.2.2501.post21.dev1.data/data/share/ngsolve/chip.in2d +0 -41
  258. ngsolve-6.2.2501.post21.dev1.data/data/share/ngsolve/chip.vol +0 -614
  259. ngsolve-6.2.2501.post21.dev1.data/data/share/ngsolve/coil.geo +0 -12
  260. ngsolve-6.2.2501.post21.dev1.data/data/share/ngsolve/coil.vol +0 -2560
  261. ngsolve-6.2.2501.post21.dev1.data/data/share/ngsolve/coilshield.geo +0 -24
  262. ngsolve-6.2.2501.post21.dev1.data/data/share/ngsolve/coilshield.vol +0 -3179
  263. ngsolve-6.2.2501.post21.dev1.data/data/share/ngsolve/cube.geo +0 -19
  264. ngsolve-6.2.2501.post21.dev1.data/data/share/ngsolve/cube.vol +0 -1832
  265. ngsolve-6.2.2501.post21.dev1.data/data/share/ngsolve/d10_DGdoubleglazing.pde +0 -50
  266. ngsolve-6.2.2501.post21.dev1.data/data/share/ngsolve/d11_chip_nitsche.pde +0 -40
  267. ngsolve-6.2.2501.post21.dev1.data/data/share/ngsolve/d1_square.pde +0 -43
  268. ngsolve-6.2.2501.post21.dev1.data/data/share/ngsolve/d2_chip.pde +0 -35
  269. ngsolve-6.2.2501.post21.dev1.data/data/share/ngsolve/d3_helmholtz.pde +0 -22
  270. ngsolve-6.2.2501.post21.dev1.data/data/share/ngsolve/d4_cube.pde +0 -46
  271. ngsolve-6.2.2501.post21.dev1.data/data/share/ngsolve/d5_beam.pde +0 -74
  272. ngsolve-6.2.2501.post21.dev1.data/data/share/ngsolve/d6_shaft.pde +0 -73
  273. ngsolve-6.2.2501.post21.dev1.data/data/share/ngsolve/d7_coil.pde +0 -50
  274. ngsolve-6.2.2501.post21.dev1.data/data/share/ngsolve/d8_coilshield.pde +0 -49
  275. ngsolve-6.2.2501.post21.dev1.data/data/share/ngsolve/d9_hybridDG.pde +0 -72
  276. ngsolve-6.2.2501.post21.dev1.data/data/share/ngsolve/doubleglazing.in2d +0 -27
  277. ngsolve-6.2.2501.post21.dev1.data/data/share/ngsolve/doubleglazing.vol +0 -737
  278. ngsolve-6.2.2501.post21.dev1.data/data/share/ngsolve/piezo2d40round4.vol.gz +0 -0
  279. ngsolve-6.2.2501.post21.dev1.data/data/share/ngsolve/shaft.geo +0 -73
  280. ngsolve-6.2.2501.post21.dev1.data/data/share/ngsolve/shaft.vol +0 -4291
  281. ngsolve-6.2.2501.post21.dev1.data/data/share/ngsolve/square.in2d +0 -17
  282. ngsolve-6.2.2501.post21.dev1.data/data/share/ngsolve/square.vol +0 -149
  283. ngsolve-6.2.2501.post21.dev1.dist-info/RECORD +0 -304
  284. {ngsolve-6.2.2501.post21.dev1.dist-info → ngsolve-6.2.2501.post34.dev1.dist-info}/LICENSE +0 -0
  285. {ngsolve-6.2.2501.post21.dev1.dist-info → ngsolve-6.2.2501.post34.dev1.dist-info}/WHEEL +0 -0
  286. {ngsolve-6.2.2501.post21.dev1.dist-info → ngsolve-6.2.2501.post34.dev1.dist-info}/top_level.txt +0 -0
@@ -1,1268 +0,0 @@
1
- #ifndef FILE_BASEVECTOR
2
- #define FILE_BASEVECTOR
3
-
4
- /*********************************************************************/
5
- /* File: basevector.hpp */
6
- /* Author: Joachim Schoeberl */
7
- /* Date: 7. Feb. 2003 */
8
- /*********************************************************************/
9
-
10
- #include <bla.hpp>
11
- #include <core/mpi_wrapper.hpp>
12
- // #include "paralleldofs.hpp"
13
-
14
- namespace ngla
15
- {
16
- using namespace ngbla;
17
-
18
- class BaseVector;
19
- class AutoVector;
20
- class MultiVector;
21
-
22
- class ParallelDofs;
23
-
24
- class DofRange : public T_Range<size_t>
25
- {
26
- shared_ptr<ParallelDofs> pardofs;
27
- public:
28
- DofRange () { }
29
- DofRange (T_Range<size_t> range, shared_ptr<ParallelDofs> apardofs)
30
- : T_Range<size_t>(range), pardofs(apardofs) { ; }
31
- DofRange (size_t end, shared_ptr<ParallelDofs> apardofs)
32
- : T_Range<size_t>(0, end), pardofs(apardofs) { ; }
33
- shared_ptr<ParallelDofs> GetParallelDofs() const { return pardofs; }
34
- };
35
-
36
-
37
-
38
-
39
- template <class SCAL> class S_BaseVector;
40
-
41
- class NGS_DLL_HEADER ComplexConjugate;
42
- class NGS_DLL_HEADER ComplexConjugate2;
43
-
44
- template<class IPTYPE>
45
- class SCAL_TRAIT
46
- {
47
- public:
48
- typedef double SCAL;
49
- };
50
-
51
- template<> class SCAL_TRAIT<Complex>
52
- {
53
- public:
54
- typedef Complex SCAL;
55
- };
56
-
57
- template<> class SCAL_TRAIT<ComplexConjugate>
58
- {
59
- public:
60
- typedef Complex SCAL;
61
- };
62
-
63
- template<> class SCAL_TRAIT<ComplexConjugate2>
64
- {
65
- public:
66
- typedef Complex SCAL;
67
- };
68
-
69
-
70
-
71
- /**
72
- Base class to linalg expression templates
73
- */
74
- template <class T>
75
- class VVecExpr
76
- {
77
- const T data;
78
- public:
79
- ///
80
- VVecExpr (const T & d) : data(d) { ; }
81
-
82
- /// assign s * vector-expression data to v
83
- template <class TS>
84
- void AssignTo (TS s , BaseVector & v) const { data.AssignTo(s, v); }
85
-
86
- /// add s * vector-expression data to v
87
- template <class TS>
88
- void AddTo (TS s, BaseVector & v) const { data.AddTo(s, v); }
89
- };
90
-
91
-
92
- enum PARALLEL_STATUS { DISTRIBUTED, CUMULATED, NOT_PARALLEL };
93
- inline ostream & operator<< (ostream & ost, PARALLEL_STATUS stat)
94
- {
95
- switch (stat)
96
- {
97
- case DISTRIBUTED: ost << "distributed"; break;
98
- case CUMULATED: ost << "cumulated"; break;
99
- default: ost << "sequential";
100
- }
101
- return ost;
102
- }
103
-
104
-
105
- /**
106
- Base vector for linalg
107
- */
108
- class NGS_DLL_HEADER BaseVector : public enable_shared_from_this_virtual<BaseVector>
109
- {
110
- protected:
111
- /// size of vector
112
- size_t size;
113
- /// number of doubles per entry
114
- int entrysize = 1;
115
- ///
116
- BaseVector () { ; }
117
-
118
- public:
119
- ///
120
- virtual ~BaseVector () { ; }
121
-
122
- ///
123
- template <typename T>
124
- BaseVector & operator= (const VVecExpr<T> & v)
125
- {
126
- v.AssignTo (1.0, *this);
127
- return *this;
128
- }
129
-
130
- ///
131
- BaseVector & operator= (const BaseVector & v)
132
- {
133
- Set (1.0, v);
134
- return *this;
135
- }
136
- ///
137
- BaseVector & operator= (double s)
138
- {
139
- SetScalar (s);
140
- return *this;
141
- }
142
- ///
143
- BaseVector & operator= (Complex s)
144
- {
145
- SetScalar (s);
146
- return *this;
147
- }
148
-
149
- virtual void SetZero ()
150
- {
151
- SetScalar(0);
152
- }
153
-
154
- ///
155
- template <typename T>
156
- BaseVector & operator+= (const VVecExpr<T> & v)
157
- {
158
- v.AddTo (1.0, *this);
159
- return *this;
160
- }
161
-
162
- ///
163
- BaseVector & operator+= (const BaseVector & v)
164
- {
165
- Add (1.0, v);
166
- return *this;
167
- }
168
-
169
- ///
170
- template <typename T>
171
- BaseVector & operator-= (const VVecExpr<T> & v)
172
- {
173
- v.AddTo (-1.0, *this);
174
- return *this;
175
- }
176
-
177
- ///
178
- BaseVector & operator-= (const BaseVector & v)
179
- {
180
- Add (-1.0, v);
181
- return *this;
182
- }
183
-
184
- ///
185
- BaseVector & operator*= (double s)
186
- {
187
- return Scale (s);
188
- }
189
-
190
- ///
191
- BaseVector & operator*= (Complex s)
192
- {
193
- return Scale (s);
194
- }
195
-
196
- ///
197
- BaseVector & operator/= (double s)
198
- {
199
- if (s == 0)
200
- throw Exception ("BaseVector::operator/=: division by zero");
201
- return Scale (1/s);
202
- }
203
-
204
- ///
205
- BaseVector & operator/= (Complex s)
206
- {
207
- if (s == 0.0)
208
- throw Exception ("BaseVector::operator/=: division by zero");
209
- return Scale (1.0/s);
210
- }
211
-
212
- template <class SCAL>
213
- S_BaseVector<SCAL> & Spec()
214
- {
215
- return dynamic_cast<S_BaseVector<SCAL>&> (*this);
216
- }
217
-
218
- template <class SCAL>
219
- const S_BaseVector<SCAL> & Spec() const
220
- {
221
- return dynamic_cast<const S_BaseVector<SCAL>&> (*this);
222
- }
223
-
224
- size_t Size() const throw () { return size; }
225
- T_Range<size_t> Range() const { return T_Range<size_t> (0, size); }
226
- // one entry has the size of that many doubles
227
- int EntrySize() const throw () { return entrysize; }
228
- // one entry has the size of that many scalars (double or complex)
229
- virtual int EntrySizeScal() const throw () = 0;
230
- virtual void * Memory () const = 0;
231
- virtual FlatVector<double> FVDouble () const = 0;
232
- virtual FlatVector<Complex> FVComplex () const = 0;
233
-
234
- template <typename SCAL = double>
235
- FlatSysVector<SCAL> SV () const
236
- {
237
- return FlatSysVector<SCAL> (Size(), EntrySize() * sizeof(double)/sizeof(SCAL), (SCAL*)Memory());
238
- }
239
-
240
- template <typename T>
241
- FlatVector<T> FV () const;
242
-
243
- /*
244
- template <class TSCAL>
245
- TSCAL InnerProduct (const BaseVector & v2) const
246
- {
247
- return dynamic_cast<const S_BaseVector<TSCAL>&> (*this) .
248
- InnerProduct (v2);
249
- }
250
- */
251
-
252
- virtual double InnerProductD (const BaseVector & v2) const;
253
- virtual Complex InnerProductC (const BaseVector & v2, bool conjuagte = false) const;
254
-
255
- virtual double L2Norm () const;
256
- virtual bool IsComplex() const { return false; }
257
-
258
- virtual BaseVector & Scale (double scal);
259
- virtual BaseVector & Scale (Complex scal);
260
-
261
- virtual BaseVector & SetScalar (double scal);
262
- virtual BaseVector & SetScalar (Complex scal);
263
-
264
- virtual BaseVector & Set (double scal, const BaseVector & v);
265
- virtual BaseVector & Set (Complex scal, const BaseVector & v);
266
-
267
- virtual BaseVector & Add (double scal, const BaseVector & v);
268
- virtual BaseVector & Add (Complex scal, const BaseVector & v);
269
-
270
- virtual ostream & Print (ostream & ost) const;
271
- virtual void Save(ostream & ost) const;
272
- virtual void Load(istream & ist);
273
- virtual void SaveText(ostream & ost) const;
274
- virtual void LoadText(istream & ist);
275
-
276
- virtual Array<MemoryUsage> GetMemoryUsage () const;
277
- virtual size_t CheckSum () const;
278
- //
279
- // virtual shared_ptr<BaseVector> CreateVector () const = 0;
280
- virtual AutoVector CreateVector () const = 0;
281
- virtual unique_ptr<MultiVector> CreateMultiVector (size_t cnt) const;
282
-
283
- virtual void SetRandom ();
284
-
285
- inline AutoVector Range (size_t begin, size_t end) const;
286
- inline AutoVector Range (size_t end) const;
287
- // { return Range(T_Range(begin, end)); }
288
- virtual AutoVector Range (T_Range<size_t> range) const;
289
- virtual AutoVector Range (DofRange range) const;
290
- // { return Range(T_Range<size_t>(range)); }
291
-
292
- static bool IsRegularIndex (int index) { return index >= 0; }
293
- virtual void GetIndirect (FlatArray<int> ind,
294
- FlatVector<double> v) const = 0;
295
- virtual void GetIndirect (FlatArray<int> ind,
296
- FlatVector<Complex> v) const = 0;
297
- void SetIndirect (FlatArray<int> ind, FlatVector<double> v);
298
- void SetIndirect (FlatArray<int> ind, FlatVector<Complex> v);
299
- void AddIndirect (FlatArray<int> ind, FlatVector<double> v, bool use_atomic = false);
300
- void AddIndirect (FlatArray<int> ind, FlatVector<Complex> v, bool use_atomic = false);
301
-
302
- virtual shared_ptr<BaseVector> GetLocalVector () const
303
- { return const_cast<BaseVector*>(this)->shared_from_this(); }
304
-
305
- virtual void Cumulate () const;
306
- virtual void Distribute() const;
307
- virtual PARALLEL_STATUS GetParallelStatus () const;
308
- virtual void SetParallelStatus (PARALLEL_STATUS stat) const;
309
- virtual optional<NgMPI_Comm> GetCommunicator() const { return nullopt; }
310
-
311
-
312
- virtual shared_ptr<BaseVector> CreateDeviceVector(bool unified) const;
313
- static std::map<type_index, function<shared_ptr<BaseVector>(const BaseVector&,bool)>> devveccreator;
314
- static void RegisterDeviceVectorCreator (type_index type,
315
- function<shared_ptr<BaseVector>(const BaseVector&,bool)> creator)
316
- {
317
- devveccreator[type] = creator;
318
- }
319
-
320
-
321
- const MemoryTracer& GetMemoryTracer() const { return mt; }
322
- private:
323
- MemoryTracer mt = { "BaseVector" };
324
- };
325
-
326
-
327
- AutoVector CreateBaseVector(size_t size, bool is_complex = false, int es = 1);
328
-
329
-
330
- class NGS_DLL_HEADER AutoVector
331
- {
332
- shared_ptr<BaseVector> vec;
333
- public:
334
- AutoVector () = default;
335
- AutoVector (AutoVector && av2) = default; // : vec(std::move(av2.vec)) { }
336
-
337
- AutoVector (shared_ptr<BaseVector> hvec) : vec(std::move(hvec)) { }
338
-
339
- AutoVector (unique_ptr<BaseVector> hvec) : vec(std::move(hvec)) { }
340
-
341
- template<typename U>
342
- AutoVector (unique_ptr<U> hvec) : vec(std::move(hvec)) { }
343
-
344
- ~AutoVector();
345
-
346
- auto Size() const { return vec->Size(); }
347
-
348
- template <typename T>
349
- BaseVector & operator= (const VVecExpr<T> & v)
350
- {
351
- v.AssignTo (1.0, *vec);
352
- return *this;
353
- }
354
-
355
- ///
356
- BaseVector & operator= (const BaseVector & v)
357
- {
358
- vec->Set (1.0, v);
359
- return *this;
360
- }
361
- ///
362
- BaseVector & operator= (const AutoVector & v)
363
- {
364
- vec->Set (1.0, *v);
365
- return *this;
366
- }
367
-
368
- template <typename T>
369
- auto & operator+= (const VVecExpr<T> & v)
370
- {
371
- (*vec) += v;
372
- return *this;
373
- }
374
-
375
- auto & operator+= (const BaseVector & v)
376
- {
377
- (*vec) += v;
378
- return *this;
379
- }
380
-
381
- template <typename T>
382
- auto & operator-= (const VVecExpr<T> & v)
383
- {
384
- (*vec) -= v;
385
- return *this;
386
- }
387
-
388
- auto & operator-= (const BaseVector & v)
389
- {
390
- (*vec) -= v;
391
- return *this;
392
- }
393
-
394
- auto & operator*= (double s)
395
- {
396
- (*vec) *= s;
397
- return *this;
398
- }
399
-
400
- ///
401
- auto & operator*= (Complex s)
402
- {
403
- (*vec) *= s;
404
- return *this;
405
- }
406
-
407
- auto & operator/= (double s)
408
- {
409
- (*vec) /= s;
410
- return *this;
411
- }
412
-
413
- ///
414
- auto & operator/= (Complex s)
415
- {
416
- (*vec) /= s;
417
- return *this;
418
- }
419
-
420
- auto & SetRandom ()
421
- {
422
- vec->SetRandom();
423
- return *this;
424
- }
425
-
426
-
427
- ///
428
- BaseVector & AssignPointer (AutoVector && v)
429
- {
430
- vec = std::move(v.vec);
431
- // size = v.size;
432
- // entrysize = v.entrysize;
433
- return *this;
434
- }
435
- ///
436
- BaseVector & operator= (double s)
437
- {
438
- vec->SetScalar (s);
439
- return *this;
440
- }
441
- ///
442
- BaseVector & operator= (Complex s)
443
- {
444
- vec->SetScalar (s);
445
- return *this;
446
- }
447
-
448
- operator shared_ptr<BaseVector> () && { return std::move(vec); }
449
- operator shared_ptr<BaseVector> () & { return vec; }
450
- BaseVector & operator* () { return *vec; }
451
- const BaseVector & operator* () const { return *vec; }
452
- operator BaseVector & () { return *vec; }
453
- operator const BaseVector & () const { return *vec; }
454
-
455
- AutoVector Range (size_t begin, size_t end) const { return vec->Range(begin,end); }
456
- AutoVector Range (size_t end) const { return vec->Range(0,end); }
457
- AutoVector Range (T_Range<size_t> range) const { return vec->Range(range); }
458
-
459
- template <typename T>
460
- auto FV () const { return vec->FV<T>(); }
461
-
462
-
463
- void * Memory () const throw ()
464
- {
465
- return vec->Memory();
466
- }
467
-
468
- FlatVector<double> FVDouble () const
469
- {
470
- return vec->FVDouble();
471
- }
472
-
473
- FlatVector<Complex> FVComplex () const
474
- {
475
- return vec->FVComplex();
476
- }
477
-
478
- AutoVector CreateVector () const
479
- {
480
- return vec->CreateVector();
481
- }
482
-
483
- double InnerProductD (const BaseVector & v2) const
484
- {
485
- return vec->InnerProductD (v2);
486
- }
487
-
488
- Complex InnerProductC (const BaseVector & v2, bool conjugate) const
489
- {
490
- return vec->InnerProductC (v2, conjugate);
491
- }
492
-
493
- double L2Norm () const
494
- {
495
- return vec->L2Norm();
496
- }
497
-
498
- bool IsComplex() const
499
- {
500
- return vec->IsComplex();
501
- }
502
-
503
- BaseVector & Scale (double scal)
504
- {
505
- return vec->Scale(scal);
506
- }
507
-
508
- BaseVector & Scale (Complex scal)
509
- {
510
- return vec->Scale(scal);
511
- }
512
-
513
- BaseVector & SetScalar (double scal)
514
- {
515
- return vec->SetScalar(scal);
516
- }
517
- BaseVector & SetScalar (Complex scal)
518
- {
519
- return vec->SetScalar(scal);
520
- }
521
-
522
- BaseVector & Set (double scal, const BaseVector & v)
523
- {
524
- return vec->Set (scal,v);
525
- }
526
- BaseVector & Set (Complex scal, const BaseVector & v)
527
- {
528
- return vec->Set (scal,v);
529
- }
530
-
531
- BaseVector & Add (double scal, const BaseVector & v)
532
- {
533
- return vec->Add (scal,v);
534
- }
535
- BaseVector & Add (Complex scal, const BaseVector & v)
536
- {
537
- return vec->Add (scal,v);
538
- }
539
-
540
- ostream & Print (ostream & ost) const
541
- {
542
- return vec->Print (ost);
543
- }
544
-
545
-
546
- void GetIndirect (FlatArray<int> ind,
547
- FlatVector<double> v) const
548
- {
549
- vec -> GetIndirect (ind, v);
550
- }
551
- void GetIndirect (FlatArray<int> ind,
552
- FlatVector<Complex> v) const
553
- {
554
- vec -> GetIndirect (ind, v);
555
- }
556
-
557
- void SetIndirect (FlatArray<int> ind, FlatVector<double> v)
558
- {
559
- vec->SetIndirect (ind,v);
560
- }
561
- void SetIndirect (FlatArray<int> ind, FlatVector<Complex> v)
562
- {
563
- vec->SetIndirect (ind,v);
564
- }
565
-
566
- void AddIndirect (FlatArray<int> ind, FlatVector<double> v, bool use_atomic = false)
567
- {
568
- vec->AddIndirect (ind, v, use_atomic);
569
- }
570
- void AddIndirect (FlatArray<int> ind, FlatVector<Complex> v, bool use_atomic = false)
571
- {
572
- vec->AddIndirect (ind, v, use_atomic);
573
- }
574
-
575
-
576
- void Cumulate () const
577
- { vec -> Cumulate(); }
578
-
579
- void Distribute() const
580
- { vec -> Distribute(); }
581
-
582
- PARALLEL_STATUS GetParallelStatus () const
583
- { return vec -> GetParallelStatus(); }
584
-
585
- void SetParallelStatus (PARALLEL_STATUS stat) const
586
- { vec -> SetParallelStatus(stat); }
587
- };
588
-
589
- AutoVector BaseVector::Range (size_t begin, size_t end) const
590
- {
591
- return Range(T_Range(begin, end));
592
- }
593
-
594
- AutoVector BaseVector::Range (size_t end) const
595
- {
596
- return Range (0, end);
597
- }
598
-
599
-
600
- template <>
601
- inline FlatVector<double> BaseVector::FV<double> () const
602
- {
603
- return FVDouble();
604
- }
605
-
606
- template <>
607
- inline FlatVector<Complex> BaseVector::FV<Complex> () const
608
- {
609
- return FVComplex();
610
- }
611
-
612
- template <typename T>
613
- inline FlatVector<T> BaseVector::FV () const
614
- {
615
- typedef typename mat_traits<T>::TSCAL TSCAL;
616
- return FlatVector<T> (Size(), static_cast<T*> (static_cast<void*>(FV<TSCAL>().Addr(0))));
617
- }
618
-
619
-
620
-
621
-
622
-
623
-
624
- /**
625
- Decision between double or Complex
626
- */
627
-
628
-
629
-
630
- template <class SCAL>
631
- class NGS_DLL_HEADER S_BaseVector : virtual public BaseVector
632
- {
633
- public:
634
- S_BaseVector () throw () { ; }
635
- virtual ~S_BaseVector() { ; }
636
-
637
- S_BaseVector & operator= (double s);
638
- virtual BaseVector & SetScalar (double scal) override;
639
-
640
- virtual bool IsComplex() const override
641
- { return typeid(SCAL) == typeid(Complex); }
642
-
643
- virtual int EntrySizeScal() const throw () override
644
- { return EntrySize() * sizeof(double)/sizeof(SCAL); }
645
-
646
- virtual SCAL InnerProduct (const BaseVector & v2, bool conjugate = false) const;
647
-
648
- virtual double InnerProductD (const BaseVector & v2) const override;
649
- virtual Complex InnerProductC (const BaseVector & v2, bool conjugate = false) const override;
650
-
651
-
652
- virtual FlatVector<double> FVDouble () const override;
653
- virtual FlatVector<Complex> FVComplex () const override;
654
-
655
- virtual FlatVector<SCAL> FVScal () const
656
- {
657
- return FlatVector<SCAL> (size * entrysize * sizeof(double)/sizeof(SCAL),
658
- (SCAL*)Memory());
659
- }
660
-
661
-
662
- virtual void GetIndirect (FlatArray<int> ind,
663
- FlatVector<double> v) const override;
664
- virtual void GetIndirect (FlatArray<int> ind,
665
- FlatVector<Complex> v) const override;
666
-
667
- };
668
-
669
-
670
- template <>
671
- double S_BaseVector<double> :: InnerProduct (const BaseVector & v2, bool conjugate) const;
672
-
673
-
674
- #if !defined(FILE_BASEVECTOR_CPP)
675
- extern template class S_BaseVector<double>;
676
- extern template class S_BaseVector<Complex>;
677
- #endif
678
-
679
-
680
-
681
-
682
- class BlockVector;
683
- extern NGS_DLL_HEADER BlockVector & dynamic_cast_BlockVector (BaseVector & x);
684
- extern NGS_DLL_HEADER const BlockVector & dynamic_cast_BlockVector (const BaseVector & x);
685
-
686
- class BlockVector : public BaseVector
687
- {
688
- Array<shared_ptr<BaseVector>> vecs;
689
- BitArray ispar;
690
- NgMPI_Comm comm;
691
- public:
692
- BlockVector (const Array<shared_ptr<BaseVector>> & avecs);
693
-
694
- size_t NBlocks() const throw () { return vecs.Size(); }
695
- virtual int EntrySizeScal() const throw () override { return vecs[0]->EntrySizeScal(); }
696
- shared_ptr<BaseVector> & operator[] (size_t i) const { return vecs[i]; }
697
-
698
- void * Memory () const override;
699
- FlatVector<double> FVDouble () const override;
700
- FlatVector<Complex> FVComplex () const override;
701
- void GetIndirect (FlatArray<int> ind,
702
- FlatVector<double> v) const override;
703
- void GetIndirect (FlatArray<int> ind,
704
- FlatVector<Complex> v) const override;
705
-
706
- bool IsComplex() const override;
707
-
708
- AutoVector CreateVector () const override;
709
-
710
- double InnerProductD (const BaseVector & v2) const override;
711
- Complex InnerProductC (const BaseVector & v2,
712
- bool conjugate = false) const override;
713
- double L2Norm () const override;
714
-
715
- BaseVector & Scale (double scal) override;
716
- BaseVector & Scale (Complex scal) override;
717
- BaseVector & SetScalar (double scal) override;
718
- BaseVector & SetScalar (Complex scal) override;
719
-
720
- ostream & Print (ostream & ost) const override;
721
-
722
- BaseVector & Set (double scal, const BaseVector & v) override;
723
- BaseVector & Add (double scal, const BaseVector & v) override;
724
- BaseVector & Set (Complex scal, const BaseVector & v) override;
725
- BaseVector & Add (Complex scal, const BaseVector & v) override;
726
- };
727
-
728
-
729
-
730
-
731
-
732
-
733
-
734
-
735
-
736
-
737
-
738
- /* ********************* Expression templates ***************** */
739
-
740
-
741
-
742
- template <> class VVecExpr<BaseVector>
743
- {
744
- const BaseVector & v;
745
- public:
746
- VVecExpr (const BaseVector & av) : v(av) { ; }
747
-
748
- template <class TS>
749
- void AssignTo (TS s, BaseVector & v2) const { v2.Set (s, v); }
750
- template <class TS>
751
- void AddTo (TS s, BaseVector & v2) const { v2.Add (s, v); }
752
- };
753
-
754
-
755
-
756
- /* ***************************** VSumExpr ************************** */
757
-
758
- ///
759
- template <class TA, class TB>
760
- class VSumExpr
761
- {
762
- const TA a;
763
- const TB b;
764
-
765
- public:
766
- VSumExpr (const TA & aa, const TB & ab) : a(aa), b(ab) { ; }
767
-
768
- template <class TS>
769
- void AssignTo (TS s, BaseVector & v) const
770
- {
771
- a.AssignTo (s, v);
772
- b.AddTo (s, v);
773
- }
774
- template <class TS>
775
- void AddTo (TS s, BaseVector & v) const
776
- {
777
- a.AddTo (s, v);
778
- b.AddTo (s, v);
779
- }
780
- };
781
-
782
-
783
- /*
784
- inline VVecExpr<VSumExpr<VVecExpr<BaseVector>, VVecExpr<BaseVector> > >
785
- operator+ (const BaseVector & a, const BaseVector & b)
786
- {
787
- typedef VSumExpr<VVecExpr<BaseVector>, VVecExpr<BaseVector> > TRES;
788
- return TRES (a, b);
789
- }
790
- */
791
- inline auto operator+ (const BaseVector & a, const BaseVector & b)
792
- {
793
- return VVecExpr<VSumExpr<VVecExpr<BaseVector>,VVecExpr<BaseVector>>>{{a,b}};
794
- }
795
-
796
- /*
797
- template <class TA>
798
- inline VVecExpr<VSumExpr<VVecExpr<TA>, VVecExpr<BaseVector> > >
799
- operator+ (const VVecExpr<TA> & a, const BaseVector & b)
800
- {
801
- typedef VSumExpr<VVecExpr<TA>, VVecExpr<BaseVector> > TRES;
802
- return TRES (a, b);
803
- }
804
- */
805
- template <class TA>
806
- inline auto operator+ (const VVecExpr<TA> & a, const BaseVector & b)
807
- {
808
- return VSumExpr<VVecExpr<TA>,VVecExpr<BaseVector>> (a,b);
809
- }
810
-
811
-
812
- template <class TB>
813
- inline VVecExpr<VSumExpr<VVecExpr<BaseVector>, VVecExpr<TB> > >
814
- operator+ (const BaseVector & a, const VVecExpr<TB> & b)
815
- {
816
- typedef VSumExpr<VVecExpr<BaseVector>, VVecExpr<TB> > TRES;
817
- return TRES (a, b);
818
- }
819
-
820
- template <class TA, class TB>
821
- inline VVecExpr<VSumExpr<VVecExpr<TA>, VVecExpr<TB> > >
822
- operator+ (const VVecExpr<TA> & a, const VVecExpr<TB> & b)
823
- {
824
- typedef VSumExpr<VVecExpr<TA>, VVecExpr<TB> > TRES;
825
- return TRES (a, b);
826
- }
827
-
828
-
829
-
830
-
831
-
832
-
833
-
834
-
835
- /* ***************************** VSubExpr ************************** */
836
-
837
- ///
838
- template <class TA, class TB>
839
- class VSubExpr
840
- {
841
- const TA a;
842
- const TB b;
843
-
844
- public:
845
- VSubExpr (const TA & aa, const TB & ab) : a(aa), b(ab) { ; }
846
-
847
-
848
- template <class TS>
849
- void AssignTo (TS s, BaseVector & v) const
850
- {
851
- a.AssignTo (s, v);
852
- b.AddTo (-s, v);
853
- }
854
- template <class TS>
855
- void AddTo (TS s, BaseVector & v) const
856
- {
857
- a.AddTo (s, v);
858
- b.AddTo (-s, v);
859
- }
860
- };
861
-
862
-
863
-
864
- inline VVecExpr<VSubExpr<VVecExpr<BaseVector>, VVecExpr<BaseVector> > >
865
- operator- (const BaseVector & a, const BaseVector & b)
866
- {
867
- typedef VSubExpr<VVecExpr<BaseVector>, VVecExpr<BaseVector> > TRES;
868
- return TRES (a, b);
869
- }
870
-
871
- template <class TA>
872
- inline VVecExpr<VSubExpr<VVecExpr<TA>, VVecExpr<BaseVector> > >
873
- operator- (const VVecExpr<TA> & a, const BaseVector & b)
874
- {
875
- typedef VSubExpr<VVecExpr<TA>, VVecExpr<BaseVector> > TRES;
876
- return TRES (a, b);
877
- }
878
-
879
- template <class TB>
880
- inline VVecExpr<VSubExpr<VVecExpr<BaseVector>, VVecExpr<TB> > >
881
- operator- (const BaseVector & a, const VVecExpr<TB> & b)
882
- {
883
- typedef VSubExpr<VVecExpr<BaseVector>, VVecExpr<TB> > TRES;
884
- return TRES (a, b);
885
- }
886
-
887
- template <class TA, class TB>
888
- inline VVecExpr<VSubExpr<VVecExpr<TA>, VVecExpr<TB> > >
889
- operator- (const VVecExpr<TA> & a, const VVecExpr<TB> & b)
890
- {
891
- typedef VSubExpr<VVecExpr<TA>, VVecExpr<TB> > TRES;
892
- return TRES (a, b);
893
- }
894
-
895
-
896
-
897
-
898
-
899
- /* ************************* Scal * Vec ******************** */
900
-
901
-
902
- ///
903
- template <class TA, class TSCAL>
904
- class VScaleExpr
905
- {
906
- const TA a;
907
- const TSCAL scal;
908
-
909
- public:
910
- VScaleExpr (const TA & aa, const TSCAL & as) : a(aa), scal(as) { ; }
911
-
912
-
913
- template <class TS>
914
- void AssignTo (TS s, BaseVector & v) const
915
- {
916
- a.AssignTo (scal * s, v);
917
- }
918
- template <class TS>
919
- void AddTo (TS s, BaseVector & v) const
920
- {
921
- a.AddTo (scal * s, v);
922
- }
923
- };
924
-
925
-
926
- inline VVecExpr<VScaleExpr<VVecExpr<BaseVector>, double> >
927
- operator* (const BaseVector & a, const double & b)
928
- {
929
- typedef VScaleExpr<VVecExpr<BaseVector>, double> TRES;
930
- return TRES (a, b);
931
- }
932
-
933
- template <class TA>
934
- inline VVecExpr<VScaleExpr<VVecExpr<TA>, double> >
935
- operator* (const VVecExpr<TA> & a, const double & b)
936
- {
937
- typedef VScaleExpr<VVecExpr<TA>, double> TRES;
938
- return TRES (a, b);
939
- }
940
-
941
-
942
-
943
- inline VVecExpr<VScaleExpr<VVecExpr<BaseVector>, Complex> >
944
- operator* (const BaseVector & a, const Complex & b)
945
- {
946
- typedef VScaleExpr<VVecExpr<BaseVector>, Complex> TRES;
947
- return TRES (a, b);
948
- }
949
-
950
- template <class TA>
951
- inline VVecExpr<VScaleExpr<VVecExpr<TA>, Complex> >
952
- operator* (const VVecExpr<TA> & a, const Complex & b)
953
- {
954
- typedef VScaleExpr<VVecExpr<TA>, Complex> TRES;
955
- return TRES (a, b);
956
- }
957
-
958
-
959
-
960
-
961
-
962
- inline VVecExpr<VScaleExpr<VVecExpr<BaseVector>, double> >
963
- operator* (const double & b, const BaseVector & a)
964
- {
965
- typedef VScaleExpr<VVecExpr<BaseVector>, double> TRES;
966
- return TRES (a, b);
967
- }
968
-
969
- template <class TA>
970
- inline VVecExpr<VScaleExpr<VVecExpr<TA>, double> >
971
- operator* (const double & b, const VVecExpr<TA> & a)
972
- {
973
- typedef VScaleExpr<VVecExpr<TA>, double> TRES;
974
- return TRES (a, b);
975
- }
976
-
977
-
978
-
979
- inline VVecExpr<VScaleExpr<VVecExpr<BaseVector>, Complex> >
980
- operator* (const Complex & b, const BaseVector & a)
981
- {
982
- typedef VScaleExpr<VVecExpr<BaseVector>, Complex> TRES;
983
- return TRES (a, b);
984
- }
985
-
986
- template <class TA>
987
- inline VVecExpr<VScaleExpr<VVecExpr<TA>, Complex> >
988
- operator* (const Complex & b, const VVecExpr<TA> & a)
989
- {
990
- typedef VScaleExpr<VVecExpr<TA>, Complex> TRES;
991
- return TRES (a, b);
992
- }
993
-
994
-
995
- template <class TA>
996
- inline VVecExpr<VScaleExpr<VVecExpr<TA>,double > >
997
- operator- (const VVecExpr<TA> & a)
998
- {
999
- typedef VScaleExpr<VVecExpr<TA>, double> TRES;
1000
- return TRES (a, -1);
1001
- }
1002
-
1003
-
1004
-
1005
-
1006
- /* *********************** operator<< ********************** */
1007
-
1008
- ///
1009
- inline ostream & operator<< (ostream & ost, const BaseVector & v)
1010
- {
1011
- return v.Print(ost);
1012
- }
1013
-
1014
- ///
1015
- template <typename T = double>
1016
- inline T InnerProduct (const BaseVector & v1, const BaseVector & v2, bool conjugate = false)
1017
- {
1018
- // return dynamic_cast<const S_BaseVector<double>&>(v1).InnerProduct(v2);
1019
- if constexpr (is_same<T,double>::value)
1020
- return v1.InnerProductD(v2);
1021
- else
1022
- return v1.InnerProductC(v2, conjugate);
1023
- }
1024
-
1025
- ///
1026
- template <class IPTYPE>
1027
- inline typename SCAL_TRAIT<IPTYPE>::SCAL S_InnerProduct (const BaseVector & v1, const BaseVector & v2)
1028
- {
1029
- return dynamic_cast<const S_BaseVector<typename SCAL_TRAIT<IPTYPE>::SCAL>&>(v1).InnerProduct(v2);
1030
- }
1031
-
1032
- template <> inline double
1033
- S_InnerProduct<double> (const BaseVector & v1, const BaseVector & v2)
1034
- {
1035
- return v1.InnerProductD (v2);
1036
- }
1037
-
1038
- template <> inline Complex
1039
- S_InnerProduct<Complex> (const BaseVector & v1, const BaseVector & v2)
1040
- {
1041
- return v1.InnerProductC (v2);
1042
- }
1043
-
1044
-
1045
- template <> inline Complex
1046
- S_InnerProduct<ComplexConjugate> (const BaseVector & v1, const BaseVector & v2)
1047
- {
1048
- return v1.InnerProductC(v2, true);
1049
- // return InnerProduct( v1.FVComplex(), Conj(v2.FVComplex()) );
1050
- }
1051
-
1052
- template <>
1053
- inline Complex S_InnerProduct<ComplexConjugate2> (const BaseVector & v1, const BaseVector & v2)
1054
- {
1055
- return v2.InnerProductC(v1, true);
1056
- // return InnerProduct( v2.FVComplex(), Conj(v1.FVComplex()) );
1057
- }
1058
-
1059
- ///
1060
- inline double L2Norm (const BaseVector & v)
1061
- {
1062
- return v.L2Norm();
1063
- }
1064
-
1065
-
1066
-
1067
-
1068
-
1069
-
1070
-
1071
-
1072
-
1073
-
1074
- class DynamicBaseExpression
1075
- {
1076
- protected:
1077
- public:
1078
- DynamicBaseExpression () { }
1079
- virtual ~DynamicBaseExpression() { }
1080
- virtual AutoVector CreateVector() const = 0;
1081
- virtual AutoVector Evaluate() const
1082
- {
1083
- auto vec = CreateVector();
1084
- AssignTo (1, vec);
1085
- return vec;
1086
- }
1087
- virtual void AssignTo (double s, BaseVector & v2) const = 0;
1088
- virtual void AddTo (double s, BaseVector & v2) const = 0;
1089
- virtual void AssignTo (Complex s, BaseVector & v2) const = 0;
1090
- virtual void AddTo (Complex s, BaseVector & v2) const = 0;
1091
- };
1092
-
1093
-
1094
- class DynamicVecExpression : public DynamicBaseExpression
1095
- {
1096
- protected:
1097
- shared_ptr<BaseVector> a;
1098
- public:
1099
- DynamicVecExpression (shared_ptr<BaseVector> aa) : a(aa) { ; }
1100
- AutoVector CreateVector() const override
1101
- { return a->CreateVector(); }
1102
- void AssignTo (double s, BaseVector & v2) const override
1103
- { v2.Set (s, *a); }
1104
- void AddTo (double s, BaseVector & v2) const override
1105
- { v2.Add (s, *a); }
1106
- void AssignTo (Complex s, BaseVector & v2) const override
1107
- { v2.Set (s, *a); }
1108
- void AddTo (Complex s, BaseVector & v2) const override
1109
- { v2.Add (s, *a); }
1110
- };
1111
-
1112
- class DynamicSumExpression : public DynamicBaseExpression
1113
- {
1114
- shared_ptr<DynamicBaseExpression> a,b;
1115
-
1116
- AutoVector CreateVector() const override
1117
- { return a->CreateVector(); }
1118
- void AssignTo (double s, BaseVector & v2) const override
1119
- {
1120
- a->AssignTo(s, v2);
1121
- b->AddTo(s, v2);
1122
- }
1123
- void AddTo (double s, BaseVector & v2) const override
1124
- {
1125
- a->AddTo(s, v2);
1126
- b->AddTo(s, v2);
1127
- }
1128
- void AssignTo (Complex s, BaseVector & v2) const override
1129
- {
1130
- a->AssignTo(s, v2);
1131
- b->AddTo(s, v2);
1132
- }
1133
- void AddTo (Complex s, BaseVector & v2) const override
1134
- {
1135
- a->AddTo(s, v2);
1136
- b->AddTo(s, v2);
1137
- }
1138
- public:
1139
- DynamicSumExpression (shared_ptr<DynamicBaseExpression> aa,
1140
- shared_ptr<DynamicBaseExpression> ab)
1141
- : a(aa), b(ab) { ; }
1142
- };
1143
-
1144
- class DynamicSubExpression : public DynamicBaseExpression
1145
- {
1146
- shared_ptr<DynamicBaseExpression> a,b;
1147
-
1148
- AutoVector CreateVector() const override
1149
- { return a->CreateVector(); }
1150
-
1151
- void AssignTo (double s, BaseVector & v2) const override
1152
- {
1153
- a->AssignTo(s, v2);
1154
- b->AddTo(-s, v2);
1155
- }
1156
- void AddTo (double s, BaseVector & v2) const override
1157
- {
1158
- a->AddTo(s, v2);
1159
- b->AddTo(-s, v2);
1160
- }
1161
- void AssignTo (Complex s, BaseVector & v2) const override
1162
- {
1163
- a->AssignTo(s, v2);
1164
- b->AddTo(-s, v2);
1165
- }
1166
- void AddTo (Complex s, BaseVector & v2) const override
1167
- {
1168
- a->AddTo(s, v2);
1169
- b->AddTo(-s, v2);
1170
- }
1171
- public:
1172
- DynamicSubExpression (shared_ptr<DynamicBaseExpression> aa,
1173
- shared_ptr<DynamicBaseExpression> ab)
1174
- : a(aa), b(ab) { ; }
1175
- };
1176
-
1177
- template <typename T>
1178
- class DynamicScaleExpression : public DynamicBaseExpression
1179
- {
1180
- T scale;
1181
- shared_ptr<DynamicBaseExpression> a;
1182
-
1183
- AutoVector CreateVector() const override
1184
- { return a->CreateVector(); }
1185
-
1186
- void AssignTo (double s, BaseVector & v2) const override
1187
- {
1188
- a->AssignTo(s*scale, v2);
1189
- }
1190
- void AddTo (double s, BaseVector & v2) const override
1191
- {
1192
- a->AddTo(s*scale, v2);
1193
- }
1194
- void AssignTo (Complex s, BaseVector & v2) const override
1195
- {
1196
- a->AssignTo(s*scale, v2);
1197
- }
1198
- void AddTo (Complex s, BaseVector & v2) const override
1199
- {
1200
- a->AddTo(s*scale, v2);
1201
- }
1202
- public:
1203
- DynamicScaleExpression (T ascale, shared_ptr<DynamicBaseExpression> aa)
1204
- : scale(ascale), a(aa) { ; }
1205
- };
1206
-
1207
-
1208
-
1209
-
1210
- class DynamicVectorExpression
1211
- {
1212
- shared_ptr<DynamicBaseExpression> ve;
1213
- public:
1214
- DynamicVectorExpression() { }
1215
- DynamicVectorExpression (shared_ptr<DynamicBaseExpression> ave) : ve(ave) { }
1216
- DynamicVectorExpression (shared_ptr<BaseVector> v)
1217
- : ve(make_shared<DynamicVecExpression>(v)) { }
1218
-
1219
- AutoVector Evaluate() const
1220
- {
1221
- return ve->Evaluate();
1222
- /*
1223
- auto vec = ve->CreateVector();
1224
- ve->AssignTo (1, vec);
1225
- return vec;
1226
- */
1227
- }
1228
-
1229
- AutoVector CreateVector() const
1230
- {
1231
- return ve->CreateVector();
1232
- }
1233
-
1234
- void AssignTo (double s, BaseVector & v2) const
1235
- { ve->AssignTo(s,v2); }
1236
- void AddTo (double s, BaseVector & v2) const
1237
- { ve->AddTo(s,v2); }
1238
- void AssignTo (Complex s, BaseVector & v2) const
1239
- { ve->AssignTo(s,v2); }
1240
- void AddTo (Complex s, BaseVector & v2) const
1241
- { ve->AddTo(s,v2); }
1242
- auto Ptr() const { return ve; }
1243
- };
1244
-
1245
- inline auto operator+ (DynamicVectorExpression a, DynamicVectorExpression b)
1246
- {
1247
- return DynamicVectorExpression(make_shared<DynamicSumExpression>(a.Ptr(),b.Ptr()));
1248
- }
1249
-
1250
- inline auto operator- (DynamicVectorExpression a, DynamicVectorExpression b)
1251
- {
1252
- return DynamicVectorExpression(make_shared<DynamicSubExpression>(a.Ptr(),b.Ptr()));
1253
- }
1254
-
1255
- template <typename T>
1256
- inline auto operator* (T s, DynamicVectorExpression v)
1257
- {
1258
- return DynamicVectorExpression(make_shared<DynamicScaleExpression<T>>(s, v.Ptr()));
1259
- }
1260
-
1261
-
1262
-
1263
-
1264
-
1265
-
1266
- }
1267
-
1268
- #endif