如何对多个.dat文件进行相同的计算

时间:2017-11-21 05:02:54

标签: fortran gfortran

我想为多个.dat文件执行固定的计算步骤。

以下是我想用一个 dimension t(128716),x(128716) open (unit=88,file='ALFA-gua-100m-2.dat',status='unknown') do i=1,128716 read(88,*)t(i),x(i) enddo sum=0 do j=1,128716 sum=sum+x(j) enddo write(*,*)sum/128716 close(88) stop end 文件进行操作的代码,即计算:

    dimension t(128716),x(128716)

    open (unit=11,file='ALFA-gua-100m-2.dat',status='unknown')
    open (unit=12,file='ALFA-gua-100m-5.dat',status='unknown')

    do i=1,2
       ii = i + 10

      do j=1,128716
        read(ii,*)t(j),x(j)
      enddo

      sum=0
      do k=1,128716
         sum=sum+x(k)
      enddo

    enddo

    do l=1,2
       ll = l + 10
       write(ll,*)sum/128716.0

       close(ll)
    enddo

    stop
    end

我该如何解决这个问题?请提出建议!

这是我的多个文件的代码:

print(model.summary())

但它不起作用。

2 个答案:

答案 0 :(得分:0)

当您有两个单独的循环时,不能对sum循环的两次迭代使用相同的i。处理第二个文件时会被覆盖。

  1. 您可以将循环合并为一个。

    do i=1,2
       ii = i + 10
    
      do j=1,128716
        read(ii,*)t(j),x(j)
      enddo
    
      sum=0
      do k=1,128716
         sum=sum+x(k)
      enddo
    
       write(ii,*)sum/128716.0
    
       close(ii)
    enddo
    
  2. 您可以将数组用于总和sums(i)

    do i=1,2
       ii = i + 10
    
      do j=1,128716
        read(ii,*)t(j),x(j)
      enddo
    
      sum=0
      do k=1,128716
         sums(i)=sums(i)+x(k)
      enddo
    
    enddo
    
    do l=1,2
       ll = l + 10
       write(ll,*)sums(l)/128716.0
    
       close(ll)
    enddo
    

答案 1 :(得分:0)

@ VladimirF答案的附录。

要对名为x的数组中的所有元素求和,我们可以简单地编写

 sumx = sum(x)

程序员根本不需要编写循环。如果使用一个总和数组,那么就像

 sums(1) = sum(x)

是合适的。

然后计算我写的数组的平均值

 meanx = sum(x)/size(x)

在我写作的时候:调用变量sum不是一个好主意。这个名称有一个现有的内在函数,它只会让读者(虽然不是编译器)混淆这个名字的变量。