ngsolve 6.2.2608.post18.dev0__cp315-cp315-win_amd64.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.
- netgen/include/HCTspace.hpp +29 -0
- netgen/include/Hddf.hpp +45 -0
- netgen/include/JKMspace.hpp +189 -0
- netgen/include/acceleratesparseinverse.hpp +55 -0
- netgen/include/analytic_integrals.hpp +12 -0
- netgen/include/arnoldi.hpp +55 -0
- netgen/include/bandmatrix.hpp +334 -0
- netgen/include/basematrix.hpp +916 -0
- netgen/include/basescalar.hpp +45 -0
- netgen/include/basevector.hpp +1445 -0
- netgen/include/bdbequations.hpp +2867 -0
- netgen/include/bdbintegrator.hpp +1660 -0
- netgen/include/bem_diffops.hpp +189 -0
- netgen/include/bessel.hpp +1064 -0
- netgen/include/bilinearform.hpp +1125 -0
- netgen/include/bla.hpp +33 -0
- netgen/include/blockjacobi.hpp +351 -0
- netgen/include/bspline.hpp +116 -0
- netgen/include/calcinverse.hpp +152 -0
- netgen/include/cg.hpp +367 -0
- netgen/include/chebyshev.hpp +43 -0
- netgen/include/cholesky.hpp +720 -0
- netgen/include/clapack.h +7254 -0
- netgen/include/code_generation.hpp +301 -0
- netgen/include/coefficient.hpp +2127 -0
- netgen/include/coefficient_impl.hpp +19 -0
- netgen/include/coefficient_stdmath.hpp +212 -0
- netgen/include/commutingAMG.hpp +99 -0
- netgen/include/comp.hpp +79 -0
- netgen/include/compatibility.hpp +41 -0
- netgen/include/complex_wrapper.hpp +63 -0
- netgen/include/compressedfespace.hpp +113 -0
- netgen/include/contact.hpp +305 -0
- netgen/include/device_blockgemv.hpp +104 -0
- netgen/include/device_blockgs.hpp +84 -0
- netgen/include/device_blockjacobi.hpp +64 -0
- netgen/include/device_diagonalmatrix.hpp +104 -0
- netgen/include/device_ebe.hpp +50 -0
- netgen/include/device_ebeconst.hpp +81 -0
- netgen/include/device_sparsecholesky.hpp +89 -0
- netgen/include/device_sparsematrix.hpp +95 -0
- netgen/include/devicevector.hpp +433 -0
- netgen/include/diagonalmatrix.hpp +161 -0
- netgen/include/differentialoperator.hpp +289 -0
- netgen/include/diffop.hpp +1384 -0
- netgen/include/diffop_impl.hpp +338 -0
- netgen/include/diffopwithfactor.hpp +164 -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 +597 -0
- netgen/include/elementbyelement.hpp +195 -0
- netgen/include/elementtopology.hpp +1810 -0
- netgen/include/elementtransformation.hpp +342 -0
- netgen/include/evalfunc.hpp +405 -0
- netgen/include/expr.hpp +1791 -0
- netgen/include/facetfe.hpp +155 -0
- netgen/include/facetfespace.hpp +182 -0
- netgen/include/facethofe.hpp +112 -0
- netgen/include/facetsurffespace.hpp +112 -0
- netgen/include/fe_interfaces.hpp +32 -0
- netgen/include/fem.hpp +88 -0
- netgen/include/fesconvert.hpp +14 -0
- netgen/include/fespace.hpp +1453 -0
- netgen/include/finiteelement.hpp +286 -0
- netgen/include/fmminterface.hpp +92 -0
- netgen/include/globalinterfacespace.hpp +78 -0
- netgen/include/globalspace.hpp +115 -0
- netgen/include/gpu_btdtb.hpp +973 -0
- netgen/include/gpukernel.h +554 -0
- netgen/include/gpukernel.hpp +37 -0
- netgen/include/gpuwrapper.hpp +460 -0
- netgen/include/gridfunction.hpp +560 -0
- netgen/include/h1amg.hpp +133 -0
- netgen/include/h1hofe.hpp +192 -0
- netgen/include/h1hofe_impl.hpp +1284 -0
- netgen/include/h1hofefo.hpp +152 -0
- netgen/include/h1hofefo_impl.hpp +185 -0
- netgen/include/h1hofespace.hpp +167 -0
- netgen/include/h1lofe.hpp +1250 -0
- netgen/include/h1lumping.hpp +41 -0
- netgen/include/hcurl_equations.hpp +1511 -0
- netgen/include/hcurlcurlfe.hpp +2275 -0
- netgen/include/hcurlcurlfespace.hpp +78 -0
- netgen/include/hcurlfe.hpp +259 -0
- netgen/include/hcurlfe_utils.hpp +107 -0
- netgen/include/hcurlfes.hpp +142 -0
- netgen/include/hcurlhdiv_dshape.hpp +792 -0
- netgen/include/hcurlhofe.hpp +175 -0
- netgen/include/hcurlhofe_impl.hpp +1892 -0
- netgen/include/hcurlhofespace.hpp +193 -0
- netgen/include/hcurllofe.hpp +1159 -0
- netgen/include/hdiv_equations.hpp +980 -0
- netgen/include/hdivdiv_equations.hpp +297 -0
- netgen/include/hdivdivfe.hpp +3020 -0
- netgen/include/hdivdivsurfacespace.hpp +76 -0
- netgen/include/hdivfe.hpp +231 -0
- netgen/include/hdivfe_utils.hpp +747 -0
- netgen/include/hdivfes.hpp +75 -0
- netgen/include/hdivhofe.hpp +501 -0
- netgen/include/hdivhofe_impl.hpp +1304 -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 +77 -0
- netgen/include/integralkernel.hpp +73 -0
- netgen/include/integrator.hpp +2175 -0
- netgen/include/integratorcf.hpp +253 -0
- netgen/include/interpolate.hpp +49 -0
- netgen/include/intrule.hpp +2582 -0
- netgen/include/intrules_SauterSchwab.hpp +66 -0
- netgen/include/irspace.hpp +49 -0
- netgen/include/jacobi.hpp +160 -0
- netgen/include/kernels.hpp +783 -0
- netgen/include/l2hofe.hpp +197 -0
- netgen/include/l2hofe_impl.hpp +564 -0
- netgen/include/l2hofefo.hpp +463 -0
- netgen/include/l2hofespace.hpp +351 -0
- netgen/include/la.hpp +48 -0
- netgen/include/linearform.hpp +284 -0
- netgen/include/matrix.hpp +2547 -0
- netgen/include/memusage.hpp +62 -0
- netgen/include/meshaccess.hpp +1418 -0
- netgen/include/mgpre.hpp +197 -0
- netgen/include/mp_coefficient.hpp +145 -0
- netgen/include/mptools.hpp +2562 -0
- netgen/include/multigrid.hpp +41 -0
- netgen/include/multivector.hpp +447 -0
- netgen/include/mumpsinverse.hpp +181 -0
- netgen/include/ng_lapack.hpp +1706 -0
- netgen/include/ngblas.hpp +1262 -0
- netgen/include/ngs_defines.hpp +30 -0
- netgen/include/ngs_stdcpp_include.hpp +104 -0
- netgen/include/ngs_utils.hpp +105 -0
- netgen/include/ngsobject.hpp +1010 -0
- netgen/include/ngstd.hpp +70 -0
- netgen/include/nodalhofe.hpp +100 -0
- netgen/include/nodalhofe_impl.hpp +141 -0
- netgen/include/normalfacetfe.hpp +229 -0
- netgen/include/normalfacetfespace.hpp +98 -0
- netgen/include/normalfacetsurfacefespace.hpp +84 -0
- netgen/include/order.hpp +243 -0
- netgen/include/parallel_matrices.hpp +222 -0
- netgen/include/paralleldofs.hpp +340 -0
- netgen/include/parallelngs.hpp +23 -0
- netgen/include/parallelvector.hpp +277 -0
- netgen/include/pardisoinverse.hpp +202 -0
- netgen/include/periodic.hpp +133 -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 +684 -0
- netgen/include/prolongation.hpp +386 -0
- netgen/include/python_comp.hpp +106 -0
- netgen/include/python_fem.hpp +88 -0
- netgen/include/python_linalg.hpp +58 -0
- netgen/include/python_ngstd.hpp +386 -0
- netgen/include/recursive_pol.hpp +4900 -0
- netgen/include/recursive_pol_tet.hpp +395 -0
- netgen/include/recursive_pol_trig.hpp +492 -0
- netgen/include/reorderedfespace.hpp +100 -0
- netgen/include/sample_sort.hpp +105 -0
- netgen/include/scalarfe.hpp +340 -0
- netgen/include/shapefunction_utils.hpp +113 -0
- netgen/include/simd_complex.hpp +409 -0
- netgen/include/smoother.hpp +259 -0
- netgen/include/solve.hpp +92 -0
- netgen/include/sparsecholesky.hpp +329 -0
- netgen/include/sparsefactorization_interface.hpp +275 -0
- netgen/include/sparsematrix.hpp +974 -0
- netgen/include/sparsematrix_dyn.hpp +88 -0
- netgen/include/sparsematrix_impl.hpp +1096 -0
- netgen/include/special_matrix.hpp +398 -0
- netgen/include/specialelement.hpp +142 -0
- netgen/include/specialelementgroup.hpp +41 -0
- netgen/include/stringops.hpp +12 -0
- netgen/include/superluinverse.hpp +136 -0
- netgen/include/symbolicintegrator.hpp +955 -0
- netgen/include/symmetricmatrix.hpp +144 -0
- netgen/include/tangentialfacetfe.hpp +315 -0
- netgen/include/tangentialfacetfespace.hpp +91 -0
- netgen/include/tensor.hpp +566 -0
- netgen/include/tensorcoefficient.hpp +447 -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/tinybla.h +2025 -0
- netgen/include/tinybla.hpp +17 -0
- netgen/include/tpdiffop.hpp +464 -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 +1030 -0
- netgen/include/umfpackinverse.hpp +149 -0
- netgen/include/vector.hpp +1543 -0
- netgen/include/voxelcoefficientfunction.hpp +41 -0
- netgen/include/vtkoutput.hpp +201 -0
- netgen/include/vvector.hpp +216 -0
- netgen/include/webgui.hpp +91 -0
- netgen/lib/__init__.py +10 -0
- netgen/lib/libngsolve.lib +0 -0
- netgen/libngsolve.dll +4 -0
- ngsolve/TensorProductTools.py +210 -0
- ngsolve/__console.py +94 -0
- ngsolve/__expr.py +181 -0
- ngsolve/__init__.py +188 -0
- ngsolve/_scikit_build_core_dependencies.py +30 -0
- ngsolve/bvp.py +78 -0
- ngsolve/cmake/NGSolveConfig.cmake +98 -0
- ngsolve/cmake/ngsolve-targets-release.cmake +19 -0
- ngsolve/cmake/ngsolve-targets.cmake +172 -0
- ngsolve/config/__init__.py +1 -0
- ngsolve/config/__main__.py +4 -0
- ngsolve/config/config.py +145 -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 +20 -0
- ngsolve/eigenvalues.py +364 -0
- ngsolve/gpu.py +79 -0
- ngsolve/internal.py +89 -0
- ngsolve/krylovspace.py +1449 -0
- ngsolve/lazy_solve.py +72 -0
- ngsolve/meshes.py +752 -0
- ngsolve/ngs2petsc.py +310 -0
- ngsolve/ngscuda.py +23 -0
- ngsolve/ngscxx.py +42 -0
- ngsolve/ngslib.lib +0 -0
- ngsolve/ngslib.pyd +0 -0
- ngsolve/ngsmetal.py +5 -0
- ngsolve/nonlinearsolvers.py +212 -0
- ngsolve/preconditioners.py +12 -0
- ngsolve/solve_implementation.py +174 -0
- ngsolve/solvers/__init__.py +10 -0
- ngsolve/solvers/cudss.py +157 -0
- ngsolve/solvers/mkl_pardiso.py +326 -0
- ngsolve/timestepping.py +185 -0
- ngsolve/timing.py +108 -0
- ngsolve/utils.py +168 -0
- ngsolve/webgui.py +653 -0
- ngsolve-6.2.2608.post18.dev0.data/scripts/ngscxx.bat +5 -0
- ngsolve-6.2.2608.post18.dev0.data/scripts/ngsld.bat +8 -0
- ngsolve-6.2.2608.post18.dev0.data/scripts/ngsolve.tcl +648 -0
- ngsolve-6.2.2608.post18.dev0.dist-info/DELVEWHEEL +2 -0
- ngsolve-6.2.2608.post18.dev0.dist-info/METADATA +15 -0
- ngsolve-6.2.2608.post18.dev0.dist-info/RECORD +289 -0
- ngsolve-6.2.2608.post18.dev0.dist-info/WHEEL +5 -0
- ngsolve-6.2.2608.post18.dev0.dist-info/licenses/LICENSE +504 -0
- ngsolve.libs/msvcp140.dll +0 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
#ifndef HCTSPACE_HPP
|
|
2
|
+
#define HCTSPACE_HPP
|
|
3
|
+
|
|
4
|
+
#include "fespace.hpp"
|
|
5
|
+
|
|
6
|
+
namespace ngcomp
|
|
7
|
+
{
|
|
8
|
+
class HCT_FESpace : public FESpace
|
|
9
|
+
{
|
|
10
|
+
protected:
|
|
11
|
+
int order;
|
|
12
|
+
Array<int> first_edge_dof;
|
|
13
|
+
Array<int> first_element_dof;
|
|
14
|
+
|
|
15
|
+
public:
|
|
16
|
+
HCT_FESpace(shared_ptr<MeshAccess> ama, const Flags &flags, bool checkflags = false);
|
|
17
|
+
~HCT_FESpace() override = default;
|
|
18
|
+
static DocInfo GetDocu();
|
|
19
|
+
void Update() override;
|
|
20
|
+
void FinalizeUpdate() override;
|
|
21
|
+
std::map<ELEMENT_TYPE, IntegrationRule> GetIntegrationRules() const;
|
|
22
|
+
|
|
23
|
+
void GetDofNrs(ElementId ei, Array<int> &dnums) const override;
|
|
24
|
+
FiniteElement &GetFE(ElementId ei, Allocator &alloc) const override;
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
#endif // HCTSPACE_HPP
|
netgen/include/Hddf.hpp
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
#ifndef HDIVDIVFACETFESPACE_HPP
|
|
2
|
+
#define HDIVDIVFACETFESPACE_HPP
|
|
3
|
+
|
|
4
|
+
/*
|
|
5
|
+
authors: Edoardo Bonetti, Joachim Schoeberl
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
#include "fespace.hpp"
|
|
9
|
+
|
|
10
|
+
namespace ngcomp
|
|
11
|
+
{
|
|
12
|
+
|
|
13
|
+
// class HDivDivFacetSpace;
|
|
14
|
+
// class HDivDivFacetElement; // forward declaration
|
|
15
|
+
|
|
16
|
+
class HDivDivFacetSpace : public FESpace
|
|
17
|
+
{
|
|
18
|
+
private:
|
|
19
|
+
int order;
|
|
20
|
+
int dofs_per_face; // for uniform order
|
|
21
|
+
int dofs_per_edge;
|
|
22
|
+
// bool bubble = true;
|
|
23
|
+
bool JKM = false;
|
|
24
|
+
|
|
25
|
+
int first_facet_dof;
|
|
26
|
+
// Array<int> first_face_dof; // for variable order (TODO)
|
|
27
|
+
// Array<int> first_edge_dof; // for variable order (TODO)
|
|
28
|
+
|
|
29
|
+
public:
|
|
30
|
+
HDivDivFacetSpace(shared_ptr<MeshAccess> ama, const Flags &flags);
|
|
31
|
+
|
|
32
|
+
string GetClassName() const override { return "HDivDivFacetSpace"; }
|
|
33
|
+
|
|
34
|
+
static DocInfo GetDocu();
|
|
35
|
+
|
|
36
|
+
void Update() override;
|
|
37
|
+
|
|
38
|
+
void GetDofNrs(ElementId ei, Array<DofId> &dnums) const override;
|
|
39
|
+
|
|
40
|
+
FiniteElement &GetFE(ElementId ei, Allocator &alloc) const override;
|
|
41
|
+
shared_ptr<FESpace> GetDivConstraintSpace() const;
|
|
42
|
+
};
|
|
43
|
+
}; // namespace ngcomp
|
|
44
|
+
|
|
45
|
+
#endif
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
#ifndef JKMSPACE_HPP
|
|
2
|
+
#define JKMSPACE_HPP
|
|
3
|
+
|
|
4
|
+
#include "fespace.hpp"
|
|
5
|
+
#include "../fem/hdivdivfe.hpp"
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
namespace ngcore
|
|
9
|
+
{
|
|
10
|
+
template<int D, typename SCAL>
|
|
11
|
+
NETGEN_INLINE bool operator< (const AutoDiff<D,SCAL> & x, const AutoDiff<D,SCAL> & y)
|
|
12
|
+
{
|
|
13
|
+
return x.Value() < y.Value();
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
namespace ngfem
|
|
19
|
+
{
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
class JKMFE_Triangle : public T_HDivDivFE<ET_TRIG,JKMFE_Triangle>
|
|
23
|
+
{
|
|
24
|
+
static constexpr int DIM=2;
|
|
25
|
+
typedef T_HDivDivFE<ET_TRIG,JKMFE_Triangle> BASE;
|
|
26
|
+
public:
|
|
27
|
+
|
|
28
|
+
JKMFE_Triangle(int aorder)
|
|
29
|
+
: BASE(15 /* not used? */, aorder)
|
|
30
|
+
{
|
|
31
|
+
ndof = 15;
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
/*
|
|
35
|
+
// check n-continuity:
|
|
36
|
+
double eps = 1e-8;
|
|
37
|
+
IntegrationPoint ip1(eps, eps/2);
|
|
38
|
+
IntegrationPoint ip2(eps/2, eps);
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
Matrix shape1(15, 4);
|
|
42
|
+
Matrix shape2(15, 4);
|
|
43
|
+
const ElementTransformation & trafo = GetFEElementTransformation (ET_TRIG);
|
|
44
|
+
MappedIntegrationPoint<2,2> mip1(ip1, trafo);
|
|
45
|
+
MappedIntegrationPoint<2,2> mip2(ip2, trafo);
|
|
46
|
+
|
|
47
|
+
CalcMappedShape_Matrix (mip1, shape1);
|
|
48
|
+
CalcMappedShape_Matrix (mip2, shape2);
|
|
49
|
+
|
|
50
|
+
cout << "shape1 = " << shape1 << endl;
|
|
51
|
+
cout << "shape2 = " << shape2 << endl;
|
|
52
|
+
Vec<2> n {1,-1};
|
|
53
|
+
|
|
54
|
+
Matrix shape1n(15,2), shape2n(15,2);
|
|
55
|
+
|
|
56
|
+
for (int i = 0; i < ndof; i++)
|
|
57
|
+
{
|
|
58
|
+
shape1n.Row(i) = shape1.Row(i).AsMatrix(2,2) * n;
|
|
59
|
+
shape2n.Row(i) = shape2.Row(i).AsMatrix(2,2) * n;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
cout << "shape1n = " << shape1n << endl;
|
|
63
|
+
cout << "shape2n = " << shape2n << endl;
|
|
64
|
+
cout << "diff = " << shape1n-shape2n << endl;
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
throw ExceptionNOSIMD ("JKM trig, stop");
|
|
68
|
+
*/
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
virtual ~JKMFE_Triangle() { }
|
|
72
|
+
ELEMENT_TYPE ElementType() const override { return ET_TRIG; }
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
template <typename T, typename TFA>
|
|
76
|
+
void T_CalcShape (TIP<DIM,AutoDiff<DIM,T>> tip, TFA & shape) const
|
|
77
|
+
{
|
|
78
|
+
Cast() -> T_CalcShape (TIP<DIM,AutoDiffDiff<DIM,T>> (tip), shape);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
template <typename T, typename TFA>
|
|
82
|
+
void T_CalcShape (TIP<2,AutoDiffDiff<2,T>> ip, TFA & shape) const
|
|
83
|
+
{
|
|
84
|
+
if constexpr (std::is_same<T,double>()) // no SIMD
|
|
85
|
+
{
|
|
86
|
+
|
|
87
|
+
typedef AutoDiff<2, T> Tx;
|
|
88
|
+
Tx x{ip.x}, y{ip.y};
|
|
89
|
+
Tx lam[3] = { x, y, 1-x-y };
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
int minlam = 0;
|
|
93
|
+
if (lam[1] < lam[minlam]) minlam = 1;
|
|
94
|
+
if (lam[2] < lam[minlam]) minlam = 2;
|
|
95
|
+
|
|
96
|
+
int v0 = (minlam + 1) % 3;
|
|
97
|
+
int v1 = (minlam + 2) % 3;
|
|
98
|
+
int vop = 3-v0-v1;
|
|
99
|
+
int edgenr = -1;
|
|
100
|
+
switch (vop)
|
|
101
|
+
{
|
|
102
|
+
case 0: edgenr = 1; break;
|
|
103
|
+
case 1: edgenr = 0; break;
|
|
104
|
+
default: edgenr = 2; break;
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
int v0orig = v0;
|
|
108
|
+
if (vnums[v0] > vnums[v1]) { Swap(v0,v1); }
|
|
109
|
+
|
|
110
|
+
Tx lamloc[3] = { lam[v0]-lam[minlam],
|
|
111
|
+
lam[v1]-lam[minlam],
|
|
112
|
+
lam[minlam]*3 };
|
|
113
|
+
|
|
114
|
+
// set to 0:
|
|
115
|
+
for (int i = 0; i < ndof; i++)
|
|
116
|
+
shape[i] = T_SymRotRot_Dl2xDl1_v (x,x, Tx(0.));
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
// edge shape functions:
|
|
120
|
+
shape[2*edgenr+0] = T_SymRotRot_Dl2xDl1_v (lamloc[1], lamloc[1], lamloc[0]);
|
|
121
|
+
shape[2*edgenr+1] = T_SymRotRot_Dl2xDl1_v (lamloc[0], lamloc[0], lamloc[1]);
|
|
122
|
+
|
|
123
|
+
int ii = 6;
|
|
124
|
+
|
|
125
|
+
// shape functions on internal edges, on boundary vertex:
|
|
126
|
+
for (int i = 0; i < 3; i++)
|
|
127
|
+
{
|
|
128
|
+
double sign = (v0orig==i) ? 1 : -1;
|
|
129
|
+
// the HHJ basis:
|
|
130
|
+
if (v0 == i)
|
|
131
|
+
{
|
|
132
|
+
shape[ii] = T_SymRotRot_Dl2xDl1_v (lamloc[0]-2*lamloc[1], lamloc[2], lamloc[0]);
|
|
133
|
+
shape[ii+1] = T_SymRotRot_Dl2xDl1_v (lamloc[1], lamloc[2], sign*lamloc[0]);
|
|
134
|
+
}
|
|
135
|
+
if (v1 == i)
|
|
136
|
+
{
|
|
137
|
+
shape[ii] = T_SymRotRot_Dl2xDl1_v (lamloc[1]-2*lamloc[0], lamloc[2], lamloc[1]);
|
|
138
|
+
shape[ii+1] = T_SymRotRot_Dl2xDl1_v (lamloc[0], lamloc[2], sign*lamloc[1]);
|
|
139
|
+
}
|
|
140
|
+
ii+=2;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
// 3 shape functios for central node
|
|
144
|
+
for (int i = 0; i < 3; i++)
|
|
145
|
+
shape[ii++] = T_SymRotRot_Dl2xDl1_v (lam[i], lam[i], lamloc[2]);
|
|
146
|
+
}
|
|
147
|
+
else
|
|
148
|
+
throw ExceptionNOSIMD ("JKM trig, no simd");
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
template <typename MIP, typename TFA>
|
|
153
|
+
void CalcDualShape2 (const MIP & mip, TFA & shape) const
|
|
154
|
+
{
|
|
155
|
+
throw Exception ("Hdivdivfe not implementend for element type");
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
namespace ngcomp
|
|
164
|
+
{
|
|
165
|
+
|
|
166
|
+
class JKM_FESpace : public FESpace
|
|
167
|
+
{
|
|
168
|
+
protected:
|
|
169
|
+
int order;
|
|
170
|
+
Array<int> first_edge_dof;
|
|
171
|
+
Array<int> first_element_dof;
|
|
172
|
+
|
|
173
|
+
public:
|
|
174
|
+
JKM_FESpace(shared_ptr<MeshAccess> ama, const Flags &flags, bool checkflags = false);
|
|
175
|
+
~JKM_FESpace() override = default;
|
|
176
|
+
static DocInfo GetDocu();
|
|
177
|
+
void Update() override;
|
|
178
|
+
void FinalizeUpdate() override;
|
|
179
|
+
std::map<ELEMENT_TYPE, IntegrationRule> GetIntegrationRules(int bonus_intorder=2) const;
|
|
180
|
+
|
|
181
|
+
void GetDofNrs(ElementId ei, Array<int> &dnums) const override;
|
|
182
|
+
void GetDofNrs (NodeId ni, Array<DofId> & dnums) const override;
|
|
183
|
+
|
|
184
|
+
FiniteElement &GetFE(ElementId ei, Allocator &alloc) const override;
|
|
185
|
+
};
|
|
186
|
+
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
#endif // JKMSPACE_HPP
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
#ifndef ACCELERATESPARSEINVERSE_HPP
|
|
2
|
+
#define ACCELERATESPARSEINVERSE_HPP
|
|
3
|
+
|
|
4
|
+
#include "sparsefactorization_interface.hpp"
|
|
5
|
+
|
|
6
|
+
#ifdef USE_ACCELERATE_SPARSE
|
|
7
|
+
|
|
8
|
+
namespace ngla
|
|
9
|
+
{
|
|
10
|
+
/** Sparse direct solver backed by Apple's Accelerate Sparse Solvers.
|
|
11
|
+
|
|
12
|
+
The NGSolve matrix is converted to scalar CSC storage during Analyze().
|
|
13
|
+
Real SPD, real symmetric-indefinite, and real nonsymmetric matrices use
|
|
14
|
+
Cholesky, LDLT, and LU, respectively. Apple's LU implementation requires
|
|
15
|
+
macOS 15.5 or newer.
|
|
16
|
+
*/
|
|
17
|
+
class AccelerateSparseInverse : public SparseFactorizationInterface
|
|
18
|
+
{
|
|
19
|
+
Array<long> column_starts;
|
|
20
|
+
Array<int> row_indices;
|
|
21
|
+
Array<double> csc_values;
|
|
22
|
+
Array<size_t> value_map;
|
|
23
|
+
|
|
24
|
+
Array<size_t> pattern_first;
|
|
25
|
+
Array<int> pattern_columns;
|
|
26
|
+
|
|
27
|
+
struct AppleState;
|
|
28
|
+
unique_ptr<AppleState> apple;
|
|
29
|
+
|
|
30
|
+
void BuildCSC();
|
|
31
|
+
void RefreshValues();
|
|
32
|
+
void CheckPattern() const;
|
|
33
|
+
void Cleanup();
|
|
34
|
+
|
|
35
|
+
public:
|
|
36
|
+
explicit AccelerateSparseInverse(shared_ptr<const BaseMatrix> matrix);
|
|
37
|
+
~AccelerateSparseInverse() override;
|
|
38
|
+
|
|
39
|
+
void Analyze() override;
|
|
40
|
+
void Factor() override;
|
|
41
|
+
void Solve(const BaseVector &rhs, BaseVector &solution) const override;
|
|
42
|
+
void SolveTrans(const BaseVector &rhs, BaseVector &solution) const override;
|
|
43
|
+
|
|
44
|
+
bool SupportsUpdate() const override { return true; }
|
|
45
|
+
BaseMatrix::OperatorInfo GetOperatorInfo() const override
|
|
46
|
+
{
|
|
47
|
+
return { "Accelerate Sparse", size_t(height), size_t(width) };
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
void RegisterAccelerateSparseInverse();
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
#endif // USE_ACCELERATE_SPARSE
|
|
55
|
+
#endif // ACCELERATESPARSEINVERSE_HPP
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#include <ngstd.hpp>
|
|
2
|
+
#include <bla.hpp>
|
|
3
|
+
|
|
4
|
+
namespace ngsbem
|
|
5
|
+
{
|
|
6
|
+
using namespace ngbla;
|
|
7
|
+
|
|
8
|
+
NGS_DLL_HEADER double LaplaceSL_Polygon (FlatArray<Vec<3>> vertices, Vec<3> x);
|
|
9
|
+
NGS_DLL_HEADER Vec<3> LaplaceGradSL_Polygon (FlatArray<Vec<3>> vertices, Vec<3> x);
|
|
10
|
+
NGS_DLL_HEADER double LaplaceDL_Polygon (FlatArray<Vec<3>> vertices, Vec<3> x,
|
|
11
|
+
Vec<3> source_normal);
|
|
12
|
+
}
|
|
@@ -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
|