对传递给子程序的函数的意图感到困惑

时间:2013-07-18 10:08:04

标签: fortran

在做以下积分时我不明白a,b的意图是不是IN  f的意图是什么?不应该在子程序中的所有参数变量都有意图吗?  这对我来说很困惑,即使它有用,我想知道怎么做?

另外,我看到x是intent(in),因为y在子例程中作为f的形式参数传递。我只是不确定子程序的意图是怎么回事 它似乎积分应该是意图(OUT)对吗?

    PROGRAM MAIN
    IMPLICIT NONE
    real*10 :: integral
    a= 1; b =2;n=1000;
    call simpson(f,a,b,integral,n)

    REAL*10 FUNCTION f(x)         
       REAL*10, INTENT(IN) ::  x
       f = x**(2.*charge)*exp(-a*x**2 -(b/2)*x**4)         
    END FUNCTION f


    SUBROUTINE simpson(f,a,b,integral,n)        
    REAL*10           :: integral, a, b 
    REAL*10           :: f 
    REAL*10 h, y ,s                                  
    integer n, i
    ! if n is odd we add +1 to make it even
    if((n/2)*2.ne.n) n=n+1
    ! loop over n (number of intervals)
    s = 0.0
    h = (b-a)/dfloat(n)
    do i=2, n-2, 2
        y   = a+dfloat(i)*h
    s = s + 2.0*f(y) + 4.0*f(y+h)
    end do
    integral = (s + f(a) + f(b) + 4.0*f(a+h))*h/3.0 
    end subroutine simpson
        end program main

1 个答案:

答案 0 :(得分:2)

如果未定义,Fortran编译器会将所有变量识别为intent inout

过程参数(例如f)不同,并非真正inoutinout。如果您指定f作为其中任何一个,您将收到一条错误消息,其中包含

的内容。
  Error: PROCEDURE attribute conflicts with INTENT attribute in 'f' at (1)