Возможно ли в fortran иметь подпрограмму, которая принимает изменяющиеся входные параметры? Я не мог найти способ ... Однако я нашел обходной путь, который заключается в изменении формы входного массива, такого как
SUBROUTINE func(R1_TBV,...)
DOUBLE PRECISION, dimension(:), allocatable :: R1_TBV ! type of boundary value
DOUBLE PRECISION R2_TBV(3,2), R3_TBV(3,2,3)
SELECT CASE(trim(name))
CASE('flux')
allocate(r1_tbv(18))
r3_tbv = reshape(r1_tbv,(/3,2,3/))
CASE('volumic')
allocate(r1_tbv(6))
r2_tbv = reshape(r1_tbv,(/3,2/))
END SELECT
, но:
- Мне кажется странным отсутствие других выбор для определения всех возможных массивов, потому что reshape не может работать (т.е. tbv = reshape (tbv, (/ 3,2,3 /) не работает ...)
- при вызове этой функции мой входной параметр R1_TBV на самом деле имеет размер (3,2,3) или (3,2), поэтому мне также нужно заранее изменить его форму для вызова функции ...