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?