Fortran: 06.01.01/P04

This is Fortran source code, based on the abstract design for this program. You may return to the documentation for the module containing this program, or to the entire hierarchical table of topics covered by the PVT.


C  *********************************************************
C  *                                                       *
C  *    TEST NUMBER: 06.01.01/04                           *
C  *    TEST TITLE : Behavior of matrix composition        *
C  *                                                       *
C  *    PHIGS Validation Tests, produced by NIST           *
C  *                                                       *
C  *********************************************************

      COMMON /GLOBNU/ CTLHND, ERRSIG, ERRFIL, IERRCT, UNERR,
     1        TESTCT, IFLERR, PASSSW, ERRSW, MAXLIN,
     2        CONID, MEMUN, WKID, WTYPE, GLBLUN, INDLUN,
     3        DUMINT, DUMRL
      INTEGER         CTLHND, ERRSIG, ERRFIL, IERRCT, UNERR,
     1        TESTCT, IFLERR, PASSSW, ERRSW, MAXLIN,
     2        CONID, MEMUN, WKID, WTYPE, GLBLUN, INDLUN,
     3        DUMINT(20), ERRIND
      REAL    DUMRL(20)

      COMMON /GLOBCH/ PIDENT,    GLBERR,    TSTMSG,     FUNCID,
     1                DUMCH
      CHARACTER       PIDENT*40, GLBERR*60, TSTMSG*900, FUNCID*80,
     1                DUMCH(20)*20

      REAL      ACT4X4(4,4), EXP4X4(4,4), AIN4X4(4,4), BIN4X4(4,4)
      REAL      ACT3X3(3,3), EXP3X3(3,3), AIN3X3(3,3), BIN3X3(3,3)
      REAL      INC
      INTEGER   I,J
      LOGICAL   TRNSEQ

      CALL INITGL ('06.01.01/04')

C open PHIGS
      CALL XPOPPH  (ERRFIL, MEMUN)
      CALL SETMSG ('1 2 11', 'The matrix returned by <compose ' //
     1             'matrix 3> should perform the same 3D '      //
     2             'transformation as that resulting from the ' //
     3             'multiplication of the two specified matrices.')

      AIN4X4(1,1) = -2.2
      AIN4X4(1,2) = 3.3
      AIN4X4(1,3) = 4.4
      AIN4X4(1,4) = 5.5
      AIN4X4(2,1) = 0.0023
      AIN4X4(2,2) = -727.12
      AIN4X4(2,3) = 2.09
      AIN4X4(2,4) = 33.33
      AIN4X4(3,1) = 0
      AIN4X4(3,2) = 34
      AIN4X4(3,3) = 54.1
      AIN4X4(3,4) = -0.045
      AIN4X4(4,1) = 7
      AIN4X4(4,2) = 6
      AIN4X4(4,3) = 5
      AIN4X4(4,4) = 4

      INC = 0.0
      DO 401 I = 1,4
      DO 402 J = 1,4
        BIN4X4(I,J) = TAN(-1.56 + INC)
        INC = INC + 3.0/16.0
402   CONTINUE
401   CONTINUE

      CALL PCOM3  (AIN4X4, BIN4X4, ERRIND, ACT4X4)
      CALL CHKINQ ('pcom3', ERRIND)

C  Compute exp4x4 = expected array
      CALL ECOM3  (AIN4X4, BIN4X4, EXP4X4)

C  pass if matrices represent same transformation
      CALL IFPF   (TRNSEQ(4, ACT4X4, EXP4X4))

      CALL SETMSG ('1 2 12', 'The matrix returned by <compose ' //
     1             'matrix> should perform the same 2D '        //
     2             'transformation as that resulting from the ' //
     3             'multiplication of the two specified matrices.')

      AIN3X3(1,1) = -2.2
      AIN3X3(1,2) = 3.3
      AIN3X3(1,3) = 5.5
      AIN3X3(2,1) = 0.0023
      AIN3X3(2,2) = -727.12
      AIN3X3(2,3) = 33.33
      AIN3X3(3,1) = 0
      AIN3X3(3,2) = 34
      AIN3X3(3,3) = -0.045

      INC = 0.0
      DO 301 I = 1,3
      DO 302 J = 1,3
        BIN3X3(I,J) = TAN(-1.56 + INC)
        INC = INC + 3.0/9.0
302   CONTINUE
301   CONTINUE

      CALL PCOM  (AIN3X3, BIN3X3, ERRIND, ACT3X3)
      CALL CHKINQ ('pcom', ERRIND)

C  Compute exp3x3 = expected array
      CALL ECOM  (AIN3X3, BIN3X3, EXP3X3)

C  pass if matrices represent same transformation
      CALL IFPF   (TRNSEQ(3, ACT3X3, EXP3X3))

      CALL ENDIT
      END