QMCPACK
CartesianTensor.h
Go to the documentation of this file.
1 //////////////////////////////////////////////////////////////////////////////////////
2 // This file is distributed under the University of Illinois/NCSA Open Source License.
3 // See LICENSE file in top directory for details.
4 //
5 // Copyright (c) 2016 Jeongnim Kim and QMCPACK developers.
6 //
7 // File developed by: Miguel Morales, moralessilva2@llnl.gov, Lawrence Livermore National Laboratory
8 // Jeremy McMinnis, jmcminis@gmail.com, University of Illinois at Urbana-Champaign
9 // Jeongnim Kim, jeongnim.kim@gmail.com, University of Illinois at Urbana-Champaign
10 // Raymond Clay III, j.k.rofling@gmail.com, Lawrence Livermore National Laboratory
11 // Mark A. Berrill, berrillma@ornl.gov, Oak Ridge National Laboratory
12 //
13 // File created by: Miguel Morales, moralessilva2@llnl.gov, Lawrence Livermore National Laboratory
14 //////////////////////////////////////////////////////////////////////////////////////
15 
16 
17 /*
18  DO NOT MAKE PERMANENT EDITS IN THIS FILE
19  This file is generated from src/Numerics/codegen/gen_cartesian_tensor.py and CartesianTensor.h.in
20 
21  Edit CartesianTensor.h.in, rerun gen_cartesian_tensor.py, and copy the generated file here.
22 */
23 
24 
25 #ifndef QMCPLUSPLUS_CARTESIAN_TENSOR_H
26 #define QMCPLUSPLUS_CARTESIAN_TENSOR_H
27 
28 #include "OhmmsPETE/Tensor.h"
29 #include "Configuration.h"
30 
31 /**
32  *
33  * The template parameters
34  * - T, the value_type, e.g. double
35  * - Point_t, a vector type to provide xyz coordinate.
36  * Point_t must have the operator[] defined, e.g., TinyVector<double,3>.
37  *
38  * Array ordered as [S,X,Y,Z,XX,YY,ZZ,XY,XZ,YZ,...]
39  * (following Gamess order)
40  */
41 template<class T,
42  class Point_t,
43  class Tensor_t = qmcplusplus::Tensor<T, 3>,
46 {
47 public:
48  using value_type = T;
49  using pos_type = Point_t;
50  using hess_type = Tensor_t;
51  using ggg_type = GGG_t;
53 
54  /** constructor
55  * @param l_max maximum angular momentum
56  *
57  * Evaluate all the constants and prefactors.
58  */
59  explicit CartesianTensor(const int l_max);
60 
61  ///makes a table of \f$ N(a,b,c) x^a y^b z^c \f$ and their gradients up to Lmax.
62  void evaluate(const Point_t& p);
63 
64  ///makes a table of \f$ N(a,b,c) x^a y^b z^c \f$ and their gradients up to Lmax.
65  void evaluateAll(const Point_t& p);
66 
67  void evaluateTest(const Point_t& p);
68 
69  ///makes a table of \f$ N(a,b,c) x^a y^b z^c \f$ and their gradients and hessians up to Lmax.
70  void evaluateWithHessian(const Point_t& p);
71 
72  ///makes a table of \f$ N(a,b,c) x^a y^b z^c \f$ and their gradients and hessians and third derivatives up to Lmax.
73  void evaluateWithThirdDeriv(const Point_t& p);
74 
75  ///makes a table of Third derivatives of \f$ N(a,b,c) x^a y^b z^c \f$
76  void evaluateThirdDerivOnly(const Point_t& p);
77 
78  inline value_type getYlm(int lm) const { return XYZ[lm]; }
79 
80  inline Point_t getGradYlm(int lm) const { return gradXYZ[lm]; }
81 
82  inline value_type getLaplYlm(int lm) const { return laplXYZ[lm]; }
83 
84  inline Tensor_t getHessYlm(int lm) const { return hessXYZ[lm]; }
85 
86  inline GGG_t getGGGYlm(int lm) const { return gggXYZ[lm]; }
87 
88  inline int size() const { return XYZ.size(); }
89 
90  inline int lmax() const { return Lmax; }
91 
92  inline void getABC(int n, int& a, int& b, int& c);
93 
94  int DFactorial(int num) { return (num < 2) ? 1 : num * DFactorial(num - 2); }
95 
96  ///maximum angular momentum for the center
97  int Lmax;
98 
99  ///values XYZ\f$=x^a y^b z^c \f$
100  std::vector<value_type> XYZ;
101  /// Normalization factors
102  std::vector<value_type> NormFactor;
103 
104  std::vector<Point_t> gradXYZ;
105  // laplacian
106  std::vector<value_type> laplXYZ;
107 
108  std::vector<hess_type> hessXYZ;
109 
110  std::vector<ggg_type> gggXYZ;
111 };
112 template<class T, class Point_t, class Tensor_t, class GGG_t>
114 {
115  if (Lmax < 0 || Lmax > 6)
116  {
117  std::cerr << "CartesianTensor can't handle Lmax > 6 or Lmax < 0.\n";
118  APP_ABORT("");
119  }
120  int ntot = 0;
121  for (int i = 0; i <= Lmax; i++)
122  ntot += (i + 1) * (i + 2) / 2;
123  XYZ.resize(ntot);
124  gradXYZ.resize(ntot);
125  laplXYZ.resize(ntot);
126  hessXYZ.resize(ntot);
127  gggXYZ.resize(ntot);
128  NormFactor.resize(ntot, 1);
129  int p = 0;
130  int a = 0, b = 0, c = 0;
131  const double pi = 4.0 * atan(1.0);
132  for (int l = 0; l <= Lmax; l++)
133  {
134  int n = (l + 1) * (l + 2) / 2;
135  for (int k = 0; k < n; k++)
136  {
137  getABC(p, a, b, c);
138  // factor of (alpha^(l+3/2))^(1/2) goes into the radial function
139  // mmorales: HACK HACK HACK, to avoid modifyng the radial functions,
140  // I add a term to the normalization to cancel the term
141  // coming from the Spherical Harmonics
142  // NormL = pow(2,L+1)*sqrt(2.0/static_cast<real_type>(DFactorial(2*l+1)))*pow(2.0/pi,0.25)
143  double L = static_cast<double>(l);
144  double NormL =
145  std::pow(2, L + 1) * sqrt(2.0 / static_cast<double>(DFactorial(2 * l + 1))) * std::pow(2.0 / pi, 0.25);
146  NormFactor[p++] = std::pow(2.0 / pi, 0.75) * std::pow(4.0, 0.5 * (a + b + c)) *
147  std::sqrt(1.0 /
148  static_cast<double>((DFactorial(2 * a - 1) * DFactorial(2 * b - 1) * DFactorial(2 * c - 1)))) /
149  NormL;
150  }
151  }
152 }
153 
154 
155 template<class T, class Point_t, class Tensor_t, class GGG_t>
157 {
158  value_type x = p[0], y = p[1], z = p[2];
159  value_type x2 = x * x, y2 = y * y, z2 = z * z;
160  value_type x3 = x2 * x, y3 = y2 * y, z3 = z2 * z;
161  value_type x4 = x3 * x, y4 = y3 * y, z4 = z3 * z;
162  value_type x5 = x4 * x, y5 = y4 * y, z5 = z4 * z;
163  switch (Lmax)
164  {
165  case 6:
166  XYZ[83] = x2 * y2 * z2; // X2Y2Z2
167  XYZ[82] = x * y2 * z3; // Z3Y2X
168  XYZ[81] = x2 * y * z3; // Z3X2Y
169  XYZ[80] = x * y3 * z2; // Y3Z2X
170  XYZ[79] = x2 * y3 * z; // Y3X2Z
171  XYZ[78] = x3 * y * z2; // X3Z2Y
172  XYZ[77] = x3 * y2 * z; // X3Y2Z
173  XYZ[76] = y3 * z3; // Y3Z3
174  XYZ[75] = x3 * z3; // X3Z3
175  XYZ[74] = x3 * y3; // X3Y3
176  XYZ[73] = x * y * z4; // Z4XY
177  XYZ[72] = x * y4 * z; // Y4XZ
178  XYZ[71] = x4 * y * z; // X4YZ
179  XYZ[70] = y2 * z4; // Z4Y2
180  XYZ[69] = x2 * z4; // Z4X2
181  XYZ[68] = y4 * z2; // Y4Z2
182  XYZ[67] = x2 * y4; // Y4X2
183  XYZ[66] = x4 * z2; // X4Z2
184  XYZ[65] = x4 * y2; // X4Y2
185  XYZ[64] = y * z * z4; // Z5Y
186  XYZ[63] = x * z * z4; // Z5X
187  XYZ[62] = y * y4 * z; // Y5Z
188  XYZ[61] = x * y * y4; // Y5X
189  XYZ[60] = x * x4 * z; // X5Z
190  XYZ[59] = x * x4 * y; // X5Y
191  XYZ[58] = z * z5; // Z6
192  XYZ[57] = y * y5; // Y6
193  XYZ[56] = x * x5; // X6
194  case 5:
195  XYZ[55] = x * y2 * z2; // YYZZX
196  XYZ[54] = x2 * y * z2; // XXZZY
197  XYZ[53] = x2 * y2 * z; // XXYYZ
198  XYZ[52] = x * y * z3; // ZZZXY
199  XYZ[51] = x * y3 * z; // YYYXZ
200  XYZ[50] = x3 * y * z; // XXXYZ
201  XYZ[49] = y2 * z3; // ZZZYY
202  XYZ[48] = x2 * z3; // ZZZXX
203  XYZ[47] = y3 * z2; // YYYZZ
204  XYZ[46] = x2 * y3; // YYYXX
205  XYZ[45] = x3 * z2; // XXXZZ
206  XYZ[44] = x3 * y2; // XXXYY
207  XYZ[43] = y * z4; // ZZZZY
208  XYZ[42] = x * z4; // ZZZZX
209  XYZ[41] = y4 * z; // YYYYZ
210  XYZ[40] = x * y4; // YYYYX
211  XYZ[39] = x4 * z; // XXXXZ
212  XYZ[38] = x4 * y; // XXXXY
213  XYZ[37] = z * z4; // ZZZZZ
214  XYZ[36] = y * y4; // YYYYY
215  XYZ[35] = x * x4; // XXXXX
216  case 4:
217  XYZ[34] = x * y * z2; // ZZXY
218  XYZ[33] = x * y2 * z; // YYXZ
219  XYZ[32] = x2 * y * z; // XXYZ
220  XYZ[31] = y2 * z2; // YYZZ
221  XYZ[30] = x2 * z2; // XXZZ
222  XYZ[29] = x2 * y2; // XXYY
223  XYZ[28] = y * z3; // ZZZY
224  XYZ[27] = x * z3; // ZZZX
225  XYZ[26] = y3 * z; // YYYZ
226  XYZ[25] = x * y3; // YYYX
227  XYZ[24] = x3 * z; // XXXZ
228  XYZ[23] = x3 * y; // XXXY
229  XYZ[22] = z4; // ZZZZ
230  XYZ[21] = y4; // YYYY
231  XYZ[20] = x4; // XXXX
232  case 3:
233  XYZ[19] = x * y * z; // XYZ
234  XYZ[18] = y * z2; // ZZY
235  XYZ[17] = x * z2; // ZZX
236  XYZ[16] = y2 * z; // YYZ
237  XYZ[15] = x * y2; // YYX
238  XYZ[14] = x2 * z; // XXZ
239  XYZ[13] = x2 * y; // XXY
240  XYZ[12] = z3; // ZZZ
241  XYZ[11] = y3; // YYY
242  XYZ[10] = x3; // XXX
243  case 2:
244  XYZ[9] = y * z; // YZ
245  XYZ[8] = x * z; // XZ
246  XYZ[7] = x * y; // XY
247  XYZ[6] = z2; // ZZ
248  XYZ[5] = y2; // YY
249  XYZ[4] = x2; // XX
250  case 1:
251  XYZ[3] = z; // Z
252  XYZ[2] = y; // Y
253  XYZ[1] = x; // X
254  case 0:
255  XYZ[0] = 1; // S
256  }
257  for (int i = 0; i < XYZ.size(); i++)
258  XYZ[i] *= NormFactor[i];
259 }
260 
261 
262 template<class T, class Point_t, class Tensor_t, class GGG_t>
264 {
265  value_type x = p[0], y = p[1], z = p[2];
266  value_type x2 = x * x, y2 = y * y, z2 = z * z;
267  value_type x3 = x2 * x, y3 = y2 * y, z3 = z2 * z;
268  value_type x4 = x3 * x, y4 = y3 * y, z4 = z3 * z;
269  value_type x5 = x4 * x, y5 = y4 * y, z5 = z4 * z;
270  int ntot = XYZ.size();
271  for (int i = 0; i < ntot; i++)
272  gradXYZ[i] = 0.0;
273  for (int i = 0; i < ntot; i++)
274  laplXYZ[i] = 0.0;
275 
276  switch (Lmax)
277  {
278  case 6:
279  XYZ[83] = x2 * y2 * z2; // X2Y2Z2
280  gradXYZ[83][0] = 2 * x * y2 * z2;
281  gradXYZ[83][1] = 2 * x2 * y * z2;
282  gradXYZ[83][2] = 2 * x2 * y2 * z;
283  laplXYZ[83] = 2 * x2 * y2 + 2 * x2 * z2 + 2 * y2 * z2;
284  XYZ[82] = x * y2 * z3; // Z3Y2X
285  gradXYZ[82][0] = y2 * z3;
286  gradXYZ[82][1] = 2 * x * y * z3;
287  gradXYZ[82][2] = 3 * x * y2 * z2;
288  laplXYZ[82] = 6 * x * y2 * z + 2 * x * z3;
289  XYZ[81] = x2 * y * z3; // Z3X2Y
290  gradXYZ[81][0] = 2 * x * y * z3;
291  gradXYZ[81][1] = x2 * z3;
292  gradXYZ[81][2] = 3 * x2 * y * z2;
293  laplXYZ[81] = 6 * x2 * y * z + 2 * y * z3;
294  XYZ[80] = x * y3 * z2; // Y3Z2X
295  gradXYZ[80][0] = y3 * z2;
296  gradXYZ[80][1] = 3 * x * y2 * z2;
297  gradXYZ[80][2] = 2 * x * y3 * z;
298  laplXYZ[80] = 6 * x * y * z2 + 2 * x * y3;
299  XYZ[79] = x2 * y3 * z; // Y3X2Z
300  gradXYZ[79][0] = 2 * x * y3 * z;
301  gradXYZ[79][1] = 3 * x2 * y2 * z;
302  gradXYZ[79][2] = x2 * y3;
303  laplXYZ[79] = 6 * x2 * y * z + 2 * y3 * z;
304  XYZ[78] = x3 * y * z2; // X3Z2Y
305  gradXYZ[78][0] = 3 * x2 * y * z2;
306  gradXYZ[78][1] = x3 * z2;
307  gradXYZ[78][2] = 2 * x3 * y * z;
308  laplXYZ[78] = 6 * x * y * z2 + 2 * x3 * y;
309  XYZ[77] = x3 * y2 * z; // X3Y2Z
310  gradXYZ[77][0] = 3 * x2 * y2 * z;
311  gradXYZ[77][1] = 2 * x3 * y * z;
312  gradXYZ[77][2] = x3 * y2;
313  laplXYZ[77] = 6 * x * y2 * z + 2 * x3 * z;
314  XYZ[76] = y3 * z3; // Y3Z3
315  gradXYZ[76][1] = 3 * y2 * z3;
316  gradXYZ[76][2] = 3 * y3 * z2;
317  laplXYZ[76] = 6 * y * z3 + 6 * y3 * z;
318  XYZ[75] = x3 * z3; // X3Z3
319  gradXYZ[75][0] = 3 * x2 * z3;
320  gradXYZ[75][2] = 3 * x3 * z2;
321  laplXYZ[75] = 6 * x * z3 + 6 * x3 * z;
322  XYZ[74] = x3 * y3; // X3Y3
323  gradXYZ[74][0] = 3 * x2 * y3;
324  gradXYZ[74][1] = 3 * x3 * y2;
325  laplXYZ[74] = 6 * x * y3 + 6 * x3 * y;
326  XYZ[73] = x * y * z4; // Z4XY
327  gradXYZ[73][0] = y * z4;
328  gradXYZ[73][1] = x * z4;
329  gradXYZ[73][2] = 4 * x * y * z3;
330  laplXYZ[73] = 12 * x * y * z2;
331  XYZ[72] = x * y4 * z; // Y4XZ
332  gradXYZ[72][0] = y4 * z;
333  gradXYZ[72][1] = 4 * x * y3 * z;
334  gradXYZ[72][2] = x * y4;
335  laplXYZ[72] = 12 * x * y2 * z;
336  XYZ[71] = x4 * y * z; // X4YZ
337  gradXYZ[71][0] = 4 * x3 * y * z;
338  gradXYZ[71][1] = x4 * z;
339  gradXYZ[71][2] = x4 * y;
340  laplXYZ[71] = 12 * x2 * y * z;
341  XYZ[70] = y2 * z4; // Z4Y2
342  gradXYZ[70][1] = 2 * y * z4;
343  gradXYZ[70][2] = 4 * y2 * z3;
344  laplXYZ[70] = 12 * y2 * z2 + 2 * z4;
345  XYZ[69] = x2 * z4; // Z4X2
346  gradXYZ[69][0] = 2 * x * z4;
347  gradXYZ[69][2] = 4 * x2 * z3;
348  laplXYZ[69] = 12 * x2 * z2 + 2 * z4;
349  XYZ[68] = y4 * z2; // Y4Z2
350  gradXYZ[68][1] = 4 * y3 * z2;
351  gradXYZ[68][2] = 2 * y4 * z;
352  laplXYZ[68] = 12 * y2 * z2 + 2 * y4;
353  XYZ[67] = x2 * y4; // Y4X2
354  gradXYZ[67][0] = 2 * x * y4;
355  gradXYZ[67][1] = 4 * x2 * y3;
356  laplXYZ[67] = 12 * x2 * y2 + 2 * y4;
357  XYZ[66] = x4 * z2; // X4Z2
358  gradXYZ[66][0] = 4 * x3 * z2;
359  gradXYZ[66][2] = 2 * x4 * z;
360  laplXYZ[66] = 12 * x2 * z2 + 2 * x4;
361  XYZ[65] = x4 * y2; // X4Y2
362  gradXYZ[65][0] = 4 * x3 * y2;
363  gradXYZ[65][1] = 2 * x4 * y;
364  laplXYZ[65] = 12 * x2 * y2 + 2 * x4;
365  XYZ[64] = y * z * z4; // Z5Y
366  gradXYZ[64][1] = z * z4;
367  gradXYZ[64][2] = 5 * y * z4;
368  laplXYZ[64] = 20 * y * z3;
369  XYZ[63] = x * z * z4; // Z5X
370  gradXYZ[63][0] = z * z4;
371  gradXYZ[63][2] = 5 * x * z4;
372  laplXYZ[63] = 20 * x * z3;
373  XYZ[62] = y * y4 * z; // Y5Z
374  gradXYZ[62][1] = 5 * y4 * z;
375  gradXYZ[62][2] = y * y4;
376  laplXYZ[62] = 20 * y3 * z;
377  XYZ[61] = x * y * y4; // Y5X
378  gradXYZ[61][0] = y * y4;
379  gradXYZ[61][1] = 5 * x * y4;
380  laplXYZ[61] = 20 * x * y3;
381  XYZ[60] = x * x4 * z; // X5Z
382  gradXYZ[60][0] = 5 * x4 * z;
383  gradXYZ[60][2] = x * x4;
384  laplXYZ[60] = 20 * x3 * z;
385  XYZ[59] = x * x4 * y; // X5Y
386  gradXYZ[59][0] = 5 * x4 * y;
387  gradXYZ[59][1] = x * x4;
388  laplXYZ[59] = 20 * x3 * y;
389  XYZ[58] = z * z5; // Z6
390  gradXYZ[58][2] = 6 * z * z4;
391  laplXYZ[58] = 30 * z4;
392  XYZ[57] = y * y5; // Y6
393  gradXYZ[57][1] = 6 * y * y4;
394  laplXYZ[57] = 30 * y4;
395  XYZ[56] = x * x5; // X6
396  gradXYZ[56][0] = 6 * x * x4;
397  laplXYZ[56] = 30 * x4;
398  case 5:
399  XYZ[55] = x * y2 * z2; // YYZZX
400  gradXYZ[55][0] = y2 * z2;
401  gradXYZ[55][1] = 2 * x * y * z2;
402  gradXYZ[55][2] = 2 * x * y2 * z;
403  laplXYZ[55] = 2 * x * y2 + 2 * x * z2;
404  XYZ[54] = x2 * y * z2; // XXZZY
405  gradXYZ[54][0] = 2 * x * y * z2;
406  gradXYZ[54][1] = x2 * z2;
407  gradXYZ[54][2] = 2 * x2 * y * z;
408  laplXYZ[54] = 2 * x2 * y + 2 * y * z2;
409  XYZ[53] = x2 * y2 * z; // XXYYZ
410  gradXYZ[53][0] = 2 * x * y2 * z;
411  gradXYZ[53][1] = 2 * x2 * y * z;
412  gradXYZ[53][2] = x2 * y2;
413  laplXYZ[53] = 2 * x2 * z + 2 * y2 * z;
414  XYZ[52] = x * y * z3; // ZZZXY
415  gradXYZ[52][0] = y * z3;
416  gradXYZ[52][1] = x * z3;
417  gradXYZ[52][2] = 3 * x * y * z2;
418  laplXYZ[52] = 6 * x * y * z;
419  XYZ[51] = x * y3 * z; // YYYXZ
420  gradXYZ[51][0] = y3 * z;
421  gradXYZ[51][1] = 3 * x * y2 * z;
422  gradXYZ[51][2] = x * y3;
423  laplXYZ[51] = 6 * x * y * z;
424  XYZ[50] = x3 * y * z; // XXXYZ
425  gradXYZ[50][0] = 3 * x2 * y * z;
426  gradXYZ[50][1] = x3 * z;
427  gradXYZ[50][2] = x3 * y;
428  laplXYZ[50] = 6 * x * y * z;
429  XYZ[49] = y2 * z3; // ZZZYY
430  gradXYZ[49][1] = 2 * y * z3;
431  gradXYZ[49][2] = 3 * y2 * z2;
432  laplXYZ[49] = 6 * y2 * z + 2 * z3;
433  XYZ[48] = x2 * z3; // ZZZXX
434  gradXYZ[48][0] = 2 * x * z3;
435  gradXYZ[48][2] = 3 * x2 * z2;
436  laplXYZ[48] = 6 * x2 * z + 2 * z3;
437  XYZ[47] = y3 * z2; // YYYZZ
438  gradXYZ[47][1] = 3 * y2 * z2;
439  gradXYZ[47][2] = 2 * y3 * z;
440  laplXYZ[47] = 6 * y * z2 + 2 * y3;
441  XYZ[46] = x2 * y3; // YYYXX
442  gradXYZ[46][0] = 2 * x * y3;
443  gradXYZ[46][1] = 3 * x2 * y2;
444  laplXYZ[46] = 6 * x2 * y + 2 * y3;
445  XYZ[45] = x3 * z2; // XXXZZ
446  gradXYZ[45][0] = 3 * x2 * z2;
447  gradXYZ[45][2] = 2 * x3 * z;
448  laplXYZ[45] = 6 * x * z2 + 2 * x3;
449  XYZ[44] = x3 * y2; // XXXYY
450  gradXYZ[44][0] = 3 * x2 * y2;
451  gradXYZ[44][1] = 2 * x3 * y;
452  laplXYZ[44] = 6 * x * y2 + 2 * x3;
453  XYZ[43] = y * z4; // ZZZZY
454  gradXYZ[43][1] = z4;
455  gradXYZ[43][2] = 4 * y * z3;
456  laplXYZ[43] = 12 * y * z2;
457  XYZ[42] = x * z4; // ZZZZX
458  gradXYZ[42][0] = z4;
459  gradXYZ[42][2] = 4 * x * z3;
460  laplXYZ[42] = 12 * x * z2;
461  XYZ[41] = y4 * z; // YYYYZ
462  gradXYZ[41][1] = 4 * y3 * z;
463  gradXYZ[41][2] = y4;
464  laplXYZ[41] = 12 * y2 * z;
465  XYZ[40] = x * y4; // YYYYX
466  gradXYZ[40][0] = y4;
467  gradXYZ[40][1] = 4 * x * y3;
468  laplXYZ[40] = 12 * x * y2;
469  XYZ[39] = x4 * z; // XXXXZ
470  gradXYZ[39][0] = 4 * x3 * z;
471  gradXYZ[39][2] = x4;
472  laplXYZ[39] = 12 * x2 * z;
473  XYZ[38] = x4 * y; // XXXXY
474  gradXYZ[38][0] = 4 * x3 * y;
475  gradXYZ[38][1] = x4;
476  laplXYZ[38] = 12 * x2 * y;
477  XYZ[37] = z * z4; // ZZZZZ
478  gradXYZ[37][2] = 5 * z4;
479  laplXYZ[37] = 20 * z3;
480  XYZ[36] = y * y4; // YYYYY
481  gradXYZ[36][1] = 5 * y4;
482  laplXYZ[36] = 20 * y3;
483  XYZ[35] = x * x4; // XXXXX
484  gradXYZ[35][0] = 5 * x4;
485  laplXYZ[35] = 20 * x3;
486  case 4:
487  XYZ[34] = x * y * z2; // ZZXY
488  gradXYZ[34][0] = y * z2;
489  gradXYZ[34][1] = x * z2;
490  gradXYZ[34][2] = 2 * x * y * z;
491  laplXYZ[34] = 2 * x * y;
492  XYZ[33] = x * y2 * z; // YYXZ
493  gradXYZ[33][0] = y2 * z;
494  gradXYZ[33][1] = 2 * x * y * z;
495  gradXYZ[33][2] = x * y2;
496  laplXYZ[33] = 2 * x * z;
497  XYZ[32] = x2 * y * z; // XXYZ
498  gradXYZ[32][0] = 2 * x * y * z;
499  gradXYZ[32][1] = x2 * z;
500  gradXYZ[32][2] = x2 * y;
501  laplXYZ[32] = 2 * y * z;
502  XYZ[31] = y2 * z2; // YYZZ
503  gradXYZ[31][1] = 2 * y * z2;
504  gradXYZ[31][2] = 2 * y2 * z;
505  laplXYZ[31] = 2 * y2 + 2 * z2;
506  XYZ[30] = x2 * z2; // XXZZ
507  gradXYZ[30][0] = 2 * x * z2;
508  gradXYZ[30][2] = 2 * x2 * z;
509  laplXYZ[30] = 2 * x2 + 2 * z2;
510  XYZ[29] = x2 * y2; // XXYY
511  gradXYZ[29][0] = 2 * x * y2;
512  gradXYZ[29][1] = 2 * x2 * y;
513  laplXYZ[29] = 2 * x2 + 2 * y2;
514  XYZ[28] = y * z3; // ZZZY
515  gradXYZ[28][1] = z3;
516  gradXYZ[28][2] = 3 * y * z2;
517  laplXYZ[28] = 6 * y * z;
518  XYZ[27] = x * z3; // ZZZX
519  gradXYZ[27][0] = z3;
520  gradXYZ[27][2] = 3 * x * z2;
521  laplXYZ[27] = 6 * x * z;
522  XYZ[26] = y3 * z; // YYYZ
523  gradXYZ[26][1] = 3 * y2 * z;
524  gradXYZ[26][2] = y3;
525  laplXYZ[26] = 6 * y * z;
526  XYZ[25] = x * y3; // YYYX
527  gradXYZ[25][0] = y3;
528  gradXYZ[25][1] = 3 * x * y2;
529  laplXYZ[25] = 6 * x * y;
530  XYZ[24] = x3 * z; // XXXZ
531  gradXYZ[24][0] = 3 * x2 * z;
532  gradXYZ[24][2] = x3;
533  laplXYZ[24] = 6 * x * z;
534  XYZ[23] = x3 * y; // XXXY
535  gradXYZ[23][0] = 3 * x2 * y;
536  gradXYZ[23][1] = x3;
537  laplXYZ[23] = 6 * x * y;
538  XYZ[22] = z4; // ZZZZ
539  gradXYZ[22][2] = 4 * z3;
540  laplXYZ[22] = 12 * z2;
541  XYZ[21] = y4; // YYYY
542  gradXYZ[21][1] = 4 * y3;
543  laplXYZ[21] = 12 * y2;
544  XYZ[20] = x4; // XXXX
545  gradXYZ[20][0] = 4 * x3;
546  laplXYZ[20] = 12 * x2;
547  case 3:
548  XYZ[19] = x * y * z; // XYZ
549  gradXYZ[19][0] = y * z;
550  gradXYZ[19][1] = x * z;
551  gradXYZ[19][2] = x * y;
552  XYZ[18] = y * z2; // ZZY
553  gradXYZ[18][1] = z2;
554  gradXYZ[18][2] = 2 * y * z;
555  laplXYZ[18] = 2 * y;
556  XYZ[17] = x * z2; // ZZX
557  gradXYZ[17][0] = z2;
558  gradXYZ[17][2] = 2 * x * z;
559  laplXYZ[17] = 2 * x;
560  XYZ[16] = y2 * z; // YYZ
561  gradXYZ[16][1] = 2 * y * z;
562  gradXYZ[16][2] = y2;
563  laplXYZ[16] = 2 * z;
564  XYZ[15] = x * y2; // YYX
565  gradXYZ[15][0] = y2;
566  gradXYZ[15][1] = 2 * x * y;
567  laplXYZ[15] = 2 * x;
568  XYZ[14] = x2 * z; // XXZ
569  gradXYZ[14][0] = 2 * x * z;
570  gradXYZ[14][2] = x2;
571  laplXYZ[14] = 2 * z;
572  XYZ[13] = x2 * y; // XXY
573  gradXYZ[13][0] = 2 * x * y;
574  gradXYZ[13][1] = x2;
575  laplXYZ[13] = 2 * y;
576  XYZ[12] = z3; // ZZZ
577  gradXYZ[12][2] = 3 * z2;
578  laplXYZ[12] = 6 * z;
579  XYZ[11] = y3; // YYY
580  gradXYZ[11][1] = 3 * y2;
581  laplXYZ[11] = 6 * y;
582  XYZ[10] = x3; // XXX
583  gradXYZ[10][0] = 3 * x2;
584  laplXYZ[10] = 6 * x;
585  case 2:
586  XYZ[9] = y * z; // YZ
587  gradXYZ[9][1] = z;
588  gradXYZ[9][2] = y;
589  XYZ[8] = x * z; // XZ
590  gradXYZ[8][0] = z;
591  gradXYZ[8][2] = x;
592  XYZ[7] = x * y; // XY
593  gradXYZ[7][0] = y;
594  gradXYZ[7][1] = x;
595  XYZ[6] = z2; // ZZ
596  gradXYZ[6][2] = 2 * z;
597  laplXYZ[6] = 2;
598  XYZ[5] = y2; // YY
599  gradXYZ[5][1] = 2 * y;
600  laplXYZ[5] = 2;
601  XYZ[4] = x2; // XX
602  gradXYZ[4][0] = 2 * x;
603  laplXYZ[4] = 2;
604  case 1:
605  XYZ[3] = z; // Z
606  gradXYZ[3][2] = 1;
607  XYZ[2] = y; // Y
608  gradXYZ[2][1] = 1;
609  XYZ[1] = x; // X
610  gradXYZ[1][0] = 1;
611  case 0:
612  XYZ[0] = 1; // S
613  }
614  for (int i = 0; i < ntot; i++)
615  XYZ[i] *= NormFactor[i];
616  for (int i = 0; i < ntot; i++)
617  gradXYZ[i] *= NormFactor[i];
618  for (int i = 0; i < ntot; i++)
619  laplXYZ[i] *= NormFactor[i];
620 }
621 
622 #if 0
623 template<class T, class Point_t, class Tensor_t, class GGG_t>
625 {
626  value_type x=p[0], y=p[1], z=p[2];
627  value_type x2=x*x, y2=y*y, z2=z*z;
628  value_type x3=x2*x, y3=y2*y, z3=z2*z;
629  value_type x4=x3*x, y4=y3*y, z4=z3*z;
630  value_type x5=x4*x, y5=y4*y, z5=z4*z;
631  int ntot=XYZ.size();
632  for (int i=0; i<ntot; i++)
633  gradXYZ[i]=0.0;
634  for (int i=0; i<ntot; i++)
635  laplXYZ[i]=0.0;
636 
637  switch(Lmax)
638  {
639  case 6:
640  XYZ[83] = x2*y2*z2; // X2Y2Z2
641  gradXYZ[83][0] = 2*x*y2*z2;
642  gradXYZ[83][1] = 2*x2*y*z2;
643  gradXYZ[83][2] = 2*x2*y2*z;
644 
645  }
646  for (int i=0; i<ntot; i++)
647  XYZ[i]*= NormFactor[i];
648  for (int i=0; i<ntot; i++)
649  gradXYZ[i]*= NormFactor[i];
650  for (int i=0; i<ntot; i++)
651  laplXYZ[i]*= NormFactor[i];
652 }
653 #endif
654 
655 
656 template<class T, class Point_t, class Tensor_t, class GGG_t>
658 {
659  value_type x = p[0], y = p[1], z = p[2];
660  value_type x2 = x * x, y2 = y * y, z2 = z * z;
661  value_type x3 = x2 * x, y3 = y2 * y, z3 = z2 * z;
662  value_type x4 = x3 * x, y4 = y3 * y, z4 = z3 * z;
663  value_type x5 = x4 * x, y5 = y4 * y, z5 = z4 * z;
664  int ntot = XYZ.size();
665  for (int i = 0; i < ntot; i++)
666  gradXYZ[i] = 0.0;
667  for (int i = 0; i < ntot; i++)
668  hessXYZ[i] = 0.0;
669 
670  switch (Lmax)
671  {
672  case 6:
673  XYZ[83] = x2 * y2 * z2; // X2Y2Z2
674  gradXYZ[83][0] = 2 * x * y2 * z2;
675  gradXYZ[83][1] = 2 * x2 * y * z2;
676  gradXYZ[83][2] = 2 * x2 * y2 * z;
677  hessXYZ[83](0, 0) = 2 * y2 * z2;
678  hessXYZ[83](0, 1) = 4 * x * y * z2;
679  hessXYZ[83](0, 2) = 4 * x * y2 * z;
680  hessXYZ[83](1, 0) = 4 * x * y * z2;
681  hessXYZ[83](1, 1) = 2 * x2 * z2;
682  hessXYZ[83](1, 2) = 4 * x2 * y * z;
683  hessXYZ[83](2, 0) = 4 * x * y2 * z;
684  hessXYZ[83](2, 1) = 4 * x2 * y * z;
685  hessXYZ[83](2, 2) = 2 * x2 * y2;
686  XYZ[82] = x * y2 * z3; // Z3Y2X
687  gradXYZ[82][0] = y2 * z3;
688  gradXYZ[82][1] = 2 * x * y * z3;
689  gradXYZ[82][2] = 3 * x * y2 * z2;
690  hessXYZ[82](0, 1) = 2 * y * z3;
691  hessXYZ[82](0, 2) = 3 * y2 * z2;
692  hessXYZ[82](1, 0) = 2 * y * z3;
693  hessXYZ[82](1, 1) = 2 * x * z3;
694  hessXYZ[82](1, 2) = 6 * x * y * z2;
695  hessXYZ[82](2, 0) = 3 * y2 * z2;
696  hessXYZ[82](2, 1) = 6 * x * y * z2;
697  hessXYZ[82](2, 2) = 6 * x * y2 * z;
698  XYZ[81] = x2 * y * z3; // Z3X2Y
699  gradXYZ[81][0] = 2 * x * y * z3;
700  gradXYZ[81][1] = x2 * z3;
701  gradXYZ[81][2] = 3 * x2 * y * z2;
702  hessXYZ[81](0, 0) = 2 * y * z3;
703  hessXYZ[81](0, 1) = 2 * x * z3;
704  hessXYZ[81](0, 2) = 6 * x * y * z2;
705  hessXYZ[81](1, 0) = 2 * x * z3;
706  hessXYZ[81](1, 2) = 3 * x2 * z2;
707  hessXYZ[81](2, 0) = 6 * x * y * z2;
708  hessXYZ[81](2, 1) = 3 * x2 * z2;
709  hessXYZ[81](2, 2) = 6 * x2 * y * z;
710  XYZ[80] = x * y3 * z2; // Y3Z2X
711  gradXYZ[80][0] = y3 * z2;
712  gradXYZ[80][1] = 3 * x * y2 * z2;
713  gradXYZ[80][2] = 2 * x * y3 * z;
714  hessXYZ[80](0, 1) = 3 * y2 * z2;
715  hessXYZ[80](0, 2) = 2 * y3 * z;
716  hessXYZ[80](1, 0) = 3 * y2 * z2;
717  hessXYZ[80](1, 1) = 6 * x * y * z2;
718  hessXYZ[80](1, 2) = 6 * x * y2 * z;
719  hessXYZ[80](2, 0) = 2 * y3 * z;
720  hessXYZ[80](2, 1) = 6 * x * y2 * z;
721  hessXYZ[80](2, 2) = 2 * x * y3;
722  XYZ[79] = x2 * y3 * z; // Y3X2Z
723  gradXYZ[79][0] = 2 * x * y3 * z;
724  gradXYZ[79][1] = 3 * x2 * y2 * z;
725  gradXYZ[79][2] = x2 * y3;
726  hessXYZ[79](0, 0) = 2 * y3 * z;
727  hessXYZ[79](0, 1) = 6 * x * y2 * z;
728  hessXYZ[79](0, 2) = 2 * x * y3;
729  hessXYZ[79](1, 0) = 6 * x * y2 * z;
730  hessXYZ[79](1, 1) = 6 * x2 * y * z;
731  hessXYZ[79](1, 2) = 3 * x2 * y2;
732  hessXYZ[79](2, 0) = 2 * x * y3;
733  hessXYZ[79](2, 1) = 3 * x2 * y2;
734  XYZ[78] = x3 * y * z2; // X3Z2Y
735  gradXYZ[78][0] = 3 * x2 * y * z2;
736  gradXYZ[78][1] = x3 * z2;
737  gradXYZ[78][2] = 2 * x3 * y * z;
738  hessXYZ[78](0, 0) = 6 * x * y * z2;
739  hessXYZ[78](0, 1) = 3 * x2 * z2;
740  hessXYZ[78](0, 2) = 6 * x2 * y * z;
741  hessXYZ[78](1, 0) = 3 * x2 * z2;
742  hessXYZ[78](1, 2) = 2 * x3 * z;
743  hessXYZ[78](2, 0) = 6 * x2 * y * z;
744  hessXYZ[78](2, 1) = 2 * x3 * z;
745  hessXYZ[78](2, 2) = 2 * x3 * y;
746  XYZ[77] = x3 * y2 * z; // X3Y2Z
747  gradXYZ[77][0] = 3 * x2 * y2 * z;
748  gradXYZ[77][1] = 2 * x3 * y * z;
749  gradXYZ[77][2] = x3 * y2;
750  hessXYZ[77](0, 0) = 6 * x * y2 * z;
751  hessXYZ[77](0, 1) = 6 * x2 * y * z;
752  hessXYZ[77](0, 2) = 3 * x2 * y2;
753  hessXYZ[77](1, 0) = 6 * x2 * y * z;
754  hessXYZ[77](1, 1) = 2 * x3 * z;
755  hessXYZ[77](1, 2) = 2 * x3 * y;
756  hessXYZ[77](2, 0) = 3 * x2 * y2;
757  hessXYZ[77](2, 1) = 2 * x3 * y;
758  XYZ[76] = y3 * z3; // Y3Z3
759  gradXYZ[76][1] = 3 * y2 * z3;
760  gradXYZ[76][2] = 3 * y3 * z2;
761  hessXYZ[76](1, 1) = 6 * y * z3;
762  hessXYZ[76](1, 2) = 9 * y2 * z2;
763  hessXYZ[76](2, 1) = 9 * y2 * z2;
764  hessXYZ[76](2, 2) = 6 * y3 * z;
765  XYZ[75] = x3 * z3; // X3Z3
766  gradXYZ[75][0] = 3 * x2 * z3;
767  gradXYZ[75][2] = 3 * x3 * z2;
768  hessXYZ[75](0, 0) = 6 * x * z3;
769  hessXYZ[75](0, 2) = 9 * x2 * z2;
770  hessXYZ[75](2, 0) = 9 * x2 * z2;
771  hessXYZ[75](2, 2) = 6 * x3 * z;
772  XYZ[74] = x3 * y3; // X3Y3
773  gradXYZ[74][0] = 3 * x2 * y3;
774  gradXYZ[74][1] = 3 * x3 * y2;
775  hessXYZ[74](0, 0) = 6 * x * y3;
776  hessXYZ[74](0, 1) = 9 * x2 * y2;
777  hessXYZ[74](1, 0) = 9 * x2 * y2;
778  hessXYZ[74](1, 1) = 6 * x3 * y;
779  XYZ[73] = x * y * z4; // Z4XY
780  gradXYZ[73][0] = y * z4;
781  gradXYZ[73][1] = x * z4;
782  gradXYZ[73][2] = 4 * x * y * z3;
783  hessXYZ[73](0, 1) = z4;
784  hessXYZ[73](0, 2) = 4 * y * z3;
785  hessXYZ[73](1, 0) = z4;
786  hessXYZ[73](1, 2) = 4 * x * z3;
787  hessXYZ[73](2, 0) = 4 * y * z3;
788  hessXYZ[73](2, 1) = 4 * x * z3;
789  hessXYZ[73](2, 2) = 12 * x * y * z2;
790  XYZ[72] = x * y4 * z; // Y4XZ
791  gradXYZ[72][0] = y4 * z;
792  gradXYZ[72][1] = 4 * x * y3 * z;
793  gradXYZ[72][2] = x * y4;
794  hessXYZ[72](0, 1) = 4 * y3 * z;
795  hessXYZ[72](0, 2) = y4;
796  hessXYZ[72](1, 0) = 4 * y3 * z;
797  hessXYZ[72](1, 1) = 12 * x * y2 * z;
798  hessXYZ[72](1, 2) = 4 * x * y3;
799  hessXYZ[72](2, 0) = y4;
800  hessXYZ[72](2, 1) = 4 * x * y3;
801  XYZ[71] = x4 * y * z; // X4YZ
802  gradXYZ[71][0] = 4 * x3 * y * z;
803  gradXYZ[71][1] = x4 * z;
804  gradXYZ[71][2] = x4 * y;
805  hessXYZ[71](0, 0) = 12 * x2 * y * z;
806  hessXYZ[71](0, 1) = 4 * x3 * z;
807  hessXYZ[71](0, 2) = 4 * x3 * y;
808  hessXYZ[71](1, 0) = 4 * x3 * z;
809  hessXYZ[71](1, 2) = x4;
810  hessXYZ[71](2, 0) = 4 * x3 * y;
811  hessXYZ[71](2, 1) = x4;
812  XYZ[70] = y2 * z4; // Z4Y2
813  gradXYZ[70][1] = 2 * y * z4;
814  gradXYZ[70][2] = 4 * y2 * z3;
815  hessXYZ[70](1, 1) = 2 * z4;
816  hessXYZ[70](1, 2) = 8 * y * z3;
817  hessXYZ[70](2, 1) = 8 * y * z3;
818  hessXYZ[70](2, 2) = 12 * y2 * z2;
819  XYZ[69] = x2 * z4; // Z4X2
820  gradXYZ[69][0] = 2 * x * z4;
821  gradXYZ[69][2] = 4 * x2 * z3;
822  hessXYZ[69](0, 0) = 2 * z4;
823  hessXYZ[69](0, 2) = 8 * x * z3;
824  hessXYZ[69](2, 0) = 8 * x * z3;
825  hessXYZ[69](2, 2) = 12 * x2 * z2;
826  XYZ[68] = y4 * z2; // Y4Z2
827  gradXYZ[68][1] = 4 * y3 * z2;
828  gradXYZ[68][2] = 2 * y4 * z;
829  hessXYZ[68](1, 1) = 12 * y2 * z2;
830  hessXYZ[68](1, 2) = 8 * y3 * z;
831  hessXYZ[68](2, 1) = 8 * y3 * z;
832  hessXYZ[68](2, 2) = 2 * y4;
833  XYZ[67] = x2 * y4; // Y4X2
834  gradXYZ[67][0] = 2 * x * y4;
835  gradXYZ[67][1] = 4 * x2 * y3;
836  hessXYZ[67](0, 0) = 2 * y4;
837  hessXYZ[67](0, 1) = 8 * x * y3;
838  hessXYZ[67](1, 0) = 8 * x * y3;
839  hessXYZ[67](1, 1) = 12 * x2 * y2;
840  XYZ[66] = x4 * z2; // X4Z2
841  gradXYZ[66][0] = 4 * x3 * z2;
842  gradXYZ[66][2] = 2 * x4 * z;
843  hessXYZ[66](0, 0) = 12 * x2 * z2;
844  hessXYZ[66](0, 2) = 8 * x3 * z;
845  hessXYZ[66](2, 0) = 8 * x3 * z;
846  hessXYZ[66](2, 2) = 2 * x4;
847  XYZ[65] = x4 * y2; // X4Y2
848  gradXYZ[65][0] = 4 * x3 * y2;
849  gradXYZ[65][1] = 2 * x4 * y;
850  hessXYZ[65](0, 0) = 12 * x2 * y2;
851  hessXYZ[65](0, 1) = 8 * x3 * y;
852  hessXYZ[65](1, 0) = 8 * x3 * y;
853  hessXYZ[65](1, 1) = 2 * x4;
854  XYZ[64] = y * z * z4; // Z5Y
855  gradXYZ[64][1] = z * z4;
856  gradXYZ[64][2] = 5 * y * z4;
857  hessXYZ[64](1, 2) = 5 * z4;
858  hessXYZ[64](2, 1) = 5 * z4;
859  hessXYZ[64](2, 2) = 20 * y * z3;
860  XYZ[63] = x * z * z4; // Z5X
861  gradXYZ[63][0] = z * z4;
862  gradXYZ[63][2] = 5 * x * z4;
863  hessXYZ[63](0, 2) = 5 * z4;
864  hessXYZ[63](2, 0) = 5 * z4;
865  hessXYZ[63](2, 2) = 20 * x * z3;
866  XYZ[62] = y * y4 * z; // Y5Z
867  gradXYZ[62][1] = 5 * y4 * z;
868  gradXYZ[62][2] = y * y4;
869  hessXYZ[62](1, 1) = 20 * y3 * z;
870  hessXYZ[62](1, 2) = 5 * y4;
871  hessXYZ[62](2, 1) = 5 * y4;
872  XYZ[61] = x * y * y4; // Y5X
873  gradXYZ[61][0] = y * y4;
874  gradXYZ[61][1] = 5 * x * y4;
875  hessXYZ[61](0, 1) = 5 * y4;
876  hessXYZ[61](1, 0) = 5 * y4;
877  hessXYZ[61](1, 1) = 20 * x * y3;
878  XYZ[60] = x * x4 * z; // X5Z
879  gradXYZ[60][0] = 5 * x4 * z;
880  gradXYZ[60][2] = x * x4;
881  hessXYZ[60](0, 0) = 20 * x3 * z;
882  hessXYZ[60](0, 2) = 5 * x4;
883  hessXYZ[60](2, 0) = 5 * x4;
884  XYZ[59] = x * x4 * y; // X5Y
885  gradXYZ[59][0] = 5 * x4 * y;
886  gradXYZ[59][1] = x * x4;
887  hessXYZ[59](0, 0) = 20 * x3 * y;
888  hessXYZ[59](0, 1) = 5 * x4;
889  hessXYZ[59](1, 0) = 5 * x4;
890  XYZ[58] = z * z5; // Z6
891  gradXYZ[58][2] = 6 * z * z4;
892  hessXYZ[58](2, 2) = 30 * z4;
893  XYZ[57] = y * y5; // Y6
894  gradXYZ[57][1] = 6 * y * y4;
895  hessXYZ[57](1, 1) = 30 * y4;
896  XYZ[56] = x * x5; // X6
897  gradXYZ[56][0] = 6 * x * x4;
898  hessXYZ[56](0, 0) = 30 * x4;
899  case 5:
900  XYZ[55] = x * y2 * z2; // YYZZX
901  gradXYZ[55][0] = y2 * z2;
902  gradXYZ[55][1] = 2 * x * y * z2;
903  gradXYZ[55][2] = 2 * x * y2 * z;
904  hessXYZ[55](0, 1) = 2 * y * z2;
905  hessXYZ[55](0, 2) = 2 * y2 * z;
906  hessXYZ[55](1, 0) = 2 * y * z2;
907  hessXYZ[55](1, 1) = 2 * x * z2;
908  hessXYZ[55](1, 2) = 4 * x * y * z;
909  hessXYZ[55](2, 0) = 2 * y2 * z;
910  hessXYZ[55](2, 1) = 4 * x * y * z;
911  hessXYZ[55](2, 2) = 2 * x * y2;
912  XYZ[54] = x2 * y * z2; // XXZZY
913  gradXYZ[54][0] = 2 * x * y * z2;
914  gradXYZ[54][1] = x2 * z2;
915  gradXYZ[54][2] = 2 * x2 * y * z;
916  hessXYZ[54](0, 0) = 2 * y * z2;
917  hessXYZ[54](0, 1) = 2 * x * z2;
918  hessXYZ[54](0, 2) = 4 * x * y * z;
919  hessXYZ[54](1, 0) = 2 * x * z2;
920  hessXYZ[54](1, 2) = 2 * x2 * z;
921  hessXYZ[54](2, 0) = 4 * x * y * z;
922  hessXYZ[54](2, 1) = 2 * x2 * z;
923  hessXYZ[54](2, 2) = 2 * x2 * y;
924  XYZ[53] = x2 * y2 * z; // XXYYZ
925  gradXYZ[53][0] = 2 * x * y2 * z;
926  gradXYZ[53][1] = 2 * x2 * y * z;
927  gradXYZ[53][2] = x2 * y2;
928  hessXYZ[53](0, 0) = 2 * y2 * z;
929  hessXYZ[53](0, 1) = 4 * x * y * z;
930  hessXYZ[53](0, 2) = 2 * x * y2;
931  hessXYZ[53](1, 0) = 4 * x * y * z;
932  hessXYZ[53](1, 1) = 2 * x2 * z;
933  hessXYZ[53](1, 2) = 2 * x2 * y;
934  hessXYZ[53](2, 0) = 2 * x * y2;
935  hessXYZ[53](2, 1) = 2 * x2 * y;
936  XYZ[52] = x * y * z3; // ZZZXY
937  gradXYZ[52][0] = y * z3;
938  gradXYZ[52][1] = x * z3;
939  gradXYZ[52][2] = 3 * x * y * z2;
940  hessXYZ[52](0, 1) = z3;
941  hessXYZ[52](0, 2) = 3 * y * z2;
942  hessXYZ[52](1, 0) = z3;
943  hessXYZ[52](1, 2) = 3 * x * z2;
944  hessXYZ[52](2, 0) = 3 * y * z2;
945  hessXYZ[52](2, 1) = 3 * x * z2;
946  hessXYZ[52](2, 2) = 6 * x * y * z;
947  XYZ[51] = x * y3 * z; // YYYXZ
948  gradXYZ[51][0] = y3 * z;
949  gradXYZ[51][1] = 3 * x * y2 * z;
950  gradXYZ[51][2] = x * y3;
951  hessXYZ[51](0, 1) = 3 * y2 * z;
952  hessXYZ[51](0, 2) = y3;
953  hessXYZ[51](1, 0) = 3 * y2 * z;
954  hessXYZ[51](1, 1) = 6 * x * y * z;
955  hessXYZ[51](1, 2) = 3 * x * y2;
956  hessXYZ[51](2, 0) = y3;
957  hessXYZ[51](2, 1) = 3 * x * y2;
958  XYZ[50] = x3 * y * z; // XXXYZ
959  gradXYZ[50][0] = 3 * x2 * y * z;
960  gradXYZ[50][1] = x3 * z;
961  gradXYZ[50][2] = x3 * y;
962  hessXYZ[50](0, 0) = 6 * x * y * z;
963  hessXYZ[50](0, 1) = 3 * x2 * z;
964  hessXYZ[50](0, 2) = 3 * x2 * y;
965  hessXYZ[50](1, 0) = 3 * x2 * z;
966  hessXYZ[50](1, 2) = x3;
967  hessXYZ[50](2, 0) = 3 * x2 * y;
968  hessXYZ[50](2, 1) = x3;
969  XYZ[49] = y2 * z3; // ZZZYY
970  gradXYZ[49][1] = 2 * y * z3;
971  gradXYZ[49][2] = 3 * y2 * z2;
972  hessXYZ[49](1, 1) = 2 * z3;
973  hessXYZ[49](1, 2) = 6 * y * z2;
974  hessXYZ[49](2, 1) = 6 * y * z2;
975  hessXYZ[49](2, 2) = 6 * y2 * z;
976  XYZ[48] = x2 * z3; // ZZZXX
977  gradXYZ[48][0] = 2 * x * z3;
978  gradXYZ[48][2] = 3 * x2 * z2;
979  hessXYZ[48](0, 0) = 2 * z3;
980  hessXYZ[48](0, 2) = 6 * x * z2;
981  hessXYZ[48](2, 0) = 6 * x * z2;
982  hessXYZ[48](2, 2) = 6 * x2 * z;
983  XYZ[47] = y3 * z2; // YYYZZ
984  gradXYZ[47][1] = 3 * y2 * z2;
985  gradXYZ[47][2] = 2 * y3 * z;
986  hessXYZ[47](1, 1) = 6 * y * z2;
987  hessXYZ[47](1, 2) = 6 * y2 * z;
988  hessXYZ[47](2, 1) = 6 * y2 * z;
989  hessXYZ[47](2, 2) = 2 * y3;
990  XYZ[46] = x2 * y3; // YYYXX
991  gradXYZ[46][0] = 2 * x * y3;
992  gradXYZ[46][1] = 3 * x2 * y2;
993  hessXYZ[46](0, 0) = 2 * y3;
994  hessXYZ[46](0, 1) = 6 * x * y2;
995  hessXYZ[46](1, 0) = 6 * x * y2;
996  hessXYZ[46](1, 1) = 6 * x2 * y;
997  XYZ[45] = x3 * z2; // XXXZZ
998  gradXYZ[45][0] = 3 * x2 * z2;
999  gradXYZ[45][2] = 2 * x3 * z;
1000  hessXYZ[45](0, 0) = 6 * x * z2;
1001  hessXYZ[45](0, 2) = 6 * x2 * z;
1002  hessXYZ[45](2, 0) = 6 * x2 * z;
1003  hessXYZ[45](2, 2) = 2 * x3;
1004  XYZ[44] = x3 * y2; // XXXYY
1005  gradXYZ[44][0] = 3 * x2 * y2;
1006  gradXYZ[44][1] = 2 * x3 * y;
1007  hessXYZ[44](0, 0) = 6 * x * y2;
1008  hessXYZ[44](0, 1) = 6 * x2 * y;
1009  hessXYZ[44](1, 0) = 6 * x2 * y;
1010  hessXYZ[44](1, 1) = 2 * x3;
1011  XYZ[43] = y * z4; // ZZZZY
1012  gradXYZ[43][1] = z4;
1013  gradXYZ[43][2] = 4 * y * z3;
1014  hessXYZ[43](1, 2) = 4 * z3;
1015  hessXYZ[43](2, 1) = 4 * z3;
1016  hessXYZ[43](2, 2) = 12 * y * z2;
1017  XYZ[42] = x * z4; // ZZZZX
1018  gradXYZ[42][0] = z4;
1019  gradXYZ[42][2] = 4 * x * z3;
1020  hessXYZ[42](0, 2) = 4 * z3;
1021  hessXYZ[42](2, 0) = 4 * z3;
1022  hessXYZ[42](2, 2) = 12 * x * z2;
1023  XYZ[41] = y4 * z; // YYYYZ
1024  gradXYZ[41][1] = 4 * y3 * z;
1025  gradXYZ[41][2] = y4;
1026  hessXYZ[41](1, 1) = 12 * y2 * z;
1027  hessXYZ[41](1, 2) = 4 * y3;
1028  hessXYZ[41](2, 1) = 4 * y3;
1029  XYZ[40] = x * y4; // YYYYX
1030  gradXYZ[40][0] = y4;
1031  gradXYZ[40][1] = 4 * x * y3;
1032  hessXYZ[40](0, 1) = 4 * y3;
1033  hessXYZ[40](1, 0) = 4 * y3;
1034  hessXYZ[40](1, 1) = 12 * x * y2;
1035  XYZ[39] = x4 * z; // XXXXZ
1036  gradXYZ[39][0] = 4 * x3 * z;
1037  gradXYZ[39][2] = x4;
1038  hessXYZ[39](0, 0) = 12 * x2 * z;
1039  hessXYZ[39](0, 2) = 4 * x3;
1040  hessXYZ[39](2, 0) = 4 * x3;
1041  XYZ[38] = x4 * y; // XXXXY
1042  gradXYZ[38][0] = 4 * x3 * y;
1043  gradXYZ[38][1] = x4;
1044  hessXYZ[38](0, 0) = 12 * x2 * y;
1045  hessXYZ[38](0, 1) = 4 * x3;
1046  hessXYZ[38](1, 0) = 4 * x3;
1047  XYZ[37] = z * z4; // ZZZZZ
1048  gradXYZ[37][2] = 5 * z4;
1049  hessXYZ[37](2, 2) = 20 * z3;
1050  XYZ[36] = y * y4; // YYYYY
1051  gradXYZ[36][1] = 5 * y4;
1052  hessXYZ[36](1, 1) = 20 * y3;
1053  XYZ[35] = x * x4; // XXXXX
1054  gradXYZ[35][0] = 5 * x4;
1055  hessXYZ[35](0, 0) = 20 * x3;
1056  case 4:
1057  XYZ[34] = x * y * z2; // ZZXY
1058  gradXYZ[34][0] = y * z2;
1059  gradXYZ[34][1] = x * z2;
1060  gradXYZ[34][2] = 2 * x * y * z;
1061  hessXYZ[34](0, 1) = z2;
1062  hessXYZ[34](0, 2) = 2 * y * z;
1063  hessXYZ[34](1, 0) = z2;
1064  hessXYZ[34](1, 2) = 2 * x * z;
1065  hessXYZ[34](2, 0) = 2 * y * z;
1066  hessXYZ[34](2, 1) = 2 * x * z;
1067  hessXYZ[34](2, 2) = 2 * x * y;
1068  XYZ[33] = x * y2 * z; // YYXZ
1069  gradXYZ[33][0] = y2 * z;
1070  gradXYZ[33][1] = 2 * x * y * z;
1071  gradXYZ[33][2] = x * y2;
1072  hessXYZ[33](0, 1) = 2 * y * z;
1073  hessXYZ[33](0, 2) = y2;
1074  hessXYZ[33](1, 0) = 2 * y * z;
1075  hessXYZ[33](1, 1) = 2 * x * z;
1076  hessXYZ[33](1, 2) = 2 * x * y;
1077  hessXYZ[33](2, 0) = y2;
1078  hessXYZ[33](2, 1) = 2 * x * y;
1079  XYZ[32] = x2 * y * z; // XXYZ
1080  gradXYZ[32][0] = 2 * x * y * z;
1081  gradXYZ[32][1] = x2 * z;
1082  gradXYZ[32][2] = x2 * y;
1083  hessXYZ[32](0, 0) = 2 * y * z;
1084  hessXYZ[32](0, 1) = 2 * x * z;
1085  hessXYZ[32](0, 2) = 2 * x * y;
1086  hessXYZ[32](1, 0) = 2 * x * z;
1087  hessXYZ[32](1, 2) = x2;
1088  hessXYZ[32](2, 0) = 2 * x * y;
1089  hessXYZ[32](2, 1) = x2;
1090  XYZ[31] = y2 * z2; // YYZZ
1091  gradXYZ[31][1] = 2 * y * z2;
1092  gradXYZ[31][2] = 2 * y2 * z;
1093  hessXYZ[31](1, 1) = 2 * z2;
1094  hessXYZ[31](1, 2) = 4 * y * z;
1095  hessXYZ[31](2, 1) = 4 * y * z;
1096  hessXYZ[31](2, 2) = 2 * y2;
1097  XYZ[30] = x2 * z2; // XXZZ
1098  gradXYZ[30][0] = 2 * x * z2;
1099  gradXYZ[30][2] = 2 * x2 * z;
1100  hessXYZ[30](0, 0) = 2 * z2;
1101  hessXYZ[30](0, 2) = 4 * x * z;
1102  hessXYZ[30](2, 0) = 4 * x * z;
1103  hessXYZ[30](2, 2) = 2 * x2;
1104  XYZ[29] = x2 * y2; // XXYY
1105  gradXYZ[29][0] = 2 * x * y2;
1106  gradXYZ[29][1] = 2 * x2 * y;
1107  hessXYZ[29](0, 0) = 2 * y2;
1108  hessXYZ[29](0, 1) = 4 * x * y;
1109  hessXYZ[29](1, 0) = 4 * x * y;
1110  hessXYZ[29](1, 1) = 2 * x2;
1111  XYZ[28] = y * z3; // ZZZY
1112  gradXYZ[28][1] = z3;
1113  gradXYZ[28][2] = 3 * y * z2;
1114  hessXYZ[28](1, 2) = 3 * z2;
1115  hessXYZ[28](2, 1) = 3 * z2;
1116  hessXYZ[28](2, 2) = 6 * y * z;
1117  XYZ[27] = x * z3; // ZZZX
1118  gradXYZ[27][0] = z3;
1119  gradXYZ[27][2] = 3 * x * z2;
1120  hessXYZ[27](0, 2) = 3 * z2;
1121  hessXYZ[27](2, 0) = 3 * z2;
1122  hessXYZ[27](2, 2) = 6 * x * z;
1123  XYZ[26] = y3 * z; // YYYZ
1124  gradXYZ[26][1] = 3 * y2 * z;
1125  gradXYZ[26][2] = y3;
1126  hessXYZ[26](1, 1) = 6 * y * z;
1127  hessXYZ[26](1, 2) = 3 * y2;
1128  hessXYZ[26](2, 1) = 3 * y2;
1129  XYZ[25] = x * y3; // YYYX
1130  gradXYZ[25][0] = y3;
1131  gradXYZ[25][1] = 3 * x * y2;
1132  hessXYZ[25](0, 1) = 3 * y2;
1133  hessXYZ[25](1, 0) = 3 * y2;
1134  hessXYZ[25](1, 1) = 6 * x * y;
1135  XYZ[24] = x3 * z; // XXXZ
1136  gradXYZ[24][0] = 3 * x2 * z;
1137  gradXYZ[24][2] = x3;
1138  hessXYZ[24](0, 0) = 6 * x * z;
1139  hessXYZ[24](0, 2) = 3 * x2;
1140  hessXYZ[24](2, 0) = 3 * x2;
1141  XYZ[23] = x3 * y; // XXXY
1142  gradXYZ[23][0] = 3 * x2 * y;
1143  gradXYZ[23][1] = x3;
1144  hessXYZ[23](0, 0) = 6 * x * y;
1145  hessXYZ[23](0, 1) = 3 * x2;
1146  hessXYZ[23](1, 0) = 3 * x2;
1147  XYZ[22] = z4; // ZZZZ
1148  gradXYZ[22][2] = 4 * z3;
1149  hessXYZ[22](2, 2) = 12 * z2;
1150  XYZ[21] = y4; // YYYY
1151  gradXYZ[21][1] = 4 * y3;
1152  hessXYZ[21](1, 1) = 12 * y2;
1153  XYZ[20] = x4; // XXXX
1154  gradXYZ[20][0] = 4 * x3;
1155  hessXYZ[20](0, 0) = 12 * x2;
1156  case 3:
1157  XYZ[19] = x * y * z; // XYZ
1158  gradXYZ[19][0] = y * z;
1159  gradXYZ[19][1] = x * z;
1160  gradXYZ[19][2] = x * y;
1161  hessXYZ[19](0, 1) = z;
1162  hessXYZ[19](0, 2) = y;
1163  hessXYZ[19](1, 0) = z;
1164  hessXYZ[19](1, 2) = x;
1165  hessXYZ[19](2, 0) = y;
1166  hessXYZ[19](2, 1) = x;
1167  XYZ[18] = y * z2; // ZZY
1168  gradXYZ[18][1] = z2;
1169  gradXYZ[18][2] = 2 * y * z;
1170  hessXYZ[18](1, 2) = 2 * z;
1171  hessXYZ[18](2, 1) = 2 * z;
1172  hessXYZ[18](2, 2) = 2 * y;
1173  XYZ[17] = x * z2; // ZZX
1174  gradXYZ[17][0] = z2;
1175  gradXYZ[17][2] = 2 * x * z;
1176  hessXYZ[17](0, 2) = 2 * z;
1177  hessXYZ[17](2, 0) = 2 * z;
1178  hessXYZ[17](2, 2) = 2 * x;
1179  XYZ[16] = y2 * z; // YYZ
1180  gradXYZ[16][1] = 2 * y * z;
1181  gradXYZ[16][2] = y2;
1182  hessXYZ[16](1, 1) = 2 * z;
1183  hessXYZ[16](1, 2) = 2 * y;
1184  hessXYZ[16](2, 1) = 2 * y;
1185  XYZ[15] = x * y2; // YYX
1186  gradXYZ[15][0] = y2;
1187  gradXYZ[15][1] = 2 * x * y;
1188  hessXYZ[15](0, 1) = 2 * y;
1189  hessXYZ[15](1, 0) = 2 * y;
1190  hessXYZ[15](1, 1) = 2 * x;
1191  XYZ[14] = x2 * z; // XXZ
1192  gradXYZ[14][0] = 2 * x * z;
1193  gradXYZ[14][2] = x2;
1194  hessXYZ[14](0, 0) = 2 * z;
1195  hessXYZ[14](0, 2) = 2 * x;
1196  hessXYZ[14](2, 0) = 2 * x;
1197  XYZ[13] = x2 * y; // XXY
1198  gradXYZ[13][0] = 2 * x * y;
1199  gradXYZ[13][1] = x2;
1200  hessXYZ[13](0, 0) = 2 * y;
1201  hessXYZ[13](0, 1) = 2 * x;
1202  hessXYZ[13](1, 0) = 2 * x;
1203  XYZ[12] = z3; // ZZZ
1204  gradXYZ[12][2] = 3 * z2;
1205  hessXYZ[12](2, 2) = 6 * z;
1206  XYZ[11] = y3; // YYY
1207  gradXYZ[11][1] = 3 * y2;
1208  hessXYZ[11](1, 1) = 6 * y;
1209  XYZ[10] = x3; // XXX
1210  gradXYZ[10][0] = 3 * x2;
1211  hessXYZ[10](0, 0) = 6 * x;
1212  case 2:
1213  XYZ[9] = y * z; // YZ
1214  gradXYZ[9][1] = z;
1215  gradXYZ[9][2] = y;
1216  hessXYZ[9](1, 2) = 1;
1217  hessXYZ[9](2, 1) = 1;
1218  XYZ[8] = x * z; // XZ
1219  gradXYZ[8][0] = z;
1220  gradXYZ[8][2] = x;
1221  hessXYZ[8](0, 2) = 1;
1222  hessXYZ[8](2, 0) = 1;
1223  XYZ[7] = x * y; // XY
1224  gradXYZ[7][0] = y;
1225  gradXYZ[7][1] = x;
1226  hessXYZ[7](0, 1) = 1;
1227  hessXYZ[7](1, 0) = 1;
1228  XYZ[6] = z2; // ZZ
1229  gradXYZ[6][2] = 2 * z;
1230  hessXYZ[6](2, 2) = 2;
1231  XYZ[5] = y2; // YY
1232  gradXYZ[5][1] = 2 * y;
1233  hessXYZ[5](1, 1) = 2;
1234  XYZ[4] = x2; // XX
1235  gradXYZ[4][0] = 2 * x;
1236  hessXYZ[4](0, 0) = 2;
1237  case 1:
1238  XYZ[3] = z; // Z
1239  gradXYZ[3][2] = 1;
1240  XYZ[2] = y; // Y
1241  gradXYZ[2][1] = 1;
1242  XYZ[1] = x; // X
1243  gradXYZ[1][0] = 1;
1244  case 0:
1245  XYZ[0] = 1; // S
1246  }
1247  for (int i = 0; i < ntot; i++)
1248  XYZ[i] *= NormFactor[i];
1249  for (int i = 0; i < ntot; i++)
1250  gradXYZ[i] *= NormFactor[i];
1251  for (int i = 0; i < ntot; i++)
1252  hessXYZ[i] *= NormFactor[i];
1253 }
1254 
1255 
1256 template<class T, class Point_t, class Tensor_t, class GGG_t>
1258 {
1259  value_type x = p[0], y = p[1], z = p[2];
1260  value_type x2 = x * x, y2 = y * y, z2 = z * z;
1261  value_type x3 = x2 * x, y3 = y2 * y, z3 = z2 * z;
1262  value_type x4 = x3 * x, y4 = y3 * y, z4 = z3 * z;
1263  value_type x5 = x4 * x, y5 = y4 * y, z5 = z4 * z;
1264 
1265  int ntot = XYZ.size();
1266  for (int i = 0; i < ntot; i++)
1267  gradXYZ[i] = 0.0;
1268  for (int i = 0; i < ntot; i++)
1269  hessXYZ[i] = 0.0;
1270  for (int i = 0; i < ntot; i++)
1271  {
1272  gggXYZ[i][0] = 0.0;
1273  gggXYZ[i][1] = 0.0;
1274  gggXYZ[i][2] = 0.0;
1275  }
1276 
1277  switch (Lmax)
1278  {
1279  case 6:
1280  XYZ[83] = x2 * y2 * z2; // X2Y2Z2
1281  gradXYZ[83][0] = 2 * x * y2 * z2;
1282  gradXYZ[83][1] = 2 * x2 * y * z2;
1283  gradXYZ[83][2] = 2 * x2 * y2 * z;
1284  hessXYZ[83](0, 0) = 2 * y2 * z2;
1285  hessXYZ[83](0, 1) = 4 * x * y * z2;
1286  hessXYZ[83](0, 2) = 4 * x * y2 * z;
1287  hessXYZ[83](1, 0) = 4 * x * y * z2;
1288  hessXYZ[83](1, 1) = 2 * x2 * z2;
1289  hessXYZ[83](1, 2) = 4 * x2 * y * z;
1290  hessXYZ[83](2, 0) = 4 * x * y2 * z;
1291  hessXYZ[83](2, 1) = 4 * x2 * y * z;
1292  hessXYZ[83](2, 2) = 2 * x2 * y2;
1293  gggXYZ[83][0](0, 1) = 4 * y * z2;
1294  gggXYZ[83][0](0, 2) = 4 * y2 * z;
1295  gggXYZ[83][0](1, 0) = 4 * y * z2;
1296  gggXYZ[83][0](1, 1) = 4 * x * z2;
1297  gggXYZ[83][0](1, 2) = 8 * x * y * z;
1298  gggXYZ[83][0](2, 0) = 4 * y2 * z;
1299  gggXYZ[83][0](2, 1) = 8 * x * y * z;
1300  gggXYZ[83][0](2, 2) = 4 * x * y2;
1301  gggXYZ[83][1](0, 0) = 4 * y * z2;
1302  gggXYZ[83][1](0, 1) = 4 * x * z2;
1303  gggXYZ[83][1](0, 2) = 8 * x * y * z;
1304  gggXYZ[83][1](1, 0) = 4 * x * z2;
1305  gggXYZ[83][1](1, 2) = 4 * x2 * z;
1306  gggXYZ[83][1](2, 0) = 8 * x * y * z;
1307  gggXYZ[83][1](2, 1) = 4 * x2 * z;
1308  gggXYZ[83][1](2, 2) = 4 * x2 * y;
1309  gggXYZ[83][2](0, 0) = 4 * y2 * z;
1310  gggXYZ[83][2](0, 1) = 8 * x * y * z;
1311  gggXYZ[83][2](0, 2) = 4 * x * y2;
1312  gggXYZ[83][2](1, 0) = 8 * x * y * z;
1313  gggXYZ[83][2](1, 1) = 4 * x2 * z;
1314  gggXYZ[83][2](1, 2) = 4 * x2 * y;
1315  gggXYZ[83][2](2, 0) = 4 * x * y2;
1316  gggXYZ[83][2](2, 1) = 4 * x2 * y;
1317  XYZ[82] = x * y2 * z3; // Z3Y2X
1318  gradXYZ[82][0] = y2 * z3;
1319  gradXYZ[82][1] = 2 * x * y * z3;
1320  gradXYZ[82][2] = 3 * x * y2 * z2;
1321  hessXYZ[82](0, 1) = 2 * y * z3;
1322  hessXYZ[82](0, 2) = 3 * y2 * z2;
1323  hessXYZ[82](1, 0) = 2 * y * z3;
1324  hessXYZ[82](1, 1) = 2 * x * z3;
1325  hessXYZ[82](1, 2) = 6 * x * y * z2;
1326  hessXYZ[82](2, 0) = 3 * y2 * z2;
1327  hessXYZ[82](2, 1) = 6 * x * y * z2;
1328  hessXYZ[82](2, 2) = 6 * x * y2 * z;
1329  gggXYZ[82][0](1, 1) = 2 * z3;
1330  gggXYZ[82][0](1, 2) = 6 * y * z2;
1331  gggXYZ[82][0](2, 1) = 6 * y * z2;
1332  gggXYZ[82][0](2, 2) = 6 * y2 * z;
1333  gggXYZ[82][1](0, 1) = 2 * z3;
1334  gggXYZ[82][1](0, 2) = 6 * y * z2;
1335  gggXYZ[82][1](1, 0) = 2 * z3;
1336  gggXYZ[82][1](1, 2) = 6 * x * z2;
1337  gggXYZ[82][1](2, 0) = 6 * y * z2;
1338  gggXYZ[82][1](2, 1) = 6 * x * z2;
1339  gggXYZ[82][1](2, 2) = 12 * x * y * z;
1340  gggXYZ[82][2](0, 1) = 6 * y * z2;
1341  gggXYZ[82][2](0, 2) = 6 * y2 * z;
1342  gggXYZ[82][2](1, 0) = 6 * y * z2;
1343  gggXYZ[82][2](1, 1) = 6 * x * z2;
1344  gggXYZ[82][2](1, 2) = 12 * x * y * z;
1345  gggXYZ[82][2](2, 0) = 6 * y2 * z;
1346  gggXYZ[82][2](2, 1) = 12 * x * y * z;
1347  gggXYZ[82][2](2, 2) = 6 * x * y2;
1348  XYZ[81] = x2 * y * z3; // Z3X2Y
1349  gradXYZ[81][0] = 2 * x * y * z3;
1350  gradXYZ[81][1] = x2 * z3;
1351  gradXYZ[81][2] = 3 * x2 * y * z2;
1352  hessXYZ[81](0, 0) = 2 * y * z3;
1353  hessXYZ[81](0, 1) = 2 * x * z3;
1354  hessXYZ[81](0, 2) = 6 * x * y * z2;
1355  hessXYZ[81](1, 0) = 2 * x * z3;
1356  hessXYZ[81](1, 2) = 3 * x2 * z2;
1357  hessXYZ[81](2, 0) = 6 * x * y * z2;
1358  hessXYZ[81](2, 1) = 3 * x2 * z2;
1359  hessXYZ[81](2, 2) = 6 * x2 * y * z;
1360  gggXYZ[81][0](0, 1) = 2 * z3;
1361  gggXYZ[81][0](0, 2) = 6 * y * z2;
1362  gggXYZ[81][0](1, 0) = 2 * z3;
1363  gggXYZ[81][0](1, 2) = 6 * x * z2;
1364  gggXYZ[81][0](2, 0) = 6 * y * z2;
1365  gggXYZ[81][0](2, 1) = 6 * x * z2;
1366  gggXYZ[81][0](2, 2) = 12 * x * y * z;
1367  gggXYZ[81][1](0, 0) = 2 * z3;
1368  gggXYZ[81][1](0, 2) = 6 * x * z2;
1369  gggXYZ[81][1](2, 0) = 6 * x * z2;
1370  gggXYZ[81][1](2, 2) = 6 * x2 * z;
1371  gggXYZ[81][2](0, 0) = 6 * y * z2;
1372  gggXYZ[81][2](0, 1) = 6 * x * z2;
1373  gggXYZ[81][2](0, 2) = 12 * x * y * z;
1374  gggXYZ[81][2](1, 0) = 6 * x * z2;
1375  gggXYZ[81][2](1, 2) = 6 * x2 * z;
1376  gggXYZ[81][2](2, 0) = 12 * x * y * z;
1377  gggXYZ[81][2](2, 1) = 6 * x2 * z;
1378  gggXYZ[81][2](2, 2) = 6 * x2 * y;
1379  XYZ[80] = x * y3 * z2; // Y3Z2X
1380  gradXYZ[80][0] = y3 * z2;
1381  gradXYZ[80][1] = 3 * x * y2 * z2;
1382  gradXYZ[80][2] = 2 * x * y3 * z;
1383  hessXYZ[80](0, 1) = 3 * y2 * z2;
1384  hessXYZ[80](0, 2) = 2 * y3 * z;
1385  hessXYZ[80](1, 0) = 3 * y2 * z2;
1386  hessXYZ[80](1, 1) = 6 * x * y * z2;
1387  hessXYZ[80](1, 2) = 6 * x * y2 * z;
1388  hessXYZ[80](2, 0) = 2 * y3 * z;
1389  hessXYZ[80](2, 1) = 6 * x * y2 * z;
1390  hessXYZ[80](2, 2) = 2 * x * y3;
1391  gggXYZ[80][0](1, 1) = 6 * y * z2;
1392  gggXYZ[80][0](1, 2) = 6 * y2 * z;
1393  gggXYZ[80][0](2, 1) = 6 * y2 * z;
1394  gggXYZ[80][0](2, 2) = 2 * y3;
1395  gggXYZ[80][1](0, 1) = 6 * y * z2;
1396  gggXYZ[80][1](0, 2) = 6 * y2 * z;
1397  gggXYZ[80][1](1, 0) = 6 * y * z2;
1398  gggXYZ[80][1](1, 1) = 6 * x * z2;
1399  gggXYZ[80][1](1, 2) = 12 * x * y * z;
1400  gggXYZ[80][1](2, 0) = 6 * y2 * z;
1401  gggXYZ[80][1](2, 1) = 12 * x * y * z;
1402  gggXYZ[80][1](2, 2) = 6 * x * y2;
1403  gggXYZ[80][2](0, 1) = 6 * y2 * z;
1404  gggXYZ[80][2](0, 2) = 2 * y3;
1405  gggXYZ[80][2](1, 0) = 6 * y2 * z;
1406  gggXYZ[80][2](1, 1) = 12 * x * y * z;
1407  gggXYZ[80][2](1, 2) = 6 * x * y2;
1408  gggXYZ[80][2](2, 0) = 2 * y3;
1409  gggXYZ[80][2](2, 1) = 6 * x * y2;
1410  XYZ[79] = x2 * y3 * z; // Y3X2Z
1411  gradXYZ[79][0] = 2 * x * y3 * z;
1412  gradXYZ[79][1] = 3 * x2 * y2 * z;
1413  gradXYZ[79][2] = x2 * y3;
1414  hessXYZ[79](0, 0) = 2 * y3 * z;
1415  hessXYZ[79](0, 1) = 6 * x * y2 * z;
1416  hessXYZ[79](0, 2) = 2 * x * y3;
1417  hessXYZ[79](1, 0) = 6 * x * y2 * z;
1418  hessXYZ[79](1, 1) = 6 * x2 * y * z;
1419  hessXYZ[79](1, 2) = 3 * x2 * y2;
1420  hessXYZ[79](2, 0) = 2 * x * y3;
1421  hessXYZ[79](2, 1) = 3 * x2 * y2;
1422  gggXYZ[79][0](0, 1) = 6 * y2 * z;
1423  gggXYZ[79][0](0, 2) = 2 * y3;
1424  gggXYZ[79][0](1, 0) = 6 * y2 * z;
1425  gggXYZ[79][0](1, 1) = 12 * x * y * z;
1426  gggXYZ[79][0](1, 2) = 6 * x * y2;
1427  gggXYZ[79][0](2, 0) = 2 * y3;
1428  gggXYZ[79][0](2, 1) = 6 * x * y2;
1429  gggXYZ[79][1](0, 0) = 6 * y2 * z;
1430  gggXYZ[79][1](0, 1) = 12 * x * y * z;
1431  gggXYZ[79][1](0, 2) = 6 * x * y2;
1432  gggXYZ[79][1](1, 0) = 12 * x * y * z;
1433  gggXYZ[79][1](1, 1) = 6 * x2 * z;
1434  gggXYZ[79][1](1, 2) = 6 * x2 * y;
1435  gggXYZ[79][1](2, 0) = 6 * x * y2;
1436  gggXYZ[79][1](2, 1) = 6 * x2 * y;
1437  gggXYZ[79][2](0, 0) = 2 * y3;
1438  gggXYZ[79][2](0, 1) = 6 * x * y2;
1439  gggXYZ[79][2](1, 0) = 6 * x * y2;
1440  gggXYZ[79][2](1, 1) = 6 * x2 * y;
1441  XYZ[78] = x3 * y * z2; // X3Z2Y
1442  gradXYZ[78][0] = 3 * x2 * y * z2;
1443  gradXYZ[78][1] = x3 * z2;
1444  gradXYZ[78][2] = 2 * x3 * y * z;
1445  hessXYZ[78](0, 0) = 6 * x * y * z2;
1446  hessXYZ[78](0, 1) = 3 * x2 * z2;
1447  hessXYZ[78](0, 2) = 6 * x2 * y * z;
1448  hessXYZ[78](1, 0) = 3 * x2 * z2;
1449  hessXYZ[78](1, 2) = 2 * x3 * z;
1450  hessXYZ[78](2, 0) = 6 * x2 * y * z;
1451  hessXYZ[78](2, 1) = 2 * x3 * z;
1452  hessXYZ[78](2, 2) = 2 * x3 * y;
1453  gggXYZ[78][0](0, 0) = 6 * y * z2;
1454  gggXYZ[78][0](0, 1) = 6 * x * z2;
1455  gggXYZ[78][0](0, 2) = 12 * x * y * z;
1456  gggXYZ[78][0](1, 0) = 6 * x * z2;
1457  gggXYZ[78][0](1, 2) = 6 * x2 * z;
1458  gggXYZ[78][0](2, 0) = 12 * x * y * z;
1459  gggXYZ[78][0](2, 1) = 6 * x2 * z;
1460  gggXYZ[78][0](2, 2) = 6 * x2 * y;
1461  gggXYZ[78][1](0, 0) = 6 * x * z2;
1462  gggXYZ[78][1](0, 2) = 6 * x2 * z;
1463  gggXYZ[78][1](2, 0) = 6 * x2 * z;
1464  gggXYZ[78][1](2, 2) = 2 * x3;
1465  gggXYZ[78][2](0, 0) = 12 * x * y * z;
1466  gggXYZ[78][2](0, 1) = 6 * x2 * z;
1467  gggXYZ[78][2](0, 2) = 6 * x2 * y;
1468  gggXYZ[78][2](1, 0) = 6 * x2 * z;
1469  gggXYZ[78][2](1, 2) = 2 * x3;
1470  gggXYZ[78][2](2, 0) = 6 * x2 * y;
1471  gggXYZ[78][2](2, 1) = 2 * x3;
1472  XYZ[77] = x3 * y2 * z; // X3Y2Z
1473  gradXYZ[77][0] = 3 * x2 * y2 * z;
1474  gradXYZ[77][1] = 2 * x3 * y * z;
1475  gradXYZ[77][2] = x3 * y2;
1476  hessXYZ[77](0, 0) = 6 * x * y2 * z;
1477  hessXYZ[77](0, 1) = 6 * x2 * y * z;
1478  hessXYZ[77](0, 2) = 3 * x2 * y2;
1479  hessXYZ[77](1, 0) = 6 * x2 * y * z;
1480  hessXYZ[77](1, 1) = 2 * x3 * z;
1481  hessXYZ[77](1, 2) = 2 * x3 * y;
1482  hessXYZ[77](2, 0) = 3 * x2 * y2;
1483  hessXYZ[77](2, 1) = 2 * x3 * y;
1484  gggXYZ[77][0](0, 0) = 6 * y2 * z;
1485  gggXYZ[77][0](0, 1) = 12 * x * y * z;
1486  gggXYZ[77][0](0, 2) = 6 * x * y2;
1487  gggXYZ[77][0](1, 0) = 12 * x * y * z;
1488  gggXYZ[77][0](1, 1) = 6 * x2 * z;
1489  gggXYZ[77][0](1, 2) = 6 * x2 * y;
1490  gggXYZ[77][0](2, 0) = 6 * x * y2;
1491  gggXYZ[77][0](2, 1) = 6 * x2 * y;
1492  gggXYZ[77][1](0, 0) = 12 * x * y * z;
1493  gggXYZ[77][1](0, 1) = 6 * x2 * z;
1494  gggXYZ[77][1](0, 2) = 6 * x2 * y;
1495  gggXYZ[77][1](1, 0) = 6 * x2 * z;
1496  gggXYZ[77][1](1, 2) = 2 * x3;
1497  gggXYZ[77][1](2, 0) = 6 * x2 * y;
1498  gggXYZ[77][1](2, 1) = 2 * x3;
1499  gggXYZ[77][2](0, 0) = 6 * x * y2;
1500  gggXYZ[77][2](0, 1) = 6 * x2 * y;
1501  gggXYZ[77][2](1, 0) = 6 * x2 * y;
1502  gggXYZ[77][2](1, 1) = 2 * x3;
1503  XYZ[76] = y3 * z3; // Y3Z3
1504  gradXYZ[76][1] = 3 * y2 * z3;
1505  gradXYZ[76][2] = 3 * y3 * z2;
1506  hessXYZ[76](1, 1) = 6 * y * z3;
1507  hessXYZ[76](1, 2) = 9 * y2 * z2;
1508  hessXYZ[76](2, 1) = 9 * y2 * z2;
1509  hessXYZ[76](2, 2) = 6 * y3 * z;
1510  gggXYZ[76][1](1, 1) = 6 * z3;
1511  gggXYZ[76][1](1, 2) = 18 * y * z2;
1512  gggXYZ[76][1](2, 1) = 18 * y * z2;
1513  gggXYZ[76][1](2, 2) = 18 * y2 * z;
1514  gggXYZ[76][2](1, 1) = 18 * y * z2;
1515  gggXYZ[76][2](1, 2) = 18 * y2 * z;
1516  gggXYZ[76][2](2, 1) = 18 * y2 * z;
1517  gggXYZ[76][2](2, 2) = 6 * y3;
1518  XYZ[75] = x3 * z3; // X3Z3
1519  gradXYZ[75][0] = 3 * x2 * z3;
1520  gradXYZ[75][2] = 3 * x3 * z2;
1521  hessXYZ[75](0, 0) = 6 * x * z3;
1522  hessXYZ[75](0, 2) = 9 * x2 * z2;
1523  hessXYZ[75](2, 0) = 9 * x2 * z2;
1524  hessXYZ[75](2, 2) = 6 * x3 * z;
1525  gggXYZ[75][0](0, 0) = 6 * z3;
1526  gggXYZ[75][0](0, 2) = 18 * x * z2;
1527  gggXYZ[75][0](2, 0) = 18 * x * z2;
1528  gggXYZ[75][0](2, 2) = 18 * x2 * z;
1529  gggXYZ[75][2](0, 0) = 18 * x * z2;
1530  gggXYZ[75][2](0, 2) = 18 * x2 * z;
1531  gggXYZ[75][2](2, 0) = 18 * x2 * z;
1532  gggXYZ[75][2](2, 2) = 6 * x3;
1533  XYZ[74] = x3 * y3; // X3Y3
1534  gradXYZ[74][0] = 3 * x2 * y3;
1535  gradXYZ[74][1] = 3 * x3 * y2;
1536  hessXYZ[74](0, 0) = 6 * x * y3;
1537  hessXYZ[74](0, 1) = 9 * x2 * y2;
1538  hessXYZ[74](1, 0) = 9 * x2 * y2;
1539  hessXYZ[74](1, 1) = 6 * x3 * y;
1540  gggXYZ[74][0](0, 0) = 6 * y3;
1541  gggXYZ[74][0](0, 1) = 18 * x * y2;
1542  gggXYZ[74][0](1, 0) = 18 * x * y2;
1543  gggXYZ[74][0](1, 1) = 18 * x2 * y;
1544  gggXYZ[74][1](0, 0) = 18 * x * y2;
1545  gggXYZ[74][1](0, 1) = 18 * x2 * y;
1546  gggXYZ[74][1](1, 0) = 18 * x2 * y;
1547  gggXYZ[74][1](1, 1) = 6 * x3;
1548  XYZ[73] = x * y * z4; // Z4XY
1549  gradXYZ[73][0] = y * z4;
1550  gradXYZ[73][1] = x * z4;
1551  gradXYZ[73][2] = 4 * x * y * z3;
1552  hessXYZ[73](0, 1) = z4;
1553  hessXYZ[73](0, 2) = 4 * y * z3;
1554  hessXYZ[73](1, 0) = z4;
1555  hessXYZ[73](1, 2) = 4 * x * z3;
1556  hessXYZ[73](2, 0) = 4 * y * z3;
1557  hessXYZ[73](2, 1) = 4 * x * z3;
1558  hessXYZ[73](2, 2) = 12 * x * y * z2;
1559  gggXYZ[73][0](1, 2) = 4 * z3;
1560  gggXYZ[73][0](2, 1) = 4 * z3;
1561  gggXYZ[73][0](2, 2) = 12 * y * z2;
1562  gggXYZ[73][1](0, 2) = 4 * z3;
1563  gggXYZ[73][1](2, 0) = 4 * z3;
1564  gggXYZ[73][1](2, 2) = 12 * x * z2;
1565  gggXYZ[73][2](0, 1) = 4 * z3;
1566  gggXYZ[73][2](0, 2) = 12 * y * z2;
1567  gggXYZ[73][2](1, 0) = 4 * z3;
1568  gggXYZ[73][2](1, 2) = 12 * x * z2;
1569  gggXYZ[73][2](2, 0) = 12 * y * z2;
1570  gggXYZ[73][2](2, 1) = 12 * x * z2;
1571  gggXYZ[73][2](2, 2) = 24 * x * y * z;
1572  XYZ[72] = x * y4 * z; // Y4XZ
1573  gradXYZ[72][0] = y4 * z;
1574  gradXYZ[72][1] = 4 * x * y3 * z;
1575  gradXYZ[72][2] = x * y4;
1576  hessXYZ[72](0, 1) = 4 * y3 * z;
1577  hessXYZ[72](0, 2) = y4;
1578  hessXYZ[72](1, 0) = 4 * y3 * z;
1579  hessXYZ[72](1, 1) = 12 * x * y2 * z;
1580  hessXYZ[72](1, 2) = 4 * x * y3;
1581  hessXYZ[72](2, 0) = y4;
1582  hessXYZ[72](2, 1) = 4 * x * y3;
1583  gggXYZ[72][0](1, 1) = 12 * y2 * z;
1584  gggXYZ[72][0](1, 2) = 4 * y3;
1585  gggXYZ[72][0](2, 1) = 4 * y3;
1586  gggXYZ[72][1](0, 1) = 12 * y2 * z;
1587  gggXYZ[72][1](0, 2) = 4 * y3;
1588  gggXYZ[72][1](1, 0) = 12 * y2 * z;
1589  gggXYZ[72][1](1, 1) = 24 * x * y * z;
1590  gggXYZ[72][1](1, 2) = 12 * x * y2;
1591  gggXYZ[72][1](2, 0) = 4 * y3;
1592  gggXYZ[72][1](2, 1) = 12 * x * y2;
1593  gggXYZ[72][2](0, 1) = 4 * y3;
1594  gggXYZ[72][2](1, 0) = 4 * y3;
1595  gggXYZ[72][2](1, 1) = 12 * x * y2;
1596  XYZ[71] = x4 * y * z; // X4YZ
1597  gradXYZ[71][0] = 4 * x3 * y * z;
1598  gradXYZ[71][1] = x4 * z;
1599  gradXYZ[71][2] = x4 * y;
1600  hessXYZ[71](0, 0) = 12 * x2 * y * z;
1601  hessXYZ[71](0, 1) = 4 * x3 * z;
1602  hessXYZ[71](0, 2) = 4 * x3 * y;
1603  hessXYZ[71](1, 0) = 4 * x3 * z;
1604  hessXYZ[71](1, 2) = x4;
1605  hessXYZ[71](2, 0) = 4 * x3 * y;
1606  hessXYZ[71](2, 1) = x4;
1607  gggXYZ[71][0](0, 0) = 24 * x * y * z;
1608  gggXYZ[71][0](0, 1) = 12 * x2 * z;
1609  gggXYZ[71][0](0, 2) = 12 * x2 * y;
1610  gggXYZ[71][0](1, 0) = 12 * x2 * z;
1611  gggXYZ[71][0](1, 2) = 4 * x3;
1612  gggXYZ[71][0](2, 0) = 12 * x2 * y;
1613  gggXYZ[71][0](2, 1) = 4 * x3;
1614  gggXYZ[71][1](0, 0) = 12 * x2 * z;
1615  gggXYZ[71][1](0, 2) = 4 * x3;
1616  gggXYZ[71][1](2, 0) = 4 * x3;
1617  gggXYZ[71][2](0, 0) = 12 * x2 * y;
1618  gggXYZ[71][2](0, 1) = 4 * x3;
1619  gggXYZ[71][2](1, 0) = 4 * x3;
1620  XYZ[70] = y2 * z4; // Z4Y2
1621  gradXYZ[70][1] = 2 * y * z4;
1622  gradXYZ[70][2] = 4 * y2 * z3;
1623  hessXYZ[70](1, 1) = 2 * z4;
1624  hessXYZ[70](1, 2) = 8 * y * z3;
1625  hessXYZ[70](2, 1) = 8 * y * z3;
1626  hessXYZ[70](2, 2) = 12 * y2 * z2;
1627  gggXYZ[70][1](1, 2) = 8 * z3;
1628  gggXYZ[70][1](2, 1) = 8 * z3;
1629  gggXYZ[70][1](2, 2) = 24 * y * z2;
1630  gggXYZ[70][2](1, 1) = 8 * z3;
1631  gggXYZ[70][2](1, 2) = 24 * y * z2;
1632  gggXYZ[70][2](2, 1) = 24 * y * z2;
1633  gggXYZ[70][2](2, 2) = 24 * y2 * z;
1634  XYZ[69] = x2 * z4; // Z4X2
1635  gradXYZ[69][0] = 2 * x * z4;
1636  gradXYZ[69][2] = 4 * x2 * z3;
1637  hessXYZ[69](0, 0) = 2 * z4;
1638  hessXYZ[69](0, 2) = 8 * x * z3;
1639  hessXYZ[69](2, 0) = 8 * x * z3;
1640  hessXYZ[69](2, 2) = 12 * x2 * z2;
1641  gggXYZ[69][0](0, 2) = 8 * z3;
1642  gggXYZ[69][0](2, 0) = 8 * z3;
1643  gggXYZ[69][0](2, 2) = 24 * x * z2;
1644  gggXYZ[69][2](0, 0) = 8 * z3;
1645  gggXYZ[69][2](0, 2) = 24 * x * z2;
1646  gggXYZ[69][2](2, 0) = 24 * x * z2;
1647  gggXYZ[69][2](2, 2) = 24 * x2 * z;
1648  XYZ[68] = y4 * z2; // Y4Z2
1649  gradXYZ[68][1] = 4 * y3 * z2;
1650  gradXYZ[68][2] = 2 * y4 * z;
1651  hessXYZ[68](1, 1) = 12 * y2 * z2;
1652  hessXYZ[68](1, 2) = 8 * y3 * z;
1653  hessXYZ[68](2, 1) = 8 * y3 * z;
1654  hessXYZ[68](2, 2) = 2 * y4;
1655  gggXYZ[68][1](1, 1) = 24 * y * z2;
1656  gggXYZ[68][1](1, 2) = 24 * y2 * z;
1657  gggXYZ[68][1](2, 1) = 24 * y2 * z;
1658  gggXYZ[68][1](2, 2) = 8 * y3;
1659  gggXYZ[68][2](1, 1) = 24 * y2 * z;
1660  gggXYZ[68][2](1, 2) = 8 * y3;
1661  gggXYZ[68][2](2, 1) = 8 * y3;
1662  XYZ[67] = x2 * y4; // Y4X2
1663  gradXYZ[67][0] = 2 * x * y4;
1664  gradXYZ[67][1] = 4 * x2 * y3;
1665  hessXYZ[67](0, 0) = 2 * y4;
1666  hessXYZ[67](0, 1) = 8 * x * y3;
1667  hessXYZ[67](1, 0) = 8 * x * y3;
1668  hessXYZ[67](1, 1) = 12 * x2 * y2;
1669  gggXYZ[67][0](0, 1) = 8 * y3;
1670  gggXYZ[67][0](1, 0) = 8 * y3;
1671  gggXYZ[67][0](1, 1) = 24 * x * y2;
1672  gggXYZ[67][1](0, 0) = 8 * y3;
1673  gggXYZ[67][1](0, 1) = 24 * x * y2;
1674  gggXYZ[67][1](1, 0) = 24 * x * y2;
1675  gggXYZ[67][1](1, 1) = 24 * x2 * y;
1676  XYZ[66] = x4 * z2; // X4Z2
1677  gradXYZ[66][0] = 4 * x3 * z2;
1678  gradXYZ[66][2] = 2 * x4 * z;
1679  hessXYZ[66](0, 0) = 12 * x2 * z2;
1680  hessXYZ[66](0, 2) = 8 * x3 * z;
1681  hessXYZ[66](2, 0) = 8 * x3 * z;
1682  hessXYZ[66](2, 2) = 2 * x4;
1683  gggXYZ[66][0](0, 0) = 24 * x * z2;
1684  gggXYZ[66][0](0, 2) = 24 * x2 * z;
1685  gggXYZ[66][0](2, 0) = 24 * x2 * z;
1686  gggXYZ[66][0](2, 2) = 8 * x3;
1687  gggXYZ[66][2](0, 0) = 24 * x2 * z;
1688  gggXYZ[66][2](0, 2) = 8 * x3;
1689  gggXYZ[66][2](2, 0) = 8 * x3;
1690  XYZ[65] = x4 * y2; // X4Y2
1691  gradXYZ[65][0] = 4 * x3 * y2;
1692  gradXYZ[65][1] = 2 * x4 * y;
1693  hessXYZ[65](0, 0) = 12 * x2 * y2;
1694  hessXYZ[65](0, 1) = 8 * x3 * y;
1695  hessXYZ[65](1, 0) = 8 * x3 * y;
1696  hessXYZ[65](1, 1) = 2 * x4;
1697  gggXYZ[65][0](0, 0) = 24 * x * y2;
1698  gggXYZ[65][0](0, 1) = 24 * x2 * y;
1699  gggXYZ[65][0](1, 0) = 24 * x2 * y;
1700  gggXYZ[65][0](1, 1) = 8 * x3;
1701  gggXYZ[65][1](0, 0) = 24 * x2 * y;
1702  gggXYZ[65][1](0, 1) = 8 * x3;
1703  gggXYZ[65][1](1, 0) = 8 * x3;
1704  XYZ[64] = y * z * z4; // Z5Y
1705  gradXYZ[64][1] = z * z4;
1706  gradXYZ[64][2] = 5 * y * z4;
1707  hessXYZ[64](1, 2) = 5 * z4;
1708  hessXYZ[64](2, 1) = 5 * z4;
1709  hessXYZ[64](2, 2) = 20 * y * z3;
1710  gggXYZ[64][1](2, 2) = 20 * z3;
1711  gggXYZ[64][2](1, 2) = 20 * z3;
1712  gggXYZ[64][2](2, 1) = 20 * z3;
1713  gggXYZ[64][2](2, 2) = 60 * y * z2;
1714  XYZ[63] = x * z * z4; // Z5X
1715  gradXYZ[63][0] = z * z4;
1716  gradXYZ[63][2] = 5 * x * z4;
1717  hessXYZ[63](0, 2) = 5 * z4;
1718  hessXYZ[63](2, 0) = 5 * z4;
1719  hessXYZ[63](2, 2) = 20 * x * z3;
1720  gggXYZ[63][0](2, 2) = 20 * z3;
1721  gggXYZ[63][2](0, 2) = 20 * z3;
1722  gggXYZ[63][2](2, 0) = 20 * z3;
1723  gggXYZ[63][2](2, 2) = 60 * x * z2;
1724  XYZ[62] = y * y4 * z; // Y5Z
1725  gradXYZ[62][1] = 5 * y4 * z;
1726  gradXYZ[62][2] = y * y4;
1727  hessXYZ[62](1, 1) = 20 * y3 * z;
1728  hessXYZ[62](1, 2) = 5 * y4;
1729  hessXYZ[62](2, 1) = 5 * y4;
1730  gggXYZ[62][1](1, 1) = 60 * y2 * z;
1731  gggXYZ[62][1](1, 2) = 20 * y3;
1732  gggXYZ[62][1](2, 1) = 20 * y3;
1733  gggXYZ[62][2](1, 1) = 20 * y3;
1734  XYZ[61] = x * y * y4; // Y5X
1735  gradXYZ[61][0] = y * y4;
1736  gradXYZ[61][1] = 5 * x * y4;
1737  hessXYZ[61](0, 1) = 5 * y4;
1738  hessXYZ[61](1, 0) = 5 * y4;
1739  hessXYZ[61](1, 1) = 20 * x * y3;
1740  gggXYZ[61][0](1, 1) = 20 * y3;
1741  gggXYZ[61][1](0, 1) = 20 * y3;
1742  gggXYZ[61][1](1, 0) = 20 * y3;
1743  gggXYZ[61][1](1, 1) = 60 * x * y2;
1744  XYZ[60] = x * x4 * z; // X5Z
1745  gradXYZ[60][0] = 5 * x4 * z;
1746  gradXYZ[60][2] = x * x4;
1747  hessXYZ[60](0, 0) = 20 * x3 * z;
1748  hessXYZ[60](0, 2) = 5 * x4;
1749  hessXYZ[60](2, 0) = 5 * x4;
1750  gggXYZ[60][0](0, 0) = 60 * x2 * z;
1751  gggXYZ[60][0](0, 2) = 20 * x3;
1752  gggXYZ[60][0](2, 0) = 20 * x3;
1753  gggXYZ[60][2](0, 0) = 20 * x3;
1754  XYZ[59] = x * x4 * y; // X5Y
1755  gradXYZ[59][0] = 5 * x4 * y;
1756  gradXYZ[59][1] = x * x4;
1757  hessXYZ[59](0, 0) = 20 * x3 * y;
1758  hessXYZ[59](0, 1) = 5 * x4;
1759  hessXYZ[59](1, 0) = 5 * x4;
1760  gggXYZ[59][0](0, 0) = 60 * x2 * y;
1761  gggXYZ[59][0](0, 1) = 20 * x3;
1762  gggXYZ[59][0](1, 0) = 20 * x3;
1763  gggXYZ[59][1](0, 0) = 20 * x3;
1764  XYZ[58] = z * z5; // Z6
1765  gradXYZ[58][2] = 6 * z * z4;
1766  hessXYZ[58](2, 2) = 30 * z4;
1767  gggXYZ[58][2](2, 2) = 120 * z3;
1768  XYZ[57] = y * y5; // Y6
1769  gradXYZ[57][1] = 6 * y * y4;
1770  hessXYZ[57](1, 1) = 30 * y4;
1771  gggXYZ[57][1](1, 1) = 120 * y3;
1772  XYZ[56] = x * x5; // X6
1773  gradXYZ[56][0] = 6 * x * x4;
1774  hessXYZ[56](0, 0) = 30 * x4;
1775  gggXYZ[56][0](0, 0) = 120 * x3;
1776  case 5:
1777  XYZ[55] = x * y2 * z2; // YYZZX
1778  gradXYZ[55][0] = y2 * z2;
1779  gradXYZ[55][1] = 2 * x * y * z2;
1780  gradXYZ[55][2] = 2 * x * y2 * z;
1781  hessXYZ[55](0, 1) = 2 * y * z2;
1782  hessXYZ[55](0, 2) = 2 * y2 * z;
1783  hessXYZ[55](1, 0) = 2 * y * z2;
1784  hessXYZ[55](1, 1) = 2 * x * z2;
1785  hessXYZ[55](1, 2) = 4 * x * y * z;
1786  hessXYZ[55](2, 0) = 2 * y2 * z;
1787  hessXYZ[55](2, 1) = 4 * x * y * z;
1788  hessXYZ[55](2, 2) = 2 * x * y2;
1789  gggXYZ[55][0](1, 1) = 2 * z2;
1790  gggXYZ[55][0](1, 2) = 4 * y * z;
1791  gggXYZ[55][0](2, 1) = 4 * y * z;
1792  gggXYZ[55][0](2, 2) = 2 * y2;
1793  gggXYZ[55][1](0, 1) = 2 * z2;
1794  gggXYZ[55][1](0, 2) = 4 * y * z;
1795  gggXYZ[55][1](1, 0) = 2 * z2;
1796  gggXYZ[55][1](1, 2) = 4 * x * z;
1797  gggXYZ[55][1](2, 0) = 4 * y * z;
1798  gggXYZ[55][1](2, 1) = 4 * x * z;
1799  gggXYZ[55][1](2, 2) = 4 * x * y;
1800  gggXYZ[55][2](0, 1) = 4 * y * z;
1801  gggXYZ[55][2](0, 2) = 2 * y2;
1802  gggXYZ[55][2](1, 0) = 4 * y * z;
1803  gggXYZ[55][2](1, 1) = 4 * x * z;
1804  gggXYZ[55][2](1, 2) = 4 * x * y;
1805  gggXYZ[55][2](2, 0) = 2 * y2;
1806  gggXYZ[55][2](2, 1) = 4 * x * y;
1807  XYZ[54] = x2 * y * z2; // XXZZY
1808  gradXYZ[54][0] = 2 * x * y * z2;
1809  gradXYZ[54][1] = x2 * z2;
1810  gradXYZ[54][2] = 2 * x2 * y * z;
1811  hessXYZ[54](0, 0) = 2 * y * z2;
1812  hessXYZ[54](0, 1) = 2 * x * z2;
1813  hessXYZ[54](0, 2) = 4 * x * y * z;
1814  hessXYZ[54](1, 0) = 2 * x * z2;
1815  hessXYZ[54](1, 2) = 2 * x2 * z;
1816  hessXYZ[54](2, 0) = 4 * x * y * z;
1817  hessXYZ[54](2, 1) = 2 * x2 * z;
1818  hessXYZ[54](2, 2) = 2 * x2 * y;
1819  gggXYZ[54][0](0, 1) = 2 * z2;
1820  gggXYZ[54][0](0, 2) = 4 * y * z;
1821  gggXYZ[54][0](1, 0) = 2 * z2;
1822  gggXYZ[54][0](1, 2) = 4 * x * z;
1823  gggXYZ[54][0](2, 0) = 4 * y * z;
1824  gggXYZ[54][0](2, 1) = 4 * x * z;
1825  gggXYZ[54][0](2, 2) = 4 * x * y;
1826  gggXYZ[54][1](0, 0) = 2 * z2;
1827  gggXYZ[54][1](0, 2) = 4 * x * z;
1828  gggXYZ[54][1](2, 0) = 4 * x * z;
1829  gggXYZ[54][1](2, 2) = 2 * x2;
1830  gggXYZ[54][2](0, 0) = 4 * y * z;
1831  gggXYZ[54][2](0, 1) = 4 * x * z;
1832  gggXYZ[54][2](0, 2) = 4 * x * y;
1833  gggXYZ[54][2](1, 0) = 4 * x * z;
1834  gggXYZ[54][2](1, 2) = 2 * x2;
1835  gggXYZ[54][2](2, 0) = 4 * x * y;
1836  gggXYZ[54][2](2, 1) = 2 * x2;
1837  XYZ[53] = x2 * y2 * z; // XXYYZ
1838  gradXYZ[53][0] = 2 * x * y2 * z;
1839  gradXYZ[53][1] = 2 * x2 * y * z;
1840  gradXYZ[53][2] = x2 * y2;
1841  hessXYZ[53](0, 0) = 2 * y2 * z;
1842  hessXYZ[53](0, 1) = 4 * x * y * z;
1843  hessXYZ[53](0, 2) = 2 * x * y2;
1844  hessXYZ[53](1, 0) = 4 * x * y * z;
1845  hessXYZ[53](1, 1) = 2 * x2 * z;
1846  hessXYZ[53](1, 2) = 2 * x2 * y;
1847  hessXYZ[53](2, 0) = 2 * x * y2;
1848  hessXYZ[53](2, 1) = 2 * x2 * y;
1849  gggXYZ[53][0](0, 1) = 4 * y * z;
1850  gggXYZ[53][0](0, 2) = 2 * y2;
1851  gggXYZ[53][0](1, 0) = 4 * y * z;
1852  gggXYZ[53][0](1, 1) = 4 * x * z;
1853  gggXYZ[53][0](1, 2) = 4 * x * y;
1854  gggXYZ[53][0](2, 0) = 2 * y2;
1855  gggXYZ[53][0](2, 1) = 4 * x * y;
1856  gggXYZ[53][1](0, 0) = 4 * y * z;
1857  gggXYZ[53][1](0, 1) = 4 * x * z;
1858  gggXYZ[53][1](0, 2) = 4 * x * y;
1859  gggXYZ[53][1](1, 0) = 4 * x * z;
1860  gggXYZ[53][1](1, 2) = 2 * x2;
1861  gggXYZ[53][1](2, 0) = 4 * x * y;
1862  gggXYZ[53][1](2, 1) = 2 * x2;
1863  gggXYZ[53][2](0, 0) = 2 * y2;
1864  gggXYZ[53][2](0, 1) = 4 * x * y;
1865  gggXYZ[53][2](1, 0) = 4 * x * y;
1866  gggXYZ[53][2](1, 1) = 2 * x2;
1867  XYZ[52] = x * y * z3; // ZZZXY
1868  gradXYZ[52][0] = y * z3;
1869  gradXYZ[52][1] = x * z3;
1870  gradXYZ[52][2] = 3 * x * y * z2;
1871  hessXYZ[52](0, 1) = z3;
1872  hessXYZ[52](0, 2) = 3 * y * z2;
1873  hessXYZ[52](1, 0) = z3;
1874  hessXYZ[52](1, 2) = 3 * x * z2;
1875  hessXYZ[52](2, 0) = 3 * y * z2;
1876  hessXYZ[52](2, 1) = 3 * x * z2;
1877  hessXYZ[52](2, 2) = 6 * x * y * z;
1878  gggXYZ[52][0](1, 2) = 3 * z2;
1879  gggXYZ[52][0](2, 1) = 3 * z2;
1880  gggXYZ[52][0](2, 2) = 6 * y * z;
1881  gggXYZ[52][1](0, 2) = 3 * z2;
1882  gggXYZ[52][1](2, 0) = 3 * z2;
1883  gggXYZ[52][1](2, 2) = 6 * x * z;
1884  gggXYZ[52][2](0, 1) = 3 * z2;
1885  gggXYZ[52][2](0, 2) = 6 * y * z;
1886  gggXYZ[52][2](1, 0) = 3 * z2;
1887  gggXYZ[52][2](1, 2) = 6 * x * z;
1888  gggXYZ[52][2](2, 0) = 6 * y * z;
1889  gggXYZ[52][2](2, 1) = 6 * x * z;
1890  gggXYZ[52][2](2, 2) = 6 * x * y;
1891  XYZ[51] = x * y3 * z; // YYYXZ
1892  gradXYZ[51][0] = y3 * z;
1893  gradXYZ[51][1] = 3 * x * y2 * z;
1894  gradXYZ[51][2] = x * y3;
1895  hessXYZ[51](0, 1) = 3 * y2 * z;
1896  hessXYZ[51](0, 2) = y3;
1897  hessXYZ[51](1, 0) = 3 * y2 * z;
1898  hessXYZ[51](1, 1) = 6 * x * y * z;
1899  hessXYZ[51](1, 2) = 3 * x * y2;
1900  hessXYZ[51](2, 0) = y3;
1901  hessXYZ[51](2, 1) = 3 * x * y2;
1902  gggXYZ[51][0](1, 1) = 6 * y * z;
1903  gggXYZ[51][0](1, 2) = 3 * y2;
1904  gggXYZ[51][0](2, 1) = 3 * y2;
1905  gggXYZ[51][1](0, 1) = 6 * y * z;
1906  gggXYZ[51][1](0, 2) = 3 * y2;
1907  gggXYZ[51][1](1, 0) = 6 * y * z;
1908  gggXYZ[51][1](1, 1) = 6 * x * z;
1909  gggXYZ[51][1](1, 2) = 6 * x * y;
1910  gggXYZ[51][1](2, 0) = 3 * y2;
1911  gggXYZ[51][1](2, 1) = 6 * x * y;
1912  gggXYZ[51][2](0, 1) = 3 * y2;
1913  gggXYZ[51][2](1, 0) = 3 * y2;
1914  gggXYZ[51][2](1, 1) = 6 * x * y;
1915  XYZ[50] = x3 * y * z; // XXXYZ
1916  gradXYZ[50][0] = 3 * x2 * y * z;
1917  gradXYZ[50][1] = x3 * z;
1918  gradXYZ[50][2] = x3 * y;
1919  hessXYZ[50](0, 0) = 6 * x * y * z;
1920  hessXYZ[50](0, 1) = 3 * x2 * z;
1921  hessXYZ[50](0, 2) = 3 * x2 * y;
1922  hessXYZ[50](1, 0) = 3 * x2 * z;
1923  hessXYZ[50](1, 2) = x3;
1924  hessXYZ[50](2, 0) = 3 * x2 * y;
1925  hessXYZ[50](2, 1) = x3;
1926  gggXYZ[50][0](0, 0) = 6 * y * z;
1927  gggXYZ[50][0](0, 1) = 6 * x * z;
1928  gggXYZ[50][0](0, 2) = 6 * x * y;
1929  gggXYZ[50][0](1, 0) = 6 * x * z;
1930  gggXYZ[50][0](1, 2) = 3 * x2;
1931  gggXYZ[50][0](2, 0) = 6 * x * y;
1932  gggXYZ[50][0](2, 1) = 3 * x2;
1933  gggXYZ[50][1](0, 0) = 6 * x * z;
1934  gggXYZ[50][1](0, 2) = 3 * x2;
1935  gggXYZ[50][1](2, 0) = 3 * x2;
1936  gggXYZ[50][2](0, 0) = 6 * x * y;
1937  gggXYZ[50][2](0, 1) = 3 * x2;
1938  gggXYZ[50][2](1, 0) = 3 * x2;
1939  XYZ[49] = y2 * z3; // ZZZYY
1940  gradXYZ[49][1] = 2 * y * z3;
1941  gradXYZ[49][2] = 3 * y2 * z2;
1942  hessXYZ[49](1, 1) = 2 * z3;
1943  hessXYZ[49](1, 2) = 6 * y * z2;
1944  hessXYZ[49](2, 1) = 6 * y * z2;
1945  hessXYZ[49](2, 2) = 6 * y2 * z;
1946  gggXYZ[49][1](1, 2) = 6 * z2;
1947  gggXYZ[49][1](2, 1) = 6 * z2;
1948  gggXYZ[49][1](2, 2) = 12 * y * z;
1949  gggXYZ[49][2](1, 1) = 6 * z2;
1950  gggXYZ[49][2](1, 2) = 12 * y * z;
1951  gggXYZ[49][2](2, 1) = 12 * y * z;
1952  gggXYZ[49][2](2, 2) = 6 * y2;
1953  XYZ[48] = x2 * z3; // ZZZXX
1954  gradXYZ[48][0] = 2 * x * z3;
1955  gradXYZ[48][2] = 3 * x2 * z2;
1956  hessXYZ[48](0, 0) = 2 * z3;
1957  hessXYZ[48](0, 2) = 6 * x * z2;
1958  hessXYZ[48](2, 0) = 6 * x * z2;
1959  hessXYZ[48](2, 2) = 6 * x2 * z;
1960  gggXYZ[48][0](0, 2) = 6 * z2;
1961  gggXYZ[48][0](2, 0) = 6 * z2;
1962  gggXYZ[48][0](2, 2) = 12 * x * z;
1963  gggXYZ[48][2](0, 0) = 6 * z2;
1964  gggXYZ[48][2](0, 2) = 12 * x * z;
1965  gggXYZ[48][2](2, 0) = 12 * x * z;
1966  gggXYZ[48][2](2, 2) = 6 * x2;
1967  XYZ[47] = y3 * z2; // YYYZZ
1968  gradXYZ[47][1] = 3 * y2 * z2;
1969  gradXYZ[47][2] = 2 * y3 * z;
1970  hessXYZ[47](1, 1) = 6 * y * z2;
1971  hessXYZ[47](1, 2) = 6 * y2 * z;
1972  hessXYZ[47](2, 1) = 6 * y2 * z;
1973  hessXYZ[47](2, 2) = 2 * y3;
1974  gggXYZ[47][1](1, 1) = 6 * z2;
1975  gggXYZ[47][1](1, 2) = 12 * y * z;
1976  gggXYZ[47][1](2, 1) = 12 * y * z;
1977  gggXYZ[47][1](2, 2) = 6 * y2;
1978  gggXYZ[47][2](1, 1) = 12 * y * z;
1979  gggXYZ[47][2](1, 2) = 6 * y2;
1980  gggXYZ[47][2](2, 1) = 6 * y2;
1981  XYZ[46] = x2 * y3; // YYYXX
1982  gradXYZ[46][0] = 2 * x * y3;
1983  gradXYZ[46][1] = 3 * x2 * y2;
1984  hessXYZ[46](0, 0) = 2 * y3;
1985  hessXYZ[46](0, 1) = 6 * x * y2;
1986  hessXYZ[46](1, 0) = 6 * x * y2;
1987  hessXYZ[46](1, 1) = 6 * x2 * y;
1988  gggXYZ[46][0](0, 1) = 6 * y2;
1989  gggXYZ[46][0](1, 0) = 6 * y2;
1990  gggXYZ[46][0](1, 1) = 12 * x * y;
1991  gggXYZ[46][1](0, 0) = 6 * y2;
1992  gggXYZ[46][1](0, 1) = 12 * x * y;
1993  gggXYZ[46][1](1, 0) = 12 * x * y;
1994  gggXYZ[46][1](1, 1) = 6 * x2;
1995  XYZ[45] = x3 * z2; // XXXZZ
1996  gradXYZ[45][0] = 3 * x2 * z2;
1997  gradXYZ[45][2] = 2 * x3 * z;
1998  hessXYZ[45](0, 0) = 6 * x * z2;
1999  hessXYZ[45](0, 2) = 6 * x2 * z;
2000  hessXYZ[45](2, 0) = 6 * x2 * z;
2001  hessXYZ[45](2, 2) = 2 * x3;
2002  gggXYZ[45][0](0, 0) = 6 * z2;
2003  gggXYZ[45][0](0, 2) = 12 * x * z;
2004  gggXYZ[45][0](2, 0) = 12 * x * z;
2005  gggXYZ[45][0](2, 2) = 6 * x2;
2006  gggXYZ[45][2](0, 0) = 12 * x * z;
2007  gggXYZ[45][2](0, 2) = 6 * x2;
2008  gggXYZ[45][2](2, 0) = 6 * x2;
2009  XYZ[44] = x3 * y2; // XXXYY
2010  gradXYZ[44][0] = 3 * x2 * y2;
2011  gradXYZ[44][1] = 2 * x3 * y;
2012  hessXYZ[44](0, 0) = 6 * x * y2;
2013  hessXYZ[44](0, 1) = 6 * x2 * y;
2014  hessXYZ[44](1, 0) = 6 * x2 * y;
2015  hessXYZ[44](1, 1) = 2 * x3;
2016  gggXYZ[44][0](0, 0) = 6 * y2;
2017  gggXYZ[44][0](0, 1) = 12 * x * y;
2018  gggXYZ[44][0](1, 0) = 12 * x * y;
2019  gggXYZ[44][0](1, 1) = 6 * x2;
2020  gggXYZ[44][1](0, 0) = 12 * x * y;
2021  gggXYZ[44][1](0, 1) = 6 * x2;
2022  gggXYZ[44][1](1, 0) = 6 * x2;
2023  XYZ[43] = y * z4; // ZZZZY
2024  gradXYZ[43][1] = z4;
2025  gradXYZ[43][2] = 4 * y * z3;
2026  hessXYZ[43](1, 2) = 4 * z3;
2027  hessXYZ[43](2, 1) = 4 * z3;
2028  hessXYZ[43](2, 2) = 12 * y * z2;
2029  gggXYZ[43][1](2, 2) = 12 * z2;
2030  gggXYZ[43][2](1, 2) = 12 * z2;
2031  gggXYZ[43][2](2, 1) = 12 * z2;
2032  gggXYZ[43][2](2, 2) = 24 * y * z;
2033  XYZ[42] = x * z4; // ZZZZX
2034  gradXYZ[42][0] = z4;
2035  gradXYZ[42][2] = 4 * x * z3;
2036  hessXYZ[42](0, 2) = 4 * z3;
2037  hessXYZ[42](2, 0) = 4 * z3;
2038  hessXYZ[42](2, 2) = 12 * x * z2;
2039  gggXYZ[42][0](2, 2) = 12 * z2;
2040  gggXYZ[42][2](0, 2) = 12 * z2;
2041  gggXYZ[42][2](2, 0) = 12 * z2;
2042  gggXYZ[42][2](2, 2) = 24 * x * z;
2043  XYZ[41] = y4 * z; // YYYYZ
2044  gradXYZ[41][1] = 4 * y3 * z;
2045  gradXYZ[41][2] = y4;
2046  hessXYZ[41](1, 1) = 12 * y2 * z;
2047  hessXYZ[41](1, 2) = 4 * y3;
2048  hessXYZ[41](2, 1) = 4 * y3;
2049  gggXYZ[41][1](1, 1) = 24 * y * z;
2050  gggXYZ[41][1](1, 2) = 12 * y2;
2051  gggXYZ[41][1](2, 1) = 12 * y2;
2052  gggXYZ[41][2](1, 1) = 12 * y2;
2053  XYZ[40] = x * y4; // YYYYX
2054  gradXYZ[40][0] = y4;
2055  gradXYZ[40][1] = 4 * x * y3;
2056  hessXYZ[40](0, 1) = 4 * y3;
2057  hessXYZ[40](1, 0) = 4 * y3;
2058  hessXYZ[40](1, 1) = 12 * x * y2;
2059  gggXYZ[40][0](1, 1) = 12 * y2;
2060  gggXYZ[40][1](0, 1) = 12 * y2;
2061  gggXYZ[40][1](1, 0) = 12 * y2;
2062  gggXYZ[40][1](1, 1) = 24 * x * y;
2063  XYZ[39] = x4 * z; // XXXXZ
2064  gradXYZ[39][0] = 4 * x3 * z;
2065  gradXYZ[39][2] = x4;
2066  hessXYZ[39](0, 0) = 12 * x2 * z;
2067  hessXYZ[39](0, 2) = 4 * x3;
2068  hessXYZ[39](2, 0) = 4 * x3;
2069  gggXYZ[39][0](0, 0) = 24 * x * z;
2070  gggXYZ[39][0](0, 2) = 12 * x2;
2071  gggXYZ[39][0](2, 0) = 12 * x2;
2072  gggXYZ[39][2](0, 0) = 12 * x2;
2073  XYZ[38] = x4 * y; // XXXXY
2074  gradXYZ[38][0] = 4 * x3 * y;
2075  gradXYZ[38][1] = x4;
2076  hessXYZ[38](0, 0) = 12 * x2 * y;
2077  hessXYZ[38](0, 1) = 4 * x3;
2078  hessXYZ[38](1, 0) = 4 * x3;
2079  gggXYZ[38][0](0, 0) = 24 * x * y;
2080  gggXYZ[38][0](0, 1) = 12 * x2;
2081  gggXYZ[38][0](1, 0) = 12 * x2;
2082  gggXYZ[38][1](0, 0) = 12 * x2;
2083  XYZ[37] = z * z4; // ZZZZZ
2084  gradXYZ[37][2] = 5 * z4;
2085  hessXYZ[37](2, 2) = 20 * z3;
2086  gggXYZ[37][2](2, 2) = 60 * z2;
2087  XYZ[36] = y * y4; // YYYYY
2088  gradXYZ[36][1] = 5 * y4;
2089  hessXYZ[36](1, 1) = 20 * y3;
2090  gggXYZ[36][1](1, 1) = 60 * y2;
2091  XYZ[35] = x * x4; // XXXXX
2092  gradXYZ[35][0] = 5 * x4;
2093  hessXYZ[35](0, 0) = 20 * x3;
2094  gggXYZ[35][0](0, 0) = 60 * x2;
2095  case 4:
2096  XYZ[34] = x * y * z2; // ZZXY
2097  gradXYZ[34][0] = y * z2;
2098  gradXYZ[34][1] = x * z2;
2099  gradXYZ[34][2] = 2 * x * y * z;
2100  hessXYZ[34](0, 1) = z2;
2101  hessXYZ[34](0, 2) = 2 * y * z;
2102  hessXYZ[34](1, 0) = z2;
2103  hessXYZ[34](1, 2) = 2 * x * z;
2104  hessXYZ[34](2, 0) = 2 * y * z;
2105  hessXYZ[34](2, 1) = 2 * x * z;
2106  hessXYZ[34](2, 2) = 2 * x * y;
2107  gggXYZ[34][0](1, 2) = 2 * z;
2108  gggXYZ[34][0](2, 1) = 2 * z;
2109  gggXYZ[34][0](2, 2) = 2 * y;
2110  gggXYZ[34][1](0, 2) = 2 * z;
2111  gggXYZ[34][1](2, 0) = 2 * z;
2112  gggXYZ[34][1](2, 2) = 2 * x;
2113  gggXYZ[34][2](0, 1) = 2 * z;
2114  gggXYZ[34][2](0, 2) = 2 * y;
2115  gggXYZ[34][2](1, 0) = 2 * z;
2116  gggXYZ[34][2](1, 2) = 2 * x;
2117  gggXYZ[34][2](2, 0) = 2 * y;
2118  gggXYZ[34][2](2, 1) = 2 * x;
2119  XYZ[33] = x * y2 * z; // YYXZ
2120  gradXYZ[33][0] = y2 * z;
2121  gradXYZ[33][1] = 2 * x * y * z;
2122  gradXYZ[33][2] = x * y2;
2123  hessXYZ[33](0, 1) = 2 * y * z;
2124  hessXYZ[33](0, 2) = y2;
2125  hessXYZ[33](1, 0) = 2 * y * z;
2126  hessXYZ[33](1, 1) = 2 * x * z;
2127  hessXYZ[33](1, 2) = 2 * x * y;
2128  hessXYZ[33](2, 0) = y2;
2129  hessXYZ[33](2, 1) = 2 * x * y;
2130  gggXYZ[33][0](1, 1) = 2 * z;
2131  gggXYZ[33][0](1, 2) = 2 * y;
2132  gggXYZ[33][0](2, 1) = 2 * y;
2133  gggXYZ[33][1](0, 1) = 2 * z;
2134  gggXYZ[33][1](0, 2) = 2 * y;
2135  gggXYZ[33][1](1, 0) = 2 * z;
2136  gggXYZ[33][1](1, 2) = 2 * x;
2137  gggXYZ[33][1](2, 0) = 2 * y;
2138  gggXYZ[33][1](2, 1) = 2 * x;
2139  gggXYZ[33][2](0, 1) = 2 * y;
2140  gggXYZ[33][2](1, 0) = 2 * y;
2141  gggXYZ[33][2](1, 1) = 2 * x;
2142  XYZ[32] = x2 * y * z; // XXYZ
2143  gradXYZ[32][0] = 2 * x * y * z;
2144  gradXYZ[32][1] = x2 * z;
2145  gradXYZ[32][2] = x2 * y;
2146  hessXYZ[32](0, 0) = 2 * y * z;
2147  hessXYZ[32](0, 1) = 2 * x * z;
2148  hessXYZ[32](0, 2) = 2 * x * y;
2149  hessXYZ[32](1, 0) = 2 * x * z;
2150  hessXYZ[32](1, 2) = x2;
2151  hessXYZ[32](2, 0) = 2 * x * y;
2152  hessXYZ[32](2, 1) = x2;
2153  gggXYZ[32][0](0, 1) = 2 * z;
2154  gggXYZ[32][0](0, 2) = 2 * y;
2155  gggXYZ[32][0](1, 0) = 2 * z;
2156  gggXYZ[32][0](1, 2) = 2 * x;
2157  gggXYZ[32][0](2, 0) = 2 * y;
2158  gggXYZ[32][0](2, 1) = 2 * x;
2159  gggXYZ[32][1](0, 0) = 2 * z;
2160  gggXYZ[32][1](0, 2) = 2 * x;
2161  gggXYZ[32][1](2, 0) = 2 * x;
2162  gggXYZ[32][2](0, 0) = 2 * y;
2163  gggXYZ[32][2](0, 1) = 2 * x;
2164  gggXYZ[32][2](1, 0) = 2 * x;
2165  XYZ[31] = y2 * z2; // YYZZ
2166  gradXYZ[31][1] = 2 * y * z2;
2167  gradXYZ[31][2] = 2 * y2 * z;
2168  hessXYZ[31](1, 1) = 2 * z2;
2169  hessXYZ[31](1, 2) = 4 * y * z;
2170  hessXYZ[31](2, 1) = 4 * y * z;
2171  hessXYZ[31](2, 2) = 2 * y2;
2172  gggXYZ[31][1](1, 2) = 4 * z;
2173  gggXYZ[31][1](2, 1) = 4 * z;
2174  gggXYZ[31][1](2, 2) = 4 * y;
2175  gggXYZ[31][2](1, 1) = 4 * z;
2176  gggXYZ[31][2](1, 2) = 4 * y;
2177  gggXYZ[31][2](2, 1) = 4 * y;
2178  XYZ[30] = x2 * z2; // XXZZ
2179  gradXYZ[30][0] = 2 * x * z2;
2180  gradXYZ[30][2] = 2 * x2 * z;
2181  hessXYZ[30](0, 0) = 2 * z2;
2182  hessXYZ[30](0, 2) = 4 * x * z;
2183  hessXYZ[30](2, 0) = 4 * x * z;
2184  hessXYZ[30](2, 2) = 2 * x2;
2185  gggXYZ[30][0](0, 2) = 4 * z;
2186  gggXYZ[30][0](2, 0) = 4 * z;
2187  gggXYZ[30][0](2, 2) = 4 * x;
2188  gggXYZ[30][2](0, 0) = 4 * z;
2189  gggXYZ[30][2](0, 2) = 4 * x;
2190  gggXYZ[30][2](2, 0) = 4 * x;
2191  XYZ[29] = x2 * y2; // XXYY
2192  gradXYZ[29][0] = 2 * x * y2;
2193  gradXYZ[29][1] = 2 * x2 * y;
2194  hessXYZ[29](0, 0) = 2 * y2;
2195  hessXYZ[29](0, 1) = 4 * x * y;
2196  hessXYZ[29](1, 0) = 4 * x * y;
2197  hessXYZ[29](1, 1) = 2 * x2;
2198  gggXYZ[29][0](0, 1) = 4 * y;
2199  gggXYZ[29][0](1, 0) = 4 * y;
2200  gggXYZ[29][0](1, 1) = 4 * x;
2201  gggXYZ[29][1](0, 0) = 4 * y;
2202  gggXYZ[29][1](0, 1) = 4 * x;
2203  gggXYZ[29][1](1, 0) = 4 * x;
2204  XYZ[28] = y * z3; // ZZZY
2205  gradXYZ[28][1] = z3;
2206  gradXYZ[28][2] = 3 * y * z2;
2207  hessXYZ[28](1, 2) = 3 * z2;
2208  hessXYZ[28](2, 1) = 3 * z2;
2209  hessXYZ[28](2, 2) = 6 * y * z;
2210  gggXYZ[28][1](2, 2) = 6 * z;
2211  gggXYZ[28][2](1, 2) = 6 * z;
2212  gggXYZ[28][2](2, 1) = 6 * z;
2213  gggXYZ[28][2](2, 2) = 6 * y;
2214  XYZ[27] = x * z3; // ZZZX
2215  gradXYZ[27][0] = z3;
2216  gradXYZ[27][2] = 3 * x * z2;
2217  hessXYZ[27](0, 2) = 3 * z2;
2218  hessXYZ[27](2, 0) = 3 * z2;
2219  hessXYZ[27](2, 2) = 6 * x * z;
2220  gggXYZ[27][0](2, 2) = 6 * z;
2221  gggXYZ[27][2](0, 2) = 6 * z;
2222  gggXYZ[27][2](2, 0) = 6 * z;
2223  gggXYZ[27][2](2, 2) = 6 * x;
2224  XYZ[26] = y3 * z; // YYYZ
2225  gradXYZ[26][1] = 3 * y2 * z;
2226  gradXYZ[26][2] = y3;
2227  hessXYZ[26](1, 1) = 6 * y * z;
2228  hessXYZ[26](1, 2) = 3 * y2;
2229  hessXYZ[26](2, 1) = 3 * y2;
2230  gggXYZ[26][1](1, 1) = 6 * z;
2231  gggXYZ[26][1](1, 2) = 6 * y;
2232  gggXYZ[26][1](2, 1) = 6 * y;
2233  gggXYZ[26][2](1, 1) = 6 * y;
2234  XYZ[25] = x * y3; // YYYX
2235  gradXYZ[25][0] = y3;
2236  gradXYZ[25][1] = 3 * x * y2;
2237  hessXYZ[25](0, 1) = 3 * y2;
2238  hessXYZ[25](1, 0) = 3 * y2;
2239  hessXYZ[25](1, 1) = 6 * x * y;
2240  gggXYZ[25][0](1, 1) = 6 * y;
2241  gggXYZ[25][1](0, 1) = 6 * y;
2242  gggXYZ[25][1](1, 0) = 6 * y;
2243  gggXYZ[25][1](1, 1) = 6 * x;
2244  XYZ[24] = x3 * z; // XXXZ
2245  gradXYZ[24][0] = 3 * x2 * z;
2246  gradXYZ[24][2] = x3;
2247  hessXYZ[24](0, 0) = 6 * x * z;
2248  hessXYZ[24](0, 2) = 3 * x2;
2249  hessXYZ[24](2, 0) = 3 * x2;
2250  gggXYZ[24][0](0, 0) = 6 * z;
2251  gggXYZ[24][0](0, 2) = 6 * x;
2252  gggXYZ[24][0](2, 0) = 6 * x;
2253  gggXYZ[24][2](0, 0) = 6 * x;
2254  XYZ[23] = x3 * y; // XXXY
2255  gradXYZ[23][0] = 3 * x2 * y;
2256  gradXYZ[23][1] = x3;
2257  hessXYZ[23](0, 0) = 6 * x * y;
2258  hessXYZ[23](0, 1) = 3 * x2;
2259  hessXYZ[23](1, 0) = 3 * x2;
2260  gggXYZ[23][0](0, 0) = 6 * y;
2261  gggXYZ[23][0](0, 1) = 6 * x;
2262  gggXYZ[23][0](1, 0) = 6 * x;
2263  gggXYZ[23][1](0, 0) = 6 * x;
2264  XYZ[22] = z4; // ZZZZ
2265  gradXYZ[22][2] = 4 * z3;
2266  hessXYZ[22](2, 2) = 12 * z2;
2267  gggXYZ[22][2](2, 2) = 24 * z;
2268  XYZ[21] = y4; // YYYY
2269  gradXYZ[21][1] = 4 * y3;
2270  hessXYZ[21](1, 1) = 12 * y2;
2271  gggXYZ[21][1](1, 1) = 24 * y;
2272  XYZ[20] = x4; // XXXX
2273  gradXYZ[20][0] = 4 * x3;
2274  hessXYZ[20](0, 0) = 12 * x2;
2275  gggXYZ[20][0](0, 0) = 24 * x;
2276  case 3:
2277  XYZ[19] = x * y * z; // XYZ
2278  gradXYZ[19][0] = y * z;
2279  gradXYZ[19][1] = x * z;
2280  gradXYZ[19][2] = x * y;
2281  hessXYZ[19](0, 1) = z;
2282  hessXYZ[19](0, 2) = y;
2283  hessXYZ[19](1, 0) = z;
2284  hessXYZ[19](1, 2) = x;
2285  hessXYZ[19](2, 0) = y;
2286  hessXYZ[19](2, 1) = x;
2287  gggXYZ[19][0](1, 2) = 1;
2288  gggXYZ[19][0](2, 1) = 1;
2289  gggXYZ[19][1](0, 2) = 1;
2290  gggXYZ[19][1](2, 0) = 1;
2291  gggXYZ[19][2](0, 1) = 1;
2292  gggXYZ[19][2](1, 0) = 1;
2293  XYZ[18] = y * z2; // ZZY
2294  gradXYZ[18][1] = z2;
2295  gradXYZ[18][2] = 2 * y * z;
2296  hessXYZ[18](1, 2) = 2 * z;
2297  hessXYZ[18](2, 1) = 2 * z;
2298  hessXYZ[18](2, 2) = 2 * y;
2299  gggXYZ[18][1](2, 2) = 2;
2300  gggXYZ[18][2](1, 2) = 2;
2301  gggXYZ[18][2](2, 1) = 2;
2302  XYZ[17] = x * z2; // ZZX
2303  gradXYZ[17][0] = z2;
2304  gradXYZ[17][2] = 2 * x * z;
2305  hessXYZ[17](0, 2) = 2 * z;
2306  hessXYZ[17](2, 0) = 2 * z;
2307  hessXYZ[17](2, 2) = 2 * x;
2308  gggXYZ[17][0](2, 2) = 2;
2309  gggXYZ[17][2](0, 2) = 2;
2310  gggXYZ[17][2](2, 0) = 2;
2311  XYZ[16] = y2 * z; // YYZ
2312  gradXYZ[16][1] = 2 * y * z;
2313  gradXYZ[16][2] = y2;
2314  hessXYZ[16](1, 1) = 2 * z;
2315  hessXYZ[16](1, 2) = 2 * y;
2316  hessXYZ[16](2, 1) = 2 * y;
2317  gggXYZ[16][1](1, 2) = 2;
2318  gggXYZ[16][1](2, 1) = 2;
2319  gggXYZ[16][2](1, 1) = 2;
2320  XYZ[15] = x * y2; // YYX
2321  gradXYZ[15][0] = y2;
2322  gradXYZ[15][1] = 2 * x * y;
2323  hessXYZ[15](0, 1) = 2 * y;
2324  hessXYZ[15](1, 0) = 2 * y;
2325  hessXYZ[15](1, 1) = 2 * x;
2326  gggXYZ[15][0](1, 1) = 2;
2327  gggXYZ[15][1](0, 1) = 2;
2328  gggXYZ[15][1](1, 0) = 2;
2329  XYZ[14] = x2 * z; // XXZ
2330  gradXYZ[14][0] = 2 * x * z;
2331  gradXYZ[14][2] = x2;
2332  hessXYZ[14](0, 0) = 2 * z;
2333  hessXYZ[14](0, 2) = 2 * x;
2334  hessXYZ[14](2, 0) = 2 * x;
2335  gggXYZ[14][0](0, 2) = 2;
2336  gggXYZ[14][0](2, 0) = 2;
2337  gggXYZ[14][2](0, 0) = 2;
2338  XYZ[13] = x2 * y; // XXY
2339  gradXYZ[13][0] = 2 * x * y;
2340  gradXYZ[13][1] = x2;
2341  hessXYZ[13](0, 0) = 2 * y;
2342  hessXYZ[13](0, 1) = 2 * x;
2343  hessXYZ[13](1, 0) = 2 * x;
2344  gggXYZ[13][0](0, 1) = 2;
2345  gggXYZ[13][0](1, 0) = 2;
2346  gggXYZ[13][1](0, 0) = 2;
2347  XYZ[12] = z3; // ZZZ
2348  gradXYZ[12][2] = 3 * z2;
2349  hessXYZ[12](2, 2) = 6 * z;
2350  gggXYZ[12][2](2, 2) = 6;
2351  XYZ[11] = y3; // YYY
2352  gradXYZ[11][1] = 3 * y2;
2353  hessXYZ[11](1, 1) = 6 * y;
2354  gggXYZ[11][1](1, 1) = 6;
2355  XYZ[10] = x3; // XXX
2356  gradXYZ[10][0] = 3 * x2;
2357  hessXYZ[10](0, 0) = 6 * x;
2358  gggXYZ[10][0](0, 0) = 6;
2359  case 2:
2360  XYZ[9] = y * z; // YZ
2361  gradXYZ[9][1] = z;
2362  gradXYZ[9][2] = y;
2363  hessXYZ[9](1, 2) = 1;
2364  hessXYZ[9](2, 1) = 1;
2365  XYZ[8] = x * z; // XZ
2366  gradXYZ[8][0] = z;
2367  gradXYZ[8][2] = x;
2368  hessXYZ[8](0, 2) = 1;
2369  hessXYZ[8](2, 0) = 1;
2370  XYZ[7] = x * y; // XY
2371  gradXYZ[7][0] = y;
2372  gradXYZ[7][1] = x;
2373  hessXYZ[7](0, 1) = 1;
2374  hessXYZ[7](1, 0) = 1;
2375  XYZ[6] = z2; // ZZ
2376  gradXYZ[6][2] = 2 * z;
2377  hessXYZ[6](2, 2) = 2;
2378  XYZ[5] = y2; // YY
2379  gradXYZ[5][1] = 2 * y;
2380  hessXYZ[5](1, 1) = 2;
2381  XYZ[4] = x2; // XX
2382  gradXYZ[4][0] = 2 * x;
2383  hessXYZ[4](0, 0) = 2;
2384  case 1:
2385  XYZ[3] = z; // Z
2386  gradXYZ[3][2] = 1;
2387  XYZ[2] = y; // Y
2388  gradXYZ[2][1] = 1;
2389  XYZ[1] = x; // X
2390  gradXYZ[1][0] = 1;
2391  case 0:
2392  XYZ[0] = 1; // S
2393  }
2394 
2395  for (int i = 0; i < ntot; i++)
2396  XYZ[i] *= NormFactor[i];
2397  for (int i = 0; i < ntot; i++)
2398  gradXYZ[i] *= NormFactor[i];
2399  for (int i = 0; i < ntot; i++)
2400  hessXYZ[i] *= NormFactor[i];
2401  for (int i = 0; i < ntot; i++)
2402  {
2403  gggXYZ[i][0] *= NormFactor[i];
2404  gggXYZ[i][1] *= NormFactor[i];
2405  gggXYZ[i][2] *= NormFactor[i];
2406  }
2407 }
2408 
2409 
2410 template<class T, class Point_t, class Tensor_t, class GGG_t>
2412 {
2413  value_type x = p[0], y = p[1], z = p[2];
2414  value_type x2 = x * x, y2 = y * y, z2 = z * z;
2415  value_type x3 = x2 * x, y3 = y2 * y, z3 = z2 * z;
2416  int ntot = XYZ.size();
2417  for (int i = 0; i < ntot; i++)
2418  {
2419  gggXYZ[i][0] = 0.0;
2420  gggXYZ[i][1] = 0.0;
2421  gggXYZ[i][2] = 0.0;
2422  }
2423 
2424  switch (Lmax)
2425  {
2426  case 6:
2427  gggXYZ[83][0](0, 1) = 4 * y * z2;
2428  gggXYZ[83][0](0, 2) = 4 * y2 * z;
2429  gggXYZ[83][0](1, 0) = 4 * y * z2;
2430  gggXYZ[83][0](1, 1) = 4 * x * z2;
2431  gggXYZ[83][0](1, 2) = 8 * x * y * z;
2432  gggXYZ[83][0](2, 0) = 4 * y2 * z;
2433  gggXYZ[83][0](2, 1) = 8 * x * y * z;
2434  gggXYZ[83][0](2, 2) = 4 * x * y2;
2435  gggXYZ[83][1](0, 0) = 4 * y * z2;
2436  gggXYZ[83][1](0, 1) = 4 * x * z2;
2437  gggXYZ[83][1](0, 2) = 8 * x * y * z;
2438  gggXYZ[83][1](1, 0) = 4 * x * z2;
2439  gggXYZ[83][1](1, 2) = 4 * x2 * z;
2440  gggXYZ[83][1](2, 0) = 8 * x * y * z;
2441  gggXYZ[83][1](2, 1) = 4 * x2 * z;
2442  gggXYZ[83][1](2, 2) = 4 * x2 * y;
2443  gggXYZ[83][2](0, 0) = 4 * y2 * z;
2444  gggXYZ[83][2](0, 1) = 8 * x * y * z;
2445  gggXYZ[83][2](0, 2) = 4 * x * y2;
2446  gggXYZ[83][2](1, 0) = 8 * x * y * z;
2447  gggXYZ[83][2](1, 1) = 4 * x2 * z;
2448  gggXYZ[83][2](1, 2) = 4 * x2 * y;
2449  gggXYZ[83][2](2, 0) = 4 * x * y2;
2450  gggXYZ[83][2](2, 1) = 4 * x2 * y;
2451  gggXYZ[82][0](1, 1) = 2 * z3;
2452  gggXYZ[82][0](1, 2) = 6 * y * z2;
2453  gggXYZ[82][0](2, 1) = 6 * y * z2;
2454  gggXYZ[82][0](2, 2) = 6 * y2 * z;
2455  gggXYZ[82][1](0, 1) = 2 * z3;
2456  gggXYZ[82][1](0, 2) = 6 * y * z2;
2457  gggXYZ[82][1](1, 0) = 2 * z3;
2458  gggXYZ[82][1](1, 2) = 6 * x * z2;
2459  gggXYZ[82][1](2, 0) = 6 * y * z2;
2460  gggXYZ[82][1](2, 1) = 6 * x * z2;
2461  gggXYZ[82][1](2, 2) = 12 * x * y * z;
2462  gggXYZ[82][2](0, 1) = 6 * y * z2;
2463  gggXYZ[82][2](0, 2) = 6 * y2 * z;
2464  gggXYZ[82][2](1, 0) = 6 * y * z2;
2465  gggXYZ[82][2](1, 1) = 6 * x * z2;
2466  gggXYZ[82][2](1, 2) = 12 * x * y * z;
2467  gggXYZ[82][2](2, 0) = 6 * y2 * z;
2468  gggXYZ[82][2](2, 1) = 12 * x * y * z;
2469  gggXYZ[82][2](2, 2) = 6 * x * y2;
2470  gggXYZ[81][0](0, 1) = 2 * z3;
2471  gggXYZ[81][0](0, 2) = 6 * y * z2;
2472  gggXYZ[81][0](1, 0) = 2 * z3;
2473  gggXYZ[81][0](1, 2) = 6 * x * z2;
2474  gggXYZ[81][0](2, 0) = 6 * y * z2;
2475  gggXYZ[81][0](2, 1) = 6 * x * z2;
2476  gggXYZ[81][0](2, 2) = 12 * x * y * z;
2477  gggXYZ[81][1](0, 0) = 2 * z3;
2478  gggXYZ[81][1](0, 2) = 6 * x * z2;
2479  gggXYZ[81][1](2, 0) = 6 * x * z2;
2480  gggXYZ[81][1](2, 2) = 6 * x2 * z;
2481  gggXYZ[81][2](0, 0) = 6 * y * z2;
2482  gggXYZ[81][2](0, 1) = 6 * x * z2;
2483  gggXYZ[81][2](0, 2) = 12 * x * y * z;
2484  gggXYZ[81][2](1, 0) = 6 * x * z2;
2485  gggXYZ[81][2](1, 2) = 6 * x2 * z;
2486  gggXYZ[81][2](2, 0) = 12 * x * y * z;
2487  gggXYZ[81][2](2, 1) = 6 * x2 * z;
2488  gggXYZ[81][2](2, 2) = 6 * x2 * y;
2489  gggXYZ[80][0](1, 1) = 6 * y * z2;
2490  gggXYZ[80][0](1, 2) = 6 * y2 * z;
2491  gggXYZ[80][0](2, 1) = 6 * y2 * z;
2492  gggXYZ[80][0](2, 2) = 2 * y3;
2493  gggXYZ[80][1](0, 1) = 6 * y * z2;
2494  gggXYZ[80][1](0, 2) = 6 * y2 * z;
2495  gggXYZ[80][1](1, 0) = 6 * y * z2;
2496  gggXYZ[80][1](1, 1) = 6 * x * z2;
2497  gggXYZ[80][1](1, 2) = 12 * x * y * z;
2498  gggXYZ[80][1](2, 0) = 6 * y2 * z;
2499  gggXYZ[80][1](2, 1) = 12 * x * y * z;
2500  gggXYZ[80][1](2, 2) = 6 * x * y2;
2501  gggXYZ[80][2](0, 1) = 6 * y2 * z;
2502  gggXYZ[80][2](0, 2) = 2 * y3;
2503  gggXYZ[80][2](1, 0) = 6 * y2 * z;
2504  gggXYZ[80][2](1, 1) = 12 * x * y * z;
2505  gggXYZ[80][2](1, 2) = 6 * x * y2;
2506  gggXYZ[80][2](2, 0) = 2 * y3;
2507  gggXYZ[80][2](2, 1) = 6 * x * y2;
2508  gggXYZ[79][0](0, 1) = 6 * y2 * z;
2509  gggXYZ[79][0](0, 2) = 2 * y3;
2510  gggXYZ[79][0](1, 0) = 6 * y2 * z;
2511  gggXYZ[79][0](1, 1) = 12 * x * y * z;
2512  gggXYZ[79][0](1, 2) = 6 * x * y2;
2513  gggXYZ[79][0](2, 0) = 2 * y3;
2514  gggXYZ[79][0](2, 1) = 6 * x * y2;
2515  gggXYZ[79][1](0, 0) = 6 * y2 * z;
2516  gggXYZ[79][1](0, 1) = 12 * x * y * z;
2517  gggXYZ[79][1](0, 2) = 6 * x * y2;
2518  gggXYZ[79][1](1, 0) = 12 * x * y * z;
2519  gggXYZ[79][1](1, 1) = 6 * x2 * z;
2520  gggXYZ[79][1](1, 2) = 6 * x2 * y;
2521  gggXYZ[79][1](2, 0) = 6 * x * y2;
2522  gggXYZ[79][1](2, 1) = 6 * x2 * y;
2523  gggXYZ[79][2](0, 0) = 2 * y3;
2524  gggXYZ[79][2](0, 1) = 6 * x * y2;
2525  gggXYZ[79][2](1, 0) = 6 * x * y2;
2526  gggXYZ[79][2](1, 1) = 6 * x2 * y;
2527  gggXYZ[78][0](0, 0) = 6 * y * z2;
2528  gggXYZ[78][0](0, 1) = 6 * x * z2;
2529  gggXYZ[78][0](0, 2) = 12 * x * y * z;
2530  gggXYZ[78][0](1, 0) = 6 * x * z2;
2531  gggXYZ[78][0](1, 2) = 6 * x2 * z;
2532  gggXYZ[78][0](2, 0) = 12 * x * y * z;
2533  gggXYZ[78][0](2, 1) = 6 * x2 * z;
2534  gggXYZ[78][0](2, 2) = 6 * x2 * y;
2535  gggXYZ[78][1](0, 0) = 6 * x * z2;
2536  gggXYZ[78][1](0, 2) = 6 * x2 * z;
2537  gggXYZ[78][1](2, 0) = 6 * x2 * z;
2538  gggXYZ[78][1](2, 2) = 2 * x3;
2539  gggXYZ[78][2](0, 0) = 12 * x * y * z;
2540  gggXYZ[78][2](0, 1) = 6 * x2 * z;
2541  gggXYZ[78][2](0, 2) = 6 * x2 * y;
2542  gggXYZ[78][2](1, 0) = 6 * x2 * z;
2543  gggXYZ[78][2](1, 2) = 2 * x3;
2544  gggXYZ[78][2](2, 0) = 6 * x2 * y;
2545  gggXYZ[78][2](2, 1) = 2 * x3;
2546  gggXYZ[77][0](0, 0) = 6 * y2 * z;
2547  gggXYZ[77][0](0, 1) = 12 * x * y * z;
2548  gggXYZ[77][0](0, 2) = 6 * x * y2;
2549  gggXYZ[77][0](1, 0) = 12 * x * y * z;
2550  gggXYZ[77][0](1, 1) = 6 * x2 * z;
2551  gggXYZ[77][0](1, 2) = 6 * x2 * y;
2552  gggXYZ[77][0](2, 0) = 6 * x * y2;
2553  gggXYZ[77][0](2, 1) = 6 * x2 * y;
2554  gggXYZ[77][1](0, 0) = 12 * x * y * z;
2555  gggXYZ[77][1](0, 1) = 6 * x2 * z;
2556  gggXYZ[77][1](0, 2) = 6 * x2 * y;
2557  gggXYZ[77][1](1, 0) = 6 * x2 * z;
2558  gggXYZ[77][1](1, 2) = 2 * x3;
2559  gggXYZ[77][1](2, 0) = 6 * x2 * y;
2560  gggXYZ[77][1](2, 1) = 2 * x3;
2561  gggXYZ[77][2](0, 0) = 6 * x * y2;
2562  gggXYZ[77][2](0, 1) = 6 * x2 * y;
2563  gggXYZ[77][2](1, 0) = 6 * x2 * y;
2564  gggXYZ[77][2](1, 1) = 2 * x3;
2565  gggXYZ[76][1](1, 1) = 6 * z3;
2566  gggXYZ[76][1](1, 2) = 18 * y * z2;
2567  gggXYZ[76][1](2, 1) = 18 * y * z2;
2568  gggXYZ[76][1](2, 2) = 18 * y2 * z;
2569  gggXYZ[76][2](1, 1) = 18 * y * z2;
2570  gggXYZ[76][2](1, 2) = 18 * y2 * z;
2571  gggXYZ[76][2](2, 1) = 18 * y2 * z;
2572  gggXYZ[76][2](2, 2) = 6 * y3;
2573  gggXYZ[75][0](0, 0) = 6 * z3;
2574  gggXYZ[75][0](0, 2) = 18 * x * z2;
2575  gggXYZ[75][0](2, 0) = 18 * x * z2;
2576  gggXYZ[75][0](2, 2) = 18 * x2 * z;
2577  gggXYZ[75][2](0, 0) = 18 * x * z2;
2578  gggXYZ[75][2](0, 2) = 18 * x2 * z;
2579  gggXYZ[75][2](2, 0) = 18 * x2 * z;
2580  gggXYZ[75][2](2, 2) = 6 * x3;
2581  gggXYZ[74][0](0, 0) = 6 * y3;
2582  gggXYZ[74][0](0, 1) = 18 * x * y2;
2583  gggXYZ[74][0](1, 0) = 18 * x * y2;
2584  gggXYZ[74][0](1, 1) = 18 * x2 * y;
2585  gggXYZ[74][1](0, 0) = 18 * x * y2;
2586  gggXYZ[74][1](0, 1) = 18 * x2 * y;
2587  gggXYZ[74][1](1, 0) = 18 * x2 * y;
2588  gggXYZ[74][1](1, 1) = 6 * x3;
2589  gggXYZ[73][0](1, 2) = 4 * z3;
2590  gggXYZ[73][0](2, 1) = 4 * z3;
2591  gggXYZ[73][0](2, 2) = 12 * y * z2;
2592  gggXYZ[73][1](0, 2) = 4 * z3;
2593  gggXYZ[73][1](2, 0) = 4 * z3;
2594  gggXYZ[73][1](2, 2) = 12 * x * z2;
2595  gggXYZ[73][2](0, 1) = 4 * z3;
2596  gggXYZ[73][2](0, 2) = 12 * y * z2;
2597  gggXYZ[73][2](1, 0) = 4 * z3;
2598  gggXYZ[73][2](1, 2) = 12 * x * z2;
2599  gggXYZ[73][2](2, 0) = 12 * y * z2;
2600  gggXYZ[73][2](2, 1) = 12 * x * z2;
2601  gggXYZ[73][2](2, 2) = 24 * x * y * z;
2602  gggXYZ[72][0](1, 1) = 12 * y2 * z;
2603  gggXYZ[72][0](1, 2) = 4 * y3;
2604  gggXYZ[72][0](2, 1) = 4 * y3;
2605  gggXYZ[72][1](0, 1) = 12 * y2 * z;
2606  gggXYZ[72][1](0, 2) = 4 * y3;
2607  gggXYZ[72][1](1, 0) = 12 * y2 * z;
2608  gggXYZ[72][1](1, 1) = 24 * x * y * z;
2609  gggXYZ[72][1](1, 2) = 12 * x * y2;
2610  gggXYZ[72][1](2, 0) = 4 * y3;
2611  gggXYZ[72][1](2, 1) = 12 * x * y2;
2612  gggXYZ[72][2](0, 1) = 4 * y3;
2613  gggXYZ[72][2](1, 0) = 4 * y3;
2614  gggXYZ[72][2](1, 1) = 12 * x * y2;
2615  gggXYZ[71][0](0, 0) = 24 * x * y * z;
2616  gggXYZ[71][0](0, 1) = 12 * x2 * z;
2617  gggXYZ[71][0](0, 2) = 12 * x2 * y;
2618  gggXYZ[71][0](1, 0) = 12 * x2 * z;
2619  gggXYZ[71][0](1, 2) = 4 * x3;
2620  gggXYZ[71][0](2, 0) = 12 * x2 * y;
2621  gggXYZ[71][0](2, 1) = 4 * x3;
2622  gggXYZ[71][1](0, 0) = 12 * x2 * z;
2623  gggXYZ[71][1](0, 2) = 4 * x3;
2624  gggXYZ[71][1](2, 0) = 4 * x3;
2625  gggXYZ[71][2](0, 0) = 12 * x2 * y;
2626  gggXYZ[71][2](0, 1) = 4 * x3;
2627  gggXYZ[71][2](1, 0) = 4 * x3;
2628  gggXYZ[70][1](1, 2) = 8 * z3;
2629  gggXYZ[70][1](2, 1) = 8 * z3;
2630  gggXYZ[70][1](2, 2) = 24 * y * z2;
2631  gggXYZ[70][2](1, 1) = 8 * z3;
2632  gggXYZ[70][2](1, 2) = 24 * y * z2;
2633  gggXYZ[70][2](2, 1) = 24 * y * z2;
2634  gggXYZ[70][2](2, 2) = 24 * y2 * z;
2635  gggXYZ[69][0](0, 2) = 8 * z3;
2636  gggXYZ[69][0](2, 0) = 8 * z3;
2637  gggXYZ[69][0](2, 2) = 24 * x * z2;
2638  gggXYZ[69][2](0, 0) = 8 * z3;
2639  gggXYZ[69][2](0, 2) = 24 * x * z2;
2640  gggXYZ[69][2](2, 0) = 24 * x * z2;
2641  gggXYZ[69][2](2, 2) = 24 * x2 * z;
2642  gggXYZ[68][1](1, 1) = 24 * y * z2;
2643  gggXYZ[68][1](1, 2) = 24 * y2 * z;
2644  gggXYZ[68][1](2, 1) = 24 * y2 * z;
2645  gggXYZ[68][1](2, 2) = 8 * y3;
2646  gggXYZ[68][2](1, 1) = 24 * y2 * z;
2647  gggXYZ[68][2](1, 2) = 8 * y3;
2648  gggXYZ[68][2](2, 1) = 8 * y3;
2649  gggXYZ[67][0](0, 1) = 8 * y3;
2650  gggXYZ[67][0](1, 0) = 8 * y3;
2651  gggXYZ[67][0](1, 1) = 24 * x * y2;
2652  gggXYZ[67][1](0, 0) = 8 * y3;
2653  gggXYZ[67][1](0, 1) = 24 * x * y2;
2654  gggXYZ[67][1](1, 0) = 24 * x * y2;
2655  gggXYZ[67][1](1, 1) = 24 * x2 * y;
2656  gggXYZ[66][0](0, 0) = 24 * x * z2;
2657  gggXYZ[66][0](0, 2) = 24 * x2 * z;
2658  gggXYZ[66][0](2, 0) = 24 * x2 * z;
2659  gggXYZ[66][0](2, 2) = 8 * x3;
2660  gggXYZ[66][2](0, 0) = 24 * x2 * z;
2661  gggXYZ[66][2](0, 2) = 8 * x3;
2662  gggXYZ[66][2](2, 0) = 8 * x3;
2663  gggXYZ[65][0](0, 0) = 24 * x * y2;
2664  gggXYZ[65][0](0, 1) = 24 * x2 * y;
2665  gggXYZ[65][0](1, 0) = 24 * x2 * y;
2666  gggXYZ[65][0](1, 1) = 8 * x3;
2667  gggXYZ[65][1](0, 0) = 24 * x2 * y;
2668  gggXYZ[65][1](0, 1) = 8 * x3;
2669  gggXYZ[65][1](1, 0) = 8 * x3;
2670  gggXYZ[64][1](2, 2) = 20 * z3;
2671  gggXYZ[64][2](1, 2) = 20 * z3;
2672  gggXYZ[64][2](2, 1) = 20 * z3;
2673  gggXYZ[64][2](2, 2) = 60 * y * z2;
2674  gggXYZ[63][0](2, 2) = 20 * z3;
2675  gggXYZ[63][2](0, 2) = 20 * z3;
2676  gggXYZ[63][2](2, 0) = 20 * z3;
2677  gggXYZ[63][2](2, 2) = 60 * x * z2;
2678  gggXYZ[62][1](1, 1) = 60 * y2 * z;
2679  gggXYZ[62][1](1, 2) = 20 * y3;
2680  gggXYZ[62][1](2, 1) = 20 * y3;
2681  gggXYZ[62][2](1, 1) = 20 * y3;
2682  gggXYZ[61][0](1, 1) = 20 * y3;
2683  gggXYZ[61][1](0, 1) = 20 * y3;
2684  gggXYZ[61][1](1, 0) = 20 * y3;
2685  gggXYZ[61][1](1, 1) = 60 * x * y2;
2686  gggXYZ[60][0](0, 0) = 60 * x2 * z;
2687  gggXYZ[60][0](0, 2) = 20 * x3;
2688  gggXYZ[60][0](2, 0) = 20 * x3;
2689  gggXYZ[60][2](0, 0) = 20 * x3;
2690  gggXYZ[59][0](0, 0) = 60 * x2 * y;
2691  gggXYZ[59][0](0, 1) = 20 * x3;
2692  gggXYZ[59][0](1, 0) = 20 * x3;
2693  gggXYZ[59][1](0, 0) = 20 * x3;
2694  gggXYZ[58][2](2, 2) = 120 * z3;
2695  gggXYZ[57][1](1, 1) = 120 * y3;
2696  gggXYZ[56][0](0, 0) = 120 * x3;
2697  case 5:
2698  gggXYZ[55][0](1, 1) = 2 * z2;
2699  gggXYZ[55][0](1, 2) = 4 * y * z;
2700  gggXYZ[55][0](2, 1) = 4 * y * z;
2701  gggXYZ[55][0](2, 2) = 2 * y2;
2702  gggXYZ[55][1](0, 1) = 2 * z2;
2703  gggXYZ[55][1](0, 2) = 4 * y * z;
2704  gggXYZ[55][1](1, 0) = 2 * z2;
2705  gggXYZ[55][1](1, 2) = 4 * x * z;
2706  gggXYZ[55][1](2, 0) = 4 * y * z;
2707  gggXYZ[55][1](2, 1) = 4 * x * z;
2708  gggXYZ[55][1](2, 2) = 4 * x * y;
2709  gggXYZ[55][2](0, 1) = 4 * y * z;
2710  gggXYZ[55][2](0, 2) = 2 * y2;
2711  gggXYZ[55][2](1, 0) = 4 * y * z;
2712  gggXYZ[55][2](1, 1) = 4 * x * z;
2713  gggXYZ[55][2](1, 2) = 4 * x * y;
2714  gggXYZ[55][2](2, 0) = 2 * y2;
2715  gggXYZ[55][2](2, 1) = 4 * x * y;
2716  gggXYZ[54][0](0, 1) = 2 * z2;
2717  gggXYZ[54][0](0, 2) = 4 * y * z;
2718  gggXYZ[54][0](1, 0) = 2 * z2;
2719  gggXYZ[54][0](1, 2) = 4 * x * z;
2720  gggXYZ[54][0](2, 0) = 4 * y * z;
2721  gggXYZ[54][0](2, 1) = 4 * x * z;
2722  gggXYZ[54][0](2, 2) = 4 * x * y;
2723  gggXYZ[54][1](0, 0) = 2 * z2;
2724  gggXYZ[54][1](0, 2) = 4 * x * z;
2725  gggXYZ[54][1](2, 0) = 4 * x * z;
2726  gggXYZ[54][1](2, 2) = 2 * x2;
2727  gggXYZ[54][2](0, 0) = 4 * y * z;
2728  gggXYZ[54][2](0, 1) = 4 * x * z;
2729  gggXYZ[54][2](0, 2) = 4 * x * y;
2730  gggXYZ[54][2](1, 0) = 4 * x * z;
2731  gggXYZ[54][2](1, 2) = 2 * x2;
2732  gggXYZ[54][2](2, 0) = 4 * x * y;
2733  gggXYZ[54][2](2, 1) = 2 * x2;
2734  gggXYZ[53][0](0, 1) = 4 * y * z;
2735  gggXYZ[53][0](0, 2) = 2 * y2;
2736  gggXYZ[53][0](1, 0) = 4 * y * z;
2737  gggXYZ[53][0](1, 1) = 4 * x * z;
2738  gggXYZ[53][0](1, 2) = 4 * x * y;
2739  gggXYZ[53][0](2, 0) = 2 * y2;
2740  gggXYZ[53][0](2, 1) = 4 * x * y;
2741  gggXYZ[53][1](0, 0) = 4 * y * z;
2742  gggXYZ[53][1](0, 1) = 4 * x * z;
2743  gggXYZ[53][1](0, 2) = 4 * x * y;
2744  gggXYZ[53][1](1, 0) = 4 * x * z;
2745  gggXYZ[53][1](1, 2) = 2 * x2;
2746  gggXYZ[53][1](2, 0) = 4 * x * y;
2747  gggXYZ[53][1](2, 1) = 2 * x2;
2748  gggXYZ[53][2](0, 0) = 2 * y2;
2749  gggXYZ[53][2](0, 1) = 4 * x * y;
2750  gggXYZ[53][2](1, 0) = 4 * x * y;
2751  gggXYZ[53][2](1, 1) = 2 * x2;
2752  gggXYZ[52][0](1, 2) = 3 * z2;
2753  gggXYZ[52][0](2, 1) = 3 * z2;
2754  gggXYZ[52][0](2, 2) = 6 * y * z;
2755  gggXYZ[52][1](0, 2) = 3 * z2;
2756  gggXYZ[52][1](2, 0) = 3 * z2;
2757  gggXYZ[52][1](2, 2) = 6 * x * z;
2758  gggXYZ[52][2](0, 1) = 3 * z2;
2759  gggXYZ[52][2](0, 2) = 6 * y * z;
2760  gggXYZ[52][2](1, 0) = 3 * z2;
2761  gggXYZ[52][2](1, 2) = 6 * x * z;
2762  gggXYZ[52][2](2, 0) = 6 * y * z;
2763  gggXYZ[52][2](2, 1) = 6 * x * z;
2764  gggXYZ[52][2](2, 2) = 6 * x * y;
2765  gggXYZ[51][0](1, 1) = 6 * y * z;
2766  gggXYZ[51][0](1, 2) = 3 * y2;
2767  gggXYZ[51][0](2, 1) = 3 * y2;
2768  gggXYZ[51][1](0, 1) = 6 * y * z;
2769  gggXYZ[51][1](0, 2) = 3 * y2;
2770  gggXYZ[51][1](1, 0) = 6 * y * z;
2771  gggXYZ[51][1](1, 1) = 6 * x * z;
2772  gggXYZ[51][1](1, 2) = 6 * x * y;
2773  gggXYZ[51][1](2, 0) = 3 * y2;
2774  gggXYZ[51][1](2, 1) = 6 * x * y;
2775  gggXYZ[51][2](0, 1) = 3 * y2;
2776  gggXYZ[51][2](1, 0) = 3 * y2;
2777  gggXYZ[51][2](1, 1) = 6 * x * y;
2778  gggXYZ[50][0](0, 0) = 6 * y * z;
2779  gggXYZ[50][0](0, 1) = 6 * x * z;
2780  gggXYZ[50][0](0, 2) = 6 * x * y;
2781  gggXYZ[50][0](1, 0) = 6 * x * z;
2782  gggXYZ[50][0](1, 2) = 3 * x2;
2783  gggXYZ[50][0](2, 0) = 6 * x * y;
2784  gggXYZ[50][0](2, 1) = 3 * x2;
2785  gggXYZ[50][1](0, 0) = 6 * x * z;
2786  gggXYZ[50][1](0, 2) = 3 * x2;
2787  gggXYZ[50][1](2, 0) = 3 * x2;
2788  gggXYZ[50][2](0, 0) = 6 * x * y;
2789  gggXYZ[50][2](0, 1) = 3 * x2;
2790  gggXYZ[50][2](1, 0) = 3 * x2;
2791  gggXYZ[49][1](1, 2) = 6 * z2;
2792  gggXYZ[49][1](2, 1) = 6 * z2;
2793  gggXYZ[49][1](2, 2) = 12 * y * z;
2794  gggXYZ[49][2](1, 1) = 6 * z2;
2795  gggXYZ[49][2](1, 2) = 12 * y * z;
2796  gggXYZ[49][2](2, 1) = 12 * y * z;
2797  gggXYZ[49][2](2, 2) = 6 * y2;
2798  gggXYZ[48][0](0, 2) = 6 * z2;
2799  gggXYZ[48][0](2, 0) = 6 * z2;
2800  gggXYZ[48][0](2, 2) = 12 * x * z;
2801  gggXYZ[48][2](0, 0) = 6 * z2;
2802  gggXYZ[48][2](0, 2) = 12 * x * z;
2803  gggXYZ[48][2](2, 0) = 12 * x * z;
2804  gggXYZ[48][2](2, 2) = 6 * x2;
2805  gggXYZ[47][1](1, 1) = 6 * z2;
2806  gggXYZ[47][1](1, 2) = 12 * y * z;
2807  gggXYZ[47][1](2, 1) = 12 * y * z;
2808  gggXYZ[47][1](2, 2) = 6 * y2;
2809  gggXYZ[47][2](1, 1) = 12 * y * z;
2810  gggXYZ[47][2](1, 2) = 6 * y2;
2811  gggXYZ[47][2](2, 1) = 6 * y2;
2812  gggXYZ[46][0](0, 1) = 6 * y2;
2813  gggXYZ[46][0](1, 0) = 6 * y2;
2814  gggXYZ[46][0](1, 1) = 12 * x * y;
2815  gggXYZ[46][1](0, 0) = 6 * y2;
2816  gggXYZ[46][1](0, 1) = 12 * x * y;
2817  gggXYZ[46][1](1, 0) = 12 * x * y;
2818  gggXYZ[46][1](1, 1) = 6 * x2;
2819  gggXYZ[45][0](0, 0) = 6 * z2;
2820  gggXYZ[45][0](0, 2) = 12 * x * z;
2821  gggXYZ[45][0](2, 0) = 12 * x * z;
2822  gggXYZ[45][0](2, 2) = 6 * x2;
2823  gggXYZ[45][2](0, 0) = 12 * x * z;
2824  gggXYZ[45][2](0, 2) = 6 * x2;
2825  gggXYZ[45][2](2, 0) = 6 * x2;
2826  gggXYZ[44][0](0, 0) = 6 * y2;
2827  gggXYZ[44][0](0, 1) = 12 * x * y;
2828  gggXYZ[44][0](1, 0) = 12 * x * y;
2829  gggXYZ[44][0](1, 1) = 6 * x2;
2830  gggXYZ[44][1](0, 0) = 12 * x * y;
2831  gggXYZ[44][1](0, 1) = 6 * x2;
2832  gggXYZ[44][1](1, 0) = 6 * x2;
2833  gggXYZ[43][1](2, 2) = 12 * z2;
2834  gggXYZ[43][2](1, 2) = 12 * z2;
2835  gggXYZ[43][2](2, 1) = 12 * z2;
2836  gggXYZ[43][2](2, 2) = 24 * y * z;
2837  gggXYZ[42][0](2, 2) = 12 * z2;
2838  gggXYZ[42][2](0, 2) = 12 * z2;
2839  gggXYZ[42][2](2, 0) = 12 * z2;
2840  gggXYZ[42][2](2, 2) = 24 * x * z;
2841  gggXYZ[41][1](1, 1) = 24 * y * z;
2842  gggXYZ[41][1](1, 2) = 12 * y2;
2843  gggXYZ[41][1](2, 1) = 12 * y2;
2844  gggXYZ[41][2](1, 1) = 12 * y2;
2845  gggXYZ[40][0](1, 1) = 12 * y2;
2846  gggXYZ[40][1](0, 1) = 12 * y2;
2847  gggXYZ[40][1](1, 0) = 12 * y2;
2848  gggXYZ[40][1](1, 1) = 24 * x * y;
2849  gggXYZ[39][0](0, 0) = 24 * x * z;
2850  gggXYZ[39][0](0, 2) = 12 * x2;
2851  gggXYZ[39][0](2, 0) = 12 * x2;
2852  gggXYZ[39][2](0, 0) = 12 * x2;
2853  gggXYZ[38][0](0, 0) = 24 * x * y;
2854  gggXYZ[38][0](0, 1) = 12 * x2;
2855  gggXYZ[38][0](1, 0) = 12 * x2;
2856  gggXYZ[38][1](0, 0) = 12 * x2;
2857  gggXYZ[37][2](2, 2) = 60 * z2;
2858  gggXYZ[36][1](1, 1) = 60 * y2;
2859  gggXYZ[35][0](0, 0) = 60 * x2;
2860  case 4:
2861  gggXYZ[34][0](1, 2) = 2 * z;
2862  gggXYZ[34][0](2, 1) = 2 * z;
2863  gggXYZ[34][0](2, 2) = 2 * y;
2864  gggXYZ[34][1](0, 2) = 2 * z;
2865  gggXYZ[34][1](2, 0) = 2 * z;
2866  gggXYZ[34][1](2, 2) = 2 * x;
2867  gggXYZ[34][2](0, 1) = 2 * z;
2868  gggXYZ[34][2](0, 2) = 2 * y;
2869  gggXYZ[34][2](1, 0) = 2 * z;
2870  gggXYZ[34][2](1, 2) = 2 * x;
2871  gggXYZ[34][2](2, 0) = 2 * y;
2872  gggXYZ[34][2](2, 1) = 2 * x;
2873  gggXYZ[33][0](1, 1) = 2 * z;
2874  gggXYZ[33][0](1, 2) = 2 * y;
2875  gggXYZ[33][0](2, 1) = 2 * y;
2876  gggXYZ[33][1](0, 1) = 2 * z;
2877  gggXYZ[33][1](0, 2) = 2 * y;
2878  gggXYZ[33][1](1, 0) = 2 * z;
2879  gggXYZ[33][1](1, 2) = 2 * x;
2880  gggXYZ[33][1](2, 0) = 2 * y;
2881  gggXYZ[33][1](2, 1) = 2 * x;
2882  gggXYZ[33][2](0, 1) = 2 * y;
2883  gggXYZ[33][2](1, 0) = 2 * y;
2884  gggXYZ[33][2](1, 1) = 2 * x;
2885  gggXYZ[32][0](0, 1) = 2 * z;
2886  gggXYZ[32][0](0, 2) = 2 * y;
2887  gggXYZ[32][0](1, 0) = 2 * z;
2888  gggXYZ[32][0](1, 2) = 2 * x;
2889  gggXYZ[32][0](2, 0) = 2 * y;
2890  gggXYZ[32][0](2, 1) = 2 * x;
2891  gggXYZ[32][1](0, 0) = 2 * z;
2892  gggXYZ[32][1](0, 2) = 2 * x;
2893  gggXYZ[32][1](2, 0) = 2 * x;
2894  gggXYZ[32][2](0, 0) = 2 * y;
2895  gggXYZ[32][2](0, 1) = 2 * x;
2896  gggXYZ[32][2](1, 0) = 2 * x;
2897  gggXYZ[31][1](1, 2) = 4 * z;
2898  gggXYZ[31][1](2, 1) = 4 * z;
2899  gggXYZ[31][1](2, 2) = 4 * y;
2900  gggXYZ[31][2](1, 1) = 4 * z;
2901  gggXYZ[31][2](1, 2) = 4 * y;
2902  gggXYZ[31][2](2, 1) = 4 * y;
2903  gggXYZ[30][0](0, 2) = 4 * z;
2904  gggXYZ[30][0](2, 0) = 4 * z;
2905  gggXYZ[30][0](2, 2) = 4 * x;
2906  gggXYZ[30][2](0, 0) = 4 * z;
2907  gggXYZ[30][2](0, 2) = 4 * x;
2908  gggXYZ[30][2](2, 0) = 4 * x;
2909  gggXYZ[29][0](0, 1) = 4 * y;
2910  gggXYZ[29][0](1, 0) = 4 * y;
2911  gggXYZ[29][0](1, 1) = 4 * x;
2912  gggXYZ[29][1](0, 0) = 4 * y;
2913  gggXYZ[29][1](0, 1) = 4 * x;
2914  gggXYZ[29][1](1, 0) = 4 * x;
2915  gggXYZ[28][1](2, 2) = 6 * z;
2916  gggXYZ[28][2](1, 2) = 6 * z;
2917  gggXYZ[28][2](2, 1) = 6 * z;
2918  gggXYZ[28][2](2, 2) = 6 * y;
2919  gggXYZ[27][0](2, 2) = 6 * z;
2920  gggXYZ[27][2](0, 2) = 6 * z;
2921  gggXYZ[27][2](2, 0) = 6 * z;
2922  gggXYZ[27][2](2, 2) = 6 * x;
2923  gggXYZ[26][1](1, 1) = 6 * z;
2924  gggXYZ[26][1](1, 2) = 6 * y;
2925  gggXYZ[26][1](2, 1) = 6 * y;
2926  gggXYZ[26][2](1, 1) = 6 * y;
2927  gggXYZ[25][0](1, 1) = 6 * y;
2928  gggXYZ[25][1](0, 1) = 6 * y;
2929  gggXYZ[25][1](1, 0) = 6 * y;
2930  gggXYZ[25][1](1, 1) = 6 * x;
2931  gggXYZ[24][0](0, 0) = 6 * z;
2932  gggXYZ[24][0](0, 2) = 6 * x;
2933  gggXYZ[24][0](2, 0) = 6 * x;
2934  gggXYZ[24][2](0, 0) = 6 * x;
2935  gggXYZ[23][0](0, 0) = 6 * y;
2936  gggXYZ[23][0](0, 1) = 6 * x;
2937  gggXYZ[23][0](1, 0) = 6 * x;
2938  gggXYZ[23][1](0, 0) = 6 * x;
2939  gggXYZ[22][2](2, 2) = 24 * z;
2940  gggXYZ[21][1](1, 1) = 24 * y;
2941  gggXYZ[20][0](0, 0) = 24 * x;
2942  case 3:
2943  gggXYZ[19][0](1, 2) = 1;
2944  gggXYZ[19][0](2, 1) = 1;
2945  gggXYZ[19][1](0, 2) = 1;
2946  gggXYZ[19][1](2, 0) = 1;
2947  gggXYZ[19][2](0, 1) = 1;
2948  gggXYZ[19][2](1, 0) = 1;
2949  gggXYZ[18][1](2, 2) = 2;
2950  gggXYZ[18][2](1, 2) = 2;
2951  gggXYZ[18][2](2, 1) = 2;
2952  gggXYZ[17][0](2, 2) = 2;
2953  gggXYZ[17][2](0, 2) = 2;
2954  gggXYZ[17][2](2, 0) = 2;
2955  gggXYZ[16][1](1, 2) = 2;
2956  gggXYZ[16][1](2, 1) = 2;
2957  gggXYZ[16][2](1, 1) = 2;
2958  gggXYZ[15][0](1, 1) = 2;
2959  gggXYZ[15][1](0, 1) = 2;
2960  gggXYZ[15][1](1, 0) = 2;
2961  gggXYZ[14][0](0, 2) = 2;
2962  gggXYZ[14][0](2, 0) = 2;
2963  gggXYZ[14][2](0, 0) = 2;
2964  gggXYZ[13][0](0, 1) = 2;
2965  gggXYZ[13][0](1, 0) = 2;
2966  gggXYZ[13][1](0, 0) = 2;
2967  gggXYZ[12][2](2, 2) = 6;
2968  gggXYZ[11][1](1, 1) = 6;
2969  gggXYZ[10][0](0, 0) = 6;
2970  case 2:
2971  case 1:; // empty statement
2972  case 0:; // empty statement
2973  }
2974 
2975  for (int i = 0; i < ntot; i++)
2976  {
2977  gggXYZ[i][0] *= NormFactor[i];
2978  gggXYZ[i][1] *= NormFactor[i];
2979  gggXYZ[i][2] *= NormFactor[i];
2980  }
2981 }
2982 
2983 
2984 // generated from read_order.py
2985 template<class T, class Point_t, class Tensor_t, class GGG_t>
2987 {
2988  // following Gamess notation
2989  switch (n)
2990  {
2991  // S
2992  case 0: // S
2993  a = 0;
2994  b = 0;
2995  c = 0;
2996  break;
2997  // P
2998  case 1: // X
2999  a = 1;
3000  b = 0;
3001  c = 0;
3002  break;
3003  case 2: // Y
3004  a = 0;
3005  b = 1;
3006  c = 0;
3007  break;
3008  case 3: // Z
3009  a = 0;
3010  b = 0;
3011  c = 1;
3012  break;
3013  // D
3014  case 4: // XX
3015  a = 2;
3016  b = 0;
3017  c = 0;
3018  break;
3019  case 5: // YY
3020  a = 0;
3021  b = 2;
3022  c = 0;
3023  break;
3024  case 6: // ZZ
3025  a = 0;
3026  b = 0;
3027  c = 2;
3028  break;
3029  case 7: // XY
3030  a = 1;
3031  b = 1;
3032  c = 0;
3033  break;
3034  case 8: // XZ
3035  a = 1;
3036  b = 0;
3037  c = 1;
3038  break;
3039  case 9: // YZ
3040  a = 0;
3041  b = 1;
3042  c = 1;
3043  break;
3044  // F
3045  case 10: // XXX
3046  a = 3;
3047  b = 0;
3048  c = 0;
3049  break;
3050  case 11: // YYY
3051  a = 0;
3052  b = 3;
3053  c = 0;
3054  break;
3055  case 12: // ZZZ
3056  a = 0;
3057  b = 0;
3058  c = 3;
3059  break;
3060  case 13: // XXY
3061  a = 2;
3062  b = 1;
3063  c = 0;
3064  break;
3065  case 14: // XXZ
3066  a = 2;
3067  b = 0;
3068  c = 1;
3069  break;
3070  case 15: // YYX
3071  a = 1;
3072  b = 2;
3073  c = 0;
3074  break;
3075  case 16: // YYZ
3076  a = 0;
3077  b = 2;
3078  c = 1;
3079  break;
3080  case 17: // ZZX
3081  a = 1;
3082  b = 0;
3083  c = 2;
3084  break;
3085  case 18: // ZZY
3086  a = 0;
3087  b = 1;
3088  c = 2;
3089  break;
3090  case 19: // XYZ
3091  a = 1;
3092  b = 1;
3093  c = 1;
3094  break;
3095  // G
3096  case 20: // XXXX
3097  a = 4;
3098  b = 0;
3099  c = 0;
3100  break;
3101  case 21: // YYYY
3102  a = 0;
3103  b = 4;
3104  c = 0;
3105  break;
3106  case 22: // ZZZZ
3107  a = 0;
3108  b = 0;
3109  c = 4;
3110  break;
3111  case 23: // XXXY
3112  a = 3;
3113  b = 1;
3114  c = 0;
3115  break;
3116  case 24: // XXXZ
3117  a = 3;
3118  b = 0;
3119  c = 1;
3120  break;
3121  case 25: // YYYX
3122  a = 1;
3123  b = 3;
3124  c = 0;
3125  break;
3126  case 26: // YYYZ
3127  a = 0;
3128  b = 3;
3129  c = 1;
3130  break;
3131  case 27: // ZZZX
3132  a = 1;
3133  b = 0;
3134  c = 3;
3135  break;
3136  case 28: // ZZZY
3137  a = 0;
3138  b = 1;
3139  c = 3;
3140  break;
3141  case 29: // XXYY
3142  a = 2;
3143  b = 2;
3144  c = 0;
3145  break;
3146  case 30: // XXZZ
3147  a = 2;
3148  b = 0;
3149  c = 2;
3150  break;
3151  case 31: // YYZZ
3152  a = 0;
3153  b = 2;
3154  c = 2;
3155  break;
3156  case 32: // XXYZ
3157  a = 2;
3158  b = 1;
3159  c = 1;
3160  break;
3161  case 33: // YYXZ
3162  a = 1;
3163  b = 2;
3164  c = 1;
3165  break;
3166  case 34: // ZZXY
3167  a = 1;
3168  b = 1;
3169  c = 2;
3170  break;
3171  // H
3172  case 35: // XXXXX
3173  a = 5;
3174  b = 0;
3175  c = 0;
3176  break;
3177  case 36: // YYYYY
3178  a = 0;
3179  b = 5;
3180  c = 0;
3181  break;
3182  case 37: // ZZZZZ
3183  a = 0;
3184  b = 0;
3185  c = 5;
3186  break;
3187  case 38: // XXXXY
3188  a = 4;
3189  b = 1;
3190  c = 0;
3191  break;
3192  case 39: // XXXXZ
3193  a = 4;
3194  b = 0;
3195  c = 1;
3196  break;
3197  case 40: // YYYYX
3198  a = 1;
3199  b = 4;
3200  c = 0;
3201  break;
3202  case 41: // YYYYZ
3203  a = 0;
3204  b = 4;
3205  c = 1;
3206  break;
3207  case 42: // ZZZZX
3208  a = 1;
3209  b = 0;
3210  c = 4;
3211  break;
3212  case 43: // ZZZZY
3213  a = 0;
3214  b = 1;
3215  c = 4;
3216  break;
3217  case 44: // XXXYY
3218  a = 3;
3219  b = 2;
3220  c = 0;
3221  break;
3222  case 45: // XXXZZ
3223  a = 3;
3224  b = 0;
3225  c = 2;
3226  break;
3227  case 46: // YYYXX
3228  a = 2;
3229  b = 3;
3230  c = 0;
3231  break;
3232  case 47: // YYYZZ
3233  a = 0;
3234  b = 3;
3235  c = 2;
3236  break;
3237  case 48: // ZZZXX
3238  a = 2;
3239  b = 0;
3240  c = 3;
3241  break;
3242  case 49: // ZZZYY
3243  a = 0;
3244  b = 2;
3245  c = 3;
3246  break;
3247  case 50: // XXXYZ
3248  a = 3;
3249  b = 1;
3250  c = 1;
3251  break;
3252  case 51: // YYYXZ
3253  a = 1;
3254  b = 3;
3255  c = 1;
3256  break;
3257  case 52: // ZZZXY
3258  a = 1;
3259  b = 1;
3260  c = 3;
3261  break;
3262  case 53: // XXYYZ
3263  a = 2;
3264  b = 2;
3265  c = 1;
3266  break;
3267  case 54: // XXZZY
3268  a = 2;
3269  b = 1;
3270  c = 2;
3271  break;
3272  case 55: // YYZZX
3273  a = 1;
3274  b = 2;
3275  c = 2;
3276  break;
3277  // I
3278  case 56: // X6
3279  a = 6;
3280  b = 0;
3281  c = 0;
3282  break;
3283  case 57: // Y6
3284  a = 0;
3285  b = 6;
3286  c = 0;
3287  break;
3288  case 58: // Z6
3289  a = 0;
3290  b = 0;
3291  c = 6;
3292  break;
3293  case 59: // X5Y
3294  a = 5;
3295  b = 1;
3296  c = 0;
3297  break;
3298  case 60: // X5Z
3299  a = 5;
3300  b = 0;
3301  c = 1;
3302  break;
3303  case 61: // Y5X
3304  a = 1;
3305  b = 5;
3306  c = 0;
3307  break;
3308  case 62: // Y5Z
3309  a = 0;
3310  b = 5;
3311  c = 1;
3312  break;
3313  case 63: // Z5X
3314  a = 1;
3315  b = 0;
3316  c = 5;
3317  break;
3318  case 64: // Z5Y
3319  a = 0;
3320  b = 1;
3321  c = 5;
3322  break;
3323  case 65: // X4Y2
3324  a = 4;
3325  b = 2;
3326  c = 0;
3327  break;
3328  case 66: // X4Z2
3329  a = 4;
3330  b = 0;
3331  c = 2;
3332  break;
3333  case 67: // Y4X2
3334  a = 2;
3335  b = 4;
3336  c = 0;
3337  break;
3338  case 68: // Y4Z2
3339  a = 0;
3340  b = 4;
3341  c = 2;
3342  break;
3343  case 69: // Z4X2
3344  a = 2;
3345  b = 0;
3346  c = 4;
3347  break;
3348  case 70: // Z4Y2
3349  a = 0;
3350  b = 2;
3351  c = 4;
3352  break;
3353  case 71: // X4YZ
3354  a = 4;
3355  b = 1;
3356  c = 1;
3357  break;
3358  case 72: // Y4XZ
3359  a = 1;
3360  b = 4;
3361  c = 1;
3362  break;
3363  case 73: // Z4XY
3364  a = 1;
3365  b = 1;
3366  c = 4;
3367  break;
3368  case 74: // X3Y3
3369  a = 3;
3370  b = 3;
3371  c = 0;
3372  break;
3373  case 75: // X3Z3
3374  a = 3;
3375  b = 0;
3376  c = 3;
3377  break;
3378  case 76: // Y3Z3
3379  a = 0;
3380  b = 3;
3381  c = 3;
3382  break;
3383  case 77: // X3Y2Z
3384  a = 3;
3385  b = 2;
3386  c = 1;
3387  break;
3388  case 78: // X3Z2Y
3389  a = 3;
3390  b = 1;
3391  c = 2;
3392  break;
3393  case 79: // Y3X2Z
3394  a = 2;
3395  b = 3;
3396  c = 1;
3397  break;
3398  case 80: // Y3Z2X
3399  a = 1;
3400  b = 3;
3401  c = 2;
3402  break;
3403  case 81: // Z3X2Y
3404  a = 2;
3405  b = 1;
3406  c = 3;
3407  break;
3408  case 82: // Z3Y2X
3409  a = 1;
3410  b = 2;
3411  c = 3;
3412  break;
3413  case 83: // X2Y2Z2
3414  a = 2;
3415  b = 2;
3416  c = 2;
3417  break;
3418 
3419  default:
3420  std::cerr << "CartesianTensor::getABC() - Incorrect index." << std::endl;
3421  APP_ABORT("");
3422  break;
3423  }
3424 }
3425 
3426 #endif
Fixed-size array.
Definition: OhmmsTinyMeta.h:30
int Lmax
maximum angular momentum for the center
void getABC(int n, int &a, int &b, int &c)
std::vector< hess_type > hessXYZ
void evaluateTest(const Point_t &p)
std::vector< value_type > XYZ
values XYZ
GGG_t getGGGYlm(int lm) const
int size() const
const double pi
Definition: Standard.h:56
void evaluateAll(const Point_t &p)
makes a table of and their gradients up to Lmax.
std::vector< value_type > NormFactor
Normalization factors.
The template parameters.
MakeReturn< BinaryNode< FnPow, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t, typename CreateLeaf< Vector< T2, C2 > >::Leaf_t > >::Expression_t pow(const Vector< T1, C1 > &l, const Vector< T2, C2 > &r)
Tensor<T,D> class for D by D tensor.
Definition: OhmmsTinyMeta.h:32
MakeReturn< UnaryNode< FnArcTan, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t > >::Expression_t atan(const Vector< T1, C1 > &l)
void evaluateWithHessian(const Point_t &p)
makes a table of and their gradients and hessians up to Lmax.
#define APP_ABORT(msg)
Widely used but deprecated fatal error macros from legacy code.
Definition: AppAbort.h:27
Point_t getGradYlm(int lm) const
int lmax() const
void evaluateThirdDerivOnly(const Point_t &p)
makes a table of Third derivatives of
CartesianTensor(const int l_max)
constructor
MakeReturn< UnaryNode< FnSqrt, typename CreateLeaf< Vector< T1, C1 > >::Leaf_t > >::Expression_t sqrt(const Vector< T1, C1 > &l)
Tensor_t getHessYlm(int lm) const
std::vector< ggg_type > gggXYZ
std::vector< Point_t > gradXYZ
void evaluateWithThirdDeriv(const Point_t &p)
makes a table of and their gradients and hessians and third derivatives up to Lmax.
QMCTraits::FullPrecRealType value_type
std::vector< value_type > laplXYZ
void evaluate(const Point_t &p)
makes a table of and their gradients up to Lmax.
value_type getYlm(int lm) const
value_type getLaplYlm(int lm) const
int DFactorial(int num)