@@ -52,8 +52,7 @@ auto Parallel_LRI_Equally<TA,Tcell,Ndim,Tdata>::comm_tensors_map2(
5252 case Label::ab::a0b0: case Label::ab::a0b1:
5353 case Label::ab::a1b0: case Label::ab::a1b1:
5454 return Communicate_Tensors_Map_Judge::comm_map2 (this ->mpi_comm , Ds, Global_Func::to_set (this ->list_Aa01 ), Global_Func::to_set (this ->list_Ab01 ));
55- case Label::ab::a0b2:
56- case Label::ab::a1b2:
55+ case Label::ab::a0b2: case Label::ab::a1b2:
5756 return Communicate_Tensors_Map_Judge::comm_map2 (this ->mpi_comm , Ds, Global_Func::to_set (this ->list_Aa01 ), Global_Func::to_set (this ->list_Ab2 ));
5857 case Label::ab::a2b0: case Label::ab::a2b1:
5958 return Communicate_Tensors_Map_Judge::comm_map2_period (this ->mpi_comm , Ds, Global_Func::to_set (this ->list_Aa2 ), Global_Func::to_set (this ->list_Ab01 ), this ->period );
@@ -64,4 +63,48 @@ auto Parallel_LRI_Equally<TA,Tcell,Ndim,Tdata>::comm_tensors_map2(
6463 }
6564}
6665
66+ template <typename TA, typename Tcell, std::size_t Ndim, typename Tdata>
67+ auto Parallel_LRI_Equally<TA,Tcell,Ndim,Tdata>::comm_tensors_map2(
68+ const std::vector<Label::ab> &label_list,
69+ const std::map<TA,std::map<TAC,Tensor<Tdata>>> &Ds) const
70+ -> std::map<TA,std::map<TAC,Tensor<Tdata>>>
71+ {
72+ std::tuple<
73+ std::vector<std::tuple< std::set<TA>, std::set<std::pair<TA,TC>> >>,
74+ std::vector<std::tuple< std::set<std::pair<TA,TC>>, std::set<std::pair<TA,TC>> >>
75+ > s_list;
76+
77+ std::vector<bool > flags (6 , false );
78+ for (const Label::ab &label : label_list)
79+ {
80+ switch (label)
81+ {
82+ case Label::ab::a:
83+ flags[0 ]=true ; break ;
84+ case Label::ab::b:
85+ flags[1 ]=true ; break ;
86+ case Label::ab::a0b0: case Label::ab::a0b1:
87+ case Label::ab::a1b0: case Label::ab::a1b1:
88+ flags[2 ]=true ; break ;
89+ case Label::ab::a0b2: case Label::ab::a1b2:
90+ flags[3 ]=true ; break ;
91+ case Label::ab::a2b0: case Label::ab::a2b1:
92+ flags[4 ]=true ; break ;
93+ case Label::ab::a2b2:
94+ flags[5 ]=true ; break ;
95+ default :
96+ throw std::invalid_argument (std::string (__FILE__)+" line " +std::to_string (__LINE__));
97+ }
98+ }
99+
100+ if (flags[0 ]) std::get<0 >(s_list).push_back (std::make_tuple ( Global_Func::to_set (this ->list_Aa01 ), Global_Func::to_set (this ->list_Aa2 ) ));
101+ if (flags[1 ]) std::get<1 >(s_list).push_back (std::make_tuple ( Global_Func::to_set (this ->list_Ab01 ), Global_Func::to_set (this ->list_Ab2 ) ));
102+ if (flags[2 ]) std::get<0 >(s_list).push_back (std::make_tuple ( Global_Func::to_set (this ->list_Aa01 ), Global_Func::to_set (this ->list_Ab01 ) ));
103+ if (flags[3 ]) std::get<0 >(s_list).push_back (std::make_tuple ( Global_Func::to_set (this ->list_Aa01 ), Global_Func::to_set (this ->list_Ab2 ) ));
104+ if (flags[4 ]) std::get<1 >(s_list).push_back (std::make_tuple ( Global_Func::to_set (this ->list_Aa2 ), Global_Func::to_set (this ->list_Ab01 ) ));
105+ if (flags[5 ]) std::get<1 >(s_list).push_back (std::make_tuple ( Global_Func::to_set (this ->list_Aa2 ), Global_Func::to_set (this ->list_Ab2 ) ));
106+
107+ return Communicate_Tensors_Map_Judge::comm_map2_combine_origin_period (this ->mpi_comm , Ds, s_list, this ->period );
108+ }
109+
67110}
0 commit comments