×
INTELLIGENT WORK FORUMS
FOR ENGINEERING PROFESSIONALS

Log In

Come Join Us!

Are you an
Engineering professional?
Join Eng-Tips Forums!
  • Talk With Other Members
  • Be Notified Of Responses
    To Your Posts
  • Keyword Search
  • One-Click Access To Your
    Favorite Forums
  • Automated Signatures
    On Your Posts
  • Best Of All, It's Free!
  • Students Click Here

*Eng-Tips's functionality depends on members receiving e-mail. By joining you are opting in to receive e-mail.

Posting Guidelines

Promoting, selling, recruiting, coursework and thesis posting is forbidden.

Students Click Here

Jobs

[Fortran]Multiplying Matrices Using dgemm

[Fortran]Multiplying Matrices Using dgemm

[Fortran]Multiplying Matrices Using dgemm

(OP)
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.

RE: [Fortran]Multiplying Matrices Using dgemm

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

Red Flag This Post

Please let us know here why this post is inappropriate. Reasons such as off-topic, duplicates, flames, illegal, vulgar, or students posting their homework.

Red Flag Submitted

Thank you for helping keep Eng-Tips Forums free from inappropriate posts.
The Eng-Tips staff will check this out and take appropriate action.

Reply To This Thread

Posting in the Eng-Tips forums is a member-only feature.

Click Here to join Eng-Tips and talk with other members!


Resources