[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 |
|
---|