| 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 | 
 | 
|---|
| 49 |       PRINT *, ' ------ FIN programme ---------- ' 
 | 
|---|
| 50 |       END
 | 
|---|
| 51 | 
 | 
|---|
| 52 |       SUBROUTINE FILLMTX(K, X,Y, MX1, MX2, MX3)
 | 
|---|
| 53 |       DOUBLE PRECISION X,Y
 | 
|---|
| 54 |       DOUBLE PRECISION MX1(1000,500), MX2(1000,500), MX3(1000,500)
 | 
|---|
| 55 |       INTEGER I,J,K
 | 
|---|
| 56 |       DO I=1,1000
 | 
|---|
| 57 |          DO J=1,500
 | 
|---|
| 58 |             MX1(I,J) = K*300.+10.*I+J+X
 | 
|---|
| 59 |             MX2(I,J) = K*550.+20.*I+2.*J+Y
 | 
|---|
| 60 |             MX3(I,J) = K*860.+40.*I+7.*J+Y*3.14
 | 
|---|
| 61 |          ENDDO
 | 
|---|
| 62 |       ENDDO
 | 
|---|
| 63 |       IF (K.EQ.5) PRINT *, 'FILLMTX - 5 -> ', MX1(12,14) 
 | 
|---|
| 64 |       IF (K.EQ.15) PRINT *, 'FILLMTX - 15 -> ', MX2(12,15) 
 | 
|---|
| 65 | 
 | 
|---|
| 66 |       RETURN
 | 
|---|
| 67 |       END
 | 
|---|
| 68 | 
 | 
|---|
| 69 |       SUBROUTINE OPERMTX(K, MX1, MX2, MX5, C1, C2, C3)
 | 
|---|
| 70 |       INTEGER I,J,K
 | 
|---|
| 71 |       DOUBLE PRECISION MX1(1000,500), MX2(1000,500)
 | 
|---|
| 72 |       DOUBLE PRECISION MX5(1000,500)
 | 
|---|
| 73 |       DOUBLE PRECISION C1,C2,C3
 | 
|---|
| 74 |       DO I=1,1000
 | 
|---|
| 75 |          DO J=1,500
 | 
|---|
| 76 |             MX5(I,J) = C1*MX1(I,J)+MX1(I,J)*(MX2(I,J)*C2)+MX2(I,J)*C3
 | 
|---|
| 77 |          ENDDO
 | 
|---|
| 78 |       ENDDO
 | 
|---|
| 79 |       IF (K.EQ.5) PRINT *, 'OPERMTX - 5 -> ', MX5(20,5)
 | 
|---|
| 80 |       IF (K.EQ.15) PRINT *, 'OPEEMTX - 15 -> ', MX5(20,15)
 | 
|---|
| 81 |       RETURN
 | 
|---|
| 82 |       END
 | 
|---|
| 83 | 
 | 
|---|
| 84 |       SUBROUTINE OPADDMTX(K, MX1, MX2, MX3, MX5, C1, C2, C3)
 | 
|---|
| 85 |       INTEGER I,J,K
 | 
|---|
| 86 |       DOUBLE PRECISION MX1(1000,500), MX2(1000,500)
 | 
|---|
| 87 |       DOUBLE PRECISION MX3(1000,500), MX5(1000,500)
 | 
|---|
| 88 |       DOUBLE PRECISION C1,C2,C3
 | 
|---|
| 89 |       DO I=1,1000
 | 
|---|
| 90 |          DO J=1,500
 | 
|---|
| 91 |             MX5(I,J) = C1*MX1(I,J)+C2*MX2(I,J)+MX3(I,J)*C3
 | 
|---|
| 92 |          ENDDO
 | 
|---|
| 93 |       ENDDO
 | 
|---|
| 94 |       IF (K.EQ.5) PRINT *, 'OPADDMTX - 5 -> ', MX5(20,5)
 | 
|---|
| 95 |       IF (K.EQ.15) PRINT *, 'OPADDMTX - 15 -> ', MX5(20,15)
 | 
|---|
| 96 | 
 | 
|---|
| 97 |       RETURN
 | 
|---|
| 98 |       END
 | 
|---|
| 99 | 
 | 
|---|
| 100 |       SUBROUTINE MTXBLAS(K, MX1, MX2, MX3, MX4, MX5, C1, C2, C3)
 | 
|---|
| 101 |       INTEGER I,J,K,NTOT
 | 
|---|
| 102 |       DOUBLE PRECISION MX1(1000,500), MX2(1000,500)
 | 
|---|
| 103 |       DOUBLE PRECISION MX5(1000,500)
 | 
|---|
| 104 |       DOUBLE PRECISION C1,C2,C3
 | 
|---|
| 105 |       NTOT = 1000*500
 | 
|---|
| 106 |       CALL DVCAL(NTOT, C1, MX1, 1, MX5, 1)
 | 
|---|
| 107 |       CALL DZAXPY(NTOT, C2, MX2, 1, MX5, 1, MX4, 1)
 | 
|---|
| 108 |       CALL DZAXPY(NTOT, C3, MX3, 1, MX4, 1, MX5, 1)
 | 
|---|
| 109 |       IF (K.EQ.5) PRINT *, 'MTXBLAS - 5 -> ', MX5(20,5),
 | 
|---|
| 110 |      + ' NTot=' , NTOT
 | 
|---|
| 111 |       IF (K.EQ.15) PRINT *, 'MTXBLAS - 15 -> ', MX5(20,15), 
 | 
|---|
| 112 |      + ' NTot=' , NTOT
 | 
|---|
| 113 |       RETURN
 | 
|---|
| 114 |       END
 | 
|---|
| 115 | 
 | 
|---|