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?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage