Fortran-C-Interoperabilität und Float-Arrays
Ich habe einen großen vorhandenen Fortran95-Code. Es verwende
real(dp), dimension(num) :: array
Arrays deklarieren.
Ich möchte mich an einem C-Code beteiligen und habe festgestellt, dass ich dies tun kann, indem ich Schnittstellen zu den C-Funktionen schreibe und Arrays als @ deklarier
use iso_c_binding
real(c_double), allocatable, target :: array(:)
Ich arbeite mit fortran-Funktionen, die die C-Funktionen als @ aufrufe
call myfunction(c_loc(array));
Was wird benötigt, um das @ zu übergebreal(dp)
array zu meiner Funktion? Anscheinend müsste ich einen C-Zeiger daraus machen (wie?). Gibt es eine andere Möglichkeit als das Array zu kopieren? Kann sichergestellt werden, dass beide Typen tatsächlich auf kompatible Datenblöcke doppelter Genauigkeit verweisen? Am wichtigsten ist, dass die Lösung mit den GNU-Compilern funktioniert. Beachten Sie, dass das Ersetzen vonreal(dp)
mitreal(c_double)
Überall im vorhandenen Fortran-Code ist für mich derzeit keine Option.
Falls es keine Alternative zum Kopieren des gesamten Arrays gibt, wie würde ich das in der Benutzeroberfläche richtig machen?