c......Example 3(a): Modified Cartesian to spherical polar coordinates
c..... convertor: Part 1
c23456
program ex3a
c
implicit none
c
double precision cart(3),polar(3)
double precision pi
integer i,ichoice
c
pi = 3.14159265358979d0
c
c..... Read in whether to convert Cartesian to spherical polar
c..... or to convert spherical polar to Cartesian
c
print *,'If you want to convert Cartesian to spherical polar enter
& 1'
print *,' or'
print *,'if you want to convert spherical polar to Cartesian enter
& 2'
read *,ichoice
c
c..... Beginning of if loop
c
c..... Perform Cartesian to spherical polar conversion
c
if(ichoice.eq.1) then
c
c..... Print off instructions
c
print *,'You have chosen to convert Cartesian to spherical polar'
c
c..... Read in the three Cartesian coordinates from the screen
c
print *, 'Enter (x,y,z) on one line separated by commas'
read *,cart(1),cart(2),cart(3)
c
c.....NOTE: There are a variety of ways of converting from Cartesian to
c..... spherical polar coordinates. The method illustratd below is
c..... just one.
c
c..... Calculate the r vector
c..... Assign the r vector to polar(1)
c
polar(1) = sqrt(cart(1)**2+cart(2)**2+cart(3)**2)
c
c..... Calculate the value of theta using the fact that z = r*cos(theta)
c..... Assign theta to polar(2)
c
polar(2) = acos(cart(3)/polar(1))
c
c..... Calculate the value of phi using the fact that
c..... x = r*sin(theta)*cos(phi)
c
polar(3) = acos(cart(1)/(polar(1)*sin(polar(2))))
c
c..... Remember that the trigonometric units are by default radians
c..... To convert to degrees you need a value for pi,
c..... Recall: 2*pi radians = 360 degrees
c
polar(1) = polar(1)
polar(2) = polar(2)/pi*180.0d0
polar(3) = polar(3)/pi*180.0d0
c
c..... Output the results to the keyboard
c..... The angular results are output in degrees
c
print *,'Spherical polar coordinates are (angles in degrees):'
print *, ' r = ',polar(1)
print *, ' theta = ',polar(2)
print *, ' phi = ',polar(3)
c
c..... Spherical polar to cartesian conversion
c
else if(ichoice.eq.2) then
c
c..... Print off instructions
c
print *,'You have chosen to convert spherical polar to
&Cartesian'
print *, 'Enter (r,theta,phi) on one line separated by commas'
print *,'Enter theta and phi in degrees.'
read *,polar(1),polar(2),polar(3)
c
c..... Convert angles in degrees to angles in radians
c
polar(2) = polar(2)/180.0d0*pi
polar(3) = polar(3)/180.0d0*pi
c
c..... Perform the simple conversion using the well known formulae
c..... x = r*sin(theta)*cos(phi)
c..... y = r*sin(theta)*sin(phi)
c..... z = r*cos(theta)
c
cart(1) = polar(1)*sin(polar(2))*cos(polar(3))
cart(2) = polar(1)*sin(polar(2))*sin(polar(3))
cart(3) = polar(1)*cos(polar(2))
c
c..... Output the results
c
print *,'Cartesian coordiantes are:'
print *,'x = ',cart(1)
print *,'y = ',cart(2)
print *,'z = ',cart(3)
c
c..... If 1 or 2 is not entered print a warning message
else
print *,'You MUST enter 1 or 2!'
c
c..... End of the if-else block
c
end if
c
end
This page maintained by alex.brown@ualberta.ca of the Department of Chemistry, University of Alberta
Last updated August 8, 2003.