| [2362] | 1 |       PROGRAM MAIN
 | 
|---|
 | 2 |       IMPLICIT NONE
 | 
|---|
 | 3 | C      PARAMETER M = 50000
 | 
|---|
 | 4 |       DOUBLE PRECISION MX1(1000,500), MX2(1000,500), MX3(1000,500)
 | 
|---|
 | 5 |       DOUBLE PRECISION MX4(1000,500), MX5(1000,500)
 | 
|---|
 | 6 |       INTEGER I,J,K,NTIME,TYP
 | 
|---|
 | 7 |       DOUBLE PRECISION X,Y,Z,C1,C2,C3
 | 
|---|
 | 8 | 
 | 
|---|
 | 9 |       CALL FInitTim()   
 | 
|---|
 | 10 |       NTIME = 50 
 | 
|---|
 | 11 |       TYP = 3
 | 
|---|
 | 12 |       PRINT *,' Remplissage MX1 MX2 (1000x500) - NTimes=', NTIME
 | 
|---|
 | 13 |       DO K=1,NTIME
 | 
|---|
 | 14 |         X = FLOAT(K)*0.00314
 | 
|---|
 | 15 |         Y = SIN(X)
 | 
|---|
 | 16 |         CALL FILLMTX(K,X,Y,MX1,MX2,MX3)
 | 
|---|
 | 17 |       ENDDO
 | 
|---|
 | 18 | 
 | 
|---|
 | 19 |       PRINT *, 'FIN Remplissage ' 
 | 
|---|
 | 20 |       CALL FPrtTim(1)
 | 
|---|
 | 21 | 
 | 
|---|
 | 22 |       DO K=1,NTIME
 | 
|---|
 | 23 |         C1 = K*0.035
 | 
|---|
 | 24 |         C2 = COS(C1)+0.04
 | 
|---|
 | 25 |         C3 = SIN(C1*5.)
 | 
|---|
 | 26 |         CALL OPERMTX(K, MX1, MX2, MX5, C1, C2, C3)
 | 
|---|
 | 27 |       ENDDO
 | 
|---|
 | 28 |       PRINT *, 'FIN  MX5 = C1*MX1 + MX1 * MX2*C2 + MX2C3 ' 
 | 
|---|
 | 29 |       CALL FPrtTim(2)
 | 
|---|
 | 30 | 
 | 
|---|
 | 31 |       DO K=1,NTIME
 | 
|---|
 | 32 |         C1 = K*0.055
 | 
|---|
 | 33 |         C2 = COS(C1*1.6)+0.023
 | 
|---|
 | 34 |         C3 = SIN(C1*2.5)
 | 
|---|
 | 35 |         CALL OPADDMTX(K, MX1, MX2, MX3, MX5, C1, C2, C3)
 | 
|---|
 | 36 |       ENDDO
 | 
|---|
 | 37 |       PRINT *, 'FIN  MX5 = C1*MX1 + C2*MX2 + C3*MX3 ' 
 | 
|---|
 | 38 |       CALL FPrtTim(3)
 | 
|---|
 | 39 | 
 | 
|---|
 | 40 |       DO K=1,NTIME
 | 
|---|
 | 41 |         C1 = K*0.055
 | 
|---|
 | 42 |         C2 = COS(C1*1.6)+0.023
 | 
|---|
 | 43 |         C3 = SIN(C1*2.5)
 | 
|---|
 | 44 |         CALL MTXBLAS(K, MX1, MX2, MX3, MX4, MX5, C1, C2, C3)
 | 
|---|
 | 45 |       ENDDO
 | 
|---|
 | 46 |       PRINT *, 'FIN  MTXBLAS MX5 = C1*MX1 + C2*MX2 + C3*MX3 ' 
 | 
|---|
 | 47 |       CALL FPrtTim(4)
 | 
|---|
 | 48 | 
 | 
|---|
| [2366] | 49 |       DO K=1,NTIME
 | 
|---|
 | 50 |         C1 = K*0.135
 | 
|---|
 | 51 |         C2 = COS(6.*C1)+0.04
 | 
|---|
 | 52 |         C3 = SIN(C1*8.5)
 | 
|---|
 | 53 |         CALL OPEFMTX(K, MX1, MX2, MX5, C1, C2, C3)
 | 
|---|
 | 54 |       ENDDO
 | 
|---|
 | 55 |       PRINT *, 'FIN  MX5 = C1*MX1 + MX3 + COS(C2*MX2*MX1) ' 
 | 
|---|
 | 56 |       CALL FPrtTim(5)
 | 
|---|
 | 57 | 
 | 
|---|
| [2362] | 58 |       PRINT *, ' ------ FIN programme ---------- ' 
 | 
|---|
 | 59 |       END
 | 
|---|
 | 60 | 
 | 
|---|
 | 61 |       SUBROUTINE FILLMTX(K, X,Y, MX1, MX2, MX3)
 | 
|---|
 | 62 |       DOUBLE PRECISION X,Y
 | 
|---|
 | 63 |       DOUBLE PRECISION MX1(1000,500), MX2(1000,500), MX3(1000,500)
 | 
|---|
 | 64 |       INTEGER I,J,K
 | 
|---|
 | 65 |       DO I=1,1000
 | 
|---|
 | 66 |          DO J=1,500
 | 
|---|
 | 67 |             MX1(I,J) = K*300.+10.*I+J+X
 | 
|---|
 | 68 |             MX2(I,J) = K*550.+20.*I+2.*J+Y
 | 
|---|
 | 69 |             MX3(I,J) = K*860.+40.*I+7.*J+Y*3.14
 | 
|---|
 | 70 |          ENDDO
 | 
|---|
 | 71 |       ENDDO
 | 
|---|
 | 72 |       IF (K.EQ.5) PRINT *, 'FILLMTX - 5 -> ', MX1(12,14) 
 | 
|---|
 | 73 |       IF (K.EQ.15) PRINT *, 'FILLMTX - 15 -> ', MX2(12,15) 
 | 
|---|
 | 74 | 
 | 
|---|
 | 75 |       RETURN
 | 
|---|
 | 76 |       END
 | 
|---|
 | 77 | 
 | 
|---|
 | 78 |       SUBROUTINE OPERMTX(K, MX1, MX2, MX5, C1, C2, C3)
 | 
|---|
 | 79 |       INTEGER I,J,K
 | 
|---|
 | 80 |       DOUBLE PRECISION MX1(1000,500), MX2(1000,500)
 | 
|---|
 | 81 |       DOUBLE PRECISION MX5(1000,500)
 | 
|---|
 | 82 |       DOUBLE PRECISION C1,C2,C3
 | 
|---|
 | 83 |       DO I=1,1000
 | 
|---|
 | 84 |          DO J=1,500
 | 
|---|
 | 85 |             MX5(I,J) = C1*MX1(I,J)+MX1(I,J)*(MX2(I,J)*C2)+MX2(I,J)*C3
 | 
|---|
 | 86 |          ENDDO
 | 
|---|
 | 87 |       ENDDO
 | 
|---|
 | 88 |       IF (K.EQ.5) PRINT *, 'OPERMTX - 5 -> ', MX5(20,5)
 | 
|---|
 | 89 |       IF (K.EQ.15) PRINT *, 'OPEEMTX - 15 -> ', MX5(20,15)
 | 
|---|
 | 90 |       RETURN
 | 
|---|
 | 91 |       END
 | 
|---|
 | 92 | 
 | 
|---|
| [2366] | 93 |       SUBROUTINE OPEFMTX(K, MX1, MX2, MX5, C1, C2, C3)
 | 
|---|
 | 94 |       INTEGER I,J,K
 | 
|---|
 | 95 |       DOUBLE PRECISION MX1(1000,500), MX2(1000,500)
 | 
|---|
 | 96 |       DOUBLE PRECISION MX5(1000,500)
 | 
|---|
 | 97 |       DOUBLE PRECISION C1,C2,C3
 | 
|---|
 | 98 |       DO I=1,1000
 | 
|---|
 | 99 |          DO J=1,500
 | 
|---|
 | 100 |             MX5(I,J) = C1*MX1(I,J)+MX2(I,J)+
 | 
|---|
 | 101 |      +                 C3*COS(C2*MX2(I,J)*MX1(I,J))
 | 
|---|
 | 102 |          ENDDO
 | 
|---|
 | 103 |       ENDDO
 | 
|---|
 | 104 |       IF (K.EQ.5) PRINT *, 'OPEFMTX/COS - 5 -> ', MX5(20,5)
 | 
|---|
 | 105 |       IF (K.EQ.15) PRINT *, 'OPEFMTX/COS - 15 -> ', MX5(20,15)
 | 
|---|
 | 106 |       RETURN
 | 
|---|
 | 107 |       END
 | 
|---|
 | 108 | 
 | 
|---|
| [2362] | 109 |       SUBROUTINE OPADDMTX(K, MX1, MX2, MX3, MX5, C1, C2, C3)
 | 
|---|
 | 110 |       INTEGER I,J,K
 | 
|---|
 | 111 |       DOUBLE PRECISION MX1(1000,500), MX2(1000,500)
 | 
|---|
 | 112 |       DOUBLE PRECISION MX3(1000,500), MX5(1000,500)
 | 
|---|
 | 113 |       DOUBLE PRECISION C1,C2,C3
 | 
|---|
 | 114 |       DO I=1,1000
 | 
|---|
 | 115 |          DO J=1,500
 | 
|---|
 | 116 |             MX5(I,J) = C1*MX1(I,J)+C2*MX2(I,J)+MX3(I,J)*C3
 | 
|---|
 | 117 |          ENDDO
 | 
|---|
 | 118 |       ENDDO
 | 
|---|
 | 119 |       IF (K.EQ.5) PRINT *, 'OPADDMTX - 5 -> ', MX5(20,5)
 | 
|---|
 | 120 |       IF (K.EQ.15) PRINT *, 'OPADDMTX - 15 -> ', MX5(20,15)
 | 
|---|
 | 121 | 
 | 
|---|
 | 122 |       RETURN
 | 
|---|
 | 123 |       END
 | 
|---|
 | 124 | 
 | 
|---|
 | 125 |       SUBROUTINE MTXBLAS(K, MX1, MX2, MX3, MX4, MX5, C1, C2, C3)
 | 
|---|
 | 126 |       INTEGER I,J,K,NTOT
 | 
|---|
 | 127 |       DOUBLE PRECISION MX1(1000,500), MX2(1000,500)
 | 
|---|
 | 128 |       DOUBLE PRECISION MX5(1000,500)
 | 
|---|
 | 129 |       DOUBLE PRECISION C1,C2,C3
 | 
|---|
 | 130 |       NTOT = 1000*500
 | 
|---|
| [2366] | 131 | C  Sur OSF :
 | 
|---|
 | 132 | C      CALL DVCAL(NTOT, C1, MX1, 1, MX5, 1)
 | 
|---|
 | 133 | C      CALL DZAXPY(NTOT, C2, MX2, 1, MX5, 1, MX4, 1)
 | 
|---|
 | 134 | C      CALL DZAXPY(NTOT, C3, MX3, 1, MX4, 1, MX5, 1)
 | 
|---|
 | 135 | C  Sinon 
 | 
|---|
 | 136 |       CALL DCOPY(NTOT, MX1, 1, MX5, 1)
 | 
|---|
 | 137 |       CALL DSCAL(NTOT, C1, MX5, 1)
 | 
|---|
 | 138 |       CALL DAXPY(NTOT, C2, MX2, 1, MX5, 1)
 | 
|---|
 | 139 |       CALL DAXPY(NTOT, C3, MX3, 1, MX3, 1)
 | 
|---|
| [2362] | 140 |       IF (K.EQ.5) PRINT *, 'MTXBLAS - 5 -> ', MX5(20,5),
 | 
|---|
 | 141 |      + ' NTot=' , NTOT
 | 
|---|
 | 142 |       IF (K.EQ.15) PRINT *, 'MTXBLAS - 15 -> ', MX5(20,15), 
 | 
|---|
 | 143 |      + ' NTot=' , NTOT
 | 
|---|
 | 144 |       RETURN
 | 
|---|
 | 145 |       END
 | 
|---|
 | 146 | 
 | 
|---|