函数参考正在调用子例程



我有CERN程序来计算复杂参数的伽马功能,但是由于缺乏Fortran知识,我无法运行该程序。

我有以下程序:

PROGRAM Console1
  IMPLICIT REAL *8 (A-H,O-Z) 
  COMPLEX *16 gama,z,w 
  z=cmplx(0,0.707106781186548d0) 
  gama=cgamma(0,z,w) 
END
SUBROUTINE cgamma(mo, z, w) 
  INTEGER, PARAMETER :: dp = SELECTED_REAL_KIND(14, 60)
  INTEGER, INTENT(IN)       :: mo
  COMPLEX (dp), INTENT(IN)  :: z
  COMPLEX (dp), INTENT(OUT) :: w
... the subroutine code here 
END SUBROUTINE cgamma

,然后出现错误

错误#6553:功能参考正在调用子例程子程序。[cgamma]

查看错误消息:

函数参考正在调用子例程子程序。

SUBROUTINE cgamma(mo, z, w)
END SUBROUTINE

cgamma定义为(在本例外)子例程。

在程序中

gama=cgamma(0,z,w)

引用cgamma作为函数(将要分配给gama的结果返回)。这是错误消息引用的不相容性。

要解决此问题,您需要使用call语句引用子例程,或将cgamma更改为函数,返回适当的结果。

鉴于过程的设计(三个参数)我希望该功能是为了。

从技术上讲,它不是程序。我将在下面的链接中重新播放该文档的一部分,请注意SUBROUTINE cgammaEND SUBROUTINE cgamma作为非常的第一个和非常的最后行。从技术上讲,该文件不是一个fortran程序,它只是一个子例程,它是较大程序的一部分。

SUBROUTINE cgamma(mo, z, w)
   IMPLICIT NONE
!  variables and code not worth posting to illustrate what is happening
   60 w = CMPLX(w1, w2, KIND=dp)
   RETURN
   70 w = (0.0_dp, 0.0_dp)
   RETURN
   CONTAINS
   FUNCTION rexp(x) RESULT(fn_val)
!     extra code here, do not need to post it
      fn_val = -1.0_dp
      RETURN
   END FUNCTION rexp
END SUBROUTINE cgamma

在fortran中,文件的第一行和最后一行将是 PROGRAM whateverEND

因此,您要么需要获取完整程序,并使用称此cgamma subroutine的程序,要么编写自己的fortran PROGRAM,然后称此 cgamma subroutine。

最新更新