Fortran 无法写入输出文件或打印到屏幕

Fortran not writing to output file or printing to screen

提问人:Elena Welch 提问时间:10/24/2023 更新时间:11/6/2023 访问量:71

问:

我编写了这个简单的 Fortran 代码,目的是将答案写入输出文件。相反,输出文件是空白的,即使我尝试打印到屏幕上,它也不会这样做。

这是代码,它很短:

    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

我使用以下方法进行编译,然后尝试运行:或者,两者都没有产生输出。我也进行了编译以达到相同的结果。gfortran FTCS.f90./FTCS./a.outgfortran FTCS.f90 -o

输入 .txt 文件只是

    n=10     
    r=0.25     
    t=.03     
    delta_t=0.005     
    l=1

为什么不写入输出文件,甚至不写入屏幕?

福特兰 Gfortran

评论

0赞 steve 10/24/2023
如果从文件中读取值后立即放置,会发生什么情况?print *, nprint *, r ,t,delta_t,l
2赞 francescalus 10/24/2023
该格式看起来不适合读取您要求它读取的输入文件的各个部分。您确定没有错误消息并且您获得了预期的输入值吗?(T10,F15.8)
0赞 Dima Chubarov 10/24/2023
欢迎来到 Stack Overflow!请注意,您从不引用单元 30,这是您的输出文件。你希望程序如何将任何内容写入此文件?

答:

1赞 Jorge Luis Gálvez Vallejo 10/24/2023 #1

我认为这里有几个问题。首先,您的输入文件不仅有数字,还有字符。如果将输入文件更改为如下所示:

10
0.25
.03
0.005
1

您的代码如下所示:

    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,*)n  ! reading these values from the input.txt file
    read(20, *) r, t, delta_t, l

write(*,*) n, r, t, delta_t, l


end program

您会注意到它现在可以工作了:

:~/work/random$ ./a.out
          10  0.250000000       2.99999993E-02   4.99999989E-03   1.00000000

如果你想保留 你必须将该行作为字符阅读,然后进行一些拆分以准确提取您需要的内容。n=

评论

0赞 francescalus 10/24/2023
问题中的格式使用编辑描述符,其目的是跳过输入的字符部分。没有必要为“拆分提取”做任何特殊的事情,当然也不需要“将行作为字符阅读”。当然,必要的是跳过正确数量的字符。T
0赞 user22861891 11/6/2023 #2

T10 说明符从位置 10 及之后进行第一次读数。但是在您的文件输入 .txt 中,那里什么都没有。