2

当我的 f90 程序的一个子程序中出现某些情况时,我试图找到一种方法来设置中断顺序。是否有可能从中得到任何想法?代码方案如下所示:

    /
    modules
    PROGRAM
    allocate variables
    CALL subroutines for initializing variables
    ...
    do 1,max iterations
    CALL subroutine1
    CALL subroutine2
    CALL subroutine3 !--> here I have the condition
    ...
    ...
    end do

    END PROGRAM

    Subroutine subroutine3 
    ...
    if (condition = true) then ! what I want to do here is to break the program printing a message saying that it is stopped because condition is true)

    end if
    end subroutine 3

    /

我会很感激你的帮助,

我对 fortran 很陌生,而且我是这个论坛的新手!

先感谢您,

阿尔伯特 P

4

1 回答 1

3
if (condition) stop

将立即停止您的程序。你可能更喜欢

if (condition) then
   write(*,*) 'A friendly message'
   stop
end if

如果您的编译器与 Fortran 2008 兼容,您甚至可以编写

if (condition) stop 'A friendly message'

但是,也许您想要做的不是停止程序而是退出子例程,在这种情况下,您将以某种可接受的方式跳到子例程的末尾。

请注意,condition=true将条件值与逻辑常量进行比较在语法上是不正确的.true.。这是一个赋值语句。语法上正确的比较会是condition == .true.,但这在语义上是有害的,简单地写作if (condition)表达了所做的一切if (condition == .true.)。缩写形式还表明您是程序员而不是脚本小子。

于 2012-07-25T13:32:59.400 回答