我试图在 fortran 程序中使用 SUNDIALS-CVODE。但fcvmalloc()
总是返回错误标志。
日晷包中包含的 fortran 示例程序也不起作用。中也有同样的问题fcvmalloc()
。但是 c 示例效果很好。
我已经在 ubuntu 和 debian sid 上尝试了来自 apt 的包以及本地编译的包。这些组合都不起作用,它们只是在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