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.
- ngsolve-6.2.2506.post75.dev0.data/data/bin/ngs_nvcc +14 -0
- ngsolve-6.2.2506.post75.dev0.data/data/bin/ngs_nvlink +14 -0
- ngsolve-6.2.2506.post75.dev0.data/data/bin/ngscxx +15 -0
- ngsolve-6.2.2506.post75.dev0.data/data/bin/ngsld +11 -0
- ngsolve-6.2.2506.post75.dev0.data/data/bin/ngsolve.tcl +648 -0
- ngsolve-6.2.2506.post75.dev0.data/data/bin/ngspy +2 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/analytic_integrals.hpp +10 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/arnoldi.hpp +55 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/bandmatrix.hpp +334 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/basematrix.hpp +957 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/basevector.hpp +1268 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/bdbequations.hpp +2805 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/bdbintegrator.hpp +1660 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/bem_diffops.hpp +475 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/bessel.hpp +1064 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/bilinearform.hpp +963 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/bla.hpp +29 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/blockalloc.hpp +95 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/blockjacobi.hpp +328 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/bspline.hpp +116 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/calcinverse.hpp +141 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/cg.hpp +368 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/chebyshev.hpp +44 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/cholesky.hpp +720 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/clapack.h +7254 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/code_generation.hpp +296 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/coefficient.hpp +2033 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/coefficient_impl.hpp +19 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/coefficient_stdmath.hpp +167 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/commutingAMG.hpp +106 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/comp.hpp +79 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/compatibility.hpp +41 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/complex_wrapper.hpp +73 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/compressedfespace.hpp +110 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/contact.hpp +235 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/cuda_linalg.hpp +175 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/cuda_ngbla.hpp +226 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/cuda_ngstd.hpp +527 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/cuda_profiler.hpp +240 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/diagonalmatrix.hpp +154 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/differentialoperator.hpp +276 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/diffop.hpp +1286 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/diffop_impl.hpp +328 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/diffopwithfactor.hpp +123 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/discontinuous.hpp +84 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/dump.hpp +949 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/ectypes.hpp +121 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/eigen.hpp +60 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/eigensystem.hpp +18 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/elasticity_equations.hpp +595 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/elementbyelement.hpp +195 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/elementtopology.hpp +1760 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/elementtransformation.hpp +339 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/evalfunc.hpp +405 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/expr.hpp +1686 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/facetfe.hpp +175 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/facetfespace.hpp +180 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/facethofe.hpp +111 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/facetsurffespace.hpp +112 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/fe_interfaces.hpp +32 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/fem.hpp +87 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/fesconvert.hpp +14 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/fespace.hpp +1449 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/finiteelement.hpp +286 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/globalinterfacespace.hpp +77 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/globalspace.hpp +115 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/gridfunction.hpp +525 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/h1amg.hpp +124 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/h1hofe.hpp +188 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/h1hofe_impl.hpp +1262 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/h1hofefo.hpp +148 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/h1hofefo_impl.hpp +185 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/h1hofespace.hpp +167 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/h1lofe.hpp +1240 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/h1lumping.hpp +41 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurl_equations.hpp +1381 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurlcurlfe.hpp +2241 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurlcurlfespace.hpp +78 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurlfe.hpp +259 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurlfe_utils.hpp +107 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurlhdiv_dshape.hpp +857 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurlhdivfes.hpp +308 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurlhofe.hpp +175 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurlhofe_impl.hpp +1871 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurlhofespace.hpp +193 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hcurllofe.hpp +1146 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdiv_equations.hpp +880 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivdivfe.hpp +2923 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivdivsurfacespace.hpp +76 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivfe.hpp +206 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivfe_utils.hpp +717 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivfes.hpp +75 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivhofe.hpp +447 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivhofe_impl.hpp +1107 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivhofefo.hpp +229 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivhofespace.hpp +177 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivhosurfacefespace.hpp +106 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hdivlofe.hpp +773 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hidden.hpp +74 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/householder.hpp +181 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hypre_ams_precond.hpp +123 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/hypre_precond.hpp +73 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/integrator.hpp +2012 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/integratorcf.hpp +253 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/interpolate.hpp +49 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/intrule.hpp +2542 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/intrules_SauterSchwab.hpp +25 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/irspace.hpp +49 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/jacobi.hpp +153 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/kernels.hpp +762 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/l2hofe.hpp +194 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/l2hofe_impl.hpp +564 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/l2hofefo.hpp +542 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/l2hofespace.hpp +344 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/la.hpp +38 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/linalg_kernels.hpp +102 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/linearform.hpp +266 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/matrix.hpp +2140 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/memusage.hpp +41 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/meshaccess.hpp +1359 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/mgpre.hpp +204 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/mp_coefficient.hpp +145 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/mptools.hpp +2281 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/multigrid.hpp +42 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/multivector.hpp +447 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/mumpsinverse.hpp +187 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/mycomplex.hpp +361 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/ng_lapack.hpp +1661 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/ngblas.hpp +1232 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/ngs_defines.hpp +30 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/ngs_stdcpp_include.hpp +106 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/ngs_utils.hpp +121 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/ngsobject.hpp +1019 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/ngsstream.hpp +113 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/ngstd.hpp +72 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/nodalhofe.hpp +96 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/nodalhofe_impl.hpp +141 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/normalfacetfe.hpp +223 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/normalfacetfespace.hpp +98 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/normalfacetsurfacefespace.hpp +84 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/order.hpp +251 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/parallel_matrices.hpp +222 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/paralleldofs.hpp +340 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/parallelngs.hpp +23 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/parallelvector.hpp +269 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/pardisoinverse.hpp +200 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/periodic.hpp +129 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/plateaufespace.hpp +25 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/pml.hpp +275 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/pmltrafo.hpp +631 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/postproc.hpp +142 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/potentialtools.hpp +22 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/precomp.hpp +60 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/preconditioner.hpp +602 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/prolongation.hpp +377 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/python_comp.hpp +107 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/python_fem.hpp +89 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/python_linalg.hpp +58 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/python_ngstd.hpp +386 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/recursive_pol.hpp +4896 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/recursive_pol_tet.hpp +395 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/recursive_pol_trig.hpp +492 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/reorderedfespace.hpp +81 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/sample_sort.hpp +105 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/scalarfe.hpp +335 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/shapefunction_utils.hpp +113 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/simd_complex.hpp +329 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/smoother.hpp +253 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/solve.hpp +89 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/sparsecholesky.hpp +313 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/sparsematrix.hpp +1038 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/sparsematrix_dyn.hpp +90 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/sparsematrix_impl.hpp +1013 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/special_matrix.hpp +463 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/specialelement.hpp +125 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/statushandler.hpp +33 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/stringops.hpp +12 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/superluinverse.hpp +136 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/symbolicintegrator.hpp +850 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/symmetricmatrix.hpp +144 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tangentialfacetfe.hpp +224 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tangentialfacetfespace.hpp +91 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tensor.hpp +522 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tensorcoefficient.hpp +446 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tensorproductintegrator.hpp +113 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/thcurlfe.hpp +128 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/thcurlfe_impl.hpp +380 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/thdivfe.hpp +80 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/thdivfe_impl.hpp +492 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tpdiffop.hpp +461 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tpfes.hpp +133 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tpintrule.hpp +224 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/triangular.hpp +465 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tscalarfe.hpp +245 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/tscalarfe_impl.hpp +1029 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/umfpackinverse.hpp +148 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/unifiedvector.hpp +103 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/vector.hpp +1273 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/voxelcoefficientfunction.hpp +41 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/vtkoutput.hpp +198 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/vvector.hpp +208 -0
- ngsolve-6.2.2506.post75.dev0.data/data/include/netgen/webgui.hpp +92 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/cmake/ngsolve/NGSolveConfig.cmake +102 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/cmake/ngsolve/ngsolve-targets-release.cmake +89 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/cmake/ngsolve/ngsolve-targets.cmake +173 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngbla.so +0 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngcomp.so +0 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngfem.so +0 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngla.so +0 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngsbem.so +0 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngscudalib.so +0 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngsolve.so +0 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/netgen_mesher.libs/libngstd.so +0 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/TensorProductTools.py +210 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/__console.py +94 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/__expr.py +181 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/__init__.py +148 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/_scikit_build_core_dependencies.py +30 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/bvp.py +78 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/config/__init__.py +1 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/config/__main__.py +4 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/config/config.py +60 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/TensorProduct/__init__.py +0 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/TensorProduct/tp_dg_1d_1d.py +80 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/TensorProduct/tp_dg_1d_2d.py +73 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/TensorProduct/tp_dg_2d_1d.py +72 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/TensorProduct/tp_dg_2d_2d.py +66 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/__init__.py +0 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/__init__.py +0 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/hhj.py +44 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/hybrid_dg.py +53 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/mixed.py +30 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/nonlin.py +29 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/pickling.py +26 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/pml.py +31 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/taskmanager.py +20 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/tdnns.py +47 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/timeDG-skeleton.py +45 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/timeDG.py +38 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/timeDGlap.py +42 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/howto/timeDGwave.py +61 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/__init__.py +0 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/adaptive.py +123 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/cmagnet.py +59 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/elasticity.py +76 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/navierstokes.py +74 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/poisson.ipynb +170 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/intro/poisson.py +41 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/mpi/__init__.py +0 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/mpi/mpi_cmagnet.py +87 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/mpi/mpi_navierstokes.py +117 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/mpi/mpi_poisson.py +89 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/demos/mpi/mpi_timeDG.py +82 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/directsolvers.py +26 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/eigenvalues.py +364 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/internal.py +89 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/krylovspace.py +1013 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/meshes.py +748 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/ngs2petsc.py +310 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/ngscuda.so +0 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/ngscxx.py +42 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/ngslib.so +0 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/nonlinearsolvers.py +203 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/preconditioners.py +11 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/solve_implementation.py +168 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/solvers.py +7 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/timestepping.py +185 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/timing.py +108 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/utils.py +167 -0
- ngsolve-6.2.2506.post75.dev0.data/data/lib/python3.14/site-packages/ngsolve/webgui.py +670 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/beam.geo +17 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/beam.vol +240 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/chip.in2d +41 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/chip.vol +614 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/coil.geo +12 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/coil.vol +2560 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/coilshield.geo +24 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/coilshield.vol +3179 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/cube.geo +19 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/cube.vol +1832 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d10_DGdoubleglazing.pde +50 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d11_chip_nitsche.pde +40 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d1_square.pde +43 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d2_chip.pde +35 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d3_helmholtz.pde +22 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d4_cube.pde +46 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d5_beam.pde +74 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d6_shaft.pde +73 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d7_coil.pde +50 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d8_coilshield.pde +49 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/d9_hybridDG.pde +72 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/doubleglazing.in2d +27 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/doubleglazing.vol +737 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/piezo2d40round4.vol.gz +0 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/shaft.geo +73 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/shaft.vol +4291 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/square.in2d +17 -0
- ngsolve-6.2.2506.post75.dev0.data/data/share/ngsolve/square.vol +149 -0
- ngsolve-6.2.2506.post75.dev0.dist-info/METADATA +14 -0
- ngsolve-6.2.2506.post75.dev0.dist-info/RECORD +303 -0
- ngsolve-6.2.2506.post75.dev0.dist-info/WHEEL +5 -0
- ngsolve-6.2.2506.post75.dev0.dist-info/licenses/LICENSE +504 -0
- 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
|