PageRenderTime 65ms CodeModel.GetById 31ms RepoModel.GetById 1ms app.codeStats 0ms

/src/lib/element/lagrange_triangle.cpp

https://gitlab.com/philipclaude/avro2
C++ | 411 lines | 330 code | 44 blank | 37 comment | 1 complexity | ebbbe2d1f3bfb936e081dfe927dfd45d MD5 | raw file
  1. //
  2. // avro - Adaptive Voronoi Remesher
  3. //
  4. // Copyright 2017-2022, Philip Claude Caplan
  5. // All rights reserved
  6. //
  7. // Licensed under The GNU Lesser General Public License, version 2.1
  8. // See http://www.opensource.org/licenses/lgpl-2.1.php
  9. //
  10. #include "common/error.h"
  11. #include "element/basis.h"
  12. namespace avro
  13. {
  14. #ifndef ONESIXTH
  15. #define ONESIXTH 0.16666666666666666666666666666667
  16. #endif
  17. #ifndef ONETHIRD
  18. #define ONETHIRD 0.3333333333333333333333333333333
  19. #endif
  20. #define O3 1./3. // One over 3
  21. #define T3 2./3. // Two over 3
  22. #define Q4 1./4. // Quarter
  23. #define H2 1./2. // Half
  24. #define T4 3./4. // Three quarters
  25. /*
  26. * triangle, p = 1
  27. */
  28. template<>
  29. void
  30. Lagrange<Simplex,2,1>::eval( const real_t* x , real_t* phi ) {
  31. real_t s = x[0];
  32. real_t t = x[1];
  33. // phi
  34. phi[0] = -s-t+1.0;
  35. phi[1] = s;
  36. phi[2] = t;
  37. }
  38. template<>
  39. void
  40. Lagrange<Simplex,2,1>::grad( const real_t* x , real_t* phi ) {
  41. real_t* phis = phi;
  42. phis[0] = -1.0;
  43. phis[1] = 1.0;
  44. phis[2] = 0.0;
  45. real_t* phit = phi + 3;
  46. phit[0] = -1.0;
  47. phit[1] = 0.0;
  48. phit[2] = 1.0;
  49. }
  50. template<>
  51. void
  52. Lagrange<Simplex,2,1>::hess( const real_t* x , real_t* phi ) {
  53. for (index_t i = 0; i < 9; i++)
  54. phi[i] = 0;
  55. }
  56. /*
  57. * triangle, p = 2
  58. */
  59. template<>
  60. void
  61. Lagrange<Simplex,2,2>::eval( const real_t* x , real_t* phi ) {
  62. real_t s = x[0];
  63. real_t t = x[1];
  64. phi[0] = s*-3.0-t*3.0+s*t*4.0+(s*s)*2.0+(t*t)*2.0+1.0;
  65. phi[1] = -s+(s*s)*2.0;
  66. phi[2] = -t+(t*t)*2.0;
  67. phi[3] = s*t*4.0;
  68. phi[4] = t*(s+t-1.0)*-4.0;
  69. phi[5] = -s*(s*4.0+t*4.0-4.0);
  70. }
  71. template<>
  72. void
  73. Lagrange<Simplex,2,2>::grad( const real_t* x , real_t* phi ) {
  74. real_t s = x[0];
  75. real_t t = x[1];
  76. real_t* phis = phi;
  77. phis[0] = s*4.0+t*4.0-3.0;
  78. phis[1] = s*4.0-1.0;
  79. phis[2] = 0.0;
  80. phis[3] = t*4.0;
  81. phis[4] = t*-4.0;
  82. phis[5] = s*-8.0-t*4.0+4.0;
  83. real_t* phit = phi + 6;
  84. phit[0] = s*4.0+t*4.0-3.0;
  85. phit[1] = 0.0;
  86. phit[2] = t*4.0-1.0;
  87. phit[3] = s*4.0;
  88. phit[4] = s*-4.0-t*8.0+4.0;
  89. phit[5] = s*-4.0;
  90. }
  91. template<>
  92. void
  93. Lagrange<Simplex,2,2>::hess( const real_t* x , real_t* phi ) {
  94. // phiss
  95. real_t *phiss = phi;
  96. phiss[0] = 4.0;
  97. phiss[1] = 4.0;
  98. phiss[2] = 0.0;
  99. phiss[3] = 0.0;
  100. phiss[4] = 0.0;
  101. phiss[5] = -8.0;
  102. // phist
  103. real_t *phist = phi + 6;
  104. phist[0] = 4.0;
  105. phist[1] = 0.0;
  106. phist[2] = 0.0;
  107. phist[3] = 4.0;
  108. phist[4] = -4.0;
  109. phist[5] = -4.0;
  110. // phitt
  111. real_t *phitt = phi + 12;
  112. phitt[0] = 4.0;
  113. phitt[1] = 0.0;
  114. phitt[2] = 4.0;
  115. phitt[3] = 0.0;
  116. phitt[4] = -8.0;
  117. phitt[5] = 0.0;
  118. }
  119. /*
  120. * triangle, p = 3
  121. */
  122. template<>
  123. void
  124. Lagrange<Simplex,2,3>::eval( const real_t* x , real_t* phi ) {
  125. real_t s = x[0];
  126. real_t t = x[1];
  127. phi[0] = s*(-1.1E1/2.0)-t*(1.1E1/2.0)+s*t*1.8E1-s*(t*t)*(2.7E1/2.0)-(s*s)*t*(2.7E1/2.0)+(s*s)*9.0-
  128. (s*s*s)*(9.0/2.0)+(t*t)*9.0-(t*t*t)*(9.0/2.0)+1.0;
  129. phi[1] = s-(s*s)*(9.0/2.0)+(s*s*s)*(9.0/2.0);
  130. phi[2] = t-(t*t)*(9.0/2.0)+(t*t*t)*(9.0/2.0);
  131. phi[3] = s*t*(-9.0/2.0)+(s*s)*t*(2.7E1/2.0);
  132. phi[4] = s*t*(-9.0/2.0)+s*(t*t)*(2.7E1/2.0);
  133. phi[5] = t*(-9.0/2.0)+s*t*(9.0/2.0)-s*(t*t)*(2.7E1/2.0)+(t*t)*1.8E1-(t*t*t)*(2.7E1/2.0);
  134. phi[6] = t*9.0-s*t*(4.5E1/2.0)+s*(t*t)*2.7E1+(s*s)*t*(2.7E1/2.0)-(t*t)*(4.5E1/2.0)+(t*t*t)*(2.7E1/2.0);
  135. phi[7] = s*9.0-s*t*(4.5E1/2.0)+s*(t*t)*(2.7E1/2.0)+(s*s)*t*2.7E1-(s*s)*(4.5E1/2.0)+(s*s*s)*(2.7E1/2.0);
  136. phi[8] = s*(-9.0/2.0)+s*t*(9.0/2.0)-(s*s)*t*(2.7E1/2.0)+(s*s)*1.8E1-(s*s*s)*(2.7E1/2.0);
  137. phi[9] = s*t*2.7E1-s*(t*t)*2.7E1-(s*s)*t*2.7E1;
  138. }
  139. template<>
  140. void
  141. Lagrange<Simplex,2,3>::grad( const real_t* x , real_t* phi ) {
  142. real_t s = x[0];
  143. real_t t = x[1];
  144. real_t* phis = phi;
  145. phis[0] = s*1.8E1+t*1.8E1-s*t*2.7E1-(s*s)*(2.7E1/2.0)-(t*t)*(2.7E1/2.0)-1.1E1/2.0;
  146. phis[1] = s*-9.0+(s*s)*(2.7E1/2.0)+1.0;
  147. phis[2] = 0.0;
  148. phis[3] = t*(-9.0/2.0)+s*t*2.7E1;
  149. phis[4] = t*(-9.0/2.0)+(t*t)*(2.7E1/2.0);
  150. phis[5] = t*(9.0/2.0)-(t*t)*(2.7E1/2.0);
  151. phis[6] = t*(-4.5E1/2.0)+s*t*2.7E1+(t*t)*2.7E1;
  152. phis[7] = s*-4.5E1-t*(4.5E1/2.0)+s*t*5.4E1+(s*s)*(8.1E1/2.0)+(t*t)*(2.7E1/2.0)+9.0;
  153. phis[8] = s*3.6E1+t*(9.0/2.0)-s*t*2.7E1-(s*s)*(8.1E1/2.0)-9.0/2.0;
  154. phis[9] = t*2.7E1-s*t*5.4E1-(t*t)*2.7E1;
  155. real_t* phit = phi + 10;
  156. phit[0] = s*1.8E1+t*1.8E1-s*t*2.7E1-(s*s)*(2.7E1/2.0)-(t*t)*(2.7E1/2.0)-1.1E1/2.0;
  157. phit[1] = 0.0;
  158. phit[2] = t*-9.0+(t*t)*(2.7E1/2.0)+1.0;
  159. phit[3] = s*(-9.0/2.0)+(s*s)*(2.7E1/2.0);
  160. phit[4] = s*(-9.0/2.0)+s*t*2.7E1;
  161. phit[5] = s*(9.0/2.0)+t*3.6E1-s*t*2.7E1-(t*t)*(8.1E1/2.0)-9.0/2.0;
  162. phit[6] = s*(-4.5E1/2.0)-t*4.5E1+s*t*5.4E1+(s*s)*(2.7E1/2.0)+(t*t)*(8.1E1/2.0)+9.0;
  163. phit[7] = s*(-4.5E1/2.0)+s*t*2.7E1+(s*s)*2.7E1;
  164. phit[8] = s*(9.0/2.0)-(s*s)*(2.7E1/2.0);
  165. phit[9] = s*2.7E1-s*t*5.4E1-(s*s)*2.7E1;
  166. }
  167. template<>
  168. void
  169. Lagrange<Simplex,2,3>::hess( const real_t* x , real_t* phi ) {
  170. real_t s = x[0];
  171. real_t t = x[1];
  172. // phiss
  173. real_t *phiss = phi;
  174. phiss[0] = s*-2.7E1-t*2.7E1+1.8E1;
  175. phiss[1] = s*2.7E1-9.0;
  176. phiss[2] = 0.0;
  177. phiss[3] = t*2.7E1;
  178. phiss[4] = 0.0;
  179. phiss[5] = 0.0;
  180. phiss[6] = t*2.7E1;
  181. phiss[7] = s*8.1E1+t*5.4E1-4.5E1;
  182. phiss[8] = s*-8.1E1-t*2.7E1+3.6E1;
  183. phiss[9] = t*-5.4E1;
  184. // phist
  185. real_t *phist = phi + 10;
  186. phist[0] = s*-2.7E1-t*2.7E1+1.8E1;
  187. phist[1] = 0.0;
  188. phist[2] = 0.0;
  189. phist[3] = s*2.7E1-9.0/2.0;
  190. phist[4] = t*2.7E1-9.0/2.0;
  191. phist[5] = t*-2.7E1+9.0/2.0;
  192. phist[6] = s*2.7E1+t*5.4E1-4.5E1/2.0;
  193. phist[7] = s*5.4E1+t*2.7E1-4.5E1/2.0;
  194. phist[8] = s*-2.7E1+9.0/2.0;
  195. phist[9] = s*-5.4E1-t*5.4E1+2.7E1;
  196. // phitt
  197. real_t* phitt = phi + 20;
  198. phitt[0] = s*-2.7E1-t*2.7E1+1.8E1;
  199. phitt[1] = 0.0;
  200. phitt[2] = t*2.7E1-9.0;
  201. phitt[3] = 0.0;
  202. phitt[4] = s*2.7E1;
  203. phitt[5] = s*-2.7E1-t*8.1E1+3.6E1;
  204. phitt[6] = s*5.4E1+t*8.1E1-4.5E1;
  205. phitt[7] = s*2.7E1;
  206. phitt[8] = 0.0;
  207. phitt[9] = s*-5.4E1;
  208. }
  209. /*
  210. * triangles, p = 4
  211. */
  212. template<>
  213. void
  214. Lagrange<Simplex,2,4>::eval( const real_t* x , real_t* phi ) {
  215. real_t s = x[0];
  216. real_t t = x[1];
  217. // phi
  218. phi[0] = (s*s)*(t*t)*6.4E1-ONETHIRD*s*2.5E1-ONETHIRD*t*2.5E1+ONETHIRD*(s*s)*7.0E1-ONETHIRD*(s*s*s)*8.0E1+
  219. ONETHIRD*(s*s*s*s)*3.2E1+ONETHIRD*(t*t)*7.0E1-ONETHIRD*(t*t*t)*8.0E1+ONETHIRD*(t*t*t*t)*3.2E1-s*(t*t)*
  220. 8.0E1-(s*s)*t*8.0E1+ONETHIRD*s*t*1.4E2+ONETHIRD*s*(t*t*t)*1.28E2+ONETHIRD*(s*s*s)*t*1.28E2+1.0;
  221. phi[1] = -s+ONETHIRD*(s*s)*2.2E1+ONETHIRD*(s*s*s*s)*3.2E1-(s*s*s)*1.6E1;
  222. phi[2] = -t+ONETHIRD*(t*t)*2.2E1+ONETHIRD*(t*t*t*t)*3.2E1-(t*t*t)*1.6E1;
  223. phi[3] = (s*s)*t*-3.2E1+ONETHIRD*s*t*1.6E1+ONETHIRD*(s*s*s)*t*1.28E2;
  224. phi[4] = (s*s)*(t*t)*6.4E1+s*t*4.0-s*(t*t)*1.6E1-(s*s)*t*1.6E1;
  225. phi[5] = s*(t*t)*-3.2E1+ONETHIRD*s*t*1.6E1+ONETHIRD*s*(t*t*t)*1.28E2;
  226. phi[6] = ONETHIRD*t*1.6E1-ONETHIRD*(t*t)*1.12E2+ONETHIRD*(t*t*t)*2.24E2-ONETHIRD*(t*t*t*t)*1.28E2+s*
  227. (t*t)*3.2E1-ONETHIRD*s*t*1.6E1-ONETHIRD*s*(t*t*t)*1.28E2;
  228. phi[7] = t*-1.2E1+(s*s)*(t*t)*6.4E1+s*t*2.8E1-s*(t*t)*1.44E2-(s*s)*t*1.6E1+s*(t*t*t)*1.28E2+(t*t)*7.6E1-
  229. (t*t*t)*1.28E2+(t*t*t*t)*6.4E1;
  230. phi[8] = t*1.6E1-(s*s)*(t*t)*1.28E2-ONETHIRD*(t*t)*2.08E2-ONETHIRD*(t*t*t*t)*1.28E2+s*(t*t)*1.92E2+(s*
  231. s)*t*9.6E1-s*(t*t*t)*1.28E2+(t*t*t)*9.6E1-ONETHIRD*s*t*2.08E2-ONETHIRD*(s*s*s)*t*1.28E2;
  232. phi[9] = s*1.6E1-(s*s)*(t*t)*1.28E2-ONETHIRD*(s*s)*2.08E2-ONETHIRD*(s*s*s*s)*1.28E2+s*(t*t)*9.6E1+(s*
  233. s)*t*1.92E2-(s*s*s)*t*1.28E2+(s*s*s)*9.6E1-ONETHIRD*s*t*2.08E2-ONETHIRD*s*(t*t*t)*1.28E2;
  234. phi[10] = s*-1.2E1+(s*s)*(t*t)*6.4E1+s*t*2.8E1-s*(t*t)*1.6E1-(s*s)*t*1.44E2+(s*s*s)*t*1.28E2+(s*s)*7.6E1-
  235. (s*s*s)*1.28E2+(s*s*s*s)*6.4E1;
  236. phi[11] = ONETHIRD*s*1.6E1-ONETHIRD*(s*s)*1.12E2+ONETHIRD*(s*s*s)*2.24E2-ONETHIRD*(s*s*s*s)*1.28E2+(s*
  237. s)*t*3.2E1-ONETHIRD*s*t*1.6E1-ONETHIRD*(s*s*s)*t*1.28E2;
  238. phi[12] = (s*s)*(t*t)*2.56E2+s*t*9.6E1-s*(t*t)*2.24E2-(s*s)*t*2.24E2+s*(t*t*t)*1.28E2+(s*s*s)*t*1.28E2;
  239. phi[13] = (s*s)*(t*t)*-1.28E2-s*t*3.2E1+s*(t*t)*3.2E1+(s*s)*t*1.6E2-(s*s*s)*t*1.28E2;
  240. phi[14] = (s*s)*(t*t)*-1.28E2-s*t*3.2E1+s*(t*t)*1.6E2+(s*s)*t*3.2E1-s*(t*t*t)*1.28E2;
  241. }
  242. template<>
  243. void
  244. Lagrange<Simplex,2,4>::grad( const real_t* x , real_t* phi ) {
  245. real_t s = x[0];
  246. real_t t = x[1];
  247. // phis
  248. real_t* phis = phi;
  249. phis[0] = ONETHIRD*-2.5E1+ONETHIRD*s*1.4E2+ONETHIRD*t*1.4E2-s*t*1.6E2-ONETHIRD*(s*s)*2.4E2+ONETHIRD*
  250. (s*s*s)*1.28E2+ONETHIRD*(t*t*t)*1.28E2+s*(t*t)*1.28E2-(t*t)*8.0E1+ONETHIRD*(s*s)*t*3.84E2;
  251. phis[1] = ONETHIRD*s*4.4E1+ONETHIRD*(s*s*s)*1.28E2-(s*s)*4.8E1-1.0;
  252. phis[2] = 0.0;
  253. phis[3] = ONETHIRD*t*1.6E1-s*t*6.4E1+ONETHIRD*(s*s)*t*3.84E2;
  254. phis[4] = t*4.0-s*t*3.2E1+s*(t*t)*1.28E2-(t*t)*1.6E1;
  255. phis[5] = ONETHIRD*t*1.6E1+ONETHIRD*(t*t*t)*1.28E2-(t*t)*3.2E1;
  256. phis[6] = ONETHIRD*t*-1.6E1-ONETHIRD*(t*t*t)*1.28E2+(t*t)*3.2E1;
  257. phis[7] = t*2.8E1-s*t*3.2E1+s*(t*t)*1.28E2-(t*t)*1.44E2+(t*t*t)*1.28E2;
  258. phis[8] = ONETHIRD*t*-2.08E2+s*t*1.92E2-s*(t*t)*2.56E2+(t*t)*1.92E2-(t*t*t)*1.28E2-ONETHIRD*(s*s)*t*
  259. 3.84E2;
  260. phis[9] = ONETHIRD*s*-4.16E2-ONETHIRD*t*2.08E2+s*t*3.84E2-ONETHIRD*(s*s*s)*5.12E2-ONETHIRD*(t*t*t)*1.28E2-
  261. s*(t*t)*2.56E2-(s*s)*t*3.84E2+(s*s)*2.88E2+(t*t)*9.6E1+1.6E1;
  262. phis[10] = s*1.52E2+t*2.8E1-s*t*2.88E2+s*(t*t)*1.28E2+(s*s)*t*3.84E2-(s*s)*3.84E2+(s*s*s)*2.56E2-(t*
  263. t)*1.6E1-1.2E1;
  264. phis[11] = ONETHIRD*1.6E1-ONETHIRD*s*2.24E2-ONETHIRD*t*1.6E1+s*t*6.4E1+ONETHIRD*(s*s)*6.72E2-ONETHIRD*
  265. (s*s*s)*5.12E2-ONETHIRD*(s*s)*t*3.84E2;
  266. phis[12] = t*9.6E1-s*t*4.48E2+s*(t*t)*5.12E2+(s*s)*t*3.84E2-(t*t)*2.24E2+(t*t*t)*1.28E2;
  267. phis[13] = t*-3.2E1+s*t*3.2E2-s*(t*t)*2.56E2-(s*s)*t*3.84E2+(t*t)*3.2E1;
  268. phis[14] = t*-3.2E1+s*t*6.4E1-s*(t*t)*2.56E2+(t*t)*1.6E2-(t*t*t)*1.28E2;
  269. // phit
  270. real_t *phit = phi + 15;
  271. phit[0] = ONETHIRD*-2.5E1+ONETHIRD*s*1.4E2+ONETHIRD*t*1.4E2-s*t*1.6E2+ONETHIRD*(s*s*s)*1.28E2-ONETHIRD*
  272. (t*t)*2.4E2+ONETHIRD*(t*t*t)*1.28E2+(s*s)*t*1.28E2-(s*s)*8.0E1+ONETHIRD*s*(t*t)*3.84E2;
  273. phit[1] = 0.0;
  274. phit[2] = ONETHIRD*t*4.4E1+ONETHIRD*(t*t*t)*1.28E2-(t*t)*4.8E1-1.0;
  275. phit[3] = ONETHIRD*s*1.6E1+ONETHIRD*(s*s*s)*1.28E2-(s*s)*3.2E1;
  276. phit[4] = s*4.0-s*t*3.2E1+(s*s)*t*1.28E2-(s*s)*1.6E1;
  277. phit[5] = ONETHIRD*s*1.6E1-s*t*6.4E1+ONETHIRD*s*(t*t)*3.84E2;
  278. phit[6] = ONETHIRD*1.6E1-ONETHIRD*s*1.6E1-ONETHIRD*t*2.24E2+s*t*6.4E1+ONETHIRD*(t*t)*6.72E2-ONETHIRD*
  279. (t*t*t)*5.12E2-ONETHIRD*s*(t*t)*3.84E2;
  280. phit[7] = s*2.8E1+t*1.52E2-s*t*2.88E2+s*(t*t)*3.84E2+(s*s)*t*1.28E2-(s*s)*1.6E1-(t*t)*3.84E2+(t*t*t)*
  281. 2.56E2-1.2E1;
  282. phit[8] = ONETHIRD*s*-2.08E2-ONETHIRD*t*4.16E2+s*t*3.84E2-ONETHIRD*(s*s*s)*1.28E2-ONETHIRD*(t*t*t)*5.12E2-
  283. s*(t*t)*3.84E2-(s*s)*t*2.56E2+(s*s)*9.6E1+(t*t)*2.88E2+1.6E1;
  284. phit[9] = ONETHIRD*s*-2.08E2+s*t*1.92E2-(s*s)*t*2.56E2+(s*s)*1.92E2-(s*s*s)*1.28E2-ONETHIRD*s*(t*t)*
  285. 3.84E2;
  286. phit[10] = s*2.8E1-s*t*3.2E1+(s*s)*t*1.28E2-(s*s)*1.44E2+(s*s*s)*1.28E2;
  287. phit[11] = ONETHIRD*s*-1.6E1-ONETHIRD*(s*s*s)*1.28E2+(s*s)*3.2E1;
  288. phit[12] = s*9.6E1-s*t*4.48E2+s*(t*t)*3.84E2+(s*s)*t*5.12E2-(s*s)*2.24E2+(s*s*s)*1.28E2;
  289. phit[13] = s*-3.2E1+s*t*6.4E1-(s*s)*t*2.56E2+(s*s)*1.6E2-(s*s*s)*1.28E2;
  290. phit[14] = s*-3.2E1+s*t*3.2E2-s*(t*t)*3.84E2-(s*s)*t*2.56E2+(s*s)*3.2E1;
  291. }
  292. template<>
  293. void
  294. Lagrange<Simplex,2,4>::hess( const real_t* x , real_t* phi ) {
  295. real_t s = x[0];
  296. real_t t = x[1];
  297. // phiss
  298. real_t* phiss = phi;
  299. phiss[0] = ONETHIRD*1.4E2-t*1.6E2-ONETHIRD*s*4.8E2+ONETHIRD*(s*s)*3.84E2+(t*t)*1.28E2+ONETHIRD*s*t*7.68E2;
  300. phiss[1] = ONETHIRD*4.4E1-s*9.6E1+ONETHIRD*(s*s)*3.84E2;
  301. phiss[2] = 0.0;
  302. phiss[3] = t*-6.4E1+ONETHIRD*s*t*7.68E2;
  303. phiss[4] = t*-3.2E1+(t*t)*1.28E2;
  304. phiss[5] = 0.0;
  305. phiss[6] = 0.0;
  306. phiss[7] = t*-3.2E1+(t*t)*1.28E2;
  307. phiss[8] = t*1.92E2-(t*t)*2.56E2-ONETHIRD*s*t*7.68E2;
  308. phiss[9] = ONETHIRD*-4.16E2+s*5.76E2+t*3.84E2-s*t*7.68E2-ONETHIRD*(s*s)*1.536E3-(t*t)*2.56E2;
  309. phiss[10] = s*-7.68E2-t*2.88E2+s*t*7.68E2+(s*s)*7.68E2+(t*t)*1.28E2+1.52E2;
  310. phiss[11] = ONETHIRD*-2.24E2+t*6.4E1+ONETHIRD*s*1.344E3-ONETHIRD*(s*s)*1.536E3-ONETHIRD*s*t*7.68E2;
  311. phiss[12] = t*-4.48E2+s*t*7.68E2+(t*t)*5.12E2;
  312. phiss[13] = t*3.2E2-s*t*7.68E2-(t*t)*2.56E2;
  313. phiss[14] = t*6.4E1-(t*t)*2.56E2;
  314. // phist
  315. real_t* phist = phi + 15;
  316. phist[0] = ONETHIRD*1.4E2-s*1.6E2-t*1.6E2+s*t*2.56E2+ONETHIRD*(s*s)*3.84E2+ONETHIRD*(t*t)*3.84E2;
  317. phist[1] = 0.0;
  318. phist[2] = 0.0;
  319. phist[3] = ONETHIRD*1.6E1-s*6.4E1+ONETHIRD*(s*s)*3.84E2;
  320. phist[4] = s*-3.2E1-t*3.2E1+s*t*2.56E2+4.0;
  321. phist[5] = ONETHIRD*1.6E1-t*6.4E1+ONETHIRD*(t*t)*3.84E2;
  322. phist[6] = ONETHIRD*-1.6E1+t*6.4E1-ONETHIRD*(t*t)*3.84E2;
  323. phist[7] = s*-3.2E1-t*2.88E2+s*t*2.56E2+(t*t)*3.84E2+2.8E1;
  324. phist[8] = ONETHIRD*-2.08E2+s*1.92E2+t*3.84E2-s*t*5.12E2-ONETHIRD*(s*s)*3.84E2-(t*t)*3.84E2;
  325. phist[9] = ONETHIRD*-2.08E2+s*3.84E2+t*1.92E2-s*t*5.12E2-ONETHIRD*(t*t)*3.84E2-(s*s)*3.84E2;
  326. phist[10] = s*-2.88E2-t*3.2E1+s*t*2.56E2+(s*s)*3.84E2+2.8E1;
  327. phist[11] = ONETHIRD*-1.6E1+s*6.4E1-ONETHIRD*(s*s)*3.84E2;
  328. phist[12] = s*-4.48E2-t*4.48E2+s*t*1.024E3+(s*s)*3.84E2+(t*t)*3.84E2+9.6E1;
  329. phist[13] = s*3.2E2+t*6.4E1-s*t*5.12E2-(s*s)*3.84E2-3.2E1;
  330. phist[14] = s*6.4E1+t*3.2E2-s*t*5.12E2-(t*t)*3.84E2-3.2E1;
  331. // phitt
  332. real_t* phitt = phi + 30;
  333. phitt[0] = ONETHIRD*1.4E2-s*1.6E2-ONETHIRD*t*4.8E2+ONETHIRD*(t*t)*3.84E2+(s*s)*1.28E2+ONETHIRD*s*t*7.68E2;
  334. phitt[1] = 0.0;
  335. phitt[2] = ONETHIRD*4.4E1-t*9.6E1+ONETHIRD*(t*t)*3.84E2;
  336. phitt[3] = 0.0;
  337. phitt[4] = s*-3.2E1+(s*s)*1.28E2;
  338. phitt[5] = s*-6.4E1+ONETHIRD*s*t*7.68E2;
  339. phitt[6] = ONETHIRD*-2.24E2+s*6.4E1+ONETHIRD*t*1.344E3-ONETHIRD*(t*t)*1.536E3-ONETHIRD*s*t*7.68E2;
  340. phitt[7] = s*-2.88E2-t*7.68E2+s*t*7.68E2+(s*s)*1.28E2+(t*t)*7.68E2+1.52E2;
  341. phitt[8] = ONETHIRD*-4.16E2+s*3.84E2+t*5.76E2-s*t*7.68E2-ONETHIRD*(t*t)*1.536E3-(s*s)*2.56E2;
  342. phitt[9] = s*1.92E2-(s*s)*2.56E2-ONETHIRD*s*t*7.68E2;
  343. phitt[10] = s*-3.2E1+(s*s)*1.28E2;
  344. phitt[11] = 0.0;
  345. phitt[12] = s*-4.48E2+s*t*7.68E2+(s*s)*5.12E2;
  346. phitt[13] = s*6.4E1-(s*s)*2.56E2;
  347. phitt[14] = s*3.2E2-s*t*7.68E2-(s*s)*2.56E2;
  348. }
  349. /*
  350. * triangles, p = 5
  351. */
  352. template<>
  353. void
  354. Lagrange<Simplex,2,5>::eval( const real_t* x , real_t* phi ) {
  355. avro_implement;
  356. }
  357. template<>
  358. void
  359. Lagrange<Simplex,2,5>::grad( const real_t* x , real_t* phi ) {
  360. avro_implement;
  361. }
  362. template<>
  363. void
  364. Lagrange<Simplex,2,5>::hess( const real_t* x , real_t* phi ) {
  365. avro_implement;
  366. }
  367. } // avro