问题标签 [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 回答
709 浏览

module - Fortran 模块中的格式语句

我有一个带有许多子例程的模块,这些子例程都使用相同的输出格式集。现在,我必须在每个子程序中声明格式。有没有办法在模块中声明它们以便所有子例程都可以访问它们?

0 投票
2 回答
174 浏览

parallel-processing - 关于 Fortran 中 OpenMP 指令的字符变量参数的问题

我目前正在尝试使用 OpenMP 并行化一些用 Fortran 编写的多网格代码,我发现 OpenMP 调度子句会对性能产生巨大影响。回想一下,OpenMP 调度子句是静态的、动态的、运行时的和引导的,它们确定循环中的工作如何在线程之间分配。例如,带有调度子句的 OpenMP 并行化 SAXPY 循环如下所示:

现在假设我们在一段代码中有许多并行循环,并且无法先验地确定这些调度子句中的哪一个将使程序运行得最快。手动更改每个调度条款会很痛苦,所以这就是我认为我会做的事情:

然后我可以简单地将字符变量“sched”放在每个并行循环中,并一次更改它们,例如,放置 sched="Static",然后进行运行时测试,看看哪个运行得最快!当然,它不起作用——至少不适用于 gfortran 或 Absoft 编译器。所以我的问题是以下任何一个或所有问题:为什么这不起作用?,我怎样才能让它工作?,或者我怎样才能避免使用这个结构来解决这个问题?任何帮助是极大的赞赏。

0 投票
2 回答
1566 浏览

fortran - Fortran:将相同的数组作为两个虚拟参数传递给子程序

假设我有一个接受两个数组作为输入的子程序。一个被赋予intent(in),另一个被赋予intent(out)。后者以任意方式从前者派生而来。但是,如果我为两个虚拟参数传递相同的实际参数怎么办?通常,结果不会是子例程的预期结果。请参阅下面的代码片段。

问题是,编译器似乎并不关心,即使我已经给出了意图标志。我正在使用带有所有诊断功能的 Intel Visual Fortran Composer 12。有没有更好的编码子例程的方法,或者我缺少的一些编译器选项,以使代码更安全?

0 投票
1 回答
4424 浏览

linker - 链接 FORTRAN 和 C++ 对象文件

我将从 FORTRAN 调用一个 C++ 函数,为此我使用 ISO_C_Binding 模块。使用命令压缩 FORTRAN 主文件和 C++ 函数后

这将创建对象文件,但在一些成员建议的链接阶段,我将使用命令

即使用 C++ 编译器链接到 FORTRAN 库,但它给出了类似的错误

所以我认为主要问题是g++链接器无法与 FORTRAN 库链接,所以我可能需要在链接选项中包含一些路径,或者我可能需要在g++编译器中进行一些设置,我不知道如何做到这一点,所以请帮助解决这个问题。

0 投票
1 回答
1057 浏览

interface - 使 Fortran 中的其他函数/模块可以访问外部函数

我是 Fortan 的新手,并且有一个关于使用 make 回调函数可用于整个 fortran 代码的问题。

我正在编写一个从 C# 访问 Fortran DLL 的接口。

因为 Fortran 代码需要使用 C# 代码的某些功能,所以将两个委托传递给 Fortran 代码(vdiCwertCllbak、vdiIwertCllbak)。

这在 MainFunction 中使用时效果很好,因此接口工作到目前为止。

现在需要的是,c#-functions 必须可以从 MainFunction 之外的其他函数甚至在不同的模块中使用。

我尝试使用函数指针来处理这个问题,但是在调用 m_vdiTestFuncCllBak 时总是出现以下错误。调用 vdiTestFuncCllBak 没有问题。

在函数或外部模块中初始化指针时,行为相同。

调用以下 c# 代码:

问题是,使用函数指针时没有设置 inputValue 和 retValue 的引用。

是否有人以前遇到过同样的问题并且知道可能的解决方案或有帮助链接?我在搜索中没有找到有关这方面的信息。

我正在使用 Intel 11 编译器。

非常感谢您的帮助。

0 投票
2 回答
6538 浏览

fortran - 在 fortran 中获取免费单元号

我需要开发一个可以打开文件并解析内容的库。单元号,由于fortran IO风格,必须由我决定,但我不知道客户端代码中还有哪些单元是开放的。有没有像这样的标准功能give_me_any_unit_number_that_is_free()

0 投票
3 回答
400 浏览

fortran - fortran 模块——查找定义/分配变量的位置

我正在尝试提取大型 fortran 的一部分以使其成为自己的程序。一个特定的子程序会导入许多模块(此处仅显示两个作为示例):

...从这些模块导入的部分中引入了很多变量。有没有好的方法(或好的工具)来找出哪些变量来自哪个模块等等?或者我必须查看每个模块以查看每个模块的定义位置,然后分配(可能发生在不同的模块中......)?

0 投票
1 回答
1311 浏览

linux - 在linux上的pgf90编译器上第二次调用子程序时出现分段错误

我不能在 Linux 环境下使用 pgf90 fortran 编译器两次调用同一个子程序。第一次调用子程序是可以的,但第二次调用它,它给出了分段错误。有人可以提出一些建议,我的代码有什么问题,举个简单的例子

PS 与 gfortran 没关系,即使我在 intel visual fortran 上尝试过,也没关系


0 投票
2 回答
6870 浏览

loops - Fortran forall 限制

我试图用它forall来分配动态数组,但 gfortran 不喜欢这样。我还发现write语句在块中是被禁止的forall,我怀疑read语句也是。

块中不允许有哪些其他功能/操作forall

do除了有时在顺序无关紧要时替换循环之外,这个构造究竟是什么?我认为它会使编码更加清晰和优雅,尤其是在操作顺序不重要时显示出来,但是对于可以在forall.

这些限制的原因是什么,即它们保护/防止用户搞砸什么?使用它是个好主意forall吗?如果是这样,出于什么目的?

现在在我正在处理的代码中只有一个forall块,如果我在do循环中将它全部翻译出来,它将产生四个嵌套循环。哪种方式更好?

0 投票
2 回答
1710 浏览

error-handling - 纯 Fortran 过程中的 I/O

我正在尝试将错误检查合并到我正在编写的纯程序中。我想要类似的东西:

但是,纯函数不允许对外部文件有 IO 语句,所以我尝试将单元号传递给函数,例如output_unit = 6,这是默认输出。gfortran 仍然认为这是非法的。有没有解决的办法?是否可以使函数成为派生类型(而不是real此处的固有类型),当出现错误时输出字符串?