2013-05-20 98 views
1

我嘗試使用nxn矩陣格式寫入輸出file.dat。在fortran中以陣列格式寫入

我寫的代碼但輸出值f的一列。

現在的問題是:如何更改文件的輸出格式寫?

從: ...

到:1,2,3,4 // 5,6,8,.. //

program eccen 
    implicit none 
    integer, parameter:: grid=800 
    integer::i,j,k,n,m 
    real*8,allocatable::f(:,:) 
    real*8::xx(grid),yy(grid),mval,Mxval 
    real*8,allocatable::x(:),y(:) 

    open(10,file='3d_disk.txt') 
    n=0 
     DO 
       READ(10,*,END=100) 
       n=n+1 
     END DO 

100  continue 
     rewind(10) 

    allocate(x(n),y(n)) 

    do i=1, n 
     read(10,*) x(i),y(i) 
    end do 


    mval=-20. 
    Mxval=20. 
    do i=1, grid 
     xx(i) = mval + ((Mxval - mval)*(i-1))/(grid-1) 
     yy(i) = mval + ((Mxval - mval)*(i-1))/(grid-1) 
    end do 

    open(20,file='3d_map.dat') 

    allocate(f(n,n)) 
    f=0 
    do i=1,grid 
     do j=1,grid 
      m=0. 
      do k=1, n 
       if (x(k) > xx(i) .and. x(k) < xx(i+1) .and. & 
       & y(k) > yy(j) .and. y(k) < yy(j+1)) then 
        m=m+1 ! CONTA IL NUMERO DI PARTICELLE 
       end if 
      end do 
      f(i,j)=float(m+1) 

我的事了修改必須在這裏從這個:

   write(20,*) f(i,j) 
      end do 
      write(20,*) 
    print *,i 
     end do  
end program eccen 

到:

do i=1,grid 
     do j=1,grid 
     write(20,*) f(i,j) 
     end do 
    end do 

end do 
      write(20,*) 
    print *,i 
     end do 

end program eccen 

回答

0

本聲明

write(20,*) f(i,j) 

會寫的f(i,j)值,然後移動到下一行,所以你得到的文件正是你的代碼中指定。如果你想要的文件包含每個n行與n值嘗試

write(20,*) f(i,:) 

它應該有一個良好的刺在整個陣列的i行寫入到輸出文件的單行。當然,這使得您遍歷j多餘的,所以你可以將其刪除。

+3

您需要使用明確的格式(而不是指向列表)來避免處理器在執行特定的寫入語句時插入任意換行符(開始新記錄)。 – IanH