Skip to content

Commit 11893f1

Browse files
committed
1. add Label::Aab and Label::Aab_Aab
1 parent 3af6673 commit 11893f1

File tree

4 files changed

+167
-70
lines changed

4 files changed

+167
-70
lines changed

include/RI/ri/CS_Matrix-filter.hpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ typename CS_Matrix<TA,TC,Tdata>::Step CS_Matrix<TA,TC,Tdata>::set_label_A(
4646
};
4747
auto get_uplimit_tensor2 = [&get_Aa_Ab, &data_wrapper](const Label::ab &label_ab) -> const Tdata&
4848
{
49-
const int xa = Label::get_a(label_ab);
50-
const int xb = Label::get_b(label_ab);
49+
const int xa = Label_Tools::get_a(label_ab);
50+
const int xb = Label_Tools::get_b(label_ab);
5151
const std::pair<TA,TAC> &Aa_Ab = get_Aa_Ab(xa,xb);
5252
const TA &Aa=Aa_Ab.first;
5353
const TAC &Ab=Aa_Ab.second;
@@ -58,11 +58,11 @@ typename CS_Matrix<TA,TC,Tdata>::Step CS_Matrix<TA,TC,Tdata>::set_label_A(
5858

5959
step.label = label_in;
6060

61-
const int index_a = Label::get_unused_a(step.label);
61+
const int index_a = Label_Tools::get_unused_a(step.label);
6262
step.a_square = Global_Func::find( data_wrapper(Label::ab::a).csm_uplimits.square_tensor3[index_a], Aa01, Aa2 );
6363
step.a_norm = Global_Func::find( data_wrapper(Label::ab::a).csm_uplimits.norm_tensor3 [index_a], Aa01, Aa2 );
6464

65-
const int index_b = get_unused_b(step.label);
65+
const int index_b = Label_Tools::get_unused_b(step.label);
6666
step.b_square = Global_Func::find( data_wrapper(Label::ab::b).csm_uplimits.square_tensor3[index_b], Ab01.first, TAC{Ab2.first, (Ab2.second-Ab01.second)%period} );
6767
step.b_norm = Global_Func::find( data_wrapper(Label::ab::b).csm_uplimits.norm_tensor3 [index_b], Ab01.first, TAC{Ab2.first, (Ab2.second-Ab01.second)%period} );
6868

include/RI/ri/LRI_Cal_Tools.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#pragma once
77

88
#include "Label.h"
9+
#include "Label_Tools.h"
910
#include "RI/global/Tensor.h"
1011
#include "RI/global/Global_Func-1.h"
1112
#include "RI/global/Array_Operator.h"
@@ -98,7 +99,7 @@ class LRI_Cal_Tools
9899
const std::vector<Label::ab> &labels_ab = split_b01(label_ab_ab);
99100
for(const Label::ab &label_ab : labels_ab)
100101
{
101-
const int a = Label::get_a(label_ab);
102+
const int a = Label_Tools::get_a(label_ab);
102103
switch(a)
103104
{
104105
case 0: case 1:

include/RI/ri/Label.h

Lines changed: 34 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,26 @@ namespace Label
2020
a1b0, a1b1, a1b2,
2121
a2b0, a2b1, a2b2
2222
};
23-
constexpr std::array<Label::ab,11> array_ab = {
23+
constexpr std::array<ab,11> array_ab =
24+
{
2425
ab::a, ab::b,
2526
ab::a0b0, ab::a0b1, ab::a0b2,
2627
ab::a1b0, ab::a1b1, ab::a1b2,
27-
ab::a2b0, ab::a2b1, ab::a2b2};
28+
ab::a2b0, ab::a2b1, ab::a2b2
29+
};
30+
31+
enum class Aab
32+
{
33+
a, b,
34+
a01b01, a01b2,
35+
a2b01, a2b2
36+
};
37+
constexpr std::array<Aab,6> array_Aab =
38+
{
39+
Aab::a, Aab::b,
40+
Aab::a01b01, Aab::a01b2,
41+
Aab::a2b01, Aab::a2b2
42+
};
2843

2944
enum class ab_ab
3045
{
@@ -38,7 +53,8 @@ namespace Label
3853
a0b0_a1b2, a0b2_a1b0, // a2,b1
3954
a0b0_a1b1, a0b1_a1b0 // a2,b2
4055
};
41-
constexpr std::array<Label::ab_ab,18> array_ab_ab = {
56+
constexpr std::array<ab_ab,18> array_ab_ab =
57+
{
4258
ab_ab::a1b1_a2b2, ab_ab::a1b2_a2b1,
4359
ab_ab::a1b0_a2b2, ab_ab::a1b2_a2b0,
4460
ab_ab::a1b0_a2b1, ab_ab::a1b1_a2b0,
@@ -49,70 +65,23 @@ namespace Label
4965
ab_ab::a0b0_a1b2, ab_ab::a0b2_a1b0,
5066
ab_ab::a0b0_a1b1, ab_ab::a0b1_a1b0
5167
};
52-
53-
inline int get_unused_a(const ab_ab &label)
54-
{
55-
switch(label)
56-
{
57-
case ab_ab::a1b1_a2b2: case ab_ab::a1b2_a2b1:
58-
case ab_ab::a1b0_a2b2: case ab_ab::a1b2_a2b0:
59-
case ab_ab::a1b0_a2b1: case ab_ab::a1b1_a2b0:
60-
return 0;
61-
case ab_ab::a0b1_a2b2: case ab_ab::a0b2_a2b1:
62-
case ab_ab::a0b0_a2b2: case ab_ab::a0b2_a2b0:
63-
case ab_ab::a0b0_a2b1: case ab_ab::a0b1_a2b0:
64-
return 1;
65-
case ab_ab::a0b1_a1b2: case ab_ab::a0b2_a1b1:
66-
case ab_ab::a0b0_a1b2: case ab_ab::a0b2_a1b0:
67-
case ab_ab::a0b0_a1b1: case ab_ab::a0b1_a1b0:
68-
return 2;
69-
default:
70-
throw std::invalid_argument("Label::get_unused_a");
71-
}
72-
}
73-
74-
inline int get_unused_b(const ab_ab &label)
75-
{
76-
switch(label)
77-
{
78-
case ab_ab::a1b1_a2b2: case ab_ab::a1b2_a2b1:
79-
case ab_ab::a0b1_a2b2: case ab_ab::a0b2_a2b1:
80-
case ab_ab::a0b1_a1b2: case ab_ab::a0b2_a1b1:
81-
return 0;
82-
case ab_ab::a1b0_a2b2: case ab_ab::a1b2_a2b0:
83-
case ab_ab::a0b0_a2b2: case ab_ab::a0b2_a2b0:
84-
case ab_ab::a0b0_a1b2: case ab_ab::a0b2_a1b0:
85-
return 1;
86-
case ab_ab::a1b0_a2b1: case ab_ab::a1b1_a2b0:
87-
case ab_ab::a0b0_a2b1: case ab_ab::a0b1_a2b0:
88-
case ab_ab::a0b0_a1b1: case ab_ab::a0b1_a1b0:
89-
return 2;
90-
default:
91-
throw std::invalid_argument("Label::get_unused_b");
92-
}
93-
}
94-
95-
inline int get_a(const ab &label)
68+
69+
enum class Aab_Aab
9670
{
97-
switch(label)
98-
{
99-
case ab::a0b0: case ab::a0b1: case ab::a0b2: return 0;
100-
case ab::a1b0: case ab::a1b1: case ab::a1b2: return 1;
101-
case ab::a2b0: case ab::a2b1: case ab::a2b2: return 2;
102-
default: throw std::invalid_argument("Label::get_a");
103-
}
104-
}
105-
106-
inline int get_b(const ab &label)
71+
a01b01_a01b01,
72+
a01b01_a01b2,
73+
a01b01_a2b01,
74+
a01b01_a2b2,
75+
a01b2_a2b01,
76+
};
77+
constexpr std::array<Aab_Aab,5> array_Aab_Aab =
10778
{
108-
switch(label)
109-
{
110-
case ab::a0b0: case ab::a1b0: case ab::a2b0: return 0;
111-
case ab::a0b1: case ab::a1b1: case ab::a2b1: return 1;
112-
case ab::a0b2: case ab::a1b2: case ab::a2b2: return 2;
113-
default: throw std::invalid_argument("Label::get_b");
114-
}
115-
}
79+
Aab_Aab::a01b01_a01b01,
80+
Aab_Aab::a01b01_a01b2,
81+
Aab_Aab::a01b01_a2b01,
82+
Aab_Aab::a01b01_a2b2,
83+
Aab_Aab::a01b2_a2b01,
84+
};
11685
}
11786

11887
}

include/RI/ri/Label_Tools.h

Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,33 @@ namespace Label_Tools
6060
}
6161
}
6262

63+
static std::string get_name(const Label::Aab &label)
64+
{
65+
switch(label)
66+
{
67+
case Label::Aab::a: return "a";
68+
case Label::Aab::b: return "b";
69+
case Label::Aab::a01b01: return "a01b01";
70+
case Label::Aab::a01b2: return "a01b2";
71+
case Label::Aab::a2b01: return "a2b01";
72+
case Label::Aab::a2b2: return "a2b2";
73+
default: throw std::invalid_argument(std::string(__FILE__)+" line "+std::to_string(__LINE__));
74+
}
75+
}
76+
77+
static std::string get_name(const Label::Aab_Aab &label)
78+
{
79+
switch(label)
80+
{
81+
case Label::Aab_Aab::a01b01_a01b01: return "a01b01_a01b01";
82+
case Label::Aab_Aab::a01b01_a01b2: return "a01b01_a01b2";
83+
case Label::Aab_Aab::a01b01_a2b01: return "a01b01_a2b01";
84+
case Label::Aab_Aab::a01b01_a2b2: return "a01b01_a2b2";
85+
case Label::Aab_Aab::a01b2_a2b01: return "a01b2_a2b01";
86+
default: throw std::invalid_argument(std::string(__FILE__)+" line "+std::to_string(__LINE__));
87+
}
88+
}
89+
6390
template<typename Tlabel>
6491
std::string get_name(const std::vector<Tlabel> &label_list)
6592
{
@@ -68,6 +95,106 @@ namespace Label_Tools
6895
name += Label_Tools::get_name(label) + "_";
6996
return name.substr(0, name.size()-1);
7097
}
98+
99+
inline int get_a(const Label::ab &label)
100+
{
101+
switch(label)
102+
{
103+
case Label::ab::a0b0: case Label::ab::a0b1: case Label::ab::a0b2: return 0;
104+
case Label::ab::a1b0: case Label::ab::a1b1: case Label::ab::a1b2: return 1;
105+
case Label::ab::a2b0: case Label::ab::a2b1: case Label::ab::a2b2: return 2;
106+
default: throw std::invalid_argument(std::string(__FILE__)+" line "+std::to_string(__LINE__));
107+
}
108+
}
109+
110+
inline int get_b(const Label::ab &label)
111+
{
112+
switch(label)
113+
{
114+
case Label::ab::a0b0: case Label::ab::a1b0: case Label::ab::a2b0: return 0;
115+
case Label::ab::a0b1: case Label::ab::a1b1: case Label::ab::a2b1: return 1;
116+
case Label::ab::a0b2: case Label::ab::a1b2: case Label::ab::a2b2: return 2;
117+
default: throw std::invalid_argument(std::string(__FILE__)+" line "+std::to_string(__LINE__));
118+
}
119+
}
120+
121+
inline int get_unused_a(const Label::ab_ab &label)
122+
{
123+
switch(label)
124+
{
125+
case Label::ab_ab::a1b1_a2b2: case Label::ab_ab::a1b2_a2b1:
126+
case Label::ab_ab::a1b0_a2b2: case Label::ab_ab::a1b2_a2b0:
127+
case Label::ab_ab::a1b0_a2b1: case Label::ab_ab::a1b1_a2b0:
128+
return 0;
129+
case Label::ab_ab::a0b1_a2b2: case Label::ab_ab::a0b2_a2b1:
130+
case Label::ab_ab::a0b0_a2b2: case Label::ab_ab::a0b2_a2b0:
131+
case Label::ab_ab::a0b0_a2b1: case Label::ab_ab::a0b1_a2b0:
132+
return 1;
133+
case Label::ab_ab::a0b1_a1b2: case Label::ab_ab::a0b2_a1b1:
134+
case Label::ab_ab::a0b0_a1b2: case Label::ab_ab::a0b2_a1b0:
135+
case Label::ab_ab::a0b0_a1b1: case Label::ab_ab::a0b1_a1b0:
136+
return 2;
137+
default: throw std::invalid_argument(std::string(__FILE__)+" line "+std::to_string(__LINE__));
138+
}
139+
}
140+
141+
inline int get_unused_b(const Label::ab_ab &label)
142+
{
143+
switch(label)
144+
{
145+
case Label::ab_ab::a1b1_a2b2: case Label::ab_ab::a1b2_a2b1:
146+
case Label::ab_ab::a0b1_a2b2: case Label::ab_ab::a0b2_a2b1:
147+
case Label::ab_ab::a0b1_a1b2: case Label::ab_ab::a0b2_a1b1:
148+
return 0;
149+
case Label::ab_ab::a1b0_a2b2: case Label::ab_ab::a1b2_a2b0:
150+
case Label::ab_ab::a0b0_a2b2: case Label::ab_ab::a0b2_a2b0:
151+
case Label::ab_ab::a0b0_a1b2: case Label::ab_ab::a0b2_a1b0:
152+
return 1;
153+
case Label::ab_ab::a1b0_a2b1: case Label::ab_ab::a1b1_a2b0:
154+
case Label::ab_ab::a0b0_a2b1: case Label::ab_ab::a0b1_a2b0:
155+
case Label::ab_ab::a0b0_a1b1: case Label::ab_ab::a0b1_a1b0:
156+
return 2;
157+
default: throw std::invalid_argument(std::string(__FILE__)+" line "+std::to_string(__LINE__));
158+
}
159+
}
160+
161+
inline Label::Aab to_Aab(const Label::ab &label)
162+
{
163+
switch(label)
164+
{
165+
case Label::ab::a:
166+
return Label::Aab::a;
167+
case Label::ab::b:
168+
return Label::Aab::b;
169+
case Label::ab::a0b0: case Label::ab::a0b1: case Label::ab::a1b0: case Label::ab::a1b1:
170+
return Label::Aab::a01b01;
171+
case Label::ab::a0b2: case Label::ab::a1b2:
172+
return Label::Aab::a01b2;
173+
case Label::ab::a2b0: case Label::ab::a2b1:
174+
return Label::Aab::a2b01;
175+
case Label::ab::a2b2:
176+
return Label::Aab::a2b2;
177+
default: throw std::invalid_argument(std::string(__FILE__)+" line "+std::to_string(__LINE__));
178+
}
179+
}
180+
181+
inline Label::Aab_Aab to_Aab_Aab(const Label::ab_ab &label)
182+
{
183+
switch(label)
184+
{
185+
case Label::ab_ab::a0b0_a1b1: case Label::ab_ab::a0b1_a1b0:
186+
return Label::Aab_Aab::a01b01_a01b01;
187+
case Label::ab_ab::a0b1_a1b2: case Label::ab_ab::a0b2_a1b1: case Label::ab_ab::a0b0_a1b2: case Label::ab_ab::a0b2_a1b0:
188+
return Label::Aab_Aab::a01b01_a01b2;
189+
case Label::ab_ab::a1b0_a2b1: case Label::ab_ab::a1b1_a2b0: case Label::ab_ab::a0b0_a2b1: case Label::ab_ab::a0b1_a2b0:
190+
return Label::Aab_Aab::a01b01_a2b01;
191+
case Label::ab_ab::a1b1_a2b2: case Label::ab_ab::a0b1_a2b2: case Label::ab_ab::a1b0_a2b2: case Label::ab_ab::a0b0_a2b2:
192+
return Label::Aab_Aab::a01b01_a2b2;
193+
case Label::ab_ab::a1b2_a2b1: case Label::ab_ab::a0b2_a2b1: case Label::ab_ab::a1b2_a2b0: case Label::ab_ab::a0b2_a2b0:
194+
return Label::Aab_Aab::a01b2_a2b01;
195+
default: throw std::invalid_argument(std::string(__FILE__)+" line "+std::to_string(__LINE__));
196+
}
197+
}
71198
}
72199

73200
}

0 commit comments

Comments
 (0)