从数据文件中分配多维数组

时间:2015-08-26 09:41:55

标签: arrays memory-management fortran

我有一个包含有关多维数组信息的文件。我创建了一个子程序来读取文件和副本 数组数据到数组变量。我的问题是我必须首先在子程序之外首先分配数组的维度。有没有办法在我的子程序中分配数组,因为数组维度也存储在数据文件中。

目前我有以下代码,我首先分配多维数组,然后通过调用selcs填充它。

Allocate (c3d(nu,nv,nw))
Call selcs (c3d, nm, cpht, rsl, st)
c3d = c3d * 2.0
Deallocate (c3d)

我希望子程序selcs本身可以分配 c3d的内存使用文件中存在的维度信息,然后像以前一样使用selcs之外的数组。

Call selcs (c3d, nm, cpht, rsl, st)
c3d = c3d * 2.0
Deallocate (c3d)

1 个答案:

答案 0 :(得分:3)

在现代Fortran中(自Fortran 95的技术报告,包含在Fortran 2003中),过程的伪参数可能具有allocatable属性。然后,该过程可以改变该伪参数的分配状态。

这要求实际/有效参数也具有allocatable属性,并且伪参数的分配状态的任何更改都会反映在实际参数中。调用后保留数组形状和值,正如人们对其他参数所期望的那样。

因此,将数组的分配留给子程序是完全合适的。但有些事情需要注意:

  • 使用可分配的伪参数,在引用范围中将需要显式接口;
  • 具有intent(out)属性的伪参数将在条目(以及实际参数)上被释放;
  • 具有intent(in)intent(inout)属性的伪参数最初将采用实际参数的边界/分配状态。