我正在尝试将一个数组从Fortran传递给C,并通过例程将输出数组传回Fortran。功能简单,用于演示。它接收2个可变长度数组,其中一个是空的,并将第二个值存储在空的数据的相应位置。源代码如下
binder.f90
module binder
use iso_c_binding
implicit none
interface
subroutine eval_jacob(t,p,y,jac) bind(c)
use iso_c_binding
real(c_double) :: t
real(c_double) :: p
real(c_double) :: y(*)
real(c_double), intent(out) :: jac(*)
end subroutine eval_jacob
end interface
end module
我在功能中添加了printf
仅用于验证目的。
func.c
#include <stdio.h>
void eval_jacob(double t,double p,double* y,double* jac) {
jac[1] = y[1];
printf("%f",jac[1]);
return;
}
测试程序使用y
的相同值初始化0.1
。但是,两个语句的输出都是0
。
test.f90
program test_f
use binder
use iso_c_binding
implicit none
real(c_double) :: t = 0.d0
real(c_double) :: p = 101325.d0
integer, parameter :: NN = 11
real(c_double) :: y(NN)
real(c_double) :: jac(NN)
integer :: i
do i = 1,NN
y(i) = 1.0d-1
end do
call eval_jacob(t,p,y,jac)
write(*,*), jac(2)
end program