cMEMBER NAME eul.f C 06/20/84 23:45:35 06/20/84 23:43:50 $380300.PLS C BLOCK DATA COMMON /CEULER/A(18) DATA A/1.0,3*0.0,1.0,3*0.0,1.0,9*0.0/ END SUBROUTINE EULSTT(ARG1,ARG2,ARG3,ARG4,ARG5,ARG6,ARG7) COMMON /CEULER/A(9),ALPHA,BETA,GAMMA,X,Y,Z,XP,YP,ZP DIMENSION T(1) REAL DR/0.01745329252/ REAL TRIG/3.141592E-6/ EQUIVALENCE (Z,CSTH),(ZP,CSTHP) NARG = 7 GO TO 10 ENTRY EULTRN(ARG1,ARG2,ARG3,ARG4) NARG = 4 GO TO 1 ENTRY EULSET(ARG1,ARG2,ARG3) NARG = 3 C SET UP TRANSFORMATION GO TO 10 ENTRY EULRTT (ARG1,ARG2,ARG3,T) NARG = 4 10 IF (ALPHA.EQ.ARG1 .AND. BETA.EQ.ARG2 .AND. GAMMA.EQ.ARG3) GO TO 11 ALPHA = ARG1 BETA = ARG2 GAMMA = ARG3 CSA = COS(ALPHA*DR) IF (ABS(CSA).LT.TRIG) CSA=0 SNA = SIN(ALPHA*DR) IF (ABS(SNA).LT.TRIG) SNA=0 CSB = COS(BETA*DR) IF (ABS(CSB).LT.TRIG) CSB=0 SNB = SIN(BETA*DR) IF (ABS(SNB).LT.TRIG) SNB=0 CSG = COS(GAMMA*DR) IF (ABS(CSG).LT.TRIG) CSG=0 SNG = SIN(GAMMA*DR) IF (ABS(SNG).LT.TRIG) SNG=0 A(1) = CSG*CSA-CSB*SNA*SNG A(2) =-SNG*CSA-CSB*SNA*CSG A(3) = SNB*SNA A(4) = CSG*SNA+CSB*CSA*SNG A(5) =-SNG*SNA+CSB*CSA*CSG A(6) =-SNB*CSA A(7) = SNG*SNB A(8) = CSG*SNB A(9) = CSB 11 IF (NARG.EQ.4) CALL MVC (A,T,36) IF (NARG .LT. 7) RETURN C TRANSFORM SPHERICAL COORDINATES THETA = ARG4 PHI = ARG5 GO TO 2 1 THETA = ARG1 PHI = ARG2 2 CSTH = COS(THETA*DR) IF (ABS(CSTH).LT.TRIG) CSTH=0 SNTH = SIN(THETA*DR) IF (ABS(SNTH).LT.TRIG) SNTH=0 CSPH = COS(PHI*DR) IF (ABS(CSPH).LT.TRIG) CSPH=0 SNPH = SIN(PHI*DR) IF (ABS(SNPH).LT.TRIG) SNPH=0 C UNIT VECTOR IN DIRECTION (THETA,PHI) X = CSPH*SNTH Y = SNPH*SNTH ZP = A(3)*X+A(6)*Y+A(9)*Z THETAP = ARCOS(CSTHP)/DR C 180 >= PHIP > -180 IF (ABS(CSTHP).LT.1.0) GO TO 3 PHIP = PHI-ALPHA-GAMMA PHIP = AMOD(PHIP+1080,360.0) IF (PHIP.GT.180.0) PHIP=PHIP-360.0 XP = 0 YP = 0 GO TO 5 3 XP = A(1)*X+A(4)*Y+A(7)*Z YP = A(2)*X+A(5)*Y+A(8)*Z PHIP = ATAN2(YP,XP)/DR 5 IF (NARG.GT.4) GO TO 4 ARG3 = THETAP ARG4 = PHIP RETURN 4 ARG6 = THETAP ARG7 = PHIP RETURN END