Reputation: 1032
I have the following problem. I have a file that I must:
NxN
grid;The problem is the third point: I must write an NxN array each numbers represent the total numbers of particles in each cell, but I don't know how to write the file in an NxN
array.
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
Thanks a lot for Your help!
Upvotes: 0
Views: 275
Reputation: 1032
[SOLVED]
I finally solve all my problems:
using ifort
with -no-wrap-margin
-> work !
using ifort
with @Stefan tips -> work!
use gfortran
alone -> work !
The difference is in the file size: using the 1) solution the file is a bit larger than with the 2) solution. The 3) case, again, shows difference in file size respect the other cases (higher than the other two). Respectively:
For a test file with grid=50 and an input file of 4001 lines and 2 rows (132kb).
Thanks You all!!!!!
Upvotes: 0
Reputation: 2518
The Intel Fortran Compiler (ifort
) performs an automatic wrapping which fits 3 double precision numbers, while gfortran
does not.
You should create an explicit format (mentioned by @francescalus):
1000 FORMAT(<grid>F16.8)
In this format, the variable grid
can be used directly. Now you can specify your WRITE
statement as
write(20,1000) f(i,:)
Upvotes: 2