Совместимость Fortran-C и массивы с плавающей точкой

У меня есть большой существующий код Fortran95. Оно использует

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

объявить массивы.

Я хочу присоединиться к некоторому коду C и обнаружил, что могу сделать это, написав интерфейсы для C-функций и объявив массивы как

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

У меня есть работающие Fortran функции, которые вызывают C-функции как

call myfunction(c_loc(array));

Что нужно для прохожденияreal(dp) массив к моей функции? Видимо, мне нужно было бы сделать из него C-указатель (как?). Есть ли другой способ, кроме копирования массива? Можно ли гарантировать, что оба типа действительно относятся к совместимым блокам данных двойной точности? Самое главное, решение должно работать с компиляторами GNU. Обратите внимание, что заменаreal(dp) сreal(c_double) повсюду в существующем коде Фортрана для меня сейчас не вариант.

Если нет альтернативы копированию всего массива, как бы я сделал это правильно в интерфейсе?

Ответы на вопрос(2)

Ваш ответ на вопрос