Artificially killing particles
For example for doing cylindrically symmetric simulations of an H- extraction, where electrons are dumped at some location, you can artificially kill the particles at some location. For that you need to define a callback functor:
class THCallback : public TrajectoryHandlerCallback {
public:
THCallback() {}
virtual ~THCallback() {}
virtual void operator()( ParticleBase *particle, ParticlePBase *xcur, ParticlePBase *xend ) const {
ParticlePCyl *pcur = (ParticlePCyl *)( xcur );
ParticlePCyl *pend = (ParticlePCyl *)( xend );
// Kill particles with mass less than 0.5 atomic mass and x-coordinate more than 3 mm.
if( particle->m() < 0.5*MASS_U && (*pcur)[PARTICLE_X] >= 3.0e-3 ) {
*pend = *pcur;
particle->set_status( PARTICLE_COLL );
}
}
};
Then you need to add this callback to the particle database:
THCallback thc; pdb.set_trajectory_handler_callback( &thc );