想象一下,我们有3个相互调用的函数: func1(u,Y,is_D)调用func2,func2调用func3。 并且它们都具有相同的可选变量。
仅在func3中执行带有可选var的操作。接下来的问题是:我可以传递变量而不检查是否存在。只能在最后一个函数func3上执行检查吗?在ifort编译器中它可以工作。但是我想了解是否标准?它是否可以在其他Fortran 90编译器中使用,因为在群集中,用户必须使用提供的编译器?
第二个问题是我可以检查可选变量的存在和值,例如,下一种形式:IF(PRESENT(is_D) .AND. is_D.EQ.1)
。在检查第一个子条件是否为TRUE后,我如何理解将检查下一个子条件并可以工作,但是如果为FALSE,它将停止检查下一个语句吗? 有什么标准吗?
FUNCTION func1 (u1, is_D, u2) RESULT(res)
IMPLICIT NONE
REAL (pr), DIMENSION (N,M),INTENT(IN) :: u1
REAL (pr), DIMENSION (N,M),INTENT(IN), OPTIONAL :: u2
REAL (pr), DIMENSION (N) :: res
INTEGER, OPTIONAL :: is_D
res= func2(u1,is_D,u2)
END FUNCTION func1
FUNCTION func2 (u1, is_D, u2) RESULT(res)
IMPLICIT NONE
REAL (pr), DIMENSION (N,M),INTENT(IN) :: u1
REAL (pr), DIMENSION (N,M),INTENT(IN), OPTIONAL :: u2
REAL (pr), DIMENSION (N) :: res
INTEGER, OPTIONAL :: is_D
res = func3(u1,is_D,u2) +func3(u1+1,is_D,u2)
END FUNCTION func2
FUNCTION func3 (u1, is_D, u2) RESULT(res)
IMPLICIT NONE
REAL (pr), DIMENSION (N,M),INTENT(IN) :: u1
REAL (pr), DIMENSION (N,M),INTENT(IN), OPTIONAL :: u2
REAL (pr), DIMENSION (N) :: res
INTEGER, OPTIONAL :: is_D
IF (present(is_D).AND. PRESENT(u2)) THEN
res = SUM (u2, DIM=2)
ELSE
res = SUM (u1,DIM=2)
END IF
END FUNCTION func3