Interoperabilidade Fortran-C e matrizes de flutuação

Eu tenho um grande código Fortran95 existente. Usa

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

declarar matrizes.

Eu quero juntar algum código C e descobri que posso fazer isso escrevendo interfaces nas funções C e declarando matrizes como

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

Eu tenho funções fortran trabalhando que chamam as funções C como

call myfunction(c_loc(array));

O que é necessário para passar oreal(dp) matriz para myfunction? Aparentemente, eu precisaria fazer um ponteiro C (como?). Existe outra maneira de copiar a matriz? É possível garantir que os dois tipos de fato se refiram a blocos de dados de precisão dupla compatíveis? O mais importante é que a solução deve funcionar com os compiladores GNU. Observe que a substituiçãoreal(dp) comreal(c_double) em todo lugar no código Fortran existente não é uma opção para mim agora.

Caso não haja alternativa para copiar toda a matriz, como eu faria isso corretamente na interface?

questionAnswers(2)

yourAnswerToTheQuestion