在fortran中修改数组

时间:2014-01-16 19:55:41

标签: arrays fortran fortran90

我有以下问题。我有一个文件,我必须:

  1. 划分单元格以创建NxN网格;
  2. 计算每个单元格中的粒子;
  3. 以特定方式编写结果数字。
  4. 问题是第三点:我必须写一个NxN数组,每个数字代表每个单元格中的粒子总数,但我不知道如何在NxN数组中编写文件。

    program eccen
        implicit none
        integer, parameter:: grid=200
        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='coordXY.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
    
    ! create a grid
        mval=-15.
        Mxval=15.
        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='fluxXY.dat')
    
    ! counts the paticles in each cell of the grid
    
    
        allocate(f(grid,grid))
        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)    
    ! THIS IS HOW I WRITE THE FILE BUT THIS SHOULD BE CHANGED
                write(20,*) f(i,:)
    
            end do
            write(20,*)
            print *,i
        end do    
    end program eccen
    

    非常感谢你的帮助!

2 个答案:

答案 0 :(得分:2)

英特尔Fortran编译器(ifort)执行自动换行,适合3个双精度数,而gfortran则不行。

你应该创建一个显式格式(@francescalus提到):

1000  FORMAT(<grid>F16.8)

在此格式中,变量grid可以直接使用。现在,您可以将WRITE语句指定为

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

答案 1 :(得分:0)

[解决]

我终于解决了所有问题:

  1. ifort使用-no-wrap-margin - &gt;工作!

  2. 使用ifort和@Stefan提示 - &gt;工作!

  3. 单独使用gfortran - &gt;工作!

  4. 区别在于文件大小:使用1)解决方案,文件比2)解决方案稍大。 3)情况再次显示文件大小相对于其他情况的差异(高于其他两种情况)。分别为:

    1. 60KB;
    2. 40KB;
    3. 65KB。
    4. 对于grid = 50且输入文件为4001行和2行(132kb)的测试文件。

      谢谢大家!!!!!