【发布时间】:2016-11-21 15:00:21
【问题描述】:
我在模块中创建了一个类型model,然后声明了一个具有该类型的变量md。在模块中包含的子程序中,上面md的声明被忽略了,我必须再次显式声明。
在主程序中我不需要声明md 的类型,use 语句似乎可以工作。谁能解释一下为什么子程序会忽略md的类型声明?
这里是代码。我在 Linux 上使用 gfortran 编译器。
program main
use struc_model
call mod_gen(md)
do i=1, md%ndof
write(*,*) 'row =', i
write(*,*) 'm=', md%m(i,:)
end do
end
module struc_model
type model
integer :: ndof
real*8, allocatable, dimension(:,:) :: m
end type
type (model) :: md
contains
subroutine mod_gen(md)
! for some reason have to declare type of md again
! declaration above is ignored
type (model) :: md
md%ndof=4
allocate(md%m(md%ndof,md%ndof))
md%m=0.d0
do i=1, md%ndof
md%m(i,i)=1.d0
end do
end subroutine
end module
【问题讨论】:
-
子程序
md中的变量mod_gen是一个伪参数,而不是模块变量。你打算发生什么?您希望子程序修改模块变量还是只修改虚拟变量?
标签: fortran