Есть ли способ создать массивы переменного размера в Fortran в стеке ? Allocate () не работает для меня, потому что он помещает массив в кучу. Это может привести к проблемам с распараллеливанием (см. Мой другой вопрос:
OpenMP: низкая производительность массивов кучи (массивы стека работают нормально) ). Конечно, некоторое умное управление памятью могло бы обойти эту проблему, но управление памятью в Фортране звучит глупо.
По сути, я ищу фортрановский эквивалент следующего в 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 массивами до моей недавней встречи с проблемой в вопросе, упомянутом выше. Если на этот вопрос будет отрицательный ответ, я был бы очень признателен за ссылку на источник.
Редактировать: см. Комментарии к ответу М.С.Б. Элегантный способ сделать это стало возможным только в Fortran 2008, и это сделано в конструкции block
.