C Written by Robert Bernecky 1994-09-10 C C main driver program for Fortran matrix multiply. (square arrays) C This one uses vanilla matrix product, but we transpose the C right argument so that we're stride one on both sides. double precision result(500,500),x(500,500),y(500,500) double precision xt(500,500) integer size,rx,cx,ry,cy double precision sum read (*,*) size 102 format (i6) rx = size ry = size cx = size cy = size C C Initialize arrays to trash values C do 2 i = 1,rx ii = (i-1)*rx do 2 j = 1,cx x(i,j) = 0.5d0+ii+j-1 2 continue C Initialize other argument. do 22 i=1,cx do 22 j=1,rx 22 y(i,j) = x(j,i) C matmul using old algorithm with transposed LEFT argument. do 23 i=1,rx do 23 j=1,cx 23 xt(j,i)= x(i,j) C Now do the matrix product. do 5 i=1,rx do 5 j=1,cy result(i,j)=0.0d0 do 5 k=1,cx 5 result(i,j)=result(i,j)+xt(k,i)*y(k,j) sum = 0.0d0 do 4 i=1,cy do 4 j=1,rx c write (6,101) result(j,i) sum = sum + result(j,i) 4 continue write (6,101) sum 101 format (d16.8) stop end