PDE 系を解くための Fortran コードを設計しています。
現在設計されている方法は、Variable
いくつかの属性を持つ型を持っているということです。その中で最も重要なのはval
、値を格納する配列です。
solver
これで、 で計算を実行するクラスも作成されましたvariable
。全体variable
をソルバーに渡し、variable%val
それを実行するたびに (実行中に数千回) 作業するのは非効率的であると考えたので、solver
クラスでポインター フィールドを定義して to ソルバーにバインドすることにしました。適切な変数。例えば
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
、速度の点でどうですか? これを行う定期的な方法はありますか?