Convert from cartesian coordinates (in the x-y plane) to polar coordinates (radius,angle)
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
real(kind=rk), | intent(in) | :: | coord(n,3) | |||
integer, | intent(in) | :: | n |
Polar coordinates, radius (first entry) and angle (second entry)
function cart2polar(coord, n) result(polar)
! --------------------------------------------------------------------------
integer, intent(in) :: n
real(kind=rk),intent(in) :: coord(n,3)
!> Polar coordinates, radius (first entry) and angle (second entry)
real(kind=rk) :: polar(n,2)
! --------------------------------------------------------------------------
!> X coordinate
real(kind=rk) :: x
!> Y coordinate
real(kind=rk) :: y
integer :: i
! --------------------------------------------------------------------------
do i = 1,n
x = coord(i,1)
y = coord(i,2)
polar(i,1) = sqrt(x*x + y*y)
! Atan2 is not defined when both coordinates are zero. To cover
! this situation correctly, we define the angle to be 0.
if(polar(i,1) > epsilon(1.0_rk) ) then
polar(i,2) = atan2(y,x)
else
polar(i,2) = 0.0_rk
end if
end do
end function cart2polar