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,717 @@
1
+ #ifndef HDIVFE_UTILS
2
+ #define HDIVFE_UTILS
3
+
4
+
5
+ #include "hcurlfe_utils.hpp"
6
+
7
+
8
+ namespace ngfem
9
+ {
10
+
11
+
12
+ // rotated gradient
13
+ template <int DIM> class DuRot;
14
+
15
+ template <> class DuRot<2>
16
+ {
17
+
18
+ public:
19
+ const AutoDiff<2> u;
20
+
21
+ DuRot (const AutoDiff<2> au)
22
+ : u(au) { ; }
23
+
24
+ Vec<2> Value () const
25
+ {
26
+ Vec<2> val;
27
+ val(0) = u.DValue(1);
28
+ val(1) = -u.DValue(0);
29
+ return val;
30
+ }
31
+
32
+ /*
33
+ Vec<DIM_CURL> CurlValue () const
34
+ {
35
+ return Vec<DIM> (0.0);
36
+ }
37
+ */
38
+ };
39
+
40
+
41
+
42
+
43
+ /*
44
+ template <int DIM, typename SCAL>
45
+ class Class_uDvDw_Cyclic
46
+ {
47
+ public:
48
+ const AutoDiff<DIM,SCAL> u, v, w;
49
+ Class_uDvDw_Cyclic (const AutoDiff<DIM,SCAL> au,
50
+ const AutoDiff<DIM,SCAL> av,
51
+ const AutoDiff<DIM,SCAL> aw)
52
+ : u(au), v(av), w(aw) { ; }
53
+ };
54
+
55
+ template <int DIM, typename SCAL>
56
+ INLINE Class_uDvDw_Cyclic<DIM,SCAL>
57
+ uDvDw_Cyclic (AutoDiff<DIM,SCAL> u, AutoDiff<DIM,SCAL> v, AutoDiff<DIM,SCAL> w)
58
+ { return Class_uDvDw_Cyclic<DIM,SCAL> (u,v,w); }
59
+ */
60
+
61
+ template <int DIM, typename SCAL>
62
+ class uDvDw_Cyclic
63
+ {
64
+ public:
65
+ const AutoDiff<DIM,SCAL> u, v, w;
66
+ uDvDw_Cyclic (const AutoDiff<DIM,SCAL> au,
67
+ const AutoDiff<DIM,SCAL> av,
68
+ const AutoDiff<DIM,SCAL> aw)
69
+ : u(au), v(av), w(aw) { ; }
70
+ };
71
+
72
+
73
+ /*
74
+ template <int DIM, typename SCAL>
75
+ INLINE Class_uDvDw_Cyclic<DIM,SCAL>
76
+ uDvDw_Cyclic (AutoDiff<DIM,SCAL> u, AutoDiff<DIM,SCAL> v, AutoDiff<DIM,SCAL> w)
77
+ { return Class_uDvDw_Cyclic<DIM,SCAL> (u,v,w); }
78
+ */
79
+
80
+
81
+
82
+ template <int DIM, typename SCAL>
83
+ class z_times_uDvDw_Cyclic
84
+ {
85
+ public:
86
+ const AutoDiff<DIM,SCAL> u, v, w, z;
87
+ z_times_uDvDw_Cyclic (const AutoDiff<DIM,SCAL> au,
88
+ const AutoDiff<DIM,SCAL> av,
89
+ const AutoDiff<DIM,SCAL> aw,
90
+ const AutoDiff<DIM,SCAL> az)
91
+ : u(au), v(av), w(aw), z(az) { ; }
92
+ };
93
+
94
+ /*
95
+ template <int DIM, typename SCAL>
96
+ INLINE auto
97
+ z_times_uDvDw_Cyclic (AutoDiff<DIM,SCAL> u, AutoDiff<DIM,SCAL> v,
98
+ AutoDiff<DIM,SCAL> w, AutoDiff<DIM,SCAL> z)
99
+ { return Class_z_times_uDvDw_Cyclic<DIM,SCAL> (u,v,w,z); }
100
+ */
101
+
102
+
103
+ /*
104
+ template <int DIM, typename SCAL>
105
+ INLINE auto
106
+ z_times_uDvDw_Cyclic (AutoDiff<DIM,SCAL> u, AutoDiff<DIM,SCAL> v,
107
+ AutoDiff<DIM,SCAL> w, AutoDiff<DIM,SCAL> z)
108
+ { return Class_z_times_uDvDw_Cyclic<DIM,SCAL> (u,v,w,z); }
109
+ */
110
+
111
+
112
+
113
+ template <int DIM, typename SCAL>
114
+ class Du_Cross_Dv
115
+ {
116
+ public:
117
+ const AutoDiff<DIM,SCAL> u, v;
118
+ Du_Cross_Dv (const AutoDiff<DIM,SCAL> au,
119
+ const AutoDiff<DIM,SCAL> av)
120
+ : u(au), v(av) { ; }
121
+ };
122
+
123
+ /*
124
+ template <int DIM, typename SCAL>
125
+ INLINE Class_Du_Cross_Dv<DIM,SCAL>
126
+ Du_Cross_Dv (AutoDiff<DIM,SCAL> u, AutoDiff<DIM,SCAL> v)
127
+ { return Class_Du_Cross_Dv<DIM,SCAL> (u,v); }
128
+ */
129
+
130
+
131
+ /*
132
+ template <int DIM, typename SCAL>
133
+ INLINE Class_Du_Cross_Dv<DIM,SCAL>
134
+ Du_Cross_Dv (AutoDiff<DIM,SCAL> u, AutoDiff<DIM,SCAL> v)
135
+ { return Class_Du_Cross_Dv<DIM,SCAL> (u,v); }
136
+ */
137
+
138
+ template <int DIM, typename SCAL>
139
+ class wDu_Cross_Dv
140
+ {
141
+ public:
142
+ const AutoDiff<DIM,SCAL> u, v, w;
143
+ wDu_Cross_Dv (const AutoDiff<DIM,SCAL> au,
144
+ const AutoDiff<DIM,SCAL> av,
145
+ const AutoDiff<DIM,SCAL> aw)
146
+ : u(au), v(av), w(aw) { ; }
147
+ };
148
+
149
+ /*
150
+ template <int DIM, typename SCAL>
151
+ INLINE Class_wDu_Cross_Dv<DIM,SCAL>
152
+ wDu_Cross_Dv(AutoDiff<DIM,SCAL> u, AutoDiff<DIM,SCAL> v, AutoDiff<DIM,SCAL> w)
153
+ { return Class_wDu_Cross_Dv<DIM,SCAL> (u,v,w); }
154
+ */
155
+
156
+ /*
157
+ template <int DIM, typename SCAL>
158
+ INLINE Class_wDu_Cross_Dv<DIM,SCAL>
159
+ wDu_Cross_Dv(AutoDiff<DIM,SCAL> u, AutoDiff<DIM,SCAL> v, AutoDiff<DIM,SCAL> w)
160
+ { return Class_wDu_Cross_Dv<DIM,SCAL> (u,v,w); }
161
+ */
162
+
163
+
164
+ template <int DIM, typename SCAL>
165
+ class uDvDw_minus_DuvDw
166
+ {
167
+ public:
168
+ const AutoDiff<DIM,SCAL> u, v, w;
169
+ uDvDw_minus_DuvDw (const AutoDiff<DIM,SCAL> au,
170
+ const AutoDiff<DIM,SCAL> av,
171
+ const AutoDiff<DIM,SCAL> aw)
172
+ : u(au), v(av), w(aw) { ; }
173
+ };
174
+
175
+ /*
176
+ template <int DIM, typename SCAL>
177
+ INLINE Class_uDvDw_minus_DuvDw<DIM,SCAL>
178
+ uDvDw_minus_DuvDw (AutoDiff<DIM,SCAL> u, AutoDiff<DIM,SCAL> v, AutoDiff<DIM,SCAL> w)
179
+ { return Class_uDvDw_minus_DuvDw<DIM,SCAL> (u,v,w); }
180
+ */
181
+
182
+ /*
183
+ template <int DIM, typename SCAL>
184
+ INLINE Class_uDvDw_minus_DuvDw<DIM,SCAL>
185
+ uDvDw_minus_DuvDw (AutoDiff<DIM,SCAL> u, AutoDiff<DIM,SCAL> v, AutoDiff<DIM,SCAL> w)
186
+ { return Class_uDvDw_minus_DuvDw<DIM,SCAL> (u,v,w); }
187
+ */
188
+
189
+ template <int DIM, typename SCAL>
190
+ class curl_uDvw_minus_Duvw
191
+ {
192
+ public:
193
+ const AutoDiff<DIM,SCAL> u, v, w;
194
+ curl_uDvw_minus_Duvw (const AutoDiff<DIM,SCAL> au,
195
+ const AutoDiff<DIM,SCAL> av,
196
+ const AutoDiff<DIM,SCAL> aw)
197
+ : u(au), v(av), w(aw) { ; }
198
+ };
199
+
200
+ /*
201
+ template <int DIM, typename SCAL>
202
+ INLINE Class_curl_uDvw_minus_Duvw<DIM,SCAL>
203
+ curl_uDvw_minus_Duvw (AutoDiff<DIM,SCAL> u, AutoDiff<DIM,SCAL> v, AutoDiff<DIM,SCAL> w)
204
+ { return Class_curl_uDvw_minus_Duvw<DIM,SCAL> (u,v,w); }
205
+ */
206
+
207
+ /*
208
+ template <int DIM, typename SCAL>
209
+ INLINE Class_curl_uDvw_minus_Duvw<DIM,SCAL>
210
+ curl_uDvw_minus_Duvw (AutoDiff<DIM,SCAL> u, AutoDiff<DIM,SCAL> v, AutoDiff<DIM,SCAL> w)
211
+ { return Class_curl_uDvw_minus_Duvw<DIM,SCAL> (u,v,w); }
212
+ */
213
+
214
+
215
+ #ifdef OLDTHDIV2SHAPE
216
+ template <int DIM, typename SCAL = double> class THDiv2Shape
217
+ {
218
+ public:
219
+ INLINE operator Vec<DIM,SCAL> () { return 0.0; }
220
+ };
221
+
222
+
223
+ template <typename SCAL> class THDiv2Shape<2,SCAL>
224
+ {
225
+ Vec<2,SCAL> data;
226
+ public:
227
+ INLINE THDiv2Shape (Du<2,SCAL> uv)
228
+ {
229
+ data = Vec<2,SCAL> (uv.u.DValue(1), -uv.u.DValue(0));
230
+ }
231
+
232
+ INLINE THDiv2Shape (uDv<2,SCAL> uv)
233
+ {
234
+ data = Vec<2,SCAL> (-uv.u.Value()*uv.v.DValue(1),
235
+ uv.u.Value()*uv.v.DValue(0));
236
+ }
237
+
238
+ INLINE THDiv2Shape (const uDv_minus_vDu<2,SCAL> & uv)
239
+ {
240
+ data(0) = -uv.u.Value() * uv.v.DValue(1) + uv.u.DValue(1) * uv.v.Value();
241
+ data(1) = uv.u.Value() * uv.v.DValue(0) - uv.u.DValue(0) * uv.v.Value();
242
+ }
243
+
244
+ INLINE THDiv2Shape (const wuDv_minus_wvDu<2,SCAL> & uv)
245
+ {
246
+ data[0] = -uv.u.Value() * uv.v.DValue(1) + uv.u.DValue(1) * uv.v.Value();
247
+ data[1] = uv.u.Value() * uv.v.DValue(0) - uv.u.DValue(0) * uv.v.Value();
248
+ data[0] *= uv.w.Value();
249
+ data[1] *= uv.w.Value();
250
+ }
251
+
252
+ INLINE operator Vec<2,SCAL> () const { return data; }
253
+ };
254
+
255
+
256
+ template <typename SCAL> class THDiv2Shape<3,SCAL>
257
+ {
258
+ Vec<3,SCAL> data;
259
+ public:
260
+
261
+ INLINE THDiv2Shape (const uDvDw_Cyclic<3,SCAL> & uvw)
262
+ {
263
+ /*
264
+ AutoDiff<3,SCAL> hv =
265
+ uvw.u.Value() * Cross (uvw.v, uvw.w) +
266
+ uvw.v.Value() * Cross (uvw.w, uvw.u) +
267
+ uvw.w.Value() * Cross (uvw.u, uvw.v);
268
+
269
+ for (int i = 0; i < 3; i++)
270
+ data[i] = hv.DValue(i);
271
+ */
272
+ AutoDiff<3,SCAL> p1 = Cross (uvw.v, uvw.w);
273
+ AutoDiff<3,SCAL> p2 = Cross (uvw.w, uvw.u);
274
+ AutoDiff<3,SCAL> p3 = Cross (uvw.u, uvw.v);
275
+
276
+ for (int i = 0; i < 3; i++)
277
+ data[i] =
278
+ uvw.u.Value() * p1.DValue(i) +
279
+ uvw.v.Value() * p2.DValue(i) +
280
+ uvw.w.Value() * p3.DValue(i);
281
+ }
282
+
283
+
284
+ INLINE THDiv2Shape (const z_times_uDvDw_Cyclic<3,SCAL> & uvwz)
285
+ {
286
+ /*
287
+ AutoDiff<3,SCAL> hv =
288
+ uvw.u.Value() * Cross (uvw.v, uvw.w) +
289
+ uvw.v.Value() * Cross (uvw.w, uvw.u) +
290
+ uvw.w.Value() * Cross (uvw.u, uvw.v);
291
+
292
+ for (int i = 0; i < 3; i++)
293
+ data[i] = hv.DValue(i);
294
+ */
295
+ AutoDiff<3,SCAL> p1 = Cross (uvwz.v, uvwz.w);
296
+ AutoDiff<3,SCAL> p2 = Cross (uvwz.w, uvwz.u);
297
+ AutoDiff<3,SCAL> p3 = Cross (uvwz.u, uvwz.v);
298
+
299
+ for (int i = 0; i < 3; i++)
300
+ data[i] =
301
+ uvwz.z.Value() * uvwz.u.Value() * p1.DValue(i) +
302
+ uvwz.z.Value() * uvwz.v.Value() * p2.DValue(i) +
303
+ uvwz.z.Value() * uvwz.w.Value() * p3.DValue(i);
304
+ }
305
+
306
+ INLINE THDiv2Shape (const Du_Cross_Dv<3,SCAL> & uv)
307
+ {
308
+ AutoDiff<3,SCAL> hv = Cross (uv.u, uv.v);
309
+ for (int i = 0; i < 3; i++)
310
+ data[i] = hv.DValue(i);
311
+ }
312
+
313
+ INLINE THDiv2Shape (const wDu_Cross_Dv<3,SCAL> & uvw)
314
+ {
315
+ AutoDiff<3,SCAL> hv = Cross (uvw.u, uvw.v);
316
+ for (int i = 0; i < 3; i++)
317
+ data[i] = uvw.w.Value() * hv.DValue(i);
318
+ }
319
+
320
+
321
+ INLINE THDiv2Shape (const uDvDw_minus_DuvDw<3,SCAL> & uvw)
322
+ {
323
+ /*
324
+ AutoDiff<3,SCAL> hv =
325
+ uvw.u.Value() * Cross (uvw.v, uvw.w) +
326
+ uvw.v.Value() * Cross (uvw.w, uvw.u);
327
+
328
+ for (int i = 0; i < 3; i++)
329
+ data[i] = hv.DValue(i);
330
+ */
331
+ AutoDiff<3,SCAL> p1 = Cross (uvw.v, uvw.w);
332
+ AutoDiff<3,SCAL> p2 = Cross (uvw.w, uvw.u);
333
+
334
+ for (int i = 0; i < 3; i++)
335
+ data[i] =
336
+ uvw.u.Value() * p1.DValue(i) +
337
+ uvw.v.Value() * p2.DValue(i);
338
+ }
339
+
340
+ INLINE THDiv2Shape (const curl_uDvw_minus_Duvw<3,SCAL> & uvw)
341
+ {
342
+ AutoDiff<3,SCAL> hv = Cross (uvw.u*uvw.w, uvw.v) - Cross (uvw.v*uvw.w, uvw.u);
343
+ for (int i = 0; i < 3; i++)
344
+ data[i] = hv.DValue(i);
345
+ }
346
+
347
+ INLINE operator Vec<3,SCAL> () const { return data; }
348
+ };
349
+ #endif
350
+
351
+
352
+
353
+ /////////////////////
354
+
355
+
356
+ template <typename SCAL>
357
+ INLINE auto HDiv2ShapeNew (Du<2,SCAL> uv)
358
+ {
359
+ return Vec<2,SCAL> (-uv.u.DValue(0), -uv.u.DValue(1)); // signs to fit historic inconsistency
360
+ }
361
+
362
+
363
+ template <typename SCAL>
364
+ INLINE auto HDiv2ShapeNew (uDv<2,SCAL> uv)
365
+ {
366
+ return Vec<2,SCAL> (uv.u.Value()*uv.v.DValue(0),
367
+ uv.u.Value()*uv.v.DValue(1));
368
+ }
369
+
370
+ template <typename SCAL>
371
+ INLINE auto HDiv2ShapeNew (const uDv_minus_vDu<2,SCAL> & uv)
372
+ {
373
+ Vec<2,SCAL> data;
374
+ data(0) = uv.u.Value() * uv.v.DValue(0) - uv.u.DValue(0) * uv.v.Value();
375
+ data(1) = uv.u.Value() * uv.v.DValue(1) - uv.u.DValue(1) * uv.v.Value();
376
+ return data;
377
+ }
378
+
379
+ template <typename SCAL>
380
+ INLINE auto HDiv2ShapeNew (const wuDv_minus_wvDu<2,SCAL> & uv)
381
+ {
382
+ Vec<2,SCAL> data;
383
+ data[0] = uv.u.Value() * uv.v.DValue(0) - uv.u.DValue(0) * uv.v.Value();
384
+ data[1] = uv.u.Value() * uv.v.DValue(1) - uv.u.DValue(1) * uv.v.Value();
385
+ data[0] *= uv.w.Value();
386
+ data[1] *= uv.w.Value();
387
+ return data;
388
+ }
389
+
390
+ template <typename SCAL>
391
+ INLINE auto HDiv2ShapeNew (Du<3,SCAL> uv)
392
+ {
393
+ return Vec<3,SCAL> (-uv.u.DValue(0), -uv.u.DValue(1), -uv.u.DValue(2));
394
+ }
395
+
396
+ template <typename SCAL>
397
+ INLINE auto HDiv2ShapeNew (uDv<3,SCAL> uv)
398
+ {
399
+ return Vec<3,SCAL> (uv.u.Value()*uv.v.DValue(0),
400
+ uv.u.Value()*uv.v.DValue(1),
401
+ uv.u.Value()*uv.v.DValue(2));
402
+ }
403
+
404
+ template <typename SCAL>
405
+ INLINE auto HDiv2ShapeNew (const uDv_minus_vDu<3,SCAL> & uv)
406
+ {
407
+ Vec<3,SCAL> data;
408
+ data(0) = uv.u.Value() * uv.v.DValue(0) - uv.u.DValue(0) * uv.v.Value();
409
+ data(1) = uv.u.Value() * uv.v.DValue(1) - uv.u.DValue(1) * uv.v.Value();
410
+ data(2) = uv.u.Value() * uv.v.DValue(2) - uv.u.DValue(2) * uv.v.Value();
411
+ return data;
412
+ }
413
+
414
+ template <typename SCAL>
415
+ INLINE auto HDiv2ShapeNew (const wuDv_minus_wvDu<3,SCAL> & uv)
416
+ {
417
+ Vec<3,SCAL> data;
418
+ data[0] = uv.u.Value() * uv.v.DValue(0) - uv.u.DValue(0) * uv.v.Value();
419
+ data[1] = uv.u.Value() * uv.v.DValue(1) - uv.u.DValue(1) * uv.v.Value();
420
+ data[2] = uv.u.Value() * uv.v.DValue(2) - uv.u.DValue(2) * uv.v.Value();
421
+ data[0] *= uv.w.Value();
422
+ data[1] *= uv.w.Value();
423
+ data[2] *= uv.w.Value();
424
+ return data;
425
+ }
426
+
427
+ template <typename SCAL>
428
+ INLINE auto HDiv2ShapeNew (const uDvDw_Cyclic<3,SCAL> & uvw)
429
+ {
430
+ AutoDiff<3,SCAL> p1 = Cross (uvw.v, uvw.w);
431
+ AutoDiff<3,SCAL> p2 = Cross (uvw.w, uvw.u);
432
+ AutoDiff<3,SCAL> p3 = Cross (uvw.u, uvw.v);
433
+
434
+ Vec<3,SCAL> data;
435
+ for (int i = 0; i < 3; i++)
436
+ data[i] =
437
+ uvw.u.Value() * p1.DValue(i) +
438
+ uvw.v.Value() * p2.DValue(i) +
439
+ uvw.w.Value() * p3.DValue(i);
440
+ return data;
441
+ }
442
+
443
+ template <typename SCAL>
444
+ INLINE auto HDiv2ShapeNew (const z_times_uDvDw_Cyclic<3,SCAL> & uvwz)
445
+ {
446
+ AutoDiff<3,SCAL> p1 = Cross (uvwz.v, uvwz.w);
447
+ AutoDiff<3,SCAL> p2 = Cross (uvwz.w, uvwz.u);
448
+ AutoDiff<3,SCAL> p3 = Cross (uvwz.u, uvwz.v);
449
+
450
+ Vec<3,SCAL> data;
451
+ for (int i = 0; i < 3; i++)
452
+ data[i] =
453
+ uvwz.z.Value() * uvwz.u.Value() * p1.DValue(i) +
454
+ uvwz.z.Value() * uvwz.v.Value() * p2.DValue(i) +
455
+ uvwz.z.Value() * uvwz.w.Value() * p3.DValue(i);
456
+ return data;
457
+ }
458
+
459
+
460
+ template <typename SCAL>
461
+ INLINE auto HDiv2ShapeNew (const Du_Cross_Dv<3,SCAL> & uv)
462
+ {
463
+ AutoDiff<3,SCAL> hv = Cross (uv.u, uv.v);
464
+ Vec<3,SCAL> data;
465
+ for (int i = 0; i < 3; i++)
466
+ data[i] = hv.DValue(i);
467
+ return data;
468
+ }
469
+
470
+ template <typename SCAL>
471
+ INLINE auto HDiv2ShapeNew (const wDu_Cross_Dv<3,SCAL> & uvw)
472
+ {
473
+ AutoDiff<3,SCAL> hv = Cross (uvw.u, uvw.v);
474
+ Vec<3,SCAL> data;
475
+ for (int i = 0; i < 3; i++)
476
+ data[i] = uvw.w.Value() * hv.DValue(i);
477
+ return data;
478
+ }
479
+
480
+
481
+ template <typename SCAL>
482
+ INLINE auto HDiv2ShapeNew (const uDvDw_minus_DuvDw<3,SCAL> & uvw)
483
+ {
484
+ /*
485
+ AutoDiff<3,SCAL> hv =
486
+ uvw.u.Value() * Cross (uvw.v, uvw.w) +
487
+ uvw.v.Value() * Cross (uvw.w, uvw.u);
488
+
489
+ for (int i = 0; i < 3; i++)
490
+ data[i] = hv.DValue(i);
491
+ */
492
+ AutoDiff<3,SCAL> p1 = Cross (uvw.v, uvw.w);
493
+ AutoDiff<3,SCAL> p2 = Cross (uvw.w, uvw.u);
494
+
495
+ Vec<3,SCAL> data;
496
+ for (int i = 0; i < 3; i++)
497
+ data[i] =
498
+ uvw.u.Value() * p1.DValue(i) +
499
+ uvw.v.Value() * p2.DValue(i);
500
+ return data;
501
+ }
502
+
503
+ template <typename SCAL>
504
+ INLINE auto HDiv2ShapeNew (const curl_uDvw_minus_Duvw<3,SCAL> & uvw)
505
+ {
506
+ AutoDiff<3,SCAL> hv = Cross (uvw.u*uvw.w, uvw.v) - Cross (uvw.v*uvw.w, uvw.u);
507
+ Vec<3,SCAL> data;
508
+ for (int i = 0; i < 3; i++)
509
+ data[i] = hv.DValue(i);
510
+ return data;
511
+ }
512
+
513
+
514
+ //////////////////////////
515
+
516
+
517
+
518
+
519
+
520
+
521
+
522
+ /*
523
+ // 2D
524
+ template <int DIM>
525
+ class HDivShapeElement
526
+ {
527
+ double * data;
528
+ public:
529
+ HDivShapeElement (double * adata) : data(adata) { ; }
530
+
531
+ void operator= (THDiv2Shape<DIM> hd2vec)
532
+ {
533
+ Vec<DIM> v = hd2vec;
534
+ for (int j = 0; j < DIM; j++)
535
+ data[j] = v(j);
536
+ }
537
+ };
538
+
539
+
540
+ template <int DIM>
541
+ class HDivEvaluateShapeElement
542
+ {
543
+ const double * coefs;
544
+ Vec<DIM> & sum;
545
+ public:
546
+ HDivEvaluateShapeElement (const double * acoefs, Vec<DIM> & asum)
547
+ : coefs(acoefs), sum(asum) { ; }
548
+
549
+
550
+ void operator= (THDiv2Shape<DIM> hd2vec)
551
+ {
552
+ sum += *coefs * Vec<DIM> (hd2vec);
553
+ }
554
+ };
555
+ */
556
+
557
+
558
+
559
+
560
+
561
+
562
+ template <int DIM, typename SCAL = double> class THDiv2DivShape
563
+ {
564
+ public:
565
+ INLINE operator SCAL () const { return SCAL(0.0); }
566
+ INLINE SCAL Get() const { return SCAL(0.0); }
567
+ };
568
+
569
+ template <typename SCAL> class THDiv2DivShape<2,SCAL>
570
+ {
571
+ SCAL data;
572
+ public:
573
+ INLINE THDiv2DivShape (Du<2,SCAL> uv)
574
+ {
575
+ data = SCAL(0.0);
576
+ }
577
+
578
+ INLINE THDiv2DivShape (uDv<2,SCAL> uv)
579
+ {
580
+ AutoDiff<1,SCAL> hd = Cross (uv.u, uv.v);
581
+ data = -hd.DValue(0);
582
+ }
583
+
584
+ INLINE THDiv2DivShape (const uDv_minus_vDu<2,SCAL> & uv)
585
+ {
586
+ data = -2*uv.u.DValue(0) * uv.v.DValue(1)
587
+ + 2*uv.u.DValue(1) * uv.v.DValue(0);
588
+ }
589
+
590
+ INLINE THDiv2DivShape (const wuDv_minus_wvDu<2,SCAL> & uv)
591
+ {
592
+ AutoDiff<1,SCAL> hd = Cross (uv.u*uv.w, uv.v) + Cross(uv.u, uv.v*uv.w);
593
+ data = -hd.DValue(0);
594
+ }
595
+
596
+ INLINE operator SCAL () const { return data; }
597
+ INLINE SCAL Get() const { return data; }
598
+ };
599
+
600
+
601
+ template <typename SCAL> class THDiv2DivShape<3,SCAL>
602
+ {
603
+ SCAL data;
604
+ public:
605
+
606
+ INLINE THDiv2DivShape (const uDvDw_Cyclic<3,SCAL> & uvw)
607
+ {
608
+ data =
609
+ Dot (uvw.u, Cross (uvw.v, uvw.w)) +
610
+ Dot (uvw.v, Cross (uvw.w, uvw.u)) +
611
+ Dot (uvw.w, Cross (uvw.u, uvw.v));
612
+ }
613
+
614
+ INLINE THDiv2DivShape (const z_times_uDvDw_Cyclic<3,SCAL> & uvwz)
615
+ {
616
+ data =
617
+ Dot (uvwz.z * uvwz.u, Cross (uvwz.v, uvwz.w)) +
618
+ Dot (uvwz.z * uvwz.v, Cross (uvwz.w, uvwz.u)) +
619
+ Dot (uvwz.z * uvwz.w, Cross (uvwz.u, uvwz.v));
620
+ }
621
+
622
+ INLINE THDiv2DivShape (const Du_Cross_Dv<3,SCAL> & uv)
623
+ {
624
+ data = 0.0;
625
+ }
626
+
627
+ INLINE THDiv2DivShape (const wDu_Cross_Dv<3,SCAL> & uvw)
628
+ {
629
+ data = Dot (uvw.w, Cross (uvw.u, uvw.v));
630
+ }
631
+
632
+ INLINE THDiv2DivShape (const uDvDw_minus_DuvDw<3,SCAL> & uvw)
633
+ {
634
+ data =
635
+ Dot (uvw.u, Cross (uvw.v, uvw.w)) +
636
+ Dot (uvw.v, Cross (uvw.w, uvw.u));
637
+ }
638
+
639
+ INLINE THDiv2DivShape (const curl_uDvw_minus_Duvw<3,SCAL> & uvw)
640
+ {
641
+ data = SCAL(0.0);
642
+ }
643
+
644
+ INLINE operator SCAL () const { return data; }
645
+ INLINE SCAL Get() const { return data; }
646
+ };
647
+
648
+
649
+
650
+
651
+ /*
652
+ template <int DIM, typename SCAL = double>
653
+ class HDivDivShapeElement
654
+ {
655
+ SCAL * data;
656
+ public:
657
+ HDivDivShapeElement (SCAL * adata) : data(adata) { ; }
658
+
659
+
660
+ void operator= (const THDiv2DivShape<DIM,SCAL> & hd2dshape)
661
+ {
662
+ *data = hd2dshape;
663
+ }
664
+ };
665
+
666
+ template <int DIM>
667
+ class HDivShapeAssign
668
+ {
669
+ double * dshape;
670
+ public:
671
+ HDivShapeAssign (FlatMatrixFixWidth<DIM> mat)
672
+ { dshape = &mat(0,0); }
673
+
674
+ HDivShapeElement<DIM> operator[] (int i) const
675
+ { return HDivShapeElement<DIM> (dshape + i*DIM); }
676
+ };
677
+
678
+
679
+ template <int DIM>
680
+ class HDivDivShapeAssign
681
+ {
682
+ SliceVector<> dshape;
683
+ public:
684
+ HDivDivShapeAssign (SliceVector<> mat)
685
+ : dshape(mat) { ; }
686
+
687
+ HDivDivShapeElement<DIM> operator[] (int i) const
688
+ { return HDivDivShapeElement<DIM> (&dshape(i)); }
689
+ };
690
+
691
+ template <int DIM>
692
+ class HDivEvaluateShape
693
+ {
694
+ const double * coefs;
695
+ Vec<DIM> sum;
696
+ public:
697
+ HDivEvaluateShape (FlatVector<> acoefs)
698
+ { coefs = &acoefs(0); sum = 0.0; }
699
+
700
+ HDivEvaluateShapeElement<DIM> operator[] (int i)
701
+ { return HDivEvaluateShapeElement<DIM> (coefs+i, sum); }
702
+
703
+ Vec<DIM> Sum() { return sum; }
704
+ };
705
+ */
706
+
707
+
708
+
709
+
710
+
711
+
712
+
713
+
714
+ }
715
+
716
+
717
+ #endif