ngsolve 6.2.2506.post74.dev0__cp314-cp314-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.

Potentially problematic release.


This version of ngsolve might be problematic. Click here for more details.

Files changed (288) 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/lib/libngsolve.lib +0 -0
  192. netgen/libngsolve.dll +0 -0
  193. netgen/ngscxx.bat +4 -0
  194. netgen/ngsld.bat +6 -0
  195. ngsolve/TensorProductTools.py +210 -0
  196. ngsolve/__console.py +94 -0
  197. ngsolve/__expr.py +181 -0
  198. ngsolve/__init__.py +148 -0
  199. ngsolve/_scikit_build_core_dependencies.py +30 -0
  200. ngsolve/bvp.py +78 -0
  201. ngsolve/cmake/NGSolveConfig.cmake +102 -0
  202. ngsolve/cmake/ngsolve-targets-release.cmake +19 -0
  203. ngsolve/cmake/ngsolve-targets.cmake +164 -0
  204. ngsolve/config/__init__.py +1 -0
  205. ngsolve/config/__main__.py +4 -0
  206. ngsolve/config/config.py +60 -0
  207. ngsolve/demos/TensorProduct/__init__.py +0 -0
  208. ngsolve/demos/TensorProduct/tp_dg_1d_1d.py +80 -0
  209. ngsolve/demos/TensorProduct/tp_dg_1d_2d.py +73 -0
  210. ngsolve/demos/TensorProduct/tp_dg_2d_1d.py +72 -0
  211. ngsolve/demos/TensorProduct/tp_dg_2d_2d.py +66 -0
  212. ngsolve/demos/__init__.py +0 -0
  213. ngsolve/demos/howto/__init__.py +0 -0
  214. ngsolve/demos/howto/hhj.py +44 -0
  215. ngsolve/demos/howto/hybrid_dg.py +53 -0
  216. ngsolve/demos/howto/mixed.py +30 -0
  217. ngsolve/demos/howto/nonlin.py +29 -0
  218. ngsolve/demos/howto/pickling.py +26 -0
  219. ngsolve/demos/howto/pml.py +31 -0
  220. ngsolve/demos/howto/taskmanager.py +20 -0
  221. ngsolve/demos/howto/tdnns.py +47 -0
  222. ngsolve/demos/howto/timeDG-skeleton.py +45 -0
  223. ngsolve/demos/howto/timeDG.py +38 -0
  224. ngsolve/demos/howto/timeDGlap.py +42 -0
  225. ngsolve/demos/howto/timeDGwave.py +61 -0
  226. ngsolve/demos/intro/__init__.py +0 -0
  227. ngsolve/demos/intro/adaptive.py +123 -0
  228. ngsolve/demos/intro/cmagnet.py +59 -0
  229. ngsolve/demos/intro/elasticity.py +76 -0
  230. ngsolve/demos/intro/navierstokes.py +74 -0
  231. ngsolve/demos/intro/poisson.ipynb +170 -0
  232. ngsolve/demos/intro/poisson.py +41 -0
  233. ngsolve/demos/mpi/__init__.py +0 -0
  234. ngsolve/demos/mpi/mpi_cmagnet.py +87 -0
  235. ngsolve/demos/mpi/mpi_navierstokes.py +117 -0
  236. ngsolve/demos/mpi/mpi_poisson.py +89 -0
  237. ngsolve/demos/mpi/mpi_timeDG.py +82 -0
  238. ngsolve/directsolvers.py +26 -0
  239. ngsolve/eigenvalues.py +364 -0
  240. ngsolve/internal.py +89 -0
  241. ngsolve/krylovspace.py +1013 -0
  242. ngsolve/meshes.py +748 -0
  243. ngsolve/ngs2petsc.py +310 -0
  244. ngsolve/ngscxx.py +42 -0
  245. ngsolve/ngslib.lib +0 -0
  246. ngsolve/ngslib.pyd +0 -0
  247. ngsolve/nonlinearsolvers.py +203 -0
  248. ngsolve/preconditioners.py +11 -0
  249. ngsolve/solve_implementation.py +168 -0
  250. ngsolve/solvers.py +7 -0
  251. ngsolve/timestepping.py +185 -0
  252. ngsolve/timing.py +108 -0
  253. ngsolve/utils.py +167 -0
  254. ngsolve/webgui.py +670 -0
  255. ngsolve-6.2.2506.post74.dev0.data/data/Scripts/ngsolve.tcl +648 -0
  256. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/beam.geo +17 -0
  257. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/beam.vol +240 -0
  258. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/chip.in2d +41 -0
  259. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/chip.vol +614 -0
  260. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/coil.geo +12 -0
  261. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/coil.vol +2560 -0
  262. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/coilshield.geo +24 -0
  263. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/coilshield.vol +3179 -0
  264. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/cube.geo +19 -0
  265. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/cube.vol +1832 -0
  266. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d10_DGdoubleglazing.pde +50 -0
  267. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d11_chip_nitsche.pde +40 -0
  268. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d1_square.pde +43 -0
  269. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d2_chip.pde +35 -0
  270. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d3_helmholtz.pde +22 -0
  271. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d4_cube.pde +46 -0
  272. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d5_beam.pde +74 -0
  273. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d6_shaft.pde +73 -0
  274. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d7_coil.pde +50 -0
  275. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d8_coilshield.pde +49 -0
  276. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/d9_hybridDG.pde +72 -0
  277. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/doubleglazing.in2d +27 -0
  278. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/doubleglazing.vol +737 -0
  279. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/piezo2d40round4.vol.gz +0 -0
  280. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/shaft.geo +73 -0
  281. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/shaft.vol +4291 -0
  282. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/square.in2d +17 -0
  283. ngsolve-6.2.2506.post74.dev0.data/data/share/ngsolve/square.vol +149 -0
  284. ngsolve-6.2.2506.post74.dev0.dist-info/METADATA +14 -0
  285. ngsolve-6.2.2506.post74.dev0.dist-info/RECORD +288 -0
  286. ngsolve-6.2.2506.post74.dev0.dist-info/WHEEL +5 -0
  287. ngsolve-6.2.2506.post74.dev0.dist-info/licenses/LICENSE +504 -0
  288. ngsolve-6.2.2506.post74.dev0.dist-info/top_level.txt +2 -0
@@ -0,0 +1,595 @@
1
+ #ifndef FILE_ELASTICITY_EQUATIONS
2
+ #define FILE_ELASTICITY_EQUATIONS
3
+
4
+ /*********************************************************************/
5
+ /* File: elasticity_equations.hpp */
6
+ /* Author: Joachim Schoeberl */
7
+ /* Date: 10. Feb. 2002 */
8
+ /*********************************************************************/
9
+
10
+ namespace ngfem
11
+ {
12
+
13
+
14
+ /*
15
+
16
+ Elasticity integrators:
17
+
18
+ */
19
+
20
+
21
+
22
+
23
+
24
+ /* ******************** Elasticity ************************** */
25
+
26
+
27
+
28
+ /// Elasticity operator $(e_{11},e_{22},2 e_{12})$
29
+ template <int D, typename FEL = ScalarFiniteElement<D> >
30
+ class DiffOpStrain : public DiffOp<DiffOpStrain<D, FEL> >
31
+ {
32
+ };
33
+
34
+ template <typename FEL>
35
+ class DiffOpStrain<2, FEL> : public DiffOp<DiffOpStrain<2, FEL> >
36
+ {
37
+ public:
38
+ enum { DIM = 2 };
39
+ enum { DIM_SPACE = 2 };
40
+ enum { DIM_ELEMENT = 2 };
41
+ enum { DIM_DMAT = 3 };
42
+ enum { DIFFORDER = 1 };
43
+
44
+ template <typename AFEL, typename MIP, typename MAT>
45
+ static void GenerateMatrix (const AFEL & fel, const MIP & mip,
46
+ MAT && mat, LocalHeap & lh)
47
+ {
48
+ HeapReset hr(lh);
49
+ typedef typename remove_reference_t<MAT>::TSCAL TSCAL;
50
+ int nd = fel.GetNDof();
51
+
52
+ FlatMatrixFixHeight<2, TSCAL> grad (nd, lh);
53
+ FlatMatrixFixWidth<2> dshape(nd, lh);
54
+ static_cast<const FEL&>(fel).CalcDShape(mip.IP(), dshape);
55
+ grad = Trans (mip.GetJacobianInverse ()) * Trans (dshape);
56
+ /*
57
+ grad = Trans (mip.GetJacobianInverse ()) *
58
+ Trans (static_cast<const FEL&>(fel).GetDShape(mip.IP(), lh));
59
+ */
60
+ mat.AddSize(3, fel.GetNDof()) = TSCAL (0);
61
+ for (int i = 0; i < nd; i++)
62
+ {
63
+ mat(0, DIM*i ) = grad(0, i);
64
+ mat(1, DIM*i+1) = grad(1, i);
65
+ mat(2, DIM*i ) = grad(1, i);
66
+ mat(2, DIM*i+1) = grad(0, i);
67
+ }
68
+ }
69
+ };
70
+
71
+
72
+
73
+
74
+ template <typename FEL>
75
+ class DiffOpStrain<3, FEL> : public DiffOp<DiffOpStrain<3, FEL> >
76
+ {
77
+ public:
78
+ enum { DIM = 3 };
79
+ enum { DIM_SPACE = 3 };
80
+ enum { DIM_ELEMENT = 3 };
81
+ enum { DIM_DMAT = 6 };
82
+ enum { DIFFORDER = 1 };
83
+
84
+ template <typename AFEL, typename MIP, typename MAT>
85
+ static void GenerateMatrix (const AFEL & fel, const MIP & mip,
86
+ MAT && mat, LocalHeap & lh)
87
+ {
88
+ typedef typename remove_reference_t<MAT>::TSCAL TSCAL;
89
+
90
+ HeapReset hr(lh);
91
+ /*
92
+ mat = TSCAL(0);
93
+ static_cast<const FEL &>(fel).
94
+ CalcDShape (mip.IP(),
95
+ [&](int i, Vec<3> gradref)
96
+ {
97
+ Vec<3,TSCAL> grad =
98
+ Trans (mip.GetJacobianInverse ()) * gradref;
99
+
100
+ mat(0, 3*i ) = grad(0);
101
+ mat(1, 3*i+1) = grad(1);
102
+ mat(2, 3*i+2) = grad(2);
103
+
104
+ mat(3, 3*i ) = grad(1);
105
+ mat(3, 3*i+1) = grad(0);
106
+
107
+ mat(4, 3*i ) = grad(2);
108
+ mat(4, 3*i+2) = grad(0);
109
+
110
+ mat(5, 3*i+1) = grad(2);
111
+ mat(5, 3*i+2) = grad(1);
112
+ });
113
+ */
114
+ int nd = fel.GetNDof();
115
+ FlatMatrixFixHeight<3,TSCAL> grad (nd, lh);
116
+ FlatMatrixFixWidth<3> dshape(nd, lh);
117
+ static_cast<const FEL&>(fel).CalcDShape(mip.IP(), dshape);
118
+ grad = Trans (mip.GetJacobianInverse ()) * Trans (dshape);
119
+
120
+ /*
121
+ grad = Trans (mip.GetJacobianInverse ()) *
122
+ Trans (static_cast<const FEL &>(fel).GetDShape(mip.IP(),lh));
123
+ */
124
+ mat.AddSize(6, nd) = TSCAL (0);
125
+ for (int i = 0; i < nd; i++)
126
+ {
127
+ mat(0, DIM*i ) = grad(0, i);
128
+ mat(1, DIM*i+1) = grad(1, i);
129
+ mat(2, DIM*i+2) = grad(2, i);
130
+
131
+ mat(3, DIM*i ) = grad(1, i);
132
+ mat(3, DIM*i+1) = grad(0, i);
133
+
134
+ mat(4, DIM*i ) = grad(2, i);
135
+ mat(4, DIM*i+2) = grad(0, i);
136
+
137
+ mat(5, DIM*i+1) = grad(2, i);
138
+ mat(5, DIM*i+2) = grad(1, i);
139
+ }
140
+
141
+ }
142
+
143
+
144
+ #ifdef SERVICE
145
+ template <typename AFEL, typename MAT>
146
+ static void GenerateMatrix (const AFEL & fel,
147
+ const MappedIntegrationPoint<3,3> & mip,
148
+ MAT & mat, LocalHeap & lh)
149
+ {
150
+ typedef typename MAT::TSCAL TSCAL;
151
+
152
+ int nd = fel.GetNDof();
153
+ HeapReset hr(lh);
154
+
155
+ mat = TSCAL(0);
156
+ static_cast<const FEL &>(fel).
157
+ CalcMappedDShape (mip,
158
+ [&](int i, Vec<3> grad)
159
+ {
160
+ mat(0, 3*i ) = grad(0);
161
+ mat(1, 3*i+1) = grad(1);
162
+ mat(2, 3*i+2) = grad(2);
163
+
164
+ mat(3, 3*i ) = grad(1);
165
+ mat(3, 3*i+1) = grad(0);
166
+
167
+ mat(4, 3*i ) = grad(2);
168
+ mat(4, 3*i+2) = grad(0);
169
+
170
+ mat(5, 3*i+1) = grad(2);
171
+ mat(5, 3*i+2) = grad(1);
172
+ });
173
+
174
+ /*
175
+ FlatMatrixFixWidth<3> grad (nd, lh);
176
+ static_cast<const FEL &>(fel).CalcMappedDShape (mip, grad);
177
+
178
+ mat = TSCAL (0);
179
+ for (int i = 0; i < nd; i++)
180
+ {
181
+ mat(0, DIM*i ) = grad(i, 0);
182
+ mat(1, DIM*i+1) = grad(i, 1);
183
+ mat(2, DIM*i+2) = grad(i, 2);
184
+
185
+ mat(3, DIM*i ) = grad(i, 1);
186
+ mat(3, DIM*i+1) = grad(i, 0);
187
+
188
+ mat(4, DIM*i ) = grad(i, 2);
189
+ mat(4, DIM*i+2) = grad(i, 0);
190
+
191
+ mat(5, DIM*i+1) = grad(i, 2);
192
+ mat(5, DIM*i+2) = grad(i, 1);
193
+ }
194
+ */
195
+ }
196
+ #endif
197
+ };
198
+
199
+
200
+
201
+ /// 2D plane strain, and 3D
202
+ template <int DIM>
203
+ class ElasticityDMat : public DMatOp<ElasticityDMat<DIM>,DIM*(DIM+1)/2>
204
+ {
205
+ public:
206
+ shared_ptr<CoefficientFunction> coefe;
207
+ shared_ptr<CoefficientFunction> coefnu;
208
+ public:
209
+ enum { DIM_DMAT = (DIM * (DIM+1)) / 2 };
210
+
211
+ ElasticityDMat (shared_ptr<CoefficientFunction> acoefe,
212
+ shared_ptr<CoefficientFunction> acoefnu)
213
+ : coefe(acoefe), coefnu(acoefnu) { ; }
214
+
215
+ template <typename SCAL>
216
+ static Mat<DIM_DMAT,DIM_DMAT,SCAL> GetMatrixType(SCAL s) { return SCAL(0); }
217
+
218
+
219
+ template <typename FEL, typename MIP, typename MAT>
220
+ void GenerateMatrix (const FEL & fel, const MIP & mip,
221
+ MAT & mat, LocalHeap & lh) const
222
+ {
223
+ mat = 0;
224
+ double nu = Evaluate (*coefnu, mip);
225
+ double e = Evaluate (*coefe, mip);
226
+ int i;
227
+ for (i = 0; i < DIM; i++)
228
+ {
229
+ mat(i,i) = 1-nu;
230
+ for (int j = 0; j < i; j++)
231
+ mat(i,j) = mat(j,i) = nu;
232
+ }
233
+ for (i = DIM; i < (DIM*(DIM+1)/2); i++)
234
+ mat(i,i) = 0.5 * (1-2*nu);
235
+
236
+ mat *= (e / ((1 + nu) * (1 - 2 * nu)));
237
+ }
238
+ };
239
+
240
+
241
+ ///
242
+ template <int DIM>
243
+ class OrthotropicElasticityDMat : public DMatOp<OrthotropicElasticityDMat<DIM>,
244
+ DIM*(DIM+1)/2>
245
+ {
246
+ public:
247
+ CoefficientFunction * coefE1; // Young's moduli
248
+ CoefficientFunction * coefE2;
249
+ CoefficientFunction * coefE3;
250
+ CoefficientFunction * coefnu12; // Poisson's ratios (nu21/E2 = nu12/E1, nu31/E3 = nu13/E1, nu32/E3 = nu23/E2)
251
+ CoefficientFunction * coefnu13;
252
+ CoefficientFunction * coefnu23;
253
+ CoefficientFunction * coefG12; // shear moduil
254
+ CoefficientFunction * coefG13;
255
+ CoefficientFunction * coefG23;
256
+ public:
257
+ enum { DIM_DMAT = (DIM * (DIM+1)) / 2 };
258
+
259
+ OrthotropicElasticityDMat (const Array<shared_ptr<CoefficientFunction>> & coefs)
260
+ {
261
+ cerr << "OrthotropicElasticityDMat currently not available" << endl;
262
+ }
263
+ /*
264
+ OrthotropicElasticityDMat (CoefficientFunction * acoefE1,
265
+ CoefficientFunction * acoefE2,
266
+ CoefficientFunction * acoefE3,
267
+ CoefficientFunction * acoefnu12,
268
+ CoefficientFunction * acoefnu13,
269
+ CoefficientFunction * acoefnu23,
270
+ CoefficientFunction * acoefG12,
271
+ CoefficientFunction * acoefG13,
272
+ CoefficientFunction * acoefG23)
273
+ : coefE1(acoefE1), coefE2(acoefE2), coefE3(acoefE3),
274
+ coefnu12(acoefnu12), coefnu13(acoefnu13), coefnu23(acoefnu23),
275
+ coefG12(acoefG12), coefG13(acoefG13), coefG23(acoefG23) { ; }
276
+ */
277
+
278
+ template <typename SCAL>
279
+ static Mat<DIM_DMAT,DIM_DMAT,SCAL> GetMatrixType(SCAL s) { return SCAL(0); }
280
+
281
+ template <typename FEL, typename MIP, typename MAT>
282
+ void GenerateMatrix (const FEL & fel, const MIP & mip,
283
+ MAT & mat, LocalHeap & lh) const
284
+ {
285
+ mat = 0;
286
+ const double E1 = Evaluate (*coefE1, mip);
287
+ const double E2 = Evaluate (*coefE2, mip);
288
+ const double E3 = Evaluate (*coefE3, mip);
289
+
290
+ if(E1 < 1.e-5 || E2 < 1.e-5 || E3 < 1.e-5) return;
291
+
292
+ const double nu12 = Evaluate (*coefnu12, mip);
293
+ const double nu21 = nu12*(E2/E1);
294
+ const double nu13 = Evaluate (*coefnu13, mip);
295
+ const double nu31 = nu13*(E3/E1);
296
+ const double nu23 = Evaluate (*coefnu23, mip);
297
+ const double nu32 = nu23*(E3/E2);
298
+
299
+ if(nu12 < 0 || nu12 > 0.5 || nu21 < 0 || nu21 > 0.5 || nu13 < 0 || nu13 > 0.5 || nu31 < 0 || nu31 > 0.5 || nu23 < 0 || nu23 > 0.5 || nu32 < 0 || nu32 > 0.5)
300
+ {
301
+ cerr << "WARNING: Bad choice for elasticity constants: " << endl
302
+ << "E1 " << E1 << " E2 " << E2 << " E3 " << E3 << endl
303
+ << "nu12 " << nu12 << " nu21 " << nu21 << " nu13 " << nu13 << " nu31 " << nu31 << " nu23 " << nu23 << " nu32 " << nu32 <<endl;
304
+ }
305
+
306
+ const double denom = 1. - nu13*nu32*nu21 - nu12*nu23*nu31 - nu12*nu21 - nu13*nu31 - nu23*nu32;
307
+
308
+ mat(0,0) = E1*(1.-nu23*nu32)/denom;
309
+ mat(1,0) = mat(0,1) = E2*(nu12+nu13*nu32)/denom; mat(1,1) = E2*(1.-nu13*nu31)/denom;
310
+ mat(2,0) = mat(0,2) = E3*(nu13+nu12*nu23)/denom; mat(2,1) = mat(1,2) = E3*(nu23+nu13*nu21)/denom; mat(2,2) = E3*(1.-nu12*nu21)/denom;
311
+
312
+ mat(3,3) = Evaluate (*coefG12, mip);
313
+ mat(4,4) = Evaluate (*coefG13, mip);
314
+ mat(5,5) = Evaluate (*coefG23, mip);
315
+ }
316
+ };
317
+
318
+ /// Orthotropic Elasticity DMat with Cylindrical Coordinates
319
+ template <int DIM>
320
+ class OrthotropicCylElasticityDMat : public DMatOp<OrthotropicElasticityDMat<DIM>,
321
+ DIM*(DIM+1)/2>
322
+ {
323
+ public:
324
+ CoefficientFunction * coefE1; // Young's moduli
325
+ CoefficientFunction * coefE2;
326
+ CoefficientFunction * coefE3;
327
+ CoefficientFunction * coefnu12; // Poisson's ratios (nu21/E2 = nu12/E1, nu31/E3 = nu13/E1, nu32/E3 = nu23/E2)
328
+ CoefficientFunction * coefnu13;
329
+ CoefficientFunction * coefnu23;
330
+ CoefficientFunction * coefG12; // shear moduil
331
+ CoefficientFunction * coefG13;
332
+ CoefficientFunction * coefG23;
333
+ CoefficientFunction * coefUseCyl; // if 1 ... use cylindrical coordinates, if 0 ... standard ortot.
334
+ public:
335
+ enum { DIM_DMAT = (DIM * (DIM+1)) / 2 };
336
+
337
+ OrthotropicCylElasticityDMat (const Array<shared_ptr<CoefficientFunction>> & coefs)
338
+ {
339
+ cerr << "OrthotropicCylElasticityDMat currently not available" << endl;
340
+ }
341
+
342
+
343
+ OrthotropicCylElasticityDMat (CoefficientFunction * acoefE1,
344
+ CoefficientFunction * acoefE2,
345
+ CoefficientFunction * acoefE3,
346
+ CoefficientFunction * acoefnu12,
347
+ CoefficientFunction * acoefnu13,
348
+ CoefficientFunction * acoefnu23,
349
+ CoefficientFunction * acoefG12,
350
+ CoefficientFunction * acoefG13,
351
+ CoefficientFunction * acoefG23,
352
+ CoefficientFunction * acoefUseCyl)
353
+ : coefE1(acoefE1), coefE2(acoefE2), coefE3(acoefE3),
354
+ coefnu12(acoefnu12), coefnu13(acoefnu13), coefnu23(acoefnu23),
355
+ coefG12(acoefG12), coefG13(acoefG13), coefG23(acoefG23), coefUseCyl(acoefUseCyl) { ; }
356
+
357
+
358
+ // template <typename SCAL>
359
+ // static Mat<DIM_DMAT,DIM_DMAT,SCAL> GetMatrixType(SCAL s) { return SCAL(0); }
360
+
361
+
362
+ template <typename FEL, typename MIP, typename MAT>
363
+ void GenerateMatrix (const FEL & fel, const MIP & mip,
364
+ MAT & mat, LocalHeap & lh) const
365
+ {
366
+
367
+ double E1 = Evaluate (*coefE1, mip);
368
+ double E2 = Evaluate (*coefE2, mip);
369
+ double E3 = Evaluate (*coefE3, mip);
370
+
371
+ if(E1 < 1.e-5 || E2 < 1.e-5 || E3 < 1.e-5) return;
372
+
373
+ double nu12 = Evaluate (*coefnu12, mip);
374
+ double nu21 = nu12*(E2/E1);
375
+ double nu13 = Evaluate (*coefnu13, mip);
376
+ double nu31 = nu13*(E3/E1);
377
+ double nu23 = Evaluate (*coefnu23, mip);
378
+ double nu32 = nu23*(E3/E2);
379
+
380
+ const double useCyl = Evaluate (*coefUseCyl, mip);
381
+
382
+ double G12 = Evaluate (*coefG12, mip);
383
+ double G13 = Evaluate (*coefG13, mip);
384
+ double G23 = Evaluate (*coefG23, mip);
385
+
386
+
387
+
388
+ double n1 = mip.GetPoint()(0);
389
+ double n2 = mip.GetPoint()(1);
390
+ const double l = sqrt(n1*n1+n2*n2);
391
+
392
+ n1 /= l; n2 /= l;
393
+
394
+ if(nu12 < 0 || nu12 > 0.5 || nu21 < 0 || nu21 > 0.5 || nu13 < 0 || nu13 > 0.5 || nu31 < 0 || nu31 > 0.5 || nu23 < 0 || nu23 > 0.5 || nu32 < 0 || nu32 > 0.5)
395
+ {
396
+ cerr << "WARNING: Bad choice for elasticity constants: " << endl
397
+ << "E1 " << E1 << " E2 " << E2 << " E3 " << E3 << endl
398
+ << "nu12 " << nu12 << " nu21 " << nu21 << " nu13 " << nu13 << " nu31 " << nu31 << " nu23 " << nu23 << " nu32 " << nu32 <<endl;
399
+ }
400
+
401
+ const double denom = 1. - nu13*nu32*nu21 - nu12*nu23*nu31 - nu12*nu21 - nu13*nu31 - nu23*nu32;
402
+
403
+
404
+
405
+
406
+ MAT aux(mat),transf(mat);
407
+
408
+ aux = 0;
409
+
410
+ aux(0,0) = E1*(1.-nu23*nu32)/denom;
411
+ aux(1,0) = aux(0,1) = E2*(nu12+nu13*nu32)/denom; aux(1,1) = E2*(1.-nu13*nu31)/denom;
412
+ aux(2,0) = aux(0,2) = E3*(nu13+nu12*nu23)/denom; aux(2,1) = aux(1,2) = E3*(nu23+nu13*nu21)/denom; aux(2,2) = E3*(1.-nu12*nu21)/denom;
413
+
414
+ aux(3,3) = G12;
415
+ aux(4,4) = G13;
416
+ aux(5,5) = G23;
417
+
418
+ if(fabs(useCyl) > 0.5)
419
+ {
420
+ transf = 0;
421
+
422
+ transf(0,0) = transf(1,1) = n1*n1; transf(0,1) = transf(1,0) = n2*n2; transf(2,2) = 1.;
423
+ transf(0,3) = 2.*n1*n2; transf(1,3) = -2.*n1*n2;
424
+ transf(3,0) = -n1*n2; transf(3,1) = n1*n2;
425
+ transf(3,3) = n1*n1-n2*n2; transf(4,4) = transf(5,5) = n1; transf(4,5) = n2; transf(5,4) = -n2;
426
+
427
+ mat = Trans(transf)*aux*transf;
428
+ }
429
+ else
430
+ {
431
+ mat = aux;
432
+ }
433
+ }
434
+ };
435
+
436
+
437
+
438
+ ///
439
+ class PlaneStressDMat : public DMatOp<PlaneStressDMat,3>
440
+ {
441
+ CoefficientFunction * coefe;
442
+ CoefficientFunction * coefnu;
443
+ public:
444
+ enum { DIM_DMAT = 3 };
445
+
446
+ PlaneStressDMat (CoefficientFunction * acoefe,
447
+ CoefficientFunction * acoefnu)
448
+ : coefe(acoefe), coefnu(acoefnu) { ; }
449
+
450
+ template <typename FEL, typename MIP, typename MAT>
451
+ void GenerateMatrix (const FEL & fel, const MIP & mip,
452
+ MAT & mat, LocalHeap & lh) const
453
+ {
454
+ mat = 0;
455
+ double nu = Evaluate (*coefnu, mip);
456
+ double e = Evaluate (*coefe, mip);
457
+
458
+ mat(0,0) = mat(1,1) = 1;
459
+ mat(0,1) = mat(1,0) = nu;
460
+ mat(2,2) = (1-nu) / 2;
461
+
462
+ mat *= (e / (1 - nu * nu));
463
+ }
464
+ };
465
+
466
+ ///
467
+ template <int D>
468
+ class ElasticityIntegrator
469
+ : public T_BDBIntegrator<DiffOpStrain<D>, ElasticityDMat<D>, ScalarFiniteElement<D> >
470
+ {
471
+ typedef T_BDBIntegrator<DiffOpStrain<D>, ElasticityDMat<D>, ScalarFiniteElement<D> > BASE;
472
+ public:
473
+ ElasticityIntegrator (shared_ptr<CoefficientFunction> coefe,
474
+ shared_ptr<CoefficientFunction> coefnu)
475
+ : BASE(ElasticityDMat<D> (coefe, coefnu))
476
+ { ; }
477
+
478
+ ElasticityIntegrator (const Array<shared_ptr<CoefficientFunction>> & coeffs)
479
+ : BASE(ElasticityDMat<D> (coeffs[0], coeffs[1]))
480
+ { ; }
481
+
482
+ /*
483
+ static Integrator * Create (Array<CoefficientFunction*> & coeffs)
484
+ {
485
+ return new ElasticityIntegrator (coeffs[0], coeffs[1]);
486
+ }
487
+ */
488
+
489
+ ///
490
+ virtual string Name () const { return "Elasticity"; }
491
+ };
492
+
493
+
494
+ /*
495
+ // for plane stress
496
+ ///
497
+ template <>
498
+ class ElasticityIntegrator <2>
499
+ : public T_BDBIntegrator<DiffOpStrain<2>, PlaneStressDMat, ScalarFiniteElement<D> >
500
+ {
501
+ public:
502
+ ///
503
+ ElasticityIntegrator (CoefficientFunction * coefe,
504
+ CoefficientFunction * coefnu)
505
+ : T_BDBIntegrator<DiffOpStrain<2>, PlaneStressDMat, ScalarFiniteElement<D> >
506
+ (PlaneStressDMat (coefe, coefnu))
507
+ { ; }
508
+
509
+ static Integrator * Create (Array<CoefficientFunction*> & coeffs)
510
+ {
511
+ return new ElasticityIntegrator (coeffs[0], coeffs[1]);
512
+ }
513
+
514
+ ///
515
+ virtual string Name () const { return "Elasticity"; }
516
+ };
517
+ */
518
+
519
+
520
+ ///
521
+ template <int D>
522
+ class OrthotropicElasticityIntegrator
523
+ : public T_BDBIntegrator<DiffOpStrain<D>, OrthotropicElasticityDMat<D>, ScalarFiniteElement<D> >
524
+ {
525
+ typedef T_BDBIntegrator<DiffOpStrain<D>, OrthotropicElasticityDMat<D>, ScalarFiniteElement<D> > BASE;
526
+ public:
527
+ using T_BDBIntegrator<DiffOpStrain<D>, OrthotropicElasticityDMat<D>, ScalarFiniteElement<D> >::T_BDBIntegrator;
528
+ ///
529
+ /*
530
+ OrthotropicElasticityIntegrator (CoefficientFunction * coefE1,
531
+ CoefficientFunction * coefE2,
532
+ CoefficientFunction * coefE3,
533
+ CoefficientFunction * coefnu12,
534
+ CoefficientFunction * coefnu13,
535
+ CoefficientFunction * coefnu23,
536
+ CoefficientFunction * coefG12,
537
+ CoefficientFunction * coefG13,
538
+ CoefficientFunction * coefG23)
539
+ : T_BDBIntegrator<DiffOpStrain<D>, OrthotropicElasticityDMat<D>, ScalarFiniteElement<D> >
540
+ (OrthotropicElasticityDMat<D> (coefE1, coefE2, coefE3, coefnu12, coefnu13, coefnu23, coefG12, coefG13, coefG23))
541
+ { ; }
542
+
543
+ static Integrator * Create (Array<CoefficientFunction*> & coeffs)
544
+ {
545
+ return new OrthotropicElasticityIntegrator (coeffs[0], coeffs[1], coeffs[2], coeffs[3], coeffs[4], coeffs[5], coeffs[6], coeffs[7], coeffs[8]);
546
+ }
547
+ */
548
+
549
+
550
+ ///
551
+ virtual string Name () const { return "OrthotropicElasticity"; }
552
+ };
553
+
554
+
555
+ ///
556
+ template <int D>
557
+ class OrthotropicCylElasticityIntegrator
558
+ : public T_BDBIntegrator<DiffOpStrain<D>, OrthotropicCylElasticityDMat<D>, ScalarFiniteElement<D> >
559
+ {
560
+ typedef T_BDBIntegrator<DiffOpStrain<D>, OrthotropicCylElasticityDMat<D>, ScalarFiniteElement<D> > BASE;
561
+ public:
562
+ using T_BDBIntegrator<DiffOpStrain<D>, OrthotropicCylElasticityDMat<D>, ScalarFiniteElement<D> >::T_BDBIntegrator;
563
+ ///
564
+ /*
565
+ OrthotropicCylElasticityIntegrator (CoefficientFunction * coefE1,
566
+ CoefficientFunction * coefE2,
567
+ CoefficientFunction * coefE3,
568
+ CoefficientFunction * coefnu12,
569
+ CoefficientFunction * coefnu13,
570
+ CoefficientFunction * coefnu23,
571
+ CoefficientFunction * coefG12,
572
+ CoefficientFunction * coefG13,
573
+ CoefficientFunction * coefG23,
574
+ CoefficientFunction * coefUseCyl)
575
+ : T_BDBIntegrator<DiffOpStrain<D>, OrthotropicCylElasticityDMat<D>, ScalarFiniteElement<D> >
576
+ (OrthotropicCylElasticityDMat<D> (coefE1, coefE2, coefE3, coefnu12, coefnu13, coefnu23, coefG12, coefG13, coefG23, coefUseCyl))
577
+ { ; }
578
+
579
+ static Integrator * Create (Array<CoefficientFunction*> & coeffs)
580
+ {
581
+ return new OrthotropicCylElasticityIntegrator (coeffs[0], coeffs[1], coeffs[2], coeffs[3], coeffs[4], coeffs[5], coeffs[6], coeffs[7], coeffs[8], coeffs[9]);
582
+ }
583
+ */
584
+
585
+
586
+ ///
587
+ virtual string Name () const { return "OrthotropicCylElasticity"; }
588
+ };
589
+
590
+ }
591
+
592
+
593
+
594
+
595
+ #endif