使用可变长度数组参数在Fortran中调用C函数

时间:2017-02-21 07:44:07

标签: c fortran fortran-iso-c-binding

我正在尝试将一个数组从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

0 个答案:

没有答案