SUNDIALS-CVODE的Fortran界面坏了?

问题描述:

我试图在fortran程序中使用SUNDIALS-CVODE。但fcvmalloc()总是返回错误标志。SUNDIALS-CVODE的Fortran界面坏了?

包含在日package包中的fortran示例程序也不起作用。 它在fcvmalloc()中有同样的问题。 但c样品运作良好。

我已经尝试从apt以及在本地编译的,在Ubuntu和Debian sid上的软件包。这些组合都不起作用,他们在fcvmalloc()中也有同样的问题。

感谢您看看这个问题,以下是一个简化的测试案例。

program test 
    integer*4,parameter::nEq=2 
    integer ier 
    integer*4 ipar(1),iout(25) 
    double precision rpar(1),rout(10) 
    double precision t,dt,u(nEq) 

    t=0d0 
    u=[1d0,2d0] 
    call fnvinits(1,nEq,ier) 
    call fcvmalloc(t,u,1,1,1,1d-5,1d-5,iout,rout,ipar,rpar,ier) 
    call fcvspgmr(0,1,50,0d0,ier) 
    dt=1d-1 
    do i=1,10 
    call fcvode(t+dt,t,u,1,ier) 
    write(*,*),t,u 
    end do 
    call fcvfree() 
end program 

subroutine fcvfun(t,u,du,ipar,rpar,ier) 
    double precision t 
    double precision u(*) 
    double precision du(*) 
    integer ipar(*) 
    double precision rpar(*) 
    integer ier 

    du(1)=-0.5d0*u(1) 
    du(2)=-3d0*u(2) 
    ier=0 
end subroutine 
+0

难道fvinits()成功完成申报与C类型兼容的参数和变量?该文件称fcvmalloc()将在发生故障时将诊断信息打印到终端 - 您看到了什么? – WaywiserTundish 2013-02-14 04:48:06

+0

'fnvinits'返回好标志。 'fcvmalloc()'说'[CVODE ERROR] CVodeInit 内存请求失败.'@WaywiserTundish – mianzhi 2013-02-15 17:39:59

尝试使用meth,itmeth,iatol,rtol和atol的变量名代替数字值;从Fortran调用C库例程时可能会导致问题。另外请确保您将cvcode构建为双精度或扩展精度,而不是单精度。

+0

不幸的是它没有帮助。结果是一样的@ @ WaywiserTundish – mianzhi 2013-02-16 15:14:13

+0

好的,文档说iout是21个元素的整数数组,而rout是6个元素的真实数组。你的代码尺寸稍大一些。尝试更改这些数组大小。如果这不起作用,那么可能是分解调试器的时候了。 – WaywiserTundish 2013-02-17 07:33:25

+0

旧版本使用21/6。但最新版本使用25/10。 @ WaywiserTundish – mianzhi 2013-02-17 15:11:57

在现代FORTRAN的情况下,你可以使用ISO_C_BINDING和fcvode.h头文件 即

integer(c_long),parameter::nEq=2 
    integer(c_int) ier 
    integer(c_long) ipar(1),iout(21) 
    real(c_double) rpar(1),rout(10) 
    real(c_double) t,dt,u(nEq) 
+0

很可能,问题出现在'long'中,现在是8个字节而不是4个,如同例子所假设的那样。让答案更好解释为什么要这样做,我会投票。 (我没有在任何地方找到Fortran接口。) – 2014-05-23 12:57:32

+0

确实,fortran中的fortran界面文档并不完美。然而,对于fcvode,有一些文档解释了特定函数参数的类型定义:http://computation.llnl.gov/casc/sundials/documentation/cv_guide/node6.html – zmi 2014-05-24 00:30:47