У меня 30000 файлов для обработки, каждый файл имеет 80000 х 5 строк. Мне нужно прочитать все файлы и обработать их, находя среднее значение каждой строки. Я написал код для чтения и извлечения всех данных из файла. Мой код в Фортране. Имеется массив (30000 X 800000). Моя программа не может завершиться (3300 X 80000). Мне нужно добавить 4-й столбец каждого файла за 300 шагов, я имею в виду 4-й столбец 1-го файла с 4-м столбцом 301-го файла, 4-й столбец 2-го файла с 4-м столбцом 302-го файла и т. Д. Вы думаете, что это потому, что ограничения размера массива, который может обрабатывать Фортран? Если так, есть ли способ увеличить размер массива, который может обрабатывать Фортран? Как насчет нет файлов? Мой код выглядит так:
Эта программа работает хорошо.
implicit double precision (a-h,o-z),integer(i-n)
dimension x(78805,5),y(78805,5),den(78805,5)
dimension b(3300,78805),bb(78805)
character*70,fn
nf = 3300 ! NUMBER OF FILES
nj = 78804 ! Number of rows in file.
ns = 300 ! No. of steps for files.
ncores = 11 ! No of Cores
c--------------------------------------------------------------------
c--------------------------------------------------------------------
!Initialization
do i = 0,nf
do j = 1, nj
x(j,1) = 0.0
y(j,2) = 0.0
den(j,4) = 0.0
c a(i,j) = 0.0
b(i,j) = 0.0
c aa(j) = 0.0
bb(j) = 0.0
end do
end do
c-------!Body program-----------------------------------------------
iout = 6 ! Output Files upto "ns" no.
DO i= 1,nf ! LOOP FOR THE NUMBER OF FILES
write(fn,10)i
open(1,file=fn)
do j=1,nj ! Loop for the no of rows in the domain
read(1,*)x(j,1),y(j,2),den(j,4)
if(i.le.ns) then
c a(i,j) = prob(j,3)
b(i,j) = den(j,4)
else
c a(i,j) = prob(j,3) + a(i-ns,j)
b(i,j) = den(j,4) + b(i-ns,j)
end if
end do
close(1)
c ----------------------------------------------------------
c -----Write Out put [Probability and density matrix]-------
c ----------------------------------------------------------
if(i.ge.(nf-ns)) then
do j = 1, nj
c aa(j) = a(i,j)/(ncores*1.0)
bb(j) = b(i,j)/(ncores*1.0)
write(iout,*) int(x(j,1)),int(y(j,2)),bb(j)
end do
close(iout)
iout = iout + 1
end if
END DO
10 format(i0,'.txt')
END