我正在尝试使用radford ex4p4p1.f90
从Fortran90 source使用dde_solver_m_unix.f90
的DDE解算器。我相信我应该能够简单地下载和编译零更改,但我收到以下错误:
ex4p4p1.f90:107:8:
SOL = DDE_SOLVER(NVAR,DDES,DELAYS,HISTORY,TSPAN=(/ 0D0,350D0 /))
1
Error: There is no specific function for the generic ‘dde_solver’ at (1)
为了完全(并且简单地)重现这一点,我编写了一个小脚本来下载,提取和编译源代码:
#!/usr/bin/env bash
### Download and extract solver
dde_solver_url=http://www.radford.edu/~thompson/ffddes/dde_solver_m.zip
wget $dde_solver_url
unzip dde_solver_m.zip
### Download main routine
example_code_url=http://www.radford.edu/~thompson/ffddes/ex4p4p1.f90
wget $example_code_url
### Compile
gfortran dde_solver_m_unix.f90 ex4p4p1.f90
由于我认为这些文件被编写为“拖放”示例,我相信这可能是我的环境问题或者我编译错误。
我编译的方式有问题吗?如果没有,我可以对(1)驱动程序代码(ex4p4p1.f90
)进行哪些最小的更改以使其工作或(不太理想)(2)求解器代码(dde_solver_m_unix.f90
)?
答案 0 :(得分:0)
在定义DKL_ *函数期间使用的INTERFACE块指定DDES的参数2,3和4应该假定为形状数组。但是,ex4p4p1定义的DDES具有参数2,3和4作为在编译时固定的数组。这会导致与英特尔编译器的混淆,也可能是gfortran正在发生的事情。 尝试使用
DOUBLE PRECISION, DIMENSION(:) :: Y,DY
DOUBLE PRECISION, DIMENSION(:,:) :: Z
而不是
DOUBLE PRECISION, DIMENSION(NEQN) :: Y,DY
DOUBLE PRECISION, DIMENSION(NEQN,NLAGS) :: Z
在DDES的接口块中。祝你好运。