Convert vector from Cartesian coordinates
| Type | Intent | Optional | Attributes | Name | ||
|---|---|---|---|---|---|---|
| double precision, | intent(in) | :: | xp(1:3) | |||
| double precision, | intent(out) | :: | up(1:3) | |||
| double precision, | intent(in) | :: | upcart(1:3) |
subroutine partvec_from_cartesian(xp,up,upcart) ! conversion of a generic vector to cylindrical/spherical from cartesian coordinates done here use mod_global_parameters use mod_geometry double precision, intent(in) :: xp(1:3),upcart(1:3) double precision, intent(out) :: up(1:3) select case (coordinate) case (Cartesian,Cartesian_stretched) up(1:3) = upcart(1:3) case (cylindrical) up(r_) = cos(xp(phi_)) * upcart(1) + sin(xp(phi_)) * upcart(2) up(phi_) = -sin(xp(phi_)) * upcart(1) + cos(xp(phi_)) * upcart(2) up(z_) = upcart(3) case (spherical) up(1) = upcart(1)*sin(xp(2))*cos(xp(3)) + & upcart(2)*sin(xp(2))*sin(xp(3)) + upcart(3)*cos(xp(2)) up(2) = upcart(1)*cos(xp(2))*cos(xp(3)) + & upcart(2)*cos(xp(2))*sin(xp(3)) - upcart(3)*sin(xp(2)) up(3) = -upcart(1)*sin(xp(3)) + upcart(2)*cos(xp(3)) case default write(*,*) "No converter for coordinate=",coordinate end select end subroutine partvec_from_cartesian