我对Fortran很陌生并且有一个问题需要解决。
我在某个地方声明了一个子程序,有时在我的程序中,我不想计算该子程序的特定部分。我可以复制子程序,但不是整齐的编程。
我想解决这个问题的方法是传递一个伪参数:
子程序声明:
subroutinename(...,r,dr,d2r)
使用伪参数调用:
call subroutinename(...,r,dr,dummy)
IF (d2r.NE.dummy)...
我试图实施,但我遇到了问题。 d2r是一个矩阵,那么如何传递一个可以作为IF语句部分逻辑的值呢?
答案 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