我正在设计一个Fortran代码来解决PDE系统问题。
目前,我有一个类型为“Variable”的对象,其中包含多个属性,最重要的是存储数值的数组“val”。
同时,我还有一个“solver”类,用于对“variable”进行计算。我认为每次运行“solver”时将整个“variable”传递给它,并使用“variable%val”进行操作(在执行期间需要多次运行),效率会很低,因此我决定在“solver”类中定义指针字段,以将其绑定到适当的变量。例如:
解决器模块
在我的程序中,我为不同的物理特性和不同的解算器定义了不同的变量,并以我上面展示的方式将它们与这些变量相关联。
我对OOP还很陌生,所以我的问题是这是否是一个合理的设计?特别是从性能的角度来看。与仅将
目前,我有一个类型为“Variable”的对象,其中包含多个属性,最重要的是存储数值的数组“val”。
同时,我还有一个“solver”类,用于对“variable”进行计算。我认为每次运行“solver”时将整个“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
相比,速度如何?有没有一些常规的方法来做到这一点?