Я разрабатываю программу Fortran для научных вычислений. Я хочу использовать указатели процедур для назначения граничных условий в задаче, показанной в следующей основной программе.
program main
use boundary
implicit none
bc1 => boundaryA
bc2 => boundaryB
bc3 => boundaryC
call comp_boundary
end program
Я определяю все граничные операции «boundaryA/B/C» в «граничном» модуле.
module boundary
implicit none
procedure(boundary_type), pointer :: bc1,bc2,bc3
abstract interface
subroutine boundary_type(i)
integer :: i
end subroutine
end interface
contains
subroutine boundaryA(i)
integer :: i
print*, 'Boundary A at ',i
end subroutine
subroutine boundaryB(i)
integer :: i
print*, 'Boundary B at ',i
end subroutine
subroutine boundaryC(i)
integer :: i
print*, 'Boundary C at',i
end subroutine
subroutine comp_boundary
call bc1(1)
call bc2(2)
call bc3(3)
end subroutine
end module
Это хорошо работает.
Но мой вопрос в том, что если, скажем, boundaryC
имеет не один входной аргумент, а два, то мое определение для абстрактного интерфейса boundary_type
сейчас не работает.
Можно ли использовать указатель процедуры для решения этого случая? Или как-то иначе?
implicit none
в каждой подпрограмме модуля. Один раз в модуле достаточно. - person Vladimir F   schedule 17.01.2018