我有以下问题。我有一个文件,我必须:
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
非常感谢你的帮助!
答案 0 :(得分:2)
英特尔Fortran编译器(ifort
)执行自动换行,适合3个双精度数,而gfortran
则不行。
你应该创建一个显式格式(@francescalus提到):
1000 FORMAT(<grid>F16.8)
在此格式中,变量grid
可以直接使用。现在,您可以将WRITE
语句指定为
write(20,1000) f(i,:)
答案 1 :(得分:0)
[解决]
我终于解决了所有问题:
ifort
使用-no-wrap-margin
- &gt;工作!
使用ifort
和@Stefan提示 - &gt;工作!
单独使用gfortran
- &gt;工作!
区别在于文件大小:使用1)解决方案,文件比2)解决方案稍大。 3)情况再次显示文件大小相对于其他情况的差异(高于其他两种情况)。分别为:
对于grid = 50且输入文件为4001行和2行(132kb)的测试文件。
谢谢大家!!!!!