Psi4
dcd.h
Go to the documentation of this file.
1 /*
2  * @BEGIN LICENSE
3  *
4  * Psi4: an open-source quantum chemistry software package
5  *
6  * Copyright (c) 2007-2019 The Psi4 Developers.
7  *
8  * The copyrights for code used from other parties are included in
9  * the corresponding files.
10  *
11  * This file is part of Psi4.
12  *
13  * Psi4 is free software; you can redistribute it and/or modify
14  * it under the terms of the GNU Lesser General Public License as published by
15  * the Free Software Foundation, version 3.
16  *
17  * Psi4 is distributed in the hope that it will be useful,
18  * but WITHOUT ANY WARRANTY; without even the implied warranty of
19  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20  * GNU Lesser General Public License for more details.
21  *
22  * You should have received a copy of the GNU Lesser General Public License along
23  * with Psi4; if not, write to the Free Software Foundation, Inc.,
24  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
25  *
26  * @END LICENSE
27  */
28 
29 #include <map>
30 
42 class DCD {
43  private:
45  int nsub_;
49  int ***dcr_;
51  int **gng_;
53  std::map<int, int> bits_to_subgroup_;
71 
72  public:
77  DCD(int pg) {
78  C1_operators_ = nullptr;
79  C2_z_operators_ = nullptr;
80  C2_y_operators_ = nullptr;
81  C2_x_operators_ = nullptr;
82  D2_operators_ = nullptr;
83  Ci_operators_ = nullptr;
84  Cs_xy_operators_ = nullptr;
85  C2h_z_operators_ = nullptr;
86  Cs_xz_operators_ = nullptr;
87  C2h_y_operators_ = nullptr;
88  C2v_x_operators_ = nullptr;
89  Cs_yz_operators_ = nullptr;
90  C2h_x_operators_ = nullptr;
91  C2v_y_operators_ = nullptr;
92  C2v_z_operators_ = nullptr;
93  D2h_operators_ = nullptr;
94  if (pg == 0) { // C1
95  nsub_ = 1;
96  subgroup_dimensions_ = new int[1];
97 
98  C1_operators_ = new int[2];
99  C1_operators_[0] = 1; // 1 element(s) in the list
100  C1_operators_[1] = 0; // E
101  subgroup_dimensions_[0] = 1;
102 
103  bits_to_subgroup_[0] = 0; // C1
104 
105  dcr_ = new int **[nsub_];
106  for (int n = 0; n < nsub_; ++n) dcr_[n] = new int *[nsub_];
107  dcr_[0][0] = C1_operators_; // C1, C1 = C1
108 
109  gng_ = new int *[nsub_];
110  for (int n = 0; n < nsub_; ++n) gng_[n] = new int[nsub_];
111  gng_[0][0] = 0; // C1, C1 = C1
112  } else if (pg == 1) { // C2_z
113  nsub_ = 2;
114  subgroup_dimensions_ = new int[2];
115 
116  C1_operators_ = new int[2];
117  C1_operators_[0] = 1; // 1 element(s) in the list
118  C1_operators_[1] = 0; // E
119  subgroup_dimensions_[0] = 1;
120 
121  C2_z_operators_ = new int[3];
122  C2_z_operators_[0] = 2; // 2 element(s) in the list
123  C2_z_operators_[1] = 0; // E
124  C2_z_operators_[2] = 1; // C2z
125  subgroup_dimensions_[1] = 2;
126 
127  bits_to_subgroup_[0] = 0; // C1
128  bits_to_subgroup_[1] = 1; // C2_z
129 
130  dcr_ = new int **[nsub_];
131  for (int n = 0; n < nsub_; ++n) dcr_[n] = new int *[nsub_];
132  dcr_[0][0] = C2_z_operators_; // C1, C1 = C2_z
133  dcr_[0][1] = C1_operators_; // C1, C2_z = C1
134  dcr_[1][0] = C1_operators_; // C2_z, C1 = C1
135  dcr_[1][1] = C1_operators_; // C2_z, C2_z = C1
136 
137  gng_ = new int *[nsub_];
138  for (int n = 0; n < nsub_; ++n) gng_[n] = new int[nsub_];
139  gng_[0][0] = 0; // C1, C1 = C1
140  gng_[0][1] = 0; // C1, C2_z = C1
141  gng_[1][0] = 0; // C2_z, C1 = C1
142  gng_[1][1] = 1; // C2_z, C2_z = C2_z
143  } else if (pg == 2) { // C2_y
144  nsub_ = 2;
145  subgroup_dimensions_ = new int[2];
146 
147  C1_operators_ = new int[2];
148  C1_operators_[0] = 1; // 1 element(s) in the list
149  C1_operators_[1] = 0; // E
150  subgroup_dimensions_[0] = 1;
151 
152  C2_y_operators_ = new int[3];
153  C2_y_operators_[0] = 2; // 2 element(s) in the list
154  C2_y_operators_[1] = 0; // E
155  C2_y_operators_[2] = 1; // C2y
156  subgroup_dimensions_[1] = 2;
157 
158  bits_to_subgroup_[0] = 0; // C1
159  bits_to_subgroup_[2] = 1; // C2_y
160 
161  dcr_ = new int **[nsub_];
162  for (int n = 0; n < nsub_; ++n) dcr_[n] = new int *[nsub_];
163  dcr_[0][0] = C2_y_operators_; // C1, C1 = C2_y
164  dcr_[0][1] = C1_operators_; // C1, C2_y = C1
165  dcr_[1][0] = C1_operators_; // C2_y, C1 = C1
166  dcr_[1][1] = C1_operators_; // C2_y, C2_y = C1
167 
168  gng_ = new int *[nsub_];
169  for (int n = 0; n < nsub_; ++n) gng_[n] = new int[nsub_];
170  gng_[0][0] = 0; // C1, C1 = C1
171  gng_[0][1] = 0; // C1, C2_y = C1
172  gng_[1][0] = 0; // C2_y, C1 = C1
173  gng_[1][1] = 1; // C2_y, C2_y = C2_y
174  } else if (pg == 4) { // C2_x
175  nsub_ = 2;
176  subgroup_dimensions_ = new int[2];
177 
178  C1_operators_ = new int[2];
179  C1_operators_[0] = 1; // 1 element(s) in the list
180  C1_operators_[1] = 0; // E
181  subgroup_dimensions_[0] = 1;
182 
183  C2_x_operators_ = new int[3];
184  C2_x_operators_[0] = 2; // 2 element(s) in the list
185  C2_x_operators_[1] = 0; // E
186  C2_x_operators_[2] = 1; // C2x
187  subgroup_dimensions_[1] = 2;
188 
189  bits_to_subgroup_[0] = 0; // C1
190  bits_to_subgroup_[4] = 1; // C2_x
191 
192  dcr_ = new int **[nsub_];
193  for (int n = 0; n < nsub_; ++n) dcr_[n] = new int *[nsub_];
194  dcr_[0][0] = C2_x_operators_; // C1, C1 = C2_x
195  dcr_[0][1] = C1_operators_; // C1, C2_x = C1
196  dcr_[1][0] = C1_operators_; // C2_x, C1 = C1
197  dcr_[1][1] = C1_operators_; // C2_x, C2_x = C1
198 
199  gng_ = new int *[nsub_];
200  for (int n = 0; n < nsub_; ++n) gng_[n] = new int[nsub_];
201  gng_[0][0] = 0; // C1, C1 = C1
202  gng_[0][1] = 0; // C1, C2_x = C1
203  gng_[1][0] = 0; // C2_x, C1 = C1
204  gng_[1][1] = 1; // C2_x, C2_x = C2_x
205  } else if (pg == 7) { // D2
206  nsub_ = 5;
207  subgroup_dimensions_ = new int[5];
208 
209  C1_operators_ = new int[2];
210  C1_operators_[0] = 1; // 1 element(s) in the list
211  C1_operators_[1] = 0; // E
212  subgroup_dimensions_[0] = 1;
213 
214  C2_z_operators_ = new int[3];
215  C2_z_operators_[0] = 2; // 2 element(s) in the list
216  C2_z_operators_[1] = 0; // E
217  C2_z_operators_[2] = 1; // C2z
218  subgroup_dimensions_[1] = 2;
219 
220  C2_y_operators_ = new int[3];
221  C2_y_operators_[0] = 2; // 2 element(s) in the list
222  C2_y_operators_[1] = 0; // E
223  C2_y_operators_[2] = 2; // C2y
224  subgroup_dimensions_[2] = 2;
225 
226  C2_x_operators_ = new int[3];
227  C2_x_operators_[0] = 2; // 2 element(s) in the list
228  C2_x_operators_[1] = 0; // E
229  C2_x_operators_[2] = 3; // C2x
230  subgroup_dimensions_[3] = 2;
231 
232  D2_operators_ = new int[5];
233  D2_operators_[0] = 4; // 4 element(s) in the list
234  D2_operators_[1] = 0; // E
235  D2_operators_[2] = 1; // C2z
236  D2_operators_[3] = 2; // C2y
237  D2_operators_[4] = 3; // C2x
238  subgroup_dimensions_[4] = 4;
239 
240  bits_to_subgroup_[0] = 0; // C1
241  bits_to_subgroup_[1] = 1; // C2_z
242  bits_to_subgroup_[2] = 2; // C2_y
243  bits_to_subgroup_[4] = 3; // C2_x
244  bits_to_subgroup_[7] = 4; // D2
245 
246  dcr_ = new int **[nsub_];
247  for (int n = 0; n < nsub_; ++n) dcr_[n] = new int *[nsub_];
248  dcr_[0][0] = D2_operators_; // C1, C1 = D2
249  dcr_[0][1] = C2_y_operators_; // C1, C2_z = C2_y
250  dcr_[0][2] = C2_z_operators_; // C1, C2_y = C2_z
251  dcr_[0][3] = C2_z_operators_; // C1, C2_x = C2_z
252  dcr_[0][4] = C1_operators_; // C1, D2 = C1
253  dcr_[1][0] = C2_y_operators_; // C2_z, C1 = C2_y
254  dcr_[1][1] = C2_y_operators_; // C2_z, C2_z = C2_y
255  dcr_[1][2] = C1_operators_; // C2_z, C2_y = C1
256  dcr_[1][3] = C1_operators_; // C2_z, C2_x = C1
257  dcr_[1][4] = C1_operators_; // C2_z, D2 = C1
258  dcr_[2][0] = C2_z_operators_; // C2_y, C1 = C2_z
259  dcr_[2][1] = C1_operators_; // C2_y, C2_z = C1
260  dcr_[2][2] = C2_z_operators_; // C2_y, C2_y = C2_z
261  dcr_[2][3] = C1_operators_; // C2_y, C2_x = C1
262  dcr_[2][4] = C1_operators_; // C2_y, D2 = C1
263  dcr_[3][0] = C2_z_operators_; // C2_x, C1 = C2_z
264  dcr_[3][1] = C1_operators_; // C2_x, C2_z = C1
265  dcr_[3][2] = C1_operators_; // C2_x, C2_y = C1
266  dcr_[3][3] = C2_z_operators_; // C2_x, C2_x = C2_z
267  dcr_[3][4] = C1_operators_; // C2_x, D2 = C1
268  dcr_[4][0] = C1_operators_; // D2, C1 = C1
269  dcr_[4][1] = C1_operators_; // D2, C2_z = C1
270  dcr_[4][2] = C1_operators_; // D2, C2_y = C1
271  dcr_[4][3] = C1_operators_; // D2, C2_x = C1
272  dcr_[4][4] = C1_operators_; // D2, D2 = C1
273 
274  gng_ = new int *[nsub_];
275  for (int n = 0; n < nsub_; ++n) gng_[n] = new int[nsub_];
276  gng_[0][0] = 0; // C1, C1 = C1
277  gng_[0][1] = 0; // C1, C2_z = C1
278  gng_[0][2] = 0; // C1, C2_y = C1
279  gng_[0][3] = 0; // C1, C2_x = C1
280  gng_[0][4] = 0; // C1, D2 = C1
281  gng_[1][0] = 0; // C2_z, C1 = C1
282  gng_[1][1] = 1; // C2_z, C2_z = C2_z
283  gng_[1][2] = 0; // C2_z, C2_y = C1
284  gng_[1][3] = 0; // C2_z, C2_x = C1
285  gng_[1][4] = 1; // C2_z, D2 = C2_z
286  gng_[2][0] = 0; // C2_y, C1 = C1
287  gng_[2][1] = 0; // C2_y, C2_z = C1
288  gng_[2][2] = 2; // C2_y, C2_y = C2_y
289  gng_[2][3] = 0; // C2_y, C2_x = C1
290  gng_[2][4] = 2; // C2_y, D2 = C2_y
291  gng_[3][0] = 0; // C2_x, C1 = C1
292  gng_[3][1] = 0; // C2_x, C2_z = C1
293  gng_[3][2] = 0; // C2_x, C2_y = C1
294  gng_[3][3] = 3; // C2_x, C2_x = C2_x
295  gng_[3][4] = 3; // C2_x, D2 = C2_x
296  gng_[4][0] = 0; // D2, C1 = C1
297  gng_[4][1] = 1; // D2, C2_z = C2_z
298  gng_[4][2] = 2; // D2, C2_y = C2_y
299  gng_[4][3] = 3; // D2, C2_x = C2_x
300  gng_[4][4] = 4; // D2, D2 = D2
301  } else if (pg == 8) { // Ci
302  nsub_ = 2;
303  subgroup_dimensions_ = new int[2];
304 
305  C1_operators_ = new int[2];
306  C1_operators_[0] = 1; // 1 element(s) in the list
307  C1_operators_[1] = 0; // E
308  subgroup_dimensions_[0] = 1;
309 
310  Ci_operators_ = new int[3];
311  Ci_operators_[0] = 2; // 2 element(s) in the list
312  Ci_operators_[1] = 0; // E
313  Ci_operators_[2] = 1; // i
314  subgroup_dimensions_[1] = 2;
315 
316  bits_to_subgroup_[0] = 0; // C1
317  bits_to_subgroup_[8] = 1; // Ci
318 
319  dcr_ = new int **[nsub_];
320  for (int n = 0; n < nsub_; ++n) dcr_[n] = new int *[nsub_];
321  dcr_[0][0] = Ci_operators_; // C1, C1 = Ci
322  dcr_[0][1] = C1_operators_; // C1, Ci = C1
323  dcr_[1][0] = C1_operators_; // Ci, C1 = C1
324  dcr_[1][1] = C1_operators_; // Ci, Ci = C1
325 
326  gng_ = new int *[nsub_];
327  for (int n = 0; n < nsub_; ++n) gng_[n] = new int[nsub_];
328  gng_[0][0] = 0; // C1, C1 = C1
329  gng_[0][1] = 0; // C1, Ci = C1
330  gng_[1][0] = 0; // Ci, C1 = C1
331  gng_[1][1] = 1; // Ci, Ci = Ci
332  } else if (pg == 16) { // Cs_xy
333  nsub_ = 2;
334  subgroup_dimensions_ = new int[2];
335 
336  C1_operators_ = new int[2];
337  C1_operators_[0] = 1; // 1 element(s) in the list
338  C1_operators_[1] = 0; // E
339  subgroup_dimensions_[0] = 1;
340 
341  Cs_xy_operators_ = new int[3];
342  Cs_xy_operators_[0] = 2; // 2 element(s) in the list
343  Cs_xy_operators_[1] = 0; // E
344  Cs_xy_operators_[2] = 1; // Sxy
345  subgroup_dimensions_[1] = 2;
346 
347  bits_to_subgroup_[0] = 0; // C1
348  bits_to_subgroup_[16] = 1; // Cs_xy
349 
350  dcr_ = new int **[nsub_];
351  for (int n = 0; n < nsub_; ++n) dcr_[n] = new int *[nsub_];
352  dcr_[0][0] = Cs_xy_operators_; // C1, C1 = Cs_xy
353  dcr_[0][1] = C1_operators_; // C1, Cs_xy = C1
354  dcr_[1][0] = C1_operators_; // Cs_xy, C1 = C1
355  dcr_[1][1] = C1_operators_; // Cs_xy, Cs_xy = C1
356 
357  gng_ = new int *[nsub_];
358  for (int n = 0; n < nsub_; ++n) gng_[n] = new int[nsub_];
359  gng_[0][0] = 0; // C1, C1 = C1
360  gng_[0][1] = 0; // C1, Cs_xy = C1
361  gng_[1][0] = 0; // Cs_xy, C1 = C1
362  gng_[1][1] = 1; // Cs_xy, Cs_xy = Cs_xy
363  } else if (pg == 25) { // C2h_z
364  nsub_ = 5;
365  subgroup_dimensions_ = new int[5];
366 
367  C1_operators_ = new int[2];
368  C1_operators_[0] = 1; // 1 element(s) in the list
369  C1_operators_[1] = 0; // E
370  subgroup_dimensions_[0] = 1;
371 
372  C2_z_operators_ = new int[3];
373  C2_z_operators_[0] = 2; // 2 element(s) in the list
374  C2_z_operators_[1] = 0; // E
375  C2_z_operators_[2] = 1; // C2z
376  subgroup_dimensions_[1] = 2;
377 
378  Ci_operators_ = new int[3];
379  Ci_operators_[0] = 2; // 2 element(s) in the list
380  Ci_operators_[1] = 0; // E
381  Ci_operators_[2] = 2; // i
382  subgroup_dimensions_[2] = 2;
383 
384  Cs_xy_operators_ = new int[3];
385  Cs_xy_operators_[0] = 2; // 2 element(s) in the list
386  Cs_xy_operators_[1] = 0; // E
387  Cs_xy_operators_[2] = 3; // Sxy
388  subgroup_dimensions_[3] = 2;
389 
390  C2h_z_operators_ = new int[5];
391  C2h_z_operators_[0] = 4; // 4 element(s) in the list
392  C2h_z_operators_[1] = 0; // E
393  C2h_z_operators_[2] = 1; // C2z
394  C2h_z_operators_[3] = 2; // i
395  C2h_z_operators_[4] = 3; // Sxy
396  subgroup_dimensions_[4] = 4;
397 
398  bits_to_subgroup_[0] = 0; // C1
399  bits_to_subgroup_[1] = 1; // C2_z
400  bits_to_subgroup_[8] = 2; // Ci
401  bits_to_subgroup_[16] = 3; // Cs_xy
402  bits_to_subgroup_[25] = 4; // C2h_z
403 
404  dcr_ = new int **[nsub_];
405  for (int n = 0; n < nsub_; ++n) dcr_[n] = new int *[nsub_];
406  dcr_[0][0] = C2h_z_operators_; // C1, C1 = C2h_z
407  dcr_[0][1] = Ci_operators_; // C1, C2_z = Ci
408  dcr_[0][2] = C2_z_operators_; // C1, Ci = C2_z
409  dcr_[0][3] = C2_z_operators_; // C1, Cs_xy = C2_z
410  dcr_[0][4] = C1_operators_; // C1, C2h_z = C1
411  dcr_[1][0] = Ci_operators_; // C2_z, C1 = Ci
412  dcr_[1][1] = Ci_operators_; // C2_z, C2_z = Ci
413  dcr_[1][2] = C1_operators_; // C2_z, Ci = C1
414  dcr_[1][3] = C1_operators_; // C2_z, Cs_xy = C1
415  dcr_[1][4] = C1_operators_; // C2_z, C2h_z = C1
416  dcr_[2][0] = C2_z_operators_; // Ci, C1 = C2_z
417  dcr_[2][1] = C1_operators_; // Ci, C2_z = C1
418  dcr_[2][2] = C2_z_operators_; // Ci, Ci = C2_z
419  dcr_[2][3] = C1_operators_; // Ci, Cs_xy = C1
420  dcr_[2][4] = C1_operators_; // Ci, C2h_z = C1
421  dcr_[3][0] = C2_z_operators_; // Cs_xy, C1 = C2_z
422  dcr_[3][1] = C1_operators_; // Cs_xy, C2_z = C1
423  dcr_[3][2] = C1_operators_; // Cs_xy, Ci = C1
424  dcr_[3][3] = C2_z_operators_; // Cs_xy, Cs_xy = C2_z
425  dcr_[3][4] = C1_operators_; // Cs_xy, C2h_z = C1
426  dcr_[4][0] = C1_operators_; // C2h_z, C1 = C1
427  dcr_[4][1] = C1_operators_; // C2h_z, C2_z = C1
428  dcr_[4][2] = C1_operators_; // C2h_z, Ci = C1
429  dcr_[4][3] = C1_operators_; // C2h_z, Cs_xy = C1
430  dcr_[4][4] = C1_operators_; // C2h_z, C2h_z = C1
431 
432  gng_ = new int *[nsub_];
433  for (int n = 0; n < nsub_; ++n) gng_[n] = new int[nsub_];
434  gng_[0][0] = 0; // C1, C1 = C1
435  gng_[0][1] = 0; // C1, C2_z = C1
436  gng_[0][2] = 0; // C1, Ci = C1
437  gng_[0][3] = 0; // C1, Cs_xy = C1
438  gng_[0][4] = 0; // C1, C2h_z = C1
439  gng_[1][0] = 0; // C2_z, C1 = C1
440  gng_[1][1] = 1; // C2_z, C2_z = C2_z
441  gng_[1][2] = 0; // C2_z, Ci = C1
442  gng_[1][3] = 0; // C2_z, Cs_xy = C1
443  gng_[1][4] = 1; // C2_z, C2h_z = C2_z
444  gng_[2][0] = 0; // Ci, C1 = C1
445  gng_[2][1] = 0; // Ci, C2_z = C1
446  gng_[2][2] = 2; // Ci, Ci = Ci
447  gng_[2][3] = 0; // Ci, Cs_xy = C1
448  gng_[2][4] = 2; // Ci, C2h_z = Ci
449  gng_[3][0] = 0; // Cs_xy, C1 = C1
450  gng_[3][1] = 0; // Cs_xy, C2_z = C1
451  gng_[3][2] = 0; // Cs_xy, Ci = C1
452  gng_[3][3] = 3; // Cs_xy, Cs_xy = Cs_xy
453  gng_[3][4] = 3; // Cs_xy, C2h_z = Cs_xy
454  gng_[4][0] = 0; // C2h_z, C1 = C1
455  gng_[4][1] = 1; // C2h_z, C2_z = C2_z
456  gng_[4][2] = 2; // C2h_z, Ci = Ci
457  gng_[4][3] = 3; // C2h_z, Cs_xy = Cs_xy
458  gng_[4][4] = 4; // C2h_z, C2h_z = C2h_z
459  } else if (pg == 32) { // Cs_xz
460  nsub_ = 2;
461  subgroup_dimensions_ = new int[2];
462 
463  C1_operators_ = new int[2];
464  C1_operators_[0] = 1; // 1 element(s) in the list
465  C1_operators_[1] = 0; // E
466  subgroup_dimensions_[0] = 1;
467 
468  Cs_xz_operators_ = new int[3];
469  Cs_xz_operators_[0] = 2; // 2 element(s) in the list
470  Cs_xz_operators_[1] = 0; // E
471  Cs_xz_operators_[2] = 1; // Sxz
472  subgroup_dimensions_[1] = 2;
473 
474  bits_to_subgroup_[0] = 0; // C1
475  bits_to_subgroup_[32] = 1; // Cs_xz
476 
477  dcr_ = new int **[nsub_];
478  for (int n = 0; n < nsub_; ++n) dcr_[n] = new int *[nsub_];
479  dcr_[0][0] = Cs_xz_operators_; // C1, C1 = Cs_xz
480  dcr_[0][1] = C1_operators_; // C1, Cs_xz = C1
481  dcr_[1][0] = C1_operators_; // Cs_xz, C1 = C1
482  dcr_[1][1] = C1_operators_; // Cs_xz, Cs_xz = C1
483 
484  gng_ = new int *[nsub_];
485  for (int n = 0; n < nsub_; ++n) gng_[n] = new int[nsub_];
486  gng_[0][0] = 0; // C1, C1 = C1
487  gng_[0][1] = 0; // C1, Cs_xz = C1
488  gng_[1][0] = 0; // Cs_xz, C1 = C1
489  gng_[1][1] = 1; // Cs_xz, Cs_xz = Cs_xz
490  } else if (pg == 42) { // C2h_y
491  nsub_ = 5;
492  subgroup_dimensions_ = new int[5];
493 
494  C1_operators_ = new int[2];
495  C1_operators_[0] = 1; // 1 element(s) in the list
496  C1_operators_[1] = 0; // E
497  subgroup_dimensions_[0] = 1;
498 
499  C2_y_operators_ = new int[3];
500  C2_y_operators_[0] = 2; // 2 element(s) in the list
501  C2_y_operators_[1] = 0; // E
502  C2_y_operators_[2] = 1; // C2y
503  subgroup_dimensions_[1] = 2;
504 
505  Ci_operators_ = new int[3];
506  Ci_operators_[0] = 2; // 2 element(s) in the list
507  Ci_operators_[1] = 0; // E
508  Ci_operators_[2] = 2; // i
509  subgroup_dimensions_[2] = 2;
510 
511  Cs_xz_operators_ = new int[3];
512  Cs_xz_operators_[0] = 2; // 2 element(s) in the list
513  Cs_xz_operators_[1] = 0; // E
514  Cs_xz_operators_[2] = 3; // Sxz
515  subgroup_dimensions_[3] = 2;
516 
517  C2h_y_operators_ = new int[5];
518  C2h_y_operators_[0] = 4; // 4 element(s) in the list
519  C2h_y_operators_[1] = 0; // E
520  C2h_y_operators_[2] = 1; // C2y
521  C2h_y_operators_[3] = 2; // i
522  C2h_y_operators_[4] = 3; // Sxz
523  subgroup_dimensions_[4] = 4;
524 
525  bits_to_subgroup_[0] = 0; // C1
526  bits_to_subgroup_[2] = 1; // C2_y
527  bits_to_subgroup_[8] = 2; // Ci
528  bits_to_subgroup_[32] = 3; // Cs_xz
529  bits_to_subgroup_[42] = 4; // C2h_y
530 
531  dcr_ = new int **[nsub_];
532  for (int n = 0; n < nsub_; ++n) dcr_[n] = new int *[nsub_];
533  dcr_[0][0] = C2h_y_operators_; // C1, C1 = C2h_y
534  dcr_[0][1] = Ci_operators_; // C1, C2_y = Ci
535  dcr_[0][2] = C2_y_operators_; // C1, Ci = C2_y
536  dcr_[0][3] = C2_y_operators_; // C1, Cs_xz = C2_y
537  dcr_[0][4] = C1_operators_; // C1, C2h_y = C1
538  dcr_[1][0] = Ci_operators_; // C2_y, C1 = Ci
539  dcr_[1][1] = Ci_operators_; // C2_y, C2_y = Ci
540  dcr_[1][2] = C1_operators_; // C2_y, Ci = C1
541  dcr_[1][3] = C1_operators_; // C2_y, Cs_xz = C1
542  dcr_[1][4] = C1_operators_; // C2_y, C2h_y = C1
543  dcr_[2][0] = C2_y_operators_; // Ci, C1 = C2_y
544  dcr_[2][1] = C1_operators_; // Ci, C2_y = C1
545  dcr_[2][2] = C2_y_operators_; // Ci, Ci = C2_y
546  dcr_[2][3] = C1_operators_; // Ci, Cs_xz = C1
547  dcr_[2][4] = C1_operators_; // Ci, C2h_y = C1
548  dcr_[3][0] = C2_y_operators_; // Cs_xz, C1 = C2_y
549  dcr_[3][1] = C1_operators_; // Cs_xz, C2_y = C1
550  dcr_[3][2] = C1_operators_; // Cs_xz, Ci = C1
551  dcr_[3][3] = C2_y_operators_; // Cs_xz, Cs_xz = C2_y
552  dcr_[3][4] = C1_operators_; // Cs_xz, C2h_y = C1
553  dcr_[4][0] = C1_operators_; // C2h_y, C1 = C1
554  dcr_[4][1] = C1_operators_; // C2h_y, C2_y = C1
555  dcr_[4][2] = C1_operators_; // C2h_y, Ci = C1
556  dcr_[4][3] = C1_operators_; // C2h_y, Cs_xz = C1
557  dcr_[4][4] = C1_operators_; // C2h_y, C2h_y = C1
558 
559  gng_ = new int *[nsub_];
560  for (int n = 0; n < nsub_; ++n) gng_[n] = new int[nsub_];
561  gng_[0][0] = 0; // C1, C1 = C1
562  gng_[0][1] = 0; // C1, C2_y = C1
563  gng_[0][2] = 0; // C1, Ci = C1
564  gng_[0][3] = 0; // C1, Cs_xz = C1
565  gng_[0][4] = 0; // C1, C2h_y = C1
566  gng_[1][0] = 0; // C2_y, C1 = C1
567  gng_[1][1] = 1; // C2_y, C2_y = C2_y
568  gng_[1][2] = 0; // C2_y, Ci = C1
569  gng_[1][3] = 0; // C2_y, Cs_xz = C1
570  gng_[1][4] = 1; // C2_y, C2h_y = C2_y
571  gng_[2][0] = 0; // Ci, C1 = C1
572  gng_[2][1] = 0; // Ci, C2_y = C1
573  gng_[2][2] = 2; // Ci, Ci = Ci
574  gng_[2][3] = 0; // Ci, Cs_xz = C1
575  gng_[2][4] = 2; // Ci, C2h_y = Ci
576  gng_[3][0] = 0; // Cs_xz, C1 = C1
577  gng_[3][1] = 0; // Cs_xz, C2_y = C1
578  gng_[3][2] = 0; // Cs_xz, Ci = C1
579  gng_[3][3] = 3; // Cs_xz, Cs_xz = Cs_xz
580  gng_[3][4] = 3; // Cs_xz, C2h_y = Cs_xz
581  gng_[4][0] = 0; // C2h_y, C1 = C1
582  gng_[4][1] = 1; // C2h_y, C2_y = C2_y
583  gng_[4][2] = 2; // C2h_y, Ci = Ci
584  gng_[4][3] = 3; // C2h_y, Cs_xz = Cs_xz
585  gng_[4][4] = 4; // C2h_y, C2h_y = C2h_y
586  } else if (pg == 52) { // C2v_x
587  nsub_ = 5;
588  subgroup_dimensions_ = new int[5];
589 
590  C1_operators_ = new int[2];
591  C1_operators_[0] = 1; // 1 element(s) in the list
592  C1_operators_[1] = 0; // E
593  subgroup_dimensions_[0] = 1;
594 
595  C2_x_operators_ = new int[3];
596  C2_x_operators_[0] = 2; // 2 element(s) in the list
597  C2_x_operators_[1] = 0; // E
598  C2_x_operators_[2] = 1; // C2x
599  subgroup_dimensions_[1] = 2;
600 
601  Cs_xy_operators_ = new int[3];
602  Cs_xy_operators_[0] = 2; // 2 element(s) in the list
603  Cs_xy_operators_[1] = 0; // E
604  Cs_xy_operators_[2] = 2; // Sxy
605  subgroup_dimensions_[2] = 2;
606 
607  Cs_xz_operators_ = new int[3];
608  Cs_xz_operators_[0] = 2; // 2 element(s) in the list
609  Cs_xz_operators_[1] = 0; // E
610  Cs_xz_operators_[2] = 3; // Sxz
611  subgroup_dimensions_[3] = 2;
612 
613  C2v_x_operators_ = new int[5];
614  C2v_x_operators_[0] = 4; // 4 element(s) in the list
615  C2v_x_operators_[1] = 0; // E
616  C2v_x_operators_[2] = 1; // C2x
617  C2v_x_operators_[3] = 2; // Sxy
618  C2v_x_operators_[4] = 3; // Sxz
619  subgroup_dimensions_[4] = 4;
620 
621  bits_to_subgroup_[0] = 0; // C1
622  bits_to_subgroup_[4] = 1; // C2_x
623  bits_to_subgroup_[16] = 2; // Cs_xy
624  bits_to_subgroup_[32] = 3; // Cs_xz
625  bits_to_subgroup_[52] = 4; // C2v_x
626 
627  dcr_ = new int **[nsub_];
628  for (int n = 0; n < nsub_; ++n) dcr_[n] = new int *[nsub_];
629  dcr_[0][0] = C2v_x_operators_; // C1, C1 = C2v_x
630  dcr_[0][1] = Cs_xy_operators_; // C1, C2_x = Cs_xy
631  dcr_[0][2] = C2_x_operators_; // C1, Cs_xy = C2_x
632  dcr_[0][3] = C2_x_operators_; // C1, Cs_xz = C2_x
633  dcr_[0][4] = C1_operators_; // C1, C2v_x = C1
634  dcr_[1][0] = Cs_xy_operators_; // C2_x, C1 = Cs_xy
635  dcr_[1][1] = Cs_xy_operators_; // C2_x, C2_x = Cs_xy
636  dcr_[1][2] = C1_operators_; // C2_x, Cs_xy = C1
637  dcr_[1][3] = C1_operators_; // C2_x, Cs_xz = C1
638  dcr_[1][4] = C1_operators_; // C2_x, C2v_x = C1
639  dcr_[2][0] = C2_x_operators_; // Cs_xy, C1 = C2_x
640  dcr_[2][1] = C1_operators_; // Cs_xy, C2_x = C1
641  dcr_[2][2] = C2_x_operators_; // Cs_xy, Cs_xy = C2_x
642  dcr_[2][3] = C1_operators_; // Cs_xy, Cs_xz = C1
643  dcr_[2][4] = C1_operators_; // Cs_xy, C2v_x = C1
644  dcr_[3][0] = C2_x_operators_; // Cs_xz, C1 = C2_x
645  dcr_[3][1] = C1_operators_; // Cs_xz, C2_x = C1
646  dcr_[3][2] = C1_operators_; // Cs_xz, Cs_xy = C1
647  dcr_[3][3] = C2_x_operators_; // Cs_xz, Cs_xz = C2_x
648  dcr_[3][4] = C1_operators_; // Cs_xz, C2v_x = C1
649  dcr_[4][0] = C1_operators_; // C2v_x, C1 = C1
650  dcr_[4][1] = C1_operators_; // C2v_x, C2_x = C1
651  dcr_[4][2] = C1_operators_; // C2v_x, Cs_xy = C1
652  dcr_[4][3] = C1_operators_; // C2v_x, Cs_xz = C1
653  dcr_[4][4] = C1_operators_; // C2v_x, C2v_x = C1
654 
655  gng_ = new int *[nsub_];
656  for (int n = 0; n < nsub_; ++n) gng_[n] = new int[nsub_];
657  gng_[0][0] = 0; // C1, C1 = C1
658  gng_[0][1] = 0; // C1, C2_x = C1
659  gng_[0][2] = 0; // C1, Cs_xy = C1
660  gng_[0][3] = 0; // C1, Cs_xz = C1
661  gng_[0][4] = 0; // C1, C2v_x = C1
662  gng_[1][0] = 0; // C2_x, C1 = C1
663  gng_[1][1] = 1; // C2_x, C2_x = C2_x
664  gng_[1][2] = 0; // C2_x, Cs_xy = C1
665  gng_[1][3] = 0; // C2_x, Cs_xz = C1
666  gng_[1][4] = 1; // C2_x, C2v_x = C2_x
667  gng_[2][0] = 0; // Cs_xy, C1 = C1
668  gng_[2][1] = 0; // Cs_xy, C2_x = C1
669  gng_[2][2] = 2; // Cs_xy, Cs_xy = Cs_xy
670  gng_[2][3] = 0; // Cs_xy, Cs_xz = C1
671  gng_[2][4] = 2; // Cs_xy, C2v_x = Cs_xy
672  gng_[3][0] = 0; // Cs_xz, C1 = C1
673  gng_[3][1] = 0; // Cs_xz, C2_x = C1
674  gng_[3][2] = 0; // Cs_xz, Cs_xy = C1
675  gng_[3][3] = 3; // Cs_xz, Cs_xz = Cs_xz
676  gng_[3][4] = 3; // Cs_xz, C2v_x = Cs_xz
677  gng_[4][0] = 0; // C2v_x, C1 = C1
678  gng_[4][1] = 1; // C2v_x, C2_x = C2_x
679  gng_[4][2] = 2; // C2v_x, Cs_xy = Cs_xy
680  gng_[4][3] = 3; // C2v_x, Cs_xz = Cs_xz
681  gng_[4][4] = 4; // C2v_x, C2v_x = C2v_x
682  } else if (pg == 64) { // Cs_yz
683  nsub_ = 2;
684  subgroup_dimensions_ = new int[2];
685 
686  C1_operators_ = new int[2];
687  C1_operators_[0] = 1; // 1 element(s) in the list
688  C1_operators_[1] = 0; // E
689  subgroup_dimensions_[0] = 1;
690 
691  Cs_yz_operators_ = new int[3];
692  Cs_yz_operators_[0] = 2; // 2 element(s) in the list
693  Cs_yz_operators_[1] = 0; // E
694  Cs_yz_operators_[2] = 1; // Syz
695  subgroup_dimensions_[1] = 2;
696 
697  bits_to_subgroup_[0] = 0; // C1
698  bits_to_subgroup_[64] = 1; // Cs_yz
699 
700  dcr_ = new int **[nsub_];
701  for (int n = 0; n < nsub_; ++n) dcr_[n] = new int *[nsub_];
702  dcr_[0][0] = Cs_yz_operators_; // C1, C1 = Cs_yz
703  dcr_[0][1] = C1_operators_; // C1, Cs_yz = C1
704  dcr_[1][0] = C1_operators_; // Cs_yz, C1 = C1
705  dcr_[1][1] = C1_operators_; // Cs_yz, Cs_yz = C1
706 
707  gng_ = new int *[nsub_];
708  for (int n = 0; n < nsub_; ++n) gng_[n] = new int[nsub_];
709  gng_[0][0] = 0; // C1, C1 = C1
710  gng_[0][1] = 0; // C1, Cs_yz = C1
711  gng_[1][0] = 0; // Cs_yz, C1 = C1
712  gng_[1][1] = 1; // Cs_yz, Cs_yz = Cs_yz
713  } else if (pg == 76) { // C2h_x
714  nsub_ = 5;
715  subgroup_dimensions_ = new int[5];
716 
717  C1_operators_ = new int[2];
718  C1_operators_[0] = 1; // 1 element(s) in the list
719  C1_operators_[1] = 0; // E
720  subgroup_dimensions_[0] = 1;
721 
722  C2_x_operators_ = new int[3];
723  C2_x_operators_[0] = 2; // 2 element(s) in the list
724  C2_x_operators_[1] = 0; // E
725  C2_x_operators_[2] = 1; // C2x
726  subgroup_dimensions_[1] = 2;
727 
728  Ci_operators_ = new int[3];
729  Ci_operators_[0] = 2; // 2 element(s) in the list
730  Ci_operators_[1] = 0; // E
731  Ci_operators_[2] = 2; // i
732  subgroup_dimensions_[2] = 2;
733 
734  Cs_yz_operators_ = new int[3];
735  Cs_yz_operators_[0] = 2; // 2 element(s) in the list
736  Cs_yz_operators_[1] = 0; // E
737  Cs_yz_operators_[2] = 3; // Syz
738  subgroup_dimensions_[3] = 2;
739 
740  C2h_x_operators_ = new int[5];
741  C2h_x_operators_[0] = 4; // 4 element(s) in the list
742  C2h_x_operators_[1] = 0; // E
743  C2h_x_operators_[2] = 1; // C2x
744  C2h_x_operators_[3] = 2; // i
745  C2h_x_operators_[4] = 3; // Syz
746  subgroup_dimensions_[4] = 4;
747 
748  bits_to_subgroup_[0] = 0; // C1
749  bits_to_subgroup_[4] = 1; // C2_x
750  bits_to_subgroup_[8] = 2; // Ci
751  bits_to_subgroup_[64] = 3; // Cs_yz
752  bits_to_subgroup_[76] = 4; // C2h_x
753 
754  dcr_ = new int **[nsub_];
755  for (int n = 0; n < nsub_; ++n) dcr_[n] = new int *[nsub_];
756  dcr_[0][0] = C2h_x_operators_; // C1, C1 = C2h_x
757  dcr_[0][1] = Ci_operators_; // C1, C2_x = Ci
758  dcr_[0][2] = C2_x_operators_; // C1, Ci = C2_x
759  dcr_[0][3] = C2_x_operators_; // C1, Cs_yz = C2_x
760  dcr_[0][4] = C1_operators_; // C1, C2h_x = C1
761  dcr_[1][0] = Ci_operators_; // C2_x, C1 = Ci
762  dcr_[1][1] = Ci_operators_; // C2_x, C2_x = Ci
763  dcr_[1][2] = C1_operators_; // C2_x, Ci = C1
764  dcr_[1][3] = C1_operators_; // C2_x, Cs_yz = C1
765  dcr_[1][4] = C1_operators_; // C2_x, C2h_x = C1
766  dcr_[2][0] = C2_x_operators_; // Ci, C1 = C2_x
767  dcr_[2][1] = C1_operators_; // Ci, C2_x = C1
768  dcr_[2][2] = C2_x_operators_; // Ci, Ci = C2_x
769  dcr_[2][3] = C1_operators_; // Ci, Cs_yz = C1
770  dcr_[2][4] = C1_operators_; // Ci, C2h_x = C1
771  dcr_[3][0] = C2_x_operators_; // Cs_yz, C1 = C2_x
772  dcr_[3][1] = C1_operators_; // Cs_yz, C2_x = C1
773  dcr_[3][2] = C1_operators_; // Cs_yz, Ci = C1
774  dcr_[3][3] = C2_x_operators_; // Cs_yz, Cs_yz = C2_x
775  dcr_[3][4] = C1_operators_; // Cs_yz, C2h_x = C1
776  dcr_[4][0] = C1_operators_; // C2h_x, C1 = C1
777  dcr_[4][1] = C1_operators_; // C2h_x, C2_x = C1
778  dcr_[4][2] = C1_operators_; // C2h_x, Ci = C1
779  dcr_[4][3] = C1_operators_; // C2h_x, Cs_yz = C1
780  dcr_[4][4] = C1_operators_; // C2h_x, C2h_x = C1
781 
782  gng_ = new int *[nsub_];
783  for (int n = 0; n < nsub_; ++n) gng_[n] = new int[nsub_];
784  gng_[0][0] = 0; // C1, C1 = C1
785  gng_[0][1] = 0; // C1, C2_x = C1
786  gng_[0][2] = 0; // C1, Ci = C1
787  gng_[0][3] = 0; // C1, Cs_yz = C1
788  gng_[0][4] = 0; // C1, C2h_x = C1
789  gng_[1][0] = 0; // C2_x, C1 = C1
790  gng_[1][1] = 1; // C2_x, C2_x = C2_x
791  gng_[1][2] = 0; // C2_x, Ci = C1
792  gng_[1][3] = 0; // C2_x, Cs_yz = C1
793  gng_[1][4] = 1; // C2_x, C2h_x = C2_x
794  gng_[2][0] = 0; // Ci, C1 = C1
795  gng_[2][1] = 0; // Ci, C2_x = C1
796  gng_[2][2] = 2; // Ci, Ci = Ci
797  gng_[2][3] = 0; // Ci, Cs_yz = C1
798  gng_[2][4] = 2; // Ci, C2h_x = Ci
799  gng_[3][0] = 0; // Cs_yz, C1 = C1
800  gng_[3][1] = 0; // Cs_yz, C2_x = C1
801  gng_[3][2] = 0; // Cs_yz, Ci = C1
802  gng_[3][3] = 3; // Cs_yz, Cs_yz = Cs_yz
803  gng_[3][4] = 3; // Cs_yz, C2h_x = Cs_yz
804  gng_[4][0] = 0; // C2h_x, C1 = C1
805  gng_[4][1] = 1; // C2h_x, C2_x = C2_x
806  gng_[4][2] = 2; // C2h_x, Ci = Ci
807  gng_[4][3] = 3; // C2h_x, Cs_yz = Cs_yz
808  gng_[4][4] = 4; // C2h_x, C2h_x = C2h_x
809  } else if (pg == 82) { // C2v_y
810  nsub_ = 5;
811  subgroup_dimensions_ = new int[5];
812 
813  C1_operators_ = new int[2];
814  C1_operators_[0] = 1; // 1 element(s) in the list
815  C1_operators_[1] = 0; // E
816  subgroup_dimensions_[0] = 1;
817 
818  C2_y_operators_ = new int[3];
819  C2_y_operators_[0] = 2; // 2 element(s) in the list
820  C2_y_operators_[1] = 0; // E
821  C2_y_operators_[2] = 1; // C2y
822  subgroup_dimensions_[1] = 2;
823 
824  Cs_xy_operators_ = new int[3];
825  Cs_xy_operators_[0] = 2; // 2 element(s) in the list
826  Cs_xy_operators_[1] = 0; // E
827  Cs_xy_operators_[2] = 2; // Sxy
828  subgroup_dimensions_[2] = 2;
829 
830  Cs_yz_operators_ = new int[3];
831  Cs_yz_operators_[0] = 2; // 2 element(s) in the list
832  Cs_yz_operators_[1] = 0; // E
833  Cs_yz_operators_[2] = 3; // Syz
834  subgroup_dimensions_[3] = 2;
835 
836  C2v_y_operators_ = new int[5];
837  C2v_y_operators_[0] = 4; // 4 element(s) in the list
838  C2v_y_operators_[1] = 0; // E
839  C2v_y_operators_[2] = 1; // C2y
840  C2v_y_operators_[3] = 2; // Sxy
841  C2v_y_operators_[4] = 3; // Syz
842  subgroup_dimensions_[4] = 4;
843 
844  bits_to_subgroup_[0] = 0; // C1
845  bits_to_subgroup_[2] = 1; // C2_y
846  bits_to_subgroup_[16] = 2; // Cs_xy
847  bits_to_subgroup_[64] = 3; // Cs_yz
848  bits_to_subgroup_[82] = 4; // C2v_y
849 
850  dcr_ = new int **[nsub_];
851  for (int n = 0; n < nsub_; ++n) dcr_[n] = new int *[nsub_];
852  dcr_[0][0] = C2v_y_operators_; // C1, C1 = C2v_y
853  dcr_[0][1] = Cs_xy_operators_; // C1, C2_y = Cs_xy
854  dcr_[0][2] = C2_y_operators_; // C1, Cs_xy = C2_y
855  dcr_[0][3] = C2_y_operators_; // C1, Cs_yz = C2_y
856  dcr_[0][4] = C1_operators_; // C1, C2v_y = C1
857  dcr_[1][0] = Cs_xy_operators_; // C2_y, C1 = Cs_xy
858  dcr_[1][1] = Cs_xy_operators_; // C2_y, C2_y = Cs_xy
859  dcr_[1][2] = C1_operators_; // C2_y, Cs_xy = C1
860  dcr_[1][3] = C1_operators_; // C2_y, Cs_yz = C1
861  dcr_[1][4] = C1_operators_; // C2_y, C2v_y = C1
862  dcr_[2][0] = C2_y_operators_; // Cs_xy, C1 = C2_y
863  dcr_[2][1] = C1_operators_; // Cs_xy, C2_y = C1
864  dcr_[2][2] = C2_y_operators_; // Cs_xy, Cs_xy = C2_y
865  dcr_[2][3] = C1_operators_; // Cs_xy, Cs_yz = C1
866  dcr_[2][4] = C1_operators_; // Cs_xy, C2v_y = C1
867  dcr_[3][0] = C2_y_operators_; // Cs_yz, C1 = C2_y
868  dcr_[3][1] = C1_operators_; // Cs_yz, C2_y = C1
869  dcr_[3][2] = C1_operators_; // Cs_yz, Cs_xy = C1
870  dcr_[3][3] = C2_y_operators_; // Cs_yz, Cs_yz = C2_y
871  dcr_[3][4] = C1_operators_; // Cs_yz, C2v_y = C1
872  dcr_[4][0] = C1_operators_; // C2v_y, C1 = C1
873  dcr_[4][1] = C1_operators_; // C2v_y, C2_y = C1
874  dcr_[4][2] = C1_operators_; // C2v_y, Cs_xy = C1
875  dcr_[4][3] = C1_operators_; // C2v_y, Cs_yz = C1
876  dcr_[4][4] = C1_operators_; // C2v_y, C2v_y = C1
877 
878  gng_ = new int *[nsub_];
879  for (int n = 0; n < nsub_; ++n) gng_[n] = new int[nsub_];
880  gng_[0][0] = 0; // C1, C1 = C1
881  gng_[0][1] = 0; // C1, C2_y = C1
882  gng_[0][2] = 0; // C1, Cs_xy = C1
883  gng_[0][3] = 0; // C1, Cs_yz = C1
884  gng_[0][4] = 0; // C1, C2v_y = C1
885  gng_[1][0] = 0; // C2_y, C1 = C1
886  gng_[1][1] = 1; // C2_y, C2_y = C2_y
887  gng_[1][2] = 0; // C2_y, Cs_xy = C1
888  gng_[1][3] = 0; // C2_y, Cs_yz = C1
889  gng_[1][4] = 1; // C2_y, C2v_y = C2_y
890  gng_[2][0] = 0; // Cs_xy, C1 = C1
891  gng_[2][1] = 0; // Cs_xy, C2_y = C1
892  gng_[2][2] = 2; // Cs_xy, Cs_xy = Cs_xy
893  gng_[2][3] = 0; // Cs_xy, Cs_yz = C1
894  gng_[2][4] = 2; // Cs_xy, C2v_y = Cs_xy
895  gng_[3][0] = 0; // Cs_yz, C1 = C1
896  gng_[3][1] = 0; // Cs_yz, C2_y = C1
897  gng_[3][2] = 0; // Cs_yz, Cs_xy = C1
898  gng_[3][3] = 3; // Cs_yz, Cs_yz = Cs_yz
899  gng_[3][4] = 3; // Cs_yz, C2v_y = Cs_yz
900  gng_[4][0] = 0; // C2v_y, C1 = C1
901  gng_[4][1] = 1; // C2v_y, C2_y = C2_y
902  gng_[4][2] = 2; // C2v_y, Cs_xy = Cs_xy
903  gng_[4][3] = 3; // C2v_y, Cs_yz = Cs_yz
904  gng_[4][4] = 4; // C2v_y, C2v_y = C2v_y
905  } else if (pg == 97) { // C2v_z
906  nsub_ = 5;
907  subgroup_dimensions_ = new int[5];
908 
909  C1_operators_ = new int[2];
910  C1_operators_[0] = 1; // 1 element(s) in the list
911  C1_operators_[1] = 0; // E
912  subgroup_dimensions_[0] = 1;
913 
914  C2_z_operators_ = new int[3];
915  C2_z_operators_[0] = 2; // 2 element(s) in the list
916  C2_z_operators_[1] = 0; // E
917  C2_z_operators_[2] = 1; // C2z
918  subgroup_dimensions_[1] = 2;
919 
920  Cs_xz_operators_ = new int[3];
921  Cs_xz_operators_[0] = 2; // 2 element(s) in the list
922  Cs_xz_operators_[1] = 0; // E
923  Cs_xz_operators_[2] = 2; // Sxz
924  subgroup_dimensions_[2] = 2;
925 
926  Cs_yz_operators_ = new int[3];
927  Cs_yz_operators_[0] = 2; // 2 element(s) in the list
928  Cs_yz_operators_[1] = 0; // E
929  Cs_yz_operators_[2] = 3; // Syz
930  subgroup_dimensions_[3] = 2;
931 
932  C2v_z_operators_ = new int[5];
933  C2v_z_operators_[0] = 4; // 4 element(s) in the list
934  C2v_z_operators_[1] = 0; // E
935  C2v_z_operators_[2] = 1; // C2z
936  C2v_z_operators_[3] = 2; // Sxz
937  C2v_z_operators_[4] = 3; // Syz
938  subgroup_dimensions_[4] = 4;
939 
940  bits_to_subgroup_[0] = 0; // C1
941  bits_to_subgroup_[1] = 1; // C2_z
942  bits_to_subgroup_[32] = 2; // Cs_xz
943  bits_to_subgroup_[64] = 3; // Cs_yz
944  bits_to_subgroup_[97] = 4; // C2v_z
945 
946  dcr_ = new int **[nsub_];
947  for (int n = 0; n < nsub_; ++n) dcr_[n] = new int *[nsub_];
948  dcr_[0][0] = C2v_z_operators_; // C1, C1 = C2v_z
949  dcr_[0][1] = Cs_xz_operators_; // C1, C2_z = Cs_xz
950  dcr_[0][2] = C2_z_operators_; // C1, Cs_xz = C2_z
951  dcr_[0][3] = C2_z_operators_; // C1, Cs_yz = C2_z
952  dcr_[0][4] = C1_operators_; // C1, C2v_z = C1
953  dcr_[1][0] = Cs_xz_operators_; // C2_z, C1 = Cs_xz
954  dcr_[1][1] = Cs_xz_operators_; // C2_z, C2_z = Cs_xz
955  dcr_[1][2] = C1_operators_; // C2_z, Cs_xz = C1
956  dcr_[1][3] = C1_operators_; // C2_z, Cs_yz = C1
957  dcr_[1][4] = C1_operators_; // C2_z, C2v_z = C1
958  dcr_[2][0] = C2_z_operators_; // Cs_xz, C1 = C2_z
959  dcr_[2][1] = C1_operators_; // Cs_xz, C2_z = C1
960  dcr_[2][2] = C2_z_operators_; // Cs_xz, Cs_xz = C2_z
961  dcr_[2][3] = C1_operators_; // Cs_xz, Cs_yz = C1
962  dcr_[2][4] = C1_operators_; // Cs_xz, C2v_z = C1
963  dcr_[3][0] = C2_z_operators_; // Cs_yz, C1 = C2_z
964  dcr_[3][1] = C1_operators_; // Cs_yz, C2_z = C1
965  dcr_[3][2] = C1_operators_; // Cs_yz, Cs_xz = C1
966  dcr_[3][3] = C2_z_operators_; // Cs_yz, Cs_yz = C2_z
967  dcr_[3][4] = C1_operators_; // Cs_yz, C2v_z = C1
968  dcr_[4][0] = C1_operators_; // C2v_z, C1 = C1
969  dcr_[4][1] = C1_operators_; // C2v_z, C2_z = C1
970  dcr_[4][2] = C1_operators_; // C2v_z, Cs_xz = C1
971  dcr_[4][3] = C1_operators_; // C2v_z, Cs_yz = C1
972  dcr_[4][4] = C1_operators_; // C2v_z, C2v_z = C1
973 
974  gng_ = new int *[nsub_];
975  for (int n = 0; n < nsub_; ++n) gng_[n] = new int[nsub_];
976  gng_[0][0] = 0; // C1, C1 = C1
977  gng_[0][1] = 0; // C1, C2_z = C1
978  gng_[0][2] = 0; // C1, Cs_xz = C1
979  gng_[0][3] = 0; // C1, Cs_yz = C1
980  gng_[0][4] = 0; // C1, C2v_z = C1
981  gng_[1][0] = 0; // C2_z, C1 = C1
982  gng_[1][1] = 1; // C2_z, C2_z = C2_z
983  gng_[1][2] = 0; // C2_z, Cs_xz = C1
984  gng_[1][3] = 0; // C2_z, Cs_yz = C1
985  gng_[1][4] = 1; // C2_z, C2v_z = C2_z
986  gng_[2][0] = 0; // Cs_xz, C1 = C1
987  gng_[2][1] = 0; // Cs_xz, C2_z = C1
988  gng_[2][2] = 2; // Cs_xz, Cs_xz = Cs_xz
989  gng_[2][3] = 0; // Cs_xz, Cs_yz = C1
990  gng_[2][4] = 2; // Cs_xz, C2v_z = Cs_xz
991  gng_[3][0] = 0; // Cs_yz, C1 = C1
992  gng_[3][1] = 0; // Cs_yz, C2_z = C1
993  gng_[3][2] = 0; // Cs_yz, Cs_xz = C1
994  gng_[3][3] = 3; // Cs_yz, Cs_yz = Cs_yz
995  gng_[3][4] = 3; // Cs_yz, C2v_z = Cs_yz
996  gng_[4][0] = 0; // C2v_z, C1 = C1
997  gng_[4][1] = 1; // C2v_z, C2_z = C2_z
998  gng_[4][2] = 2; // C2v_z, Cs_xz = Cs_xz
999  gng_[4][3] = 3; // C2v_z, Cs_yz = Cs_yz
1000  gng_[4][4] = 4; // C2v_z, C2v_z = C2v_z
1001  } else if (pg == 127) { // D2h
1002  nsub_ = 16;
1003  subgroup_dimensions_ = new int[16];
1004 
1005  C1_operators_ = new int[2];
1006  C1_operators_[0] = 1; // 1 element(s) in the list
1007  C1_operators_[1] = 0; // E
1008  subgroup_dimensions_[0] = 1;
1009 
1010  C2_z_operators_ = new int[3];
1011  C2_z_operators_[0] = 2; // 2 element(s) in the list
1012  C2_z_operators_[1] = 0; // E
1013  C2_z_operators_[2] = 1; // C2z
1014  subgroup_dimensions_[1] = 2;
1015 
1016  C2_y_operators_ = new int[3];
1017  C2_y_operators_[0] = 2; // 2 element(s) in the list
1018  C2_y_operators_[1] = 0; // E
1019  C2_y_operators_[2] = 2; // C2y
1020  subgroup_dimensions_[2] = 2;
1021 
1022  C2_x_operators_ = new int[3];
1023  C2_x_operators_[0] = 2; // 2 element(s) in the list
1024  C2_x_operators_[1] = 0; // E
1025  C2_x_operators_[2] = 3; // C2x
1026  subgroup_dimensions_[3] = 2;
1027 
1028  D2_operators_ = new int[5];
1029  D2_operators_[0] = 4; // 4 element(s) in the list
1030  D2_operators_[1] = 0; // E
1031  D2_operators_[2] = 1; // C2z
1032  D2_operators_[3] = 2; // C2y
1033  D2_operators_[4] = 3; // C2x
1034  subgroup_dimensions_[4] = 4;
1035 
1036  Ci_operators_ = new int[3];
1037  Ci_operators_[0] = 2; // 2 element(s) in the list
1038  Ci_operators_[1] = 0; // E
1039  Ci_operators_[2] = 4; // i
1040  subgroup_dimensions_[5] = 2;
1041 
1042  Cs_xy_operators_ = new int[3];
1043  Cs_xy_operators_[0] = 2; // 2 element(s) in the list
1044  Cs_xy_operators_[1] = 0; // E
1045  Cs_xy_operators_[2] = 5; // Sxy
1046  subgroup_dimensions_[6] = 2;
1047 
1048  C2h_z_operators_ = new int[5];
1049  C2h_z_operators_[0] = 4; // 4 element(s) in the list
1050  C2h_z_operators_[1] = 0; // E
1051  C2h_z_operators_[2] = 1; // C2z
1052  C2h_z_operators_[3] = 4; // i
1053  C2h_z_operators_[4] = 5; // Sxy
1054  subgroup_dimensions_[7] = 4;
1055 
1056  Cs_xz_operators_ = new int[3];
1057  Cs_xz_operators_[0] = 2; // 2 element(s) in the list
1058  Cs_xz_operators_[1] = 0; // E
1059  Cs_xz_operators_[2] = 6; // Sxz
1060  subgroup_dimensions_[8] = 2;
1061 
1062  C2h_y_operators_ = new int[5];
1063  C2h_y_operators_[0] = 4; // 4 element(s) in the list
1064  C2h_y_operators_[1] = 0; // E
1065  C2h_y_operators_[2] = 2; // C2y
1066  C2h_y_operators_[3] = 4; // i
1067  C2h_y_operators_[4] = 6; // Sxz
1068  subgroup_dimensions_[9] = 4;
1069 
1070  C2v_x_operators_ = new int[5];
1071  C2v_x_operators_[0] = 4; // 4 element(s) in the list
1072  C2v_x_operators_[1] = 0; // E
1073  C2v_x_operators_[2] = 3; // C2x
1074  C2v_x_operators_[3] = 5; // Sxy
1075  C2v_x_operators_[4] = 6; // Sxz
1076  subgroup_dimensions_[10] = 4;
1077 
1078  Cs_yz_operators_ = new int[3];
1079  Cs_yz_operators_[0] = 2; // 2 element(s) in the list
1080  Cs_yz_operators_[1] = 0; // E
1081  Cs_yz_operators_[2] = 7; // Syz
1082  subgroup_dimensions_[11] = 2;
1083 
1084  C2h_x_operators_ = new int[5];
1085  C2h_x_operators_[0] = 4; // 4 element(s) in the list
1086  C2h_x_operators_[1] = 0; // E
1087  C2h_x_operators_[2] = 3; // C2x
1088  C2h_x_operators_[3] = 4; // i
1089  C2h_x_operators_[4] = 7; // Syz
1090  subgroup_dimensions_[12] = 4;
1091 
1092  C2v_y_operators_ = new int[5];
1093  C2v_y_operators_[0] = 4; // 4 element(s) in the list
1094  C2v_y_operators_[1] = 0; // E
1095  C2v_y_operators_[2] = 2; // C2y
1096  C2v_y_operators_[3] = 5; // Sxy
1097  C2v_y_operators_[4] = 7; // Syz
1098  subgroup_dimensions_[13] = 4;
1099 
1100  C2v_z_operators_ = new int[5];
1101  C2v_z_operators_[0] = 4; // 4 element(s) in the list
1102  C2v_z_operators_[1] = 0; // E
1103  C2v_z_operators_[2] = 1; // C2z
1104  C2v_z_operators_[3] = 6; // Sxz
1105  C2v_z_operators_[4] = 7; // Syz
1106  subgroup_dimensions_[14] = 4;
1107 
1108  D2h_operators_ = new int[9];
1109  D2h_operators_[0] = 8; // 8 element(s) in the list
1110  D2h_operators_[1] = 0; // E
1111  D2h_operators_[2] = 1; // C2z
1112  D2h_operators_[3] = 2; // C2y
1113  D2h_operators_[4] = 3; // C2x
1114  D2h_operators_[5] = 4; // i
1115  D2h_operators_[6] = 5; // Sxy
1116  D2h_operators_[7] = 6; // Sxz
1117  D2h_operators_[8] = 7; // Syz
1118  subgroup_dimensions_[15] = 8;
1119 
1120  bits_to_subgroup_[0] = 0; // C1
1121  bits_to_subgroup_[1] = 1; // C2_z
1122  bits_to_subgroup_[2] = 2; // C2_y
1123  bits_to_subgroup_[4] = 3; // C2_x
1124  bits_to_subgroup_[7] = 4; // D2
1125  bits_to_subgroup_[8] = 5; // Ci
1126  bits_to_subgroup_[16] = 6; // Cs_xy
1127  bits_to_subgroup_[25] = 7; // C2h_z
1128  bits_to_subgroup_[32] = 8; // Cs_xz
1129  bits_to_subgroup_[42] = 9; // C2h_y
1130  bits_to_subgroup_[52] = 10; // C2v_x
1131  bits_to_subgroup_[64] = 11; // Cs_yz
1132  bits_to_subgroup_[76] = 12; // C2h_x
1133  bits_to_subgroup_[82] = 13; // C2v_y
1134  bits_to_subgroup_[97] = 14; // C2v_z
1135  bits_to_subgroup_[127] = 15; // D2h
1136 
1137  dcr_ = new int **[nsub_];
1138  for (int n = 0; n < nsub_; ++n) dcr_[n] = new int *[nsub_];
1139  dcr_[0][0] = D2h_operators_; // C1, C1 = D2h
1140  dcr_[0][1] = C2h_y_operators_; // C1, C2_z = C2h_y
1141  dcr_[0][2] = C2h_z_operators_; // C1, C2_y = C2h_z
1142  dcr_[0][3] = C2h_z_operators_; // C1, C2_x = C2h_z
1143  dcr_[0][4] = Ci_operators_; // C1, D2 = Ci
1144  dcr_[0][5] = D2_operators_; // C1, Ci = D2
1145  dcr_[0][6] = D2_operators_; // C1, Cs_xy = D2
1146  dcr_[0][7] = C2_y_operators_; // C1, C2h_z = C2_y
1147  dcr_[0][8] = D2_operators_; // C1, Cs_xz = D2
1148  dcr_[0][9] = C2_z_operators_; // C1, C2h_y = C2_z
1149  dcr_[0][10] = C2_z_operators_; // C1, C2v_x = C2_z
1150  dcr_[0][11] = D2_operators_; // C1, Cs_yz = D2
1151  dcr_[0][12] = C2_z_operators_; // C1, C2h_x = C2_z
1152  dcr_[0][13] = C2_z_operators_; // C1, C2v_y = C2_z
1153  dcr_[0][14] = C2_y_operators_; // C1, C2v_z = C2_y
1154  dcr_[0][15] = C1_operators_; // C1, D2h = C1
1155  dcr_[1][0] = C2h_y_operators_; // C2_z, C1 = C2h_y
1156  dcr_[1][1] = C2h_y_operators_; // C2_z, C2_z = C2h_y
1157  dcr_[1][2] = Ci_operators_; // C2_z, C2_y = Ci
1158  dcr_[1][3] = Ci_operators_; // C2_z, C2_x = Ci
1159  dcr_[1][4] = Ci_operators_; // C2_z, D2 = Ci
1160  dcr_[1][5] = C2_y_operators_; // C2_z, Ci = C2_y
1161  dcr_[1][6] = C2_y_operators_; // C2_z, Cs_xy = C2_y
1162  dcr_[1][7] = C2_y_operators_; // C2_z, C2h_z = C2_y
1163  dcr_[1][8] = C2_y_operators_; // C2_z, Cs_xz = C2_y
1164  dcr_[1][9] = C1_operators_; // C2_z, C2h_y = C1
1165  dcr_[1][10] = C1_operators_; // C2_z, C2v_x = C1
1166  dcr_[1][11] = C2_y_operators_; // C2_z, Cs_yz = C2_y
1167  dcr_[1][12] = C1_operators_; // C2_z, C2h_x = C1
1168  dcr_[1][13] = C1_operators_; // C2_z, C2v_y = C1
1169  dcr_[1][14] = C2_y_operators_; // C2_z, C2v_z = C2_y
1170  dcr_[1][15] = C1_operators_; // C2_z, D2h = C1
1171  dcr_[2][0] = C2h_z_operators_; // C2_y, C1 = C2h_z
1172  dcr_[2][1] = Ci_operators_; // C2_y, C2_z = Ci
1173  dcr_[2][2] = C2h_z_operators_; // C2_y, C2_y = C2h_z
1174  dcr_[2][3] = Ci_operators_; // C2_y, C2_x = Ci
1175  dcr_[2][4] = Ci_operators_; // C2_y, D2 = Ci
1176  dcr_[2][5] = C2_z_operators_; // C2_y, Ci = C2_z
1177  dcr_[2][6] = C2_z_operators_; // C2_y, Cs_xy = C2_z
1178  dcr_[2][7] = C1_operators_; // C2_y, C2h_z = C1
1179  dcr_[2][8] = C2_z_operators_; // C2_y, Cs_xz = C2_z
1180  dcr_[2][9] = C2_z_operators_; // C2_y, C2h_y = C2_z
1181  dcr_[2][10] = C1_operators_; // C2_y, C2v_x = C1
1182  dcr_[2][11] = C2_z_operators_; // C2_y, Cs_yz = C2_z
1183  dcr_[2][12] = C1_operators_; // C2_y, C2h_x = C1
1184  dcr_[2][13] = C2_z_operators_; // C2_y, C2v_y = C2_z
1185  dcr_[2][14] = C1_operators_; // C2_y, C2v_z = C1
1186  dcr_[2][15] = C1_operators_; // C2_y, D2h = C1
1187  dcr_[3][0] = C2h_z_operators_; // C2_x, C1 = C2h_z
1188  dcr_[3][1] = Ci_operators_; // C2_x, C2_z = Ci
1189  dcr_[3][2] = Ci_operators_; // C2_x, C2_y = Ci
1190  dcr_[3][3] = C2h_z_operators_; // C2_x, C2_x = C2h_z
1191  dcr_[3][4] = Ci_operators_; // C2_x, D2 = Ci
1192  dcr_[3][5] = C2_z_operators_; // C2_x, Ci = C2_z
1193  dcr_[3][6] = C2_z_operators_; // C2_x, Cs_xy = C2_z
1194  dcr_[3][7] = C1_operators_; // C2_x, C2h_z = C1
1195  dcr_[3][8] = C2_z_operators_; // C2_x, Cs_xz = C2_z
1196  dcr_[3][9] = C1_operators_; // C2_x, C2h_y = C1
1197  dcr_[3][10] = C2_z_operators_; // C2_x, C2v_x = C2_z
1198  dcr_[3][11] = C2_z_operators_; // C2_x, Cs_yz = C2_z
1199  dcr_[3][12] = C2_z_operators_; // C2_x, C2h_x = C2_z
1200  dcr_[3][13] = C1_operators_; // C2_x, C2v_y = C1
1201  dcr_[3][14] = C1_operators_; // C2_x, C2v_z = C1
1202  dcr_[3][15] = C1_operators_; // C2_x, D2h = C1
1203  dcr_[4][0] = Ci_operators_; // D2, C1 = Ci
1204  dcr_[4][1] = Ci_operators_; // D2, C2_z = Ci
1205  dcr_[4][2] = Ci_operators_; // D2, C2_y = Ci
1206  dcr_[4][3] = Ci_operators_; // D2, C2_x = Ci
1207  dcr_[4][4] = Ci_operators_; // D2, D2 = Ci
1208  dcr_[4][5] = C1_operators_; // D2, Ci = C1
1209  dcr_[4][6] = C1_operators_; // D2, Cs_xy = C1
1210  dcr_[4][7] = C1_operators_; // D2, C2h_z = C1
1211  dcr_[4][8] = C1_operators_; // D2, Cs_xz = C1
1212  dcr_[4][9] = C1_operators_; // D2, C2h_y = C1
1213  dcr_[4][10] = C1_operators_; // D2, C2v_x = C1
1214  dcr_[4][11] = C1_operators_; // D2, Cs_yz = C1
1215  dcr_[4][12] = C1_operators_; // D2, C2h_x = C1
1216  dcr_[4][13] = C1_operators_; // D2, C2v_y = C1
1217  dcr_[4][14] = C1_operators_; // D2, C2v_z = C1
1218  dcr_[4][15] = C1_operators_; // D2, D2h = C1
1219  dcr_[5][0] = D2_operators_; // Ci, C1 = D2
1220  dcr_[5][1] = C2_y_operators_; // Ci, C2_z = C2_y
1221  dcr_[5][2] = C2_z_operators_; // Ci, C2_y = C2_z
1222  dcr_[5][3] = C2_z_operators_; // Ci, C2_x = C2_z
1223  dcr_[5][4] = C1_operators_; // Ci, D2 = C1
1224  dcr_[5][5] = D2_operators_; // Ci, Ci = D2
1225  dcr_[5][6] = C2_y_operators_; // Ci, Cs_xy = C2_y
1226  dcr_[5][7] = C2_y_operators_; // Ci, C2h_z = C2_y
1227  dcr_[5][8] = C2_z_operators_; // Ci, Cs_xz = C2_z
1228  dcr_[5][9] = C2_z_operators_; // Ci, C2h_y = C2_z
1229  dcr_[5][10] = C1_operators_; // Ci, C2v_x = C1
1230  dcr_[5][11] = C2_z_operators_; // Ci, Cs_yz = C2_z
1231  dcr_[5][12] = C2_z_operators_; // Ci, C2h_x = C2_z
1232  dcr_[5][13] = C1_operators_; // Ci, C2v_y = C1
1233  dcr_[5][14] = C1_operators_; // Ci, C2v_z = C1
1234  dcr_[5][15] = C1_operators_; // Ci, D2h = C1
1235  dcr_[6][0] = D2_operators_; // Cs_xy, C1 = D2
1236  dcr_[6][1] = C2_y_operators_; // Cs_xy, C2_z = C2_y
1237  dcr_[6][2] = C2_z_operators_; // Cs_xy, C2_y = C2_z
1238  dcr_[6][3] = C2_z_operators_; // Cs_xy, C2_x = C2_z
1239  dcr_[6][4] = C1_operators_; // Cs_xy, D2 = C1
1240  dcr_[6][5] = C2_y_operators_; // Cs_xy, Ci = C2_y
1241  dcr_[6][6] = D2_operators_; // Cs_xy, Cs_xy = D2
1242  dcr_[6][7] = C2_y_operators_; // Cs_xy, C2h_z = C2_y
1243  dcr_[6][8] = C2_z_operators_; // Cs_xy, Cs_xz = C2_z
1244  dcr_[6][9] = C1_operators_; // Cs_xy, C2h_y = C1
1245  dcr_[6][10] = C2_z_operators_; // Cs_xy, C2v_x = C2_z
1246  dcr_[6][11] = C2_z_operators_; // Cs_xy, Cs_yz = C2_z
1247  dcr_[6][12] = C1_operators_; // Cs_xy, C2h_x = C1
1248  dcr_[6][13] = C2_z_operators_; // Cs_xy, C2v_y = C2_z
1249  dcr_[6][14] = C1_operators_; // Cs_xy, C2v_z = C1
1250  dcr_[6][15] = C1_operators_; // Cs_xy, D2h = C1
1251  dcr_[7][0] = C2_y_operators_; // C2h_z, C1 = C2_y
1252  dcr_[7][1] = C2_y_operators_; // C2h_z, C2_z = C2_y
1253  dcr_[7][2] = C1_operators_; // C2h_z, C2_y = C1
1254  dcr_[7][3] = C1_operators_; // C2h_z, C2_x = C1
1255  dcr_[7][4] = C1_operators_; // C2h_z, D2 = C1
1256  dcr_[7][5] = C2_y_operators_; // C2h_z, Ci = C2_y
1257  dcr_[7][6] = C2_y_operators_; // C2h_z, Cs_xy = C2_y
1258  dcr_[7][7] = C2_y_operators_; // C2h_z, C2h_z = C2_y
1259  dcr_[7][8] = C1_operators_; // C2h_z, Cs_xz = C1
1260  dcr_[7][9] = C1_operators_; // C2h_z, C2h_y = C1
1261  dcr_[7][10] = C1_operators_; // C2h_z, C2v_x = C1
1262  dcr_[7][11] = C1_operators_; // C2h_z, Cs_yz = C1
1263  dcr_[7][12] = C1_operators_; // C2h_z, C2h_x = C1
1264  dcr_[7][13] = C1_operators_; // C2h_z, C2v_y = C1
1265  dcr_[7][14] = C1_operators_; // C2h_z, C2v_z = C1
1266  dcr_[7][15] = C1_operators_; // C2h_z, D2h = C1
1267  dcr_[8][0] = D2_operators_; // Cs_xz, C1 = D2
1268  dcr_[8][1] = C2_y_operators_; // Cs_xz, C2_z = C2_y
1269  dcr_[8][2] = C2_z_operators_; // Cs_xz, C2_y = C2_z
1270  dcr_[8][3] = C2_z_operators_; // Cs_xz, C2_x = C2_z
1271  dcr_[8][4] = C1_operators_; // Cs_xz, D2 = C1
1272  dcr_[8][5] = C2_z_operators_; // Cs_xz, Ci = C2_z
1273  dcr_[8][6] = C2_z_operators_; // Cs_xz, Cs_xy = C2_z
1274  dcr_[8][7] = C1_operators_; // Cs_xz, C2h_z = C1
1275  dcr_[8][8] = D2_operators_; // Cs_xz, Cs_xz = D2
1276  dcr_[8][9] = C2_z_operators_; // Cs_xz, C2h_y = C2_z
1277  dcr_[8][10] = C2_z_operators_; // Cs_xz, C2v_x = C2_z
1278  dcr_[8][11] = C2_y_operators_; // Cs_xz, Cs_yz = C2_y
1279  dcr_[8][12] = C1_operators_; // Cs_xz, C2h_x = C1
1280  dcr_[8][13] = C1_operators_; // Cs_xz, C2v_y = C1
1281  dcr_[8][14] = C2_y_operators_; // Cs_xz, C2v_z = C2_y
1282  dcr_[8][15] = C1_operators_; // Cs_xz, D2h = C1
1283  dcr_[9][0] = C2_z_operators_; // C2h_y, C1 = C2_z
1284  dcr_[9][1] = C1_operators_; // C2h_y, C2_z = C1
1285  dcr_[9][2] = C2_z_operators_; // C2h_y, C2_y = C2_z
1286  dcr_[9][3] = C1_operators_; // C2h_y, C2_x = C1
1287  dcr_[9][4] = C1_operators_; // C2h_y, D2 = C1
1288  dcr_[9][5] = C2_z_operators_; // C2h_y, Ci = C2_z
1289  dcr_[9][6] = C1_operators_; // C2h_y, Cs_xy = C1
1290  dcr_[9][7] = C1_operators_; // C2h_y, C2h_z = C1
1291  dcr_[9][8] = C2_z_operators_; // C2h_y, Cs_xz = C2_z
1292  dcr_[9][9] = C2_z_operators_; // C2h_y, C2h_y = C2_z
1293  dcr_[9][10] = C1_operators_; // C2h_y, C2v_x = C1
1294  dcr_[9][11] = C1_operators_; // C2h_y, Cs_yz = C1
1295  dcr_[9][12] = C1_operators_; // C2h_y, C2h_x = C1
1296  dcr_[9][13] = C1_operators_; // C2h_y, C2v_y = C1
1297  dcr_[9][14] = C1_operators_; // C2h_y, C2v_z = C1
1298  dcr_[9][15] = C1_operators_; // C2h_y, D2h = C1
1299  dcr_[10][0] = C2_z_operators_; // C2v_x, C1 = C2_z
1300  dcr_[10][1] = C1_operators_; // C2v_x, C2_z = C1
1301  dcr_[10][2] = C1_operators_; // C2v_x, C2_y = C1
1302  dcr_[10][3] = C2_z_operators_; // C2v_x, C2_x = C2_z
1303  dcr_[10][4] = C1_operators_; // C2v_x, D2 = C1
1304  dcr_[10][5] = C1_operators_; // C2v_x, Ci = C1
1305  dcr_[10][6] = C2_z_operators_; // C2v_x, Cs_xy = C2_z
1306  dcr_[10][7] = C1_operators_; // C2v_x, C2h_z = C1
1307  dcr_[10][8] = C2_z_operators_; // C2v_x, Cs_xz = C2_z
1308  dcr_[10][9] = C1_operators_; // C2v_x, C2h_y = C1
1309  dcr_[10][10] = C2_z_operators_; // C2v_x, C2v_x = C2_z
1310  dcr_[10][11] = C1_operators_; // C2v_x, Cs_yz = C1
1311  dcr_[10][12] = C1_operators_; // C2v_x, C2h_x = C1
1312  dcr_[10][13] = C1_operators_; // C2v_x, C2v_y = C1
1313  dcr_[10][14] = C1_operators_; // C2v_x, C2v_z = C1
1314  dcr_[10][15] = C1_operators_; // C2v_x, D2h = C1
1315  dcr_[11][0] = D2_operators_; // Cs_yz, C1 = D2
1316  dcr_[11][1] = C2_y_operators_; // Cs_yz, C2_z = C2_y
1317  dcr_[11][2] = C2_z_operators_; // Cs_yz, C2_y = C2_z
1318  dcr_[11][3] = C2_z_operators_; // Cs_yz, C2_x = C2_z
1319  dcr_[11][4] = C1_operators_; // Cs_yz, D2 = C1
1320  dcr_[11][5] = C2_z_operators_; // Cs_yz, Ci = C2_z
1321  dcr_[11][6] = C2_z_operators_; // Cs_yz, Cs_xy = C2_z
1322  dcr_[11][7] = C1_operators_; // Cs_yz, C2h_z = C1
1323  dcr_[11][8] = C2_y_operators_; // Cs_yz, Cs_xz = C2_y
1324  dcr_[11][9] = C1_operators_; // Cs_yz, C2h_y = C1
1325  dcr_[11][10] = C1_operators_; // Cs_yz, C2v_x = C1
1326  dcr_[11][11] = D2_operators_; // Cs_yz, Cs_yz = D2
1327  dcr_[11][12] = C2_z_operators_; // Cs_yz, C2h_x = C2_z
1328  dcr_[11][13] = C2_z_operators_; // Cs_yz, C2v_y = C2_z
1329  dcr_[11][14] = C2_y_operators_; // Cs_yz, C2v_z = C2_y
1330  dcr_[11][15] = C1_operators_; // Cs_yz, D2h = C1
1331  dcr_[12][0] = C2_z_operators_; // C2h_x, C1 = C2_z
1332  dcr_[12][1] = C1_operators_; // C2h_x, C2_z = C1
1333  dcr_[12][2] = C1_operators_; // C2h_x, C2_y = C1
1334  dcr_[12][3] = C2_z_operators_; // C2h_x, C2_x = C2_z
1335  dcr_[12][4] = C1_operators_; // C2h_x, D2 = C1
1336  dcr_[12][5] = C2_z_operators_; // C2h_x, Ci = C2_z
1337  dcr_[12][6] = C1_operators_; // C2h_x, Cs_xy = C1
1338  dcr_[12][7] = C1_operators_; // C2h_x, C2h_z = C1
1339  dcr_[12][8] = C1_operators_; // C2h_x, Cs_xz = C1
1340  dcr_[12][9] = C1_operators_; // C2h_x, C2h_y = C1
1341  dcr_[12][10] = C1_operators_; // C2h_x, C2v_x = C1
1342  dcr_[12][11] = C2_z_operators_; // C2h_x, Cs_yz = C2_z
1343  dcr_[12][12] = C2_z_operators_; // C2h_x, C2h_x = C2_z
1344  dcr_[12][13] = C1_operators_; // C2h_x, C2v_y = C1
1345  dcr_[12][14] = C1_operators_; // C2h_x, C2v_z = C1
1346  dcr_[12][15] = C1_operators_; // C2h_x, D2h = C1
1347  dcr_[13][0] = C2_z_operators_; // C2v_y, C1 = C2_z
1348  dcr_[13][1] = C1_operators_; // C2v_y, C2_z = C1
1349  dcr_[13][2] = C2_z_operators_; // C2v_y, C2_y = C2_z
1350  dcr_[13][3] = C1_operators_; // C2v_y, C2_x = C1
1351  dcr_[13][4] = C1_operators_; // C2v_y, D2 = C1
1352  dcr_[13][5] = C1_operators_; // C2v_y, Ci = C1
1353  dcr_[13][6] = C2_z_operators_; // C2v_y, Cs_xy = C2_z
1354  dcr_[13][7] = C1_operators_; // C2v_y, C2h_z = C1
1355  dcr_[13][8] = C1_operators_; // C2v_y, Cs_xz = C1
1356  dcr_[13][9] = C1_operators_; // C2v_y, C2h_y = C1
1357  dcr_[13][10] = C1_operators_; // C2v_y, C2v_x = C1
1358  dcr_[13][11] = C2_z_operators_; // C2v_y, Cs_yz = C2_z
1359  dcr_[13][12] = C1_operators_; // C2v_y, C2h_x = C1
1360  dcr_[13][13] = C2_z_operators_; // C2v_y, C2v_y = C2_z
1361  dcr_[13][14] = C1_operators_; // C2v_y, C2v_z = C1
1362  dcr_[13][15] = C1_operators_; // C2v_y, D2h = C1
1363  dcr_[14][0] = C2_y_operators_; // C2v_z, C1 = C2_y
1364  dcr_[14][1] = C2_y_operators_; // C2v_z, C2_z = C2_y
1365  dcr_[14][2] = C1_operators_; // C2v_z, C2_y = C1
1366  dcr_[14][3] = C1_operators_; // C2v_z, C2_x = C1
1367  dcr_[14][4] = C1_operators_; // C2v_z, D2 = C1
1368  dcr_[14][5] = C1_operators_; // C2v_z, Ci = C1
1369  dcr_[14][6] = C1_operators_; // C2v_z, Cs_xy = C1
1370  dcr_[14][7] = C1_operators_; // C2v_z, C2h_z = C1
1371  dcr_[14][8] = C2_y_operators_; // C2v_z, Cs_xz = C2_y
1372  dcr_[14][9] = C1_operators_; // C2v_z, C2h_y = C1
1373  dcr_[14][10] = C1_operators_; // C2v_z, C2v_x = C1
1374  dcr_[14][11] = C2_y_operators_; // C2v_z, Cs_yz = C2_y
1375  dcr_[14][12] = C1_operators_; // C2v_z, C2h_x = C1
1376  dcr_[14][13] = C1_operators_; // C2v_z, C2v_y = C1
1377  dcr_[14][14] = C2_y_operators_; // C2v_z, C2v_z = C2_y
1378  dcr_[14][15] = C1_operators_; // C2v_z, D2h = C1
1379  dcr_[15][0] = C1_operators_; // D2h, C1 = C1
1380  dcr_[15][1] = C1_operators_; // D2h, C2_z = C1
1381  dcr_[15][2] = C1_operators_; // D2h, C2_y = C1
1382  dcr_[15][3] = C1_operators_; // D2h, C2_x = C1
1383  dcr_[15][4] = C1_operators_; // D2h, D2 = C1
1384  dcr_[15][5] = C1_operators_; // D2h, Ci = C1
1385  dcr_[15][6] = C1_operators_; // D2h, Cs_xy = C1
1386  dcr_[15][7] = C1_operators_; // D2h, C2h_z = C1
1387  dcr_[15][8] = C1_operators_; // D2h, Cs_xz = C1
1388  dcr_[15][9] = C1_operators_; // D2h, C2h_y = C1
1389  dcr_[15][10] = C1_operators_; // D2h, C2v_x = C1
1390  dcr_[15][11] = C1_operators_; // D2h, Cs_yz = C1
1391  dcr_[15][12] = C1_operators_; // D2h, C2h_x = C1
1392  dcr_[15][13] = C1_operators_; // D2h, C2v_y = C1
1393  dcr_[15][14] = C1_operators_; // D2h, C2v_z = C1
1394  dcr_[15][15] = C1_operators_; // D2h, D2h = C1
1395 
1396  gng_ = new int *[nsub_];
1397  for (int n = 0; n < nsub_; ++n) gng_[n] = new int[nsub_];
1398  gng_[0][0] = 0; // C1, C1 = C1
1399  gng_[0][1] = 0; // C1, C2_z = C1
1400  gng_[0][2] = 0; // C1, C2_y = C1
1401  gng_[0][3] = 0; // C1, C2_x = C1
1402  gng_[0][4] = 0; // C1, D2 = C1
1403  gng_[0][5] = 0; // C1, Ci = C1
1404  gng_[0][6] = 0; // C1, Cs_xy = C1
1405  gng_[0][7] = 0; // C1, C2h_z = C1
1406  gng_[0][8] = 0; // C1, Cs_xz = C1
1407  gng_[0][9] = 0; // C1, C2h_y = C1
1408  gng_[0][10] = 0; // C1, C2v_x = C1
1409  gng_[0][11] = 0; // C1, Cs_yz = C1
1410  gng_[0][12] = 0; // C1, C2h_x = C1
1411  gng_[0][13] = 0; // C1, C2v_y = C1
1412  gng_[0][14] = 0; // C1, C2v_z = C1
1413  gng_[0][15] = 0; // C1, D2h = C1
1414  gng_[1][0] = 0; // C2_z, C1 = C1
1415  gng_[1][1] = 1; // C2_z, C2_z = C2_z
1416  gng_[1][2] = 0; // C2_z, C2_y = C1
1417  gng_[1][3] = 0; // C2_z, C2_x = C1
1418  gng_[1][4] = 1; // C2_z, D2 = C2_z
1419  gng_[1][5] = 0; // C2_z, Ci = C1
1420  gng_[1][6] = 0; // C2_z, Cs_xy = C1
1421  gng_[1][7] = 1; // C2_z, C2h_z = C2_z
1422  gng_[1][8] = 0; // C2_z, Cs_xz = C1
1423  gng_[1][9] = 0; // C2_z, C2h_y = C1
1424  gng_[1][10] = 0; // C2_z, C2v_x = C1
1425  gng_[1][11] = 0; // C2_z, Cs_yz = C1
1426  gng_[1][12] = 0; // C2_z, C2h_x = C1
1427  gng_[1][13] = 0; // C2_z, C2v_y = C1
1428  gng_[1][14] = 1; // C2_z, C2v_z = C2_z
1429  gng_[1][15] = 1; // C2_z, D2h = C2_z
1430  gng_[2][0] = 0; // C2_y, C1 = C1
1431  gng_[2][1] = 0; // C2_y, C2_z = C1
1432  gng_[2][2] = 2; // C2_y, C2_y = C2_y
1433  gng_[2][3] = 0; // C2_y, C2_x = C1
1434  gng_[2][4] = 2; // C2_y, D2 = C2_y
1435  gng_[2][5] = 0; // C2_y, Ci = C1
1436  gng_[2][6] = 0; // C2_y, Cs_xy = C1
1437  gng_[2][7] = 0; // C2_y, C2h_z = C1
1438  gng_[2][8] = 0; // C2_y, Cs_xz = C1
1439  gng_[2][9] = 2; // C2_y, C2h_y = C2_y
1440  gng_[2][10] = 0; // C2_y, C2v_x = C1
1441  gng_[2][11] = 0; // C2_y, Cs_yz = C1
1442  gng_[2][12] = 0; // C2_y, C2h_x = C1
1443  gng_[2][13] = 2; // C2_y, C2v_y = C2_y
1444  gng_[2][14] = 0; // C2_y, C2v_z = C1
1445  gng_[2][15] = 2; // C2_y, D2h = C2_y
1446  gng_[3][0] = 0; // C2_x, C1 = C1
1447  gng_[3][1] = 0; // C2_x, C2_z = C1
1448  gng_[3][2] = 0; // C2_x, C2_y = C1
1449  gng_[3][3] = 3; // C2_x, C2_x = C2_x
1450  gng_[3][4] = 3; // C2_x, D2 = C2_x
1451  gng_[3][5] = 0; // C2_x, Ci = C1
1452  gng_[3][6] = 0; // C2_x, Cs_xy = C1
1453  gng_[3][7] = 0; // C2_x, C2h_z = C1
1454  gng_[3][8] = 0; // C2_x, Cs_xz = C1
1455  gng_[3][9] = 0; // C2_x, C2h_y = C1
1456  gng_[3][10] = 3; // C2_x, C2v_x = C2_x
1457  gng_[3][11] = 0; // C2_x, Cs_yz = C1
1458  gng_[3][12] = 3; // C2_x, C2h_x = C2_x
1459  gng_[3][13] = 0; // C2_x, C2v_y = C1
1460  gng_[3][14] = 0; // C2_x, C2v_z = C1
1461  gng_[3][15] = 3; // C2_x, D2h = C2_x
1462  gng_[4][0] = 0; // D2, C1 = C1
1463  gng_[4][1] = 1; // D2, C2_z = C2_z
1464  gng_[4][2] = 2; // D2, C2_y = C2_y
1465  gng_[4][3] = 3; // D2, C2_x = C2_x
1466  gng_[4][4] = 4; // D2, D2 = D2
1467  gng_[4][5] = 0; // D2, Ci = C1
1468  gng_[4][6] = 0; // D2, Cs_xy = C1
1469  gng_[4][7] = 1; // D2, C2h_z = C2_z
1470  gng_[4][8] = 0; // D2, Cs_xz = C1
1471  gng_[4][9] = 2; // D2, C2h_y = C2_y
1472  gng_[4][10] = 3; // D2, C2v_x = C2_x
1473  gng_[4][11] = 0; // D2, Cs_yz = C1
1474  gng_[4][12] = 3; // D2, C2h_x = C2_x
1475  gng_[4][13] = 2; // D2, C2v_y = C2_y
1476  gng_[4][14] = 1; // D2, C2v_z = C2_z
1477  gng_[4][15] = 4; // D2, D2h = D2
1478  gng_[5][0] = 0; // Ci, C1 = C1
1479  gng_[5][1] = 0; // Ci, C2_z = C1
1480  gng_[5][2] = 0; // Ci, C2_y = C1
1481  gng_[5][3] = 0; // Ci, C2_x = C1
1482  gng_[5][4] = 0; // Ci, D2 = C1
1483  gng_[5][5] = 5; // Ci, Ci = Ci
1484  gng_[5][6] = 0; // Ci, Cs_xy = C1
1485  gng_[5][7] = 5; // Ci, C2h_z = Ci
1486  gng_[5][8] = 0; // Ci, Cs_xz = C1
1487  gng_[5][9] = 5; // Ci, C2h_y = Ci
1488  gng_[5][10] = 0; // Ci, C2v_x = C1
1489  gng_[5][11] = 0; // Ci, Cs_yz = C1
1490  gng_[5][12] = 5; // Ci, C2h_x = Ci
1491  gng_[5][13] = 0; // Ci, C2v_y = C1
1492  gng_[5][14] = 0; // Ci, C2v_z = C1
1493  gng_[5][15] = 5; // Ci, D2h = Ci
1494  gng_[6][0] = 0; // Cs_xy, C1 = C1
1495  gng_[6][1] = 0; // Cs_xy, C2_z = C1
1496  gng_[6][2] = 0; // Cs_xy, C2_y = C1
1497  gng_[6][3] = 0; // Cs_xy, C2_x = C1
1498  gng_[6][4] = 0; // Cs_xy, D2 = C1
1499  gng_[6][5] = 0; // Cs_xy, Ci = C1
1500  gng_[6][6] = 6; // Cs_xy, Cs_xy = Cs_xy
1501  gng_[6][7] = 6; // Cs_xy, C2h_z = Cs_xy
1502  gng_[6][8] = 0; // Cs_xy, Cs_xz = C1
1503  gng_[6][9] = 0; // Cs_xy, C2h_y = C1
1504  gng_[6][10] = 6; // Cs_xy, C2v_x = Cs_xy
1505  gng_[6][11] = 0; // Cs_xy, Cs_yz = C1
1506  gng_[6][12] = 0; // Cs_xy, C2h_x = C1
1507  gng_[6][13] = 6; // Cs_xy, C2v_y = Cs_xy
1508  gng_[6][14] = 0; // Cs_xy, C2v_z = C1
1509  gng_[6][15] = 6; // Cs_xy, D2h = Cs_xy
1510  gng_[7][0] = 0; // C2h_z, C1 = C1
1511  gng_[7][1] = 1; // C2h_z, C2_z = C2_z
1512  gng_[7][2] = 0; // C2h_z, C2_y = C1
1513  gng_[7][3] = 0; // C2h_z, C2_x = C1
1514  gng_[7][4] = 1; // C2h_z, D2 = C2_z
1515  gng_[7][5] = 5; // C2h_z, Ci = Ci
1516  gng_[7][6] = 6; // C2h_z, Cs_xy = Cs_xy
1517  gng_[7][7] = 7; // C2h_z, C2h_z = C2h_z
1518  gng_[7][8] = 0; // C2h_z, Cs_xz = C1
1519  gng_[7][9] = 5; // C2h_z, C2h_y = Ci
1520  gng_[7][10] = 6; // C2h_z, C2v_x = Cs_xy
1521  gng_[7][11] = 0; // C2h_z, Cs_yz = C1
1522  gng_[7][12] = 5; // C2h_z, C2h_x = Ci
1523  gng_[7][13] = 6; // C2h_z, C2v_y = Cs_xy
1524  gng_[7][14] = 1; // C2h_z, C2v_z = C2_z
1525  gng_[7][15] = 7; // C2h_z, D2h = C2h_z
1526  gng_[8][0] = 0; // Cs_xz, C1 = C1
1527  gng_[8][1] = 0; // Cs_xz, C2_z = C1
1528  gng_[8][2] = 0; // Cs_xz, C2_y = C1
1529  gng_[8][3] = 0; // Cs_xz, C2_x = C1
1530  gng_[8][4] = 0; // Cs_xz, D2 = C1
1531  gng_[8][5] = 0; // Cs_xz, Ci = C1
1532  gng_[8][6] = 0; // Cs_xz, Cs_xy = C1
1533  gng_[8][7] = 0; // Cs_xz, C2h_z = C1
1534  gng_[8][8] = 8; // Cs_xz, Cs_xz = Cs_xz
1535  gng_[8][9] = 8; // Cs_xz, C2h_y = Cs_xz
1536  gng_[8][10] = 8; // Cs_xz, C2v_x = Cs_xz
1537  gng_[8][11] = 0; // Cs_xz, Cs_yz = C1
1538  gng_[8][12] = 0; // Cs_xz, C2h_x = C1
1539  gng_[8][13] = 0; // Cs_xz, C2v_y = C1
1540  gng_[8][14] = 8; // Cs_xz, C2v_z = Cs_xz
1541  gng_[8][15] = 8; // Cs_xz, D2h = Cs_xz
1542  gng_[9][0] = 0; // C2h_y, C1 = C1
1543  gng_[9][1] = 0; // C2h_y, C2_z = C1
1544  gng_[9][2] = 2; // C2h_y, C2_y = C2_y
1545  gng_[9][3] = 0; // C2h_y, C2_x = C1
1546  gng_[9][4] = 2; // C2h_y, D2 = C2_y
1547  gng_[9][5] = 5; // C2h_y, Ci = Ci
1548  gng_[9][6] = 0; // C2h_y, Cs_xy = C1
1549  gng_[9][7] = 5; // C2h_y, C2h_z = Ci
1550  gng_[9][8] = 8; // C2h_y, Cs_xz = Cs_xz
1551  gng_[9][9] = 9; // C2h_y, C2h_y = C2h_y
1552  gng_[9][10] = 8; // C2h_y, C2v_x = Cs_xz
1553  gng_[9][11] = 0; // C2h_y, Cs_yz = C1
1554  gng_[9][12] = 5; // C2h_y, C2h_x = Ci
1555  gng_[9][13] = 2; // C2h_y, C2v_y = C2_y
1556  gng_[9][14] = 8; // C2h_y, C2v_z = Cs_xz
1557  gng_[9][15] = 9; // C2h_y, D2h = C2h_y
1558  gng_[10][0] = 0; // C2v_x, C1 = C1
1559  gng_[10][1] = 0; // C2v_x, C2_z = C1
1560  gng_[10][2] = 0; // C2v_x, C2_y = C1
1561  gng_[10][3] = 3; // C2v_x, C2_x = C2_x
1562  gng_[10][4] = 3; // C2v_x, D2 = C2_x
1563  gng_[10][5] = 0; // C2v_x, Ci = C1
1564  gng_[10][6] = 6; // C2v_x, Cs_xy = Cs_xy
1565  gng_[10][7] = 6; // C2v_x, C2h_z = Cs_xy
1566  gng_[10][8] = 8; // C2v_x, Cs_xz = Cs_xz
1567  gng_[10][9] = 8; // C2v_x, C2h_y = Cs_xz
1568  gng_[10][10] = 10; // C2v_x, C2v_x = C2v_x
1569  gng_[10][11] = 0; // C2v_x, Cs_yz = C1
1570  gng_[10][12] = 3; // C2v_x, C2h_x = C2_x
1571  gng_[10][13] = 6; // C2v_x, C2v_y = Cs_xy
1572  gng_[10][14] = 8; // C2v_x, C2v_z = Cs_xz
1573  gng_[10][15] = 10; // C2v_x, D2h = C2v_x
1574  gng_[11][0] = 0; // Cs_yz, C1 = C1
1575  gng_[11][1] = 0; // Cs_yz, C2_z = C1
1576  gng_[11][2] = 0; // Cs_yz, C2_y = C1
1577  gng_[11][3] = 0; // Cs_yz, C2_x = C1
1578  gng_[11][4] = 0; // Cs_yz, D2 = C1
1579  gng_[11][5] = 0; // Cs_yz, Ci = C1
1580  gng_[11][6] = 0; // Cs_yz, Cs_xy = C1
1581  gng_[11][7] = 0; // Cs_yz, C2h_z = C1
1582  gng_[11][8] = 0; // Cs_yz, Cs_xz = C1
1583  gng_[11][9] = 0; // Cs_yz, C2h_y = C1
1584  gng_[11][10] = 0; // Cs_yz, C2v_x = C1
1585  gng_[11][11] = 11; // Cs_yz, Cs_yz = Cs_yz
1586  gng_[11][12] = 11; // Cs_yz, C2h_x = Cs_yz
1587  gng_[11][13] = 11; // Cs_yz, C2v_y = Cs_yz
1588  gng_[11][14] = 11; // Cs_yz, C2v_z = Cs_yz
1589  gng_[11][15] = 11; // Cs_yz, D2h = Cs_yz
1590  gng_[12][0] = 0; // C2h_x, C1 = C1
1591  gng_[12][1] = 0; // C2h_x, C2_z = C1
1592  gng_[12][2] = 0; // C2h_x, C2_y = C1
1593  gng_[12][3] = 3; // C2h_x, C2_x = C2_x
1594  gng_[12][4] = 3; // C2h_x, D2 = C2_x
1595  gng_[12][5] = 5; // C2h_x, Ci = Ci
1596  gng_[12][6] = 0; // C2h_x, Cs_xy = C1
1597  gng_[12][7] = 5; // C2h_x, C2h_z = Ci
1598  gng_[12][8] = 0; // C2h_x, Cs_xz = C1
1599  gng_[12][9] = 5; // C2h_x, C2h_y = Ci
1600  gng_[12][10] = 3; // C2h_x, C2v_x = C2_x
1601  gng_[12][11] = 11; // C2h_x, Cs_yz = Cs_yz
1602  gng_[12][12] = 12; // C2h_x, C2h_x = C2h_x
1603  gng_[12][13] = 11; // C2h_x, C2v_y = Cs_yz
1604  gng_[12][14] = 11; // C2h_x, C2v_z = Cs_yz
1605  gng_[12][15] = 12; // C2h_x, D2h = C2h_x
1606  gng_[13][0] = 0; // C2v_y, C1 = C1
1607  gng_[13][1] = 0; // C2v_y, C2_z = C1
1608  gng_[13][2] = 2; // C2v_y, C2_y = C2_y
1609  gng_[13][3] = 0; // C2v_y, C2_x = C1
1610  gng_[13][4] = 2; // C2v_y, D2 = C2_y
1611  gng_[13][5] = 0; // C2v_y, Ci = C1
1612  gng_[13][6] = 6; // C2v_y, Cs_xy = Cs_xy
1613  gng_[13][7] = 6; // C2v_y, C2h_z = Cs_xy
1614  gng_[13][8] = 0; // C2v_y, Cs_xz = C1
1615  gng_[13][9] = 2; // C2v_y, C2h_y = C2_y
1616  gng_[13][10] = 6; // C2v_y, C2v_x = Cs_xy
1617  gng_[13][11] = 11; // C2v_y, Cs_yz = Cs_yz
1618  gng_[13][12] = 11; // C2v_y, C2h_x = Cs_yz
1619  gng_[13][13] = 13; // C2v_y, C2v_y = C2v_y
1620  gng_[13][14] = 11; // C2v_y, C2v_z = Cs_yz
1621  gng_[13][15] = 13; // C2v_y, D2h = C2v_y
1622  gng_[14][0] = 0; // C2v_z, C1 = C1
1623  gng_[14][1] = 1; // C2v_z, C2_z = C2_z
1624  gng_[14][2] = 0; // C2v_z, C2_y = C1
1625  gng_[14][3] = 0; // C2v_z, C2_x = C1
1626  gng_[14][4] = 1; // C2v_z, D2 = C2_z
1627  gng_[14][5] = 0; // C2v_z, Ci = C1
1628  gng_[14][6] = 0; // C2v_z, Cs_xy = C1
1629  gng_[14][7] = 1; // C2v_z, C2h_z = C2_z
1630  gng_[14][8] = 8; // C2v_z, Cs_xz = Cs_xz
1631  gng_[14][9] = 8; // C2v_z, C2h_y = Cs_xz
1632  gng_[14][10] = 8; // C2v_z, C2v_x = Cs_xz
1633  gng_[14][11] = 11; // C2v_z, Cs_yz = Cs_yz
1634  gng_[14][12] = 11; // C2v_z, C2h_x = Cs_yz
1635  gng_[14][13] = 11; // C2v_z, C2v_y = Cs_yz
1636  gng_[14][14] = 14; // C2v_z, C2v_z = C2v_z
1637  gng_[14][15] = 14; // C2v_z, D2h = C2v_z
1638  gng_[15][0] = 0; // D2h, C1 = C1
1639  gng_[15][1] = 1; // D2h, C2_z = C2_z
1640  gng_[15][2] = 2; // D2h, C2_y = C2_y
1641  gng_[15][3] = 3; // D2h, C2_x = C2_x
1642  gng_[15][4] = 4; // D2h, D2 = D2
1643  gng_[15][5] = 5; // D2h, Ci = Ci
1644  gng_[15][6] = 6; // D2h, Cs_xy = Cs_xy
1645  gng_[15][7] = 7; // D2h, C2h_z = C2h_z
1646  gng_[15][8] = 8; // D2h, Cs_xz = Cs_xz
1647  gng_[15][9] = 9; // D2h, C2h_y = C2h_y
1648  gng_[15][10] = 10; // D2h, C2v_x = C2v_x
1649  gng_[15][11] = 11; // D2h, Cs_yz = Cs_yz
1650  gng_[15][12] = 12; // D2h, C2h_x = C2h_x
1651  gng_[15][13] = 13; // D2h, C2v_y = C2v_y
1652  gng_[15][14] = 14; // D2h, C2v_z = C2v_z
1653  gng_[15][15] = 15; // D2h, D2h = D2h
1654  }
1655  }
1656 
1657  ~DCD() {
1658  if (C1_operators_ != nullptr) delete[] C1_operators_;
1659  if (C2_z_operators_ != nullptr) delete[] C2_z_operators_;
1660  if (C2_y_operators_ != nullptr) delete[] C2_y_operators_;
1661  if (C2_x_operators_ != nullptr) delete[] C2_x_operators_;
1662  if (D2_operators_ != nullptr) delete[] D2_operators_;
1663  if (Ci_operators_ != nullptr) delete[] Ci_operators_;
1664  if (Cs_xy_operators_ != nullptr) delete[] Cs_xy_operators_;
1665  if (C2h_z_operators_ != nullptr) delete[] C2h_z_operators_;
1666  if (Cs_xz_operators_ != nullptr) delete[] Cs_xz_operators_;
1667  if (C2h_y_operators_ != nullptr) delete[] C2h_y_operators_;
1668  if (C2v_x_operators_ != nullptr) delete[] C2v_x_operators_;
1669  if (Cs_yz_operators_ != nullptr) delete[] Cs_yz_operators_;
1670  if (C2h_x_operators_ != nullptr) delete[] C2h_x_operators_;
1671  if (C2v_y_operators_ != nullptr) delete[] C2v_y_operators_;
1672  if (C2v_z_operators_ != nullptr) delete[] C2v_z_operators_;
1673  if (D2h_operators_ != nullptr) delete[] D2h_operators_;
1674 
1675  for (int n = 0; n < nsub_; ++n) delete[] gng_[n];
1676  delete[] gng_;
1677 
1678  for (int n = 0; n < nsub_; ++n) delete[] dcr_[n];
1679  delete[] dcr_;
1680  delete[] subgroup_dimensions_;
1681  }
1682 
1684  int subgroup_dimensions(int group) { return subgroup_dimensions_[group]; }
1685 
1688  int bits_to_dense_numbering(int group) { return bits_to_subgroup_[group]; }
1689 
1692  int intersection(int group1, int group2) const { return gng_[group1][group2]; }
1693 
1698  const int *dcr(int group1, int group2) const { return dcr_[group1][group2]; }
1699 };
Definition: dcd.h:42
int * C2h_x_operators_
Definition: dcd.h:67
int * C2_x_operators_
Definition: dcd.h:58
int * C2_y_operators_
Definition: dcd.h:57
int * C2v_x_operators_
Definition: dcd.h:65
const int * dcr(int group1, int group2) const
Definition: dcd.h:1698
int *** dcr_
The lookup array for the DCR list of operators for all possiblepairs of stabilizer subgroups...
Definition: dcd.h:49
int bits_to_dense_numbering(int group)
Definition: dcd.h:1688
int * C2v_z_operators_
Definition: dcd.h:69
int subgroup_dimensions(int group)
Takes a densely numbered subgroup and returns its dimension.
Definition: dcd.h:1684
int * subgroup_dimensions_
The dimensions of each subgroup.
Definition: dcd.h:47
~DCD()
Definition: dcd.h:1657
int * D2h_operators_
Definition: dcd.h:70
int * C1_operators_
The lists of operators in each possible subgroup.
Definition: dcd.h:55
int * C2_z_operators_
Definition: dcd.h:56
int ** gng_
The lookup array for the intersection of all possible pairs of subgroups.
Definition: dcd.h:51
int intersection(int group1, int group2) const
Definition: dcd.h:1692
int * Cs_yz_operators_
Definition: dcd.h:66
int * C2h_y_operators_
Definition: dcd.h:64
int * Ci_operators_
Definition: dcd.h:60
int * C2v_y_operators_
Definition: dcd.h:68
DCD(int pg)
Definition: dcd.h:77
std::map< int, int > bits_to_subgroup_
The bit representation to dense numbering mapping.
Definition: dcd.h:53
int * Cs_xz_operators_
Definition: dcd.h:63
int * D2_operators_
Definition: dcd.h:59
int * C2h_z_operators_
Definition: dcd.h:62
int nsub_
The number of subgroups in the current point group, pg_.
Definition: dcd.h:45
int * Cs_xy_operators_
Definition: dcd.h:61