Update payload subroutine
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| integer, | intent(in) | :: | igrid | |||
| double precision, | intent(in) | :: | xpart(1:ndir) | |||
| double precision, | intent(in) | :: | upart(1:ndir) | |||
| double precision, | intent(in) | :: | qpart | |||
| double precision, | intent(in) | :: | mpart | |||
| double precision, | intent(out) | :: | mypayload(mynpayload) | |||
| integer, | intent(in) | :: | mynpayload | |||
| double precision, | intent(in) | :: | particle_time |
subroutine Lorentz_update_payload(igrid,xpart,upart,qpart,mpart,mypayload,& mynpayload,particle_time) use mod_global_parameters use mod_geometry integer, intent(in) :: igrid,mynpayload double precision, intent(in) :: xpart(1:ndir),upart(1:ndir),qpart,mpart,& particle_time double precision, intent(out) :: mypayload(mynpayload) double precision :: b(3), e(3), tmp(3), lfac, vfluid(3),& current(3), rho, rhoold, td call get_bfield(igrid, xpart, particle_time, b) call get_efield(igrid, xpart, particle_time, e) ! call get_vec(bp, igrid, xpart,particle_time,b) ! call get_vec(vp, igrid, xpart,particle_time,vfluid) ! call get_vec(jp, igrid, xpart,particle_time,current) ! select case (coordinate) ! case (Cartesian,Cartesian_stretched,spherical) ! e(1) = -vfluid(2)*b(3)+vfluid(3)*b(2) + particles_eta*current(1) ! e(2) = vfluid(1)*b(3)-vfluid(3)*b(1) + particles_eta*current(2) ! e(3) = -vfluid(1)*b(2)+vfluid(2)*b(1) + particles_eta*current(3) ! case (cylindrical) ! e(r_) = -vfluid(phi_)*b(z_)+vfluid(z_)*b(phi_) + particles_eta*current(r_) ! e(phi_) = vfluid(r_)*b(z_)-vfluid(z_)*b(r_) + particles_eta*current(phi_) ! e(z_) = -vfluid(r_)*b(phi_)+vfluid(phi_)*b(r_) + particles_eta*current(z_) ! end select ! if (particles_etah > zero) then ! call interpolate_var(igrid,ixG^LL,ixM^LL,ps(igrid)%w(ixG^T,1),ps(igrid)%x,xpart,rho) ! if (time_advance) then ! td = (particle_time - global_time) / dt ! call interpolate_var(igrid,ixG^LL,ixM^LL,pso(igrid)%w(ixG^T,1),ps(igrid)%x,xpart,rhoold) ! rho = rhoold * (1.d0-td) + rho * td ! end if ! select case (coordinate) ! case (Cartesian,Cartesian_stretched,spherical) ! e(1) = e(1) + particles_etah/rho * (current(2)*b(3) - current(3)*b(2)) ! e(2) = e(2) + particles_etah/rho * (-current(1)*b(3) + current(3)*b(1)) ! e(3) = e(3) + particles_etah/rho * (current(1)*b(2) - current(2)*b(1)) ! case (cylindrical) ! e(r_) = e(r_) + particles_etah/rho * (current(phi_)*b(z_) - current(z_)*b(phi_)) ! e(phi_) = e(phi_) + particles_etah/rho * (-current(r_)*b(z_) + current(z_)*b(r_)) ! e(z_) = e(z_) + particles_etah/rho * (current(r_)*b(phi_) - current(phi_)*b(r_)) ! end select ! end if ! Payload update ! Lorentz factor if (mynpayload > 0) then call get_lfac(upart,lfac) mypayload(1) = lfac end if ! current gyroradius if (mynpayload > 1) then call cross(upart,b,tmp) tmp = tmp / sqrt(sum(b(:)**2)) mypayload(2) = mpart/abs(qpart)*sqrt(sum(tmp(:)**2)) / & sqrt(sum(b(:)**2)) end if ! magnetic moment if (mynpayload > 2) then mypayload(3) = mpart*sum(tmp(:)**2)/(2.0d0*sqrt(sum(b(:)**2))) end if ! e.b if (mynpayload > 3) then mypayload(4) = sum(e(:)*b(:)) end if end subroutine Lorentz_update_payload