Я хочу использовать функцию Fortran Coarray, чтобы иметь разные массивы на разных изображениях.
В соответствии со стандартом 2008/2018 это должно быть возможно с использованием производного типа, содержащего размещаемый объект. Я использую gfortran 8.2.0 с opencoarrays 2.3.1.1 библиотеку MPI на MacOS Mojave.
program Main
implicit none
type :: Array_Type
double precision, dimension(:), allocatable :: values
end type
type(Array_Type), codimension[*] :: array
if(this_image() == 1) then
allocate(array%values(2))
array%values = this_image()
else
allocate(array%values(1))
endif
sync all
print *, this_image(), array[1]%values(:)
sync all
end program
Программа составлена
gfortran -Wall -fcoarray=lib Main.f90 -lcaf_mpi
Еще более простой пример приводит к той же ошибке сегментации, когда к выделенному массиву обращаются другие изображения.
program Main
implicit none
type :: Array_Type
double precision, dimension(:), allocatable :: values
end type
type(Array_Type), codimension[*] :: array
allocate(array%values(2))
sync all
print *, this_image(), array[1]%values(:)
sync all
end program