"Выделяемый массив должен иметь отложенную форму" при переходе от g95 к gfortran

При переходе от использования компилятора g95 к gfortran я получаю следующую ошибку, когда пытаюсь скомпилировать то, что раньше было рабочим кодом

Error: Allocatable array ' ' at (1) must have a deferred shape

Это происходит во всех моих подпрограммах для всех моих размещаемых массивов. Пример ниже.

    SUBROUTINE TEST(name,ndimn,ntype,nelem,npoin,nface,inpoel,coord,face)

    IMPLICIT  NONE

    integer:: i, j,testing
    integer, INTENT(OUT)::ndimn,ntype,nelem,npoin,nface
    integer, allocatable, dimension(1:,1:), INTENT(OUT)::inpoel
    real::time, dummy
    real, allocatable, dimension(1:,1:), INTENT(OUT)::coord
    integer, allocatable, dimension(1:,1:), INTENT(OUT)::face

    character(len=13)::name
    character(len=11)::name3

    name='testgrid.dat'
    name3='testgeo.dat'

    open (unit=14, file='testgrid2.dat', status='old')

    read(14,*)
    read(14,*)
    read(14,*)
    read(14,*) ndimn, ntype
    read(14,*)
    read(14,*) nelem, npoin, nface
    read(14,*)

    allocate(inpoel(ntype,nelem+1),coord(ndimn,npoin+1),face(ntype,nface+1))

Как я могу сделать этот код компилировать с Gfortran?

1 ответ

Решение

Стандарт Fortran 2003 (и, как мне кажется, стандарт 90,95 и 2008) гласит, что выражение в скобках dimension() предложение в объявлении размещаемого массива должно быть deferred-shape-spec-list и что deferred-shape-spec-list список двоеточий, разделенных , если в списке более одного элемента Должно быть одно двоеточие для каждого измерения в массиве.

Я предлагаю вам заменить такие заявления, как

integer, allocatable, dimension(1:,1:), INTENT(OUT)::inpoel

с такими заявлениями, как

integer, allocatable, dimension(:,:), INTENT(OUT)::inpoel

При последующем выделении этого массива нижняя граница для каждого измерения будет по умолчанию 1, Если, с другой стороны, вы хотите выделить его не по умолчанию, вы можете написать

allocate(inpoel(3:12,4:14))

очевидно, заменив эти константы любыми значениями, которые вы пожелаете.

Не удивительно, что код, приемлемый для одного компилятора Фортрана, не приемлем для другого.

Другие вопросы по тегам