У меня возникли проблемы с записью распределяемого массива, вложенного в производный тип, с помощью namelists. Ниже приведен минимальный пример. Как я могу изменить программу, чтобы иметь распределяемый массив внутри производного типа, как если бы он не был вложен?Как написать распределяемый массив в производном типе с помощью namelists?
program test
implicit none
type struct_foo
integer, allocatable :: nested_bar(:)
end type struct_foo
integer, allocatable :: bar(:)
type(struct_foo) :: foo
! namelist/list/foo, bar
namelist/list/bar
allocate(bar(5))
bar = [1:5]
allocate(foo%nested_bar(5))
foo%nested_bar=[1:5]
write(*,list)
end program test
С обув закомментирован списке имен, он прекрасно работает, производя вывод:
&LIST
BAR = 1, 2, 3, 4, 5
/
С обув включен, программа не компилировать:
>> ifort -traceback test_1.f90 -o test && ./test
test_1.f90(20): error #5498: Allocatable or pointer derived-type fields require a user-defined I/O procedure.
write(*,list)
--------^
compilation aborted for test_1.f90 (code 1)
Можете ли вы рассказать нам, какой компилятор вы используете? – chw21
ifort (IFORT) 15.0.3 20150408 – lenzinho