file-io
  • fortran
  • fortran90
  • gfortran
  • 2016-08-09 5 views 0 likes 
    0

    が含まれている私は出力ファイルに余分なゼロ

    PROGRAM Calc_U0 
    Implicit None 
    real, dimension(:,:), allocatable :: x,y 
    integer :: n=16589,m=9,nm=6,I,J,r 
    
    open (unit = 7, file = "U0.txt") 
    open (unit=99, file='slice06.txt', status='old', action='read') 
    
    allocate(x(n,m)) 
    allocate(y(n,nm)) 
    
    do I=1,n 
        read(99,*,END=71) x(I,:) 
    enddo 
    
    71 do I=1,n 
        print*,I 
        do J=1,n 
        if(I/=J) then 
         !! if(x(I,1)==x(J,1)) then 
         if(x(I,2)==x(J,2)) then 
          if(x(I,3)==-x(J,3)) then 
           y(I,1)=x(I,1) 
           y(I,2)=x(I,2) 
           y(I,3)=x(I,3) 
           y(I,4)=(x(I,7)+x(J,7))/2 
           y(I,5)=(x(I,8)+x(J,8))/2 
           y(I,6)=(x(I,9)+x(J,9))/2 
           write(7,*) (y(I,r),r=1,6) 
          endif 
         endif 
         !!endif 
        endif 
    
        enddo 
    
    enddo 
    
    END PROGRAM Calc_U0 
    

    この単純なFortranのプログラムで少し問題を抱えている私は、ファイルU0.txtを見てまで、すべてが、正常に動作するようです。このファイルには、結果に加えて、6.4GBのサイズのゼロの他の行(何百万)が含まれています。しかし、バグがどこにあるのか分かりません。なぜなら、私が8000行未満を読むと、この問題は消えるからです。私はLinux上でgfortranコンパイラを使っています。

    +0

    タグ[タグ:fortran]を使用します。トピックだけでなく、あなたの問題を説明するタイトルを選択してください。トピックはタグによって記述されます。 –

    +0

    '16589 ** 2'は' 275 * 10 ** 6'のちょうど北ですので、ネストされたループ内の 'if'文が' .true.'に評価されると、そのプログラムが非常に大きなファイルを書くのは驚くことではありません。 。私はこれがデータ問題であり、プログラミングの問題ではないと結論づけます。 –

    +0

    最新のFortranコンパイラ(2008+)にアクセスできますか?もしそうなら、ファイル識別子ユニットをハードコーディングするのではなく、 'newunit'指定子を使用してください。 – jlokimlin

    答えて

    1

    読んだ行の数は関係ありません。あなたのループは1から16589まで変化します。おそらく、それらのループでnを読んだ行の実際の数に変更する必要があります。

    関連する問題