писать в формате массива на фортране

Я пытаюсь записать выходной файл .dat в формате матрицы nxn.

Я пишу код, но на выходе получается столбец со значением f.

Теперь проблема: как я могу изменить формат вывода файла для записи?

от: 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)

Я думаю, что модификация должна быть здесь:

                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

person Panichi Pattumeros PapaCastoro    schedule 20.05.2013    source источник


Ответы (1)


Это утверждение

write(20,*) f(i,j)

напишет значение f(i,j), а затем перейдет к следующей строке, поэтому файл, который вы получаете, точно соответствует вашему коду. Если вы хотите, чтобы файл содержал n строк с n значениями, попробуйте

write(20,*) f(i,:)

который должен сделать хороший удар по записи всей строки i массива в одну строку в выходном файле. Конечно, это делает ваш цикл по j избыточным, поэтому вы можете удалить его.

person High Performance Mark    schedule 20.05.2013
comment
Вам нужно будет использовать явный формат (а не указанный список), чтобы процессор не вставлял произвольные разрывы строк (начиная с новых записей) там, где он считает нужным, при выполнении определенного оператора записи. - person IanH; 21.05.2013