问题标签 [intel-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 投票
3 回答
5316 浏览

c - 对主 fortran 程序的未定义引用

我正在编写一个用于对三个循环内核进行基准测试的 fortran 代码:

我在 C 源文件中编写的虚拟函数如下

dummy.h 只包含函数原型。

我制作了一个 dummy.o 目标文件,并尝试使用英特尔 ifort 编译器将其与我的 fortran 源代码链接。不幸的是,我在函数MAIN__':bench.f90:(.text+0x8ca): undefined reference todummy_ 中遇到错误

每次调用虚拟函数时。有什么建议吗?提前致谢。

0 投票
2 回答
1422 浏览

c - Makefile 与 Fortran 和 C 的混淆

这是我第一次制作make文件。我有点困惑,因为我的 Fortran 代码使用了 C 源文件中定义的一些函数。这是我到目前为止所写的:

我在正确的轨道上吗?

0 投票
2 回答
5444 浏览

module - 如何在不复制源代码或创建库的情况下重用 Fortran 模块

在不构建库或复制源代码的情况下,我无法理解是否/如何在多个 Fortran 项目之间共享代码。

我在 Linux 系统上将 Eclipse/Photran 与英特尔编译器 (ifort) 一起使用,但我相信与特定工具相比,模块的概念问题更大。

这是一个简单的示例:在 ~/workspace/cow 我有一个源目录 (src),其中包含 cow.f90(程序)和两个模块 m_graze 和 m_moo,分别位于 m_graze.f90 和 m_moo.f90 中。该项目正确构建和链接以创建可执行的“cow”。可执行文件和模块(m_graze.mod 和 m_moo.mod)存储在 ~/workspace/cow/Debug 和目标文件存储在 ~/workspace/cow/Debug/src

之后,我创建了 ~/workplace/sheep,并将 src/sheep.f90 作为程序,将 src/m_baa.f90 作为模块 m_baa。我想在sheep.f90 中“仅使用m_graze:反刍”来访问rumate() 子例程。我可以只复制 m_graze.f90 但这可能导致代码不同步并且没有考虑 m_graze 可能具有的任何依赖项。由于这些原因,我宁愿将 m_graze 留在牛项目中,并针对它编译和链接sheep.f90。

如果我尝试编译绵羊项目,我会收到如下错误:

在属性:羊的项目参考下,我可以选择牛项目。在 Properties:Fortran Build:Settings:Intel Compiler:Preprocessor 下,我可以将 ~/workspace/cow/Debug(模块文件的位置)添加到包含目录列表中,因此编译器现在可以找到 cow 模块并编译sheep.f90。但是,链接器会因以下内容而死:

这通常可以通过将库和库路径添加到链接器设置来解决,除非没有适当的库可以链接(这是 Fortran,而不是 C。)

cow 项目完全有能力将 cow.f90、m_graze.f90 和 m_moo.f90 编译并链接到一个可执行文件中。然而,虽然sheep 项目可以编译sheep.f90 和m_baa.f90 并且可以找到模块m_graze.mod,但它似乎无法找到m_graze 的符号,即使系统上存在所有必要的信息以便它这样做.

让 ifort 的链接器部分找到丢失的部分并将它们放在一起似乎是一个简单的配置问题,但我不知道需要在 Photran UI 的哪个位置输入什么魔法词才能实现这一点。

我承认对 C 和 C 构建过程完全缺乏兴趣和能力,我宁愿避免创建库(.a 或 .so)的转移,除非这是完成这项工作的唯一方法。

最终,我正在寻找一个纯 Fortran 解决方案来解决这个问题,这样我就可以保留一份源代码副本,而不必手动维护一堆自定义 Makefile。

那么这可以做到吗?

如果这已经记录在某处,我们深表歉意;Google 只向我展示了简单的构建示例、如何创建模块以及如何与现有库链接。似乎没有(m)任何不涉及复制源代码的模块的代码重用示例。


编辑

正如受访者指出的那样,.mod 文件是必要的,但还不够;必须在链接阶段指定目标代码(以 m_graze.o 的形式)或静态共享库。.mod 文件描述了目标代码/库的接口,但两者都是构建最终可执行文件所必需的。

对于这样一个过于简单的玩具问题,这足以回答所提出的问题。

在具有更复杂依赖项的大型项目中(在我的例子中,F90 的 80+KLOC 链接到 LAPACK95 的 MKL 版本),IDE 或工具链可能缺乏足够的自动或用户界面设施来共享单个规范的源文件集一个可行的策略。选择似乎是在冒着重复源文件不同步的风险、放弃 IDE 的许多好处(即避免手动创建 make/CMake/SCons 文件)之间,或者很可能两者兼而有之。虽然修订控制系统和良好的代码组织可以提供帮助,但很明显,鉴于 Eclipse 的当前状态,在项目之间共享单个规范的源文件集绝非易事。

0 投票
1 回答
290 浏览

fortran - why move_alloc is not working in gfortran (4.6.3), but it is in ifort?

I've read here that move_alloc works since gfortran 4.2. I'm with gfortran 4.6 installed in my ubuntu 12.04 but move_alloc is not working! The move_alloc is used five times inside a loop that runs 10 times. After compiled (without any error or warning) with gfrotran, the program runs only one step (some prints to verify any mistake) of the loop and shows "segmentation fault(kernel image recorded)'. However, when ifort is used, the program runs and works correctly. I also have tried to use gfortran 4.4.6 in CentOS. Both computers are x86_64.

Other important information: this piece of the code is in a subroutine, inside a module, once I don't know previously the size of the vector that are allocated by move_alloc. All these vector are with the attribute intent (out) in the subroutine. xray_all, yray_all and elem_all are double precision and the other are integer. The main and the module are in different files. Here is the piece of the code where I use move_alloc:

#xA;
0 投票
1 回答
1202 浏览

fortran - 缺少 FFTW 库

我正在尝试编译用 fortran90/95 编写的代码,但出现此错误:

这是生成文件:

当我在 Makefile 中包含所需的库时,我收到以下消息:

我正在使用 ifort 编译器,并且在使用 MPI 的超级计算机环境中。请问,有什么线索吗?干杯。

0 投票
2 回答
899 浏览

compiler-construction - FORTRAN 中从“真实”到“双精度”的转换是否会受到编译器的影响?

我有一个需要在服务器上运行的 FORTRAN 代码。我注意到两台机器的结果略有不同。研究它,我了解到差异来自将real值返回给double precision变量的函数。在本地机器上我使用旧编译器(gnu f95 4.1.2),在远程机器上我使用 ifort。

0 投票
1 回答
156 浏览

c - 从 Fortran 调用的 C 函数中缺少参数

我正在使用调用 C 函数的 Fortran 90 代码。此代码经过良好测试,可使用英特尔 Fortran 编译器成功编译。我试图让它与 GNU Fortran 编译器一起工作。F90 代码调用了一个 C 函数,但它没有指定某些参数。调用如下所示:

这显然适用于 ifort,但不适用于 gfortran,后者因错误而失败

其中 1 在第一个空白参数之后的逗号处。我找不到任何关于这里发生的事情的信息。这是用于传递虚拟参数的英特尔编译器特定语法吗?如果是这样,有人可以指点我参考吗?

0 投票
2 回答
1412 浏览

fortran - 链接到外部目录中的模块

我想将几个模块放在一个文件夹中,并将程序存储在另一个文件夹中。当尝试生成我在控制台中写入的 a.out 文件时

test.f90 使用之前在modulos文件夹中编译的 grn 模块。这不运行我得到了以下

test.f90(5): error #7002: 打开编译模块文件时出错。检查包含路径。[GRN]

我究竟做错了什么?。我在 Ubuntu 中使用 intel fortran :(

好的,我将添加一些细节。我的模块是这样的:

这是通过命令 ifort -c gaussgen.f90 在我的文件夹“模数”中编译的,然后创建相应的 .mod 和 .o 文件,然后在我的文件夹“程序”中我有一个名为 test.f90

我想用这些生成可执行文件。这个想法很简单,我想将程序和模块存储在单独的文件夹中。

0 投票
1 回答
578 浏览

fortran - gfortran 和 ifort 函数返回派生类型的不同行为

我正在开发一个项目,该项目需要在 Fortran 中存储派生类型的属性的内存地址。在 gfortran 中找到的是,如果返回是派生类型,则函数返回的隐式副本。所以我存储的地址是没有意义的。有一段代码:

使用 gfortran 的输出是:

使用 ifort 的输出是:

有没有办法在 gfortran 中避免这样的复制,所以结果是一致的?我刚开始学习fortran。可能有函数的描述符或编译器的选项。

0 投票
0 回答
1714 浏览

visual-studio-2008 - fortran 数组未定义地址

我正在使用带有 intel fortran 编译器 (10.1.025) 的 Visual Studio 2008。

在我的程序中,我有一个子程序 solvemgmt()

在调试时,在断点 1 时,

在断点 2 时,

我不明白为什么 T2F、INTFR、T2FORCE、JFRES 和 T1FORCE 显示为未定义地址,然后显示为未定义指针/数组。