我有一个包含有关多维数组信息的文件。我创建了一个子程序来读取文件和副本 数组数据到数组变量。我的问题是我必须首先在子程序之外首先分配数组的维度。有没有办法在我的子程序中分配数组,因为数组维度也存储在数据文件中。
目前我有以下代码,我首先分配多维数组,然后通过调用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)
答案 0 :(得分:3)
在现代Fortran中(自Fortran 95的技术报告,包含在Fortran 2003中),过程的伪参数可能具有allocatable
属性。然后,该过程可以改变该伪参数的分配状态。
这要求实际/有效参数也具有allocatable
属性,并且伪参数的分配状态的任何更改都会反映在实际参数中。调用后保留数组形状和值,正如人们对其他参数所期望的那样。
因此,将数组的分配留给子程序是完全合适的。但有些事情需要注意:
intent(out)
属性的伪参数将在条目(以及实际参数)上被释放; intent(in)
或intent(inout)
属性的伪参数最初将采用实际参数的边界/分配状态。