Есть ли способ создать массивы переменных размеров в Fortran в стеке? Allocate() не работает для меня, потому что он помещает массив в кучу. Это может привести к проблемам с распараллеливанием (см. Мой другой вопрос: OpenMP: низкая производительность массивов кучи (массивы стека отлично работают)). Разумеется, некоторое умное управление памятью поможет решить эту проблему, но управление памятью в Fortran звучит глупо.
По существу, я ищу эквивалент Fortran следующего в C:
scanf("%d", N);
int myarray[N];
Повторить повтор: я НЕ хочу
Integer, PARAMETER :: N=100
Integer, Dimension(N) :: myarray
потому что это определяет размер массива во время компиляции. Я также не хочу
Integer, Dimension(:), Allocatable :: myarray
read(*,*) N
Allocate(myarray(1:N))
потому что он помещает массив в кучу.
Помогите очень ценить. Я был очень доволен Allocatable массивами до моей недавней встречи с проблемой в упомянутом выше вопросе. Если есть отрицательный ответ на этот вопрос, я очень ценю ссылку на источник.
Изменить: см. комментарии к M.S.B. ответ. Элегантный способ сделать это стал возможен только в Fortran 2008, и это делается в конструкции block
.