9
9
#include " core/utilities/box/box.hpp"
10
10
#include " core/utilities/point/point.hpp"
11
11
12
- #include " gmock/gmock.h"
13
12
#include " gtest/gtest.h"
14
13
15
14
#include " tests/initializer/init_functions.hpp"
16
- using namespace PHARE ::initializer::test_fn::func_1d ; // density/etc are here
15
+ # include " tests/core/data/gridlayout/test_gridlayout.hpp "
17
16
18
17
using namespace PHARE ::core;
19
- using namespace PHARE ::initializer;
18
+
19
+ namespace PHARE ::initializer::test_fn::func_1d
20
+ {
20
21
21
22
22
23
class AMaxwellianParticleInitializer1D : public ::testing::Test
23
24
{
24
25
private:
25
- using GridLayoutT = GridLayout<GridLayoutImplYee<1 , 1 >>;
26
26
using ParticleArrayT = ParticleArray<1 >;
27
27
using InitFunctionArray = std::array<InitFunction<1 >, 3 >;
28
+ using GridLayoutT = GridLayout<GridLayoutImplYee<1 , 1 >>;
28
29
29
30
public:
30
31
AMaxwellianParticleInitializer1D ()
@@ -34,10 +35,8 @@ class AMaxwellianParticleInitializer1D : public ::testing::Test
34
35
density, InitFunctionArray{vx, vy, vz}, InitFunctionArray{vthx, vthy, vthz}, 1 .,
35
36
nbrParticlesPerCell)}
36
37
{
37
- //
38
38
}
39
39
40
-
41
40
GridLayoutT layout;
42
41
ParticleArrayT particles;
43
42
std::uint32_t nbrParticlesPerCell{10000 };
@@ -46,7 +45,6 @@ class AMaxwellianParticleInitializer1D : public ::testing::Test
46
45
47
46
48
47
49
-
50
48
TEST_F (AMaxwellianParticleInitializer1D, loadsTheCorrectNbrOfParticles)
51
49
{
52
50
auto nbrCells = layout.nbrCells ();
@@ -57,7 +55,6 @@ TEST_F(AMaxwellianParticleInitializer1D, loadsTheCorrectNbrOfParticles)
57
55
58
56
59
57
60
-
61
58
TEST_F (AMaxwellianParticleInitializer1D, loadsParticlesInTheDomain)
62
59
{
63
60
initializer->loadParticles (particles, layout);
@@ -73,8 +70,56 @@ TEST_F(AMaxwellianParticleInitializer1D, loadsParticlesInTheDomain)
73
70
}
74
71
}
75
72
73
+ } // namespace PHARE::initializer::test_fn::func_1d
74
+
75
+
76
+ namespace PHARE ::initializer::test_fn::func_2d
77
+ {
78
+
79
+ class AMaxwellianParticleInitializer2D : public ::testing::Test
80
+ {
81
+ private:
82
+ using ParticleArrayT = ParticleArray<2 >;
83
+ using InitFunctionArray = std::array<InitFunction<2 >, 3 >;
84
+ using GridLayoutT = GridLayout<GridLayoutImplYee<2 , 1 >>;
85
+
86
+
87
+
88
+ public:
89
+ AMaxwellianParticleInitializer2D ()
90
+ : layout{50 }
91
+ , initializer{std::make_unique<MaxwellianParticleInitializer<ParticleArrayT, GridLayoutT>>(
92
+ density, InitFunctionArray{vx, vy, vz}, InitFunctionArray{vthx, vthy, vthz}, 1 .,
93
+ nbrParticlesPerCell)}
94
+ {
95
+ }
96
+
97
+ TestGridLayout<GridLayoutT> layout;
98
+ ParticleArrayT particles{layout.AMRBox ()};
99
+ std::uint32_t nbrParticlesPerCell{600 };
100
+ std::unique_ptr<MaxwellianParticleInitializer<ParticleArrayT, GridLayoutT>> initializer;
101
+ };
102
+
103
+ TEST_F (AMaxwellianParticleInitializer2D, loadsTheCorrectNbrOfParticles)
104
+ {
105
+ // vector push back allocation observations
106
+ // 100 ppc = 262144 - 250000 = 12144 == 12144 * 64 / 1e6 == .7MB overallocated
107
+ // 600 ppc = 2097152 - 1500000 = 597152 * 64 / 1e6 == 38MB overallocated
108
+
109
+ auto const expectedNbrParticles = nbrParticlesPerCell * product (layout.AMRBox ().shape ());
110
+ initializer->loadParticles (particles, layout);
111
+ EXPECT_EQ (expectedNbrParticles, particles.size ());
112
+ auto outer_cell_count = std::pow (50 , 2 ) - std::pow (48 , 2 );
113
+ EXPECT_EQ (particles.capacity (),
114
+ particles.size () + (outer_cell_count * nbrParticlesPerCell * .1 ));
115
+
116
+ // new method
117
+ // 100 ppc = (1511760 - 1500000) * 64 / 1e6 == 0.12544 overallocated
118
+ // 600 ppc = (1511760 - 1500000) * 64 / 1e6 == 0.75264 overallocated
119
+ }
76
120
77
121
122
+ } // namespace PHARE::initializer::test_fn::func_2d
78
123
79
124
int main (int argc, char ** argv)
80
125
{
0 commit comments