问题标签 [fortran2003]
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.
c - 从 C 库头文件自动生成 Fortran 2003 绑定(使用 iso_c_bindings 内部模块)
是否有使用Fortran 2003 标准的内部模块从 C 库头文件自动生成 Fortan绑定的工具?iso_c_bindings
我对将C 转换为 Fortran 不感兴趣,而只对生成绑定感兴趣。
class - 如何在 Fortran 2003 中以多态方式解除分配?
在尝试实现用户派生类型层次结构之前,我尝试使用 Fortran 2003 特性来理解多态释放。理想的目标是弄清楚如何释放可能指向任何其他兼容子类型的声明父类型指针。
如以下代码所示,该文件liboo.f90
声明了一个基类型Parent
和一个继承类型Child
。这两种类型分别FINAL
适用于标量和数组情况。该文件test_liboo.f90
使用 18 个不同的子例程尝试不同的释放。
子程序TestParent_3_POINTER_CLASS
, TestParent_7_array_POINTER_CLASS
,
TestChild_3_POINTER_CLASS
, TestChild_7_array_POINTER_CLASS
,
TestPolymorph_3_array_Pointer_TypeForChildren_ClassForParents
,
TestPolymorph_4_array_Pointer_ClassForChildren_ClassForParents
, 都给出分段错误。的错误信息TestParent_3_POINTER_CLASS
如下所示。
子程序TestPolymorph_1_Pointer_TypeForChild_ClassForParent
说forrtl: severe (173): A pointer passed to DEALLOCATE points to an array that cannot be deallocated
。
你能帮忙评论一下原因吗?
TestPolymorph_2_Pointer_ClassForChild_ClassForParent
不给出分段错误,但只调用 Child's Final
, whileTestChild_1
等等可以调用 Child'sFinal
和 Parent's Final
,这应该是可取的。
我想知道如何取消分配在 Fortran 2003 中实际包含继承类型的声明父类型?任何见解将不胜感激!
PS:编译器为Intel Fortran Compiler,版本如下:
错误消息之一
生成文件
liboo.f90
test_liboo.f90
pointers - 使用 OpenMP 时如何在子程序中分配指针?
如以下代码示例所示,主程序尝试利用 OpenMP 调用子程序。在该子例程中,创建并迭代了一个局部指针变量。程序会产生Subscript #1 of the array PTEMPINTLIST has value 208 which is greater than the upper bound of 207
错误(具体数字不同)。我已经制作了包含用户派生类型omp-private
,但似乎调用的子例程中的局部变量也应该声明omp-private
,但我不确定这是否属实,我不知道如何实现这一点。
你能帮忙评论一下为什么程序会出现这样的错误吗?更重要的是,您能否帮助评论有关在使用 OpenMP 时如何在子例程中分配指针的最佳实践?
不知道为什么 fortran 代码没有着色。有人可以帮助评论如何为代码着色,使其更具可读性吗?
编译器为 Intel Fortran Compiler,版本如下:
错误信息如下所示:
代码示例是:
c - 带有 iso_c_bindings 的单个 C 函数的许多替代 Fortran 接口
是否可以使用内部模块为单个 C 函数/过程生成多个 Fortran 2003 接口iso_c_bindings
?
我想为 C 类型的参数与 Fortran 的参数不完全匹配的情况提供替代接口,例如*float
在 C 中可能是数组、对单个变量的引用或指针 (C_PTR_NUL)。
fortran - 如何为扩展抽象类型的派生类型重载运算符?
我从 Metcalf 等人的“Fortran 95/2003 解释”中举了一个例子,因为我自己的代码针对的是同一件事。
现在,我的问题是如何正确实现该add_my_integer
功能。似乎我不得不强制转换第一个参数,my_integer
因为它是一个类型绑定过程,但第二个参数my_numeric_type
必须符合抽象接口。至于结果,我应该分配r
给my_integer
吗?到目前为止,这是我想出的,它确实可以编译,但是一直检查类型似乎很奇怪,并且会导致分段错误(尽管可能是由于我的代码存在其他问题)。
fortran - OOP Fortran:保存指向意图(IN)变量的指针
我有一个 Fortran 模块,我想尽可能地遵循 OOP 理念来组织它,同时仍然使其与 Fortran 2003 兼容。这个模块基本上:(a)分配/释放临时数组缓冲区,以及(b)提供一个函数 do_F对一些数据进行操作。这个函数 do_F 使用这些临时缓冲区,但也依赖于几个辅助类型。
我很清楚我应该将缓冲区放入一个类型中,并在适当的时候初始化/释放。但是,由于对 do_F 的每次调用都需要几个参数,所以我确信最好使用的设计策略是什么。
更具体地说,考虑以下实现:
每次调用 do_F 时传递大量类型
/li>保存指向 do_F 需要的类型的指针
/li>
我的具体问题是:
- 实施 #2 有效吗?PGI编译器没有抱怨,但听说函数返回后intent(IN)不再定义好
- 将此方案与指针一起使用是否会降低性能?即使我不写入这些 aux_ptr,编译器是否能够像 #1 一样优化我的代码?
一些注意事项:
- 函数 do_F 被调用了大约 100 次,每次调用都需要几分钟,并且对大型数组进行操作。
- 除了 do_F 之外,还有 do_G 和 do_H 函数对相同的数据进行操作并使用相同的辅助变量。这就是为什么我想首先减少传递给函数的变量数量。
- 我不想将所有辅助变量组合成一种类型,因为它们在大型 HPC 代码的其余部分中使用。
谢谢!
oop - 重载函数返回指向基类型的指针以及fortran 2003中的抽象接口?
我正在用 Fortran2003 编写一个链表结构。此链表中的节点有两种交替出现。该列表表示边的拓扑环,每条边由两个顶点界定,每个顶点连接到两条边。这些结构被声明为抽象 NODE_T 类型,并由两个子类 VN_T 和 EN_T 实现。一个 VN_T 指向两个 EN_T,反之亦然。由于列表在类型之间交替,因此指针存储在子类中。我的问题是将类型绑定函数(方法?)添加到称为 NEXT() 和 PREV() 的 VN_T 和 EN_T,并通过多态性做正确的事情。VN_T%NEXT() 应该跳过两个步骤,并获得下一个 VN_T(与开始的 VN_T 相隔一个 EN_T)。
我的类型/类定义如下:
next/prev 例程的实现都大同小异,next/prev 和 EN/VN 的四种组合:
当我调用这些函数时:
然后我的编译器(Intel FORTRAN XE Composer 2011,即 v12.0)抱怨消息
基于此文档似乎表明它正在尝试在基类上调用 procdure NEXT 而不是选择其中一个子类实现(它应该能够根据右侧的 NODE1 的具体类型来执行此操作手边,对吧?)。
我是 F2003 的 OOP 功能的新手,所以我在 JAVA 中制作了这个模式的模型,我对它的工作感到满意。任何人都可以阐明这是否是a)F2003的OOP行为的差异,2)编译器错误或3)只是我脑残......
python - 当前使用 Python 包装现代 Fortran 代码的最佳方法
我知道并使用f2py2e来包装一些旧的 Fortran 77 代码,但我的理解是它不适用于较新的 Fortran 95 代码。我已经研究了我应该使用什么,并且遇到了fwrap 和G3 f2py,它们似乎都没有对它们的当前状态或如何使用它们给出任何解释。我看到f2py的版本有使用第三代f2py的选项,但被评论为没有功能。鉴于此,我不知道我应该使用哪个项目。我应该使用哪一个?
这个问题现在已经交叉发布到(并在)计算科学堆栈交换站点作为我应该使用哪个包来用 Python 包装现代 Fortran 代码?
oop - 现代 Fortran 求解器的良好 OOP 设计
我正在设计一个用于解决 PDE 系统的 Fortran 代码。
它现在的设计方式是我有一个Variable
具有多个属性的类型,其中最重要的是val
存储值的数组。
现在我还有一个solver
类,它将对variable
. 我认为将整个传递variable
给求解器并在variable%val
每次我想运行它时使用(在执行期间数千次)效率低下,所以我决定在solver
类中定义指针字段以将求解器绑定到适当的变量。例如
和求解器模块
在我的程序中,我为不同的物理属性定义了不同的变量,以及与这些变量相关联的不同求解器,如上所示。
一般来说,我是 OOP 的新手,所以我的问题是这是否是一个体面的设计?尤其是从性能的角度来看。就速度而言,这与T
仅创建一个数组并将其传递给子程序solve
相比如何?有一些常规的方法可以做到这一点吗?
fortran - fortran 2003 的完整面向对象示例?
谁能给我一个示例,说明与此 C++ 代码等效的简单 Fortran 2003 面向对象布局应该如何:
我的代码有问题,请参阅以下内容
特别是,我不清楚如何初始化基类,以及如何为派生类定义析构函数。
谢谢