Skip to content

Commit e5b257f

Browse files
committed
1. add class Parallel_LRI_Equally_Filter
1 parent fe09e4b commit e5b257f

File tree

4 files changed

+70
-2
lines changed

4 files changed

+70
-2
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
// ===================
2+
// Author: Peize Lin
3+
// date: 2023.03.07
4+
// ===================
5+
6+
#pragma once
7+
8+
#include "Parallel_LRI_Equally.h"
9+
10+
namespace RI
11+
{
12+
13+
template<typename TA, typename Tcell, std::size_t Ndim, typename Tdata>
14+
class Parallel_LRI_Equally_Filter: public Parallel_LRI_Equally<TA,Tcell,Ndim,Tdata>
15+
{
16+
public:
17+
using TC = std::array<Tcell,Ndim>;
18+
using TAC = std::pair<TA,TC>;
19+
using Tatom_pos = std::array<double,Ndim>; // tmp
20+
21+
const std::vector<TAC>& get_list_Ab2 (const TA &Aa01, const TAC &Aa2, const TAC &Ab01) const override
22+
{
23+
return this->list_Ab2_filter.at(Ab01);
24+
}
25+
26+
void filter_Ab2 (const std::map<TA, std::map<TAC, Tensor<Tdata>>> &Ds_b);
27+
28+
// private:
29+
public:
30+
std::map<TAC,std::vector<TAC>> list_Ab2_filter;
31+
};
32+
33+
}
34+
35+
#include "Parallel_LRI_Equally_Filter.hpp"
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// ===================
2+
// Author: Peize Lin
3+
// date: 2023.03.07
4+
// ===================
5+
6+
#pragma once
7+
8+
#include "Parallel_LRI_Equally_Filter.h"
9+
10+
namespace RI
11+
{
12+
13+
template<typename TA, typename Tcell, std::size_t Ndim, typename Tdata>
14+
void Parallel_LRI_Equally_Filter<TA,Tcell,Ndim,Tdata>::filter_Ab2 (
15+
const std::map<TA, std::map<TAC, Tensor<Tdata>>> &Ds_b)
16+
{
17+
using namespace Array_Operator;
18+
for(const TAC &Ab01 : this->list_Ab01)
19+
{
20+
for(const TAC &Ab2 : this->list_Ab2)
21+
{
22+
const Tensor<Tdata> D_b = Global_Func::find(
23+
Ds_b,
24+
Ab01.first, TAC{Ab2.first, (Ab2.second-Ab01.second)%this->period});
25+
if(!D_b.empty())
26+
this->list_Ab2_filter[Ab01].push_back(Ab2);
27+
}
28+
}
29+
}
30+
31+
}

include/RI/ri/LRI-cal.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ void LRI<TA,Tcell,Ndim,Tdata>::cal(
2424
{
2525
using namespace Array_Operator;
2626

27+
dynamic_cast<Parallel_LRI_Equally_Filter<TA,Tcell,Ndim,Tdata>*>(this->parallel.get())->filter_Ab2(this->Ds_ab[Label::ab::b]);
28+
2729
const bool flag_D_b_transpose = [&labels]() -> bool
2830
{
2931
for(const Label::ab_ab &label : labels)

include/RI/ri/LRI.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
#include "../ri/Label.h"
1010
#include "../global/Tensor.h"
1111
#include "CS_Matrix.h"
12-
#include "../parallel/Parallel_LRI_Equally.h"
12+
#include "../parallel/Parallel_LRI_Equally_Filter.h"
1313
#include "RI_Tools.h"
1414
#include "../global/Global_Func-2.h"
1515
#include "Save_Load.h"
@@ -59,7 +59,7 @@ class LRI
5959

6060
public:
6161
std::shared_ptr<Parallel_LRI<TA,Tcell,Ndim,Tdata>>
62-
parallel = std::make_shared<Parallel_LRI_Equally<TA,Tcell,Ndim,Tdata>>();
62+
parallel = std::make_shared<Parallel_LRI_Equally_Filter<TA,Tcell,Ndim,Tdata>>();
6363
std::unordered_map< Label::ab, RI_Tools::T_filter_func<Tdata> >
6464
filter_funcs;
6565
std::vector<std::function<Tdata (const Label::ab_ab &label, const TA &Aa01, const TAC &Aa2, const TAC &Ab01, const TAC &Ab2)>>

0 commit comments

Comments
 (0)