partcoord_from_cartesian Subroutine

public subroutine partcoord_from_cartesian(xp, xpcart)

Uses

  • proc~~partcoord_from_cartesian~~UsesGraph proc~partcoord_from_cartesian partcoord_from_cartesian module~mod_geometry mod_geometry proc~partcoord_from_cartesian->module~mod_geometry module~mod_global_parameters mod_global_parameters proc~partcoord_from_cartesian->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

Convert to noncartesian coordinates

Arguments

Type IntentOptional Attributes Name
double precision, intent(out) :: xp(1:3)
double precision, intent(in) :: xpcart(1:3)

Called by

proc~~partcoord_from_cartesian~~CalledByGraph proc~partcoord_from_cartesian partcoord_from_cartesian proc~lorentz_integrate_particles Lorentz_integrate_particles proc~lorentz_integrate_particles->proc~partcoord_from_cartesian

Source Code

  subroutine partcoord_from_cartesian(xp,xpcart)
    ! conversion of particle coordinate from Cartesian to cylindrical/spherical coordinates done here
    use mod_global_parameters
    use mod_geometry

    double precision, intent(in)  :: xpcart(1:3)
    double precision, intent(out) :: xp(1:3)
    double precision :: xx, yy, zz
    double precision :: rr, tth, pphi

    select case (coordinate)
    case (Cartesian,Cartesian_stretched,Cartesian_expansion)
      xp(1:3)=xpcart(1:3)
    case (cylindrical)
      xp(r_) = sqrt(xpcart(1)**2 + xpcart(2)**2)
      xp(phi_) = atan2(xpcart(2),xpcart(1))
      if (xp(phi_) .lt. 0.d0) xp(phi_) = 2.0d0*dpi + xp(phi_)
      xp(z_) = xpcart(3)
    case (spherical)
      xx = xpcart(1)


      yy = xpcart(2)
      zz = xpcart(3)
      rr = sqrt(xx**2 + yy**2 + zz**2)
      tth = acos(zz/rr)
      if (yy > 0.d0) then
        pphi = acos(xx/sqrt(xx**2+yy**2))
      else
        pphi = 2.d0*dpi - acos(xx/sqrt(xx**2+yy**2))
      endif
      xp(1:3) = (/ rr, tth, pphi /)
    case default
      write(*,*) "No converter for coordinate=",coordinate
    end select

  end subroutine partcoord_from_cartesian