找回密码
 注册
Simdroid-非首页
查看: 195|回复: 5

[3. Fortran] 如何在module中定义动态数组?

[复制链接]
发表于 2005-4-21 08:36:25 | 显示全部楼层 |阅读模式 来自 大连理工大学
想在module中定义个大小待定的数组,大小从外面读入,试了一些方法,都不能搞定,希望高人帮忙!谢谢~
发表于 2005-4-21 11:44:06 | 显示全部楼层 来自 同济大学

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

Simdroid开发平台
我用下面代码试了试,好像就是不行
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.
发表于 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.
发表于 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
 楼主| 发表于 2005-4-21 15:32:45 | 显示全部楼层 来自 大连理工大学

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

谢谢,谢谢freefrompassion ,现在已经搞定,
发表于 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
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-11-1 23:32 , Processed in 0.070928 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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