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