arrays - 如何将可分配数组传递给 Fortran 中的子例程

标签 arrays fortran fortran90 gfortran

以下代码返回段错误,因为我试图传递的可分配数组没有被正确识别(大小返回 1,而它应该是 3)。在此页面 (http://www.eng-tips.com/viewthread.cfm?qid=170599) 中,一个类似的示例似乎表明它在 F95 中应该可以正常工作;我的代码文件有一个 .F90 扩展名,但我尝试将其更改为 F95,并且我正在使用 gfortran 进行编译。

我的猜测是问题应该出在我将可分配数组传递给子例程的方式上;我究竟做错了什么?

!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%!
 PROGRAM test
!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%!
 IMPLICIT NONE
 DOUBLE PRECISION,ALLOCATABLE :: Array(:,:)
 INTEGER                      :: iii,jjj

 ALLOCATE(Array(3,3))
 DO iii=1,3
 DO jjj=1,3
    Array(iii,jjj)=iii+jjj
    PRINT*,Array(iii,jjj)
 ENDDO
 ENDDO
 CALL Subtest(Array)

 END PROGRAM
!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%!
 SUBROUTINE Subtest(Array)
 DOUBLE PRECISION,ALLOCATABLE,INTENT(IN) :: Array(:,:)
 INTEGER                                 :: iii,jjj

 PRINT*,SIZE(Array,1),SIZE(Array,2)
 DO iii=1,SIZE(Array,1)
 DO jjj=1,SIZE(Array,2)
    PRINT*,Array(iii,jjj)
 ENDDO
 ENDDO

 END SUBROUTINE
!%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%!

最佳答案

这是一个简单的示例,它在模块中使用可分配的虚拟参数。

module arrayMod   
  real,dimension(:,:),allocatable :: theArray    
end module arrayMod

program test
   use arrayMod
   implicit none

   interface
      subroutine arraySub
      end subroutine arraySub
   end interface

   write(*,*) allocated(theArray)
   call arraySub
   write(*,*) allocated(theArray) 
end program test

subroutine arraySub
   use arrayMod

   write(*,*) 'Inside arraySub()'
   allocate(theArray(3,2))
end subroutine arraySub

关于arrays - 如何将可分配数组传递给 Fortran 中的子例程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13058743/

相关文章:

Java 小程序 : How do I draw a string in a square shape?

arrays - Perl:从数组创建哈希

fortran - Fortran 中未调用派生类型的自定义构造函数

c - ifort 链接器 undefined reference

用 ifort 和 icc 编译和链接 Fortran 和 C

javascript - 将新元素推送到多维数组javascript中的obj数组

C - 数组操作控制台应用程序以状态 0 终止

stack - Fortran : trying to make a minimal stack datastructure

gcc - 错误 : Invalid character in name at (1)

io - 读取未格式化的二进制文件: Unexpected output - Fortran90