簡體   English   中英

在 Fortran 循環中重復一個步驟

[英]Repeating a step in a Fortran loop

我正在嘗試編寫一個 Fortran 90 程序來執行 Euler 的方法來使用自適應時間步來解決 ode 的問題。

我在do while循環中有一個if語句,我在其中檢查代碼每次迭代時的錯誤是否小於某個容差。 但是,如果它不小於某個容差,則必須更改某個值(步長)並再次進行計算以獲得新的誤差以與容差進行比較。

它看起來像(原諒我這是我第一次使用這個網站):

do while (some condition)
  (Get an approximation to the ODE with various subroutine calls)
  (Calculate the error)
if (error < tol)
  step = step/2
else
   step = 2*step
(Something that will return to the top of my do while loop)
end if
end do

舉個例子,我do while (i < 4)i從 1 開始,我的錯誤不小於我的容忍度,我必須用新的步長對i=1再次重復計算。

我希望這對閱讀本文的人有意義。 如果您需要任何說明,請告訴我。

因為do while循環中沒有明確的計數器,這與正常的do i=1,...循環不同。 您可以使用cycle來開始新的迭代。 這將與重復當前迭代相同。 但條件將再次評估。 如果它不應該被評估,你將不得不使用go to或重構你的代碼。

或者嵌套在主循環中的另一個循環可能會更好,但這可能算作上面提到的重組。 取決於條件是什么,您如何更改stepi以及公差如何取決於stepi

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM