本帖最后由 Viola 于 2024-3-28 00:28 编辑
初学Fortran,边用边学,还请大佬们不吝赐教。我在给程序新加了一个module并调用后,没有编译错误但出现了问题:为什么进入子程序后,H的维度变成了(1:1),而不是子程序中声明的DIMENSION(N)呢?
我简化了一下出现问题的程序:
[Fortran] 纯文本查看 复制代码 MODULE Source1
IMPLICIT NONE
PUBLIC :: sub_a
CONTAINS
SUBROUTINE sub_a (N,H)
INTEGER, PARAMETER :: wp = SELECTED_REAL_KIND(12,307)
INTEGER, INTENT(in) :: N
REAL(wp), DIMENSION(N), INTENT(inout) :: H
INTEGER::k
DO k = 2,N
H = H+H
END DO
END SUBROUTINE sub_a
END MODULE Source1
[Fortran] 纯文本查看 复制代码 PROGRAM Console1
USE Source1
IMPLICIT NONE
INTEGER, PARAMETER :: wp = SELECTED_REAL_KIND(12,307)
INTEGER, PARAMETER :: k = 20
REAL(wp), DIMENSION(:), ALLOCATABLE :: v
ALLOCATE(v(k))
v(:) = 0.0
CALL sub_a (k,v)
END PROGRAM Console1
|