问题标签 [fortran95]

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 投票
1 回答
6296 浏览

python - 当前使用 Python 包装现代 Fortran 代码的最佳方法

我知道并使用f2py2e来包装一些旧的 Fortran 77 代码,但我的理解是它不适用于较新的 Fortran 95 代码。我已经研究了我应该使用什么,并且遇到了fwrapG3 f2py,它们似乎都没有对它们的当前状态或如何使用它们给出任何解释。我看到f2py的版本有使用第三代f2py的选项,但被评论为没有功能。鉴于此,我不知道我应该使用哪个项目。我应该使用哪一个?

这个问题现在已经交叉发布到(并在)计算科学堆栈交换站点作为我应该使用哪个包来用 Python 包装现代 Fortran 代码?

0 投票
3 回答
1659 浏览

fortran - 如何为 Fortran 95+ 模块库提供显式接口,并隐藏实现

我正在使用 gfortran 的 95+ 扩展。我有一个实用模块库,我想链接到其他项目,即作为库或共享对象/dll。但是,在 Fortran 中,我不明白如何在不维护模块接口的两个副本的情况下将接口与 Fortran 中的实现分开。

在 C 中,我会将接口与实现分开,例如:

有没有办法在现代 Fortran 中实现相同的效果?我是否需要向我的库中的用户提供 .mod 文件?

  • 显式接口的单一定义
  • 只有接口定义暴露给用户代码

编辑:总结(我认为是)答案:

  • 需要 .mod 文件,因为它们包含显式接口定义

  • 模块没有标准的 Fortran ABI——.mod 文件将是特定于编译器的

  • 实现隐藏问题的唯一直接类似方法是子模块,它在 Fortran 2008 中定义,gfortran 不支持。

  • 除了 @High-Performance-Mark 和 Fedora 页面指出的避免模块之外,最实用的方法是分发仅接口模块的包含文件以及用于实现的预编译 .mods。

  • 使用包含有一些众所周知且令人讨厌的问题,包括可能重新定义常见块。

我有点惊讶这里实际上没有一个简单的答案。

0 投票
1 回答
197 浏览

gfortran - 多维动态数组分配

我想对多块 CFD 代码使用动态分配,其中索引 (i,j,k) 因不同块而异。我真的不知道,如何为 n 个块分配任意数组索引并将其传递给子例程。我给出了一个示例代码,它在使用 gfortran 编译时给出错误消息“错误:(1) 处的表达式必须是标量”。

0 投票
1 回答
125 浏览

fortran90 - 要从类型定义中调用的数组值函数

在编写一个库来读取图像值时,我遇到了以下问题:我定义了一个名为realimage. 在这种类型中,引用了一个函数,该函数返回一个数组作为结果。

使用 gfortran 编译模块并使用 调用函数image1%pxvalues(x,y),我总是收到以下错误消息:

如果我直接在主程序中调用该函数(pxvaluesreal(image1,x,y)),一切正常。

是否可以在类型定义中定义数组维度以告诉编译器,函数返回值的维度是什么?

0 投票
3 回答
12494 浏览

function - Fortran 函数返回意外的类型和值

我正在做一个需要在 Fortran 中实现一些数值方法的项目。为此,我需要编写一些递归函数。这是我的代码。

对于这个程序,输出是:

如果我更改打印语句的顺序(第 30 和 31 行),输出将是:

输出应该是(对于原始打印语句顺序):

我从 Wikipedia Fortran 95 语言功能页面中获取了阶乘函数。

  • 编译器:带有 Cygwin 的 gfortran 4.5.3
  • IDE:Netbeans 7.0.1
  • 平台:Windows 7
0 投票
1 回答
1089 浏览

memory-management - Fortran 可分配数组生命周期

假设我有以下代码:

变量 var1 会被分配两次吗?(我猜是)。如果为每个调用分配它,那么在第一次调用期间分配的内存是否会变得空闲?

0 投票
1 回答
320 浏览

fortran - 如何从 fortran 指针中获取唯一值

我有一个 fortran 指针,指的是一些分配的内存。我想“散列”它,以便获得一个引用该内存的唯一编号。在 C 中,我会将指针位置转换为整数。

0 投票
1 回答
1093 浏览

pointers - 是否可以在 fortran 的类型构造函数中使用指针?

在一些 Fortran 95 代码中,我有一个带有指针字段的类型。我想声明一个type(foo)在编译时初始化的模块变量。像这样的东西:

上面的代码段无法编译。我知道我可以bar在运行时使用单独的子例程进行初始化,例如:

但是是否可以在没有初始化子程序的情况下做到这一点?或者是否可以声明一个由编译器显式调用的初始化子程序?注意:这必须在 Fortran 95 中完成。

0 投票
2 回答
2396 浏览

fortran - 使用 ifort 进行数组复制的程序崩溃

该程序Illegal instruction: 4在 MacOSX Lion 和 ifort (IFORT) 12.1.0 20111011 上崩溃

相同的程序适用于 gfortran。我看不出有什么问题。有任何想法吗 ?展开副本并在列上执行显式循环在两个编译器中都有效。

请注意,使用可分配而不是指针我没有问题。

如果语句在模块内或不在模块内,行为是相同的。我在 ifort (IFORT) 12.1.3 20120130 上确认了相同的行为。

显然,Linux 和 ifort 12.1.5 没有问题

我尝试使用以下链接选项增加堆栈大小

ifort -Wl,-stack_size,0x40000000,-stack_addr,0xf0000000 test.f90

但我仍然得到同样的错误。增加 ulimit -s 来解决同样的问题。

编辑2:我做了更多的调试,显然问题发生在数组拼接操作时

涉及可疑接近 16 M 数据的值。

我正在比较生成的操作码,但如果有一种方法可以查看更具交流性的中间代码形式,我将不胜感激。

0 投票
2 回答
2578 浏览

fortran - 将程序输入保存到模块以供“全局”使用

我用 Fortran 90 编写了一个程序,它从文本文件中读取数百个输入,并对它们执行许多不同的顺序操作。

我不想继续将这数百个值传递给每个子例程(有很多!)。有没有办法可以将从该文件中读取的数据保存到任何子程序都可以访问的全局变量中?我想我可以以某种方式将这些值保存到每个子例程都可以调用的模块中,但我不确定该怎么做。