I try to write an output file.dat with an nxn matrix format .
I write the code but the output is a column of value f.
Now the problem is: how can i change the output-format of the file to write?
from: 1 2 4 5 ...
to: 1,2,3,4 // 5,6,8,.. //
program eccen
implicit none
integer, parameter:: grid=800
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='3d_disk.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
mval=-20.
Mxval=20.
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='3d_map.dat')
allocate(f(n,n))
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)
I thing that the modification must be here from this:
write(20,*) f(i,j)
end do
write(20,*)
print *,i
end do
end program eccen
to:
do i=1,grid
do j=1,grid
write(20,*) f(i,j)
end do
end do
end do
write(20,*)
print *,i
end do
end program eccen
This statement
will write the value of
f(i,j)
then move to the next line, so the file you're getting is exactly what your code is specifying. If you want the file to containn
rows each withn
values trywhich ought to make a good stab at writing the whole of row
i
of the array to a single line in the output file. Of course, this makes your loop overj
redundant so you can remove it.