Fortran代码无法写入输出文件及屏幕无打印问题求助
Fortran程序无输出且无法写入文件的问题排查
问题描述
编写的Fortran代码运行后既无屏幕打印输出,输出文件outputFTCS.txt也为空。编译使用gfortran FTCS.f90,运行./FTCS或./a.out均无结果。
完整代码
program FTCS implicit none integer :: m,n,i,j,a=1 real, allocatable :: P(:,:) real :: r,l,t,delta_x,delta_t,g open(20,file='input.txt') open(30,file='outputFTCS.txt') read(20,2)n ! reading these values from the input.txt file read(20,3)r,t,delta_t,l ! reading these values from input.txt 2 format (T10,I6) ! I is for integers 3 format (T10,F15.8) ! F is for real (float) delta_x = 1/(n-1) ! n = points g = floor(t/delta_t) m = g ! time allocate (P(m,n)) P(1,:)=20 ! initial condition: indexing begins at 1 do i=2,m ! points P(i,1)=100 ! boundary condition (left) P(i,n)=0 ! boundary condition (right) do j=2,n-1 ! time P(i,j)=r*(P(i-1,j+1)+P(i-1,j-1))+(1-2*r)*(P(i-1,j)) ! T_i=r(T_i-1 + T_i+1) + (1-2r)T_i print *,"hello" end do end do do i=1,m print *,'hello' end do 10 format(10f10.2) 30 format (10f10.2) close(10) ! do this last close(30) end program FTCS
输入文件input.txt内容
n=10 r=0.25 t=.03 delta_t=0.005 l=1
问题原因及解决方法
1. 输入读取格式完全不匹配
代码中使用的格式说明T10,I6和T10,F15.8指定从第10列开始读取数据,但input.txt里的数值(如10、0.25)紧跟在等号后,实际位置远早于第10列,且格式未处理=符号,导致读取操作失败,程序进入错误状态,后续的循环、打印等代码根本不会执行。
解决方法:修改读取格式以匹配输入文件的结构,比如使用自由格式读取(自动跳过非数值字符):
read(20,*)n read(20,*)r,t,delta_t,l
2. 未向输出文件写入任何内容
代码仅打开了30号单元对应outputFTCS.txt,但全程没有执行write(30, ...)语句,因此输出文件必然为空。
解决方法:在计算完成后添加写入逻辑,比如:
do i=1,m write(30,10) P(i,:) ! 使用10号格式写入每一行数据 end do
3. 错误关闭未打开的文件单元
代码最后执行close(10),但程序从未打开过10号单元,这会触发运行时错误,进一步导致程序异常终止。
解决方法:删除close(10)语句,仅关闭确实打开过的20和30号单元。
4. 类型转换隐患
floor(t/delta_t)返回的是实型(real)值,直接赋值给整型变量m可能引发类型转换问题,建议显式转换为整型:
m = int(floor(t/delta_t))
5. 编译命令错误(次要)
用户提到的gfortran FTCS.f90 -o是错误命令,-o后必须指定输出文件名,正确命令应为:
gfortran FTCS.f90 -o FTCS
验证修改后的程序
修正上述问题后,编译运行程序,屏幕会打印hello,同时outputFTCS.txt会写入计算得到的P数组数据。
内容的提问来源于stack exchange,提问作者Elena Welch
相关产品推荐
相关产品推荐

