问题标签 [nag-fortran]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
183 浏览

fortran - 带有 nagfor 的 Mex Fortran,仅调用函数

我正在尝试一些不受支持的东西。我想使用 NAG Fortran 编译器(版本 5.3.1)来混合 Fortran 文件。

使用命令:

我能够编译和链接timestwo.FFortran 示例的改编版本。

我使用了下面非常简单的代码,效果很好。

请注意,这mexEvalString是一个函数。

如果我现在改变

进入

编译仍然有效。然而,Matlab 在没有给出任何说明的情况下崩溃了。

我看到的两个语句之间的唯一区别是一个包含子例程而不是函数。

出了什么问题,我该如何解决?

0 投票
1 回答
191 浏览

matlab - 函数返回具有相同参数的不同答案

我正在从 MATLAB 过渡到 Fortran,并遇到了 MATLAB 从未预料到的各种奇怪行为。这是让我感到困惑的一个:

我有这个相当简单的程序,我试图在其中找到标准 N(0,1) 变量(应该是 0.5)的 x=0 处的 pdf。g01eaf()是为我执行此操作的 NAG 库函数。我正在使用 gfortran 进行编译。

保持程序的其余部分不变,具体取决于我在 中编写参数的方式g01eaf(),我会得到不同的答案:

现在,在 MATLAB 下,无论哪种方式,我都会得到相同(正确)的答案:y = 0.500000。然而,在 Fortran 下,我得到:

我对 (b) 中的答案一无所知,也不知道 (c) 是什么意思。

0 投票
1 回答
124 浏览

pointers - Procedure pointer returned from a function with nagfor

I try to use procedure pointers as a return of a function in Fortran. The following minimal code works with gfortran (tested with 4.8.1) but not with nagfor (NAG 6.0):

nagfor complains with:

Why is this?

Note: I'm very well aware of the danger for memory leaks when using procedure pointers in this way.

0 投票
1 回答
231 浏览

compilation - 如何使用 nagfor 列出预定义的预处理器变量

我想获得使用 nagfor Fortran 编译器时预定义的预处理器变量的列表。gfortran 的等价物是

但与

我明白了

我查看了nagfor 文档fpp 文档,但找不到答案。

我正在寻找的是一些变量来确定文件是用 nagfor 编译的,因此相当于 gfortran __GFORTRAN__、 ifort__INTEL_COMPILER和 pgf90 __PGI

0 投票
1 回答
343 浏览

compilation - nagfor 预处理器的用户定义错误

如果使用了不受支持的 fortran 编译器,我将尝试中止编译。nagfor 预处理器定义了宏NAGFOR,所以我编写了以下测试程序:

当我使用 gfortran 或 ifort 编译时,我收到了预期的错误消息

但 nagfor 给出了不同的错误

我在 nagfor fpp 文档中找不到有关如何创建错误的任何提及,因此可能#error不存在。在这种情况下,是否有替代方法来获得相同的效果?

0 投票
1 回答
505 浏览

linux - 使用 -lnag 链接到 NAG 库

我正在尝试编译我的第一个使用 NAG 库的程序,如下所示:

这是从教程中复制的,他们建议使用以下语句编译它:

他们认为这-lnag会将链接器驱动到 NAG 库,但后来我发现了这个错误:

我尝试更改 NAG 文件的目录以帮助链接器找到它。

我如何让它编译和链接?

0 投票
1 回答
238 浏览

fortran - Fortran 中元素子例程的并发症

问题

将子例程标记为 时是否有任何并发​​症elemental这个页面似乎暗示了这一点,但没有详细说明它们可能是什么。

注意:我标记了多个 fortran 版本,因为我想知道在开发可移植代码时是否应该注意这些差异。

例子

假设我想编写一个基本子程序来在笛卡尔坐标和极坐标之间进行转换。这可以按如下方式完成:

因为它是基本的,所以可以在以下上下文中调用它:

我猜这个简单的过程不会有副作用,但我提供了一个例子来使讨论具体化,并提供一个可以扩展以说明可能的副作用的 MWE。

0 投票
1 回答
154 浏览

fortran - 使用 NAG fortran 6.2 “未初始化的值是由堆栈分配创建的”

我在使用最新版本的 NAG Fortran Compiler Release 6.2(Chiyoda) Build 6214 时遇到了一个非常奇怪的行为。使用 ifort 或 gfortran 时一切正常,甚至使用 NAG Fortran Compiler Release 6.1(Tozai) Build 6136。以下代码重现了我得到的错误:

基本上,问题似乎出在bug过程中的局部变量上proc2。使用 Valgrind 时,我收到以下错误报告:

在理解这种行为方面有什么建议吗?或者也许我做错了什么......

0 投票
1 回答
135 浏览

fortran - 定义的赋值和内在赋值之间的冲突(使用 nagfor)?

内在多态赋值是一些 Fortran 编译器(例如 ifort 18、nagfor 6.2)的最新功能,在旧版本(例如 ifort 17、gfortran 6.3)中不可用。与这些旧版本一起使用的众所周知的解决方案是使用如下示例中定义的分配(取自 Chivers 和 Sleightholme 的书并改编自):

此示例可与 ifort 15.0.3 和 gfortran 6.3.0 一起编译并运行良好。但是对于 nagfor 6.2,我在编译期间收到以下错误(对于 line mycirc2=mycirc1):

我不清楚为什么这个编译器试图在指令中使用定义的赋值,mycirc2 = mycirc1而这两个变量不是可分配的多态变量。

当然,如果我删除定义的赋值,它适用于 nagfor 但不适用于其他旧编译器。知道这个错误来自哪里以及如何解决它吗?

0 投票
2 回答
711 浏览

fortran - 如何处理 Fortran Namelist 中的可选组

我正在使用最初用 Fortran 77 编写的代码,该代码使用名称列表(在编写时由编译器扩展支持 - 此功能仅在 Fortran 90 中成为标准)来读取输入文件。namelist 输入文件在(多个)纯文本页眉和页脚之间有一组 namelist 变量(请参阅 参考资料example.nml)。只有在满足先前读取的变量的某些条件时,才会读取某些列表变量组。

当按顺序读取文件中的所有名称列表组时,使用 gfortran、ifort 和 nagfor 编译的可执行文件的行为都相同并给出预期的输出。但是,当要跳过输入文件中的给定名称列表组(可选读取)时,gfortran 和 ifort 可执行文件会根据需要处理此问题,而使用 nagfor 编译的可执行文件会引发运行时错误:

运行时错误:reader.f90,第 27 行:预期的 NAMELIST 组 /GRP3/ 但发现 /GRP2/ 程序因单元 15 上的 I/O 错误而终止(文件 =“example.nml”,格式化,顺序)

作为重现该问题的最小工作示例,请考虑下面给出的 namelist 文件example.nml和驱动程序reader.f90,其中NUM2from namelist groupGRP2仅应在NUM1from namelist group GRP1equals时读取1

例子.nml:

阅读器.f90:

在以下情况下,所有可执行文件都会给出预期的输出NUM1=1

但是,当 eg 时NUM1=0,使用 gfortran 和 ifort 编译的可执行文件会给出所需的输出:

而使用 nagfor 编译的可执行文件(以严格符合标准而闻名)读取标题和第一个名单组:

但随后以前面提到的运行时错误终止。

如错误消息所示,example.nml按顺序访问,如果是这种情况,/GRP2/ 是下一条要读取的记录,而不是程序逻辑要求的 /GRP3/,因此错误消息对我来说很有意义。

所以我的问题是:

  1. 显示的行为是否可以归因于 nagfor 而不是 gfortran 和 ifort 强制执行的标准(非)一致性?
  2. 如果是这样,这是否意味着使用 gfortran 和 ifort 观察到的非顺序读取是由于这些编译器支持的扩展(而不是 nagfor)?可以使用编译器标志打开/关闭它吗?
  3. 我能想到的最简单的解决方法(对大型现有程序的最小更改)是read(15,*)else分支中ifreader.f90. 这似乎适用于所有提到的编译器。这会使代码标准符合(Fortran 90 或更高版本)吗?

这些是用于编译可执行文件的编译器版本和选项:

  • GNU Fortran (Ubuntu 9.1.0-2ubuntu2~18.04) 9.1.0: gfortran -Wall -Wextra -fcheck=all -g -Og -fbacktrace reader.f90
  • 英特尔(R) Visual Fortran,版本 16.0 内部版本 20160415: ifort -Od -debug:all -check:all -traceback reader.f90
  • NAG Fortran 编译器版本 6.1(Tozai) Build 6116: nagfor -O0 -g -C reader.f90