接受任意大小的 rank-1 数组的 Fortran 函数

Fortran function that accepts arbitrary sized rank-1 arrays

如何编写接受任意大小数组的函数,前提是它们的等级为 1? 这正是内在函数 shape 可以做到的,所以我认为我的要求并不过分。 实际上,函数 shape 做的更多。它可以(显然)接受任何形状的数组,即沿每个维度的任意等级和任意长度。

本题旨在写一个函数sub2ind对应MATLAB同名函数

我不确定我是否正确理解了你的问题,但是自从 Fortran 函数被发明以来,函数接受任何数组大小在 Fortran 中是可能的。 (尽管在 FORTRAN 77 之前有时会涉及一些技巧)。任何教科书或教程都会处理这个问题。

现代风格的设想:

  function f(a)
    real :: a(:)
    do i = 1, size(a)
    ...
  end functions

显式尺寸:

  function f(n, a)
    real :: a(n)
    do i = 1, n
    ...
  end functions

假定尺寸:

  function f(n, a)
    real :: a(*)
    do i = 1, n
    ...
  end functions

对于假定的形状,显式接口(最好使用模块)是必要的。