diff options
Diffstat (limited to 'math/slalib/euler.f')
-rw-r--r-- | math/slalib/euler.f | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/math/slalib/euler.f b/math/slalib/euler.f new file mode 100644 index 00000000..ff764cf6 --- /dev/null +++ b/math/slalib/euler.f @@ -0,0 +1,86 @@ + SUBROUTINE slEULR (ORDER, PHI, THETA, PSI, RMAT) +*+ +* - - - - - - +* E U L R +* - - - - - - +* +* Form a rotation matrix from the Euler angles - three successive +* rotations about specified Cartesian axes (single precision) +* +* Given: +* ORDER c*(*) specifies about which axes the rotations occur +* PHI r 1st rotation (radians) +* THETA r 2nd rotation ( " ) +* PSI r 3rd rotation ( " ) +* +* Returned: +* RMAT r(3,3) rotation matrix +* +* A rotation is positive when the reference frame rotates +* anticlockwise as seen looking towards the origin from the +* positive region of the specified axis. +* +* The characters of ORDER define which axes the three successive +* rotations are about. A typical value is 'ZXZ', indicating that +* RMAT is to become the direction cosine matrix corresponding to +* rotations of the reference frame through PHI radians about the +* old Z-axis, followed by THETA radians about the resulting X-axis, +* then PSI radians about the resulting Z-axis. +* +* The axis names can be any of the following, in any order or +* combination: X, Y, Z, uppercase or lowercase, 1, 2, 3. Normal +* axis labelling/numbering conventions apply; the xyz (=123) +* triad is right-handed. Thus, the 'ZXZ' example given above +* could be written 'zxz' or '313' (or even 'ZxZ' or '3xZ'). ORDER +* is terminated by length or by the first unrecognized character. +* +* Fewer than three rotations are acceptable, in which case the later +* angle arguments are ignored. If all rotations are zero, the +* identity matrix is produced. +* +* Called: slDEUL +* +* P.T.Wallace Starlink 23 May 1997 +* +* Copyright (C) 1997 Rutherford Appleton Laboratory +* +* License: +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation; either version 2 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program (see SLA_CONDITIONS); if not, write to the +* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +* Boston, MA 02110-1301 USA +* +* Copyright (C) 1995 Association of Universities for Research in Astronomy Inc. +*- + + IMPLICIT NONE + + CHARACTER*(*) ORDER + REAL PHI,THETA,PSI,RMAT(3,3) + + INTEGER J,I + DOUBLE PRECISION W(3,3) + + + +* Compute matrix in double precision + CALL slDEUL(ORDER,DBLE(PHI),DBLE(THETA),DBLE(PSI),W) + +* Copy the result + DO J=1,3 + DO I=1,3 + RMAT(I,J) = REAL(W(I,J)) + END DO + END DO + + END |