У меня есть небольшой код, объявляющий указатель на массив производного типа, который имеет поле, которое является выделяемым массивом другого производного типа, имеющего действительную переменную в качестве поля.
Используя gnu fortran (8.2), я получаю разные результаты для каждого местоположения в массиве или в виде вектора.
Использование компилятора intel fortran (2019.4) успешно завершено.
program test
implicit none
integer, parameter :: length = 2
real(8), dimension(length) :: a, b
integer :: i
type point
real(8) :: x
end type point
type stored
type(point), dimension(:), allocatable :: np
end type stored
type(stored), dimension(:), pointer :: std=>null()
allocate(std(1))
allocate(std(1)%np(length))
std(1)%np(1)%x = 0.3d0
std(1)%np(2)%x = 0.3555d0
do i = 1, length
write(*, "('std(1)%np(',i1,')%x = ',1e22.14)") i, std(1)%np(i)%x
end do
do i = 1, length
write(*, "('std(1)%np(1:',i1,') = ',2e22.14)") i, std(1)%np(1:i)%x
end do
a = std(1)%np(1:2)%x
b = [std(1)%np(1)%x, std(1)%np(2)%x]
if (norm2(a - b) .gt. 1d-3) then
write(*,*) 'failure'
else
write(*, *) 'success'
end if
end program test
код успешно завершается, но при использовании gfortran один получает «сбой» на экране и несовместимые отпечатки выше, а при использовании компилятора Intel один получает «успех» на экране и согласованные отпечатки выше.