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
netgen/include/mgpre.hpp
ADDED
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
|
|
2
|
+
#ifndef FILE_MGPRE
|
|
3
|
+
#define FILE_MGPRE
|
|
4
|
+
|
|
5
|
+
/*********************************************************************/
|
|
6
|
+
/* File: mgpre.hh */
|
|
7
|
+
/* Author: Joachim Schoeberl */
|
|
8
|
+
/* Date: 20. Apr. 2000 */
|
|
9
|
+
/*********************************************************************/
|
|
10
|
+
|
|
11
|
+
#include <bilinearform.hpp>
|
|
12
|
+
// #include <la.hpp>
|
|
13
|
+
|
|
14
|
+
namespace ngmg
|
|
15
|
+
{
|
|
16
|
+
using namespace ngla;
|
|
17
|
+
using namespace ngcomp;
|
|
18
|
+
using ngla::BaseMatrix;
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
Multigrid preconditioner
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
class Smoother;
|
|
25
|
+
///
|
|
26
|
+
class Prolongation;
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
///
|
|
30
|
+
class NGS_DLL_HEADER MultigridPreconditioner : public BaseMatrix
|
|
31
|
+
{
|
|
32
|
+
|
|
33
|
+
public:
|
|
34
|
+
enum COARSETYPE { EXACT_COARSE, CG_COARSE, SMOOTHING_COARSE, USER_COARSE };
|
|
35
|
+
|
|
36
|
+
private:
|
|
37
|
+
shared_ptr<BilinearForm> biform;
|
|
38
|
+
shared_ptr<MeshAccess> ma;
|
|
39
|
+
|
|
40
|
+
shared_ptr<Smoother> smoother;
|
|
41
|
+
shared_ptr<Prolongation> prolongation;
|
|
42
|
+
shared_ptr<BaseMatrix> coarsegridpre;
|
|
43
|
+
|
|
44
|
+
///
|
|
45
|
+
double checksumcgpre;
|
|
46
|
+
///
|
|
47
|
+
COARSETYPE coarsetype;
|
|
48
|
+
///
|
|
49
|
+
int cycle, incsmooth, smoothingsteps;
|
|
50
|
+
///
|
|
51
|
+
int coarsesmoothingsteps;
|
|
52
|
+
///
|
|
53
|
+
int updateall;
|
|
54
|
+
/// creates a new smoother for each update
|
|
55
|
+
bool update_always;
|
|
56
|
+
/// for robust prolongation
|
|
57
|
+
bool harmonic_extension_prolongation = false;
|
|
58
|
+
Array<shared_ptr<BaseMatrix>> he_prolongation;
|
|
59
|
+
public:
|
|
60
|
+
///
|
|
61
|
+
MultigridPreconditioner (shared_ptr<BilinearForm> abiform,
|
|
62
|
+
shared_ptr<Smoother> asmoother,
|
|
63
|
+
shared_ptr<Prolongation> aprolongation);
|
|
64
|
+
///
|
|
65
|
+
~MultigridPreconditioner ();
|
|
66
|
+
///
|
|
67
|
+
virtual bool IsComplex() const override
|
|
68
|
+
{ return biform->GetFESpace()->IsComplex(); }
|
|
69
|
+
|
|
70
|
+
///
|
|
71
|
+
void SetSmoothingSteps (int sstep);
|
|
72
|
+
///
|
|
73
|
+
void SetCycle (int c);
|
|
74
|
+
///
|
|
75
|
+
void SetIncreaseSmoothingSteps (int incsm);
|
|
76
|
+
///
|
|
77
|
+
void SetCoarseType (COARSETYPE ctyp);
|
|
78
|
+
///
|
|
79
|
+
void SetCoarseGridPreconditioner (shared_ptr<BaseMatrix> acoarsegridpre);
|
|
80
|
+
///
|
|
81
|
+
void SetCoarseSmoothingSteps (int cstep);
|
|
82
|
+
|
|
83
|
+
void SetUpdateAll (int ua = 1);
|
|
84
|
+
///
|
|
85
|
+
void SetUpdateAlways (bool ua = 1) { update_always = ua; }
|
|
86
|
+
///
|
|
87
|
+
void SetHarmonicExtensionProlongation (bool he = true)
|
|
88
|
+
{ harmonic_extension_prolongation = he; }
|
|
89
|
+
|
|
90
|
+
///
|
|
91
|
+
virtual void Update () override;
|
|
92
|
+
|
|
93
|
+
///
|
|
94
|
+
virtual void Mult (const BaseVector & x, BaseVector & y) const override;
|
|
95
|
+
|
|
96
|
+
///
|
|
97
|
+
void MGM (int level, BaseVector & u,
|
|
98
|
+
const BaseVector & f, int incsm = 1) const;
|
|
99
|
+
///
|
|
100
|
+
AutoVector CreateRowVector () const override
|
|
101
|
+
{ return biform->GetMatrix().CreateColVector(); }
|
|
102
|
+
AutoVector CreateColVector () const override
|
|
103
|
+
{ return biform->GetMatrix().CreateRowVector(); }
|
|
104
|
+
|
|
105
|
+
///
|
|
106
|
+
const Smoother & GetSmoother() const
|
|
107
|
+
{ return *smoother; }
|
|
108
|
+
///
|
|
109
|
+
Smoother & GetSmoother()
|
|
110
|
+
{ return *smoother; }
|
|
111
|
+
///
|
|
112
|
+
const Prolongation & GetProlongation() const
|
|
113
|
+
{ return *prolongation; }
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
virtual int VHeight() const override
|
|
117
|
+
{
|
|
118
|
+
return biform->GetMatrix().Height();
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
virtual int VWidth() const override
|
|
122
|
+
{
|
|
123
|
+
return biform->GetMatrix().VWidth();
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
virtual Array<MemoryUsage> GetMemoryUsage () const override;
|
|
127
|
+
|
|
128
|
+
private:
|
|
129
|
+
MemoryTracer mt = { "MultiGridPreconditioner" };
|
|
130
|
+
public:
|
|
131
|
+
const MemoryTracer& GetMemoryTracer() const { return mt; }
|
|
132
|
+
};
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
///
|
|
141
|
+
class NGS_DLL_HEADER TwoLevelMatrix : public BaseMatrix
|
|
142
|
+
{
|
|
143
|
+
///
|
|
144
|
+
const BaseMatrix * mat;
|
|
145
|
+
///
|
|
146
|
+
const BaseMatrix * cpre;
|
|
147
|
+
///
|
|
148
|
+
shared_ptr<Smoother> smoother;
|
|
149
|
+
shared_ptr<BaseMatrix> embedding;
|
|
150
|
+
///
|
|
151
|
+
int level;
|
|
152
|
+
///
|
|
153
|
+
int smoothingsteps;
|
|
154
|
+
public:
|
|
155
|
+
///
|
|
156
|
+
TwoLevelMatrix (const BaseMatrix * amat,
|
|
157
|
+
const BaseMatrix * acpre,
|
|
158
|
+
shared_ptr<Smoother> asmoother, int alevel);
|
|
159
|
+
///
|
|
160
|
+
~TwoLevelMatrix ();
|
|
161
|
+
|
|
162
|
+
void SetEmbedding (shared_ptr<BaseMatrix> aembedding)
|
|
163
|
+
{
|
|
164
|
+
embedding = aembedding;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
virtual bool IsComplex() const override { return mat->IsComplex(); }
|
|
168
|
+
|
|
169
|
+
///
|
|
170
|
+
|
|
171
|
+
virtual void Mult (const BaseVector & x, BaseVector & y) const override;
|
|
172
|
+
///
|
|
173
|
+
AutoVector CreateRowVector () const override { return mat->CreateColVector(); }
|
|
174
|
+
AutoVector CreateColVector () const override { return mat->CreateRowVector(); }
|
|
175
|
+
///
|
|
176
|
+
virtual ostream & Print (ostream & s) const override;
|
|
177
|
+
///
|
|
178
|
+
void SetSmoothingSteps(int ass) { smoothingsteps = ass; }
|
|
179
|
+
///
|
|
180
|
+
const Smoother & GetSmoother() const
|
|
181
|
+
{ return *smoother; }
|
|
182
|
+
///
|
|
183
|
+
Smoother & GetSmoother()
|
|
184
|
+
{ return *smoother; }
|
|
185
|
+
///
|
|
186
|
+
virtual void Update() override;
|
|
187
|
+
|
|
188
|
+
virtual int VHeight() const override
|
|
189
|
+
{
|
|
190
|
+
return mat->Height();
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
virtual int VWidth() const override
|
|
194
|
+
{
|
|
195
|
+
return mat->VWidth();
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
virtual Array<MemoryUsage> GetMemoryUsage () const override;
|
|
200
|
+
};
|
|
201
|
+
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
#endif
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
#ifndef MP_COEFFICIENT
|
|
2
|
+
#define MP_COEFFICIENT
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
#include "mptools.hpp"
|
|
6
|
+
|
|
7
|
+
namespace ngsbem
|
|
8
|
+
{
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
// ******************** Coefficient Functions *********************
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class SphericalHarmonicsCF : public CoefficientFunction
|
|
15
|
+
{
|
|
16
|
+
SphericalHarmonics<Complex> sh;
|
|
17
|
+
public:
|
|
18
|
+
SphericalHarmonicsCF (int order)
|
|
19
|
+
: CoefficientFunction(1, true), sh(order) { }
|
|
20
|
+
Complex & Coef(int n, int m) { return sh.Coef(n,m); }
|
|
21
|
+
|
|
22
|
+
virtual double Evaluate (const BaseMappedIntegrationPoint & ip) const override
|
|
23
|
+
{ throw Exception("real eval not available"); }
|
|
24
|
+
|
|
25
|
+
virtual void Evaluate (const BaseMappedIntegrationPoint & mip, FlatVector<Complex> values) const override
|
|
26
|
+
{
|
|
27
|
+
values(0) = sh.Eval(mip.GetPoint());
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
virtual void Evaluate (const BaseMappedIntegrationRule & ir, BareSliceMatrix<Complex> values) const override
|
|
31
|
+
{
|
|
32
|
+
for (int i = 0; i < ir.Size(); i++)
|
|
33
|
+
{
|
|
34
|
+
auto & mip = ir[i];
|
|
35
|
+
values(i,0) = sh.Eval(mip.GetPoint());
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
auto & SH() { return sh; }
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
template <typename entry_type> class RegularMLExpansionCF;
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
template <typename RADIAL, typename entry_type=Complex>
|
|
48
|
+
class SphericalExpansionCF : public CoefficientFunction
|
|
49
|
+
{
|
|
50
|
+
SphericalExpansion<RADIAL, entry_type> mp;
|
|
51
|
+
Vec<3> center;
|
|
52
|
+
public:
|
|
53
|
+
SphericalExpansionCF (int order, double kappa, Vec<3> acenter, double rtyp = 1)
|
|
54
|
+
: CoefficientFunction(sizeof(entry_type)/sizeof(Complex), true), mp(order, kappa, rtyp), center(acenter) { }
|
|
55
|
+
|
|
56
|
+
entry_type & Coef(int n, int m) { return mp.Coef(n,m); }
|
|
57
|
+
auto & SH() { return mp.SH(); }
|
|
58
|
+
auto & MP() { return mp; }
|
|
59
|
+
Vec<3> Center() const { return center; }
|
|
60
|
+
|
|
61
|
+
virtual double Evaluate (const BaseMappedIntegrationPoint & ip) const override
|
|
62
|
+
{ throw Exception("real eval not available"); }
|
|
63
|
+
|
|
64
|
+
virtual void Evaluate (const BaseMappedIntegrationPoint & mip, FlatVector<Complex> values) const override
|
|
65
|
+
{
|
|
66
|
+
if constexpr (std::is_same<entry_type, Complex>())
|
|
67
|
+
values(0) = mp.Eval(mip.GetPoint()-center);
|
|
68
|
+
else
|
|
69
|
+
values = mp.Eval(mip.GetPoint()-center);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
template <typename TARGET>
|
|
73
|
+
void ShiftZ (double z, SphericalExpansion<TARGET, entry_type> & target) { mp.ShiftZ(z, target); }
|
|
74
|
+
|
|
75
|
+
using CoefficientFunction::Transform;
|
|
76
|
+
template <typename TARGET>
|
|
77
|
+
void Transform (SphericalExpansionCF<TARGET, entry_type> & target)
|
|
78
|
+
{
|
|
79
|
+
mp.Transform (target.MP(), target.Center()-center);
|
|
80
|
+
}
|
|
81
|
+
template <typename TARGET>
|
|
82
|
+
void TransformAdd (SphericalExpansionCF<TARGET, entry_type> & target)
|
|
83
|
+
{
|
|
84
|
+
mp.TransformAdd (target.MP(), target.Center()-center);
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
|
|
88
|
+
template <typename entry_type>
|
|
89
|
+
class SingularMLExpansionCF : public CoefficientFunction
|
|
90
|
+
{
|
|
91
|
+
shared_ptr<SingularMLExpansion<entry_type>> mlmp;
|
|
92
|
+
public:
|
|
93
|
+
SingularMLExpansionCF (Vec<3> center, double r, double kappa)
|
|
94
|
+
: CoefficientFunction(sizeof(entry_type)/sizeof(Complex), true), mlmp{make_shared<SingularMLExpansion<entry_type>>(center, r, kappa)} { }
|
|
95
|
+
|
|
96
|
+
virtual double Evaluate (const BaseMappedIntegrationPoint & ip) const override
|
|
97
|
+
{ throw Exception("real eval not available"); }
|
|
98
|
+
|
|
99
|
+
virtual void Evaluate (const BaseMappedIntegrationPoint & mip, FlatVector<Complex> values) const override
|
|
100
|
+
{
|
|
101
|
+
// values(0) = mlmp->Evaluate(mip.GetPoint());
|
|
102
|
+
|
|
103
|
+
if constexpr (std::is_same<entry_type, Complex>())
|
|
104
|
+
values(0) = mlmp->Evaluate(mip.GetPoint());
|
|
105
|
+
else
|
|
106
|
+
values = mlmp->Evaluate(mip.GetPoint());
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
shared_ptr<SingularMLExpansion<entry_type>> MLExpansion() const { return mlmp; }
|
|
112
|
+
shared_ptr<RegularMLExpansionCF<entry_type>> CreateRegularExpansion(Vec<3> center, double r) const;
|
|
113
|
+
};
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
template <typename entry_type>
|
|
117
|
+
class RegularMLExpansionCF : public CoefficientFunction
|
|
118
|
+
{
|
|
119
|
+
shared_ptr<RegularMLExpansion<entry_type>> mlmp;
|
|
120
|
+
public:
|
|
121
|
+
RegularMLExpansionCF (shared_ptr<SingularMLExpansionCF<entry_type>> asingmp, Vec<3> center, double r)
|
|
122
|
+
: CoefficientFunction(sizeof(entry_type)/sizeof(Complex), true), mlmp{make_shared<RegularMLExpansion<entry_type>>(asingmp->MLExpansion(), center, r, FMM_Parameters())} { }
|
|
123
|
+
RegularMLExpansionCF (shared_ptr<SingularMLExpansion<entry_type>> asingmp, Vec<3> center, double r)
|
|
124
|
+
: CoefficientFunction(sizeof(entry_type)/sizeof(Complex), true), mlmp{make_shared<RegularMLExpansion<entry_type>>(asingmp, center, r, FMM_Parameters())} { }
|
|
125
|
+
|
|
126
|
+
virtual double Evaluate (const BaseMappedIntegrationPoint & ip) const override
|
|
127
|
+
{ throw Exception("real eval not available"); }
|
|
128
|
+
|
|
129
|
+
virtual void Evaluate (const BaseMappedIntegrationPoint & mip, FlatVector<Complex> values) const override
|
|
130
|
+
{
|
|
131
|
+
// values(0) = mlmp->Evaluate(mip.GetPoint());
|
|
132
|
+
|
|
133
|
+
if constexpr (std::is_same<entry_type, Complex>())
|
|
134
|
+
values(0) = mlmp->Evaluate(mip.GetPoint());
|
|
135
|
+
else
|
|
136
|
+
values = mlmp->Evaluate(mip.GetPoint());
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
shared_ptr<RegularMLExpansion<entry_type>> MLExpansion() { return mlmp; }
|
|
140
|
+
};
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
#endif
|