APP下载

VB与Fortran混合编程的重磁数据处理可视化系统

2016-09-02宋伟聪李德春邱开林陈德炙王耀辉

长江大学学报(自科版) 2016年17期
关键词:子程序数据处理编程

宋伟聪,李德春,邱开林,陈德炙,王耀辉



VB与Fortran混合编程的重磁数据处理可视化系统

宋伟聪,李德春,邱开林,陈德炙,王耀辉

利用VB与Fortran混合编程技术,开发了重磁数据处理可视化系统,该系统使用工程化管理,包含地形改正、坐标转换、空间域滤波、频率域滤波等许多常用模块。该系统充分发挥了2种编程语言的优点,不仅利用了Fortran程序资源,还扩展了一些新的功能,在实际应用中效率更高、交互性能更佳。

VB;Fortran;动态链接库;混合编程

VB与Fortran混合编程一般说来有2种方式[1]:一是利用VB的Shell函数来启动Fortran应用程序,由于Shell函数是以异步方式执行的,该执行方式不能等待Fortran程序结束而继续执行后续VB程序,容易使VB得不到最终的数据结果而出错[2];二是通过VB调用Fortran所生成的动态链接库来实现,该方式避免了第1种方式所出现的问题,同时还具有节省内存开支等众多优点。为此,该次编制重磁处理可视化系统选用第2种方式。使用动态链接库需要注意的问题主要是命名约定和参数传递约定,具体可以查询相关资料,在此不再赘述。

1 Fortran动态链接库生成

以一个计算两个数相加的简单例子介绍一下建立动态链接库的具体步骤,该例子将会输出一个动态链接库供后面的VB程序调用。

首先,启动Fortran Powerstation4.0,新建一个Project Workspace工程,之后选择工程的类型为Dynamic-Link Library,并输入工程的名字:add,然后确定。

其次,新建一个Fortran程序,写入相应的代码后存盘,之后插入到前面所建工程里面去,需要注意的是,将Fortran编写的计算程序编译成动态链接库,必须在Fortran子程序中声明该子程序为外部子程序,其语法为:!MSMYM ATTRIBUTES DLLEXPORT::add(//add为子程序名)。

最后,工程编译后即可生成add.dll动态链接库文件了。具体代码如下:

subroutine add(a,b,c)

!MSMYM ATTRIBUTES DLLEXPORT::add

integer*4 a,b,c

c=a+b

end

2 VB调用Fortran动态链接库

启动VB后,新建一个“标准EXE”工程,在窗体中添加3个文本框,再添加1个“计算”和1个“取消”按钮,然后编写相应代码。需要注意的是,Fortran动态链接库相对于VB过程而言是外部过程,因此在调用之前必须先声明该过程为Private Declare Sub <动态链接库子程序过程名> Lib“动态链接库文件名及所在路径”< Alias“过程别名”>(参数表)。具体VB代码如下:

Private Declare Sub add Lib “add.dll” Alias “_ADD@12” (ByRef a As Double, ByRef b As Double, ByRef c As Double)

Private Sub Command1_Click()

Dim a As Double, b As Double, c As Double

a = Val(Text1.Text)

b = Val(Text2.Text)

Call add(a, b, c)

Text3.Text = c

MsgBox“计算结果为:”&str(c)

End Sub

Private Sub Command2_Click()

End

End Sub

程序运行后,在文本输入框中输入a和b值,然后点击计算按钮,即可求得a与b之和(见图1)。

图1 示例程序运行界面

通过上述简单的例子可以看出,输入与输出都在VB中进行,而计算过程在动态链接库里面进行,充分发挥了VB与Fortran语言各自的优点。

3 系统使用方法

早期重磁数据处理程序基本上用Fortran编写,编译后在DOS下运行,计算速度较快,但操作极为不便,交互性能差。因此,笔者利用上述混合编程方法重新整理了早期开发的程序,把分散的程序集成到一起,编制了友好的、交互式的可视化系统。该系统使用工程化管理,包含地形改正、坐标转换、空间域滤波、频率域滤波、剖面处理、界面正反演、数据整理等常用模块,相比“黑屏”的DOS程序,该系统既拥有友好的、可视化界面,又具有图形显示功能,同时又很好地兼顾了Fortran的计算速度,不仅节省了系统资源,而且提高了工作效率。

以求取磁力异常的垂向一次导数为例,简单介绍该系统的使用方法:首先,运行重磁数据处理可视化系统(图2),新建一个工程,也可以不建立工程直接调用系统中的模块进行计算,建立工程是为了方便对每个工区大量数据文件的管理;建立工程后,在工程管理中网格数据节点上点击右键,添加待处理的磁力网格文件;然后运行频率域滤波模块下面的频率域处理主程序,输入各项参数;最后用鼠标点击确定按钮,程序开始运算,计算结束后程序会有提示信息。使用者可以变换不同参数反复计算,并且可以对计算结果进行预览,根据预览结果可以快速地调整处理参数,直至满意为止。

图2 重磁数据处理可视化系统运行界面

4 应用实例

利用Oasis Montaj软件及该次研发的重磁数据处理可视化系统进行新疆某工区的磁力数据处理,以期对软件应用效果进行简单的对比分析及可行性评价。Oasis Montaj软件是由加拿大Geosoft公司研制的综合地球物理数据处理及成图软件,其主要功能包括Oasis Montaj数据处理成图平台和专业地球科学数据处理解释功能。利用上述2种处理软件分别对试验数据进行了化极及上延等处理工作(见图3)。

由图3可以看出,笔者通过混合编程所研制的重磁数据处理可视化系统是可靠的,可以用来进行重磁数据的处理工作,同时其运算速度也达到了日常工作需要。一般针对一个300×300的离散网格数据,对其进行上延、化极、求导等工作,用时一般不超过1s,充分说明了混合编程的优势所在,在不降低甚至提高原有程序运算速度的基础上,同时提供了友好的、可交互的软件界面,增加了实用性。

5 结语

利用混合编程技术编制的重磁数据处理可视化系统,包含空间域、频率域滤波等常用模块,满足了重磁处理解释工作者的实际需求。软件还增加了对Surfer二进制网格文件格式的支持,添加了图形预览等功能,增强了程序的实用性。软件可以运行于Windows XP、Win7等操作系统,界面简洁,使用简单,具有一定计算机知识和重磁资料处理经验的人员,可快速熟练掌握。

VB与Fortran通过动态链接库进行混合编程,为大量先前开发的Fortran程序升级为Windows下的可视化程序提供了一种简单、快捷的解决方案。

图3 2种软件处理结果对比

[1]马进荣,王永勇,谢敏.VB与Fortran混合编程在河口潮流计算中的应用[J].人民珠江,2005,(3):81~82.

[2]徐林春,赵明登,童汉毅.Fortran与VB混合编程及其在流动数值模拟可视化技术中的应用[J]. 武汉大学学报(工学版),2004,37(2):21~24.

[3]蒋斌,欧阳柳波,杨超.Visual Basic 6.0程序设计[M].北京:电子工业出版社,2001.

[4]桂良进,王军,董波.Fortran PowerStation 4.0使用与编程[M].北京:北京航空航天大学出版社,1999.

[编辑]龚丹

2015-11-10

宋伟聪(1980-),男,工程师,主要从事油气非地震勘探技术工作,songweicong@cnpc.com.cn。

P631.1;P631.2

A

1673-1409(2016)17-0028-04

[引著格式]宋伟聪,李德春,邱开林,等.VB与Fortran混合编程的重磁数据处理可视化系统[J].长江大学学报(自科版), 2016,13(17):28~31.

猜你喜欢

子程序数据处理编程
认知诊断缺失数据处理方法的比较:零替换、多重插补与极大似然估计法*
ILWT-EEMD数据处理的ELM滚动轴承故障诊断
编程,是一种态度
元征X-431实测:奔驰发动机编程
编程小能手
纺织机上诞生的编程
基于希尔伯特- 黄变换的去噪法在外测数据处理中的应用
浅谈子程序在数控车编程中的应用
Matlab在密立根油滴实验数据处理中的应用
子程序在数控车加工槽中的应用探索