2017-03-22 98 views
0

我有一个Fortran代码,其中包括一些值,如温度和调用子程序。在Fortran中每X次迭代只调用一次函数/子程序

这个子程序给了我一个辐射解决方案,然后用于新的迭代。

问题是,这个子程序需要大量的时间来处理,所以我希望每20次迭代只调用一次,并保留程序其余部分的最后一个解决方案。

有没有可行的方法来做到这一点?

+0

格式化,删除感谢 – Hugo

回答

1

根本就只是

n_iterations = 100000 
    nth = 20 

    do i = 1, n_iterations 
    if (mod(i, nth)==0) call my_subroutine 
    end do 

表达mod(i, nth)==0是真实的,只有当i可以通过nth零整除。

+0

非常感谢你。有一件事,我不确定需要多少次迭代才能实现融合,我可以将任意数字设置为100000吗?我只是猜测,实际数字会低得多。 –

+0

Fortran中有各种类型的循环以及如何退出它们的各种方法。这完全取决于你。我的答案只是用'i'作为计数器。即使在'do while'循环中你也可以有一个计数器,你可以在每次迭代时自己增加一个计数器。 –

0

另一种方法是使用嵌套的循环:

 do i = 1,bignum 
     do j = i,20 
      code to be repeated many times 
     end do 
     call subroutine_to_be_called_ocasionally() 
     end do