Vector作为Fortran过程的输入,每个元素都有单独的参数

时间:2018-02-08 15:23:31

标签: fortran arguments

我想知道Fortran是否有办法做这样的事情:

program test 
real(kind=4),dimension(2) :: vector

vector(1)=3
vector(2)=4

print *, func(vector)
end program test

FUNCTION func(x,y)
func=x+y
END FUNCTION func

这是使用向量作为函数的输入,使得函数func自动获得vector(1)xvector(2)y }。

1 个答案:

答案 0 :(得分:0)

你的问题没有明确定义,虽然它可能完全违背了SO的基本公理,但我提出了一个简短的“面向建议”的答案。

Fortran承认了几个“样式”,包括(除了数组的处理)示例中的一个样式,其中函数是在没有上下文的情况下定义的,并且预计会在链接时找到。

我的建议是熟悉现代Fortran。有一些很好的资源,其中包括:

  1. http://www.fortran90.org/
  2. https://en.wikipedia.org/wiki/Fortran_95_language_features
  3. http://people.ds.cam.ac.uk/nmm1/Fortran/index.html
  4. http://fortranwiki.org/fortran/show/HomePage
  5. 您需要的最相关的更新是在模块中定义您的功能或在程序中“包含”它。我在下面展示了相应的例子:

    program test
      implicit none
    
      integer, parameter :: rk = selected_real_kind(6)
    
      real(kind=rk),dimension(2) :: vector
    
      vector(1)=3
      vector(2)=4
    
      print *, func(vector)
    
    contains
    
      function func(x)
        real(kind=rk), intent(in) :: x(:)
        real(kind=rk) :: func
    
        func = x(1) + x(2)
    
      end function func
    
    end program test
    

    我所做的改变:

    1. 使用implicit none开始您的代码。对于任何新代码,这被认为是强制性的,因为如果省略声明或在变量名中输入拼写错误,它会阻止编译器“神奇地”分配变量类型。
    2. 根据selected_real_kind内在函数使用命名常量。
    3. contains部分之后将功能“放入”程序中。这允许编译器检查您是否正确调用了该函数。
    4. 对函数的参数使用“假定形状”数组。
    5. 正确声明函数和函数本身的参数。
    6. 您可以考虑:首先使用两个参数,但必须将函数调用为func(vector(1), vector(2)),传递向量,但使用sum intrisic作为func = sum(x)(其中) x是一个数组)。