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,361 @@
|
|
|
1
|
+
#ifndef COMPLEX_H_INCLUDED
|
|
2
|
+
#define COMPLEX_H_INCLUDED
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
namespace ngstd
|
|
6
|
+
{
|
|
7
|
+
template <class T>
|
|
8
|
+
class MyComplex {
|
|
9
|
+
public:
|
|
10
|
+
enum { D = 2 };
|
|
11
|
+
|
|
12
|
+
INLINE MyComplex() : a(0), b(0) { }
|
|
13
|
+
INLINE MyComplex(const T &sa) : a(sa), b(0) { }
|
|
14
|
+
INLINE MyComplex(const MyComplex<T> &S) : a(S.a), b(S.b) { }
|
|
15
|
+
// MyComplex(const T U[D]) : a(U[0]), b(U[1]) { }
|
|
16
|
+
INLINE MyComplex(const T &sa, const T &sb) : a(sa), b(sb) { }
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
INLINE const MyComplex<T> & set(const T &, const T &);
|
|
20
|
+
|
|
21
|
+
INLINE const MyComplex<T> operator + (const MyComplex<T> &) const;
|
|
22
|
+
INLINE const MyComplex<T> operator - (const MyComplex<T> &) const;
|
|
23
|
+
INLINE const MyComplex<T> operator * (const MyComplex<T> &) const;
|
|
24
|
+
INLINE const MyComplex<T> operator / (const MyComplex<T> &) const;
|
|
25
|
+
INLINE const MyComplex<T> operator + (const T &) const;
|
|
26
|
+
INLINE const MyComplex<T> operator - (const T &) const;
|
|
27
|
+
INLINE const MyComplex<T> operator * (const T &) const;
|
|
28
|
+
INLINE const MyComplex<T> operator / (const T &) const;
|
|
29
|
+
|
|
30
|
+
INLINE const MyComplex<T> & operator = (const MyComplex<T> &);
|
|
31
|
+
INLINE const MyComplex<T> & operator += (const MyComplex<T> &);
|
|
32
|
+
INLINE const MyComplex<T> & operator -= (const MyComplex<T> &);
|
|
33
|
+
INLINE const MyComplex<T> & operator *= (const MyComplex<T> &);
|
|
34
|
+
INLINE const MyComplex<T> & operator /= (const MyComplex<T> &);
|
|
35
|
+
INLINE const MyComplex<T> & operator = (const T &);
|
|
36
|
+
INLINE const MyComplex<T> & operator += (const T &);
|
|
37
|
+
INLINE const MyComplex<T> & operator -= (const T &);
|
|
38
|
+
INLINE const MyComplex<T> & operator *= (const T &);
|
|
39
|
+
INLINE const MyComplex<T> & operator /= (const T &);
|
|
40
|
+
|
|
41
|
+
INLINE T real() const { return a; }
|
|
42
|
+
INLINE T imag() const { return b; }
|
|
43
|
+
|
|
44
|
+
INLINE const MyComplex<T> operator - () const;
|
|
45
|
+
INLINE const T & operator [] (const int) const;
|
|
46
|
+
INLINE T & operator [] (const int);
|
|
47
|
+
|
|
48
|
+
std::ofstream & saveBin(std::ofstream &) const;
|
|
49
|
+
std::ifstream & loadBin(std::ifstream &);
|
|
50
|
+
|
|
51
|
+
INLINE T normalize(void);
|
|
52
|
+
|
|
53
|
+
INLINE ~MyComplex(void) { }
|
|
54
|
+
|
|
55
|
+
union
|
|
56
|
+
{
|
|
57
|
+
T V[D];
|
|
58
|
+
struct
|
|
59
|
+
{
|
|
60
|
+
T a, b;
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
template <class T>
|
|
67
|
+
INLINE const T absSq(const MyComplex<T> &A)
|
|
68
|
+
{
|
|
69
|
+
return A.a*A.a + A.b*A.b;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
template <class T>
|
|
73
|
+
INLINE const T arg(const MyComplex<T> &A)
|
|
74
|
+
{
|
|
75
|
+
return atan2(A.b, A.a);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
template <class T>
|
|
79
|
+
const MyComplex<T> conj(const MyComplex<T> &A)
|
|
80
|
+
{
|
|
81
|
+
return MyComplex<T>(A.a, -A.b);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
template <class T>
|
|
85
|
+
INLINE const T re(const MyComplex<T> &A)
|
|
86
|
+
{
|
|
87
|
+
return A.a;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
template <class T>
|
|
91
|
+
INLINE const T im(const MyComplex<T> &A)
|
|
92
|
+
{
|
|
93
|
+
return A.b;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
template <class T>
|
|
97
|
+
INLINE const T real(const MyComplex<T> &A)
|
|
98
|
+
{
|
|
99
|
+
return A.a;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
template <class T>
|
|
103
|
+
INLINE const T imag(const MyComplex<T> &A)
|
|
104
|
+
{
|
|
105
|
+
return A.b;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
template <class T>
|
|
110
|
+
INLINE MyComplex<T> sqrt(const MyComplex<T> &C)
|
|
111
|
+
{
|
|
112
|
+
T l = abs(C);
|
|
113
|
+
T p = 0.5*arg(C);
|
|
114
|
+
|
|
115
|
+
return MyComplex<T>(l*cos(p), l*sin(p));
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
template <class T>
|
|
119
|
+
INLINE const T abs(const MyComplex<T> &A)
|
|
120
|
+
{
|
|
121
|
+
return std::sqrt(A.a*A.a + A.b*A.b);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
using std::exp;
|
|
125
|
+
|
|
126
|
+
/*
|
|
127
|
+
INLINE double exp (double a)
|
|
128
|
+
{
|
|
129
|
+
return std::exp(a);
|
|
130
|
+
}
|
|
131
|
+
*/
|
|
132
|
+
|
|
133
|
+
template <class T>
|
|
134
|
+
INLINE MyComplex<T> exp(const MyComplex<T> &C)
|
|
135
|
+
{
|
|
136
|
+
T k = exp(C.a);
|
|
137
|
+
return MyComplex<T>(cos(C.b)*k, sin(C.b)*k);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
template <class T>
|
|
141
|
+
INLINE MyComplex<T> pow(const MyComplex<T> &C, const T &m)
|
|
142
|
+
{
|
|
143
|
+
T l = pow(abs(C), m);
|
|
144
|
+
T p = m*arg(C);
|
|
145
|
+
|
|
146
|
+
return MyComplex<T>(l*cos(p), l*sin(p));
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
template <class T>
|
|
150
|
+
INLINE MyComplex<T> pow(const T &a, const MyComplex<T> &C)
|
|
151
|
+
{
|
|
152
|
+
T p = pow(a, C.a);
|
|
153
|
+
T l = log(C.a);
|
|
154
|
+
|
|
155
|
+
return MyComplex<T>(p*cos(C.b*l), p*sin(C.b*l));
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
template <class T>
|
|
159
|
+
std::ostream & operator << (std::ostream &vout, const MyComplex<T> &Q)
|
|
160
|
+
{
|
|
161
|
+
return vout << "" << std::setw(14) << Q.a << " + " << std::setw(14) << Q.b << "i";
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
template <class T>
|
|
165
|
+
INLINE const MyComplex<T> operator + (const T &l, const MyComplex<T> &R)
|
|
166
|
+
{
|
|
167
|
+
return MyComplex<T>(l + R.a, R.b);
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
template <class T>
|
|
171
|
+
INLINE const MyComplex<T> operator - (const T &l, const MyComplex<T> &R)
|
|
172
|
+
{
|
|
173
|
+
return MyComplex<T>(l - R.a, -R.b);
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
template <class T>
|
|
177
|
+
INLINE const MyComplex<T> operator * (const T &l, const MyComplex<T> &R)
|
|
178
|
+
{
|
|
179
|
+
return MyComplex<T>(l*R.a, l*R.b);
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
template <class T>
|
|
183
|
+
INLINE const MyComplex<T> operator / (const T &l, const MyComplex<T> &R)
|
|
184
|
+
{
|
|
185
|
+
T z = absSq(R);
|
|
186
|
+
return MyComplex<T>(l*R.a/z, -l*R.b/z);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
template <class T>
|
|
190
|
+
INLINE const MyComplex<T> & MyComplex<T>::set(const T &sa, const T &sb)
|
|
191
|
+
{
|
|
192
|
+
a = sa; b = sb;
|
|
193
|
+
return *this;
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
template <class T>
|
|
197
|
+
INLINE const MyComplex<T> MyComplex<T>::operator + (const MyComplex<T> &R) const
|
|
198
|
+
{
|
|
199
|
+
return MyComplex<T>(a + R.a, b + R.b);
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
template <class T>
|
|
203
|
+
INLINE const MyComplex<T> MyComplex<T>::operator - (const MyComplex<T> &R) const
|
|
204
|
+
{
|
|
205
|
+
return MyComplex<T>(a - R.a, b - R.b);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
template <class T>
|
|
209
|
+
INLINE const MyComplex<T> MyComplex<T>::operator * (const MyComplex<T> &R) const
|
|
210
|
+
{
|
|
211
|
+
return MyComplex<T>(a*R.a - b*R.b, a*R.b + b*R.a);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
template <class T>
|
|
215
|
+
INLINE const MyComplex<T> MyComplex<T>::operator / (const MyComplex<T> &R) const
|
|
216
|
+
{
|
|
217
|
+
T z = abs(R);
|
|
218
|
+
return MyComplex<T>((a*R.a + b*R.b)/z, (b*R.a - a*R.b)/z);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
template <class T>
|
|
222
|
+
INLINE const MyComplex<T> MyComplex<T>::operator + (const T &r) const
|
|
223
|
+
{
|
|
224
|
+
return MyComplex<T>(a + r, b);
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
template <class T>
|
|
228
|
+
INLINE const MyComplex<T> MyComplex<T>::operator - (const T &r) const
|
|
229
|
+
{
|
|
230
|
+
return MyComplex<T>(a - r, b);
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
template <class T>
|
|
234
|
+
INLINE const MyComplex<T> MyComplex<T>::operator * (const T &r) const
|
|
235
|
+
{
|
|
236
|
+
return MyComplex<T>(a*r, b*r);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
template <class T>
|
|
240
|
+
INLINE const MyComplex<T> MyComplex<T>::operator / (const T &r) const
|
|
241
|
+
{
|
|
242
|
+
return MyComplex<T>(a/r, b/r);
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
template <class T>
|
|
246
|
+
INLINE const MyComplex<T> & MyComplex<T>::operator = (const MyComplex<T> &R)
|
|
247
|
+
{
|
|
248
|
+
return set(R.a, R.b);
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
template <class T>
|
|
252
|
+
INLINE const MyComplex<T> & MyComplex<T>::operator += (const MyComplex<T> &R)
|
|
253
|
+
{
|
|
254
|
+
return set(a + R.a, b + R.b);
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
template <class T>
|
|
258
|
+
INLINE const MyComplex<T> & MyComplex<T>::operator -= (const MyComplex<T> &R)
|
|
259
|
+
{
|
|
260
|
+
return set(a - R.a, b - R.b);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
template <class T>
|
|
264
|
+
INLINE const MyComplex<T> & MyComplex<T>::operator *= (const MyComplex<T> &R)
|
|
265
|
+
{
|
|
266
|
+
return set(a*R.a - a*R.b, a*R.b + b*R.a);
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
template <class T>
|
|
270
|
+
INLINE const MyComplex<T> & MyComplex<T>::operator /= (const MyComplex<T> &R)
|
|
271
|
+
{
|
|
272
|
+
T z = abs(R);
|
|
273
|
+
return set((a*R.a + a*R.b)/z, (b*R.a - a*R.b)/z);
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
template <class T>
|
|
277
|
+
INLINE const MyComplex<T> & MyComplex<T>::operator = (const T &r)
|
|
278
|
+
{
|
|
279
|
+
return set(r, static_cast<T>(0));
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
template <class T>
|
|
283
|
+
INLINE const MyComplex<T> & MyComplex<T>::operator += (const T &r)
|
|
284
|
+
{
|
|
285
|
+
return set(a + r, b);
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
template <class T>
|
|
289
|
+
INLINE const MyComplex<T> & MyComplex<T>::operator -= (const T &r)
|
|
290
|
+
{
|
|
291
|
+
return set(a - r, b);
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
template <class T>
|
|
295
|
+
INLINE const MyComplex<T> & MyComplex<T>::operator *= (const T &r)
|
|
296
|
+
{
|
|
297
|
+
return set(a*r, b*r);
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
template <class T>
|
|
301
|
+
INLINE const MyComplex<T> & MyComplex<T>::operator /= (const T &r)
|
|
302
|
+
{
|
|
303
|
+
return set(a/r, b/r);
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
template <class T>
|
|
307
|
+
INLINE const MyComplex <T> MyComplex<T>::operator - () const
|
|
308
|
+
{
|
|
309
|
+
return MyComplex(-a, -b);
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
template <class T>
|
|
313
|
+
INLINE const T & MyComplex<T>::operator [] (const int en) const
|
|
314
|
+
{
|
|
315
|
+
return V[en];
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
template <class T>
|
|
319
|
+
INLINE T & MyComplex<T>::operator [] (const int en)
|
|
320
|
+
{
|
|
321
|
+
return V[en];
|
|
322
|
+
}
|
|
323
|
+
|
|
324
|
+
template <class T>
|
|
325
|
+
inline std::ofstream & MyComplex<T>::saveBin(std::ofstream &savf) const
|
|
326
|
+
{
|
|
327
|
+
savf.write((char *)V, D*sizeof(T));
|
|
328
|
+
return savf;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
template <class T>
|
|
332
|
+
inline std::ifstream & MyComplex<T>::loadBin(std::ifstream &loaf)
|
|
333
|
+
{
|
|
334
|
+
loaf.read((char *)V, D*sizeof(T));
|
|
335
|
+
return loaf;
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
INLINE bool operator== (MyComplex<double> a, MyComplex<double> b)
|
|
339
|
+
{
|
|
340
|
+
return (real(a) == real(b)) && (imag(a) == imag(b));
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
|
|
344
|
+
|
|
345
|
+
template <class T>
|
|
346
|
+
INLINE T MyComplex<T>::normalize(void)
|
|
347
|
+
{
|
|
348
|
+
T l = sqrt(a*a + b*b);
|
|
349
|
+
|
|
350
|
+
if(fabs(l) > (T)0)
|
|
351
|
+
{
|
|
352
|
+
a /= l;
|
|
353
|
+
b /= l;
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
return l;
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
#endif
|