ngsolve 6.2.2506.post74.dev0__cp314-cp314-macosx_10_15_universal2.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of ngsolve might be problematic. Click here for more details.
- netgen/include/analytic_integrals.hpp +10 -0
- netgen/include/arnoldi.hpp +55 -0
- netgen/include/bandmatrix.hpp +334 -0
- netgen/include/basematrix.hpp +957 -0
- netgen/include/basevector.hpp +1268 -0
- netgen/include/bdbequations.hpp +2805 -0
- netgen/include/bdbintegrator.hpp +1660 -0
- netgen/include/bem_diffops.hpp +475 -0
- netgen/include/bessel.hpp +1064 -0
- netgen/include/bilinearform.hpp +963 -0
- netgen/include/bla.hpp +29 -0
- netgen/include/blockalloc.hpp +95 -0
- netgen/include/blockjacobi.hpp +328 -0
- netgen/include/bspline.hpp +116 -0
- netgen/include/calcinverse.hpp +141 -0
- netgen/include/cg.hpp +368 -0
- netgen/include/chebyshev.hpp +44 -0
- netgen/include/cholesky.hpp +720 -0
- netgen/include/clapack.h +7254 -0
- netgen/include/code_generation.hpp +296 -0
- netgen/include/coefficient.hpp +2033 -0
- netgen/include/coefficient_impl.hpp +19 -0
- netgen/include/coefficient_stdmath.hpp +167 -0
- netgen/include/commutingAMG.hpp +106 -0
- netgen/include/comp.hpp +79 -0
- netgen/include/compatibility.hpp +41 -0
- netgen/include/complex_wrapper.hpp +73 -0
- netgen/include/compressedfespace.hpp +110 -0
- netgen/include/contact.hpp +235 -0
- netgen/include/diagonalmatrix.hpp +154 -0
- netgen/include/differentialoperator.hpp +276 -0
- netgen/include/diffop.hpp +1286 -0
- netgen/include/diffop_impl.hpp +328 -0
- netgen/include/diffopwithfactor.hpp +123 -0
- netgen/include/discontinuous.hpp +84 -0
- netgen/include/dump.hpp +949 -0
- netgen/include/ectypes.hpp +121 -0
- netgen/include/eigen.hpp +60 -0
- netgen/include/eigensystem.hpp +18 -0
- netgen/include/elasticity_equations.hpp +595 -0
- netgen/include/elementbyelement.hpp +195 -0
- netgen/include/elementtopology.hpp +1760 -0
- netgen/include/elementtransformation.hpp +339 -0
- netgen/include/evalfunc.hpp +405 -0
- netgen/include/expr.hpp +1686 -0
- netgen/include/facetfe.hpp +175 -0
- netgen/include/facetfespace.hpp +180 -0
- netgen/include/facethofe.hpp +111 -0
- netgen/include/facetsurffespace.hpp +112 -0
- netgen/include/fe_interfaces.hpp +32 -0
- netgen/include/fem.hpp +87 -0
- netgen/include/fesconvert.hpp +14 -0
- netgen/include/fespace.hpp +1449 -0
- netgen/include/finiteelement.hpp +286 -0
- netgen/include/globalinterfacespace.hpp +77 -0
- netgen/include/globalspace.hpp +115 -0
- netgen/include/gridfunction.hpp +525 -0
- netgen/include/h1amg.hpp +124 -0
- netgen/include/h1hofe.hpp +188 -0
- netgen/include/h1hofe_impl.hpp +1262 -0
- netgen/include/h1hofefo.hpp +148 -0
- netgen/include/h1hofefo_impl.hpp +185 -0
- netgen/include/h1hofespace.hpp +167 -0
- netgen/include/h1lofe.hpp +1240 -0
- netgen/include/h1lumping.hpp +41 -0
- netgen/include/hcurl_equations.hpp +1381 -0
- netgen/include/hcurlcurlfe.hpp +2241 -0
- netgen/include/hcurlcurlfespace.hpp +78 -0
- netgen/include/hcurlfe.hpp +259 -0
- netgen/include/hcurlfe_utils.hpp +107 -0
- netgen/include/hcurlhdiv_dshape.hpp +857 -0
- netgen/include/hcurlhdivfes.hpp +308 -0
- netgen/include/hcurlhofe.hpp +175 -0
- netgen/include/hcurlhofe_impl.hpp +1871 -0
- netgen/include/hcurlhofespace.hpp +193 -0
- netgen/include/hcurllofe.hpp +1146 -0
- netgen/include/hdiv_equations.hpp +880 -0
- netgen/include/hdivdivfe.hpp +2923 -0
- netgen/include/hdivdivsurfacespace.hpp +76 -0
- netgen/include/hdivfe.hpp +206 -0
- netgen/include/hdivfe_utils.hpp +717 -0
- netgen/include/hdivfes.hpp +75 -0
- netgen/include/hdivhofe.hpp +447 -0
- netgen/include/hdivhofe_impl.hpp +1107 -0
- netgen/include/hdivhofefo.hpp +229 -0
- netgen/include/hdivhofespace.hpp +177 -0
- netgen/include/hdivhosurfacefespace.hpp +106 -0
- netgen/include/hdivlofe.hpp +773 -0
- netgen/include/hidden.hpp +74 -0
- netgen/include/householder.hpp +181 -0
- netgen/include/hypre_ams_precond.hpp +123 -0
- netgen/include/hypre_precond.hpp +73 -0
- netgen/include/integrator.hpp +2012 -0
- netgen/include/integratorcf.hpp +253 -0
- netgen/include/interpolate.hpp +49 -0
- netgen/include/intrule.hpp +2542 -0
- netgen/include/intrules_SauterSchwab.hpp +25 -0
- netgen/include/irspace.hpp +49 -0
- netgen/include/jacobi.hpp +153 -0
- netgen/include/kernels.hpp +762 -0
- netgen/include/l2hofe.hpp +194 -0
- netgen/include/l2hofe_impl.hpp +564 -0
- netgen/include/l2hofefo.hpp +542 -0
- netgen/include/l2hofespace.hpp +344 -0
- netgen/include/la.hpp +38 -0
- netgen/include/linearform.hpp +266 -0
- netgen/include/matrix.hpp +2140 -0
- netgen/include/memusage.hpp +41 -0
- netgen/include/meshaccess.hpp +1359 -0
- netgen/include/mgpre.hpp +204 -0
- netgen/include/mp_coefficient.hpp +145 -0
- netgen/include/mptools.hpp +2281 -0
- netgen/include/multigrid.hpp +42 -0
- netgen/include/multivector.hpp +447 -0
- netgen/include/mumpsinverse.hpp +187 -0
- netgen/include/mycomplex.hpp +361 -0
- netgen/include/ng_lapack.hpp +1661 -0
- netgen/include/ngblas.hpp +1232 -0
- netgen/include/ngs_defines.hpp +30 -0
- netgen/include/ngs_stdcpp_include.hpp +106 -0
- netgen/include/ngs_utils.hpp +121 -0
- netgen/include/ngsobject.hpp +1019 -0
- netgen/include/ngsstream.hpp +113 -0
- netgen/include/ngstd.hpp +72 -0
- netgen/include/nodalhofe.hpp +96 -0
- netgen/include/nodalhofe_impl.hpp +141 -0
- netgen/include/normalfacetfe.hpp +223 -0
- netgen/include/normalfacetfespace.hpp +98 -0
- netgen/include/normalfacetsurfacefespace.hpp +84 -0
- netgen/include/order.hpp +251 -0
- netgen/include/parallel_matrices.hpp +222 -0
- netgen/include/paralleldofs.hpp +340 -0
- netgen/include/parallelngs.hpp +23 -0
- netgen/include/parallelvector.hpp +269 -0
- netgen/include/pardisoinverse.hpp +200 -0
- netgen/include/periodic.hpp +129 -0
- netgen/include/plateaufespace.hpp +25 -0
- netgen/include/pml.hpp +275 -0
- netgen/include/pmltrafo.hpp +631 -0
- netgen/include/postproc.hpp +142 -0
- netgen/include/potentialtools.hpp +22 -0
- netgen/include/precomp.hpp +60 -0
- netgen/include/preconditioner.hpp +602 -0
- netgen/include/prolongation.hpp +377 -0
- netgen/include/python_comp.hpp +107 -0
- netgen/include/python_fem.hpp +89 -0
- netgen/include/python_linalg.hpp +58 -0
- netgen/include/python_ngstd.hpp +386 -0
- netgen/include/recursive_pol.hpp +4896 -0
- netgen/include/recursive_pol_tet.hpp +395 -0
- netgen/include/recursive_pol_trig.hpp +492 -0
- netgen/include/reorderedfespace.hpp +81 -0
- netgen/include/sample_sort.hpp +105 -0
- netgen/include/scalarfe.hpp +335 -0
- netgen/include/shapefunction_utils.hpp +113 -0
- netgen/include/simd_complex.hpp +329 -0
- netgen/include/smoother.hpp +253 -0
- netgen/include/solve.hpp +89 -0
- netgen/include/sparsecholesky.hpp +313 -0
- netgen/include/sparsematrix.hpp +1038 -0
- netgen/include/sparsematrix_dyn.hpp +90 -0
- netgen/include/sparsematrix_impl.hpp +1013 -0
- netgen/include/special_matrix.hpp +463 -0
- netgen/include/specialelement.hpp +125 -0
- netgen/include/statushandler.hpp +33 -0
- netgen/include/stringops.hpp +12 -0
- netgen/include/superluinverse.hpp +136 -0
- netgen/include/symbolicintegrator.hpp +850 -0
- netgen/include/symmetricmatrix.hpp +144 -0
- netgen/include/tangentialfacetfe.hpp +224 -0
- netgen/include/tangentialfacetfespace.hpp +91 -0
- netgen/include/tensor.hpp +522 -0
- netgen/include/tensorcoefficient.hpp +446 -0
- netgen/include/tensorproductintegrator.hpp +113 -0
- netgen/include/thcurlfe.hpp +128 -0
- netgen/include/thcurlfe_impl.hpp +380 -0
- netgen/include/thdivfe.hpp +80 -0
- netgen/include/thdivfe_impl.hpp +492 -0
- netgen/include/tpdiffop.hpp +461 -0
- netgen/include/tpfes.hpp +133 -0
- netgen/include/tpintrule.hpp +224 -0
- netgen/include/triangular.hpp +465 -0
- netgen/include/tscalarfe.hpp +245 -0
- netgen/include/tscalarfe_impl.hpp +1029 -0
- netgen/include/umfpackinverse.hpp +148 -0
- netgen/include/vector.hpp +1273 -0
- netgen/include/voxelcoefficientfunction.hpp +41 -0
- netgen/include/vtkoutput.hpp +198 -0
- netgen/include/vvector.hpp +208 -0
- netgen/include/webgui.hpp +92 -0
- netgen/libngbla.dylib +0 -0
- netgen/libngcomp.dylib +0 -0
- netgen/libngfem.dylib +0 -0
- netgen/libngla.dylib +0 -0
- netgen/libngsbem.dylib +0 -0
- netgen/libngsolve.dylib +0 -0
- netgen/libngstd.dylib +0 -0
- ngsolve/TensorProductTools.py +210 -0
- ngsolve/__console.py +94 -0
- ngsolve/__expr.py +181 -0
- ngsolve/__init__.py +148 -0
- ngsolve/__init__.pyi +233 -0
- ngsolve/_scikit_build_core_dependencies.py +30 -0
- ngsolve/bla.pyi +1153 -0
- ngsolve/bvp.py +78 -0
- ngsolve/bvp.pyi +32 -0
- ngsolve/cmake/NGSolveConfig.cmake +102 -0
- ngsolve/cmake/ngsolve-targets-release.cmake +79 -0
- ngsolve/cmake/ngsolve-targets.cmake +163 -0
- ngsolve/comp/__init__.pyi +5449 -0
- ngsolve/comp/pml.pyi +89 -0
- ngsolve/config/__init__.py +1 -0
- ngsolve/config/__init__.pyi +43 -0
- ngsolve/config/__main__.py +4 -0
- ngsolve/config/config.py +60 -0
- ngsolve/config/config.pyi +45 -0
- ngsolve/demos/TensorProduct/__init__.py +0 -0
- ngsolve/demos/TensorProduct/tp_dg_1d_1d.py +80 -0
- ngsolve/demos/TensorProduct/tp_dg_1d_2d.py +73 -0
- ngsolve/demos/TensorProduct/tp_dg_2d_1d.py +72 -0
- ngsolve/demos/TensorProduct/tp_dg_2d_2d.py +66 -0
- ngsolve/demos/__init__.py +0 -0
- ngsolve/demos/howto/__init__.py +0 -0
- ngsolve/demos/howto/hhj.py +44 -0
- ngsolve/demos/howto/hybrid_dg.py +53 -0
- ngsolve/demos/howto/mixed.py +30 -0
- ngsolve/demos/howto/nonlin.py +29 -0
- ngsolve/demos/howto/pickling.py +26 -0
- ngsolve/demos/howto/pml.py +31 -0
- ngsolve/demos/howto/taskmanager.py +20 -0
- ngsolve/demos/howto/tdnns.py +47 -0
- ngsolve/demos/howto/timeDG-skeleton.py +45 -0
- ngsolve/demos/howto/timeDG.py +38 -0
- ngsolve/demos/howto/timeDGlap.py +42 -0
- ngsolve/demos/howto/timeDGwave.py +61 -0
- ngsolve/demos/intro/__init__.py +0 -0
- ngsolve/demos/intro/adaptive.py +123 -0
- ngsolve/demos/intro/cmagnet.py +59 -0
- ngsolve/demos/intro/elasticity.py +76 -0
- ngsolve/demos/intro/navierstokes.py +74 -0
- ngsolve/demos/intro/poisson.ipynb +170 -0
- ngsolve/demos/intro/poisson.py +41 -0
- ngsolve/demos/mpi/__init__.py +0 -0
- ngsolve/demos/mpi/mpi_cmagnet.py +87 -0
- ngsolve/demos/mpi/mpi_navierstokes.py +117 -0
- ngsolve/demos/mpi/mpi_poisson.py +89 -0
- ngsolve/demos/mpi/mpi_timeDG.py +82 -0
- ngsolve/directsolvers.py +26 -0
- ngsolve/directsolvers.pyi +15 -0
- ngsolve/eigenvalues.py +364 -0
- ngsolve/eigenvalues.pyi +30 -0
- ngsolve/fem.pyi +1647 -0
- ngsolve/internal.py +89 -0
- ngsolve/krylovspace.py +1013 -0
- ngsolve/krylovspace.pyi +298 -0
- ngsolve/la.pyi +1230 -0
- ngsolve/meshes.py +748 -0
- ngsolve/ngs2petsc.py +310 -0
- ngsolve/ngscxx.py +42 -0
- ngsolve/ngslib.so +0 -0
- ngsolve/ngstd.pyi +59 -0
- ngsolve/nonlinearsolvers.py +203 -0
- ngsolve/nonlinearsolvers.pyi +95 -0
- ngsolve/preconditioners.py +11 -0
- ngsolve/preconditioners.pyi +7 -0
- ngsolve/solve.pyi +109 -0
- ngsolve/solve_implementation.py +168 -0
- ngsolve/solve_implementation.pyi +42 -0
- ngsolve/solvers.py +7 -0
- ngsolve/solvers.pyi +14 -0
- ngsolve/timestepping.py +185 -0
- ngsolve/timestepping.pyi +28 -0
- ngsolve/timing.py +108 -0
- ngsolve/timing.pyi +54 -0
- ngsolve/utils.py +167 -0
- ngsolve/utils.pyi +273 -0
- ngsolve/webgui.py +670 -0
- ngsolve-6.2.2506.post74.dev0.data/data/Netgen.icns +0 -0
- ngsolve-6.2.2506.post74.dev0.data/data/bin/ngscxx +17 -0
- ngsolve-6.2.2506.post74.dev0.data/data/bin/ngsld +13 -0
- ngsolve-6.2.2506.post74.dev0.data/data/bin/ngsolve.tcl +648 -0
- ngsolve-6.2.2506.post74.dev0.data/data/bin/ngspy +2 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/beam.geo +17 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/beam.vol +240 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/chip.in2d +41 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/chip.vol +614 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/coil.geo +12 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/coil.vol +2560 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/coilshield.geo +24 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/coilshield.vol +3179 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/cube.geo +19 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/cube.vol +1832 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d10_DGdoubleglazing.pde +50 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d11_chip_nitsche.pde +40 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d1_square.pde +43 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d2_chip.pde +35 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d3_helmholtz.pde +22 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d4_cube.pde +46 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d5_beam.pde +74 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d6_shaft.pde +73 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d7_coil.pde +50 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d8_coilshield.pde +49 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d9_hybridDG.pde +72 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/doubleglazing.in2d +27 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/doubleglazing.vol +737 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/piezo2d40round4.vol.gz +0 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/shaft.geo +73 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/shaft.vol +4291 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/square.in2d +17 -0
- ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/square.vol +149 -0
- ngsolve-6.2.2506.post74.dev0.dist-info/METADATA +13 -0
- ngsolve-6.2.2506.post74.dev0.dist-info/RECORD +315 -0
- ngsolve-6.2.2506.post74.dev0.dist-info/WHEEL +5 -0
- ngsolve-6.2.2506.post74.dev0.dist-info/licenses/LICENSE +504 -0
- ngsolve-6.2.2506.post74.dev0.dist-info/top_level.txt +2 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
#ifndef FILE_ARNOLDI
|
|
2
|
+
#define FILE_ARNOLDI
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
/**************************************************************************/
|
|
6
|
+
/* File: arnoldi.hpp */
|
|
7
|
+
/* Author: Joachim Schoeberl */
|
|
8
|
+
/* Date: 5. Jul. 96 */
|
|
9
|
+
/**************************************************************************/
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
#include "basematrix.hpp"
|
|
13
|
+
|
|
14
|
+
namespace ngla
|
|
15
|
+
{
|
|
16
|
+
/**
|
|
17
|
+
Arnoldi Eigenvalue Solver.
|
|
18
|
+
|
|
19
|
+
Solve the generalized evp
|
|
20
|
+
|
|
21
|
+
A x = lam B x
|
|
22
|
+
|
|
23
|
+
B must by symmetric and (in theory) positive definite
|
|
24
|
+
A can be non-symmetric
|
|
25
|
+
|
|
26
|
+
It uses a shift-and-invert Arnoldi method
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
template <typename SCAL>
|
|
30
|
+
class NGS_DLL_HEADER Arnoldi
|
|
31
|
+
{
|
|
32
|
+
shared_ptr<BaseMatrix> a;
|
|
33
|
+
shared_ptr<BaseMatrix> b;
|
|
34
|
+
shared_ptr<BitArray> freedofs;
|
|
35
|
+
SCAL shift;
|
|
36
|
+
optional<string> inversetype;
|
|
37
|
+
public:
|
|
38
|
+
Arnoldi (shared_ptr<BaseMatrix> aa, shared_ptr<BaseMatrix> ab, shared_ptr<BitArray> afreedofs = nullptr)
|
|
39
|
+
: a(aa), b(ab), freedofs(afreedofs)
|
|
40
|
+
{
|
|
41
|
+
shift = 1.0;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
void SetShift (SCAL ashift)
|
|
45
|
+
{ shift = ashift; }
|
|
46
|
+
void SetInverseType (optional<string> ainv)
|
|
47
|
+
{ inversetype = ainv; }
|
|
48
|
+
|
|
49
|
+
void Calc (int numval, Array<Complex> & lam, int nev,
|
|
50
|
+
Array<shared_ptr<BaseVector>> & evecs,
|
|
51
|
+
shared_ptr<BaseMatrix> pre = nullptr) const;
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
#endif
|
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
#ifndef FILE_BANDMATRIX
|
|
2
|
+
#define FILE_BANDMATRIX
|
|
3
|
+
|
|
4
|
+
/****************************************************************************/
|
|
5
|
+
/* File: bandmatrix.hpp */
|
|
6
|
+
/* Author: Joachim Schoeberl */
|
|
7
|
+
/* Date: 14. Aug. 2002 */
|
|
8
|
+
/****************************************************************************/
|
|
9
|
+
|
|
10
|
+
namespace ngbla
|
|
11
|
+
{
|
|
12
|
+
|
|
13
|
+
/**
|
|
14
|
+
A symmetric band-matrix.
|
|
15
|
+
*/
|
|
16
|
+
template <class T = double>
|
|
17
|
+
class FlatSymBandMatrix
|
|
18
|
+
{
|
|
19
|
+
protected:
|
|
20
|
+
/// the matrix size
|
|
21
|
+
int n;
|
|
22
|
+
/// number of bands in the triangular matrix
|
|
23
|
+
int bw;
|
|
24
|
+
/// the matrix entries
|
|
25
|
+
T *data;
|
|
26
|
+
public:
|
|
27
|
+
/// the according vector type
|
|
28
|
+
typedef typename mat_traits<T>::TV_COL TV;
|
|
29
|
+
|
|
30
|
+
/// Construction of FlatSymBandMatirx
|
|
31
|
+
FlatSymBandMatrix (int an, int abw, T * adata)
|
|
32
|
+
: n(an), bw(abw), data(adata)
|
|
33
|
+
{ ; }
|
|
34
|
+
|
|
35
|
+
/// Matrix vector multiplication
|
|
36
|
+
void Mult (const FlatVector<TV> & x, FlatVector<TV> & y) const
|
|
37
|
+
{
|
|
38
|
+
for (int i = 0; i < n; i++)
|
|
39
|
+
y(i) = (*this)(i,i) * x(i);
|
|
40
|
+
for (int i = 0; i < n; i++)
|
|
41
|
+
for (int j = max2(i-bw+1, 0); j < i; j++)
|
|
42
|
+
{
|
|
43
|
+
y(i) += (*this)(i,j) * x(j);
|
|
44
|
+
y(j) += Trans((*this)(i,j)) * x(i);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/// Print matrix to stream
|
|
49
|
+
ostream & Print (ostream & ost) const
|
|
50
|
+
{
|
|
51
|
+
for (int i = 0; i < n; i++)
|
|
52
|
+
{
|
|
53
|
+
for (int j = 0; j < n; j++)
|
|
54
|
+
if (Used (i, j))
|
|
55
|
+
ost << setw(8) << (*this)(i,j) << " ";
|
|
56
|
+
else if (Used (j,i))
|
|
57
|
+
ost << setw(8) << "sym" << " ";
|
|
58
|
+
else
|
|
59
|
+
ost << setw(8) << 0;
|
|
60
|
+
ost << endl;
|
|
61
|
+
}
|
|
62
|
+
return ost;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/// matrix height
|
|
66
|
+
int Height() const { return n; }
|
|
67
|
+
|
|
68
|
+
/// matrix width
|
|
69
|
+
int BandWidth() const { return bw; }
|
|
70
|
+
|
|
71
|
+
/// access operator. Assumes that $i \geq j$ referes to an element in the band
|
|
72
|
+
const T & operator() (int i, int j) const
|
|
73
|
+
{ return data[i * bw + j - i + bw-1]; }
|
|
74
|
+
|
|
75
|
+
/// access operator. Assumes that $i \geq j$ referes to an element in the band
|
|
76
|
+
T & operator() (int i, int j)
|
|
77
|
+
{ return data[i * bw + j - i + bw-1]; }
|
|
78
|
+
|
|
79
|
+
/// check whether i, j refers to a valid element
|
|
80
|
+
bool Used (int i, int j) const
|
|
81
|
+
{
|
|
82
|
+
return (n > i && i >= j && j >= 0 && i-j < bw);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/// assigns a constant value
|
|
86
|
+
FlatSymBandMatrix & operator= (const T & val)
|
|
87
|
+
{
|
|
88
|
+
for (int i = 0; i < bw * n; i++)
|
|
89
|
+
data[i] = val;
|
|
90
|
+
return *this;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
/// computes required memory
|
|
95
|
+
static int RequiredMem (int n, int bw)
|
|
96
|
+
{ return n*bw; }
|
|
97
|
+
};
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
/// output operator
|
|
102
|
+
template<typename T>
|
|
103
|
+
inline std::ostream & operator<< (std::ostream & s, const FlatSymBandMatrix<T> & m)
|
|
104
|
+
{
|
|
105
|
+
m.Print (s);
|
|
106
|
+
return s;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
A symmetric band-matrix with memory management.
|
|
114
|
+
*/
|
|
115
|
+
template <class T = double>
|
|
116
|
+
class SymBandMatrix : public FlatSymBandMatrix<T>
|
|
117
|
+
{
|
|
118
|
+
public:
|
|
119
|
+
typedef typename mat_traits<T>::TV_COL TV;
|
|
120
|
+
|
|
121
|
+
/// Generates a symmetric band matrix
|
|
122
|
+
SymBandMatrix (int an, int abw)
|
|
123
|
+
: FlatSymBandMatrix<T> (an, abw, new T[an*abw])
|
|
124
|
+
{ ; }
|
|
125
|
+
|
|
126
|
+
/// Deletes matrix
|
|
127
|
+
~SymBandMatrix ()
|
|
128
|
+
{ delete [] this->data; }
|
|
129
|
+
|
|
130
|
+
/// assigns a constant value
|
|
131
|
+
SymBandMatrix & operator= (const T & val)
|
|
132
|
+
{
|
|
133
|
+
for (int i = 0; i < this->bw * this->n; i++)
|
|
134
|
+
this->data[i] = val;
|
|
135
|
+
return *this;
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
Cholesky factors of a band matrix.
|
|
153
|
+
This class does not provide memory management.
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
storage:
|
|
157
|
+
|
|
158
|
+
lfact (bw = 3)
|
|
159
|
+
|
|
160
|
+
\begin{verbatim}
|
|
161
|
+
d0
|
|
162
|
+
0 d1
|
|
163
|
+
1 2 d2
|
|
164
|
+
3 4 d3
|
|
165
|
+
\end{verbatim}
|
|
166
|
+
*/
|
|
167
|
+
template <class T = double>
|
|
168
|
+
class FlatBandCholeskyFactors
|
|
169
|
+
{
|
|
170
|
+
protected:
|
|
171
|
+
/// matrix dimension
|
|
172
|
+
int n;
|
|
173
|
+
/// number of bands in the triangular matrix
|
|
174
|
+
int bw;
|
|
175
|
+
/// matrix matrix data, first diags, than lfact
|
|
176
|
+
T * mem;
|
|
177
|
+
public:
|
|
178
|
+
// typedef typename mat_traits<T>::TV_COL TV;
|
|
179
|
+
typedef typename mat_traits<T>::TSCAL TSCAL;
|
|
180
|
+
|
|
181
|
+
/// assign dimension, bandwidth and memory
|
|
182
|
+
FlatBandCholeskyFactors (int an, int abw, T * amem)
|
|
183
|
+
{ n = an, bw = abw, mem = amem; }
|
|
184
|
+
|
|
185
|
+
/// default constructor
|
|
186
|
+
FlatBandCholeskyFactors ()
|
|
187
|
+
{ n = bw = 0; mem = 0; }
|
|
188
|
+
|
|
189
|
+
/// factor bandmatrix a
|
|
190
|
+
NGS_DLL_HEADER void Factor (const FlatSymBandMatrix<T> & a);
|
|
191
|
+
|
|
192
|
+
/// solve with factored matrices
|
|
193
|
+
template <class TVX, class TVY>
|
|
194
|
+
void Mult (const FlatVector<TVX> & x, FlatVector<TVY> & y) const
|
|
195
|
+
{
|
|
196
|
+
// const TVX * hx = x.Addr(0);
|
|
197
|
+
// TVY * hy = y.Addr(0);
|
|
198
|
+
FlatVector<TVX> hx = x;
|
|
199
|
+
FlatVector<TVY> hy = y;
|
|
200
|
+
const T * hm = &mem[0];
|
|
201
|
+
|
|
202
|
+
for (int i = 0; i < n; i++)
|
|
203
|
+
hy[i] = hx[i];
|
|
204
|
+
|
|
205
|
+
int i, jj = n;
|
|
206
|
+
for (i = 0; i < bw-1; i++)
|
|
207
|
+
{
|
|
208
|
+
typedef typename mat_traits<TVY>::TSCAL TTSCAL;
|
|
209
|
+
TVY sum = TTSCAL(0.0);
|
|
210
|
+
|
|
211
|
+
for (int j = 0; j < i; j++, jj++)
|
|
212
|
+
sum += hm[jj] * hy[j];
|
|
213
|
+
|
|
214
|
+
hy[i] -= sum;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
for ( ; i < n; i++)
|
|
218
|
+
{
|
|
219
|
+
typedef typename mat_traits<TVY>::TSCAL TTSCAL;
|
|
220
|
+
TVY sum = TTSCAL(0.0);
|
|
221
|
+
|
|
222
|
+
for (int j = i-bw+1; j < i; j++, jj++)
|
|
223
|
+
sum += hm[jj] * hy[j];
|
|
224
|
+
|
|
225
|
+
hy[i] -= sum;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
for (int i = 0; i < n; i++)
|
|
229
|
+
{
|
|
230
|
+
TVY sum = mem[i] * hy[i];
|
|
231
|
+
hy[i] = sum;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
// jj = n + (n-1) * (bw-1) - bw*(bw-1)/2;
|
|
235
|
+
for (i = n-1; i >= bw-1; i--)
|
|
236
|
+
{
|
|
237
|
+
jj -= bw-1;
|
|
238
|
+
TVY val = hy[i];
|
|
239
|
+
|
|
240
|
+
int firstj = i-bw+1;
|
|
241
|
+
for (int j = 0; j < bw-1; j++)
|
|
242
|
+
hy[firstj+j] -= Trans (mem[jj+j]) * val;
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
for ( ; i >= 0; i--)
|
|
246
|
+
{
|
|
247
|
+
jj -= i;
|
|
248
|
+
TVY val = hy[i];
|
|
249
|
+
|
|
250
|
+
for (int j = 0; j < i; j++)
|
|
251
|
+
hy[j] -= Trans (mem[jj+j]) * val;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
/// print matrix factors
|
|
258
|
+
ostream & Print (ostream & ost) const;
|
|
259
|
+
|
|
260
|
+
/// compute linear position of matrix element (i,j)
|
|
261
|
+
int Index (int i, int j) const
|
|
262
|
+
{
|
|
263
|
+
if (i < bw)
|
|
264
|
+
return n + (i * (i-1)) / 2 + j;
|
|
265
|
+
else
|
|
266
|
+
return n + i * (bw-2) + j - ((bw-1)*(bw-2))/2;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
/// matrix element (i,j), (i,j) must be a valid position
|
|
270
|
+
const T & operator() (int i, int j) const
|
|
271
|
+
{
|
|
272
|
+
if (i < bw)
|
|
273
|
+
return mem[n + (i * (i-1)) / 2 + j];
|
|
274
|
+
else
|
|
275
|
+
return mem[n + i * (bw-2) + j - ((bw-1)*(bw-2))/2];
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
/// matrix element (i,j), (i,j) must be a valid position
|
|
279
|
+
T & operator() (int i, int j)
|
|
280
|
+
{
|
|
281
|
+
if (i < bw)
|
|
282
|
+
return mem[n + (i * (i-1)) / 2 + j];
|
|
283
|
+
else
|
|
284
|
+
return mem[n + i * (bw-2) + j - ((bw-1)*(bw-2))/2];
|
|
285
|
+
}
|
|
286
|
+
|
|
287
|
+
/// matrix size
|
|
288
|
+
int Size() const { return n; }
|
|
289
|
+
/// band-width of triangular matrix
|
|
290
|
+
int BandWidth() const { return bw; }
|
|
291
|
+
/// computes required memory
|
|
292
|
+
static int RequiredMem (int n, int bw)
|
|
293
|
+
{ return n*bw - (bw * (bw-1)) / 2 + n; }
|
|
294
|
+
};
|
|
295
|
+
|
|
296
|
+
|
|
297
|
+
/// output operator.
|
|
298
|
+
template<typename T>
|
|
299
|
+
inline std::ostream & operator<< (std::ostream & s, const FlatBandCholeskyFactors<T> & m)
|
|
300
|
+
{
|
|
301
|
+
m.Print (s);
|
|
302
|
+
return s;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
|
|
306
|
+
|
|
307
|
+
|
|
308
|
+
|
|
309
|
+
/**
|
|
310
|
+
Cholesky factors of a band matrix.
|
|
311
|
+
*/
|
|
312
|
+
template <class T = double>
|
|
313
|
+
class BandCholeskyFactors : public FlatBandCholeskyFactors<T>
|
|
314
|
+
{
|
|
315
|
+
public:
|
|
316
|
+
/// allocate memory and factor the matrix a
|
|
317
|
+
BandCholeskyFactors (const SymBandMatrix<T> & a)
|
|
318
|
+
: FlatBandCholeskyFactors<T> (a.Height(),
|
|
319
|
+
a.BandWidth(),
|
|
320
|
+
new T[FlatBandCholeskyFactors<T>::RequiredMem (a.Height(), a.BandWidth())])
|
|
321
|
+
{
|
|
322
|
+
this->Factor (a);
|
|
323
|
+
}
|
|
324
|
+
|
|
325
|
+
/// delete memory
|
|
326
|
+
~BandCholeskyFactors ()
|
|
327
|
+
{
|
|
328
|
+
delete [] this->mem;
|
|
329
|
+
}
|
|
330
|
+
};
|
|
331
|
+
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
#endif
|