问题标签 [fortran77]

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 投票
4 回答
32907 浏览

file-io - 在 Fortran 中打开二进制文件:状态、表单、访问

我已经使用 Fortran 多年了,但文件 I/O 对我来说仍然很模糊。我对status, form, access,的理解recl是有限的,因为我只需要研究生院的某些用例。
我知道 Fortran 二进制文件在文件顶部有描述文件大小的额外信息。但这对我来说从来都不是问题,因为我只需要在 Fortran 代码中处理 Fortran 文件,其中额外的信息是必要的,但不可见。

但是如何在 Fortran 中打开一个平面的二进制文件?

过去,我可能会通过执行以下操作使用 Fortran 打开 Fortran 二进制文件:

但是对于没有 Fortran 标头信息的平面二进制文件,这将如何改变呢?更重要的是,哪里是更详细地描述这些术语的好链接:status, form, access, recl?

0 投票
1 回答
951 浏览

python - FORTRAN77 函数返回一个数组

很抱歉问了这么基本的问题。我正在研究一些 FOTRAN77 代码并尝试从 Python 调用它。但是,我发现从函数返回两个或多个值时存在一些问题。

下面是代码。它有四个输入(APPRAT、APPNUM、APSPAC、KOC),我想返回三个参数值(APPTOT、KD、TDEGF),它们存储在 GENEEC3 中。我的编译代码在只返回一个参数时运行良好,但当我请求它返回三个参数时不起作用。

所以请给我一些建议,谢谢大家的帮助!

0 投票
0 回答
258 浏览

c - 将指向指针变量的指针从 Fortran 77 传递到 C

我必须编写一些将 Fortran 77 与 C 混合的代码。假设我有一个带有签名的 C 函数

因此,如果我在 C 中调用foo,我可能会有

现在假设我在 Fortran 77 中有这个:

如果我将x传递给foo,那将相当于在 C 代码中将 "&x" 传递给foo,但这不起作用。我是否需要创建x的 Cray 指针,然后将 Cray 指针传递给foo?那行得通吗?没有 Cray 指针有没有办法做到这一点?谢谢!

0 投票
2 回答
635 浏览

fortran - 算术常数表达式中的求幂

事实证明,以下内容在 fortran 77 中是非法的:

原因是参数语句采用常量算术表达式,除指数为整数时,取幂是非法的。(第 6.1.3 和 8.6 节http://www.fortran.com/F77_std/rjcnf0001-sh-8.html#sh-8.6)。有人知道在标准的新修订版中是否放宽了此限制?为什么这首先是非法的?

0 投票
1 回答
2038 浏览

c - Fortran 77 如何分配公共块变量?

我正在用 C 语言开发一个可以与 C、C++ 或 Fortran 代码一起使用的库。它使用的一种机制是捕获对堆栈、堆或数据/bss 段中页面的写入。在这种情况下,“堆”是库从映射文件中创建的特殊堆。我发现我的库未能捕获对 Fortran 应用程序中变量的写入。变量声明为

其中 I、J 和 K 是整数参数(即常量)。然后代码将 u 包含在一个称为“字段”的公共块中。

在GDB下调试的时候发现u的地址没有落入三个数据段中的任何一个的范围内。(因此库未能捕获写入!)然后我查看了 /proc//maps 伪文件,发现 u 的地址落入系统注释为“堆”的范围内。但是你是怎么进入这个“堆”的?在这种情况下,Fortran 77 代码不使用非标准的“allocate”关键字在堆上分配。谁能向我解释一下 Fortran 77(在 Ubuntu Linux x86-64 下)在“堆”上分配了哪些变量,以及如何首先创建这个“堆”?

0 投票
1 回答
131 浏览

linux - 为初学者编译用户编写的源代码文件?

大家.. 我不是一个完全的 linux 菜鸟,我使用的是 Fedora 16,但我一直在从命令行编译程序时遇到困难,我真的很想学习如何以正确的方式去做。我有使用 Python、Ruby、Perl、PHP、Lua、bash 和其他语言的经验,最近我开始接触 Fortran 代码,问题是:每次我运行带有选项和文件名的 f77 命令时,我都会得到一个以下错误: [code] [Eddie_Nygma@localhost ~]$ f77 -S #classicpayroll.f# f77: no input files

[Eddie_Nygma@localhost ~]$ f77 -o #classicpayroll.f# f77: `-o' 参数丢失是某种语法错误,或者我该如何纠正?

0 投票
1 回答
238 浏览

segmentation-fault - dlatrs 子程序在调用子程序时释放计数器

我一直在尝试调试使我的模拟软件崩溃的段错误/sigabort。我已经能够将此跟踪到某个 LAPACK 子例程,更改(或实际上解除分配,我认为)子例程中的一个网格计数器,该子例程(通过一些其他子例程)调用此 LAPACK 子例程。这是我跟踪此错误的 gdb 调试会话:

和回溯:

我已经能够使用带有 gfortran 4.6.1 的 Ubuntu 11.10、带有 gfortran 4.6.3 的 Ubuntu 12.04、带有 gfortran 4.3.4 的 Scientific Linux 5.6 和带有 gfortran 4.5.0-1 的 Microsoft Windows 进行复制。当我在 Linux 机器上使用英特尔编译器时,我无法重现此错误,但我无法在 Windows 上使用 ifort,因为我使用的是学术许可证。但我需要用 gfortran 解决这个问题,因为我需要为一些学生准备一个 Windows 版本。我将编译器标志 -funroll-all-loops -fno-f2c -O3 用于发布版本,将标志 -fno-f2c -O0 -g3 用于调试版本。这两种选择都会产生这些问题。

此外,此错误仅在使用大型阵列时才可重现。我正在使用最大大小的数组(500,Ns)和大小的工作数组(Ns,Ns,500)。模拟不崩溃使用 Ns = 53,当它崩溃时 Ns = 153,但 Ns 的声明大小为 200。

最后我会展示崩溃的代码:solver.f, subroutine trifactorize:

dlatrs.f:

我一直想知道我是否使用了错误的编译器标志,或者我是否偶然发现了一个罕见的 gfortran 错误。希望有人知道如何解决这个问题。

0 投票
1 回答
405 浏览

file - 使用 Fortran77,如何在 FOR90 中做与 OPEN(POSITION="APPEND") 相同的事情

使用 Fortran77 并且我想打开一个文件,然后它将转到不会覆盖我的文件的文件末尾。

与 FORTRAN90/95 中的 OPEN(**,ACCESS="SEQUENTIAL",POSITION="APPEND") 相同

0 投票
1 回答
3850 浏览

performance - 二进制搜索效率与 fortran 中的线性搜索效率

这个问题是关于线性搜索的效率与对连续存储中预排序数组的二进制搜索的效率...

我有一个用 fortran (77!) 编写的应用程序。我的部分代码的一个常见操作是在数组中查找索引,使得gx(i) <= xin < gx(i+1). 我目前已将其实现为binary search- 对语句标签感到抱歉,并且goto- 我已经评论了使用 fortran 90 的等效语句......

但是,今天,我在 Wikipedia 上阅读有关二分搜索的内容时遇到了这个问题:

我不完全理解这个说法——我的印象是缓存提取是一次以大(ish)块收集的,所以如果我们从数组的开头开始,我认为大部分数组都会在缓存中已经(至少与线性搜索一样多),所以我认为这并不重要。

所以我的问题是,有什么方法可以判断哪种算法性能更好(线性搜索还是二进制搜索?)是否存在数组大小边界?我目前正在使用大小约为 100 个元素的数组...

0 投票
2 回答
27615 浏览

fortran - gfortran 如何判断我是在编译 f90 还是 f95 代码?

我了解 gfortran 可以编译 f90 或 f95 吗?它怎么知道它正在编译哪一个?它也可以编译f77代码吗?ubuntu 已经有 fortran 编译器还是我需要下载 gfortran?