Esempio n. 1
0
TEST(Array, Algebra) {

 array<int, 1> A(3), B(3), C;
 array<double, 1> D;
 B() = 2;
 A() = 3;

 C = A + B;
 EXPECT_ARRAY_NEAR(C, array<int, 1>{5, 5, 5});

 C = A * B;
 EXPECT_ARRAY_NEAR(C, array<int, 1>{6, 6, 6});

 C = 2 * B;
 EXPECT_ARRAY_NEAR(C, array<int, 1>{4, 4, 4});

 C = 2 * B;
 EXPECT_ARRAY_NEAR(C, array<int, 1>{4, 4, 4});

 D = 2.3 * B;
 EXPECT_ARRAY_NEAR(D, array<double, 1>{4.6, 4.6, 4.6});

 D = A + B / 1.2;
 EXPECT_ARRAY_NEAR(D, array<double, 1>{4.66666666666667, 4.66666666666667, 4.66666666666667});

 auto x = A + B + 2 * A;
 EXPECT_PRINT("(([3,3,3] + [2,2,2]) + (2 * [3,3,3]))", x);

 C = A + 2 * A + 3 * A - 2 * A + A - A + A + A * 3 + A + A + A + A + A + A + A + A + A + A + A + A + A;
 EXPECT_ARRAY_NEAR(C, array<int, 1>{63, 63, 63});
}
Esempio n. 2
0
TEST(GfCartesian, H5_RW_EvaluatorM) {
 double beta = 1;
 auto g = gf<cartesian_product<imfreq, imfreq>, matrix_valued>{{{beta, Fermion, 5}, {beta, Boson, 5}}, {1, 1}};
 g() = 2;

 h5::file file("g_nu_nuph5", H5F_ACC_TRUNC);
 h5_write(file, "g", g);
 gf<cartesian_product<imfreq, imfreq>, matrix_valued> g2{};
 h5_read(file, "g", g2);

 EXPECT_ARRAY_NEAR(g.data(), g2.data());
 //EXPECT_GF_NEAR(g, g2);

 auto w0 = matsubara_freq(0, beta, Fermion);
 auto W10 = matsubara_freq(10, beta, Boson);
 auto W0 = matsubara_freq(0, beta, Boson);

 EXPECT_ARRAY_NEAR(g(w0, W0), g2(w0, W0));
 EXPECT_ARRAY_NEAR(g(w0, W10), g2(w0, W10));
}
Esempio n. 3
0
TEST(Array, InverseTensor) {

  array<dcomplex, 3> a(2, 2, 2);
  a() = a() + 2;

  a() = inverse(a);

  array<dcomplex, 3> r(2, 2, 2);
  r() = 0.5;

  EXPECT_ARRAY_NEAR(r, a);
}
Esempio n. 4
0
TEST(Gfs, MPI_multivar) {

 mpi::communicator world;

 int nw = 2, nbw = 10;
 double beta = 10;
 clef::placeholder<0> k_;
 clef::placeholder<1> q_;
 clef::placeholder<2> r_;
 clef::placeholder<3> iw_;
 clef::placeholder<4> inu_;
 clef::placeholder<5> inup_;

 auto g = gf3_s{{{beta, Boson, nbw}, {beta, Fermion, nw}, {beta, Fermion, nw}}};
 g(iw_, inu_, inup_) << inu_ + 10 * inup_ + 100 * iw_;
 
 auto g2 = g;
 g2 = mpi_reduce(g, world);
 if (world.rank() == 0) EXPECT_ARRAY_NEAR(g2.data(), g.data() * world.size());

 mpi_broadcast(g2, world);
 if (world.rank() == 1) EXPECT_ARRAY_NEAR(g2.data(), g.data()* world.size());

 gf3_s g3 = mpi_all_reduce(g, world);
 EXPECT_ARRAY_NEAR(g3.data(), g.data() * world.size());

 gf3_s g4 = mpi_scatter(g);
 g2(iw_, inu_, inup_) << g2(iw_, inu_, inup_) * (1 + world.rank());
 g4 = mpi_gather(g2);
 // Test the result ?


 auto G = make_block_gf<cartesian_product<imfreq, imfreq, imfreq>, scalar_valued>({g});
 auto g0 = gf<imfreq, scalar_valued>{{beta, Boson, nbw}};
 auto G2 = make_block_gf<imfreq, scalar_valued>({g0});

 mpi_broadcast(G, world);
 mpi_broadcast(G2, world);
}
Esempio n. 5
0
// ------------------
TEST(Array, CrossConstruct2) {

    array<long, 2> A(2, 3);

    for (int i = 0; i < 2; ++i)
        for (int j = 0; j < 3; ++j) A(i, j) = 10 * i + j;

    std::vector<array<long, 2>> V(3, A);

    std::vector<array_view<long, 2>> W;
    for (auto& x : V) W.push_back(x);

    std::vector<array_view<long, 2>> W2(W);

    for (int i = 1; i < 3; ++i) V[i] *= i;

    for (int i = 1; i < 3; ++i) EXPECT_ARRAY_NEAR(W2[i], i * A);
}
Esempio n. 6
0
TEST(Array, CrossConstruct1) {
    vector<int> Vi(3);
    Vi() = 3;
    vector<double> Vd(Vi);
    EXPECT_ARRAY_NEAR(Vd, Vi);
}