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