1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
|
C Copyright 1981-2007 ECMWF
C
C Licensed under the GNU Lesser General Public License which
C incorporates the terms and conditions of version 3 of the GNU
C General Public License.
C See LICENSE and gpl-3.0.txt for details.
C
SUBROUTINE XROTATE(RANGLE,X,Y,Z,RX,RY,RZ,INROW)
C---->
C**** XROTATE
C
C Purpose
C -------
C
C Rotate an array of (x,y,z) values about the x-axis.
C
C
C Interface
C ---------
C
C CALL XROTATE(RANGLE,X,Y,Z,RX,RY,RZ,INROW)
C
C Input
C -----
C
C RANGLE - The angle of rotation (degrees)
C (X,Y,Z) - Arrays of input (x,y,z) values.
C INROW - Number of coordinate values.
C
C
C Output
C ------
C
C (RX,RY,RZ) - Arrays of rotated (x,y,z) values.
C
C
C Method
C ------
C
C X remains unchanged.
C
C
C Externals
C ---------
C
C None.
C
C
C Author
C ------
C
C J.D.Chambers ECMWF
C
C----<
C
IMPLICIT NONE
C
C Subroutine arguments
C
REAL RANGLE,X,Y,Z,RX,RY,RZ
DIMENSION X(*),Y(*),Z(*),RX(*),RY(*),RZ(*)
INTEGER INROW
C
C Local variables
C
REAL FACTOR, ANGLE, SINA, COSA
DATA FACTOR/0.017453293/
INTEGER LOOP
C
ANGLE = RANGLE * FACTOR
SINA = SIN(ANGLE)
COSA = COS(ANGLE)
C
DO LOOP = 1, INROW
RX(LOOP) = X(LOOP)
RY(LOOP) = Y(LOOP)*COSA + Z(LOOP)*SINA
RZ(LOOP) = -Y(LOOP)*SINA + Z(LOOP)*COSA
ENDDO
C
RETURN
END
|