SUBROUTINE WCI1_GENROT( SLONG, SLAT, PLONG, MAT, STATUS )
*+
* Name:
* WCI1_GENROT
* Purpose:
* Generates rotation matrix given pole and reference longitude
* Language:
* Starlink Fortran
* Invocation:
* CALL WCI1_GENROT( SLONG, SLAT, PLONG, MAT, STATUS )
* Description:
* Generate rotation matrix from native sphericals to standard
* sphericals where (SLONG,SLAT) position of the 'special point'
* in the standard system, and PLONG is the longitude of the
* standard system's north pole in the native system.
* Arguments:
* SLONG = DOUBLE (given)
* Longitude of special point in standard system (degrees)
* SLAT = DOUBLE (given)
* Latitude of special point in standard system (degrees)
* PLONG = DOUBLE (given)
* Longitude of standard north pole in native system (degrees)
* MAT[3,3] = DOUBLE (returned)
* The rotation matrix
* STATUS = INTEGER (given)
* The global status.
* Examples:
* {routine_example_text}
* {routine_example_description}
* Pitfalls:
* {pitfall_description}...
* Notes:
* {routine_notes}...
* Prior Requirements:
* {routine_prior_requirements}...
* Side Effects:
* {routine_side_effects}...
* Algorithm:
* {algorithm_description}...
* Accuracy:
* {routine_accuracy}
* Timing:
* {routine_timing}
* External Routines Used:
* {name_of_facility_or_package}:
* {routine_used}...
* Implementation Deficiencies:
* {routine_deficiencies}...
* References:
* WCI Subroutine Guide : http://www.sr.bham.ac.uk/asterix-docs/Programmer/Guides/wci.html
* Keywords:
* package:wci, usage:private, rotation matrices
* Copyright:
* Copyright (C) University of Birmingham, 1995
* Authors:
* DJA: David J. Allan (Jet-X, University of Birmingham)
* {enter_new_authors_here}
* History:
* 5 Jan 1995 (DJA):
* Original version.
* 21 Feb 1996 (DJA):
* Removed SIND and COSD for Linux port
* {enter_changes_here}
* Bugs:
* {note_any_bugs_here}
*-
* Type Definitions:
IMPLICIT NONE ! No implicit typing
* Global Constants:
INCLUDE 'SAE_PAR' ! Standard SAE constants
INCLUDE 'MATH_PAR'
* Arguments Given:
DOUBLE PRECISION SLONG, SLAT, PLONG
* Arguments Returned:
DOUBLE PRECISION MAT(3,3)
* Status:
INTEGER STATUS ! Global status
* Local variables:
DOUBLE PRECISION SIN_AL, COS_AL ! sin/cos SLONG
DOUBLE PRECISION SIN_DE, COS_DE ! sin/cos SLAT
DOUBLE PRECISION SIN_LP, COS_LP ! sin/cos PLONG
*.
* Check inherited global status.
IF ( STATUS .NE. SAI__OK ) RETURN
* Pre-compute trig functions
SIN_AL = SIN(SLONG*MATH__DDTOR)
COS_AL = COS(SLONG*MATH__DDTOR)
SIN_DE = SIN(SLAT*MATH__DDTOR)
COS_DE = COS(SLAT*MATH__DDTOR)
SIN_LP = SIN(PLONG*MATH__DDTOR)
COS_LP = COS(PLONG*MATH__DDTOR)
* Generate the matrix
MAT(1,1) = -SIN_AL*SIN_LP - COS_AL*COS_LP*SIN_DE
MAT(1,2) = COS_AL*SIN_LP - SIN_AL*COS_LP*SIN_DE
MAT(1,3) = COS_LP*COS_DE
MAT(2,1) = SIN_AL*COS_LP - COS_AL*SIN_LP*SIN_DE
MAT(2,2) = - COS_AL*COS_LP - SIN_AL*SIN_LP*SIN_DE
MAT(2,3) = SIN_LP*COS_DE
MAT(3,1) = COS_AL*COS_DE
MAT(3,2) = SIN_AL*COS_DE
MAT(3,3) = SIN_DE
END