Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 在fortran中修改数组_Arrays_Fortran_Fortran90 - Fatal编程技术网

Arrays 在fortran中修改数组

Arrays 在fortran中修改数组,arrays,fortran,fortran90,Arrays,Fortran,Fortran90,我有以下问题。我必须有一个文件: 在单元格中分割以创建NxN网格 计算每个细胞中的粒子数 以特定的方式写出结果数字 问题是第三点:我必须写一个NxN数组,每个数字代表每个单元格中粒子的总数,但我不知道如何在NxN数组中写入文件 program eccen implicit none integer, parameter:: grid=200 integer::i,j,k,n,m real*8,allocatable::f(:,:) real*8::xx(g

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

  • 在单元格中分割以创建
    NxN
    网格
  • 计算每个细胞中的粒子数
  • 以特定的方式写出结果数字
  • 问题是第三点:我必须写一个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
    
    程序eccen
    隐式无
    整数,参数::grid=200
    整数::i,j,k,n,m
    实*8,可分配::f(:,:)
    real*8::xx(网格)、yy(网格)、mval、Mxval
    实*8,可分配::x(:),y(:)
    打开(10,file='coordXY.txt')
    n=0
    做
    读取(10,*,结束=100)
    n=n+1
    结束
    100继续
    倒带(10)
    分配(x(n),y(n))
    i=1,n吗
    读(10,*)x(i),y(i)
    结束
    ! 创建网格
    mval=-15。
    Mxval=15。
    i=1,网格吗
    xx(i)=mval+((Mxval-mval)*(i-1))/(网格1)
    yy(i)=mval+((Mxval-mval)*(i-1))/(网格1)
    结束
    打开(20,file='fluxXY.dat')
    ! 计算网格每个单元格中的颗粒数
    分配(f(网格,网格))
    f=0
    i=1,网格吗
    do j=1,网格
    m=0。
    do k=1,n
    如果(x(k)>xx(i)和.x(k)yy(j)和.y(k)

    非常感谢你的帮助

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

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

    [已解决]

    我终于解决了我所有的问题:

  • 使用
    ifort
    -无换行边距
    ->工作

  • 使用
    ifort
    和@Stefan tips->work

  • 使用
    gfortran
    单独->工作

  • 区别在于文件大小:使用1)解决方案的文件比使用2)解决方案的文件大一点。第3)种情况再次表明,与其他情况相比,文件大小存在差异(高于其他两种情况)。分别为:

  • 60kb
  • 40kb
  • 65kb
  • 对于grid=50的测试文件和4001行2行(132kb)的输入文件


    谢谢大家

    即使在研究了你的示例程序之后,我必须承认我仍然不明白这里要问什么。你在问如何表示多维数组(可以说是矩阵)以及如何写出它吗?@Idigas:是的,gridgrid的矩阵(grid是x轴和y轴上的单元数)。但在我的程序中,第20单元中的文件只有3列和很多行。但是,我想要一个带有gridgrid(columns*lines)的数组,而不知道这三列的外观很难说,但是请尝试使用显式格式写入。您想要格式化还是不格式化数据?您确定只有3列吗?关闭编辑器上的换行符-它仍然是3列吗?到@cup,是的,因为我将output.dat放在一个只读取NxN文件的程序中,并给出错误,说明该文件是以Mx3 rray形式编写的,其中M是N或(或使用我的f90代码语法)中较高的数字
    网格
    ifort
    中较高的一个具有
    -无换行边距
    编译标志(Windows的拼写不同)<代码>
    是不可移植的,但是有一些方法可以解决这个问题(包括
    *(F…)
    如果可以称之为可移植的话)。
    1000  FORMAT(<grid>F16.8)
    
    write(20,1000) f(i,:)