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,200 @@
|
|
|
1
|
+
#ifndef FILE_PARDISOINVERSE
|
|
2
|
+
#define FILE_PARDISOINVERSE
|
|
3
|
+
|
|
4
|
+
/* *************************************************************************/
|
|
5
|
+
/* File: pardisoinverse.hpp */
|
|
6
|
+
/* Author: Florian Bachinger */
|
|
7
|
+
/* Date: Feb. 04 */
|
|
8
|
+
/* *************************************************************************/
|
|
9
|
+
|
|
10
|
+
/*
|
|
11
|
+
interface to the PARDISO - package
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
////////////////////////////////////////////////////////////////////////////////
|
|
17
|
+
|
|
18
|
+
#include "sparsecholesky.hpp" // for SparseFactorization
|
|
19
|
+
|
|
20
|
+
namespace ngla
|
|
21
|
+
{
|
|
22
|
+
using ngbla::integer;
|
|
23
|
+
extern bool is_pardiso_available;
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
/*
|
|
27
|
+
template<class TM,
|
|
28
|
+
class TV_ROW = typename mat_traits<TM>::TV_ROW,
|
|
29
|
+
class TV_COL = typename mat_traits<TM>::TV_COL>
|
|
30
|
+
class PardisoInverse : public SparseFactorization
|
|
31
|
+
{
|
|
32
|
+
integer height; // matrix size in scalars
|
|
33
|
+
integer compressed_height; // matrix size after compression in scalars
|
|
34
|
+
integer nze, entrysize;
|
|
35
|
+
bool print;
|
|
36
|
+
|
|
37
|
+
integer pt[128];
|
|
38
|
+
integer hparams[64];
|
|
39
|
+
|
|
40
|
+
Array<integer,size_t> rowstart, indices;
|
|
41
|
+
Array<typename mat_traits<TM>::TSCAL,size_t> matrix;
|
|
42
|
+
|
|
43
|
+
integer matrixtype;
|
|
44
|
+
bool symmetric, spd;
|
|
45
|
+
|
|
46
|
+
void SetMatrixType();
|
|
47
|
+
|
|
48
|
+
bool compressed;
|
|
49
|
+
Array<int> compress;
|
|
50
|
+
|
|
51
|
+
public:
|
|
52
|
+
typedef TV_COL TV;
|
|
53
|
+
typedef TV_ROW TVX;
|
|
54
|
+
typedef typename mat_traits<TM>::TSCAL TSCAL;
|
|
55
|
+
|
|
56
|
+
///
|
|
57
|
+
PardisoInverse (const SparseMatrix<TM,TV_ROW,TV_COL> & a,
|
|
58
|
+
const BitArray * ainner = NULL,
|
|
59
|
+
const Array<int> * acluster = NULL,
|
|
60
|
+
int symmetric = 0);
|
|
61
|
+
///
|
|
62
|
+
|
|
63
|
+
template <typename TSUBSET>
|
|
64
|
+
void GetPardisoMatrix (const SparseMatrix<TM,TV_ROW,TV_COL> & a, TSUBSET subset);
|
|
65
|
+
|
|
66
|
+
virtual ~PardisoInverse ();
|
|
67
|
+
///
|
|
68
|
+
int VHeight() const { return height/entrysize; }
|
|
69
|
+
///
|
|
70
|
+
int VWidth() const { return height/entrysize; }
|
|
71
|
+
///
|
|
72
|
+
virtual void Mult (const BaseVector & x, BaseVector & y) const;
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
///
|
|
76
|
+
virtual ostream & Print (ostream & ost) const;
|
|
77
|
+
|
|
78
|
+
virtual void MemoryUsage (Array<MemoryUsageStruct*> & mu) const
|
|
79
|
+
{
|
|
80
|
+
mu.Append (new MemoryUsageStruct ("SparseChol", nze*sizeof(TM), 1));
|
|
81
|
+
}
|
|
82
|
+
virtual BaseVector * CreateVector () const
|
|
83
|
+
{
|
|
84
|
+
return new VVector<TV> (height/entrysize);
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
*/
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
template<class TM>
|
|
98
|
+
class PardisoInverseTM : public SparseFactorization
|
|
99
|
+
{
|
|
100
|
+
protected:
|
|
101
|
+
integer height; // matrix size in scalars
|
|
102
|
+
integer compressed_height; // matrix size after compression in scalars
|
|
103
|
+
integer nze, entrysize;
|
|
104
|
+
bool print;
|
|
105
|
+
|
|
106
|
+
integer pt[128];
|
|
107
|
+
integer hparams[64];
|
|
108
|
+
|
|
109
|
+
Array<integer> rowstart, indices;
|
|
110
|
+
Array<typename mat_traits<TM>::TSCAL> matrix;
|
|
111
|
+
|
|
112
|
+
integer matrixtype;
|
|
113
|
+
bool symmetric, spd;
|
|
114
|
+
|
|
115
|
+
void SetMatrixType();
|
|
116
|
+
|
|
117
|
+
bool compressed;
|
|
118
|
+
Array<int> compress;
|
|
119
|
+
size_t memory_allocated_in_pardiso_lib = 0;
|
|
120
|
+
|
|
121
|
+
public:
|
|
122
|
+
typedef typename mat_traits<TM>::TSCAL TSCAL;
|
|
123
|
+
|
|
124
|
+
///
|
|
125
|
+
PardisoInverseTM (shared_ptr<const SparseMatrixTM<TM>> a,
|
|
126
|
+
shared_ptr<BitArray> ainner = nullptr,
|
|
127
|
+
shared_ptr<const Array<int>> acluster = nullptr,
|
|
128
|
+
int symmetric = 0);
|
|
129
|
+
///
|
|
130
|
+
|
|
131
|
+
template <typename TSUBSET>
|
|
132
|
+
void GetPardisoMatrix (const SparseMatrixTM<TM> & a, TSUBSET subset);
|
|
133
|
+
|
|
134
|
+
virtual ~PardisoInverseTM ();
|
|
135
|
+
///
|
|
136
|
+
int VHeight() const { return height/entrysize; }
|
|
137
|
+
///
|
|
138
|
+
int VWidth() const { return height/entrysize; }
|
|
139
|
+
///
|
|
140
|
+
virtual ostream & Print (ostream & ost) const;
|
|
141
|
+
|
|
142
|
+
virtual Array<MemoryUsage> GetMemoryUsage () const
|
|
143
|
+
{
|
|
144
|
+
return { MemoryUsage ("Pardiso", nze*sizeof(TM), 1) };
|
|
145
|
+
}
|
|
146
|
+
};
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
template<class TM,
|
|
150
|
+
class TV_ROW = typename mat_traits<TM>::TV_ROW,
|
|
151
|
+
class TV_COL = typename mat_traits<TM>::TV_COL>
|
|
152
|
+
class PardisoInverse : public PardisoInverseTM<TM>
|
|
153
|
+
{
|
|
154
|
+
using PardisoInverseTM<TM>::height;
|
|
155
|
+
using PardisoInverseTM<TM>::compressed_height;
|
|
156
|
+
using PardisoInverseTM<TM>::entrysize;
|
|
157
|
+
using PardisoInverseTM<TM>::pt;
|
|
158
|
+
using PardisoInverseTM<TM>::hparams;
|
|
159
|
+
using PardisoInverseTM<TM>::matrixtype;
|
|
160
|
+
using PardisoInverseTM<TM>::rowstart;
|
|
161
|
+
using PardisoInverseTM<TM>::indices;
|
|
162
|
+
using PardisoInverseTM<TM>::matrix;
|
|
163
|
+
using PardisoInverseTM<TM>::compressed;
|
|
164
|
+
using PardisoInverseTM<TM>::compress;
|
|
165
|
+
|
|
166
|
+
public:
|
|
167
|
+
typedef TV_COL TV;
|
|
168
|
+
typedef TV_ROW TVX;
|
|
169
|
+
typedef typename mat_traits<TM>::TSCAL TSCAL;
|
|
170
|
+
|
|
171
|
+
///
|
|
172
|
+
PardisoInverse (shared_ptr<const SparseMatrix<TM,TV_ROW,TV_COL>> a,
|
|
173
|
+
shared_ptr<BitArray> ainner = nullptr,
|
|
174
|
+
shared_ptr<const Array<int>> acluster = nullptr,
|
|
175
|
+
int symmetric = 0)
|
|
176
|
+
: PardisoInverseTM<TM> (a, ainner, acluster, symmetric) { ; }
|
|
177
|
+
|
|
178
|
+
virtual ~PardisoInverse () { ; }
|
|
179
|
+
///
|
|
180
|
+
void Mult (const BaseVector & x, BaseVector & y) const override;
|
|
181
|
+
void MultTrans (const BaseVector & x, BaseVector & y) const override;
|
|
182
|
+
///
|
|
183
|
+
|
|
184
|
+
AutoVector CreateRowVector() const override
|
|
185
|
+
{
|
|
186
|
+
return make_unique<VVector<TV>> (height/entrysize);
|
|
187
|
+
}
|
|
188
|
+
AutoVector CreateColVector () const override
|
|
189
|
+
{
|
|
190
|
+
return make_unique<VVector<TV>> (height/entrysize);
|
|
191
|
+
}
|
|
192
|
+
};
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
#endif
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
#ifndef FILE_PERIODIC_
|
|
2
|
+
#define FILE_PERIODIC_
|
|
3
|
+
|
|
4
|
+
/*********************************************************************/
|
|
5
|
+
/* File: periodic.hpp */
|
|
6
|
+
/* Author: Christopher Lackner */
|
|
7
|
+
/* Date: Feb. 2017 */
|
|
8
|
+
/*********************************************************************/
|
|
9
|
+
|
|
10
|
+
#include <set>
|
|
11
|
+
#include "fespace.hpp"
|
|
12
|
+
|
|
13
|
+
namespace ngcomp
|
|
14
|
+
{
|
|
15
|
+
|
|
16
|
+
// A periodic wrapper class for fespaces
|
|
17
|
+
|
|
18
|
+
class NGS_DLL_HEADER PeriodicFESpace : public FESpace
|
|
19
|
+
{
|
|
20
|
+
protected:
|
|
21
|
+
Array<int> dofmap; // mapping of dofs
|
|
22
|
+
Array<int> vertex_map; // mapping of vertices
|
|
23
|
+
shared_ptr<FESpace> space;
|
|
24
|
+
shared_ptr<Array<int>> used_idnrs;
|
|
25
|
+
|
|
26
|
+
public:
|
|
27
|
+
PeriodicFESpace (shared_ptr<FESpace> space, const Flags & flags, shared_ptr<Array<int>> aused_idnrs);
|
|
28
|
+
|
|
29
|
+
virtual ~PeriodicFESpace () { ; }
|
|
30
|
+
void Update() override;
|
|
31
|
+
void DoArchive (Archive & archive) override;
|
|
32
|
+
auto GetCArgs () { return std::make_tuple(Shallow(space), GetFlags(), used_idnrs); }
|
|
33
|
+
|
|
34
|
+
void FinalizeUpdate() override
|
|
35
|
+
{
|
|
36
|
+
space->FinalizeUpdate();
|
|
37
|
+
FESpace::FinalizeUpdate();
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
ProxyNode MakeProxyFunction (bool testfunction,
|
|
41
|
+
const function<shared_ptr<ProxyFunction>(shared_ptr<ProxyFunction>)> & addblock) const override;
|
|
42
|
+
|
|
43
|
+
shared_ptr<Array<int>> GetUsedIdnrs() const { return used_idnrs; }
|
|
44
|
+
virtual string GetClassName() const override { return "Periodic" + space->GetClassName(); }
|
|
45
|
+
shared_ptr<FESpace> GetBaseSpace() const { return space; }
|
|
46
|
+
|
|
47
|
+
virtual FiniteElement & GetFE (ElementId ei, Allocator & alloc) const override;
|
|
48
|
+
|
|
49
|
+
virtual size_t GetNDof () const override { return space->GetNDof(); }
|
|
50
|
+
virtual size_t GetNDofLevel (int level) const override { return space->GetNDofLevel(level); }
|
|
51
|
+
|
|
52
|
+
virtual void GetDofNrs (ElementId ei, Array<DofId> & dnums) const override;
|
|
53
|
+
virtual void GetDofNrs (NodeId ni, Array<DofId> & dnums) const override;
|
|
54
|
+
|
|
55
|
+
virtual SymbolTable<shared_ptr<DifferentialOperator>> GetAdditionalEvaluators () const override
|
|
56
|
+
{ return space->GetAdditionalEvaluators (); }
|
|
57
|
+
|
|
58
|
+
[[deprecated("Use GetDofNrs(NODE_TYPE(NT_VERTEX,nr) instead")]]
|
|
59
|
+
virtual void GetVertexDofNrs (int vnr, Array<DofId> & dnums) const override;
|
|
60
|
+
|
|
61
|
+
[[deprecated("Use GetDofNrs(NODE_TYPE(NT_EDGE,nr) instead")]]
|
|
62
|
+
virtual void GetEdgeDofNrs (int ednr, Array<DofId> & dnums) const override;
|
|
63
|
+
|
|
64
|
+
virtual void GetFaceDofNrs (int fanr, Array<DofId> & dnums) const override;
|
|
65
|
+
|
|
66
|
+
virtual void GetInnerDofNrs (int elnr, Array<DofId> & dnums) const override
|
|
67
|
+
{ space->GetInnerDofNrs(elnr, dnums); }
|
|
68
|
+
|
|
69
|
+
virtual void VTransformMR (ElementId ei,
|
|
70
|
+
SliceMatrix<double> mat, TRANSFORM_TYPE tt) const override
|
|
71
|
+
{ space-> VTransformMR(ei, mat, tt); }
|
|
72
|
+
virtual void VTransformMC (ElementId ei,
|
|
73
|
+
SliceMatrix<Complex> mat, TRANSFORM_TYPE tt) const override
|
|
74
|
+
{ space->VTransformMC (ei, mat, tt); }
|
|
75
|
+
virtual void VTransformVR (ElementId ei,
|
|
76
|
+
SliceVector<double> vec, TRANSFORM_TYPE tt) const override
|
|
77
|
+
{ space->VTransformVR(ei, vec, tt); }
|
|
78
|
+
virtual void VTransformVC (ElementId ei,
|
|
79
|
+
SliceVector<Complex> vec, TRANSFORM_TYPE tt) const override
|
|
80
|
+
{ space->VTransformVC(ei, vec, tt); }
|
|
81
|
+
|
|
82
|
+
auto & GetVertexMap() const { return vertex_map; }
|
|
83
|
+
auto & GetDofMap() const { return dofmap; }
|
|
84
|
+
FlatArray<VorB> GetDualShapeNodes (VorB vb) const override
|
|
85
|
+
{
|
|
86
|
+
return space->GetDualShapeNodes(vb);
|
|
87
|
+
}
|
|
88
|
+
protected:
|
|
89
|
+
// overload in quasiperiodic space
|
|
90
|
+
virtual void DofMapped(size_t from, size_t to, size_t idnr) { ; }
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
template<typename TSCAL>
|
|
94
|
+
class QuasiPeriodicFESpace : public PeriodicFESpace
|
|
95
|
+
{
|
|
96
|
+
shared_ptr<Array<TSCAL>> factors;
|
|
97
|
+
Array<TSCAL> dof_factors;
|
|
98
|
+
Array<set<size_t>> master_dofs;
|
|
99
|
+
|
|
100
|
+
public:
|
|
101
|
+
QuasiPeriodicFESpace (shared_ptr<FESpace> fespace, const Flags & flag, shared_ptr<Array<int>> aused_idnrs, shared_ptr<Array<TSCAL>> afactors);
|
|
102
|
+
|
|
103
|
+
void Update() override;
|
|
104
|
+
void DoArchive (Archive & archive) override {
|
|
105
|
+
PeriodicFESpace::DoArchive(archive);
|
|
106
|
+
archive & factors & dof_factors & master_dofs;
|
|
107
|
+
}
|
|
108
|
+
auto GetCArgs () {
|
|
109
|
+
return std::make_tuple(Shallow(GetBaseSpace()), GetFlags(), used_idnrs, factors);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
shared_ptr<Array<TSCAL>> GetFactors() const { return factors; }
|
|
113
|
+
|
|
114
|
+
virtual void VTransformMR (ElementId ei, SliceMatrix<double> mat, TRANSFORM_TYPE tt) const override;
|
|
115
|
+
virtual void VTransformMC (ElementId ei, SliceMatrix<Complex> mat, TRANSFORM_TYPE tt) const override;
|
|
116
|
+
virtual void VTransformVR (ElementId ei, SliceVector<double> vec, TRANSFORM_TYPE tt) const override;
|
|
117
|
+
virtual void VTransformVC (ElementId ei, SliceVector<Complex> vec, TRANSFORM_TYPE tt) const override;
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
protected:
|
|
122
|
+
virtual void DofMapped(size_t from, size_t to, size_t idnr) override;
|
|
123
|
+
};
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
#endif // FILE_PERIODIC_
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#ifndef PLATEAUFESPACE_HPP
|
|
2
|
+
#define PLATEAUFESPACE_HPP
|
|
3
|
+
|
|
4
|
+
/*********************************************************************/
|
|
5
|
+
/* File: plateaufespace.hpp */
|
|
6
|
+
/* Author: Joachim Schoeberl */
|
|
7
|
+
/* Date: 23 Oct 2023 */
|
|
8
|
+
/*********************************************************************/
|
|
9
|
+
|
|
10
|
+
#include "fespace.hpp"
|
|
11
|
+
|
|
12
|
+
namespace ngcomp
|
|
13
|
+
{
|
|
14
|
+
|
|
15
|
+
class PlateauFESpace : public CompressedFESpace
|
|
16
|
+
{
|
|
17
|
+
protected:
|
|
18
|
+
Array<Region> plateaus;
|
|
19
|
+
public:
|
|
20
|
+
PlateauFESpace (shared_ptr<FESpace> afes, Array<Region> aplateaus);
|
|
21
|
+
void Update() override;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
}
|
|
25
|
+
#endif
|
netgen/include/pml.hpp
ADDED
|
@@ -0,0 +1,275 @@
|
|
|
1
|
+
#ifndef FILE_PML
|
|
2
|
+
#define FILE_PML
|
|
3
|
+
|
|
4
|
+
/*********************************************************************/
|
|
5
|
+
/* File: pml.hpp */
|
|
6
|
+
/* Author: Joachim Schoeberl */
|
|
7
|
+
/* Date: 1. Jul. 2004 */
|
|
8
|
+
/*********************************************************************/
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
#include "bdbintegrator.hpp"
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
namespace ngfem
|
|
15
|
+
{
|
|
16
|
+
extern Complex alpha;
|
|
17
|
+
extern double pml_r;
|
|
18
|
+
extern double pml_x;
|
|
19
|
+
|
|
20
|
+
extern double pml_xmin[3];
|
|
21
|
+
extern double pml_xmax[3];
|
|
22
|
+
|
|
23
|
+
/*
|
|
24
|
+
rect_pml = 0 .... circular pml with radius pml_r
|
|
25
|
+
rect_pml = 1 .... square pml on square (-pml_x, pml_x)^d
|
|
26
|
+
rect_pml = 2 .... rectangular pml on (pml_xmin, pml_xmax) x (pml_ymin, pml_ymax) x (pml_zmin, pml_zmax)
|
|
27
|
+
*/
|
|
28
|
+
extern int rect_pml;
|
|
29
|
+
|
|
30
|
+
// extern bool apply_deriv_alpha;
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
template <>
|
|
39
|
+
MappedIntegrationPoint<2,2,Complex> ::
|
|
40
|
+
MappedIntegrationPoint (const IntegrationPoint & aip,
|
|
41
|
+
const ElementTransformation & aeltrans);
|
|
42
|
+
// LocalHeap & lh);
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
template <>
|
|
46
|
+
MappedIntegrationPoint<2,2,AutoDiff<1,Complex> > ::
|
|
47
|
+
MappedIntegrationPoint (const IntegrationPoint & aip,
|
|
48
|
+
const ElementTransformation & aeltrans);
|
|
49
|
+
// LocalHeap & lh);
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
extern void SetPMLParameters();
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
template <class DIFFOP, class DMATOP, class FEL = FiniteElement>
|
|
57
|
+
class PML_BDBIntegrator : public T_BDBIntegrator<DIFFOP,DMATOP,FEL>
|
|
58
|
+
{
|
|
59
|
+
public:
|
|
60
|
+
|
|
61
|
+
enum { DIM_SPACE = DIFFOP::DIM_SPACE };
|
|
62
|
+
enum { DIM_ELEMENT = DIFFOP::DIM_ELEMENT };
|
|
63
|
+
enum { DIM_DMAT = DIFFOP::DIM_DMAT };
|
|
64
|
+
enum { DIM = DIFFOP::DIM };
|
|
65
|
+
|
|
66
|
+
///
|
|
67
|
+
|
|
68
|
+
PML_BDBIntegrator (const Array<shared_ptr<CoefficientFunction>> & coeffs)
|
|
69
|
+
: T_BDBIntegrator<DIFFOP,DMATOP,FEL> (coeffs)
|
|
70
|
+
{
|
|
71
|
+
SetPMLParameters();
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
PML_BDBIntegrator (const DMATOP & admat)
|
|
76
|
+
: T_BDBIntegrator<DIFFOP,DMATOP,FEL> (admat)
|
|
77
|
+
{
|
|
78
|
+
SetPMLParameters();
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
///
|
|
82
|
+
virtual ~PML_BDBIntegrator ()
|
|
83
|
+
{ ; }
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
///
|
|
87
|
+
virtual void
|
|
88
|
+
CalcElementMatrix (const FiniteElement & bfel,
|
|
89
|
+
const ElementTransformation & eltrans,
|
|
90
|
+
FlatMatrix<double> elmat,
|
|
91
|
+
LocalHeap & locheap) const override
|
|
92
|
+
{
|
|
93
|
+
throw Exception ("PML cannot generate real matrices");
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
///
|
|
97
|
+
virtual void
|
|
98
|
+
CalcElementMatrix (const FiniteElement & bfel,
|
|
99
|
+
const ElementTransformation & eltrans,
|
|
100
|
+
FlatMatrix<Complex> elmat,
|
|
101
|
+
LocalHeap & locheap) const override
|
|
102
|
+
{
|
|
103
|
+
try
|
|
104
|
+
{
|
|
105
|
+
const FEL & fel = static_cast<const FEL&> (bfel);
|
|
106
|
+
int ndof = fel.GetNDof();
|
|
107
|
+
|
|
108
|
+
elmat = 0;
|
|
109
|
+
|
|
110
|
+
FlatMatrixFixHeight<DIM_DMAT, Complex> bmat (ndof * DIM, locheap);
|
|
111
|
+
FlatMatrixFixHeight<DIM_DMAT, Complex> dbmat (ndof * DIM, locheap);
|
|
112
|
+
|
|
113
|
+
Mat<DIM_DMAT,DIM_DMAT, Complex> dmat;
|
|
114
|
+
|
|
115
|
+
const IntegrationRule & ir = this->GetIntegrationRule (fel);
|
|
116
|
+
|
|
117
|
+
for (int i = 0; i < ir.GetNIP(); i++)
|
|
118
|
+
{
|
|
119
|
+
HeapReset hr (locheap);
|
|
120
|
+
|
|
121
|
+
MappedIntegrationPoint<DIM_ELEMENT,DIM_SPACE,Complex>
|
|
122
|
+
sip(ir[i], eltrans);
|
|
123
|
+
MappedIntegrationPoint<DIM_ELEMENT,DIM_SPACE,double>
|
|
124
|
+
sip_real(ir[i], eltrans);
|
|
125
|
+
|
|
126
|
+
DIFFOP::GenerateMatrix (fel, sip, bmat, locheap);
|
|
127
|
+
this->dmatop.GenerateMatrix (fel, sip_real, dmat, locheap);
|
|
128
|
+
|
|
129
|
+
Complex fac = sip.GetJacobiDet() * sip.IP().Weight();
|
|
130
|
+
|
|
131
|
+
dmat *= fac;
|
|
132
|
+
dbmat = dmat * bmat;
|
|
133
|
+
// elmat += Trans (bmat) * dbmat;
|
|
134
|
+
/*
|
|
135
|
+
if (DMATOP::SYMMETRIC)
|
|
136
|
+
// FastMat<DIM_DMAT> (elmat.Height(), &dbmat(0,0), &bmat(0,0), &elmat(0,0));
|
|
137
|
+
FastMat<DIM_DMAT> (dbmat, bmat, elmat);
|
|
138
|
+
else
|
|
139
|
+
*/
|
|
140
|
+
elmat += Trans (bmat) * dbmat;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
catch (Exception & e)
|
|
145
|
+
{
|
|
146
|
+
e.Append ("in CalcElementMatrix, type = ");
|
|
147
|
+
e.Append (typeid(*this).name());
|
|
148
|
+
e.Append ("\n");
|
|
149
|
+
throw;
|
|
150
|
+
}
|
|
151
|
+
catch (exception & e)
|
|
152
|
+
{
|
|
153
|
+
Exception e2(e.what());
|
|
154
|
+
e2.Append ("\nin CalcElementMatrix, type = ");
|
|
155
|
+
e2.Append (typeid(*this).name());
|
|
156
|
+
e2.Append ("\n");
|
|
157
|
+
throw e2;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
virtual void
|
|
162
|
+
CalcFlux (const FiniteElement & fel,
|
|
163
|
+
const BaseMappedIntegrationPoint & bmip,
|
|
164
|
+
BareSliceVector<Complex> elx,
|
|
165
|
+
FlatVector<Complex> flux,
|
|
166
|
+
bool applyd,
|
|
167
|
+
LocalHeap & lh) const override
|
|
168
|
+
{
|
|
169
|
+
HeapReset hr(lh);
|
|
170
|
+
MappedIntegrationPoint<DIM_ELEMENT,DIM_SPACE,Complex>
|
|
171
|
+
mip(bmip.IP(), bmip.GetTransformation());
|
|
172
|
+
// cout << "bmip.jacobi = " << static_cast<const MappedIntegrationPoint<3,3>&> (bmip).GetJacobiDet() << endl;
|
|
173
|
+
// cout << "mip.jacobi = " << mip.GetJacobiDet() << endl;
|
|
174
|
+
|
|
175
|
+
DIFFOP::Apply (fel, mip, elx, flux, lh);
|
|
176
|
+
|
|
177
|
+
FlatVec<DMATOP::DIM_DMAT,Complex> hflux(&flux(0));
|
|
178
|
+
if (applyd)
|
|
179
|
+
this->dmatop.Apply1 (fel, mip, hflux, lh);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
|
|
183
|
+
virtual void
|
|
184
|
+
ApplyElementMatrix (const FiniteElement & bfel,
|
|
185
|
+
const ElementTransformation & eltrans,
|
|
186
|
+
const FlatVector<double> elx,
|
|
187
|
+
FlatVector<double> ely,
|
|
188
|
+
void * precomputed,
|
|
189
|
+
LocalHeap & locheap) const override
|
|
190
|
+
{ ; }
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
virtual void
|
|
194
|
+
ApplyElementMatrix (const FiniteElement & bfel,
|
|
195
|
+
const ElementTransformation & eltrans,
|
|
196
|
+
const FlatVector<Complex> elx,
|
|
197
|
+
FlatVector<Complex> ely,
|
|
198
|
+
void * precomputed,
|
|
199
|
+
LocalHeap & locheap) const override
|
|
200
|
+
{
|
|
201
|
+
const FEL & fel = static_cast<const FEL&> (bfel);
|
|
202
|
+
int ndof = fel.GetNDof ();
|
|
203
|
+
|
|
204
|
+
ely = 0;
|
|
205
|
+
|
|
206
|
+
|
|
207
|
+
// if (!apply_deriv_alpha)
|
|
208
|
+
{
|
|
209
|
+
Vec<DIM_DMAT,Complex> hv1;
|
|
210
|
+
Vec<DIM_DMAT,Complex> hv2;
|
|
211
|
+
|
|
212
|
+
FlatVector<Complex> hely (ndof*DIM, locheap);
|
|
213
|
+
const IntegrationRule & ir = this->GetIntegrationRule (fel);
|
|
214
|
+
|
|
215
|
+
|
|
216
|
+
for (int i = 0; i < ir.GetNIP(); i++)
|
|
217
|
+
{
|
|
218
|
+
MappedIntegrationPoint<DIM_ELEMENT,DIM_SPACE,Complex>
|
|
219
|
+
sip(ir[i], eltrans);
|
|
220
|
+
|
|
221
|
+
MappedIntegrationPoint<DIM_ELEMENT,DIM_SPACE,double>
|
|
222
|
+
sip_real (ir[i], eltrans);
|
|
223
|
+
|
|
224
|
+
DIFFOP::Apply (fel, sip, elx, hv1, locheap);
|
|
225
|
+
this -> dmatop.Apply (fel, sip_real, hv1, hv2, locheap);
|
|
226
|
+
DIFFOP::ApplyTrans (fel, sip, hv2, hely, locheap);
|
|
227
|
+
|
|
228
|
+
Complex fac = sip.GetJacobiDet() * sip.IP().Weight();
|
|
229
|
+
ely += fac * hely;
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
/*
|
|
233
|
+
else
|
|
234
|
+
{
|
|
235
|
+
Vec<DIM_DMAT, AutoDiff<1,Complex> > hv1;
|
|
236
|
+
Vec<DIM_DMAT, AutoDiff<1,Complex> > hv2;
|
|
237
|
+
|
|
238
|
+
FlatVector<AutoDiff<1,Complex> > hely (ndof*DIM, locheap);
|
|
239
|
+
FlatVector<AutoDiff<1,Complex> > helx (ndof*DIM, locheap);
|
|
240
|
+
const IntegrationRule & ir = this->GetIntegrationRule (fel);
|
|
241
|
+
|
|
242
|
+
for (int j = 0; j < helx.Size(); j++)
|
|
243
|
+
helx(j) = elx(j);
|
|
244
|
+
|
|
245
|
+
for (int i = 0; i < ir.GetNIP(); i++)
|
|
246
|
+
{
|
|
247
|
+
MappedIntegrationPoint<DIM_ELEMENT,DIM_SPACE,AutoDiff<1,Complex> >
|
|
248
|
+
sip(ir[i], eltrans);
|
|
249
|
+
|
|
250
|
+
MappedIntegrationPoint<DIM_ELEMENT,DIM_SPACE,double>
|
|
251
|
+
sip_real (ir[i], eltrans);
|
|
252
|
+
|
|
253
|
+
DIFFOP::Apply (fel, sip, helx, hv1, locheap);
|
|
254
|
+
this -> dmatop.Apply (fel, sip_real, hv1, hv2, locheap);
|
|
255
|
+
DIFFOP::ApplyTrans (fel, sip, hv2, hely, locheap);
|
|
256
|
+
|
|
257
|
+
AutoDiff<1,Complex> fac = sip.GetJacobiDet() * sip.IP().Weight();
|
|
258
|
+
|
|
259
|
+
for (int j = 0; j < hely.Size(); j++)
|
|
260
|
+
ely(j) += (fac * hely(j)).DValue(0);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
*/
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
///
|
|
268
|
+
virtual int GetDimension () const override { return DIM; }
|
|
269
|
+
///
|
|
270
|
+
virtual string Name () const override { return "PML-BDB integrator"; }
|
|
271
|
+
};
|
|
272
|
+
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
#endif
|