【问题标题】:FORTRAN pointer encompassing multiple arrays包含多个数组的 FORTRAN 指针
【发布时间】:2013-11-14 23:35:25
【问题描述】:

我正在做一个项目,我在第 1、第 2 和第 3 维中有许多大小相同的数组,尽管第 4 维中的大小可能会有所不同。

我想通过构造一个连接这些数组的指针来对这些数组进行分组。

为了不那么抽象,假设我有 2 个数组:

A (size: N1 x N2 x N3 x N4a)
B (size: N1 x N2 x N3 x N4b)

在项目的先前版本中,这些数组被复制到大小为N1 x N2 x N3 x (N4a + N4b) 的数组 C 中,然后将其传递给子例程以在该数组上执行 ffts。

我想避免这种复制操作并构造一个指针p,它包含与先前版本中的数组 C 相同的数据,但没有显式复制和额外的内存分配。

这在 Fortran 中可行吗?

【问题讨论】:

    标签: arrays pointers fortran


    【解决方案1】:

    没有。一个指针不能同时指向两个独立的对象。

    根据您的情况,可能可行的是从一个维度为 (N1,N2,N3,N4a+N4b) 的数组开始,然后将 A 和 B 关联(指针、存储或参数)到相关的以某种方式作为初始大数组的一部分。

    REAL, TARGET :: c(N1,N2,N3,N4a+N4b)
    REAL, POINTER :: a(:,:,:,:)
    REAL, POINTER :: b(:,:,:,:)
    
    a => c(:,:,:,:n4a)
    b => c(:,:,:,n4a+1:)
    ! Go forth and do things with a and b.
    
    ! Then later do things with c.
    

    在黑暗时期,在 Fortran 进行任何类型的动态内存分配之前,这种“一个数组统治它们”然后被分割出来的方式很常见。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-06
      • 1970-01-01
      • 2015-12-05
      • 1970-01-01
      • 2013-09-02
      • 1970-01-01
      • 1970-01-01
      • 2020-07-02
      相关资源
      最近更新 更多