【发布时间】:2018-02-01 04:10:46
【问题描述】:
我想在 fortran(90) 中将两个数组 A 和 B 的子数组相乘
A 是 4d,B 是 5d。最初我尝试过,但编译器不喜欢它
C(:,:,:,:)=A(:,:,:,:)*B(:,:,:,:,1)
有没有一种简单的方法可以将 B(:,:,:,:,1) 提取为 4d 数组,以便我可以进行二元运算 *?
编辑 - 来自编译器的错误消息
tracer1_field(:,:,:,:) = tbase(:,:,:,:,1)*domain(:,:,:,:) ! *12*12*!2 due to grid size.
1
Error: Rank mismatch in array reference at (1) (5/4)
【问题讨论】:
-
编译器是怎么抱怨的?如果有的话,错误信息是什么?您使用的是什么 Fortran 习语以及使用了哪些编译器和/或编译器选项?
-
@PierredeBuyl 我会将错误消息添加到原始帖子中。我目前正在使用 gfortran 进行编译,尽管稍后我可能会转到 cray 编译器。我在 f90 中编写它,因为这是模型的原始代码库中编写的,但我对 Fortran 比较陌生,所以不确定习语之间的区别
-
您可以在帖子中添加数组的声明行吗?错误似乎是
tbase排名第 4,而不是其他任何东西。我会先检查一下。 -
@PierredeBuyl 你说得对,我把 tbase 放入了错误的分配函数中,谢谢!