相关疑难解决方法(0)

函数返回类型不匹配

我正在尝试用 Fortran 重新编码旧的 C++ 程序以使用 LAPACK(我知道 C++ 确实有 LAPACK++,但我在安装它时遇到了很多麻烦,所以我放弃了)。

我最初没有任何编译问题,但那是当我将所有变量声明为REAL. 当我开始编写需要 LAPACK 的程序部分时,我发现传递给的所有参数都DSYEV需要是DOUBLE PRECISION. 因此,我尝试将所有内容更改为双精度(包括将所有硬编码数字更改为双精度对应数字,即 0.0 -> 0.0D0) 现在,当我尝试编译时,我得到的所有函数和子例程均出现以下错误已经写道:

    Error: Return type mismatch of function <function> at (1) (REAL(4)/REAL(8))
Run Code Online (Sandbox Code Playgroud)

我不确定这是从哪里来的,因为程序中的所有内容都已更改为双精度。

例如,我声明了以下内容:

double precision :: alpha(3),d(3),zeta1,zeta2
double precision :: A1(3),A2(3),D1(3),D2(3)
double precision :: PI
PI = 3.14159265359D0
alpha = (/0.109818D0, 0.405771D0, 2.22766D0/)
d = (/0.444635D0, 0.535328D0, 0.154329D0 /)

do 10 i=1,3

A1(i) = alpha(i)*zeta1**2.0D0
A2(i) = alpha(i)*zeta2**2.0D0
D1(i) = d(i)*(2.0D0*A1(i)/PI)**(3.0D0/4.0D0)
D2(i) = d(i)*(2.0D0*A2(i)/PI)**(3.0D0/4.0D0)

10  continue …
Run Code Online (Sandbox Code Playgroud)

fortran gfortran double-precision lapack

3
推荐指数
1
解决办法
3万
查看次数

Fortran 中数据类型不匹配

我在 Fortran 95 中编写了一个基本算法,使用通过称为理查森外推法的过程增强的中心差来计算函数的梯度(代码中规定了一个示例)。

function f(n,x)
! The scalar multivariable function to be differentiated

integer :: n
real(kind = kind(1d0)) :: x(n), f

f = x(1)**5.d0 + cos(x(2)) + log(x(3)) - sqrt(x(4))

end function f
!=====!
!=====!
!=====!

program gradient
!==============================================================================!
! Calculates the gradient of the scalar function f at x=0using a finite        !
! difference approximation, with a low order Richardson extrapolation.         !
!==============================================================================!

parameter (n = 4, M = 25)
real(kind = kind(1d0)) :: x(n), xhup(n), xhdown(n), …
Run Code Online (Sandbox Code Playgroud)

floating-point gradient double-precision fortran95

0
推荐指数
1
解决办法
2424
查看次数