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
数组中写入文件
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->workgfortran
单独->工作谢谢大家 即使在研究了你的示例程序之后,我必须承认我仍然不明白这里要问什么。你在问如何表示多维数组(可以说是矩阵)以及如何写出它吗?@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,:)