Я пытаюсь написать программу, в которой я хочу, чтобы выделяемый массив A
имел ранг 1, 2 или 3, в зависимости от моего ввода во время выполнения. Я хочу сделать это, поскольку последующие операции над A
аналогичны, и я определил в модуле интерфейс work
с процедурами модуля, которые при воздействии на A
дают желаемый результат.
Что я делаю в настоящее время, так это:
program main
implicit none
integer :: rank,n=10
real*8, allocatable :: A1(:)
real*8, allocatable :: A2(:,:)
read (*,*) rank
if (rank.eq.1) then
allocate (A1(n))
else if (rank.eq.2) then
allocate (A2(n,n))
end if
! operate on the array
if (rank.eq.1) then
call work(A1)
else if (rank.eq.2) then
call work(A2)
end if
end program
Все было бы намного проще, если бы я каким-то образом мог выбрать ранг A
, так как тогда операторы if
не нужны. Возможно, это невозможно, но вся помощь приветствуется.
include
; вы даже можете обернуть массив ранга 1 внутри производного типа и написать операции для управления им, как если бы он имел ранг n (выбирая n во время выполнения). Но если вы объясните нам, почему вам это нужно, мы, возможно, сможем рассказать вам, как написать вашу программу без этой возможности. - person High Performance Mark   schedule 27.06.2016if
) и его было бы легче модифицировать. Но, возможно, это слишком много для того, чем я занимаюсь. Я хочу, чтобы моя программа могла решать одномерное зависящее от времени уравнение Шредингера (TDSE), двумерное TDSE, а массивA
мог быть размерностью волновой функции. У вас есть ссылки на решение, которое вы предложили с производным типом? - person Lun   schedule 27.06.2016