Interoperabilidad Fortran-C y matrices flotantes

Tengo un gran código Fortran95 existente. Usa

real(dp), dimension(num) :: array

para declarar matrices.

Quiero unirme a algún código C y descubrí que puedo hacerlo escribiendo interfaces en las funciones C y declarando matrices como

use iso_c_binding
real(c_double), allocatable, target :: array(:)

Tengo funciones fortran que llaman funciones C como

call myfunction(c_loc(array));

Lo que se necesita para pasar elreal(dp) matriz de mifunción? Aparentemente, necesitaría hacer un puntero en C a partir de él (¿cómo?). ¿Hay alguna otra manera que copiar la matriz? ¿Es posible asegurar que ambos tipos de hecho se refieren a bloques de datos de doble precisión compatibles? Lo más importante es que la solución debe funcionar con los compiladores GNU. Tenga en cuenta que reemplazarreal(dp) conreal(c_double) en todas partes en el código Fortran existente no es una opción para mí en este momento.

En caso de que no haya alternativa a copiar toda la matriz, ¿cómo lo haría correctamente en la interfaz?

Respuestas a la pregunta(2)

Su respuesta a la pregunta