##// END OF EJS Templates
Review updata app
Review updata app

File last commit:

r0:b84e1135c2c4
r8:9c1b6919a8a9
Show More
csconv.f
54 lines | 1.3 KiB | text/x-fortran | FortranFixedLexer
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