我试图理解传递给我的一些Fortran代码。这是子例程中的参数列表:
INTEGER, INTENT(IN) :: NKT
REAL, INTENT(IN) :: NW2(NKT), VAR, SUE
REAL, INTENT(INOUT) :: MYSPC(NKT,NKT)
我理解NKT,VAR和SUE的声明。但"(NKT)"是什么意思?和#34;(NKT,NKT)"在NW2(NKT),MYSPC(NKT,NKT)? NKT是否指定了阵列NW2和MYSPC的尺寸?或者是说子程序将传递的值存储在NW2的NKTth位置?
我真的对变量之后的()的使用感到困惑。 FORTRAN 90"" FORTRAN 90" Nyhoff的书。任何帮助将不胜感激。
(代码是Wavewatch的修改部分,http://polar.ncep.noaa.gov/waves/wavewatch/)
答案 0 :(得分:5)
在您的示例中,NW2(NKT)是具有NKT元素的数组,MYSPC(NKT,NKT)是NKTxNKT 2D阵列。如果你的Fortran书没有涵盖这一点,那么,真的,得到一本更好的书。如果你有一些以前的编程经验,我推荐Metcalf,Reid和Cohen的“Modern Fortran Explained”。
答案 1 :(得分:3)
这是声明数组的旧样式。您的书可能会在dimension ()
之前强调::
的新风格。有些人可能认为这种风格的优点是数组和标量可以在同一个声明中混合,就像在示例的第二行中所做的那样。我更喜欢新款式。
答案 2 :(得分:1)
为了帮助您将其与您的书协调一致,请考虑
REAL, INTENT(IN) :: NW2(NKT)
REAL, INTENT(INOUT) :: MYSPC(NKT,NKT)
相当于
REAL, INTENT(IN), DIMENSION(NKT) :: NW2
REAL, INTENT(INOUT), DIMENSION(NKT,NKT) :: MYSPC
这两种方式在声明数组时说同样的事情。