FORTRAN:将伪参数传递给子例程

时间:2015-02-16 11:16:19

标签: fortran

我对Fortran很陌生并且有一个问题需要解决。

我在某个地方声明了一个子程序,有时在我的程序中,我不想计算该子程序的特定部分。我可以复制子程序,但不是整齐的编程。

我想解决这个问题的方法是传递一个伪参数:

子程序声明:

subroutinename(...,r,dr,d2r)

使用伪参数调用:

call subroutinename(...,r,dr,dummy)
   IF (d2r.NE.dummy)...

我试图实施,但我遇到了问题。 d2r是一个矩阵,那么如何传递一个可以作为IF语句部分逻辑的值呢?

2 个答案:

答案 0 :(得分:1)

您可以在Fortran 90及更高版本中使用可选参数。

subroutine subroutinename(...,r,dr,d2r)
  real, optional :: d2r(:,:)

  if (present(d2r)) then
    !do the computation
  end if

你用d2r参数调用它而不是

call subroutinename(...,r,dr,d2r)

call subroutinename(...,r,dr)

可选参数需要显式接口。通过将子程序放在模块中可以最好地确保这一点。

答案 1 :(得分:0)

您可以使用optional参数:

subroutine subroutinename(r,dr,d2r)
  ! 
  real, intent(in)            :: r(:)
  real, intent(out)           :: dr(:)
  real, intent(out), optional :: d2r(:)

  ! ...
  if ( present(d2r) ) then
    ! Only execute this if d2r is present
  endif
  ! ...
end subroutine