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,235 @@
|
|
|
1
|
+
#ifndef NGSOLVE_CONTACT_HPP
|
|
2
|
+
#define NGSOLVE_CONTACT_HPP
|
|
3
|
+
|
|
4
|
+
// #include <comp.hpp>
|
|
5
|
+
#include "gridfunction.hpp"
|
|
6
|
+
#include "bilinearform.hpp"
|
|
7
|
+
|
|
8
|
+
namespace ngcomp
|
|
9
|
+
{
|
|
10
|
+
template<int DIM>
|
|
11
|
+
struct ContactPair
|
|
12
|
+
{
|
|
13
|
+
ElementId primary_el, secondary_el;
|
|
14
|
+
IntegrationPoint primary_ip, secondary_ip;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
class GapFunction : public CoefficientFunctionNoDerivative
|
|
18
|
+
{
|
|
19
|
+
protected:
|
|
20
|
+
shared_ptr<GridFunction> displacement;
|
|
21
|
+
shared_ptr<MeshAccess> ma;
|
|
22
|
+
Region master;
|
|
23
|
+
Region other;
|
|
24
|
+
double h;
|
|
25
|
+
bool both_sides;
|
|
26
|
+
|
|
27
|
+
public:
|
|
28
|
+
GapFunction( shared_ptr<MeshAccess> ma_, Region primary_, Region secondary_)
|
|
29
|
+
: CoefficientFunctionNoDerivative(ma_->GetDimension()),
|
|
30
|
+
ma(ma_), master(primary_), other(secondary_)
|
|
31
|
+
{ }
|
|
32
|
+
|
|
33
|
+
virtual void Update(shared_ptr<GridFunction> gf, int intorder_, double h_,
|
|
34
|
+
bool both_sides) = 0;
|
|
35
|
+
void Draw();
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
template <int DIM>
|
|
39
|
+
class T_GapFunction : public GapFunction
|
|
40
|
+
{
|
|
41
|
+
unique_ptr<netgen::BoxTree<DIM, int>> searchtree;
|
|
42
|
+
public:
|
|
43
|
+
T_GapFunction( shared_ptr<MeshAccess> mesh_, Region primary_, Region secondary_)
|
|
44
|
+
: GapFunction(mesh_, primary_, secondary_)
|
|
45
|
+
{ }
|
|
46
|
+
|
|
47
|
+
void Update(shared_ptr<GridFunction> gf, int intorder_, double h, bool both_sides) override;
|
|
48
|
+
|
|
49
|
+
const netgen::BoxTree<DIM, int>& GetSearchTree() { return *searchtree; }
|
|
50
|
+
|
|
51
|
+
using GapFunction::Evaluate;
|
|
52
|
+
double Evaluate (const BaseMappedIntegrationPoint & ip) const override
|
|
53
|
+
{
|
|
54
|
+
throw Exception("Scalar evaluate of GapFunction called");
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
void Evaluate(const BaseMappedIntegrationPoint & ip,
|
|
58
|
+
FlatVector<> result) const override;
|
|
59
|
+
|
|
60
|
+
void Evaluate(const BaseMappedIntegrationRule & mir,
|
|
61
|
+
BareSliceMatrix<> result) const override;
|
|
62
|
+
|
|
63
|
+
optional<ContactPair<DIM>> CreateContactPair(const MappedIntegrationPoint<DIM-1, DIM>& mip, LocalHeap& lh, bool both_sides) const;
|
|
64
|
+
};
|
|
65
|
+
|
|
66
|
+
template<int DIM>
|
|
67
|
+
class DisplacedNormal : public CoefficientFunctionNoDerivative
|
|
68
|
+
{
|
|
69
|
+
shared_ptr<GridFunction> displacement;
|
|
70
|
+
public:
|
|
71
|
+
DisplacedNormal()
|
|
72
|
+
: CoefficientFunctionNoDerivative(DIM, false),
|
|
73
|
+
displacement(nullptr) {}
|
|
74
|
+
|
|
75
|
+
void Update(shared_ptr<GridFunction> _displacement)
|
|
76
|
+
{ displacement = _displacement; }
|
|
77
|
+
|
|
78
|
+
using CoefficientFunctionNoDerivative::Evaluate;
|
|
79
|
+
double Evaluate(const BaseMappedIntegrationPoint& ip) const override
|
|
80
|
+
{
|
|
81
|
+
throw Exception("1dim eval called for Normal");
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
void Evaluate(const BaseMappedIntegrationPoint& ir, FlatVector<> values) const override;
|
|
85
|
+
};
|
|
86
|
+
|
|
87
|
+
class ContactEnergy
|
|
88
|
+
{
|
|
89
|
+
shared_ptr<CoefficientFunction> cf;
|
|
90
|
+
shared_ptr<FESpace> fes;
|
|
91
|
+
Array<ProxyFunction*> trial_proxies;
|
|
92
|
+
Array<CoefficientFunction*> cf_gridfunctions;
|
|
93
|
+
bool deformed;
|
|
94
|
+
|
|
95
|
+
public:
|
|
96
|
+
ContactEnergy(shared_ptr<CoefficientFunction> _cf,
|
|
97
|
+
bool _deformed=false);
|
|
98
|
+
|
|
99
|
+
bool IsDeformed() const { return deformed; }
|
|
100
|
+
|
|
101
|
+
double CalcEnergy(const FiniteElement& m_fel,
|
|
102
|
+
const FiniteElement& s_fel,
|
|
103
|
+
const BaseMappedIntegrationRule& m_mir,
|
|
104
|
+
FlatVector<double> elx,
|
|
105
|
+
LocalHeap& lh);
|
|
106
|
+
|
|
107
|
+
void ApplyAdd(const FiniteElement& m_fel,
|
|
108
|
+
const FiniteElement& s_fel,
|
|
109
|
+
const BaseMappedIntegrationRule& m_mir,
|
|
110
|
+
FlatVector<double> elx,
|
|
111
|
+
FlatVector<double> ely,
|
|
112
|
+
LocalHeap& lh);
|
|
113
|
+
|
|
114
|
+
void CalcLinearizedAdd(const FiniteElement& m_fel,
|
|
115
|
+
const FiniteElement& s_fel,
|
|
116
|
+
const BaseMappedIntegrationRule& m_mir,
|
|
117
|
+
FlatVector<double> elx,
|
|
118
|
+
FlatMatrix<double> elmat,
|
|
119
|
+
LocalHeap& lh);
|
|
120
|
+
};
|
|
121
|
+
|
|
122
|
+
class ContactIntegrator
|
|
123
|
+
{
|
|
124
|
+
shared_ptr<CoefficientFunction> cf;
|
|
125
|
+
shared_ptr<FESpace> fes;
|
|
126
|
+
Array<ProxyFunction*> trial_proxies, test_proxies;
|
|
127
|
+
Array<CoefficientFunction*> cf_gridfunctions;
|
|
128
|
+
Array<shared_ptr<CoefficientFunction>> dcf_dtest; // derivatives by test-functions
|
|
129
|
+
Matrix<shared_ptr<CoefficientFunction>> ddcf_dtest_dtrial; // derivatives by test- and trial-functions
|
|
130
|
+
bool deformed;
|
|
131
|
+
public:
|
|
132
|
+
ContactIntegrator(shared_ptr<CoefficientFunction> _cf,
|
|
133
|
+
bool _deformed);
|
|
134
|
+
|
|
135
|
+
bool IsDeformed() const { return deformed; }
|
|
136
|
+
|
|
137
|
+
void ApplyAdd(const FiniteElement& m_fel,
|
|
138
|
+
const FiniteElement& s_fel,
|
|
139
|
+
const BaseMappedIntegrationRule& m_mir,
|
|
140
|
+
FlatVector<double> elx,
|
|
141
|
+
FlatVector<double> ely,
|
|
142
|
+
LocalHeap& lh);
|
|
143
|
+
|
|
144
|
+
void CalcLinearizedAdd(const FiniteElement& m_fel,
|
|
145
|
+
const FiniteElement& s_fel,
|
|
146
|
+
const BaseMappedIntegrationRule& m_mir,
|
|
147
|
+
FlatVector<double> elx,
|
|
148
|
+
FlatMatrix<double> elmat,
|
|
149
|
+
LocalHeap& lh);
|
|
150
|
+
};
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
class ContactBoundary : public std::enable_shared_from_this<ContactBoundary>,
|
|
154
|
+
netgen::UserVisualizationObject
|
|
155
|
+
{
|
|
156
|
+
shared_ptr<GapFunction> gap;
|
|
157
|
+
shared_ptr<CoefficientFunction> normal;
|
|
158
|
+
Region master, other;
|
|
159
|
+
Array<shared_ptr<ContactEnergy>> energies, undeformed_energies, deformed_energies;
|
|
160
|
+
Array<shared_ptr<ContactIntegrator>> integrators, undeformed_integrators, deformed_integrators;
|
|
161
|
+
shared_ptr<FESpace> fes_displacement;
|
|
162
|
+
shared_ptr<FESpace> fes;
|
|
163
|
+
|
|
164
|
+
// For visualization only
|
|
165
|
+
bool draw_pairs = false;
|
|
166
|
+
Array<Vec<3>> primary_points;
|
|
167
|
+
Array<Vec<3>> secondary_points;
|
|
168
|
+
bool volume, element_boundary;
|
|
169
|
+
public:
|
|
170
|
+
void Draw();
|
|
171
|
+
ContactBoundary(Region _master, Region _other, bool draw_pairs = false, bool _volume=false, bool element_boundary=false);
|
|
172
|
+
|
|
173
|
+
~ContactBoundary();
|
|
174
|
+
|
|
175
|
+
void AddEnergy(shared_ptr<CoefficientFunction> form,
|
|
176
|
+
bool deformed=false);
|
|
177
|
+
void AddIntegrator(shared_ptr<CoefficientFunction> form,
|
|
178
|
+
bool deformed=false);
|
|
179
|
+
|
|
180
|
+
// Update search tree for gap function, if bf is not
|
|
181
|
+
// nullptr, update SpecialElements of bf
|
|
182
|
+
void Update(shared_ptr<GridFunction> gf,
|
|
183
|
+
shared_ptr<BilinearForm> bf,
|
|
184
|
+
int intorder, double h, bool both_sides);
|
|
185
|
+
|
|
186
|
+
shared_ptr<CoefficientFunction> Gap() const { return gap; }
|
|
187
|
+
shared_ptr<CoefficientFunction> Normal() const { return normal; }
|
|
188
|
+
const auto& GetEnergies() const { return energies; }
|
|
189
|
+
const auto& GetEnergies(bool def) const { return def ? deformed_energies : undeformed_energies; }
|
|
190
|
+
const auto& GetIntegrators() const { return integrators; }
|
|
191
|
+
const auto& GetIntegrators(bool def) const { return def ? deformed_integrators : undeformed_integrators; }
|
|
192
|
+
shared_ptr<FESpace> GetFESpace() const { return fes; }
|
|
193
|
+
tuple<FlatArray<Vec<3>>, FlatArray<Vec<3>>> GetDrawingPairs() { return {primary_points, secondary_points}; }
|
|
194
|
+
};
|
|
195
|
+
|
|
196
|
+
template<int DIM>
|
|
197
|
+
class MPContactElement : public SpecialElement
|
|
198
|
+
{
|
|
199
|
+
// ContactPair<DIM> pair;
|
|
200
|
+
ElementId primary_ei, secondary_ei;
|
|
201
|
+
IntegrationRule primary_ir, secondary_ir;
|
|
202
|
+
shared_ptr<ContactBoundary> cb;
|
|
203
|
+
FESpace* fes;
|
|
204
|
+
GridFunction* deformation;
|
|
205
|
+
public:
|
|
206
|
+
MPContactElement(ElementId primary_ei, ElementId secondary_ei,
|
|
207
|
+
IntegrationRule primary_ir, IntegrationRule secondary_ir,
|
|
208
|
+
shared_ptr<ContactBoundary> _cb,
|
|
209
|
+
GridFunction* deformation);
|
|
210
|
+
|
|
211
|
+
void GetDofNrs(Array<DofId>& dnums) const override;
|
|
212
|
+
|
|
213
|
+
double Energy(FlatVector<double> elx,
|
|
214
|
+
LocalHeap& lh) const override;
|
|
215
|
+
|
|
216
|
+
void Apply(FlatVector<double> elx,
|
|
217
|
+
FlatVector<double> ely,
|
|
218
|
+
LocalHeap& lh) const override;
|
|
219
|
+
|
|
220
|
+
void CalcElementMatrix(FlatMatrix<double> elmat,
|
|
221
|
+
LocalHeap& lh) const override;
|
|
222
|
+
|
|
223
|
+
|
|
224
|
+
void CalcLinearizedElementMatrix(FlatVector<double> elx,
|
|
225
|
+
FlatMatrix<double> elmat,
|
|
226
|
+
LocalHeap& lh) const override;
|
|
227
|
+
|
|
228
|
+
shared_ptr<ContactBoundary> GetContactBoundary() const
|
|
229
|
+
{ return cb; }
|
|
230
|
+
};
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
} // namespace ngcomp
|
|
234
|
+
|
|
235
|
+
#endif // NGSOLVE_CONTACT_HPP
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
#ifndef FILE_NGS_DIAGONALMATRIX
|
|
2
|
+
#define FILE_NGS_DIAGONALMATRIX
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
#include "basematrix.hpp"
|
|
7
|
+
#include "vvector.hpp"
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
namespace ngla
|
|
11
|
+
{
|
|
12
|
+
|
|
13
|
+
class NGS_DLL_HEADER Projector : public BaseMatrix
|
|
14
|
+
{
|
|
15
|
+
shared_ptr<BitArray> bits;
|
|
16
|
+
bool keep_values;
|
|
17
|
+
public:
|
|
18
|
+
// projector on true / false bits
|
|
19
|
+
Projector (shared_ptr<BitArray> abits, bool akeep_values = true)
|
|
20
|
+
: bits(abits), keep_values(akeep_values) { ; }
|
|
21
|
+
|
|
22
|
+
virtual bool IsComplex() const override { return false; }
|
|
23
|
+
|
|
24
|
+
virtual int VHeight() const override { return bits->Size(); }
|
|
25
|
+
virtual int VWidth() const override { return bits->Size(); }
|
|
26
|
+
|
|
27
|
+
virtual void Mult (const BaseVector & x, BaseVector & y) const override;
|
|
28
|
+
virtual void MultTrans (const BaseVector & x, BaseVector & y) const override;
|
|
29
|
+
virtual void MultAdd (double s, const BaseVector & x, BaseVector & y) const override;
|
|
30
|
+
virtual void MultTransAdd (double s, const BaseVector & x, BaseVector & y) const override;
|
|
31
|
+
virtual void Project (BaseVector & x) const;
|
|
32
|
+
virtual void SetValues (BaseVector & x, double val) const;
|
|
33
|
+
|
|
34
|
+
bool KeepValues() const { return keep_values; }
|
|
35
|
+
shared_ptr<BitArray> Mask() const { return bits; }
|
|
36
|
+
|
|
37
|
+
virtual shared_ptr<BaseSparseMatrix> CreateSparseMatrix() const override;
|
|
38
|
+
|
|
39
|
+
AutoVector CreateRowVector() const override
|
|
40
|
+
{ throw Exception("CreateRowVector not implemented for Projector!"); }
|
|
41
|
+
AutoVector CreateColVector() const override
|
|
42
|
+
{ throw Exception("CreateColVector not implemented for Projector!"); }
|
|
43
|
+
|
|
44
|
+
AutoVector Evaluate(BaseVector & v) const override
|
|
45
|
+
{
|
|
46
|
+
auto res = v.CreateVector();
|
|
47
|
+
Mult (v, res);
|
|
48
|
+
return res;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
template <typename TM=double>
|
|
55
|
+
class NGS_DLL_HEADER DiagonalMatrix : public BaseMatrix
|
|
56
|
+
{
|
|
57
|
+
shared_ptr<VVector<TM>> diag;
|
|
58
|
+
public:
|
|
59
|
+
// typedef typename mat_traits<TM>::TV_ROW TV_ROW;
|
|
60
|
+
// typedef typename mat_traits<TM>::TV_COL TV_COL;
|
|
61
|
+
typedef typename mat_traits<TM>::TSCAL TSCAL;
|
|
62
|
+
|
|
63
|
+
DiagonalMatrix(size_t h)
|
|
64
|
+
: diag(make_shared<VVector<TM>>(h)) { }
|
|
65
|
+
DiagonalMatrix(const VVector<TM> & diag_);
|
|
66
|
+
DiagonalMatrix(shared_ptr<VVector<TM>> diag_);
|
|
67
|
+
virtual ~DiagonalMatrix();
|
|
68
|
+
|
|
69
|
+
bool IsComplex() const override { return false; }
|
|
70
|
+
TM & operator() (size_t i) { return (*diag)(i); }
|
|
71
|
+
const TM & operator() (size_t i) const { return (*diag)(i); }
|
|
72
|
+
int VHeight() const override { return diag->Size(); }
|
|
73
|
+
int VWidth() const override { return diag->Size(); }
|
|
74
|
+
|
|
75
|
+
BaseVector & AsVector() override { return *diag; }
|
|
76
|
+
const BaseVector & AsVector() const override { return *diag; }
|
|
77
|
+
ostream & Print (ostream & ost) const override;
|
|
78
|
+
|
|
79
|
+
virtual shared_ptr<BaseSparseMatrix> CreateSparseMatrix() const override;
|
|
80
|
+
|
|
81
|
+
AutoVector CreateRowVector () const override;
|
|
82
|
+
AutoVector CreateColVector () const override;
|
|
83
|
+
|
|
84
|
+
void MultAdd (double s, const BaseVector & x, BaseVector & y) const override;
|
|
85
|
+
void MultTransAdd (double s, const BaseVector & x, BaseVector & y) const override;
|
|
86
|
+
|
|
87
|
+
shared_ptr<BaseMatrix> InverseMatrix (shared_ptr<BitArray> subset = nullptr) const override;
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
template <typename TM=double>
|
|
92
|
+
class BlockDiagonalMatrix : public BaseMatrix
|
|
93
|
+
{
|
|
94
|
+
Tensor<3,TM> blockdiag;
|
|
95
|
+
int blocks, dimy, dimx;
|
|
96
|
+
public:
|
|
97
|
+
// typedef double TSCAL;
|
|
98
|
+
|
|
99
|
+
BlockDiagonalMatrix(Tensor<3,TM> _blockdiag);
|
|
100
|
+
bool IsComplex() const override { return ngbla::IsComplex<TM>(); }
|
|
101
|
+
|
|
102
|
+
int VHeight() const override { return blocks*dimy; }
|
|
103
|
+
int VWidth() const override { return blocks*dimx; }
|
|
104
|
+
|
|
105
|
+
ostream & Print (ostream & ost) const override;
|
|
106
|
+
|
|
107
|
+
AutoVector CreateRowVector () const override;
|
|
108
|
+
AutoVector CreateColVector () const override;
|
|
109
|
+
|
|
110
|
+
void Mult (const BaseVector & x, BaseVector & y) const override;
|
|
111
|
+
void MultAdd (double s, const BaseVector & x, BaseVector & y) const override;
|
|
112
|
+
void MultTransAdd (double s, const BaseVector & x, BaseVector & y) const override;
|
|
113
|
+
|
|
114
|
+
shared_ptr<BaseMatrix> InverseMatrix (shared_ptr<BitArray> subset = nullptr) const override;
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
// blocks is inner-most dimension of tensor and vectors
|
|
118
|
+
class BlockDiagonalMatrixSoA : public BaseMatrix
|
|
119
|
+
{
|
|
120
|
+
Tensor<3> blockdiag;
|
|
121
|
+
int blocks, dimy, dimx;
|
|
122
|
+
Matrix<bool> nonzero;
|
|
123
|
+
Table<int> sparse, sparseT; // sparse non-zero pattern
|
|
124
|
+
public:
|
|
125
|
+
typedef double TSCAL;
|
|
126
|
+
|
|
127
|
+
BlockDiagonalMatrixSoA(Tensor<3> _blockdiag);
|
|
128
|
+
bool IsComplex() const override { return false; }
|
|
129
|
+
|
|
130
|
+
int VHeight() const override { return blocks*dimy; }
|
|
131
|
+
int VWidth() const override { return blocks*dimx; }
|
|
132
|
+
|
|
133
|
+
ostream & Print (ostream & ost) const override;
|
|
134
|
+
virtual BaseMatrix::OperatorInfo GetOperatorInfo () const override;
|
|
135
|
+
|
|
136
|
+
AutoVector CreateRowVector () const override;
|
|
137
|
+
AutoVector CreateColVector () const override;
|
|
138
|
+
|
|
139
|
+
void Mult (const BaseVector & x, BaseVector & y) const override;
|
|
140
|
+
void MultAdd (double s, const BaseVector & x, BaseVector & y) const override;
|
|
141
|
+
void MultTrans (const BaseVector & x, BaseVector & y) const override;
|
|
142
|
+
void MultTransAdd (double s, const BaseVector & x, BaseVector & y) const override;
|
|
143
|
+
// shared_ptr<BaseMatrix> InverseMatrix (shared_ptr<BitArray> subset = nullptr) const override;
|
|
144
|
+
|
|
145
|
+
FlatTensor<3> GetBlockDiag () const { return blockdiag; }
|
|
146
|
+
FlatMatrix<bool> GetNonZeroPattern() const { return nonzero; }
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
|
|
153
|
+
#endif
|
|
154
|
+
|
|
@@ -0,0 +1,276 @@
|
|
|
1
|
+
#ifndef FILE_DIFFERENTIALOPERATOR
|
|
2
|
+
#define FILE_DIFFERENTIALOPERATOR
|
|
3
|
+
|
|
4
|
+
/*********************************************************************/
|
|
5
|
+
/* File: differentialoperator.hpp */
|
|
6
|
+
/* Author: Joachim Schoeberl */
|
|
7
|
+
/* Date: 24. Nov. 2009 */
|
|
8
|
+
/*********************************************************************/
|
|
9
|
+
|
|
10
|
+
#include "finiteelement.hpp"
|
|
11
|
+
#include "intrule.hpp"
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
namespace ngfem
|
|
15
|
+
{
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
Differential Operator.
|
|
19
|
+
Base-class for run-time polymorphismus.
|
|
20
|
+
Provides application and transpose-application
|
|
21
|
+
*/
|
|
22
|
+
class DifferentialOperator
|
|
23
|
+
{
|
|
24
|
+
private:
|
|
25
|
+
int dim;
|
|
26
|
+
int blockdim;
|
|
27
|
+
Array<int> dimensions;
|
|
28
|
+
|
|
29
|
+
int vsdim; // symmetric 3x3 matrix has dim=9, but vector-space dim=6
|
|
30
|
+
optional<Matrix<>> vsembedding;
|
|
31
|
+
protected:
|
|
32
|
+
VorB vb;
|
|
33
|
+
int difforder;
|
|
34
|
+
public:
|
|
35
|
+
/*
|
|
36
|
+
[[deprecated("Use DifferentialOperator(int,int,VorB,int) instead")]]
|
|
37
|
+
NGS_DLL_HEADER DifferentialOperator(int adim, int ablockdim, bool boundary, int adifforder)
|
|
38
|
+
: dim(adim), blockdim(ablockdim), vb(boundary ? BND : VOL), difforder(adifforder)
|
|
39
|
+
{
|
|
40
|
+
if (blockdim == 1)
|
|
41
|
+
dimensions = Array<int> ( { dim } );
|
|
42
|
+
else
|
|
43
|
+
dimensions = Array<int> ( { dim/blockdim, blockdim });
|
|
44
|
+
}
|
|
45
|
+
*/
|
|
46
|
+
NGS_DLL_HEADER DifferentialOperator(int adim, int ablockdim, VorB avb, int adifforder)
|
|
47
|
+
: dim(adim), blockdim(ablockdim), vb(avb), difforder(adifforder)
|
|
48
|
+
{
|
|
49
|
+
if (blockdim == 1)
|
|
50
|
+
dimensions = Array<int> ( { dim } );
|
|
51
|
+
else if (dim == 1)
|
|
52
|
+
dimensions = Array<int> ( { blockdim } );
|
|
53
|
+
else
|
|
54
|
+
dimensions = Array<int> ( { dim/blockdim, blockdim });
|
|
55
|
+
|
|
56
|
+
vsdim = dim;
|
|
57
|
+
}
|
|
58
|
+
/// destructor
|
|
59
|
+
NGS_DLL_HEADER virtual ~DifferentialOperator () = default;
|
|
60
|
+
|
|
61
|
+
virtual void DoArchive(Archive & ar) { ; }
|
|
62
|
+
|
|
63
|
+
void SetDimensions (const Array<int> & adims) { dimensions = adims; }
|
|
64
|
+
void SetVectorSpaceEmbedding (Matrix <> emb)
|
|
65
|
+
{ vsembedding = emb; vsdim = emb.Width(); }
|
|
66
|
+
optional<FlatMatrix<>> GetVSEmbedding() const { return vsembedding; }
|
|
67
|
+
|
|
68
|
+
///
|
|
69
|
+
NGS_DLL_HEADER virtual string Name() const; // { return typeid(*this).name(); }
|
|
70
|
+
/// dimension of range
|
|
71
|
+
int Dim() const { return dim; }
|
|
72
|
+
int VSDim() const { return vsdim; }
|
|
73
|
+
const Array<int> & Dimensions() const { return dimensions; }
|
|
74
|
+
/// number of copies of finite element by BlockDifferentialOperator
|
|
75
|
+
int BlockDim() const { return blockdim; }
|
|
76
|
+
/// does it live on the boundary ?
|
|
77
|
+
bool Boundary() const { return vb == BND; }
|
|
78
|
+
VorB VB() const { return vb; }
|
|
79
|
+
|
|
80
|
+
virtual bool SupportsVB (VorB checkvb) const { return checkvb == vb; }
|
|
81
|
+
virtual shared_ptr<DifferentialOperator> GetTrace() const
|
|
82
|
+
{
|
|
83
|
+
return nullptr;
|
|
84
|
+
// throw Exception("GetTrace not overloaded for DifferentialOperator"+string(typeid(*this).name()));
|
|
85
|
+
}
|
|
86
|
+
/// total polynomial degree is reduced by this order (i.e. minimal difforder)
|
|
87
|
+
int DiffOrder() const { return difforder; }
|
|
88
|
+
|
|
89
|
+
virtual IntRange UsedDofs(const FiniteElement & fel) const { return IntRange(0, fel.GetNDof()); }
|
|
90
|
+
|
|
91
|
+
virtual bool operator== (const DifferentialOperator & diffop2) const { return false; }
|
|
92
|
+
|
|
93
|
+
/// calculates the matrix
|
|
94
|
+
NGS_DLL_HEADER virtual void
|
|
95
|
+
CalcMatrix (const FiniteElement & fel,
|
|
96
|
+
const BaseMappedIntegrationPoint & mip,
|
|
97
|
+
BareSliceMatrix<double,ColMajor> mat,
|
|
98
|
+
LocalHeap & lh) const;
|
|
99
|
+
|
|
100
|
+
NGS_DLL_HEADER virtual void
|
|
101
|
+
CalcMatrix (const FiniteElement & bfel,
|
|
102
|
+
const BaseMappedIntegrationPoint & bmip,
|
|
103
|
+
BareSliceMatrix<Complex,ColMajor> mat,
|
|
104
|
+
LocalHeap & lh) const;
|
|
105
|
+
|
|
106
|
+
NGS_DLL_HEADER virtual void
|
|
107
|
+
CalcMatrix (const FiniteElement & fel,
|
|
108
|
+
const BaseMappedIntegrationRule & mir,
|
|
109
|
+
BareSliceMatrix<double,ColMajor> mat,
|
|
110
|
+
LocalHeap & lh) const;
|
|
111
|
+
|
|
112
|
+
NGS_DLL_HEADER virtual void
|
|
113
|
+
CalcMatrix (const FiniteElement & fel,
|
|
114
|
+
const BaseMappedIntegrationRule & mir,
|
|
115
|
+
BareSliceMatrix<Complex,ColMajor> mat,
|
|
116
|
+
LocalHeap & lh) const;
|
|
117
|
+
|
|
118
|
+
NGS_DLL_HEADER virtual void
|
|
119
|
+
CalcMatrix (const FiniteElement & fel,
|
|
120
|
+
const SIMD_BaseMappedIntegrationRule & mir,
|
|
121
|
+
BareSliceMatrix<SIMD<double>> mat) const;
|
|
122
|
+
|
|
123
|
+
NGS_DLL_HEADER virtual void
|
|
124
|
+
CalcMatrix (const FiniteElement & fel,
|
|
125
|
+
const SIMD_BaseMappedIntegrationRule & mir,
|
|
126
|
+
BareSliceMatrix<SIMD<Complex>> mat) const;
|
|
127
|
+
|
|
128
|
+
/// Bmat = vs-embedding * BmatVS (if vs-embedding is set)
|
|
129
|
+
NGS_DLL_HEADER virtual void
|
|
130
|
+
CalcMatrixVS (const FiniteElement & fel,
|
|
131
|
+
const BaseMappedIntegrationPoint & mip,
|
|
132
|
+
SliceMatrix<double,ColMajor> mat,
|
|
133
|
+
LocalHeap & lh) const;
|
|
134
|
+
|
|
135
|
+
NGS_DLL_HEADER virtual void
|
|
136
|
+
CalcLinearizedMatrix (const FiniteElement & fel,
|
|
137
|
+
const BaseMappedIntegrationRule & mir,
|
|
138
|
+
BareSliceVector<double> x,
|
|
139
|
+
SliceMatrix<double,ColMajor> mat,
|
|
140
|
+
LocalHeap & lh) const;
|
|
141
|
+
|
|
142
|
+
NGS_DLL_HEADER virtual bool IsNonlinear() const { return false; }
|
|
143
|
+
|
|
144
|
+
// second derivative of \sum_ipt wprime * B(u)
|
|
145
|
+
NGS_DLL_HEADER virtual void
|
|
146
|
+
CalcHessianAdd (const FiniteElement & fel,
|
|
147
|
+
const BaseMappedIntegrationRule & mir,
|
|
148
|
+
SliceMatrix<> wprime,
|
|
149
|
+
BareSliceVector<> elvecu,
|
|
150
|
+
SliceMatrix<> hessian,
|
|
151
|
+
LocalHeap & lh) const { ; }
|
|
152
|
+
|
|
153
|
+
NGS_DLL_HEADER virtual void
|
|
154
|
+
Apply (const FiniteElement & fel,
|
|
155
|
+
const BaseMappedIntegrationPoint & mip,
|
|
156
|
+
BareSliceVector<double> x,
|
|
157
|
+
FlatVector<double> flux,
|
|
158
|
+
LocalHeap & lh) const;
|
|
159
|
+
|
|
160
|
+
NGS_DLL_HEADER virtual void
|
|
161
|
+
Apply (const FiniteElement & fel,
|
|
162
|
+
const BaseMappedIntegrationPoint & mip,
|
|
163
|
+
BareSliceVector<Complex> x,
|
|
164
|
+
FlatVector<Complex> flux,
|
|
165
|
+
LocalHeap & lh) const;
|
|
166
|
+
|
|
167
|
+
NGS_DLL_HEADER virtual void
|
|
168
|
+
Apply (const FiniteElement & fel,
|
|
169
|
+
const BaseMappedIntegrationRule & mir,
|
|
170
|
+
BareSliceVector<double> x,
|
|
171
|
+
BareSliceMatrix<double> flux,
|
|
172
|
+
LocalHeap & lh) const;
|
|
173
|
+
|
|
174
|
+
NGS_DLL_HEADER virtual void
|
|
175
|
+
Apply (const FiniteElement & fel,
|
|
176
|
+
const BaseMappedIntegrationRule & mir,
|
|
177
|
+
BareSliceVector<Complex> x,
|
|
178
|
+
BareSliceMatrix<Complex> flux,
|
|
179
|
+
LocalHeap & lh) const;
|
|
180
|
+
|
|
181
|
+
NGS_DLL_HEADER virtual void
|
|
182
|
+
Apply (const FiniteElement & bfel,
|
|
183
|
+
const SIMD_BaseMappedIntegrationRule & bmir,
|
|
184
|
+
BareSliceVector<double> x,
|
|
185
|
+
BareSliceMatrix<SIMD<double>> flux) const;
|
|
186
|
+
|
|
187
|
+
NGS_DLL_HEADER virtual void
|
|
188
|
+
Apply (const FiniteElement & bfel,
|
|
189
|
+
const SIMD_BaseMappedIntegrationRule & bmir,
|
|
190
|
+
BareSliceVector<Complex> x,
|
|
191
|
+
BareSliceMatrix<SIMD<Complex>> flux) const;
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
NGS_DLL_HEADER virtual void
|
|
195
|
+
ApplyTrans (const FiniteElement & fel,
|
|
196
|
+
const BaseMappedIntegrationPoint & mip,
|
|
197
|
+
FlatVector<double> flux,
|
|
198
|
+
BareSliceVector<double> x,
|
|
199
|
+
LocalHeap & lh) const;
|
|
200
|
+
|
|
201
|
+
NGS_DLL_HEADER virtual void
|
|
202
|
+
ApplyTrans (const FiniteElement & fel,
|
|
203
|
+
const BaseMappedIntegrationPoint & mip,
|
|
204
|
+
FlatVector<Complex> flux,
|
|
205
|
+
BareSliceVector<Complex> x,
|
|
206
|
+
LocalHeap & lh) const;
|
|
207
|
+
|
|
208
|
+
NGS_DLL_HEADER virtual void
|
|
209
|
+
ApplyTrans (const FiniteElement & fel,
|
|
210
|
+
const BaseMappedIntegrationRule & mir,
|
|
211
|
+
FlatMatrix<double> flux,
|
|
212
|
+
BareSliceVector<double> x,
|
|
213
|
+
LocalHeap & lh) const;
|
|
214
|
+
|
|
215
|
+
NGS_DLL_HEADER virtual void
|
|
216
|
+
ApplyTrans (const FiniteElement & fel,
|
|
217
|
+
const BaseMappedIntegrationRule & mir,
|
|
218
|
+
FlatMatrix<Complex> flux,
|
|
219
|
+
BareSliceVector<Complex> x,
|
|
220
|
+
LocalHeap & lh) const;
|
|
221
|
+
|
|
222
|
+
NGS_DLL_HEADER virtual void
|
|
223
|
+
AddTrans (const FiniteElement & bfel,
|
|
224
|
+
const SIMD_BaseMappedIntegrationRule & bmir,
|
|
225
|
+
BareSliceMatrix<SIMD<double>> flux,
|
|
226
|
+
BareSliceVector<double> x) const;
|
|
227
|
+
|
|
228
|
+
NGS_DLL_HEADER virtual void
|
|
229
|
+
AddTrans (const FiniteElement & bfel,
|
|
230
|
+
const SIMD_BaseMappedIntegrationRule & bmir,
|
|
231
|
+
BareSliceMatrix<SIMD<Complex>> flux,
|
|
232
|
+
BareSliceVector<Complex> x) const;
|
|
233
|
+
|
|
234
|
+
|
|
235
|
+
NGS_DLL_HEADER virtual void
|
|
236
|
+
ApplyLinearizedTrans (const FiniteElement & fel,
|
|
237
|
+
const BaseMappedIntegrationRule & mir,
|
|
238
|
+
SliceVector<double> elveclin,
|
|
239
|
+
FlatMatrix<double> flux,
|
|
240
|
+
BareSliceVector<double> x,
|
|
241
|
+
LocalHeap & lh) const
|
|
242
|
+
{
|
|
243
|
+
ApplyTrans (fel, mir, flux, x, lh);
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
/// calculates matrix on reference element
|
|
248
|
+
|
|
249
|
+
// dimension on refelement (e.g. 2 for surface gradient)
|
|
250
|
+
NGS_DLL_HEADER virtual int DimRef() const;
|
|
251
|
+
|
|
252
|
+
NGS_DLL_HEADER virtual void
|
|
253
|
+
CalcMatrix (const FiniteElement & fel,
|
|
254
|
+
const IntegrationPoint & ip,
|
|
255
|
+
BareSliceMatrix<double,ColMajor> mat,
|
|
256
|
+
LocalHeap & lh) const;
|
|
257
|
+
|
|
258
|
+
NGS_DLL_HEADER virtual void
|
|
259
|
+
CalcTransformationMatrix (const BaseMappedIntegrationPoint & mip,
|
|
260
|
+
SliceMatrix<double> trans,
|
|
261
|
+
LocalHeap & lh) const;
|
|
262
|
+
|
|
263
|
+
NGS_DLL_HEADER virtual shared_ptr<CoefficientFunction> DiffShape (shared_ptr<CoefficientFunction> proxy,
|
|
264
|
+
shared_ptr<CoefficientFunction> dir,
|
|
265
|
+
bool Eulerian = false) const;
|
|
266
|
+
|
|
267
|
+
NGS_DLL_HEADER virtual list<tuple<string,double>> Timing (const FiniteElement & fel, const BaseMappedIntegrationRule & mir) const;
|
|
268
|
+
};
|
|
269
|
+
|
|
270
|
+
|
|
271
|
+
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
|
|
275
|
+
|
|
276
|
+
#endif
|