【发布时间】:2012-12-19 02:30:48
【问题描述】:
我实际上正在使用 Fortran 进行一个科学项目,所使用的函数集分为 64 位和 32 位版本。此外,一些变量在两种不同的体系结构中为相同的功能定义了不同的属性。例如,32 位的变量是 INTEGER*4,而 64 位的变量是 INTEGER*8。
现在,我看到在 C++ 中,可以在文件开头使用 #ifndef 来检查这一点,就像在 this post 中解释的那样。 Fortran 有什么可用的吗?您会建议我哪些可能的解决方案?
请记住,该项目应在具有多种架构的 Windows 和 Linux 上运行。但仍将不胜感激任何建议!
编辑:要回复一些 cmets,假设您想使用 MKL 库的一部分 PARDISO 求解器。我们可以调用两个子例程:pardiso 和 pardiso_64。 Pardiso 需要一个变量,在手册中称为 PT(第 6 页,here),它允许 pardiso 处理数据。在 32 位版本中,它是 INTEGER*4,而在 64 位版本中,它是 INTEGER*8。基本上,我不想为两者分配内存,然后用 IF 语句选择正确的变量。
我现在想象预处理可以完成这项工作,但即使我在 Fortran 中工作,它也必须是 C 预处理器吗?例如,英特尔 Fortran 会像 gcc/gfortran 那样调用 C 预处理器吗?
【问题讨论】:
-
是的,您可以通过使用预处理器指令来完成此操作。查看您的编译器手册进行源代码预处理。
-
您应该对整数和实数使用种类表示法。您可以轻松更改工作精度。
-
回复上一条评论:见stackoverflow.com/questions/3170239/…。如果您真的想按字节大小指定变量,Fortran 2003 提供了具有标准类型的 ISO_FORTRAN_ENV 模块。
标签: compilation 64-bit fortran 32-bit cpu-architecture