混合语言编程在磁流体数值模拟中的应用_第1页
混合语言编程在磁流体数值模拟中的应用_第2页
混合语言编程在磁流体数值模拟中的应用_第3页
混合语言编程在磁流体数值模拟中的应用_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、混合语言编程在磁流体数值模拟中的应用    摘要:针对VC+具有面向对象特征和开发图形界面方面的强大功能以及FORTRAN语言在数值计算方面的优势,采用VC+和FORTRAN两种语言混合编程实现了聚变堆包层磁流体数值模拟系统的研发和设计,取得了较好的效果。 关键词:FORTRAN;VC+;混合编程;动态链接库,数值模拟 中图分类号:TP311.52文献标识码:A文章编号:1009-3044(2012)11-2509-03 Application of Mixed-language Programming in MHD Numerical Simulati

2、on XIE Bao-ling, CHEN Xia (Army Officer College, Hefei 230031, China) Abstract: This paper focused on the advantage of VC+s object-oriented characteristics and powerful functions in the respect of developing graphical interfaces. Then combined the merit of Fortran Languages good numerical calculatio

3、n. The mixed programming is applied to develop the system of MHD Numerical calculations in fusion reactor blanket. Key words: FORTRAN; VC+; mixed programming; Dynamic Link Library(DLL); numerical simulation 众所周知,Visual Fortran强于数值计算,其语法检查严格,运行稳定性好,在多维数组的处理方面Fortran语言比较直观和易于理解。尤其是针对复数进行计算,则Fortran语言更

4、是具有无可比拟的优势。它是所有语言中唯一将复数定义为标准数据类型的语言。但是但其界面开发能力差,目前还没有一家厂商推出具有RAD(Rapid Application Development)特性的编译集成开发环境。因此,当用Fortran语言很好的实现了大型的科学计算后,难以将这种计算转变为结果显示方便、数据输入简易的WIND0WS可视化应用系统。而这一点,采用VC+很容易实现良好的图形界面和系统管理能力,同操作系统有很好的亲和性。 为此,该文研发了基于Fortran与VC+语言混合编程来开发具有友好用户界面与高计算效率的专用磁流体数值模拟系统。 1 VC+与FORTRAN混合编程中关键技术的

5、实现方法 1.1 VC+与FORTRAN混合语言调用约定 在VC+模块中,可以通过定义或在函数原型中使用“_stdcall”关键词来指定STFCALL的调用约定。如本系统中的调用Fortran中函数是通过在“DynGuiView.h”的头文件末尾添加以下代码来声明其调用约定: extem”C” void_stdcall MHDFLOW(char*FileName,int FileLen); 其中, MHDFLOW(char*FileName,int FileLen); 为被调用的FORTRAN程序的入口函数。 通过上述声明后,C+程序才能识别Fortran语言编写的代码,从而可以在VC+系统中

6、调用Fortran模块,实现其混合编程。 1.2 VC+与FORTRAN混合语言编程命名约定 在缺省的情况下,VC+语言对大小写敏感,而Fortran语言对大小写不敏感。我们可以通过以下四种方法来解决此差异:(1)用Fortran中的ATTRIBUTES中ALIAS选项;(2)由Fortran的缺省命名把所有的名称自动覆盖为大写;(3)保留混合大小写名称;(4)由Fortran语言的STDCALL和VC+命名约定把名称自动约定为小写。 如果调用了使用Fortran缺省情况下不能重新编译的Fortran代码。在C中,要完成调用必须使用全部为大写的名称,而仅在VC+代码中使用_stdcall约定是

7、不够的,因为_stdcall和STDCALL始终保持大小写状态。Fortran缺省情况下产生的是全部为大写的名称,VC+代码必须与之匹配。 1.3 VC+与FORTRAN混合语言编程中的参数传递 在VC+中,除了数组是通过对其首地址的引用传递外,所有的参数都是通过值来传递。和Fortran不同,VC+没有影响被传递的各个参数调用约定的指令。为了通过引用传递非数组的VC+数据,必须给它传递一个指针。如下例子所示为VC+调用系统中Fortran子例程。 Fortran子例程: SUBROUTINE TESTMHD(VALPARM,REFPARM) ITEGER VALPARM !DEC$ ATTR

8、IBUTES VALUE:VALPARM INTEGER REFPARM !DEC$ ATTRIBUTES REFERENCE:REFPARM END VC+的调用代码: extern void_stdcall TESTMHD(int ValParm,int *RefParm); 1.4 VC+与FORTRAN接口技术的实现 本系统采用基于动态链接库DLL的混和编程技术;在DLL的链接方式上采用显式链接;在调用约定方面VC+和Fortran都采用STDCALL约定;在参数传递方式上,对Fortran语言模块的单个变量采用VALUE属性使其与VC+程序实现值传递,对Fortran语言模块的数组变

9、量采用REFERENCE属性,使其与VC+程序实现地址传递。在数据类型方面,其数据类型转换的具体格式如表1所示。这样,就能解决VC+和Fortran的接口问题。 表1 VC+和Fortran中变量类型的对应关系 其具体的格式如下所示: Fortran接口: SUBROUTINE后台模型函数名(参数类型参数列表(数组列表,变量列表) !DEC$ATTIRIBUTES DLLEXPORT,STDCALL,ALIAS:后台模型函数名n:后台模型函数名 !DEC$ATTIRIBUTES REFERENCE:数组列表 !DEC$ATTIRIBUTES VALUE:变量列表 VC+接口: void Cjd

10、fzView : loadfz()/VC+接口函数 HINSTANCE hDLL; LPFN lpfn; hDLL=LoadLibrary(“动态库函数名称.dll”); if(hDLL) lpfn=(LPFN)GetProcAddress(hDLL,“后台模型函数名n”); if(lpfn) (*lpfn)(double参数列表(数组列表,变量列表); FreeLibrary(hDLL); 通过VC+和Fortran的接口技术既能使后台数据模型获得前台用户输入的参数,进行动态数值模拟,又能使前台获得后台数值模拟结果的数据,为后面结果的可视化显示做好准备。 2混合编程技术在数值模拟系统中的应用

11、 该数值模拟系统各项功能都一一对应于相应的模块,每个模块都执行各自的功能,模块和模块之间基本是调用关系,其系统开发工具如图1所示。 图1系统开发工具 其系统总体的设计过程如图2所示: 图2系统总体设计过程 系统界面如图3所示。可以看出,与用户通过图形界面直接面对的包括三部分:初始化、网格划分和后处理。用户并不直接面对系统的求解部分,而是隐藏在系统后台,但求解部分却为整个分析系统的核心,具有“发动机”的作用。 图3系统主界面 进入系统后,点击前处理图标进行数值模拟的参数设置。它主要完成计算模型及各种控制参数的方便输入,能按照设置的基本参数自动完成三维六面体网格的划分。它的主要功能包括:几何模型读

12、取;自动网格剖分;物理参数读取;节点、单元编号及存储;模型三维环境下显示;迭代步长及收敛条件设置;激励源设置等。离散模型的数据文件主要包括离散模型的节点数及节点坐标、单元数及单元编号、边界条件、载荷及相关材料信息等。其界面效果如图4所示。 图4初始化参数设置(下转第2514页) 3结束语 该数值模拟系统采用VC+和FORTRAN语言的混合编程技术,综合采用FORTRAN强大的数值计算能力及VC+的图形处理功能,生成友好的图形界面。利用两者混合语言编程的优势研发系统进行磁流体数值模拟,提高了系统的开发效率,取得了良好的应用效果。 参考文献: 1李娟,张钦.基于动态链接库的Visual C+混合编程J.计算机工程与设计,2010,31(9):2140-2143. 2周振红,颜国红,吴虹娟. Fortran与Visual C+混合编程研究J.武汉大学学报:工学版,2001

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论