PDE 시스템을 해결하기위한 Fortran 코드를 설계하고 있습니다.현대 Fortran을 사용하는 솔버를위한 좋은 OOP 설계
현재 설계된 방식은 여러 가지 특성을 갖는 유형이 Variable
인데 그 중 가장 중요한 것은 값을 저장하는 배열 val
입니다.
이제는 solver
클래스를 사용하여 variable
에서 계산을 수행합니다. 나는 해결사로 전체 variable
을 전달하고 variable%val
내가 (AN exectution 동안 시간의 수천)를 실행 할 때마다 작업하는 것은 비효율적 일 것이라고 생각, 그래서에 결합하는 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
에 전달하는 것과 비교하면 어떨까요? 몇 가지 일반적인 방법이 있나요?
가변 포인터에 많은 포인트가 표시되지 않습니다. 가짜 인수로 전달하는 것이 나에게 자연스러운 것처럼 보입니다. 하나의 배열 기술자 일 뿐이며, 성능에 나쁜 영향을주지는 않습니다. –