*
* $Id$
*
* $Log$
* Revision 1.1  1995/10/24 10:20:55  cernlib
* Initial revision
*
*
#include "geant321/pilot.h"
*CMZ :  3.21/02 29/03/94  15.41.30  by  S.Giani
*-- Author :
      SUBROUTINE GTRMUL(DX1,RMAT1,DX2,IROT,DXNEW,RMATN)
C.
C.    ******************************************************************
C     *                                                                *
C     *       ROUTINE TO FORM THE TRANSFORMATION RESULTING FROM        *
C     *       THE APPLICATION OF FIRST THE TRANSFORMATION GIVEN        *
C     *       BY THE POINT DX1 AND THE MATRIX RMAT1 FOLLOWED BY        *
C     *       THE APPLICATION OF THE TRANSFORMATION GIVEN BY THE       *
C     *       POINT DX2 AND THE MATRIX IN THE GEANT ROTATION           *
C     *        MATRIX BANKS WITH INDEX NUMBER IROT. THE RESULTING      *
C     *       TRANSFORMATION IS STORED AS THE POINT DXNEW AND          *
C     *       MATRIX RMATN.                                            *
C.    *                                                                *
C.    *    ==>Called by : GFTRAC,GINVOL,GLVOLU,GMEDIV,GMEPOS,GSTRAC,   *
C.    *                   GTMEDI                                       *
C.    *         Author  A.McPherson  *********                         *
C.    *                                                                *
C.    ******************************************************************
C.
#include "geant321/gcbank.inc"
      DIMENSION DX1(3),RMAT1(10),DX2(3),DXNEW(3),RMATN(10)
C.
C.    ------------------------------------------------------------------
C.
      IF(RMAT1(10).EQ.0.0)THEN
         DXNEW(1) = DX1(1) + DX2(1)
         DXNEW(2) = DX1(2) + DX2(2)
         DXNEW(3) = DX1(3) + DX2(3)
         IF(IROT.EQ.0)THEN
            DO 20 I = 1, 10, 2
               RMATN(I) = RMAT1(I)
               RMATN(I+1) = RMAT1(I+1)
   20       CONTINUE
         ELSE
            JR=LQ(JROTM-IROT)
            DO 30 I = 1, 9
               RMATN(I) = Q(JR+I)
   30       CONTINUE
            RMATN(10)=1.
         ENDIF
      ELSE
C
         DXTEM1 = DX2(1)*RMAT1(1) + DX2(2)*RMAT1(4) + DX2(3)*RMAT1(7)
         DXTEM2 = DX2(1)*RMAT1(2) + DX2(2)*RMAT1(5) + DX2(3)*RMAT1(8)
         DXTEM3 = DX2(1)*RMAT1(3) + DX2(2)*RMAT1(6) + DX2(3)*RMAT1(9)
C
         IF(IROT.EQ.0)THEN
            DO 50 I = 1, 10, 2
               RMATN(I) = RMAT1(I)
               RMATN(I+1) = RMAT1(I+1)
   50       CONTINUE
         ELSE
            CALL GRMUL(RMAT1,IROT,RMATN)
         ENDIF
         DXNEW(1) = DX1(1) + DXTEM1
         DXNEW(2) = DX1(2) + DXTEM2
         DXNEW(3) = DX1(3) + DXTEM3
      ENDIF
      END
