fix_phi_crossing Subroutine

public subroutine fix_phi_crossing(xp, igrid)

Uses

  • proc~~fix_phi_crossing~~UsesGraph proc~fix_phi_crossing fix_phi_crossing module~mod_geometry mod_geometry proc~fix_phi_crossing->module~mod_geometry module~mod_global_parameters mod_global_parameters proc~fix_phi_crossing->module~mod_global_parameters module~mod_comm_lib mod_comm_lib module~mod_geometry->module~mod_comm_lib module~mod_basic_types mod_basic_types module~mod_global_parameters->module~mod_basic_types module~mod_connectivity mod_connectivity module~mod_global_parameters->module~mod_connectivity module~mod_constants mod_constants module~mod_global_parameters->module~mod_constants module~mod_physicaldata mod_physicaldata module~mod_global_parameters->module~mod_physicaldata module~mod_variables mod_variables module~mod_global_parameters->module~mod_variables mpi mpi module~mod_global_parameters->mpi module~mod_variables->module~mod_basic_types

Fix particle position when crossing the 0,2pi boundary in noncartesian coordinates

Arguments

Type IntentOptional Attributes Name
double precision, intent(inout) :: xp(1:3)
integer, intent(in) :: igrid

Calls

proc~~fix_phi_crossing~~CallsGraph proc~fix_phi_crossing fix_phi_crossing proc~point_in_igrid_ghostc point_in_igrid_ghostc proc~fix_phi_crossing->proc~point_in_igrid_ghostc

Called by

proc~~fix_phi_crossing~~CalledByGraph proc~fix_phi_crossing fix_phi_crossing proc~lorentz_integrate_particles Lorentz_integrate_particles proc~lorentz_integrate_particles->proc~fix_phi_crossing

Source Code

  subroutine fix_phi_crossing(xp,igrid)
    use mod_global_parameters
    use mod_geometry

    integer, intent(in)             :: igrid
    double precision, intent(inout) :: xp(1:3)
    double precision                :: xpmod(1:3)
    integer :: phiind

    select case (coordinate)
    case (Cartesian,Cartesian_stretched,Cartesian_expansion)
      ! Do nothing
      return
    case (cylindrical)
      phiind = phi_
    case (spherical)
      phiind = 3
    end select

    xpmod = xp

    ! Fix phi-boundary crossing
    ! Case 1: particle has crossed from ~2pi to ~0
    xpmod(phiind) = xp(phiind) + 2.d0*dpi
    if ((.not. point_in_igrid_ghostc(xp,igrid,&
       0)) .and. (point_in_igrid_ghostc(xpmod,igrid,0))) then
      xp(phiind) = xpmod(phiind)
      return
    end if
    ! Case 2: particle has crossed from ~0 to ~2pi
    xpmod(phiind) = xp(phiind) - 2.d0*dpi
    if ((.not. point_in_igrid_ghostc(xp,igrid,&
       0)) .and. (point_in_igrid_ghostc(xpmod,igrid,0))) then
      xp(phiind) = xpmod(phiind)
      return
    end if

  end subroutine fix_phi_crossing