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

FORTRAN: passing a dummy argument to a subroutine

我是 Fortran 的新手,有一个问题需要解决。

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

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

子程序声明:

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

使用伪参数调用:

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

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

您可以在 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)

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

您可以使用 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