C $Id: csconv.f 3304 2011-01-17 15:25:59Z brideout $ C SUBROUTINE CSCONV(X,Y,Z,R,THETA,PHI,IMODE) C C jmh - 11/79 ans fortran 66 C C Converts between cartesian coordinates x,y,z and spherical C coordinates r,theta,phi. theta and phi are in degrees. C C Input: C IMODE - 1 (x,y,z) -> (r,theta,phi) C 2 (r,theta,phi) -> (x,y,z) C C Input, Output: C X, Y, Z - cartesian coordinates C R, THETA, PHI - spherical coordinates (degrees) C C .. Scalar Arguments .. DOUBLE PRECISION PHI,R,THETA,X,Y,Z INTEGER IMODE C .. C .. Local Scalars .. DOUBLE PRECISION CP,CT,DTR,P,RHO2,RLMIN,SP,ST,T C .. C .. Intrinsic Functions .. INTRINSIC ABS,DATAN2,DCOS,DMAX1,DSIN,DSQRT,SIGN C .. C .. Data statements .. DATA DTR/.0174532925199D0/ DATA RLMIN/1.D-38/ C .. C IF (IMODE.EQ.2) THEN C T = DTR*THETA P = DTR*PHI CT = DCOS(T) ST = DSIN(T) CP = DCOS(P) SP = DSIN(P) X = R*ST*CP Y = R*ST*SP Z = R*CT ELSE C RHO2 = X*X + Y*Y R = DSQRT(RHO2+Z*Z) THETA = DATAN2(DSQRT(RHO2),SIGN(1.D0,Z)*DMAX1(ABS(Z),RLMIN))/ * DTR PHI = DATAN2(Y,SIGN(1.D0,X)*DMAX1(ABS(X),RLMIN))/DTR END IF RETURN C END