91 using namespace amrex::literals;
97 constexpr int lev = 0;
118 constexpr int reduction_comp = 0;
122 using ReduceTuple =
typename decltype(reduce_data)::Type;
136 for (
int i = 0; i < AMREX_SPACEDIM; ++i){
137 Extype[i] = Ex.
ixType()[i];
138 Eytype[i] = Ey.
ixType()[i];
139 Eztype[i] = Ez.
ixType()[i];
140 Bxtype[i] = Bx.
ixType()[i];
141 Bytype[i] = By.
ixType()[i];
142 Bztype[i] = Bz.
ixType()[i];
143 jxtype[i] = jx.
ixType()[i];
144 jytype[i] = jy.
ixType()[i];
145 jztype[i] = jz.
ixType()[i];
154#pragma omp parallel if (amrex::Gpu::notInLaunchRegion())
160 const amrex::Box& box = enclosedCells(mfi.nodaltilebox());
161 const auto& arrEx = Ex[mfi].
array();
162 const auto& arrEy = Ey[mfi].
array();
163 const auto& arrEz = Ez[mfi].
array();
164 const auto& arrBx = Bx[mfi].
array();
165 const auto& arrBy = By[mfi].
array();
166 const auto& arrBz = Bz[mfi].
array();
167 const auto& arrjx = jx[mfi].
array();
168 const auto& arrjy = jy[mfi].
array();
169 const auto& arrjz = jz[mfi].
array();
171 reduce_op.
eval(box, reduce_data,
176#if defined(WARPX_DIM_1D_Z)
177 const amrex::Real x = 0._rt;
178 const amrex::Real y = 0._rt;
179 const amrex::Real z = (k + 0.5_rt)*dx[0] + real_box.
lo(0);
180#elif defined(WARPX_DIM_RCYLINDER) || defined(WARPX_DIM_RSPHERE)
181 const amrex::Real x = (i + 0.5_rt)*dx[0] + real_box.
lo(0);
182 const amrex::Real y = 0._rt;
183 const amrex::Real z = 0._rt;
184#elif defined(WARPX_DIM_XZ) || defined(WARPX_DIM_RZ)
185 const amrex::Real x = (i + 0.5_rt)*dx[0] + real_box.
lo(0);
186 const amrex::Real y = 0._rt;
187 const amrex::Real z = (j + 0.5_rt)*dx[1] + real_box.
lo(1);
189 const amrex::Real x = (i + 0.5_rt)*dx[0] + real_box.
lo(0);
190 const amrex::Real y = (j + 0.5_rt)*dx[1] + real_box.
lo(1);
191 const amrex::Real z = (k + 0.5_rt)*dx[2] + real_box.
lo(2);
194 reduction_coarsening_ratio, i, j, k, reduction_comp);
196 reduction_coarsening_ratio, i, j, k, reduction_comp);
198 reduction_coarsening_ratio, i, j, k, reduction_comp);
200 reduction_coarsening_ratio, i, j, k, reduction_comp);
202 reduction_coarsening_ratio, i, j, k, reduction_comp);
204 reduction_coarsening_ratio, i, j, k, reduction_comp);
206 reduction_coarsening_ratio, i, j, k, reduction_comp);
208 reduction_coarsening_ratio, i, j, k, reduction_comp);
210 reduction_coarsening_ratio, i, j, k, reduction_comp);
212 return reduction_function_parser(x, y, z, Ex_interp, Ey_interp, Ez_interp,
213 Bx_interp, By_interp, Bz_interp,
214 jx_interp, jy_interp, jz_interp);
221 if (std::is_same_v<ReduceOp, amrex::ReduceOpMax>)
225 if (std::is_same_v<ReduceOp, amrex::ReduceOpMin>)
229 if (std::is_same_v<ReduceOp, amrex::ReduceOpSum>)