Хороший проект ООП для решателя на современном Фортране

Я разрабатываю код на Фортране для решения системы 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с точки зрения скорости? Есть ли какой-нибудь обычный способ сделать это?

5
задан tiam 25 May 2012 в 14:17
поделиться