@@ -184,6 +184,18 @@ PhysicalParticleContainer::AddGaussianBeam(Real x_m, Real y_m, Real z_m,
184184 attribs[PIdx::uz] = u[2 ];
185185 attribs[PIdx::w ] = weight;
186186
187+ if (WarpX::do_boosted_frame_diagnostic && WarpX::do_boosted_frame_particles)
188+ {
189+ auto & particle_tile = DefineAndReturnParticleTile (0 , 0 , 0 );
190+ particle_tile.push_back_real (particle_comps[" xold" ], x);
191+ particle_tile.push_back_real (particle_comps[" yold" ], y);
192+ particle_tile.push_back_real (particle_comps[" zold" ], z);
193+
194+ particle_tile.push_back_real (particle_comps[" uxold" ], u[0 ]);
195+ particle_tile.push_back_real (particle_comps[" uyold" ], u[1 ]);
196+ particle_tile.push_back_real (particle_comps[" uzold" ], u[2 ]);
197+ }
198+
187199 AddOneParticle (0 , 0 , 0 , x, y, z, attribs);
188200 }
189201 }
@@ -455,16 +467,18 @@ PhysicalParticleContainer::AddPlasmaCPU (int lev, RealBox part_realbox)
455467 attribs[PIdx::ux] = u[0 ];
456468 attribs[PIdx::uy] = u[1 ];
457469 attribs[PIdx::uz] = u[2 ];
458-
459- #ifdef WARPX_STORE_OLD_PARTICLE_ATTRIBS
460- attribs[PIdx::xold] = x;
461- attribs[PIdx::yold] = y;
462- attribs[PIdx::zold] = z;
463-
464- attribs[PIdx::uxold] = u[0 ];
465- attribs[PIdx::uyold] = u[1 ];
466- attribs[PIdx::uzold] = u[2 ];
467- #endif
470+
471+ if (WarpX::do_boosted_frame_diagnostic && WarpX::do_boosted_frame_particles)
472+ {
473+ auto & particle_tile = DefineAndReturnParticleTile (lev, grid_id, tile_id);
474+ particle_tile.push_back_real (particle_comps[" xold" ], x);
475+ particle_tile.push_back_real (particle_comps[" yold" ], y);
476+ particle_tile.push_back_real (particle_comps[" zold" ], z);
477+
478+ particle_tile.push_back_real (particle_comps[" uxold" ], u[0 ]);
479+ particle_tile.push_back_real (particle_comps[" uyold" ], u[1 ]);
480+ particle_tile.push_back_real (particle_comps[" uzold" ], u[2 ]);
481+ }
468482
469483 AddOneParticle (lev, grid_id, tile_id, x, y, z, attribs);
470484 }
@@ -695,15 +709,18 @@ PhysicalParticleContainer::AddPlasmaGPU (int lev, RealBox part_realbox)
695709 attribs[PIdx::uy] = u[1 ];
696710 attribs[PIdx::uz] = u[2 ];
697711
698- #ifdef WARPX_STORE_OLD_PARTICLE_ATTRIBS
699- attribs[PIdx::xold] = x;
700- attribs[PIdx::yold] = y;
701- attribs[PIdx::zold] = z;
702-
703- attribs[PIdx::uxold] = u[0 ];
704- attribs[PIdx::uyold] = u[1 ];
705- attribs[PIdx::uzold] = u[2 ];
706- #endif
712+ // note - this will be slow on the GPU, need to revisit
713+ if (WarpX::do_boosted_frame_diagnostic && WarpX::do_boosted_frame_particles)
714+ {
715+ auto & particle_tile = DefineAndReturnParticleTile (lev, grid_id, tile_id);
716+ particle_tile.push_back_real (particle_comps[" xold" ], x);
717+ particle_tile.push_back_real (particle_comps[" yold" ], y);
718+ particle_tile.push_back_real (particle_comps[" zold" ], z);
719+
720+ particle_tile.push_back_real (particle_comps[" uxold" ], u[0 ]);
721+ particle_tile.push_back_real (particle_comps[" uyold" ], u[1 ]);
722+ particle_tile.push_back_real (particle_comps[" uzold" ], u[2 ]);
723+ }
707724
708725 ParticleType p;
709726 p.id () = ParticleType::NextID ();
@@ -1666,20 +1683,20 @@ PhysicalParticleContainer::PushPX(WarpXParIter& pti,
16661683 auto & Bzp = attribs[PIdx::Bz];
16671684 const long np = pti.numParticles ();
16681685
1669- # ifdef WARPX_STORE_OLD_PARTICLE_ATTRIBS
1670- auto & xpold = attribs[PIdx::xold];
1671- auto & ypold = attribs[PIdx::yold] ;
1672- auto & zpold = attribs[PIdx::zold] ;
1673- auto & uxpold = attribs[PIdx::uxold] ;
1674- auto & uypold = attribs[PIdx::uyold] ;
1675- auto & uzpold = attribs[PIdx::uzold] ;
1676-
1677- warpx_copy_attribs (&np, xp. dataPtr (), yp. dataPtr (), zp. dataPtr (),
1678- uxp .dataPtr (), uyp .dataPtr (), uzp .dataPtr (),
1679- xpold .dataPtr (), ypold .dataPtr (), zpold .dataPtr (),
1680- uxpold .dataPtr (), uypold .dataPtr (), uzpold .dataPtr ());
1681-
1682- # endif
1686+ if (WarpX::do_boosted_frame_diagnostic && WarpX::do_boosted_frame_particles)
1687+ {
1688+ auto & xpold = pti. GetAttribs (particle_comps[ " xold " ]) ;
1689+ auto & ypold = pti. GetAttribs (particle_comps[ " yold " ]) ;
1690+ auto & zpold = pti. GetAttribs (particle_comps[ " zold " ]) ;
1691+ auto & uxpold = pti. GetAttribs (particle_comps[ " uxold " ]) ;
1692+ auto & uypold = pti. GetAttribs (particle_comps[ " uyold " ]) ;
1693+ auto & uzpold = pti. GetAttribs (particle_comps[ " uzold " ]);
1694+
1695+ warpx_copy_attribs (&np, xp .dataPtr (), yp .dataPtr (), zp .dataPtr (),
1696+ uxp .dataPtr (), uyp .dataPtr (), uzp .dataPtr (),
1697+ xpold .dataPtr (), ypold .dataPtr (), zpold .dataPtr (),
1698+ uxpold. dataPtr (), uypold. dataPtr (), uzpold. dataPtr ());
1699+ }
16831700
16841701 warpx_particle_pusher (&np,
16851702 xp.dataPtr (),
@@ -1801,7 +1818,6 @@ void PhysicalParticleContainer::GetParticleSlice(const int direction, const Real
18011818{
18021819 BL_PROFILE (" PhysicalParticleContainer::GetParticleSlice" );
18031820
1804- #ifdef WARPX_STORE_OLD_PARTICLE_ATTRIBS
18051821 // Assume that the boost in the positive z direction.
18061822#if (AMREX_SPACEDIM == 2)
18071823 AMREX_ALWAYS_ASSERT (direction == 1 );
@@ -1864,12 +1880,12 @@ void PhysicalParticleContainer::GetParticleSlice(const int direction, const Real
18641880 auto & uyp_new = attribs[PIdx::uy ];
18651881 auto & uzp_new = attribs[PIdx::uz ];
18661882
1867- auto & xp_old = attribs[PIdx:: xold ] ;
1868- auto & yp_old = attribs[PIdx:: yold ] ;
1869- auto & zp_old = attribs[PIdx:: zold ] ;
1870- auto & uxp_old = attribs[PIdx:: uxold] ;
1871- auto & uyp_old = attribs[PIdx:: uyold] ;
1872- auto & uzp_old = attribs[PIdx:: uzold] ;
1883+ auto & xp_old = pti. GetAttribs (particle_comps[ " xold" ]) ;
1884+ auto & yp_old = pti. GetAttribs (particle_comps[ " yold" ]) ;
1885+ auto & zp_old = pti. GetAttribs (particle_comps[ " zold" ]) ;
1886+ auto & uxp_old = pti. GetAttribs (particle_comps[ " uxold" ]) ;
1887+ auto & uyp_old = pti. GetAttribs (particle_comps[ " uyold" ]) ;
1888+ auto & uzp_old = pti. GetAttribs (particle_comps[ " uzold" ]) ;
18731889
18741890 const long np = pti.numParticles ();
18751891
@@ -1919,10 +1935,6 @@ void PhysicalParticleContainer::GetParticleSlice(const int direction, const Real
19191935 }
19201936 }
19211937 }
1922- #else
1923- AMREX_ALWAYS_ASSERT_WITH_MESSAGE ( false ,
1924- " ERROR: WarpX must be compiled with STORE_OLD_PARTICLE_ATTRIBS=TRUE to use the back-transformed diagnostics" );
1925- #endif
19261938}
19271939
19281940int PhysicalParticleContainer::GetRefineFac (const Real x, const Real y, const Real z)
0 commit comments