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.

Files changed (315) hide show
  1. netgen/include/analytic_integrals.hpp +10 -0
  2. netgen/include/arnoldi.hpp +55 -0
  3. netgen/include/bandmatrix.hpp +334 -0
  4. netgen/include/basematrix.hpp +957 -0
  5. netgen/include/basevector.hpp +1268 -0
  6. netgen/include/bdbequations.hpp +2805 -0
  7. netgen/include/bdbintegrator.hpp +1660 -0
  8. netgen/include/bem_diffops.hpp +475 -0
  9. netgen/include/bessel.hpp +1064 -0
  10. netgen/include/bilinearform.hpp +963 -0
  11. netgen/include/bla.hpp +29 -0
  12. netgen/include/blockalloc.hpp +95 -0
  13. netgen/include/blockjacobi.hpp +328 -0
  14. netgen/include/bspline.hpp +116 -0
  15. netgen/include/calcinverse.hpp +141 -0
  16. netgen/include/cg.hpp +368 -0
  17. netgen/include/chebyshev.hpp +44 -0
  18. netgen/include/cholesky.hpp +720 -0
  19. netgen/include/clapack.h +7254 -0
  20. netgen/include/code_generation.hpp +296 -0
  21. netgen/include/coefficient.hpp +2033 -0
  22. netgen/include/coefficient_impl.hpp +19 -0
  23. netgen/include/coefficient_stdmath.hpp +167 -0
  24. netgen/include/commutingAMG.hpp +106 -0
  25. netgen/include/comp.hpp +79 -0
  26. netgen/include/compatibility.hpp +41 -0
  27. netgen/include/complex_wrapper.hpp +73 -0
  28. netgen/include/compressedfespace.hpp +110 -0
  29. netgen/include/contact.hpp +235 -0
  30. netgen/include/diagonalmatrix.hpp +154 -0
  31. netgen/include/differentialoperator.hpp +276 -0
  32. netgen/include/diffop.hpp +1286 -0
  33. netgen/include/diffop_impl.hpp +328 -0
  34. netgen/include/diffopwithfactor.hpp +123 -0
  35. netgen/include/discontinuous.hpp +84 -0
  36. netgen/include/dump.hpp +949 -0
  37. netgen/include/ectypes.hpp +121 -0
  38. netgen/include/eigen.hpp +60 -0
  39. netgen/include/eigensystem.hpp +18 -0
  40. netgen/include/elasticity_equations.hpp +595 -0
  41. netgen/include/elementbyelement.hpp +195 -0
  42. netgen/include/elementtopology.hpp +1760 -0
  43. netgen/include/elementtransformation.hpp +339 -0
  44. netgen/include/evalfunc.hpp +405 -0
  45. netgen/include/expr.hpp +1686 -0
  46. netgen/include/facetfe.hpp +175 -0
  47. netgen/include/facetfespace.hpp +180 -0
  48. netgen/include/facethofe.hpp +111 -0
  49. netgen/include/facetsurffespace.hpp +112 -0
  50. netgen/include/fe_interfaces.hpp +32 -0
  51. netgen/include/fem.hpp +87 -0
  52. netgen/include/fesconvert.hpp +14 -0
  53. netgen/include/fespace.hpp +1449 -0
  54. netgen/include/finiteelement.hpp +286 -0
  55. netgen/include/globalinterfacespace.hpp +77 -0
  56. netgen/include/globalspace.hpp +115 -0
  57. netgen/include/gridfunction.hpp +525 -0
  58. netgen/include/h1amg.hpp +124 -0
  59. netgen/include/h1hofe.hpp +188 -0
  60. netgen/include/h1hofe_impl.hpp +1262 -0
  61. netgen/include/h1hofefo.hpp +148 -0
  62. netgen/include/h1hofefo_impl.hpp +185 -0
  63. netgen/include/h1hofespace.hpp +167 -0
  64. netgen/include/h1lofe.hpp +1240 -0
  65. netgen/include/h1lumping.hpp +41 -0
  66. netgen/include/hcurl_equations.hpp +1381 -0
  67. netgen/include/hcurlcurlfe.hpp +2241 -0
  68. netgen/include/hcurlcurlfespace.hpp +78 -0
  69. netgen/include/hcurlfe.hpp +259 -0
  70. netgen/include/hcurlfe_utils.hpp +107 -0
  71. netgen/include/hcurlhdiv_dshape.hpp +857 -0
  72. netgen/include/hcurlhdivfes.hpp +308 -0
  73. netgen/include/hcurlhofe.hpp +175 -0
  74. netgen/include/hcurlhofe_impl.hpp +1871 -0
  75. netgen/include/hcurlhofespace.hpp +193 -0
  76. netgen/include/hcurllofe.hpp +1146 -0
  77. netgen/include/hdiv_equations.hpp +880 -0
  78. netgen/include/hdivdivfe.hpp +2923 -0
  79. netgen/include/hdivdivsurfacespace.hpp +76 -0
  80. netgen/include/hdivfe.hpp +206 -0
  81. netgen/include/hdivfe_utils.hpp +717 -0
  82. netgen/include/hdivfes.hpp +75 -0
  83. netgen/include/hdivhofe.hpp +447 -0
  84. netgen/include/hdivhofe_impl.hpp +1107 -0
  85. netgen/include/hdivhofefo.hpp +229 -0
  86. netgen/include/hdivhofespace.hpp +177 -0
  87. netgen/include/hdivhosurfacefespace.hpp +106 -0
  88. netgen/include/hdivlofe.hpp +773 -0
  89. netgen/include/hidden.hpp +74 -0
  90. netgen/include/householder.hpp +181 -0
  91. netgen/include/hypre_ams_precond.hpp +123 -0
  92. netgen/include/hypre_precond.hpp +73 -0
  93. netgen/include/integrator.hpp +2012 -0
  94. netgen/include/integratorcf.hpp +253 -0
  95. netgen/include/interpolate.hpp +49 -0
  96. netgen/include/intrule.hpp +2542 -0
  97. netgen/include/intrules_SauterSchwab.hpp +25 -0
  98. netgen/include/irspace.hpp +49 -0
  99. netgen/include/jacobi.hpp +153 -0
  100. netgen/include/kernels.hpp +762 -0
  101. netgen/include/l2hofe.hpp +194 -0
  102. netgen/include/l2hofe_impl.hpp +564 -0
  103. netgen/include/l2hofefo.hpp +542 -0
  104. netgen/include/l2hofespace.hpp +344 -0
  105. netgen/include/la.hpp +38 -0
  106. netgen/include/linearform.hpp +266 -0
  107. netgen/include/matrix.hpp +2140 -0
  108. netgen/include/memusage.hpp +41 -0
  109. netgen/include/meshaccess.hpp +1359 -0
  110. netgen/include/mgpre.hpp +204 -0
  111. netgen/include/mp_coefficient.hpp +145 -0
  112. netgen/include/mptools.hpp +2281 -0
  113. netgen/include/multigrid.hpp +42 -0
  114. netgen/include/multivector.hpp +447 -0
  115. netgen/include/mumpsinverse.hpp +187 -0
  116. netgen/include/mycomplex.hpp +361 -0
  117. netgen/include/ng_lapack.hpp +1661 -0
  118. netgen/include/ngblas.hpp +1232 -0
  119. netgen/include/ngs_defines.hpp +30 -0
  120. netgen/include/ngs_stdcpp_include.hpp +106 -0
  121. netgen/include/ngs_utils.hpp +121 -0
  122. netgen/include/ngsobject.hpp +1019 -0
  123. netgen/include/ngsstream.hpp +113 -0
  124. netgen/include/ngstd.hpp +72 -0
  125. netgen/include/nodalhofe.hpp +96 -0
  126. netgen/include/nodalhofe_impl.hpp +141 -0
  127. netgen/include/normalfacetfe.hpp +223 -0
  128. netgen/include/normalfacetfespace.hpp +98 -0
  129. netgen/include/normalfacetsurfacefespace.hpp +84 -0
  130. netgen/include/order.hpp +251 -0
  131. netgen/include/parallel_matrices.hpp +222 -0
  132. netgen/include/paralleldofs.hpp +340 -0
  133. netgen/include/parallelngs.hpp +23 -0
  134. netgen/include/parallelvector.hpp +269 -0
  135. netgen/include/pardisoinverse.hpp +200 -0
  136. netgen/include/periodic.hpp +129 -0
  137. netgen/include/plateaufespace.hpp +25 -0
  138. netgen/include/pml.hpp +275 -0
  139. netgen/include/pmltrafo.hpp +631 -0
  140. netgen/include/postproc.hpp +142 -0
  141. netgen/include/potentialtools.hpp +22 -0
  142. netgen/include/precomp.hpp +60 -0
  143. netgen/include/preconditioner.hpp +602 -0
  144. netgen/include/prolongation.hpp +377 -0
  145. netgen/include/python_comp.hpp +107 -0
  146. netgen/include/python_fem.hpp +89 -0
  147. netgen/include/python_linalg.hpp +58 -0
  148. netgen/include/python_ngstd.hpp +386 -0
  149. netgen/include/recursive_pol.hpp +4896 -0
  150. netgen/include/recursive_pol_tet.hpp +395 -0
  151. netgen/include/recursive_pol_trig.hpp +492 -0
  152. netgen/include/reorderedfespace.hpp +81 -0
  153. netgen/include/sample_sort.hpp +105 -0
  154. netgen/include/scalarfe.hpp +335 -0
  155. netgen/include/shapefunction_utils.hpp +113 -0
  156. netgen/include/simd_complex.hpp +329 -0
  157. netgen/include/smoother.hpp +253 -0
  158. netgen/include/solve.hpp +89 -0
  159. netgen/include/sparsecholesky.hpp +313 -0
  160. netgen/include/sparsematrix.hpp +1038 -0
  161. netgen/include/sparsematrix_dyn.hpp +90 -0
  162. netgen/include/sparsematrix_impl.hpp +1013 -0
  163. netgen/include/special_matrix.hpp +463 -0
  164. netgen/include/specialelement.hpp +125 -0
  165. netgen/include/statushandler.hpp +33 -0
  166. netgen/include/stringops.hpp +12 -0
  167. netgen/include/superluinverse.hpp +136 -0
  168. netgen/include/symbolicintegrator.hpp +850 -0
  169. netgen/include/symmetricmatrix.hpp +144 -0
  170. netgen/include/tangentialfacetfe.hpp +224 -0
  171. netgen/include/tangentialfacetfespace.hpp +91 -0
  172. netgen/include/tensor.hpp +522 -0
  173. netgen/include/tensorcoefficient.hpp +446 -0
  174. netgen/include/tensorproductintegrator.hpp +113 -0
  175. netgen/include/thcurlfe.hpp +128 -0
  176. netgen/include/thcurlfe_impl.hpp +380 -0
  177. netgen/include/thdivfe.hpp +80 -0
  178. netgen/include/thdivfe_impl.hpp +492 -0
  179. netgen/include/tpdiffop.hpp +461 -0
  180. netgen/include/tpfes.hpp +133 -0
  181. netgen/include/tpintrule.hpp +224 -0
  182. netgen/include/triangular.hpp +465 -0
  183. netgen/include/tscalarfe.hpp +245 -0
  184. netgen/include/tscalarfe_impl.hpp +1029 -0
  185. netgen/include/umfpackinverse.hpp +148 -0
  186. netgen/include/vector.hpp +1273 -0
  187. netgen/include/voxelcoefficientfunction.hpp +41 -0
  188. netgen/include/vtkoutput.hpp +198 -0
  189. netgen/include/vvector.hpp +208 -0
  190. netgen/include/webgui.hpp +92 -0
  191. netgen/libngbla.dylib +0 -0
  192. netgen/libngcomp.dylib +0 -0
  193. netgen/libngfem.dylib +0 -0
  194. netgen/libngla.dylib +0 -0
  195. netgen/libngsbem.dylib +0 -0
  196. netgen/libngsolve.dylib +0 -0
  197. netgen/libngstd.dylib +0 -0
  198. ngsolve/TensorProductTools.py +210 -0
  199. ngsolve/__console.py +94 -0
  200. ngsolve/__expr.py +181 -0
  201. ngsolve/__init__.py +148 -0
  202. ngsolve/__init__.pyi +233 -0
  203. ngsolve/_scikit_build_core_dependencies.py +30 -0
  204. ngsolve/bla.pyi +1153 -0
  205. ngsolve/bvp.py +78 -0
  206. ngsolve/bvp.pyi +32 -0
  207. ngsolve/cmake/NGSolveConfig.cmake +102 -0
  208. ngsolve/cmake/ngsolve-targets-release.cmake +79 -0
  209. ngsolve/cmake/ngsolve-targets.cmake +163 -0
  210. ngsolve/comp/__init__.pyi +5449 -0
  211. ngsolve/comp/pml.pyi +89 -0
  212. ngsolve/config/__init__.py +1 -0
  213. ngsolve/config/__init__.pyi +43 -0
  214. ngsolve/config/__main__.py +4 -0
  215. ngsolve/config/config.py +60 -0
  216. ngsolve/config/config.pyi +45 -0
  217. ngsolve/demos/TensorProduct/__init__.py +0 -0
  218. ngsolve/demos/TensorProduct/tp_dg_1d_1d.py +80 -0
  219. ngsolve/demos/TensorProduct/tp_dg_1d_2d.py +73 -0
  220. ngsolve/demos/TensorProduct/tp_dg_2d_1d.py +72 -0
  221. ngsolve/demos/TensorProduct/tp_dg_2d_2d.py +66 -0
  222. ngsolve/demos/__init__.py +0 -0
  223. ngsolve/demos/howto/__init__.py +0 -0
  224. ngsolve/demos/howto/hhj.py +44 -0
  225. ngsolve/demos/howto/hybrid_dg.py +53 -0
  226. ngsolve/demos/howto/mixed.py +30 -0
  227. ngsolve/demos/howto/nonlin.py +29 -0
  228. ngsolve/demos/howto/pickling.py +26 -0
  229. ngsolve/demos/howto/pml.py +31 -0
  230. ngsolve/demos/howto/taskmanager.py +20 -0
  231. ngsolve/demos/howto/tdnns.py +47 -0
  232. ngsolve/demos/howto/timeDG-skeleton.py +45 -0
  233. ngsolve/demos/howto/timeDG.py +38 -0
  234. ngsolve/demos/howto/timeDGlap.py +42 -0
  235. ngsolve/demos/howto/timeDGwave.py +61 -0
  236. ngsolve/demos/intro/__init__.py +0 -0
  237. ngsolve/demos/intro/adaptive.py +123 -0
  238. ngsolve/demos/intro/cmagnet.py +59 -0
  239. ngsolve/demos/intro/elasticity.py +76 -0
  240. ngsolve/demos/intro/navierstokes.py +74 -0
  241. ngsolve/demos/intro/poisson.ipynb +170 -0
  242. ngsolve/demos/intro/poisson.py +41 -0
  243. ngsolve/demos/mpi/__init__.py +0 -0
  244. ngsolve/demos/mpi/mpi_cmagnet.py +87 -0
  245. ngsolve/demos/mpi/mpi_navierstokes.py +117 -0
  246. ngsolve/demos/mpi/mpi_poisson.py +89 -0
  247. ngsolve/demos/mpi/mpi_timeDG.py +82 -0
  248. ngsolve/directsolvers.py +26 -0
  249. ngsolve/directsolvers.pyi +15 -0
  250. ngsolve/eigenvalues.py +364 -0
  251. ngsolve/eigenvalues.pyi +30 -0
  252. ngsolve/fem.pyi +1647 -0
  253. ngsolve/internal.py +89 -0
  254. ngsolve/krylovspace.py +1013 -0
  255. ngsolve/krylovspace.pyi +298 -0
  256. ngsolve/la.pyi +1230 -0
  257. ngsolve/meshes.py +748 -0
  258. ngsolve/ngs2petsc.py +310 -0
  259. ngsolve/ngscxx.py +42 -0
  260. ngsolve/ngslib.so +0 -0
  261. ngsolve/ngstd.pyi +59 -0
  262. ngsolve/nonlinearsolvers.py +203 -0
  263. ngsolve/nonlinearsolvers.pyi +95 -0
  264. ngsolve/preconditioners.py +11 -0
  265. ngsolve/preconditioners.pyi +7 -0
  266. ngsolve/solve.pyi +109 -0
  267. ngsolve/solve_implementation.py +168 -0
  268. ngsolve/solve_implementation.pyi +42 -0
  269. ngsolve/solvers.py +7 -0
  270. ngsolve/solvers.pyi +14 -0
  271. ngsolve/timestepping.py +185 -0
  272. ngsolve/timestepping.pyi +28 -0
  273. ngsolve/timing.py +108 -0
  274. ngsolve/timing.pyi +54 -0
  275. ngsolve/utils.py +167 -0
  276. ngsolve/utils.pyi +273 -0
  277. ngsolve/webgui.py +670 -0
  278. ngsolve-6.2.2506.post74.dev0.data/data/Netgen.icns +0 -0
  279. ngsolve-6.2.2506.post74.dev0.data/data/bin/ngscxx +17 -0
  280. ngsolve-6.2.2506.post74.dev0.data/data/bin/ngsld +13 -0
  281. ngsolve-6.2.2506.post74.dev0.data/data/bin/ngsolve.tcl +648 -0
  282. ngsolve-6.2.2506.post74.dev0.data/data/bin/ngspy +2 -0
  283. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/beam.geo +17 -0
  284. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/beam.vol +240 -0
  285. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/chip.in2d +41 -0
  286. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/chip.vol +614 -0
  287. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/coil.geo +12 -0
  288. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/coil.vol +2560 -0
  289. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/coilshield.geo +24 -0
  290. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/coilshield.vol +3179 -0
  291. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/cube.geo +19 -0
  292. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/cube.vol +1832 -0
  293. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d10_DGdoubleglazing.pde +50 -0
  294. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d11_chip_nitsche.pde +40 -0
  295. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d1_square.pde +43 -0
  296. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d2_chip.pde +35 -0
  297. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d3_helmholtz.pde +22 -0
  298. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d4_cube.pde +46 -0
  299. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d5_beam.pde +74 -0
  300. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d6_shaft.pde +73 -0
  301. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d7_coil.pde +50 -0
  302. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d8_coilshield.pde +49 -0
  303. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d9_hybridDG.pde +72 -0
  304. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/doubleglazing.in2d +27 -0
  305. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/doubleglazing.vol +737 -0
  306. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/piezo2d40round4.vol.gz +0 -0
  307. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/shaft.geo +73 -0
  308. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/shaft.vol +4291 -0
  309. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/square.in2d +17 -0
  310. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/square.vol +149 -0
  311. ngsolve-6.2.2506.post74.dev0.dist-info/METADATA +13 -0
  312. ngsolve-6.2.2506.post74.dev0.dist-info/RECORD +315 -0
  313. ngsolve-6.2.2506.post74.dev0.dist-info/WHEEL +5 -0
  314. ngsolve-6.2.2506.post74.dev0.dist-info/licenses/LICENSE +504 -0
  315. 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