Fortran 90假设形状数组可以作为可选参数吗?

时间:2014-03-28 17:52:39

标签: fortran fortran90 optional

注意:我还在调查这个问题 - 请不要再调查了 - 错误可能在其他地方

我希望子程序的参数是可选的,但该参数也恰好是假设形状数组。当我尝试编译包含此子例程的模块时,出现以下错误:

PGF90-S-0189-参数3到(例程):标量实际参数与数组伪参数(位置)的关联

例程如下所示:

SUBROUTINE EXAMPLE(A, B, C)
   IMPLICIT NONE
   INTEGER, INTENT(IN) :: A, B
   INTEGER, OPTIONAL, DIMENSION(:), INTENT(IN)   :: C
   INTEGER :: TEST

   IF (PRESENT(C)) THEN
      TEST=C(1)
      PRINT *,TEST
   ELSE
      PRINT *,A,B
   ENDIF

END SUBROUTINE EXAMPLE

它包含在一个模块中。当我尝试使用来自子程序的两个参数来调用它时,我得到了错误,该子程序正在使用该模块。

我在波特兰集团论坛上发现了一个可能相关的问题:

http://www.pgroup.com/userforum/viewtopic.php?t=624&sid=d76fdf8ca2bf4fc3109f4f49b1de0ad7

答案归结为用户使用未分配的可选参数 - 我不知道这是否适用于我的情况,因为我没有在IF之外使用'C'(现在(C))阻止,但是在将变量定义为假定的形状时可能会有一个隐式分配,当它没有在第一个位置传递时不能执行吗?

1 个答案:

答案 0 :(得分:0)

此问题现已解决 - 您确实可以使用假定的形状数组作为可选参数。正如评论中所指出的那样 - 错误源于旧版本的源文件,该文件由于错误而未被预处理步骤重新生成。结果,调用不是我想象的那样 - 它实际上包含一个整数作为第三个参数。

感谢大家的帮助。