38 amrex::ParticleReal vx,
39 amrex::ParticleReal vy,
40 amrex::ParticleReal
vz,
63 const amrex::Real vxr =
static_cast<amrex::Real
>(vx);
64 const amrex::Real vyr =
static_cast<amrex::Real
>(vy);
65 const amrex::Real vzr =
static_cast<amrex::Real
>(
vz);
71 &nx_arr(ixv[0], ixv[1], ixv[2], 0), 1);
73 &ny_arr(iyv[0], iyv[1], iyv[2], 0), 1);
75 &nz_arr(izv[0], izv[1], izv[2], 0), 1);
79 &wx_arr(ixv[0], ixv[1], ixv[2], 0), wpx_var);
81 &wy_arr(iyv[0], iyv[1], iyv[2], 0), wpy_var);
83 &wz_arr(izv[0], izv[1], izv[2], 0), wpz_var);
87 &vxbar_arr(ixv[0], ixv[1], ixv[2], 0), wpx_var*vxr);
89 &vybar_arr(iyv[0], iyv[1], iyv[2], 0), wpy_var*vyr);
91 &vzbar_arr(izv[0], izv[1], izv[2], 0), wpz_var*vzr);
100 amrex::Real vzb = 0.;
106 if (nx_arr(ixv[0], ixv[1], ixv[2], 0) > 0) {
107 vxb = vxbar_arr(ixv[0], ixv[1], ixv[2], 0)/wx_arr(ixv[0], ixv[1], ixv[2], 0);
109 if (ny_arr(iyv[0], iyv[1], iyv[2], 0) > 0) {
110 vyb = vybar_arr(iyv[0], iyv[1], iyv[2], 0)/wy_arr(iyv[0], iyv[1], iyv[2], 0);
112 if (nz_arr(izv[0], izv[1], izv[2], 0) > 0) {
113 vzb = vzbar_arr(izv[0], izv[1], izv[2], 0)/wz_arr(izv[0], izv[1], izv[2], 0);
118 const amrex::Real vxd = vxr - vxb;
119 const amrex::Real vyd = vyr - vyb;
120 const amrex::Real vzd = vzr - vzb;
124 &w2x_arr(ixv[0], ixv[1], ixv[2], 0), wpx_var*vxd*vxd);
126 &w2y_arr(iyv[0], iyv[1], iyv[2], 0), wpy_var*vyd*vyd);
128 &w2z_arr(izv[0], izv[1], izv[2], 0), wpz_var*vzd*vzd);
157 [[maybe_unused]]
const amrex::ParticleReal xp,
158 [[maybe_unused]]
const amrex::ParticleReal yp,
159 [[maybe_unused]]
const amrex::ParticleReal zp,
160 const amrex::ParticleReal wp,
161 const amrex::ParticleReal vx,
162 const amrex::ParticleReal vy,
163 const amrex::ParticleReal
vz,
181 const amrex::Real relative_time,
185 [[maybe_unused]]
const int n_rz_azimuthal_modes)
187 using namespace amrex::literals;
194#if !defined(WARPX_DIM_1D_Z)
199#if defined(WARPX_DIM_RZ) || defined(WARPX_DIM_RCYLINDER)
202 const amrex::Real xpmid = xp + relative_time*vx;
203 const amrex::Real ypmid = yp + relative_time*vy;
204 const amrex::Real rpmid = std::sqrt(xpmid*xpmid + ypmid*ypmid);
206 const double xmid = (rpmid - xyzmin.
x)*dinv.
x;
207#elif defined(WARPX_DIM_RSPHERE)
209 const amrex::Real xpmid = xp + relative_time*vx;
210 const amrex::Real ypmid = yp + relative_time*vy;
211 const amrex::Real zpmid = zp + relative_time*
vz;
212 const amrex::Real rpmid = std::sqrt(xpmid*xpmid + ypmid*ypmid + zpmid*zpmid);
214 const double xmid = (rpmid - xyzmin.
x)*dinv.
x;
216 const double xmid = ((xp - xyzmin.
x) + relative_time*vx)*dinv.
x;
224 double sx_node[depos_order + 1] = {0.};
225 double sx_cell[depos_order + 1] = {0.};
228 if (varx_type[0] ==
NODE || vary_type[0] ==
NODE || varz_type[0] ==
NODE) {
229 j_node = compute_shape_factor(sx_node, xmid);
231 if (varx_type[0] == CELL || vary_type[0] == CELL || varz_type[0] == CELL) {
232 j_cell = compute_shape_factor(sx_cell, xmid - 0.5);
235 amrex::Real sx_jx[depos_order + 1] = {0._rt};
236 amrex::Real sx_jy[depos_order + 1] = {0._rt};
237 amrex::Real sx_jz[depos_order + 1] = {0._rt};
238 for (
int ix=0; ix<=depos_order; ix++)
240 sx_jx[ix] = ((varx_type[0] ==
NODE) ? amrex::Real(sx_node[ix]) : amrex::Real(sx_cell[ix]));
241 sx_jy[ix] = ((vary_type[0] ==
NODE) ? amrex::Real(sx_node[ix]) : amrex::Real(sx_cell[ix]));
242 sx_jz[ix] = ((varz_type[0] ==
NODE) ? amrex::Real(sx_node[ix]) : amrex::Real(sx_cell[ix]));
245 int const j_jx = ((varx_type[0] ==
NODE) ? j_node : j_cell);
246 int const j_jy = ((vary_type[0] ==
NODE) ? j_node : j_cell);
247 int const j_jz = ((varz_type[0] ==
NODE) ? j_node : j_cell);
250#if defined(WARPX_DIM_3D)
253 const double ymid = ((yp - xyzmin.
y) + relative_time*vy)*dinv.
y;
254 double sy_node[depos_order + 1] = {0.};
255 double sy_cell[depos_order + 1] = {0.};
258 if (varx_type[1] ==
NODE || vary_type[1] ==
NODE || varz_type[1] ==
NODE) {
259 k_node = compute_shape_factor(sy_node, ymid);
261 if (varx_type[1] == CELL || vary_type[1] == CELL || varz_type[1] == CELL) {
262 k_cell = compute_shape_factor(sy_cell, ymid - 0.5);
264 amrex::Real sy_jx[depos_order + 1] = {0._rt};
265 amrex::Real sy_jy[depos_order + 1] = {0._rt};
266 amrex::Real sy_jz[depos_order + 1] = {0._rt};
267 for (
int iy=0; iy<=depos_order; iy++)
269 sy_jx[iy] = ((varx_type[1] ==
NODE) ? amrex::Real(sy_node[iy]) : amrex::Real(sy_cell[iy]));
270 sy_jy[iy] = ((vary_type[1] ==
NODE) ? amrex::Real(sy_node[iy]) : amrex::Real(sy_cell[iy]));
271 sy_jz[iy] = ((varz_type[1] ==
NODE) ? amrex::Real(sy_node[iy]) : amrex::Real(sy_cell[iy]));
273 int const k_jx = ((varx_type[1] ==
NODE) ? k_node : k_cell);
274 int const k_jy = ((vary_type[1] ==
NODE) ? k_node : k_cell);
275 int const k_jz = ((varz_type[1] ==
NODE) ? k_node : k_cell);
278#if !defined(WARPX_DIM_RCYLINDER) && !defined(WARPX_DIM_RSPHERE)
281 constexpr int zdir = WARPX_ZINDEX;
282 const double zmid = ((zp - xyzmin.
z) + relative_time*
vz)*dinv.
z;
283 double sz_node[depos_order + 1] = {0.};
284 double sz_cell[depos_order + 1] = {0.};
287 if (varx_type[zdir] ==
NODE || vary_type[zdir] ==
NODE || varz_type[zdir] ==
NODE) {
288 l_node = compute_shape_factor(sz_node, zmid);
290 if (varx_type[zdir] == CELL || vary_type[zdir] == CELL || varz_type[zdir] == CELL) {
291 l_cell = compute_shape_factor(sz_cell, zmid - 0.5);
293 amrex::Real sz_jx[depos_order + 1] = {0._rt};
294 amrex::Real sz_jy[depos_order + 1] = {0._rt};
295 amrex::Real sz_jz[depos_order + 1] = {0._rt};
296 for (
int iz=0; iz<=depos_order; iz++)
298 sz_jx[iz] = ((varx_type[zdir] ==
NODE) ? amrex::Real(sz_node[iz]) : amrex::Real(sz_cell[iz]));
299 sz_jy[iz] = ((vary_type[zdir] ==
NODE) ? amrex::Real(sz_node[iz]) : amrex::Real(sz_cell[iz]));
300 sz_jz[iz] = ((varz_type[zdir] ==
NODE) ? amrex::Real(sz_node[iz]) : amrex::Real(sz_cell[iz]));
302 int const l_jx = ((varx_type[zdir] ==
NODE) ? l_node : l_cell);
303 int const l_jy = ((vary_type[zdir] ==
NODE) ? l_node : l_cell);
304 int const l_jz = ((varz_type[zdir] ==
NODE) ? l_node : l_cell);
307#if defined(WARPX_DIM_1D_Z)
308 for (
int iz=0; iz<=depos_order; iz++){
309 const amrex::Real wpx_var =
static_cast<amrex::Real
>(wp)*sz_jx[iz];
310 const amrex::Real wpy_var =
static_cast<amrex::Real
>(wp)*sz_jy[iz];
311 const amrex::Real wpz_var =
static_cast<amrex::Real
>(wp)*sz_jz[iz];
320 wpx_var, wpy_var, wpz_var,
321 nx_arr, ny_arr, nz_arr,
322 wx_arr, wy_arr, wz_arr,
323 w2x_arr, w2y_arr, w2z_arr,
324 vxbar_arr, vybar_arr, vzbar_arr,
328#elif defined(WARPX_DIM_RCYLINDER) || defined(WARPX_DIM_RSPHERE)
329 for (
int ix=0; ix<=depos_order; ix++){
330 const amrex::Real wpx_var = wp*sx_jx[ix];
331 const amrex::Real wpy_var = wp*sx_jy[ix];
332 const amrex::Real wpz_var = wp*sx_jz[ix];
341 wpx_var, wpy_var, wpz_var,
342 nx_arr, ny_arr, nz_arr,
343 wx_arr, wy_arr, wz_arr,
344 w2x_arr, w2y_arr, w2z_arr,
345 vxbar_arr, vybar_arr, vzbar_arr,
349#elif defined(WARPX_DIM_XZ) || defined(WARPX_DIM_RZ)
350 for (
int iz=0; iz<=depos_order; iz++){
351 for (
int ix=0; ix<=depos_order; ix++){
352 const amrex::Real wpx_var = wp*sx_jx[ix]*sz_jx[iz];
353 const amrex::Real wpy_var = wp*sx_jy[ix]*sz_jy[iz];
354 const amrex::Real wpz_var = wp*sx_jz[ix]*sz_jz[iz];
363 wpx_var, wpy_var, wpz_var,
364 nx_arr, ny_arr, nz_arr,
365 wx_arr, wy_arr, wz_arr,
366 w2x_arr, w2y_arr, w2z_arr,
367 vxbar_arr, vybar_arr, vzbar_arr,
372#elif defined(WARPX_DIM_3D)
373 for (
int iz=0; iz<=depos_order; iz++){
374 for (
int iy=0; iy<=depos_order; iy++){
375 for (
int ix=0; ix<=depos_order; ix++){
376 const amrex::Real wpx_var = wp*sx_jx[ix]*sy_jx[iy]*sz_jx[iz];
377 const amrex::Real wpy_var = wp*sx_jy[ix]*sy_jy[iy]*sz_jy[iz];
378 const amrex::Real wpz_var = wp*sx_jz[ix]*sy_jz[iy]*sz_jz[iz];
387 wpx_var, wpy_var, wpz_var,
388 nx_arr, ny_arr, nz_arr,
389 wx_arr, wy_arr, wz_arr,
390 w2x_arr, w2y_arr, w2z_arr,
391 vxbar_arr, vybar_arr, vzbar_arr,
429 const amrex::ParticleReal * wp,
430 const amrex::ParticleReal * uxp,
431 const amrex::ParticleReal * uyp,
432 const amrex::ParticleReal * uzp,
450 const long np_to_deposit,
451 const amrex::Real relative_time,
455 [[maybe_unused]]
const int n_rz_azimuthal_modes)
457 using namespace amrex::literals;
459#if defined(WARPX_DIM_RZ)
461 n_rz_azimuthal_modes == 1,
462 "Azimuthal Fourier decomposition for temperature deposition is not implemented."
463 " Only mode=0 supported in RZ."
489 amrex::ParticleReal xp, yp, zp;
490 GetPosition(ip, xp, yp, zp);
493 const amrex::ParticleReal gaminv = 1.0_rt/std::sqrt(1.0_rt + uxp[ip]*uxp[ip]*clightsq
494 + uyp[ip]*uyp[ip]*clightsq
495 + uzp[ip]*uzp[ip]*clightsq);
496 const amrex::ParticleReal vx = uxp[ip]*gaminv;
497 const amrex::ParticleReal vy = uyp[ip]*gaminv;
498 const amrex::ParticleReal
vz = uzp[ip]*gaminv;
501 xp, yp, zp, wp[ip], vx, vy,
vz,
502 nx_arr, ny_arr, nz_arr,
503 wx_arr, wy_arr, wz_arr,
504 w2x_arr, w2y_arr, w2z_arr,
505 vxbar_arr, vybar_arr, vzbar_arr,
506 varx_type, vary_type, varz_type,
508 relative_time, dinv, xyzmin,
509 lo, n_rz_azimuthal_modes);