@@ -38,28 +38,28 @@ namespace triqs_tprf {
3838// ----------------------------------------------------
3939// g
4040
41- g_wk_t lattice_dyson_g0_wk (double mu, e_k_cvt e_k, gf_mesh<imfreq> mesh) {
41+ g_wk_t lattice_dyson_g0_wk (double mu, e_k_cvt e_k, gf_mesh<imfreq> mesh, mpi::communicator const &c ) {
4242
4343 auto I = nda::eye<ek_vt::scalar_t >(e_k.target_shape ()[0 ]);
4444 g_wk_t g0_wk ({mesh, e_k.mesh ()}, e_k.target_shape ());
4545 g0_wk () = 0.0 ;
4646
47- auto arr = mpi_view (g0_wk.mesh ());
47+ auto arr = mpi_view (g0_wk.mesh (), c );
4848
4949#pragma omp parallel for
5050 for (unsigned int idx = 0 ; idx < arr.size (); idx++) {
5151 auto &[w, k] = arr (idx);
5252 g0_wk[w, k] = inverse ((w + mu)*I - e_k (k));
5353 }
5454
55- g0_wk = mpi::all_reduce (g0_wk);
55+ g0_wk = mpi::all_reduce (g0_wk, c );
5656 return g0_wk;
5757}
5858
5959// ----------------------------------------------------
6060
6161template <typename sigma_t >
62- auto lattice_dyson_g_generic (double mu, e_k_cvt e_k, sigma_t sigma){
62+ auto lattice_dyson_g_generic (double mu, e_k_cvt e_k, sigma_t sigma, mpi::communicator const &c ){
6363
6464 auto &freqmesh = [&sigma]() -> auto & {
6565 if constexpr (sigma_t ::arity == 1 ) return sigma.mesh ();
@@ -72,7 +72,7 @@ auto lattice_dyson_g_generic(double mu, e_k_cvt e_k, sigma_t sigma){
7272 g_wk_t g_wk ({freqmesh, e_k.mesh ()}, e_k.target_shape ());
7373 g_wk () = 0.0 ;
7474
75- auto arr = mpi_view (g_wk.mesh ());
75+ auto arr = mpi_view (g_wk.mesh (), c );
7676#pragma omp parallel for
7777 for (unsigned int idx = 0 ; idx < arr.size (); idx++) {
7878 auto &[w, k] = arr (idx);
@@ -84,60 +84,60 @@ auto lattice_dyson_g_generic(double mu, e_k_cvt e_k, sigma_t sigma){
8484 g_wk[w, k] = inverse ((w + mu)*I - e_k (k) - sigmaterm);
8585 }
8686
87- g_wk = mpi::all_reduce (g_wk);
87+ g_wk = mpi::all_reduce (g_wk, c );
8888 return g_wk;
8989}
9090
9191
92- g_wk_t lattice_dyson_g_wk (double mu, e_k_cvt e_k, g_wk_cvt sigma_wk) {
93- return lattice_dyson_g_generic (mu, e_k, sigma_wk);
92+ g_wk_t lattice_dyson_g_wk (double mu, e_k_cvt e_k, g_wk_cvt sigma_wk, mpi::communicator const &c ) {
93+ return lattice_dyson_g_generic (mu, e_k, sigma_wk, c );
9494}
9595
9696
97- g_wk_t lattice_dyson_g_wk (double mu, e_k_cvt e_k, g_w_cvt sigma_w) {
98- return lattice_dyson_g_generic (mu, e_k, sigma_w);
97+ g_wk_t lattice_dyson_g_wk (double mu, e_k_cvt e_k, g_w_cvt sigma_w, mpi::communicator const &c ) {
98+ return lattice_dyson_g_generic (mu, e_k, sigma_w, c );
9999}
100100
101101
102- g_w_t lattice_dyson_g_w (double mu, e_k_cvt e_k, g_w_cvt sigma_w) {
102+ g_w_t lattice_dyson_g_w (double mu, e_k_cvt e_k, g_w_cvt sigma_w, mpi::communicator const &c ) {
103103
104- auto g_wk = lattice_dyson_g_generic (mu, e_k, sigma_w);
104+ auto g_wk = lattice_dyson_g_generic (mu, e_k, sigma_w, c );
105105 auto &[wmesh, kmesh] = g_wk.mesh ();
106106
107107 g_w_t g_w (wmesh, e_k.target_shape ());
108108 g_w () = 0.0 ;
109109
110- for (auto const &[w, k] : mpi_view (g_wk.mesh ()))
110+ for (auto const &[w, k] : mpi_view (g_wk.mesh (), c))
111111 g_w[w] += g_wk[w, k];
112112
113- g_w = mpi::all_reduce (g_w);
113+ g_w = mpi::all_reduce (g_w, c );
114114 g_w /= kmesh.size ();
115115 return g_w;
116116}
117117
118118// ----------------------------------------------------
119119// Transformations: real space <-> reciprocal space
120120
121- g_wr_t fourier_wk_to_wr (g_wk_cvt g_wk) {
122- auto g_wr = fourier_wk_to_wr_general_target (g_wk);
121+ g_wr_t fourier_wk_to_wr (g_wk_cvt g_wk, mpi::communicator const &c ) {
122+ auto g_wr = fourier_wk_to_wr_general_target (g_wk, c );
123123 return g_wr;
124124}
125125
126- g_wk_t fourier_wr_to_wk (g_wr_cvt g_wr) {
127- auto g_wk = fourier_wr_to_wk_general_target (g_wr);
126+ g_wk_t fourier_wr_to_wk (g_wr_cvt g_wr, mpi::communicator const &c ) {
127+ auto g_wk = fourier_wr_to_wk_general_target (g_wr, c );
128128 return g_wk;
129129}
130130
131131// ----------------------------------------------------
132132// Transformations: Matsubara frequency <-> imaginary time
133133
134- g_wr_t fourier_tr_to_wr (g_tr_cvt g_tr, int nw) {
135- auto g_wr = fourier_tr_to_wr_general_target (g_tr, nw);
134+ g_wr_t fourier_tr_to_wr (g_tr_cvt g_tr, int nw, mpi::communicator const &c ) {
135+ auto g_wr = fourier_tr_to_wr_general_target (g_tr, nw, c );
136136 return g_wr;
137137}
138138
139- g_tr_t fourier_wr_to_tr (g_wr_cvt g_wr, int nt) {
140- auto g_tr = fourier_wr_to_tr_general_target (g_wr, nt);
139+ g_tr_t fourier_wr_to_tr (g_wr_cvt g_wr, int nt, mpi::communicator const &c ) {
140+ auto g_tr = fourier_wr_to_tr_general_target (g_wr, nt, c );
141141 return g_tr;
142142}
143143
0 commit comments