加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

fortran模块使用来传递动态数组

(2016-04-08 11:07:49)
标签:

module

参数传递

分类: Fortran
假如想使自己所有的参数通过文件来传递,很多参数出现在主程序里面是一件很头疼的事情,程序非常不简洁。所以我想到用模块功能。
我所遇到的一个问题是,未知台站个数nst,以及波形长度wavelength,以前想把这几个参数单独用一个get_parameter
子程序来读入,但碰到一个二维数组seis(nst,wavelength)需要存储波形,并且这个数组是动态的,因为你事先并不知道台站数和波形长度,对于没有使用module的子程序怎么将这个数组传递到主程序和其他程序中,以前都是定义一个非常大的静态数组来传递不太可行。下面我用module来解决数组传递的问题。
MODULE station_info
INTEGER :: nst
INTEGER :: wavelength
REAL,ALLOCATABLE  ::  SEIS(:,:)
ENDMODULE

PROGRAM main
use station_info
call get_parameter()
write(*,*) nst
write(*,*)
write(*,*) SEIS
END

SUBROUTINE get_parameter()
use station_info
open(20,file='wave.info')
read(20,*) nst,wavelength
allocate(seis(nst,wavelength))
do i=1,nst
do j=1,wavelength
read(20,*) seis(i,j)
end
end
ENDSubroutine
将代码上述代码写在一个pr.f90的文件里面,然后新建一个wave.info输入文件如
3,3
1
2
3
4
5
6
7
8
9
编译 gfortran -o pr  pr.f90运行./pr
出来
3

1 4 7 2 5 8 3 6 9  
也就是说明我们这个数组就可以在主程序里面使用了,给人感觉是一种全局变量.

当自己定义的参数很多时,并且很多参数都在子程序中不变,如台站的名称,经纬度,高程,波形的采样率,窗口大小,采样点数等等。我们都可用一个module来定义,定完以后想用就use 该module,舍去很多子程序的接口中的参数。变得更加简洁。

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有