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?