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