This question already has an answer here:
Can the shape of an array in an interface match multiple fixed array size?

(1个答案)


3年前关闭。




我正在尝试使用radford ex4p4p1.f90将DDE求解器用于Fortran90 source中的dde_solver_m_unix.f90。我相信我应该能够简单地下载并进行零更改编译,但是却出现以下错误:
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)?

最佳答案

在DKL_ *函数定义期间使用的INTERFACE块指定应将DDES的参数2、3和4假定为形状数组。但是ex4p4p1定义了DDES,其参数2、3和4是在编译时固定的数组。这会导致与Intel编译器的混淆,也可能是gfortran发生的情况。
尝试使用

DOUBLE PRECISION, DIMENSION(:) :: Y,DY
DOUBLE PRECISION, DIMENSION(:,:) :: Z

代替
DOUBLE PRECISION, DIMENSION(NEQN) :: Y,DY
DOUBLE PRECISION, DIMENSION(NEQN,NLAGS) :: Z

在DDES的接口(interface)块中。祝好运。

关于compiler-errors - 通用 'dde_solver'没有特定功能。,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46756638/

10-11 16:57