我正在设计一个用于解决 PDE 系统的 Fortran 代码。
它现在的设计方式是我有一个Variable
具有多个属性的类型,其中最重要的是val
存储值的数组。
现在我还有一个solver
类,它将对variable
. 我认为将整个传递variable
给求解器并在variable%val
每次我想运行它时使用(在执行期间数千次)效率低下,所以我决定在solver
类中定义指针字段以将求解器绑定到适当的变量。例如
program example
use variable
use solvers
type(Variable) T
type(Solver) solver_temperature
!Contructors
call T%create()
call solver_temperature%create(T)
call solver_temperature%solve()
end program example
和求解器模块
module solvers
type Solver
real*8, pointer :: T(:,:)
contains
procedure :: create
procedure :: solve
end type
contains
subroutine create(this,T)
type(Solver) :: this
type(Variable) :: T
this%T => T%val
end subroutine
end module
在我的程序中,我为不同的物理属性定义了不同的变量,以及与这些变量相关联的不同求解器,如上所示。
一般来说,我是 OOP 的新手,所以我的问题是这是否是一个体面的设计?尤其是从性能的角度来看。就速度而言,这与T
仅创建一个数组并将其传递给子程序solve
相比如何?有一些常规的方法可以做到这一点吗?