我需要一个用于Fortran的特殊库,以便我可以即时进行编码和可视化,而不是写入文本文件,然后使用Python或Matlab进行绘制。我遵循了这个:
https://people.sc.fsu.edu/~jburkardt/f_src/gnufor/gnufor.html
指令没有被清除,所以我没有使用它们的示例,所以我编写了自己的代码。有2个文件:网站上的 gnu.f90 和我写的 myplot.f90 :
program myplot
!Declare data types
implicit none
integer, parameter :: N1 = 50
real(kind=8) :: x1(N1),x2(N1)
real(kind=8) :: y1(N1)
real(kind=8) :: y2(N1)
integer :: i
!Generate 2D plot
do i = 1,N1
x1(i) = i
x2(i) = i
end do
y1 = x1**2
y2 = x2**3
!print *, 'Plotting'
!call plot(x1,y1,x2,y2)
call write_xy_data(x1,y1)
end program myplot
显然,从他们的 gnufor.f90 文件中,我只需要执行以下操作:
write_xy_data(X,Y),它应该可以工作。在他们的示例代码中,他们没有将gnufor.f90用作模块,所以我没有提出:在开始时使用gnufor。虽然,我尝试过,但效果也不佳。因此,在当前目录中,我有:
gnufor.90 myplot.f90
要编译它,我在Linux上:gfortran myplot.f90 -o test
错误是:
Program received signal SIGSEGV: Segmentation fault - invalid memory reference.
Backtrace for this error:
#0 0x7FB0B051DE08
#1 0x7FB0B051CF90
#2 0x7FB0AFF574AF
#3 0x40302F in write_xy_data_
#4 0x400D7E in MAIN__ at myplot.f90:?
Segmentation fault (core dumped)
任何帮助将不胜感激。我希望问题出在我自己的代码中,尽管声明了所有数组大小。
答案 0 :(得分:3)
所链接网站的 gnufor.f90 中的子例程write_xy_data
具有签名
subroutine write_xy_data(data_filename, n, x, y, ierror)
implicit none
character ( len = * ) data_filename
integer ( kind = 4 ) n
real ( kind = 8 ) x(n)
real ( kind = 8 ) y(n)
integer(kind = 4) ierror
这意味着您不必将其仅传递x,y
,而必须将其称为
call write_xy_data('myfile',N1,x1,y1,ierr)
将要写入的文件名(在示例中为'myfile'
),要写入的点数(N1
),数据(x1,y1
)和整数,该整数承载有关写入成功的信息(ierror
,也必须声明此值)
此外,由于没有模块gnufor
,因此不需要use
子句, gnufor.F90 中的所有功能都是全局的,这也是您需要此功能的原因将点的数量作为额外的参数传递,因为假定的形状需要一个显式的接口。