【问题标题】:Call a function / subroutine only once every X iterations in FortranFortran 中每 X 次迭代仅调用一次函数/子例程
【发布时间】:2017-03-22 12:34:46
【问题描述】:

我有一个 fortran 代码,除其他外,我输入了一些值,例如温度并调用子程序。

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

问题是这个子例程需要很多时间来处理,所以我希望每迭代一次,比如说,二十次迭代,并在此之前为程序的其余部分保留最后一个解决方案。

有可行的方法吗?

【问题讨论】:

  • 格式化,删除谢谢

标签: function fortran call subroutine


【解决方案1】:

简单地做

  n_iterations = 100000
  nth = 20

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

只有当i 可以除以nth 且余数为零时,表达式mod(i, nth)==0 才为真。

【讨论】:

  • 非常感谢。有一件事,我不确定收敛需要多少次迭代,我可以放一个像 100000 这样的任意数字吗?我只是在这里猜测实际数字会低得多。
  • Fortran 中有各种类型的循环以及如何退出它们的各种方法。这完全取决于你。我的回答只是使用i 作为计数器。即使在do while 循环中也可以有一个计数器,只需在每次迭代时自己将其增加一即可。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-03
    • 1970-01-01
    • 2021-02-15
    • 2023-01-07
    • 2013-07-24
    • 1970-01-01
    相关资源
    最近更新 更多