Skip to content

Commit 8c2a890

Browse files
committed
1. complete all labels in Filter_Atom_Symmetry
1 parent 58c042a commit 8c2a890

File tree

2 files changed

+95
-39
lines changed

2 files changed

+95
-39
lines changed

include/RI/physics/symmetry/Filter_Atom_Symmetry.h

Lines changed: 85 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
#include "../../ri/Filter_Atom.h"
44
#include "Symmetry_Filter.h"
5+
#include "../../ri/Label_Tools.h"
6+
7+
#include <stdexcept>
58

69
namespace 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

include/RI/physics/symmetry/Symmetry_Filter.h

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,9 @@ namespace RI
1414
class Symmetry_Filter
1515
{
1616
using TAC = std::pair<TA, TC>;
17-
using TIJ = std::pair<TA, TA>;
18-
using TIJR = std::pair<TIJ, TC>;
19-
using Tsec = std::map<TIJ, std::set<TC>>;
17+
using Tab = std::pair<TA, TA>;
18+
using TabR = std::pair<Tab, TC>;
19+
using Tsec = std::map<Tab, std::set<TC>>;
2020

2121
public:
2222
Symmetry_Filter(const TC& period_in, const Tsec& irsec)
@@ -25,7 +25,7 @@ namespace RI
2525
{
2626
NO_SEC_RETURN_TRUE;
2727
using namespace Array_Operator;
28-
const TIJ& ap = { Aa, Ab.first };
28+
const Tab& ap = { Aa, Ab.first };
2929
if (irreducible_sector_.find(ap) != irreducible_sector_.end())
3030
if (irreducible_sector_.at(ap).find(Ab.second % this->period) != irreducible_sector_.at(ap).end())
3131
return true;
@@ -42,27 +42,27 @@ namespace RI
4242
return true;
4343
return false;
4444
}
45-
bool is_I_in_irreducible_sector(const TA& Aa) const
45+
bool is_Aa_in_irreducible_sector(const TA& Aa) const
4646
{
4747
NO_SEC_RETURN_TRUE;
4848
for (const auto& apRs : irreducible_sector_)
4949
if (apRs.first.first == Aa)return true;
5050
return false;
5151
}
52-
bool is_J_in_irreducible_sector(const TA& Ab) const
52+
bool is_Ab_in_irreducible_sector(const TA& Ab) const
5353
{
5454
NO_SEC_RETURN_TRUE;
5555
for (const auto& apRs : irreducible_sector_)
5656
if (apRs.first.second == Ab)return true;
5757
return false;
5858
}
59-
TIJR get_IJR(const TA& I, const TAC& J) const
59+
TabR get_abR(const TA& Aa, const TAC& Ab) const
6060
{
61-
return { {I,J.first}, J.second % this->period };
61+
return { {Aa,Ab.first}, Ab.second % this->period };
6262
}
63-
TIJR get_IJR(const TAC& I, const TAC& J) const
63+
TabR get_abR(const TAC& Aa, const TAC& Ab) const
6464
{
65-
return { {I.first,J.first}, (J.second - I.second) % this->period };
65+
return { {Aa.first,Ab.first}, (Ab.second - Aa.second) % this->period };
6666
}
6767

6868
public: // private:

0 commit comments

Comments
 (0)