39 integer :: n, idir, igrid, ipe_particle, nparticles_local
45 double precision :: w(ixg^t,1:nw)
58 rrd(n,idir) =
rng%unif_01()
62 {^
d&x(^
d,n) = xprobmin^
d + rrd(n+1,^
d) * (xprobmax^
d - xprobmin^
d)\}
79 if(ipe_particle ==
mype)
then
90 nparticles_local = nparticles_local + 1
101 call sample_update_payload(igrid,ps(igrid)%w,pso(igrid)%w,ps(igrid)%x,x(:,n),v(:,n),q(n),m(n),defpayload,
ndefpayload,0.d0)
104 call usr_update_payload(igrid,ps(igrid)%w,pso(igrid)%w,ps(igrid)%x,x(:,n),v(:,n),q(n),m(n),usrpayload,
nusrpayload,0.d0)
118 integer :: igrid, iigrid, idir
119 double precision,
dimension(ixG^T,1:nw) :: w
121 do iigrid=1,igridstail; igrid=igrids(iigrid);
125 gridvars(igrid)%w(ixg^t,1:
ngridvars) = 0.0d0
126 w(ixg^t,1:nw) = ps(igrid)%w(ixg^t,1:nw)
127 call phys_to_primitive(ixg^
ll,ixg^
ll,w,ps(igrid)%x)
132 gridvars(igrid)%wold(ixg^t,1:
ngridvars) = 0.0d0
133 w(ixg^t,1:nw) = pso(igrid)%w(ixg^t,1:nw)
134 call phys_to_primitive(ixg^
ll,ixg^
ll,w,ps(igrid)%x)
146 double precision,
intent(in) :: end_time
148 double precision,
dimension(1:ndir) :: v, x
149 double precision :: defpayload(ndefpayload)
150 double precision :: usrpayload(nusrpayload)
151 double precision :: tloc, tlocnew, dt_p, h1
152 double precision,
parameter :: eps=1.0
d-6, hmin=1.0
d-8
153 integer :: ipart, iipart, igrid
154 integer :: nok, nbad, ierror
176 call sample_update_payload(igrid,ps(igrid)%w,pso(igrid)%w,ps(igrid)%x,x,v,0.d0,0.d0,defpayload,ndefpayload,tlocnew)
177 particle(ipart)%payload(1:ndefpayload) = defpayload
179 call usr_update_payload(igrid,ps(igrid)%w,pso(igrid)%w,ps(igrid)%x,x,v,0.d0,0.d0,usrpayload,nusrpayload,tlocnew)
188 subroutine sample_update_payload(igrid,w,wold,xgrid,xpart,upart,qpart,mpart,mypayload,mynpayload,particle_time)
190 integer,
intent(in) :: igrid,mynpayload
191 double precision,
intent(in) :: w(ixG^T,1:nw),wold(ixG^T,1:nw)
192 double precision,
intent(in) :: xgrid(ixG^T,1:ndim),xpart(1:ndir),upart(1:ndir),qpart,mpart,particle_time
193 double precision,
intent(out) :: mypayload(mynpayload)
194 double precision :: wp, wp1, wp2, td
206 wp = wp1 * (1.0d0 - td) + wp2 * td
217 double precision,
intent(in) :: end_time
218 double precision :: dt_p
219 integer :: ipart, iipart, nout
220 double precision :: tout, dt_cfl
221 double precision :: v(1:
ndir)
Module with geometry-related routines (e.g., divergence, curl)
This module contains definitions of global parameters and variables and some generic functions/subrou...
double precision global_time
The global simulation time.
integer icomm
The MPI communicator.
integer mype
The rank of the current MPI task.
integer, dimension(:), allocatable, parameter d
integer ndir
Number of spatial dimensions (components) for vector variables.
integer ixm
the mesh range (within a block with ghost cells)
integer ierrmpi
A global MPI error return code.
double precision, dimension(:,:), allocatable rnode
Corner coordinates.
double precision, dimension(ndim) dxlevel
Module with shared functionality for all the particle movers.
pure subroutine limit_dt_endtime(t_left, dt_p)
integer num_particles
Number of particles.
double precision const_dt_particles
If positive, a constant time step for the particles.
double precision dtsave_particles
Time interval to save particles.
integer ngridvars
Number of variables for grid field.
integer nusrpayload
Number of user-defined payload variables for a particle.
subroutine find_particle_ipe(x, igrid_particle, ipe_particle)
integer npayload
Number of total payload variables for a particle.
integer, dimension(:), allocatable particles_active_on_mype
Array of identity numbers of active particles in current processor.
subroutine push_particle_into_particles_on_mype(ipart)
integer nparticles_active_on_mype
Number of active particles in current processor.
procedure(sub_define_additional_gridvars), pointer particles_define_additional_gridvars
integer nparticles
Identity number and total number of particles.
type(particle_ptr), dimension(:), allocatable particle
integer, dimension(:), allocatable vp
Variable index for fluid velocity.
procedure(sub_integrate), pointer particles_integrate
procedure(sub_fill_gridvars), pointer particles_fill_gridvars
integer ndefpayload
Number of default payload variables for a particle.
integer igrid_working
set the current igrid for the particle integrator:
subroutine interpolate_var(igrid, ixIL, ixOL, gf, x, xloc, gfloc)
Scattered sampling based on fixed-particle interpolation By Fabio Bacchini (2020)
subroutine, public sample_init()
subroutine sample_fill_gridvars
pure double precision function sample_get_particle_dt(partp, end_time)
subroutine sample_integrate_particles(end_time)
subroutine sample_update_payload(igrid, w, wold, xgrid, xpart, upart, qpart, mpart, mypayload, mynpayload, particle_time)
Payload update.
subroutine, public sample_create_particles()
Module with all the methods that users can customize in AMRVAC.
procedure(particle_position), pointer usr_particle_position
procedure(check_particle), pointer usr_check_particle
procedure(create_particles), pointer usr_create_particles
procedure(update_payload), pointer usr_update_payload