Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Plot 迪斯林双精度库_Plot_Fortran_Gfortran_Double Precision - Fatal编程技术网

Plot 迪斯林双精度库

Plot 迪斯林双精度库,plot,fortran,gfortran,double-precision,Plot,Fortran,Gfortran,Double Precision,我试图编译一个用FORTRAN编写的程序,该程序使用DISLIN库绘制图形,但所有数据都是双精度的。我不能失去这个精度,所以将所有内容传递给简单精度不是一个选项。当我尝试链接到双精度库(_d)时,仍然会出现以下错误,如果我链接到简单精度库,则会出现以下错误: 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 'a

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

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):

注意,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文件,该文件与双精度文件相对应,但由于它是在另一台计算机上编译的,所以通常无法工作。必须使用gfortran命令将real 64文件夹中的dislin.f90文件编译到dislin主目录中,替换默认的.MOD文件:

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


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

该错误告诉您特定参数不是双精度。您需要研究包文档(或源代码)以确保为每个参数使用正确的类型。我希望双精度dislin库的链接选项为
-ldislin\u d
。这不是
.mod
文件的工作方式。它们依赖于编译器,但或多或少只包含模块中定义的接口和变量描述。此外,如您所示的单个命令可以生成许多
.mod
文件,源文件中的每个模块对应一个文件。有些编译器不创建任何
.mod
文件,但gfortran执行我编写的操作。对于上面显示的命令,还应生成
.o
文件。
gfortran -c dislin.f90