2015-06-17 5 views
3

Я использую VS2012 и Intel Visual Fortran 2015.Использование массивов размещаемого/предполагаемого размера с чтением записи списком именами

Согласно https://software.intel.com/en-us/forums/topic/269585, теперь разрешено использовать размещаемые и предполагаемый размер массивы с списком именами чтения и записью; однако я все еще получаю сообщение об ошибке «Объект namelist-group не должен быть массивом предполагаемого размера».

пример кода:

subroutine writeGrid(fname, grid) 

    character*(*) :: fname 
    real*8, dimension(:,:) :: grid 

    namelist /gridNML/ grid 

    open(1, file=fname) 
    write(1, nml=gridNML) 
    close(1) 

end subroutine writeGrid 

Я включил F2003 семантику.

Что мне не хватает?

+0

У вас нет выделенного массива. По общему признанию, у вас также нет массива предполагаемого размера. – francescalus

+0

Массив, передаваемый в, является выделяемым, не уверен, что это имеет значение. –

+0

Фиктивный аргумент подпрограммы не выделяется. Не имеет значения, что переданный массив (фактический аргумент) был выделен. Я также не вижу предполагаемого размера массива, как заметил francescalus. Вы уверены, что отправляете точный код? –

ответ

3

Это похоже на ошибку компилятора. Массив grid составляет Предполагаемая форма, а не Предполагаемый размер. Предполагаемые массивы форм разрешены в namelist с F2003, предполагаемые массивы размеров остаются запрещенными (во время выполнения размер предполагаемого массива размеров не обязательно известен, поэтому операции, требующие знания размера, запрещены).

Простым решением является переименование фиктивного аргумента на что-то другое, а затем копирование его значения в локальный allocatable с именем grid.

subroutine writeGrid(fname, grid_renamed) 
    character*(*) :: fname 
    real, dimension(:,:) :: grid_renamed 
    real, dimension(:,:), allocatable :: grid 

    namelist /gridNML/ grid 

    open(1, file=fname) 
    allocate(grid, source=grid_renamed) 
    write(1, nml=gridNML) 
    close(1) 
end subroutine writeGrid 
+2

Ian прав, это ошибка компилятора. Но это не тот случай, который обсуждался в теме форума, которую вы связали, который был локальным, выделяемым массивом. Я пошлю это разработчикам. –

+0

Awesome. Вот что я в конце концов выяснил, как обходной прошлой ночью. Спасибо, и спасибо, что указали разницу между предполагаемой формой и предполагаемым размером. –

+0

Мне сказали, что эта ошибка исправлена. Исправление должно появиться в обновлении 1 до компилятора 16.0, вероятно, в период с октября по ноябрь. –