Eng-Tips is the largest engineering community on the Internet

Intelligent Work Forums for Engineering Professionals

[Fortran]Multiplying Matrices Using dgemm

Status
Not open for further replies.

Gosik

Chemical
Dec 22, 2012
1
0
0
PL
Hi!
I would like to multiply two arrays in Fortran using DGEMM (BLAS procedure).
I have written a simple program:

Code:
program matrix
  implicit none
  double precision mac(m,n),mac2(n,k),mac3(m,k)
  integer R,L
  integer m,n,k

   m=4
   n=2
   k=3

  call FILLMATRIX(m,n,mac)
  call FILLMATRIX(n,k,mac2)
  call DGEMM("N","N",m,k,n,1.d0,mac,m,mac2,n,0.d0,mac3,m)

  WRITE(*,*)'Matrix C:'
    DO R=1,m
      write(*,*) (mac3(R,L),L=1,k)
    end do

  END

SUBROUTINE FILLMATRIX (M,N,MATRIX)
   INTEGER M,N
   DOUBLE PRECISION MATRIX(M,N)

    do  I=1,M
    do  J=1,N
      MATRIX(I,J) = I+2*J
    end do
    end do

  WRITE(*,*) 'Matrix:'
    do I=1,M
     write(*,*) (MATRIX(I,J),J=1,N)
    end do

  END

And I get this result:
Code:
Matrix C:
    29.00000000000000        0.0000000000000000        0.0000000000000000     
    36.00000000000000        0.0000000000000000        0.0000000000000000     
    27.00000000000000        7.2315834086755357E-308   0.0000000000000000     
    34.00000000000000        1.0037966311151816E-317   0.0000000000000000     
Segmentation fault
Could you point me where I have a mistake?
I will be very grateful for your help.

 
Replies continue below

Recommended for you

It's surprising that your code compiled ran at all.

You've declared three arrays, mac, mac2 and mac3 with unknown sizes. m, n & k must have actual values before you declare mac, mac2 & mac3.

Put this statement before your Double Precision line and you'll be fine:
(note: this assumes fortran90 or higher. if you're only using an old fortran77 compiler, you need the older syntax to declare you integer parameters)

integer, parameter :: m=4, n=2, k=3

Dan
 
Status
Not open for further replies.
Back
Top