Подпрограмме Rule_Tn
в библиотеке Fortran CUBPACK требуется параметр Integrand
, описывающий интегрированную векторную функцию. Это
INTERFACE
FUNCTION Integrand(NF,X) RESULT(Value)
USE Precision_Model
INTEGER, INTENT(IN) :: NF
REAL(KIND=STND), DIMENSION(:), INTENT(IN) :: X
REAL(KIND=STND), DIMENSION(NF) :: Value
END FUNCTION Integrand
END INTERFACE
Поскольку я хочу вызвать Rule_Tn
из кода C, мне нужно определить тип функции в C, точно соответствующий этому интерфейсу выше. Таким образом, я попытался выяснить, как функция Fortran возвращает массивы. Сначала я предположил, что следующая подпись C
void Integrand(double* value, const int* nf, const int* x);
совпадает с интерфейсом выше. Но далеко не так! У меня segfault. И я уже тестировал, что тип double соответствует типу REAL(KIND=STND)
, STND
выходит из модуля Precision_Model
.
Теперь кто-нибудь может сказать мне, какая подпись правильная? Я использую компиляторы GNU Fortran и C.