MCPcopy Create free account
hub / github.com/AMReX-Codes/amrex / test_array4

Function test_array4

Tests/ArrayND/main.cpp:12–50  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

10
11template <typename T>
12void test_array4 (Array4<T> const& a, T tot)
13{
14 ReduceOps<ReduceOpSum> reduce_op;
15 ReduceData<T> reduce_data(reduce_op);
16 using ReduceTuple = typename decltype(reduce_data)::Type;
17 Box box(IntVectShrink<AMREX_SPACEDIM,4>(a.begin),
18 IntVectShrink<AMREX_SPACEDIM,4>(a.end-1));
19 if (a.nComp() == 1) {
20 reduce_op.eval(box, reduce_data,
21 [=] AMREX_GPU_DEVICE (int i, int j, int k) -> ReduceTuple
22 {
23 auto v0 = a(i,j,k);
24 auto v1 = a(i,j,k,0);
25 auto v2 = a(IntVectND<4>(i,j,k,0));
26 auto v3 = a(IntVect(AMREX_D_DECL(i,j,k)));
27 auto v4 = a(Dim3{.x = i, .y = j, .z = k});
28 auto* p0 = a.ptr(i,j,k);
29 auto* p1 = a.ptr(i,j,k,0);
30 auto* p2 = a.ptr(IntVectND<4>(i,j,k,0));
31 auto* p3 = a.ptr(IntVect(AMREX_D_DECL(i,j,k)));
32 auto* p4 = a.ptr(Dim3{.x = i, .y = j, .z = k});
33 return (v0+v1+v2+v3+v4+*p0+*p1+*p2+*p3+*p4)/10;
34 });
35 } else {
36 reduce_op.eval(box, a.nComp(), reduce_data,
37 [=] AMREX_GPU_DEVICE (int i, int j, int k, int n) -> ReduceTuple
38 {
39 auto v0 = a(i,j,k,n);
40 auto v1 = a(IntVect(AMREX_D_DECL(i,j,k)),n);
41 auto v2 = a(Dim3{.x = i, .y = j, .z = k},n);
42 auto* p0 = a.ptr(i,j,k,n);
43 auto* p1 = a.ptr(IntVect(AMREX_D_DECL(i,j,k)),n);
44 auto* p2 = a.ptr(Dim3{.x = i, .y = j, .z = k},n);
45 return (v0+v1+v2+*p0+*p1+*p2)/6;
46 });
47 }
48 ReduceTuple hv = reduce_data.value(reduce_op);
49 AMREX_ALWAYS_ASSERT(tot == amrex::get<0>(hv));
50}
51
52template <typename T, int N>
53void test_comp (ArrayND<T,N,true> const& a, T tot)

Callers 1

testFunction · 0.85

Calls 4

ptrMethod · 0.80
nCompMethod · 0.45
evalMethod · 0.45
valueMethod · 0.45

Tested by

no test coverage detected