Ich habe ein Unterprogramm MatPath
ein Array anhängen, aber ich verstehe nicht, wie ich diese Anordnung in der Unterprogramm erklären sollte, wo ich MatPath
nennen:Wie deklariere ich ein Array mit Größenmodifikation in einem Unterprogramm?
!**********************************************************************
SUBROUTINE MatPath(Path, Start)
INTEGER(2),PARAMETER::Ximax = 5, Yimax = 5, Zimax = 1
INTEGER(4)::W,B
REAL(8), DIMENSION(:,:), ALLOCATABLE::Path
REAL(8), DIMENSION(:,:), ALLOCATABLE::Temp_Array
REAL(8), DIMENSION(:), ALLOCATABLE::Start
W=SIZE(Path,DIM=2)
ALLOCATE(Temp_Array(3,W))
DEALLOCATE(Path)
ALLOCATE(Path(3,W+1))
Path(:,1:W)=Temp_Array(:,1:W)
Path(:,W+1)=Start(:)
DEALLOCATE(Temp_Array)
RETURN
END SUBROUTINE MatPath
!************************************************
SUBROUTINE FINDPATH(Array, St)
IMPLICIT NONE
INTEGER(4), DIMENSION(3,3)::Array
REAL(8), DIMENSION(3)::St
REAL(8), DIMENSION(3, :)::Path !PROBLEM HERE
CALL MatPath(Path, St)
END SUBROUTINE FINDPATH
Es ist immer noch unklar, wie ich ein Array deklarieren kann, die die Größe würde in einem Unterprogramm ändern ... Wenn jemand erklären kann, wie es funktioniert, Danke!
EDIT
klarer hier eine Vereinfachung meines Problems sein, wie kann ich Modifikation der Größe meiner Array erhalten A
und es zwischen dem Hauptprogramm übergeben das Unterprogramm beenden? :
program teste10
REAL(8),DIMENSION(:,:),ALLOCATABLE::A
ALLOCATE(A(2,2))
A=1
WRITE(*,*), "Initial A : ", A
CALL TESTE1(A)
WRITE(*,*) "new A : ", A
DEALLOCATE(A)
STOP
end program teste10
!**********************************************
SUBROUTINE TESTE1(A)
REAL(8),DIMENSION(:,:),INTENT(INOUT), ALLOCATABLE::A
REAL(8), DIMENSION(:,:), ALLOCATABLE::Temp
INTEGER(4)::X, Y
X=SIZE(A, DIM=1)
Y=SIZE(A, DIM=2)
ALLOCATE(Temp(X,Y))
DEALLOCATE(A)
ALLOCATE(A(X+2,Y+3))
A(1:X, 1:Y)=Temp(1:X,1:Y)
A(X+1:X+2, Y+1:Y+3)=0
DEALLOCATE(Temp)
RETURN
END SUBROUTINE TESTE1
Wenn ich versuche, mir zu tun, dass es ein "SIGSEV, segmentation fault occured"
geben oder einfach nur für immer ohne jede Nachricht laufen ....
Vielen Dank, ich verstehe nicht den Teil über Module? Mein ganzer Code ist in der gleichen Seite und ich rufe eine Subroutine in einem anderen oder im Hauptprogramm auf .... Ich bearbeite auch meinen Pfosten mit dem Test, den ich tue – Dadep
Sie ** MÜSSEN ** Module benutzen . Die Unterprogramme müssen in einem Modul sein. Oder Sie können die Subroutinen zwischen 'CONTAINS' und' END PROGRAM' verschieben, aber das ist nur für kurze Programme gut. Es spielt keine Rolle, ob die Unterprogramme in der gleichen Quelldatei sind oder nicht. –
Was passiert, wenn das Array INTENT (OUT) ist? Wird es automatisch im Unterprogramm zugewiesen? – Holmz