【问题标题】:Connecting types defined in different modules in Fortran连接在 Fortran 中不同模块中定义的类型
【发布时间】:2012-03-12 00:32:34
【问题描述】:

我正在 FORTRAN 中编写一个相当小的 pde 求解应用程序,并且我正在尝试使用 OOP。现在,我有几个模块,其中一些定义了具有相应内部过程的类型。

现在的问题是,如果一个模块使用另一个模块中定义的类型并且后一个模型也使用前者的类型运行,我该怎么办?我举个例子。

说,我有两个模块,一个定义类型Mesh,另一个定义类型NodeVariable。现在我希望每个 NodeVariable 都与要解决的网格相关联,因此我在类型定义中添加了一个 type(Mesh) :: mesh 字段。到目前为止,我可以写use module-mesh 来访问mesh 类型的定义。但我也希望网格能够了解其上定义的变量,因此我将type(NodeVariable), allocatable :: var(:) 声明为一个字段并添加一个过程以动态向网格添加变量。但是现在我被卡住了,因为我负担不起另一个 use 语句:它会导致模块 use 本身,因此一切都崩溃了。解决方案?

【问题讨论】:

  • 您可能需要在一个公共模块中创建所有TYPE() 定义,并将功能移动到单独的辅助模块中。这与 OOP 不同,但我们仍然在这里谈论 Fortran,请记住。如果你试图强制使用过多的 OOP 范式,你就会陷入困境!
  • 子模块在类似情况下可能也很方便,但它们还没有得到广泛的支持,所以我对它们还不够了解。
  • 是的,我想我会有一个专门用于定义的模块!

标签: oop object module fortran fortran95


【解决方案1】:

考虑将您的模块通过 use 语句连接成一个图表。正如您所发现的,Fortran 在此图中禁止循环。解决方案是重新设计图表以避免循环。

在您的情况下,您可以简单地在同一个模块中定义这两种类型。

【讨论】:

  • 是的,我想这是唯一可能的答案。谢谢。
猜你喜欢
  • 1970-01-01
  • 2012-07-15
  • 1970-01-01
  • 1970-01-01
  • 2021-04-19
  • 1970-01-01
  • 2014-10-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多