[2366] | 1 | program main
|
---|
| 2 | ! Programme test de perfo tableaux f90
|
---|
| 3 | ! Reza Ansari - Avril 2003
|
---|
| 4 | implicit none
|
---|
| 5 | parameter NR = 1000
|
---|
| 6 | parameter NC = 500
|
---|
| 7 | real(8) , dimension(:,:), allocatable :: mx1, mx2, mx3, mx4, mx5
|
---|
| 8 | integer i,j,k,ntime
|
---|
| 9 | real(8) x,y,z,c1,c2,c3
|
---|
| 10 | integer count
|
---|
| 11 | integer nra,nca
|
---|
| 12 |
|
---|
| 13 | count = 0
|
---|
| 14 | ntime = 50
|
---|
| 15 | nra = NR
|
---|
| 16 | nca = NC
|
---|
| 17 |
|
---|
| 18 | allocate(mx1(NR,NC))
|
---|
| 19 | allocate(mx2(NR,NC))
|
---|
| 20 | allocate(mx3(NR,NC))
|
---|
| 21 | ! allocate(mx4(NR,NC))
|
---|
| 22 | allocate(mx5(NR,NC))
|
---|
| 23 |
|
---|
| 24 | call finittim()
|
---|
| 25 | print *,' f90mtx - NR=' , NR, ' NC=' , NC
|
---|
| 26 | print *,' Remplissage MX1 MX2 (NRxNC) - NTimes=', ntime
|
---|
| 27 | do k=1,ntime/5
|
---|
| 28 | x = k*0.00314
|
---|
| 29 | y = sin(X)
|
---|
| 30 | do i=1,NR
|
---|
| 31 | do j=1,NC
|
---|
| 32 | mx1(i,j) = k*300.+10.*i+j+x
|
---|
| 33 | mx2(I,J) = k*550.+20.*i+2.*j+y
|
---|
| 34 | mx3(I,J) = k*860.+40.*i+7.*j+y*3.14
|
---|
| 35 | enddo
|
---|
| 36 | enddo
|
---|
| 37 | if (k.eq.5) print *, 'FILLMTX - 5 -> ', mx1(12,14)
|
---|
| 38 | if (k.EQ.15) print *, 'FILLMTX - 15 -> ', mx2(12,15)
|
---|
| 39 | call random_number(x)
|
---|
| 40 | call random_number(y)
|
---|
| 41 | call random_number(z)
|
---|
| 42 | i = x*NR
|
---|
| 43 | j = y*NC
|
---|
| 44 | if ((z>0.98).or.(k.eq.15).or.(k.eq.35)) &
|
---|
| 45 | print *, 'FillMtx/Check: ', &
|
---|
| 46 | k, mx1(i,j), mx2(i,j), mx3(i,j), &
|
---|
| 47 | ' x,y,z=',z,y,z
|
---|
| 48 | enddo
|
---|
| 49 |
|
---|
| 50 | print *, 'FIN Remplissage '
|
---|
| 51 | call fprttim(1)
|
---|
| 52 |
|
---|
| 53 | do k=1,ntime
|
---|
| 54 | c1 = k*0.035
|
---|
| 55 | c2 = cos(c1)+0.04
|
---|
| 56 | c3 = sin(c1*5.)
|
---|
| 57 | call opemtx(nra, nca, c1,c2,c3, mx1,mx2,mx3,mx5,count)
|
---|
| 58 | call random_number(x)
|
---|
| 59 | call random_number(y)
|
---|
| 60 | ! call random_number(z)
|
---|
| 61 | z = 0
|
---|
| 62 | i = x*NR
|
---|
| 63 | j = y*NC
|
---|
| 64 | if ((z>0.98).or.(k.eq.15).or.(k.eq.35)) &
|
---|
| 65 | print *, 'FillMtx/Check: ', k, i,j, &
|
---|
| 66 | mx1(i,j),mx2(i,j), mx3(i,j), &
|
---|
| 67 | ' c1,c2,c3=', c1,c2,c3, &
|
---|
| 68 | ' x,y,z=' , x,y,z
|
---|
| 69 |
|
---|
| 70 | enddo
|
---|
| 71 | print *, 'FIN MX5 = C1*MX1 + MX1 * MX2*C2 + MX2C3 '
|
---|
| 72 | call fprttim(2)
|
---|
| 73 |
|
---|
| 74 | print *, ' NCount appel opemtx = ' , count
|
---|
| 75 | print *, ' ------ FIN programme f90mtx ---------- '
|
---|
| 76 | end program main
|
---|
| 77 |
|
---|
| 78 | subroutine opemtx(nra,nca,c1,c2,c3,mx1,mx2,mx3,mx,count)
|
---|
| 79 | integer :: nra,nca,count
|
---|
| 80 | real(8), dimension(nra,nca) :: mx1,mx2,mx3
|
---|
| 81 | real(8), dimension(nra,nca) :: mx
|
---|
| 82 | real(8) :: c1,c2,c3
|
---|
| 83 | mx = c1*mx1+c2*mx2+c3*mx3
|
---|
| 84 | count = count+1
|
---|
| 85 | if ((count.eq.9).or.(count.eq.36)) &
|
---|
| 86 | print *, 'opemtx-count=' , count, ' mx1,2,3= ', &
|
---|
| 87 | mx1(count,19), mx2(count,19), mx3(count, 19), &
|
---|
| 88 | ' c1,c2,c3=', c1,c2,c3, &
|
---|
| 89 | ' mx= ' , mx(count,19)
|
---|
| 90 | return
|
---|
| 91 | end subroutine opemtx
|
---|
| 92 |
|
---|
| 93 |
|
---|