DISLIN 双精度库

DISLIN double-precision libraries

我正在尝试编译一个用 FORTRAN 编写的程序,该程序使用 DISLIN 库绘制图形,但所有数据都是双精度的。我不能失去这种精度,所以将所有内容传递给简单精度不是一种选择。当我尝试 link 双精度库 (_d) 时,如果我 link 编辑到简单精度库,我仍然会收到以下错误:

call graf(-1.D0, 1.D0, -1.D0, 2.D0/10.D0, -1.D0, 1.D0, -1.D0, 2.D0/10.)
         (1)
ERROR: Type mismatch in argument 'ax' at (1); passed from REAL(8) to REAL(4).

我在所有绘图语句中也遇到了其他此类错误。我的编译命令是 (gfortran):

gfortran modulename.f95 progname.f95  C:\dislin\disgf_d.a -luser32 -lgdi32 -lopengl32

请注意,disgf_d 指的是双精度库。这里有人有什么想法吗?

相关代码:

call metafl("XWIN")
call disini()
call graf(-1.D0, 1.D0, -1.D0, 2.D0/10.D0, -1.D0, 1.D0, -1.D0, 2.D0/10.D0)
do i = 0, m
    Z(i) = -1.D0 + (2.D0*i) / m
    Y_Z(i) = Int_g(Z(i))
end do
call curve (Z, Y_Z, m + 1)
do i = 0, m
    Y_Z(i) = g(Z(i))
end do
call curve (Z, Y_Z, m + 1)
call endgrf()
call disfin()

尝试编译程序,将行更改为

call graf(-1.E0, 1.E0, -1.E0, 2.E0/10.E0, -1.E0, 1.E0, -1.E0, 2.E0/10.)

1.0E0 和 1.0D0 分别是单精度常量和双精度常量。

我发现解决方案在带有机器代码的 .MOD 文件中。当然,这个目标文件必须与双精度库相对应,安装DISLIN后默认为.MOD文件引用单精度库。在名为 real64 的文件夹中存在另一个 dislin.MOD 文件,它确实与双精度文件相对应,但是这通常不起作用,因为它是在另一台机器上编译的。必须将real 64文件夹中的dislin.f90文件编译到dislin主目录,替换默认的.MOD文件,使用gfortran命令:

gfortran -c dislin.f90

-c表示f.90文件不会编译成可执行文件,而是编译成目标文件。因为它是一个 .f90 模块,所以这将是 .MOD 而不是 .o。

然后,使用 "use dislin" 和与原始 post 中相同的命令,所有内容都可以正确编译并链接到双精度库。