Arrays 从数据文件分配多维数组
我有一个包含多维数组信息的文件。我已经创建了一个子例程来读取文件并进行复制 将数组数据转换为数组变量。我的问题是,我必须首先在子例程之外分配数组的维数。是否有办法在我的子程序中分配数组,因为数组维度也存储在数据文件中 目前我有以下代码,首先分配多维数组,然后通过调用Arrays 从数据文件分配多维数组,arrays,memory-management,fortran,Arrays,Memory Management,Fortran,我有一个包含多维数组信息的文件。我已经创建了一个子例程来读取文件并进行复制 将数组数据转换为数组变量。我的问题是,我必须首先在子例程之外分配数组的维数。是否有办法在我的子程序中分配数组,因为数组维度也存储在数据文件中 目前我有以下代码,首先分配多维数组,然后通过调用selcs填充它 Allocate (c3d(nu,nv,nw)) Call selcs (c3d, nm, cpht, rsl, st) c3d = c3d * 2.0 Deallocate (c3d) 我更愿意让子程序selcs
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)
在现代Fortran中(因为Fortran 95的技术报告包含在Fortran 2003中),过程的伪参数可能具有allocatable
属性。然后,该过程可以更改该伪参数的分配状态
这要求实际/有效参数还具有allocatable
属性,并且对伪参数的分配状态的任何更改都会反映在实际参数中。数组形状和值在调用后保留,这与其他参数所期望的一样
因此,将数组的分配留给子例程是完全合适的。但需要注意的是:
- 对于可分配的伪参数,引用范围中需要显式接口李>
- 带有
属性的伪参数将在条目上释放(实际参数也是)李>intent(out)
- 带有
或intent(in)
属性的伪参数最初将采用实际参数的边界/分配状态intent(inout)
c3d=selcs(c3d、nm、cpht、rsl、st)
。