22
33#include " ../../ri/Filter_Atom.h"
44#include " Symmetry_Filter.h"
5+ #include " ../../ri/Label_Tools.h"
6+
7+ #include < stdexcept>
58
69namespace RI
710{
@@ -13,61 +16,114 @@ class Filter_Atom_Symmetry: public Filter_Atom<TA, std::pair<TA, TC>>
1316 using TAC = std::pair<TA, TC>;
1417
1518 Filter_Atom_Symmetry (
16- const TC& period,
17- const std::map<std::pair<TA,TA>, std::set<TC>>& irsec)
19+ const TC & period,
20+ const std::map<std::pair<TA,TA>, std::set<TC>> & irsec)
1821 :symmetry(period, irsec){}
1922
20- virtual bool filter_for1 (const Label::ab_ab& label, const TA& A1) const override
23+ virtual bool filter_for1 (const Label::ab_ab & label, const TA & A1) const override
2124 {
22- switch (label)
25+ switch (label)
2326 {
24- case Label::ab_ab::a0b0_a2b1: case Label::ab_ab::a0b0_a2b2:
25- return !this ->symmetry .is_I_in_irreducible_sector (A1);
27+ // a01b01_a2b01: Aa01
28+ case Label::ab_ab::a0b0_a2b1:
29+ case Label::ab_ab::a0b1_a2b0:
30+ case Label::ab_ab::a1b0_a2b1:
31+ case Label::ab_ab::a1b1_a2b0:
32+ // a01b01_a2b2: Aa01
33+ case Label::ab_ab::a0b0_a2b2:
34+ case Label::ab_ab::a0b1_a2b2:
35+ case Label::ab_ab::a1b0_a2b2:
36+ case Label::ab_ab::a1b1_a2b2:
37+ // a01b2_a2b01: Aa01
38+ case Label::ab_ab::a0b2_a2b0:
39+ case Label::ab_ab::a0b2_a2b1:
40+ case Label::ab_ab::a1b2_a2b0:
41+ case Label::ab_ab::a1b2_a2b1:
42+ return !this ->symmetry .is_Aa_in_irreducible_sector (A1);
2643 default :
27- return false ;
44+ throw std::invalid_argument ( " label " + Label_Tools::get_name (label)+ " error in " + std::string (__FILE__)+ " line " + std::to_string (__LINE__)) ;
2845 }
2946 }
30- virtual bool filter_for1 (const Label::ab_ab& label, const TAC& A1) const override
47+ virtual bool filter_for1 (const Label::ab_ab &label, const TAC &A1) const override
48+ {
49+ switch (label)
50+ {
51+ // a01b01_a01b01: Aa2
52+ case Label::ab_ab::a0b0_a1b1:
53+ case Label::ab_ab::a0b1_a1b0:
54+ return !this ->symmetry .is_Aa_in_irreducible_sector (A1.first );
55+ // a01b01_a01b2: Ab01
56+ case Label::ab_ab::a0b0_a1b2:
57+ case Label::ab_ab::a0b1_a1b2:
58+ case Label::ab_ab::a0b2_a1b0:
59+ case Label::ab_ab::a0b2_a1b1:
60+ return !this ->symmetry .is_Ab_in_irreducible_sector (A1.first );
61+ default :
62+ throw std::invalid_argument (" label " +Label_Tools::get_name (label)+" error in " +std::string (__FILE__)+" line " +std::to_string (__LINE__));
63+ }
64+ }
65+
66+ virtual bool filter_for2 (const Label::ab_ab &label, const TA &A1, const TAC &A2) const override
3167 {
32- switch (label)
68+ switch (label)
3369 {
34- case Label::ab_ab::a0b0_a1b1:
35- return !this ->symmetry .is_I_in_irreducible_sector (A1.first );
36- case Label::ab_ab::a0b0_a1b2:
37- return !this ->symmetry .is_J_in_irreducible_sector (A1.first );
70+ // a01b2_a2b01: Aa01, Ab01
71+ case Label::ab_ab::a0b2_a2b0:
72+ case Label::ab_ab::a0b2_a2b1:
73+ case Label::ab_ab::a1b2_a2b0:
74+ case Label::ab_ab::a1b2_a2b1:
75+ return !this ->symmetry .in_irreducible_sector (A1, A2);
76+ // a01b01_a2b01: Aa01, Ab01
77+ // a01b01_a2b2: Aa01, Ab2
3878 default :
39- return false ;
79+ return false ;
4080 }
4181 }
4282
43- virtual bool filter_for32 (const Label::ab_ab& label, const TA& A1, const TAC& A2, const TAC& A3) const override
83+ virtual bool filter_for32 (const Label::ab_ab & label, const TA & A1, const TAC & A2, const TAC & A3) const override
4484 {
45- switch (label)
85+ switch (label)
4686 {
47- case Label::ab_ab::a0b0_a2b1: case Label::ab_ab::a0b0_a2b2:
48- return !this ->symmetry .in_irreducible_sector (A1, A3);
87+ // a01b01_a2b01: Aa01, Ab01, Ab2
88+ case Label::ab_ab::a0b0_a2b1:
89+ case Label::ab_ab::a0b1_a2b0:
90+ case Label::ab_ab::a1b0_a2b1:
91+ case Label::ab_ab::a1b1_a2b0:
92+ // a01b01_a2b2: Aa01, Ab2, Ab01
93+ case Label::ab_ab::a0b0_a2b2:
94+ case Label::ab_ab::a0b1_a2b2:
95+ case Label::ab_ab::a1b0_a2b2:
96+ case Label::ab_ab::a1b1_a2b2:
97+ return !this ->symmetry .in_irreducible_sector (A1, A3);
98+ // a01b2_a2b01: Aa01, Ab01, Aa2
4999 default :
50- return false ;
100+ return false ;
51101 }
52102 }
53- virtual bool filter_for32 (const Label::ab_ab& label, const TAC& A1, const TA& A2, const TAC& A3) const override
103+ virtual bool filter_for32 (const Label::ab_ab & label, const TAC & A1, const TA & A2, const TAC & A3) const override
54104 {
55- switch (label)
105+ switch (label)
56106 {
57- case Label::ab_ab::a0b0_a1b2:
58- return !this ->symmetry .in_irreducible_sector (A3, A1);
107+ // a01b01_a01b2: Ab01, Aa01, Aa2
108+ case Label::ab_ab::a0b0_a1b2:
109+ case Label::ab_ab::a0b1_a1b2:
110+ case Label::ab_ab::a0b2_a1b0:
111+ case Label::ab_ab::a0b2_a1b1:
112+ return !this ->symmetry .in_irreducible_sector (A3, A1);
59113 default :
60- return false ;
114+ throw std::invalid_argument ( " label " + Label_Tools::get_name (label)+ " error in " + std::string (__FILE__)+ " line " + std::to_string (__LINE__)) ;
61115 }
62116 }
63- virtual bool filter_for32 (const Label::ab_ab& label, const TAC& A1, const TAC& A2, const TAC& A3) const override
117+ virtual bool filter_for32 (const Label::ab_ab & label, const TAC & A1, const TAC & A2, const TAC & A3) const override
64118 {
65- switch (label)
119+ switch (label)
66120 {
67- case Label::ab_ab::a0b0_a1b1:
68- return !this ->symmetry .in_irreducible_sector (A1, A3);
121+ // a01b01_a01b01: Aa2, Ab01, Ab2
122+ case Label::ab_ab::a0b0_a1b1:
123+ case Label::ab_ab::a0b1_a1b0:
124+ return !this ->symmetry .in_irreducible_sector (A1, A3);
69125 default :
70- return false ;
126+ throw std::invalid_argument ( " label " + Label_Tools::get_name (label)+ " error in " + std::string (__FILE__)+ " line " + std::to_string (__LINE__)) ;
71127 }
72128 }
73129
0 commit comments