如何停止子程序并升起标志?

2024-01-12

I am writing a program in Fortran 95 (to be compiled with with gfortran) containing a subroutine that performs a certain computation. As suggested in "Fortran 95/2003 for Scientists & Engineers" by S. J. Chapman, I am trying to stop the subroutine when an error is encountered and "throw"[1] an error flag that is "catch"ed[1] by the calling program, that will take all the necessary actions. Ideally, I am going for something like:

! Pseudo-code
PROGRAM my_prog
    integer :: error_flag
    CALL my_subr (<input_args>, <output_args>, error_flag)
    ! Also error_flag is an output: 0 -> everything OK, 1 -> error
    IF (error_flag /= 0) THEN
        WRITE (*,*) 'Error during execution of "my_subr"'
    ELSE
        ... do something ...
    END IF
END PROGRAM my_prog

如何停止子例程并优雅地处理错误?

这是一个例子:subroutine“division”采用整数输入值,并迭代地将其除以输入值减去步骤数-1 的值。当该值达到零时,应提出标志并退出子例程而不执行除以零。

SUBROUTINE division (inval, outval, error_flag)
  IMPLICIT NONE

  INTEGER, INTENT(IN) :: inval
  REAL, INTENT(OUT) :: outval
  INTEGER, INTENT(OUT) :: error_flag ! 0 -> OK, 1 -> error

  INTEGER :: i
  REAL :: x

  error_flag = 0
  x = REAL(inval)
  DO i = 0, 10
     IF (inval-i == 0) error_flag = 1
     ! How can I gracefully exit now?
     x = x / REAL(inval-i)
  END DO

END SUBROUTINE division

PROGRAM my_prog
  IMPLICIT NONE
  REAL :: outval
  INTEGER :: error_flag
  CALL division (8, outval, error_flag)
  IF (error_flag == 1) THEN
     WRITE (*,*) 'Division by zero'
  ELSE
     WRITE (*,*) 'Output value:', outval
  END IF
END PROGRAM my_prog

Notes:

[1] I am borrowing (in a probably inappropriate way) C++'s jargon.


看到你的例子,你似乎错过了return陈述:

  error_flag = 0
  x = REAL(inval)
  DO i = 0, 10
     IF (inval-i == 0) then
                         error_flag = 1
                         return
     END IF

     x = x / REAL(inval-i)
  END DO
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何停止子程序并升起标志? 的相关文章

  • Fortran 输出为两行而不是一行

    我正在运行一个 fortran 90 程序 该程序有一个 i 1 到 40 的 alpha 值数组 我尝试使用以下代码将数组输出为 5 行 每行 8 行 write 4 alpha write 4 alpha 1 alpha 2 alpha
  • Fortran 小数和千位分隔符

    有没有办法更改逗号的句点小数分隔符 另外 如何使输出数字具有千位分隔符 这可以是逗号 句号 空格 打开文件时使用参数 DECIMAL COMMA open 100 file logfile status unknown DECIMAL CO
  • 为什么 OpenMP SIMD 指令会降低性能?

    我正在学习如何在 OpenMP Fortran 中使用 SIMD 指令 我 写了简单的代码 program loop implicit none integer i j real 8 x x 0 0 do i 1 10000 do j 1
  • 函数声明“sub function($$)”是什么意思?

    我使用 Perl 一段时间了 但今天我遇到了这段代码 sub function1 snip 这在 Perl 中意味着什么 它是一个带有原型 http perldoc perl org perlsub html Prototypes这需要两个
  • fortran 中的多重定义链接错误(ifort - gfortran)

    嗯 我有这个问题 描述很长 但我认为很容易解决 我有三个文件 nrtype f90 它有一些愚蠢的定义 但它被以下文件使用 module nrtype integer parameter I4B SELECTED INT KIND 9 in
  • C++ 和 Fortran 混合链接问题

    我在网上做了一些搜索 但我找不到如何从 Linux 编译简单的 C 和 Fortran 代码 我需要让它变得复杂 但我只需要知道如何从一个简单的例子开始 我的C 代码是这样的 include
  • 在 fortran 中生成序列数组

    Fortran中是否有一个内在函数可以生成一个包含从a到b的数字序列的数组 类似于python的range gt gt gt range 1 5 1 2 3 4 gt gt gt range 6 10 6 7 8 9 不 没有 但是 您可以
  • fortran 77 到 fortran 90 的转换器软件 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有 fortran 77 编码 但我想转换为 fortran 90 在哪里可以下载转换器软件 这是我帮
  • C++/Fortran 中贝塞尔函数的集成 [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 如何在 Fortran 或 和 C 中对包含贝塞尔函数的方程进行从 0 到 无穷大 的数值积分 我在matlab中做了 但对于较大的输入和特
  • 在 Fortran 90 中,是否必须事先声明数组维度?

    是否有必要在任何其他代码之前声明数组维度 例如 我编写了以下简化的示例代码 PROGRAM mytest IMPLICIT NONE INTEGER i j k mysum Let array c be a k by k 2 array D
  • 忽略 doxygen 注释块中的行

    是否可以在 doxygen 注释块中包含将被 doxygen 忽略的内容 换句话说 我们可以在 doxygen 评论块中发表评论吗 背景 我们正在将 Fortran 项目的代码内注释转换为 doxygen 可解析的格式 但是该项目要求代码内
  • 提高由整数商定义的变量的精度

    假设我有以下程序 program derp implicit none integer parameter ikind selected real kind 18 real kind ikind a 2 0 3 0 print a end
  • 链接到遗留库:-lgfortranbegin from a premade makefile

    我在尝试编译由一些研究人员开发的程序时遇到了一些麻烦 该程序应该以非常精确的方式计算傅立叶变换和其他一些有用的操作科学论文在这里 https www researchgate net profile Gerard Gomez2 public
  • Fortran:向文件添加列(即跳过不同数量的水平空格)

    我是 Fortran f90 的初学者 一些看似简单的问题结果却导致严重头痛 感谢您帮助我解决这个问题 我的代码运行一个循环 处理数据并将它们写入文件 我希望将这些数据写入同一文件的列中 直到循环完成 OPEN unit 11 file f
  • 可变格式

    我编写了一个程序来计算平方有限差分矩阵 您可以在其中输入行数 等于列数 gt 这存储在变量矩阵中 该程序运行良好 program fin diff matrix implicit none integer dimension allocat
  • Fortran 函数:指针作为实际参数,目标作为形式

    我正在尝试破译 Fortran 代码 它将指向函数的指针作为实际参数传递 而形式参数则是目标 它在主程序中定义并分配一个 globalDATA 类型的指针 然后调用一个传递该指针的函数 module dataGLOBAL type glob
  • 如何在 Fortran 90 中迭代包含数字、单词和空格的字符串?

    文件说明 STL文件由以下部分组成 solid
  • 指定 gfortran 应该在其中查找模块的目录

    我目前基于模块来编译程序 例如主程序foo这取决于模块bar 如下 gfortran c bar f90 gfortran o foo exe foo f90 bar o 当foo f90 and bar f90位于同一目录中 如何指定 g
  • 在一条语句中对多个变量进行相同的赋值

    有没有一种方法可以为不同的变量分配相同的值 而无需在单个语句中构造数组 例如 如果我有变量a b c d and e 我可以分配类似的东西吗 a b c d e 10 0 我知道我可以用一行来做 a 10 0 b 10 0 c 10 0 d
  • 尝试读取名单后返回的状态不是预期的

    我想从文件中读取名单 但在名单不存在的情况下实现捕获选项 从我读到的here http msg ucsf edu local programs IBM Compilers Fortran html pgs lr76 htm我期望状态为 84

随机推荐

  • 带有简单 Web 包装器的 python tkinter

    我正在编写一个带有 UI 的简单 python 程序 但我不知道如何将网页放入程序中 我尝试在 Google 上搜索 但找不到任何简单的实现 任何链接都会很棒 回顾一下 我只想要一个简单的 GUI python 程序 其中嵌入了一个网页 基
  • 用户单击 ajax 调用后,打开新选项卡而不使用弹出窗口阻止程序

    我有一个页面 使用户能够通过 HTML5 画布执行图像操作 在该页面上 有一个 facebook 共享按钮 用于在 facebook 上共享画布的生成图像 单击链接时 将向服务器 ASP NET MVC 发送一个ajax请求以执行图像生成
  • 在 javascript 中注入 PHP 的转义字符的正确组合?

    我已经尝试了所有我知道的组合 但无法得到正确的结果 echo lt lt
  • C 中 ptrdiff_t 在哪里定义?

    哪里ptrdiff t在C中定义 它定义在stddef h 该标头定义了整数类型size t ptrdiff t and wchar t 函数宏offsetof 以及常数宏NULL
  • 使用 artisan migrate 时出现流明错误

    我是 Lumen 新手 当我尝试使用时 php artisan migrate 我收到以下错误 PDOException SQLSTATE HY000 2002 No such file or directory 如果我将 localhos
  • 如何在C++中计算文件的行数?

    如何使用标准类来计算行数 fstream and ifstream 这个怎么样 std ifstream inFile file std count std istreambuf iterator
  • 续集查询的可选参数

    早上好 我对 NodeJS sequelize 世界相当陌生 目前在尝试在屏幕上显示仪表板时遇到问题 该仪表板具有三个过滤器 两个日期 期间 客户姓名和员工姓名 用户可以选择无 一个 两个或所有过滤器 我的数据库需要相应地工作 话虽这么说
  • 在 CSS 中创建具有可滚动内容的可变高度“固定”标题

    我想在页面上创建一个标题 当您滚动页面时该标题不会移动 这看起来很简单 只需将 position fixed 添加到样式中 但内容就会出现在标题下方 因为标题 从流中删除 所以我认为的解决方案是在内容中添加 margin top heigh
  • 在Python中取消引用列表内的列表

    当我以 通用 方式定义列表时 gt gt gt a 3 gt gt gt a 然后尝试仅附加到外部列表的第二个元素 gt gt gt a 1 append 0 1 gt gt gt a 0 1 0 1 0 1 如上所示 它附加到外部列表的所
  • 鼠标移开时保持子菜单打开

    我正在开发的导航菜单具有默认的 CSS 行为 对于那些禁用 JavaScript 的极少数人 默认情况下 不显示子菜单 main navigation ul ul display none 将鼠标悬停时 会显示子菜单 main naviga
  • 如何在 UITests 中访问“tableViewCell”中的“detailTextLabel”?

    我想检查是否有tableViewCell detailTextLabel在我的 UITest 中使用给定的字符串 问题是当我搜索时app tables cells children matching staticText 它只会寻找那些标签
  • 函数 nil.id/0 未定义或私有 - Elixir

    我正在尝试使用监护人身份验证来测试用户 ID 是否等于资源 ID 如果没有当前令牌 并且我尝试访问正在检查令牌的网址 则会收到此错误function nil id 0 is undefined or private 我来自红宝石背景 我不知
  • 语法高亮在 Jekyll 的 MD 文件中不起作用?

    使用 kramdown 解析器和 rouge gem 时 语法荧光笔似乎无法在 Jekyll 中工作 引号也不会突出显示和格式化 标记文件 javascript function order words var array words sp
  • 检查变量类型以进行代码分析

    在 Roslyn 代码分析器中检查变量类型的正确方法是什么 我正在注册一个ObjectCreationExpressionSyntax节点和我可以获取类型 但我不确定检查它是否是我关心的类型的正确方法 我找到了一种通过检查显示字符串来做到这
  • 在“onEnter”挂钩中获取状态名称

    我正在构建一个应用程序 我想在用户进入和离开路线时切换服务中的属性 为此 我需要知道该州的名称onEnter and onExit钩子 这对于onExit钩子 因为我可以注入 state服务并读取当前状态的名称 但由于当前状态尚未设置 当o
  • 从 Google Drive 导出 docx 并转换为 base64

    我正在尝试从 Google 云端硬盘导出 DOCX 文件 gapi client drive files export fileId id alt media mimeType mimeType then response gt var f
  • 在 iOS 7 中预加载数据库

    过去 我发布了带有预加载数据库的应用程序 因此用户无需在第一次运行时更新它 我在另一个问题中找到了一些代码 抱歉 不再有链接 我将其添加到我的应用程序代理中persistentStoreCoordinator method NSPersis
  • Hive 查询:匹配字符串数组中的列值以制作标志

    我有一些记录 其中每一行都属于某些类别 数据类型 字符串数组 和一个单独的唯一类别列表 数据类型 字符串 我需要将每一行与唯一的列表相匹配并为其创建标志 Input ID Category 1 Physics Math 2 Math 3 M
  • printf 通过给定的指针和格式字符串。浮动问题

    由于我想跟踪一些变量以便查看它们如何变化 因此我想创建一个函数 该函数根据变量的类型和指向值的指针接收格式字符串 我希望 在格式字符串的帮助下 printf 能够正确确定该值 实际上它是有效的 但有一个例外 浮点值无法正确打印 这是我的代码
  • 如何停止子程序并升起标志?

    I am writing a program in Fortran 95 to be compiled with with gfortran containing a subroutine that performs a certain c