Я разрабатываю код на Фортране для решения системы PDE.
В настоящее время он разработан так, что у меня есть тип Variable
, который имеет несколько атрибутов, наиболее важным из которых является массив val
, в котором хранится значение.
Теперь у меня также есть класс Solver
, который будет выполнять вычисления над переменной
.Я полагал, что передача всей переменной
решателю и работа с переменной%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
В моей программе я определяю разные переменные для разных физических свойств и разные решатели, которые связаны с этими переменными, как показано выше.
Я новичок в ООП в целом, поэтому мой вопрос в том, приличный ли это дизайн? Особенно с точки зрения производительности. Как это соотносится с созданием T
просто массива и передачей его подпрограмме solve
с точки зрения скорости? Есть ли какой-нибудь обычный способ сделать это?