Как сделать файл с количеством строк - PullRequest
0 голосов
/ 27 ноября 2018

Я использую этот код ниже, чтобы сгенерировать файл с i числом (например, i=200) строк, но первая и вторая строки исправлены, и я просто хочу создать еще i строки, используяслучайное выделение в сфере унитарного радиуса в Фортране.Каждая строка должна начинаться с m1, а затем 6 случайных чисел в диапазоне [0,1].

    program InputGen  
    implicit none 

        integer :: i,n,j
        character(len=500) :: firstLine, secondLine
        real *8 :: m1  
        real:: r(10) 

        m1=1.d0  
        firstLine='3  5   1.d-4    1.d5   0.e-3    0.0   1. 0.1 0.e0 1'  
        secondLine='4.d6 0. 0. 0. 0. 0. 0. ' 

        call random_seed()  
        call random_number(r) 

        open(unit=100, file='INPUT.TXT',Action='write', Status='replace')
        write(100,'(A)') trim(firstLine)
        write(100,'(A)') trim(secondLine)

          do i=1,200
            write(100,'(A)') '',m1,' ',(r(n),n=1,10), 
                             ' ',(r(n),n=1,10),'0.0',&
                             ' ',(r(n),n=1,10),&
                             ' ',(r(n),n=1,10),'0.0'

          end do  

    write(*,*) 'Input file generated.'  
    write(*,*) 'Press Enter to exit...'  
    read(*,*)  

    end program InputGen  

Первая и вторая строки создаются идеально, но остальные строки в цикле нет.

1 Ответ

0 голосов
/ 27 ноября 2018

Вы не сказали нам, что не так (как показывает проблема), но я подозреваю, что формат неправильный.Вы просто указываете (A), но у вас есть смешанный список вывода со строками и числами.

Вы можете просто использовать простой общий формат, такой как (*(g0)), который будет применять общий формат g0 ко всем элементамв списке ввода.Вы захотите добавить несколько ручных пробелов (хотя у вас их уже есть) в список ввода, чтобы избежать объединения двух несвязанных элементов вывода в строке.

Или вы можете просто следовать списку ввода и добавить определенный формат длякаждый элемент, как (a,1x,f12.6,a,10(f12.6,1x),a ... и так далее.Отрегулируйте при необходимости, особенно пробелы (либо оставьте их как ' ' с дескриптором a, либо используйте дескриптор 1x.

Вы также в настоящее время пишете один и тот же r все время.Вы должны генерировать больше чисел и заново генерировать их при каждой итерации цикла

     real:: r(40) 

     do i=1,200
        call random_number(r)

        write(100,'(*(g0))') '',m1,' ',r(1:10), 
                         ' ',r(11:20),'0.0',&
                         ' ',r(21:30),&
                         ' ',r(31:40),'0.0'

      end do  

Это ничего не делает с точками в сфере или чем-то подобным, это просто печатает случайные числа. Надеюсь, это понятно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...