SUBROUTINE ADDANG( COST0,PHI0, COST,PHI, COST1,PHI1 ) C----------------------------------------------------------------------- C ADD(ITION OF) ANG(LES) C C ADDITION OF ANGLES IS DONE BY SEQUENTIAL ROTATIONS : C 1. ROTATE VECTOR AROUND Z AXIS BY -PHI0 C 2. ROTATE VECTOR AROUND Y AXIS BY -THETA0 NOW VECTOR IS (0,0,1) C C 3. ROTATE VECTOR AROUND Y AXIS BY THETA ANGLES TO BE ADDED C 4. ROTATE VECTOR AROUND Z AXIS BY PHI C C 5. ROTATE VECTOR AROUND Y AXIS BY THETA0 C 6. ROTATE VECTOR AROUND Z AXIS BY -PHI0 C NOW VECTOR IS (X,Y,Z) WITH COST1 = Z C AND TAN(PHI1) = Y/X C THIS SUBROUTINE IS CALLED FROM MANY ROUTINES C ARGUMENTS: C COST0 = COSINE THETA OF PARTICLE BEFORE C PHI0 = PHI OF PARTICLE BEFORE C COST = COSINE THETA OF ANGLE TO ADD C PHI = PHI OF ANGLE TO ADD C COST1 = COSINE THETA OF PARTICLE AFTER ADDITION OF ANGLES C PHI1 = PHI THETA OF PARTICLE AFTER ADDITION OF ANGLES C----------------------------------------------------------------------- IMPLICIT NONE *KEEP,CONST. COMMON /CONST/ PI,PI2,OB3,TB3,ENEPER DOUBLE PRECISION PI,PI2,OB3,TB3,ENEPER *KEEP,RUNPAR. COMMON /RUNPAR/ FIXHEI,THICK0,HILOECM,HILOELB, * STEPFC,NRRUN,NSHOW,PATAPE,MONIIN, * MONIOU,MDEBUG,NUCNUC, * CETAPE, * SHOWNO,ISHW,NOPART,NRECS,NBLKS,MAXPRT,NDEBDL, * N1STTR,MDBASE, * DEBDEL,DEBUG,FDECAY,FEGS,FIRSTI,FIXINC,FIXTAR, * FIX1I,FMUADD,FNKG,FPRINT,FDBASE * ,GHEISH,GHESIG COMMON /RUNPAC/ DSN,HOST,USER DOUBLE PRECISION FIXHEI,THICK0,HILOECM,HILOELB REAL STEPFC INTEGER NRRUN,NSHOW,PATAPE,MONIIN,MONIOU,MDEBUG,NUCNUC, * SHOWNO,ISHW,NOPART,NRECS,NBLKS,MAXPRT,NDEBDL, * N1STTR,MDBASE INTEGER CETAPE CHARACTER*79 DSN CHARACTER*20 HOST,USER LOGICAL DEBDEL,DEBUG,FDECAY,FEGS,FIRSTI,FIXINC,FIXTAR, * FIX1I,FMUADD,FNKG,FPRINT,FDBASE * ,GHEISH,GHESIG *KEND. DOUBLE PRECISION A,COST,COST0,COST1,CPHI,CPHI0,PHI,PHI0,PHI1, * SINT,SINT0,SPHI,SPHI0,XXX,YYY,ZZZ C----------------------------------------------------------------------- CC IF ( DEBUG ) WRITE(MDEBUG,*) 'ADDANG:' SINT0 = SQRT(1.D0-COST0**2) SINT = SQRT(1.D0-COST **2) SPHI0 = SIN(PHI0) CPHI0 = COS(PHI0) SPHI = SIN(PHI) CPHI = COS(PHI) A = COST0 * CPHI * SINT + COST * SINT0 XXX = A * CPHI0 - SPHI0 * SINT * SPHI YYY = A * SPHI0 + CPHI0 * SINT * SPHI ZZZ = COST * COST0 - SINT0 * SINT * CPHI C GET NEW COSINE(THETA) AND PHI COST1 = ZZZ IF ( YYY .EQ. 0.D0 .AND. XXX .EQ. 0.D0 ) THEN PHI1 = 0.D0 ELSE PHI1 = ATAN2( YYY, XXX ) ENDIF RETURN END