| 1 |       PROGRAM MAIN
 | 
|---|
| 2 |       IMPLICIT NONE
 | 
|---|
| 3 | 
 | 
|---|
| 4 | ! declaration d'interface de fonction 
 | 
|---|
| 5 |       interface 
 | 
|---|
| 6 |         subroutine check_table(k, a, b, c, ntot)
 | 
|---|
| 7 |           integer, intent (in) :: k
 | 
|---|
| 8 |           integer, intent (inout) :: ntot
 | 
|---|
| 9 |           double precision, intent (in), dimension(:,:) :: a,b,c
 | 
|---|
| 10 |         end subroutine check_table
 | 
|---|
| 11 |       end interface 
 | 
|---|
| 12 | 
 | 
|---|
| 13 |       integer, parameter :: NL = 4, NC=5
 | 
|---|
| 14 |       double precision, dimension (NL, NC) :: m1,m2,m3,m4
 | 
|---|
| 15 | 
 | 
|---|
| 16 |       integer :: i,j,k,kk
 | 
|---|
| 17 |       integer :: ntot,nloop
 | 
|---|
| 18 | 
 | 
|---|
| 19 |       integer :: N = 5000000
 | 
|---|
| 20 | 
 | 
|---|
| 21 |       print *, '--- timing test : N=', N, ' NL=', NL, ' NC=',NC
 | 
|---|
| 22 |       ntot = 0
 | 
|---|
| 23 |       nloop = 0
 | 
|---|
| 24 |       do kk=1,1
 | 
|---|
| 25 |       do k=1,N
 | 
|---|
| 26 |         m1 = 0
 | 
|---|
| 27 |         m2 = 0
 | 
|---|
| 28 |         do i=1,NL
 | 
|---|
| 29 |           do j=1,NC
 | 
|---|
| 30 |             m1(i,j) = k*300+10.*i+j
 | 
|---|
| 31 |             m2(i,j) = k*550+20.*i+2.*j;
 | 
|---|
| 32 |           enddo
 | 
|---|
| 33 |         enddo
 | 
|---|
| 34 |         m3 = m1+m2;
 | 
|---|
| 35 |         m4 = m1*m2;
 | 
|---|
| 36 |         call check_table(k, m2, m3, m4, ntot)
 | 
|---|
| 37 | !        if (k .eq. 1) then
 | 
|---|
| 38 | !           print *, 'm1=', m1        
 | 
|---|
| 39 | !           print *, 'm2=', m2
 | 
|---|
| 40 | !           print *, 'm3=', m3
 | 
|---|
| 41 | !           print *, 'm4=', m4
 | 
|---|
| 42 | !        endif
 | 
|---|
| 43 |         nloop = nloop+1
 | 
|---|
| 44 |       enddo
 | 
|---|
| 45 |       enddo
 | 
|---|
| 46 |       
 | 
|---|
| 47 |       print *, ' nloop = ', nloop , ' ntot = ' , ntot 
 | 
|---|
| 48 |       print *, '------- end of matrixf.f90 -------- '
 | 
|---|
| 49 |       end
 | 
|---|
| 50 | 
 | 
|---|
| 51 | 
 | 
|---|
| 52 |       subroutine check_table(k, a, b, c, ntot)
 | 
|---|
| 53 |         integer, intent (in) :: k
 | 
|---|
| 54 |         double precision, intent (in), dimension(:,:) :: a,b,c
 | 
|---|
| 55 |       
 | 
|---|
| 56 |       if ((k.eq.1) .or. (k.eq.50))  then 
 | 
|---|
| 57 |         print *, 'check_table(',k, '...) size(a,1)= ', size(a,1), &
 | 
|---|
| 58 |                ' size(a,2)= ', size(a,2)
 | 
|---|
| 59 |       endif
 | 
|---|
| 60 |       ntot = ntot+1
 | 
|---|
| 61 |       end subroutine check_table
 | 
|---|
| 62 |       
 | 
|---|