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