首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Fortran 90:可分配数组不能出现在"EQUIVALENCE“中

Fortran 90:可分配数组不能出现在"EQUIVALENCE“中
EN

Stack Overflow用户
提问于 2012-09-13 20:05:47
回答 1查看 1.3K关注 0票数 2

我有一个很大的数组,这个数组太大了,我不得不在fortran中使用"allocatable“和allocatable。例如,

代码语言:javascript
运行
复制
complex(8),allocatalbe :: E0(:, :, :)
allocate(E0(1000,1000,1000))

我需要在我们的代码中将数组的形式从E0(1000,1000,1000)转换为E1(1000*1000,1000),即将三维数组E0(M,N,L转换为其对应的二维E1(M*N,L)。但是,我不能使用语句:Equivalence (E0,E1),因为它是'allocatable‘。由于内存有限,我不喜欢定义或分配另一个数组,比如E1(M*N,L)

有没有人有什么方法可以实现的:Equivalence(E0,E1)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-14 08:51:15

将秩3数组传递给具有显式形状或假定大小为秩2的伪参数的特定过程。实际参数和伪参数之间的序列关联将为您提供等价性。

代码语言:javascript
运行
复制
PROGRAM remap
  IMPLICIT NONE
  REAL, ALLOCATABLE :: a(:,:,:)
  INTEGER :: i
  !****
  ALLOCATE(a(2,3,4))
  a = RESHAPE( (/ (REAL(i), i=1, PRODUCT(SHAPE(a))) /), SHAPE(a))
  CALL remapped(a, SIZE(a,1) * SIZE(a,2), SIZE(a,3))
CONTAINS  
  SUBROUTINE remapped(b,n,m)
    INTEGER, INTENT(IN) :: n, m
    REAL, INTENT(IN) :: b(n,m)
    !****
    ! Should print the first "page" of the actual argument.
    PRINT "(99(F6.1,:,' '))", b(:,1)
  END SUBROUTINE remapped
END PROGRAM remap

更高版本的标准增加了指针等级重新映射的选项。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12405863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档