subroutine sample_integrate_particles(end_time)
! this interpolates the HD/MHD quantities at the particle positions
use mod_global_parameters
use mod_usr_methods, only: usr_create_particles, usr_update_payload,&
usr_particle_position
double precision, intent(in) :: end_time
double precision, dimension(1:ndir) :: v, x
double precision :: defpayload(ndefpayload)
double precision :: usrpayload(nusrpayload)
double precision :: tloc, tlocnew, dt_p, h1
double precision,parameter :: eps=1.0d-6, hmin=1.0d-8
integer :: ipart, iipart, igrid
integer :: nok, nbad, ierror
do iipart=1,nparticles_active_on_mype
ipart = particles_active_on_mype(iipart);
dt_p = sample_get_particle_dt(particle(ipart),&
end_time)
particle(ipart)%self%dt = dt_p
igrid = particle(ipart)%igrid
igrid_working = igrid
tloc = particle(ipart)%self%time
x(1:ndir) = particle(ipart)%self%x(1:ndir)
tlocnew = tloc+dt_p
! Position update (if defined)
! TODO: this may create problems with interpolation out of boundaries
if (associated(usr_particle_position)) call usr_particle_position(x,&
particle(ipart)%self%index,tloc,tlocnew)
particle(ipart)%self%x(1:ndir) = x
! Time update
particle(ipart)%self%time = tlocnew
! Update payload
call sample_update_payload(igrid,x,v,0.d0,0.d0,defpayload,ndefpayload,&
tlocnew)
particle(ipart)%payload(1:ndefpayload) = defpayload
if (associated(usr_update_payload)) then
call usr_update_payload(igrid,x,v,0.d0,0.d0,usrpayload,nusrpayload,&
tlocnew)
particle(ipart)%payload(ndefpayload+1:npayload) = usrpayload
end if
end do
end subroutine sample_integrate_particles