大家好,我刚刚接触fortran这门语言。想要学习一些数值软件库的写法、用法,日后可以自己编写一些算法。现在在第一次尝试调用arpack库时出现了一个问题,想要向论坛求助!
我用的是VS2015,同时安装了intel parallel studio XE,编写形如hello world的程序没有出现问题。我首先是根据http://www.cnblogs.com/zeze/p/5959520.html所说的方法成功安装并配置好了arpack库,并且用MinGW编译器试运行了其中的example文件夹下的示例都没有出现问题。然后为了试验在VS上运行,我编写了如下程序,其中调用了arpack目录下lapack中的dgemm.f程序。(下面这个程序的目的是比较fortran中的矩阵乘法与lapack中的矩阵乘法的效率上的差距)。但是,VS却报了30多个错。我看了下,都是指向dgemm.f这个程序的。但我认为dgemm.f是不应该出错的,于是我又用MinGW去手动分开编译这两个文件,发现dgemm.f在编译时没有出错,但是在编译我的exmain时却报了很多错,原因都指向其中include的dgemm.f文件。我使用的编译命令是:
$ gfortran -c dgemm.f -o dgemm.o
$ gfortran -c exmain.f90 -o exmain.o
另外,如果我在VS中直接编译dgemm.f,也会出错。
我在想的是会不会是因为两个文件的格式不同的原因?dgemm是固定格式写的,而exmain是自由格式的问题,在编译过程中导致出错?那我自由格式应该如何调用固定格式的程序?我这方面很小白,恳请大家能帮一下!!!谢谢啦!
其中dgemm.f我放在了附件里。
[Fortran] 纯文本查看 复制代码 program exmain
include 'dgemm.f'
implicit none
integer, parameter :: m=1000
DOUBLE PRECISION a(m,m), b(m,m), c(m,m),d(m,m),t
integer i,j
real t1, t2, t3
c=0
call RANDOM_SEED()
do i=1,m
do j=1,m
call RANDOM_NUMBER(t)
a(i,j)=t*5
b(i,j)=t*5
end do
end do
call cpu_time(t1)
c=matmul(a,b)
call cpu_time(t2)
d=dgemm('N','N',m,m,m,1,a,m,b,m,0,c,m)
call cpu_time(t3)
write (*,*)t2-t1
write (*,*)t3-t2
stop
end program
|