Fortran Coder

查看: 7986|回复: 1
打印 上一主题 下一主题

[数值问题] 关于子程序的问题

[复制链接]

10

帖子

3

主题

0

精华

入门

F 币
24 元
贡献
33 点
跳转到指定楼层
楼主
发表于 2017-3-8 15:50:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 lihu8918 于 2017-3-8 15:52 编辑

以以下示例程序为例,为什么A和B数组shape不一样,但却可以在一块整体相加。
[Fortran] 纯文本查看 复制代码
module sub
  implicit none
  integer :: nx, ny
  real, allocatable :: B(:, :)
contains
  subroutine cal_u
    real :: A(0:nx+1, 0:ny+1)
    A = 1
    Call advect(A)
  end subroutine

  subroutine advect(AA)
    !real :: AA(:, :)
    real :: AA(0:nx+1, 0:ny+1)
    B = AA+1
  end subroutine
end module

program main
use sub
  nx=3
  ny=4
  allocate(B(nx, ny))
  B=1.0
  call cal_u
  write(*, *) B
end program

分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

954

帖子

0

主题

0

精华

大师

F 币
184 元
贡献
75 点

规矩勋章元老勋章新人勋章水王勋章热心勋章

QQ
沙发
发表于 2017-3-8 17:18:38 | 只看该作者
对于动态数组来说,编译器无法在编译时检查是否数组大小一致。
对于这种情况,是可以做整体计算的。此时,结果的大小以第一个数组为准。(当然我们并不推荐数组大小不一样的数组参与整体计算)
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2024-4-25 18:52

Powered by Tencent X3.4

© 2013-2024 Tencent

快速回复 返回顶部 返回列表