cart_to_cyl Subroutine

public subroutine cart_to_cyl(X, Xcyl)

Here, the coordinate transformation is:

Arguments

Type IntentOptional AttributesName
real(kind=rp), intent(in), DIMENSION(:,:), ALLOCATABLE:: X

Particles' position in Cartesian coordinates. X(1,:) = , X(2,:) = , X(3,:) =

real(kind=rp), intent(inout), DIMENSION(:,:), ALLOCATABLE:: Xcyl

Particles' position in cylindrical coordinates. Xcyl(1,:) = , Xcyl(2,:) = , Xcyl(3,:) =


Called by

proc~~cart_to_cyl~~CalledByGraph proc~cart_to_cyl cart_to_cyl proc~get_analytical_fields get_analytical_fields proc~get_analytical_fields->proc~cart_to_cyl proc~get_profiles get_profiles proc~get_profiles->proc~cart_to_cyl proc~avalanche_4d Avalanche_4D proc~avalanche_4d->proc~get_profiles proc~get_fields get_fields proc~get_fields->proc~get_analytical_fields proc~mh_psi MH_psi proc~mh_psi->proc~get_fields proc~get_avalanche_4d get_Avalanche_4D proc~get_avalanche_4d->proc~avalanche_4d proc~sample_hollmann_distribution_3d_psi sample_Hollmann_distribution_3D_psi proc~sample_hollmann_distribution_3d_psi->proc~get_fields proc~unitvectors unitVectors proc~unitvectors->proc~get_fields proc~get_hollmann_distribution_3d_psi get_Hollmann_distribution_3D_psi proc~get_hollmann_distribution_3d_psi->proc~sample_hollmann_distribution_3d_psi proc~gyro_distribution gyro_distribution proc~gyro_distribution->proc~unitvectors

Contents

Source Code


Source Code

  subroutine cart_to_cyl(X,Xcyl)
    !! @note  Subroutine that converts the position of simulated particles
    !! from Cartesian \((x,y,z)\) to cylindrical \((R,\phi,Z)\) coordinates.
    !! @endnote
    !! Here, the coordinate transformation is:
    !!
    !! $$R = \sqrt{x^2 + y^2},$$
    !! $$\phi = \arctan{\left( \frac{y}{x} \right)},$$
    !! $$Z = z.$$
    implicit none
    REAL(rp), DIMENSION(:,:), ALLOCATABLE, INTENT(IN)      :: X
    !! Particles' position in Cartesian coordinates. X(1,:) = \(x\), X(2,:)
    !! = \(y\), X(3,:) = \(z\)
    REAL(rp), DIMENSION(:,:), ALLOCATABLE, INTENT(INOUT)   :: Xcyl
    !! Particles' position in cylindrical coordinates. Xcyl(1,:) = \(R\),
    !! Xcyl(2,:) = \(\phi\), Xcyl(3,:) = \(Z\)
    INTEGER                                                :: pp
    !! Iterator.
    INTEGER                                                :: ss
    !! Iterator.

!    write(output_unit_write,'("X_X: ",E17.10)') X(1:10,1)
!    write(output_unit_write,'("X_Y: ",E17.10)') X(1:10,2)
!    write(output_unit_write,'("X_Z: ",E17.10)') X(1:10,3)

    if (size(X,1).eq.1) then
       ss = size(X,1)
    else
       if (X(2,1).eq.0) then
          ss=1_idef
       else
          ss = size(X,1)
       end if
    endif
    

!    write(output_unit_write,*) 'varX',X(:,1)
!    write(output_unit_write,*) 'varY',X(:,2)
!    write(output_unit_write,*) 'varR',Xcyl(:,1)
!    write(output_unit_write,*) 'varPHI',Xcyl(:,2)

!    !$OMP PARALLEL DO FIRSTPRIVATE(ss) PRIVATE(pp) SHARED(X,Xcyl)
    do pp=1_idef,ss
!       write(output_unit_write,*) 'pp',pp
       Xcyl(pp,1) = SQRT(X(pp,1)**2 + X(pp,2)**2)
       Xcyl(pp,2) = ATAN2(X(pp,2), X(pp,1))
       Xcyl(pp,2) = MODULO(Xcyl(pp,2), 2.0_rp*C_PI)
       Xcyl(pp,3) = X(pp,3)
    end do
!    !$OMP END PARALLEL DO

!    write(output_unit_write,*) 'varX',X(:,1)
!    write(output_unit_write,*) 'varY',X(:,2)
!    write(output_unit_write,*) 'varR',Xcyl(:,1)
!    write(output_unit_write,*) 'varPHI',Xcyl(:,2)


    
  end subroutine cart_to_cyl