可用于一维和二维几何的子程序

Subroutine usable in both 1D and 2D geometry

我想编写一个可用于一维或二维几何的子程序。 因此,我有仅在后一种情况下使用的变量。

我希望我能用那种风格写一个声明部分:

real ( kind = double ) :: uleft,vleft,uright,vright
real ( kind = double ) :: distanceinx
real ( kind = double ) :: ...
if (ndim == 2) then
  real ( kind = double ) :: ulow,vlow,uup,vup
  real ( kind = double ) :: distanceiny
end if

但它无法编译。

是否有语法可以以正确的方式执行我想执行的操作? 在这两种情况下(ndim = 1 或 2),代码的很大一部分是相似的,所以我认为这是有道理的。

只需将变量留在那里,不要在 1D 中使用它们。您建议的语法不存在,我不知道任何其他类似的语法。

在 Fortran 2003 中,您还可以使它们可分配,但这仅对数组值得,以节省一些 space。

不关心堆栈上几个未使用的字节。它们可以在 1D 中保持未使用状态。

您可以将一维数组视为具有 Nx1 的特殊二维数组。然后,您始终可以使用代码的 2D 版本。您仍然可以检查第二个维度的长度以确定维度。这甚至允许扩展到三维!

Routines/functions 与 norm2 一样也适用于这两种类型,因此这可以进一步简化您的代码。