1!
2! Copyright (C) 1996-2016	The SIESTA group
3!  This file is distributed under the terms of the
4!  GNU General Public License: see COPYING in the top directory
5!  or http://www.gnu.org/copyleft/gpl.txt.
6! See Docs/Contributors.txt for a list of contributors.
7!
8      SUBROUTINE ROTATE (N,X,ALPHA,BETA,GAMMA)
9
10C ROTATES N VECTORS X(3,N) ACCORDING TO THE EULER ANGLES:
11C   ALPHA: FIRST ROTATION AROUND AXIS Z
12C   BETA : SECOND ROTATION AROUND Y
13C   GAMMA: THIRD ROTATION AROUND Z AGAIN
14C WRITTEN BY J.SOLER.  AUG/91
15
16*     IMPLICIT DOUBLE PRECISION (A-H,O-Z)
17      DIMENSION X(3,N),RMAT(3,3),XNEW(3)
18      ZERO=0.D0
19      PI=ACOS(-1.D0)
20      CONS=PI/180.D0
21      SA=SIN(-ALPHA*CONS)
22      SB=SIN(-BETA *CONS)
23      SG=SIN(-GAMMA*CONS)
24      CA=COS(-ALPHA*CONS)
25      CB=COS(-BETA *CONS)
26      CG=COS(-GAMMA*CONS)
27      RMAT(1,1)= CB*CA*CG-SA*SG
28      RMAT(1,2)= CB*SA*CG+CA*SG
29      RMAT(1,3)=-SB*CG
30      RMAT(2,1)=-CB*CA*SG-SA*CG
31      RMAT(2,2)=-CB*SA*SG+CA*CG
32      RMAT(2,3)= SB*SG
33      RMAT(3,1)= SB*CA
34      RMAT(3,2)= SB*SA
35      RMAT(3,3)= CB
36      DO 40 I=1,N
37        DO 20 J=1,3
38          XNEW(J)=ZERO
39          DO 10 K=1,3
40            XNEW(J)=XNEW(J)+RMAT(J,K)*X(K,I)
41   10     CONTINUE
42   20   CONTINUE
43        DO 30 J=1,3
44          X(J,I)=XNEW(J)
45   30   CONTINUE
46   40 CONTINUE
47      END
48
49