循环使用子程序内的数组

时间:2014-03-24 18:02:16

标签: arrays fortran90 subroutine

我对fortran中子程序中的循环有疑问。

如果我把它作为子程序,那么我希望变量test成为1到5的数组。

P.S。 type3定义为real, dimension(5,1)

subroutine build(test)
    type(typelist)     :: test
    do i = 1, 5
        test%type3(i)         = i 
end subroutine build

但是这会产生错误;

    ||Error: Rank mismatch in array reference  (1/2)|

当我在测试%type3之后删除“(i)”时,它会起作用,但结果是5.000 5.000 5.000 5.000 5.000。因此它只将最后一个循环的值赋给数组中的所有条目。 如果我删除了%test,程序就不知道变量测试的类型了,它给出了

 ||Error: Unclassifiable statement  |

有人能告诉我我做错了吗?

1 个答案:

答案 0 :(得分:2)

您是否忘记分配test%type3(i,1) = i

由于type3是一个2D数组,因此需要两个索引来分配值。当您键入test%type3 = i时,您将使用相同的值同时分配所有元素。这就是为什么最终你得到所有5.0

PS。 ENDDO声明在哪里?