【发布时间】:2019-03-14 14:29:20
【问题描述】:
我主要使用 Python 进行科学编程,没有大量的 Fortran (90/95) 经验。对于我的一个项目,我想定义一个派生类型并为该类型重载一堆运算符。至关重要的是,我希望派生类型的变量之一是可变长度的数组;至少,我在代码的不同部分需要两种不同的长度。我怎样才能最有效地实现这一目标并避免代码重复?
我的第一种方法是使用可分配数组,但这涉及整个代码中的多个分配语句,包括重载的运算符。这也导致在 MPI 应用程序中使用代码时遇到困难。
我目前的方法是在两个单独的模块中定义一个同名的类型,并在代码的不同部分使用一个或另一个。可以使用头文件(下例中的mytype_operators.h)共享重载的运算符。
module mod1
type mytype
real :: x1
real,dimension(1) :: x2
end type mytype
#include "mytype_operators.h"
end module mod1
module mod2
type mytype
real :: x1
real,dimension(10) :: x2
end type mytype
#include "mytype_operators.h"
end module mod2
不幸的是,代码中有一个模块带有我想用于两种类型的子例程。目前我有该代码的两份副本;一个带有“use mod1”,另一个带有“use mod2”。我可以改进这一点并避免代码重复吗?
【问题讨论】:
-
你知道参数化派生类型吗?
-
我不是……现在正在寻找它。
-
This recent question 有这样的应用程序的答案。还有其他的。这些问题没有特别解决的是与 MPI 的交互。