从大小数组中分配数组

时间:2013-07-22 16:21:42

标签: multidimensional-array fortran dynamic-memory-allocation allocatable-array

假设我有一个像这样声明的维数:

integer, dimension(5) :: dims
dims = (/ 5, 6, 7, 8, 9 /)

我怎样才能最简单地使用此数组来分配另一个数组,使用dims的元素来指定相应尺寸的大小?假设第二个数组声明如下:

real, dimension(:,:,:,:,:), allocatable :: dset

为什么我不能做以下事情?

allocate (dset(dims(:)))

我尝试编译时得到Error: Rank mismatch in array reference

我意识到我可以这样做:

allocate (dset(dims(1), dims(2), dims(3), dims(4), dims(5)))

但我正在寻找更容易扩展的东西。

1 个答案:

答案 0 :(得分:1)

由于编译器提供的原因,您无法编写allocate(dset(dims(:))):它们具有不同的等级。如果您要打印shape(dims),则会在屏幕上看到5;如果您要打印shape(dset),您会看到0 0 0 0 05 6 7 8 9(取决于您是否分配); dims是排名为1的数组,dset是排名为5的数组。

因此,分配可分配的唯一方法是通过您认为不可扩展的显式方法。