Jeg prøver å bruke Fortran iboende funksjon spredning å endre en 3D array. Jeg ønsker å endre en matrise av formen (3 3 6) til en oppstilling av form (3 18 18). I MATLAB kan dette gjøres ved hjelp repmat, men prøver dette i Fortran resultater i i feil: uforenlige rekkene 3 og 4.
Jeg har ikke noe problem å bruke spredte seg til 1D arrays og alt fungerer som forventet. Mine forsøk var å bruke spredt i en frist trinn for å oppnå en form av (3 18 6) og deretter en andre spredning for (3 18 18), men feilen skulle oppstå allerede på frist ring av spredning.
program example
implicit none
integer :: arr(3,3,6)
integer :: arr2(3,18,6)
integer :: i,j
do i = 1,6
do j = 1,3
arr(1:3,j,i) = (/1,1,1/)
end do
end do
arr2 = spread(arr,2,6)
print*, shape(arr2)
end program example
!MATLAB code:
!repmat(arr, 1, 6, 3)
Jeg forventer og rekke form (3 18 6) i den gitte koden og ønsker å få dette til (3 18 18) i neste trinn akkurat som Matlab-funksjonen repmat, som kan gjøre dette i ett trinn ved kodeeksempel gitt i den kommenkoden ovenfor. Feilmeldingen sier: inkompatible rekkene 3 og 4.