Я новичок в Фортране и пытаюсь решить проблему, чтобы сгруппировать несколько наборов данных, которые имеют одинаковое расстояние до точки. Я пытаюсь создать 3D-массив range_data
разной длины (n, 5120) (n меняется). Я хочу сгруппировать 5 1D-массивов URS
PROB
ix
iy
и radius
(имеет одинаковую длину, одинаковое местоположение индекса) в переменную range_data
. Я застрял с этой ошибкой и не знаю точно, что приводит к этому. Я запустил отладчик, и он сказал, что ошибка сегментации в if (int(radius(m,1))==k) sz=sz+1
Сценарий ниже:
function radius_group(radius,dims,ix,iy,URS,PROB) result (range_data)
use typDefMod
real, dimension(:), allocatable, intent(in) :: URS,PROB
real, dimension(:,:), allocatable, intent(in) :: radius
integer,dimension(:), allocatable, intent(in) :: ix,iy
integer :: i,k,m,sz
integer, intent(in) :: dims
type(multi_array), allocatable:: range_data,temp
integer, dimension(:), allocatable :: loc
do k=1,int(maxval(radius(:,1)))
sz=0
do m=1,dims
if (int(radius(m,1))==k) sz=sz+1
end do
allocate(loc(sz))
i=1
do m=1,dims
if (int(radius(m,1))==k) then
loc(i)=m
i=i+1
end if
end do
allocate(temp%range_num(k)%element(sz,5))
temp%range_num(k)%element(:,1)=radius(loc(:),1)
temp%range_num(k)%element(:,2)=ix(loc(:))
temp%range_num(k)%element(:,3)=iy(loc(:))
temp%range_num(k)%element(:,4)=URS(loc(:))
temp%range_num(k)%element(:,5)=PROB(loc(:))
deallocate(loc)
end do
range_data=temp
end function radius_group