iwtry 发表于 2005-4-21 08:36:25

如何在module中定义动态数组?

想在module中定义个大小待定的数组,大小从外面读入,试了一些方法,都不能搞定,希望高人帮忙!谢谢~

fenglinxiaoxue 发表于 2005-4-21 11:44:06

Re:如何在module中定义动态数组?

我用下面代码试了试,好像就是不行
module readbnd
contains
subroutine flxx(d,m,n)
implicit none
integer:: i,j,m,n
real,allocatable:: d(:,:)
open(1,file='data.dat')
read(1,*) m,n
allocate(d(m,n))
d=3.0
write(1,*)((d(m,n),j=1,n),i=1,m )
end subroutine flxx
end

错误提示如下:(问题在程序第6行)
D:\fortran workshop\read123\main.f90(6) : Error: A dummy argument name is invalid in this context.

fenglinxiaoxue 发表于 2005-4-21 11:46:20

Re:如何在module中定义动态数组?

我用下面代码试了试,好像就是不行
module readbnd
contains
subroutine flxx(d,m,n)
implicit none
integer:: i,j,m,n
real,allocatable:: d(:,:)
open(1,file='data.dat')
read(1,*) m,n
allocate(d(m,n))
d=3.0
write(1,*)((d(m,n),j=1,n),i=1,m )
end subroutine flxx
end

错误提示如下:(问题在程序第6行)
D:\fortran workshop\read123\main.f90 : Error: A dummy argument name is invalid in this context.

freefrompassion 发表于 2005-4-21 13:07:06

Re:如何在module中定义动态数组?

我的做法是
module readbnd
real,allocatable:: d(:,:)
contains
subroutine flxx
    implicit none
    integer:: i,j,m,n
    open(1,file='data.dat')
   read(1,*) m,n
   if(.not.allocated(d))allocate(d(m,n))
   d=3.0
   write(1,*)((d(m,n),j=1,n),i=1,m )
   if(allocated(d)) deallocate(d)
end subroutine flxx
end module readbnd

program main
use readbnd
call flxx
end

data.dat
10   10
输出是
10   10   3.000000       3.000000       3.000000       3.000000       3.000000   
   3.000000       3.000000       3.000000       3.000000       3.000000   
   3.000000       3.000000       3.000000       3.000000       3.000000   
   3.000000       3.000000       3.000000       3.000000       3.000000   
   3.000000       3.000000       3.000000       3.000000       3.000000   
   3.000000       3.000000       3.000000       3.000000       3.000000   
   3.000000       3.000000       3.000000       3.000000       3.000000   
   3.000000       3.000000       3.000000       3.000000       3.000000   
   3.000000       3.000000       3.000000       3.000000       3.000000   
   3.000000       3.000000       3.000000       3.000000       3.000000   
   3.000000       3.000000       3.000000       3.000000       3.000000   
   3.000000       3.000000       3.000000       3.000000       3.000000   
   3.000000       3.000000       3.000000       3.000000       3.000000   
   3.000000       3.000000       3.000000       3.000000       3.000000   
   3.000000       3.000000       3.000000       3.000000       3.000000   
   3.000000       3.000000       3.000000       3.000000       3.000000   
   3.000000       3.000000       3.000000       3.000000       3.000000   
   3.000000       3.000000       3.000000       3.000000       3.000000   
   3.000000       3.000000       3.000000       3.000000       3.000000   
   3.000000       3.000000       3.000000       3.000000       3.000000   
   3.000000       3.000000       3.000000       3.000000       3.000000

iwtry 发表于 2005-4-21 15:32:45

Re:如何在module中定义动态数组?

谢谢,谢谢freefrompassion ,现在已经搞定,

hillyuan 发表于 2005-4-21 22:06:23

Re:如何在module中定义动态数组?

freefrompassion的方法是可行的,但单在子程中定义也是可能的。

subroutine flxx(d,m,n)   -〉m,n多余,SIZE函数可测试数组大小。
implicit none
integer:: i,j,m,n
real,allocatable:: d(:,:)   -〉改为POINTER变数即可。
open(1,file='data.dat')
read(1,*) m,n
allocate(d(m,n))
d=3.0
write(1,*)((d(m,n),j=1,n),i=1,m )
end subroutine flxx
页: [1]
查看完整版本: 如何在module中定义动态数组?