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)
    属性的伪参数最初将采用实际参数的边界/分配状态

是(自F2003或F95+TR15581起),可以分配例程的伪参数(对应于可分配的有效参数)。但是你肯定知道:我想我遗漏了你问题中的一些重要内容。当子例程是一个返回多维数组的函数时,使用allocate有什么区别?它的工作方式是否与子程序相同,以便我也可以如图所示使用它,并将代码替换为
c3d=selcs(c3d、nm、cpht、rsl、st)