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
我是 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