ngsolve 6.2.2506.post75.dev0__cp314-cp314-manylinux_2_28_x86_64.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 (303) hide show
  1. ngsolve-6.2.2506.post75.dev0.data/data/bin/ngs_nvcc +14 -0
  2. ngsolve-6.2.2506.post75.dev0.data/data/bin/ngs_nvlink +14 -0
  3. ngsolve-6.2.2506.post75.dev0.data/data/bin/ngscxx +15 -0
  4. ngsolve-6.2.2506.post75.dev0.data/data/bin/ngsld +11 -0
  5. ngsolve-6.2.2506.post75.dev0.data/data/bin/ngsolve.tcl +648 -0
  6. ngsolve-6.2.2506.post75.dev0.data/data/bin/ngspy +2 -0
  7. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/analytic_integrals.hpp +10 -0
  8. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/arnoldi.hpp +55 -0
  9. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/bandmatrix.hpp +334 -0
  10. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/basematrix.hpp +957 -0
  11. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/basevector.hpp +1268 -0
  12. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/bdbequations.hpp +2805 -0
  13. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/bdbintegrator.hpp +1660 -0
  14. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/bem_diffops.hpp +475 -0
  15. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/bessel.hpp +1064 -0
  16. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/bilinearform.hpp +963 -0
  17. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/bla.hpp +29 -0
  18. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/blockalloc.hpp +95 -0
  19. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/blockjacobi.hpp +328 -0
  20. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/bspline.hpp +116 -0
  21. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/calcinverse.hpp +141 -0
  22. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/cg.hpp +368 -0
  23. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/chebyshev.hpp +44 -0
  24. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/cholesky.hpp +720 -0
  25. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/clapack.h +7254 -0
  26. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/code_generation.hpp +296 -0
  27. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/coefficient.hpp +2033 -0
  28. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/coefficient_impl.hpp +19 -0
  29. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/coefficient_stdmath.hpp +167 -0
  30. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/commutingAMG.hpp +106 -0
  31. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/comp.hpp +79 -0
  32. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/compatibility.hpp +41 -0
  33. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/complex_wrapper.hpp +73 -0
  34. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/compressedfespace.hpp +110 -0
  35. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/contact.hpp +235 -0
  36. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/cuda_linalg.hpp +175 -0
  37. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/cuda_ngbla.hpp +226 -0
  38. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/cuda_ngstd.hpp +527 -0
  39. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/cuda_profiler.hpp +240 -0
  40. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/diagonalmatrix.hpp +154 -0
  41. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/differentialoperator.hpp +276 -0
  42. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/diffop.hpp +1286 -0
  43. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/diffop_impl.hpp +328 -0
  44. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/diffopwithfactor.hpp +123 -0
  45. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/discontinuous.hpp +84 -0
  46. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/dump.hpp +949 -0
  47. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/ectypes.hpp +121 -0
  48. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/eigen.hpp +60 -0
  49. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/eigensystem.hpp +18 -0
  50. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/elasticity_equations.hpp +595 -0
  51. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/elementbyelement.hpp +195 -0
  52. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/elementtopology.hpp +1760 -0
  53. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/elementtransformation.hpp +339 -0
  54. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/evalfunc.hpp +405 -0
  55. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/expr.hpp +1686 -0
  56. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/facetfe.hpp +175 -0
  57. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/facetfespace.hpp +180 -0
  58. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/facethofe.hpp +111 -0
  59. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/facetsurffespace.hpp +112 -0
  60. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/fe_interfaces.hpp +32 -0
  61. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/fem.hpp +87 -0
  62. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/fesconvert.hpp +14 -0
  63. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/fespace.hpp +1449 -0
  64. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/finiteelement.hpp +286 -0
  65. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/globalinterfacespace.hpp +77 -0
  66. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/globalspace.hpp +115 -0
  67. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/gridfunction.hpp +525 -0
  68. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/h1amg.hpp +124 -0
  69. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/h1hofe.hpp +188 -0
  70. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/h1hofe_impl.hpp +1262 -0
  71. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/h1hofefo.hpp +148 -0
  72. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/h1hofefo_impl.hpp +185 -0
  73. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/h1hofespace.hpp +167 -0
  74. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/h1lofe.hpp +1240 -0
  75. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/h1lumping.hpp +41 -0
  76. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurl_equations.hpp +1381 -0
  77. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurlcurlfe.hpp +2241 -0
  78. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurlcurlfespace.hpp +78 -0
  79. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurlfe.hpp +259 -0
  80. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurlfe_utils.hpp +107 -0
  81. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurlhdiv_dshape.hpp +857 -0
  82. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurlhdivfes.hpp +308 -0
  83. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurlhofe.hpp +175 -0
  84. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurlhofe_impl.hpp +1871 -0
  85. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurlhofespace.hpp +193 -0
  86. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurllofe.hpp +1146 -0
  87. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdiv_equations.hpp +880 -0
  88. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivdivfe.hpp +2923 -0
  89. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivdivsurfacespace.hpp +76 -0
  90. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivfe.hpp +206 -0
  91. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivfe_utils.hpp +717 -0
  92. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivfes.hpp +75 -0
  93. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivhofe.hpp +447 -0
  94. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivhofe_impl.hpp +1107 -0
  95. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivhofefo.hpp +229 -0
  96. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivhofespace.hpp +177 -0
  97. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivhosurfacefespace.hpp +106 -0
  98. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivlofe.hpp +773 -0
  99. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hidden.hpp +74 -0
  100. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/householder.hpp +181 -0
  101. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hypre_ams_precond.hpp +123 -0
  102. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hypre_precond.hpp +73 -0
  103. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/integrator.hpp +2012 -0
  104. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/integratorcf.hpp +253 -0
  105. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/interpolate.hpp +49 -0
  106. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/intrule.hpp +2542 -0
  107. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/intrules_SauterSchwab.hpp +25 -0
  108. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/irspace.hpp +49 -0
  109. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/jacobi.hpp +153 -0
  110. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/kernels.hpp +762 -0
  111. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/l2hofe.hpp +194 -0
  112. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/l2hofe_impl.hpp +564 -0
  113. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/l2hofefo.hpp +542 -0
  114. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/l2hofespace.hpp +344 -0
  115. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/la.hpp +38 -0
  116. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/linalg_kernels.hpp +102 -0
  117. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/linearform.hpp +266 -0
  118. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/matrix.hpp +2140 -0
  119. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/memusage.hpp +41 -0
  120. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/meshaccess.hpp +1359 -0
  121. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/mgpre.hpp +204 -0
  122. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/mp_coefficient.hpp +145 -0
  123. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/mptools.hpp +2281 -0
  124. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/multigrid.hpp +42 -0
  125. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/multivector.hpp +447 -0
  126. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/mumpsinverse.hpp +187 -0
  127. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/mycomplex.hpp +361 -0
  128. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/ng_lapack.hpp +1661 -0
  129. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/ngblas.hpp +1232 -0
  130. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/ngs_defines.hpp +30 -0
  131. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/ngs_stdcpp_include.hpp +106 -0
  132. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/ngs_utils.hpp +121 -0
  133. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/ngsobject.hpp +1019 -0
  134. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/ngsstream.hpp +113 -0
  135. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/ngstd.hpp +72 -0
  136. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/nodalhofe.hpp +96 -0
  137. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/nodalhofe_impl.hpp +141 -0
  138. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/normalfacetfe.hpp +223 -0
  139. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/normalfacetfespace.hpp +98 -0
  140. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/normalfacetsurfacefespace.hpp +84 -0
  141. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/order.hpp +251 -0
  142. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/parallel_matrices.hpp +222 -0
  143. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/paralleldofs.hpp +340 -0
  144. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/parallelngs.hpp +23 -0
  145. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/parallelvector.hpp +269 -0
  146. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/pardisoinverse.hpp +200 -0
  147. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/periodic.hpp +129 -0
  148. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/plateaufespace.hpp +25 -0
  149. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/pml.hpp +275 -0
  150. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/pmltrafo.hpp +631 -0
  151. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/postproc.hpp +142 -0
  152. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/potentialtools.hpp +22 -0
  153. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/precomp.hpp +60 -0
  154. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/preconditioner.hpp +602 -0
  155. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/prolongation.hpp +377 -0
  156. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/python_comp.hpp +107 -0
  157. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/python_fem.hpp +89 -0
  158. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/python_linalg.hpp +58 -0
  159. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/python_ngstd.hpp +386 -0
  160. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/recursive_pol.hpp +4896 -0
  161. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/recursive_pol_tet.hpp +395 -0
  162. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/recursive_pol_trig.hpp +492 -0
  163. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/reorderedfespace.hpp +81 -0
  164. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/sample_sort.hpp +105 -0
  165. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/scalarfe.hpp +335 -0
  166. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/shapefunction_utils.hpp +113 -0
  167. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/simd_complex.hpp +329 -0
  168. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/smoother.hpp +253 -0
  169. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/solve.hpp +89 -0
  170. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/sparsecholesky.hpp +313 -0
  171. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/sparsematrix.hpp +1038 -0
  172. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/sparsematrix_dyn.hpp +90 -0
  173. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/sparsematrix_impl.hpp +1013 -0
  174. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/special_matrix.hpp +463 -0
  175. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/specialelement.hpp +125 -0
  176. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/statushandler.hpp +33 -0
  177. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/stringops.hpp +12 -0
  178. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/superluinverse.hpp +136 -0
  179. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/symbolicintegrator.hpp +850 -0
  180. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/symmetricmatrix.hpp +144 -0
  181. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tangentialfacetfe.hpp +224 -0
  182. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tangentialfacetfespace.hpp +91 -0
  183. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tensor.hpp +522 -0
  184. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tensorcoefficient.hpp +446 -0
  185. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tensorproductintegrator.hpp +113 -0
  186. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/thcurlfe.hpp +128 -0
  187. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/thcurlfe_impl.hpp +380 -0
  188. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/thdivfe.hpp +80 -0
  189. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/thdivfe_impl.hpp +492 -0
  190. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tpdiffop.hpp +461 -0
  191. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tpfes.hpp +133 -0
  192. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tpintrule.hpp +224 -0
  193. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/triangular.hpp +465 -0
  194. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tscalarfe.hpp +245 -0
  195. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tscalarfe_impl.hpp +1029 -0
  196. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/umfpackinverse.hpp +148 -0
  197. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/unifiedvector.hpp +103 -0
  198. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/vector.hpp +1273 -0
  199. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/voxelcoefficientfunction.hpp +41 -0
  200. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/vtkoutput.hpp +198 -0
  201. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/vvector.hpp +208 -0
  202. ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/webgui.hpp +92 -0
  203. ngsolve-6.2.2506.post75.dev0.data/data/lib/cmake/ngsolve/NGSolveConfig.cmake +102 -0
  204. ngsolve-6.2.2506.post75.dev0.data/data/lib/cmake/ngsolve/ngsolve-targets-release.cmake +89 -0
  205. ngsolve-6.2.2506.post75.dev0.data/data/lib/cmake/ngsolve/ngsolve-targets.cmake +173 -0
  206. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngbla.so +0 -0
  207. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngcomp.so +0 -0
  208. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngfem.so +0 -0
  209. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngla.so +0 -0
  210. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngsbem.so +0 -0
  211. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngscudalib.so +0 -0
  212. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngsolve.so +0 -0
  213. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngstd.so +0 -0
  214. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/TensorProductTools.py +210 -0
  215. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/__console.py +94 -0
  216. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/__expr.py +181 -0
  217. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/__init__.py +148 -0
  218. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/_scikit_build_core_dependencies.py +30 -0
  219. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/bvp.py +78 -0
  220. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/config/__init__.py +1 -0
  221. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/config/__main__.py +4 -0
  222. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/config/config.py +60 -0
  223. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/TensorProduct/__init__.py +0 -0
  224. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/TensorProduct/tp_dg_1d_1d.py +80 -0
  225. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/TensorProduct/tp_dg_1d_2d.py +73 -0
  226. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/TensorProduct/tp_dg_2d_1d.py +72 -0
  227. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/TensorProduct/tp_dg_2d_2d.py +66 -0
  228. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/__init__.py +0 -0
  229. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/__init__.py +0 -0
  230. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/hhj.py +44 -0
  231. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/hybrid_dg.py +53 -0
  232. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/mixed.py +30 -0
  233. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/nonlin.py +29 -0
  234. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/pickling.py +26 -0
  235. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/pml.py +31 -0
  236. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/taskmanager.py +20 -0
  237. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/tdnns.py +47 -0
  238. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/timeDG-skeleton.py +45 -0
  239. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/timeDG.py +38 -0
  240. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/timeDGlap.py +42 -0
  241. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/timeDGwave.py +61 -0
  242. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/__init__.py +0 -0
  243. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/adaptive.py +123 -0
  244. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/cmagnet.py +59 -0
  245. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/elasticity.py +76 -0
  246. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/navierstokes.py +74 -0
  247. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/poisson.ipynb +170 -0
  248. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/poisson.py +41 -0
  249. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/mpi/__init__.py +0 -0
  250. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/mpi/mpi_cmagnet.py +87 -0
  251. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/mpi/mpi_navierstokes.py +117 -0
  252. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/mpi/mpi_poisson.py +89 -0
  253. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/mpi/mpi_timeDG.py +82 -0
  254. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/directsolvers.py +26 -0
  255. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/eigenvalues.py +364 -0
  256. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/internal.py +89 -0
  257. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/krylovspace.py +1013 -0
  258. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/meshes.py +748 -0
  259. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/ngs2petsc.py +310 -0
  260. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/ngscuda.so +0 -0
  261. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/ngscxx.py +42 -0
  262. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/ngslib.so +0 -0
  263. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/nonlinearsolvers.py +203 -0
  264. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/preconditioners.py +11 -0
  265. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/solve_implementation.py +168 -0
  266. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/solvers.py +7 -0
  267. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/timestepping.py +185 -0
  268. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/timing.py +108 -0
  269. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/utils.py +167 -0
  270. ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/webgui.py +670 -0
  271. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/beam.geo +17 -0
  272. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/beam.vol +240 -0
  273. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/chip.in2d +41 -0
  274. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/chip.vol +614 -0
  275. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/coil.geo +12 -0
  276. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/coil.vol +2560 -0
  277. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/coilshield.geo +24 -0
  278. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/coilshield.vol +3179 -0
  279. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/cube.geo +19 -0
  280. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/cube.vol +1832 -0
  281. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d10_DGdoubleglazing.pde +50 -0
  282. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d11_chip_nitsche.pde +40 -0
  283. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d1_square.pde +43 -0
  284. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d2_chip.pde +35 -0
  285. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d3_helmholtz.pde +22 -0
  286. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d4_cube.pde +46 -0
  287. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d5_beam.pde +74 -0
  288. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d6_shaft.pde +73 -0
  289. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d7_coil.pde +50 -0
  290. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d8_coilshield.pde +49 -0
  291. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d9_hybridDG.pde +72 -0
  292. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/doubleglazing.in2d +27 -0
  293. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/doubleglazing.vol +737 -0
  294. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/piezo2d40round4.vol.gz +0 -0
  295. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/shaft.geo +73 -0
  296. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/shaft.vol +4291 -0
  297. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/square.in2d +17 -0
  298. ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/square.vol +149 -0
  299. ngsolve-6.2.2506.post75.dev0.dist-info/METADATA +14 -0
  300. ngsolve-6.2.2506.post75.dev0.dist-info/RECORD +303 -0
  301. ngsolve-6.2.2506.post75.dev0.dist-info/WHEEL +5 -0
  302. ngsolve-6.2.2506.post75.dev0.dist-info/licenses/LICENSE +504 -0
  303. ngsolve-6.2.2506.post75.dev0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,1268 @@
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