Ich habe einen dritten Teil-Code in Fortran 77, und ich habe eine Subroutine in Fortran 90 geschrieben, die ich gerne an diesen Code anschließen würde. Ich habe festgestellt, dass die Variablen nicht korrekt von einem Unterprogramm zum anderen übergeben werden. Ich denke, der Grund ist, dass die Definitionen der doppelten Genauigkeit in den beiden Programmen nicht kompatibel sind.Übergabe echte Arrays von Fortran 90 bis Fortran 77
Ich möchte, dass die Variable zu F77 zurückgegeben ist ein double precision
. Welche echte Definition soll ich in f90 verwenden? Ich bin mit selected_real_kind(p=15,r=307)
EDIT: Ich habe die Erklärung zu double precision
in f90 geändert, und ich habe festgestellt, dass double precision
Variablen korrekt übergeben werden. Das Problem tritt auf, wenn ich zuweisbare Arrays von f90 bis f77
übergebe. Die Arrays sind ursprünglich im Code f77 zugeordnet. dann zuteilen ich einige zuweisbaren Arrays in f90 und sie dann an f77 passieren, aber das funktioniert nicht
f77 Code:
program oldprog
double precision da(100)
call sub(da)
end
subroutine sub(da)
double precision da(*)
call mynewsub(da)
end
f90 Code:
subroutine mynewsub(da)
implicit none
double precision, allocatable:: da(:)
allocate(da(100))
da = 1.0
end subroutine mynewsub
Ich dachte, die überspringen Zuweisung in mynewsub, aber dann bekomme ich SIGSEGV
Fortran asuming Sie nicht wollen, den alten Code ändern, nur 'Doppel precision' in dem neuen Code verwenden, um seine Sie wissen konsistent. (Sie können natürlich auch den alten Code aktualisieren, um 'selected_real_kind' zu verwenden) – agentp
Überprüfen Sie, was die beiden fraglichen Compiler für' double precision' verwenden, aber es ist wahrscheinlich, dass es in beiden Fällen IEEE 754 64 bit binary ist. –
Ich habe versucht, 'double precision' zu verwenden, aber die Variablen werden nicht korrekt übergeben, möglicherweise weil ich zuweisbares Array übergebe? – simona