摘 要: 基于.net开发平台,借助C#语言,利用软构件技术完成了氡及其子体运移仿真软件开发。讨论了仿真系统的软件实现过程,简述了系统的功能模块及关键技术实现。实现了氡及其子体运移机制研究的计算机化。
关键词: .net;运移; 计算机仿真; 团簇
针对氡气及其子体运移机制的研究是开展氡气研究的基础。近年来,对氡气运移机制提出了新的研究角度:团簇、微粒等方面[1-2]。经反复论证,团簇理论不断趋于成熟,但研究手段较为落后,仅通过通用仿真软件进行数据处理,针对性差。因此,计算机仿真技术在氡气运移研究领域中存在技术空白。本文利用模拟仿真技术应用到氡气运移、分布等相关研究中,对研究系统的结构、功能和行为进行动态的比较和模仿,提高研究技术的效用性和安全性。
1 系统概述
该系统的开发借助计算机仿真学、图形学,结合软接口设计的原则[3],完成了系统功能模块的开发。系统功能模块分为文件管理、图形显示、数值分析与模拟、窗口管理、帮助五个部分。系统设计过程中统筹考虑系统功能,结合软件工程[4]设计原理,采用模块化设计思路,完成系统设计。
1.1 文件管理
文件管理模块主要用于系统数据管理、数据通讯等功能。系统数据将以文本的形式进行管理,该文本可在其他文本编辑器(例如记事本)或电子表格(例如EXCEL)中打开,并通过数据导入、数据导出功能模块完成数据通讯。
1.2 图形显示
图形显示功能模块提供二维曲线显示和三维曲线显示。二维曲线显示包括:射气浓度随距离分布、射气浓度随时间分布、不同方向上离散点的计数对比规律的描述。三维曲线显示包括:射气浓度等高线描述。
1.3 数值模拟
数值模拟功能模块用于模拟未知参量、模拟结果的分析和整理、确定修正系数等。此外,利用理论模型进行数值模拟,得到的模拟值和实验值进行分析,进而完成理论模型的论证。模拟界面如图1所示。
2 关键技术算法设计
在系统设计过程中采用面向对象的设计思路,自顶向下进行功能抽象,通过软件分层结合软接口调用进行信息通讯,保证模块的独立性、程序的可重用性。在设计过程中,涉及到的关键技术及模块有:数据流管理模块、数据值到曲线转换模块及曲线显示模块。
2.1 数据流管理模块
2.1.1 模块分析及流程设计
“数据流管理模块”主要完成数据流通讯,系统根据设计需要提供四类不同的操作:直接导入数据;根据导入的数据在相应对话框显示;将导入的数据值转化成二维曲线显示;将导入的数据值转化成三维曲面显示。数据导出是导入的逆过程。
算法步骤如下:系统读数据后经数据预处理,然后判断操作类型(包含四种操作类型),根据不同的操作类型调用不同模块接口。
2.1.2 关键算法实现
程序采用模块化设计思路,通过两个“类对象”完成系统设计:Class1“类对象”读取数据流并进行数值换算、display“窗体类对象”提供图形显示设计工作。
功能函数:openfile()打开文件夹、class.ndclass.Disfun()数据过滤、ndclass.ndzb()特征值提取、 getndzb() 等高浓度拟合、class.ndclass.Nhfun()数据平滑、getmaxclass1.DisData()数据预处理等函数,以及其他数值处理、返回函数编写在Class1“类对象”中,以提供不同的模块调用。
功能函数:OnPaint()绘制、MyPaint()重载、getkd()坐标转换、drawqx()、曲线显示等函数,以及其他系统辅助函数编写在display窗体“类对象” 中。部分代码如下:
protected override void OnPaint(PaintEventArgs e)
{ base.OnPaint (e);
datamaxx = getmaxclass1.getmaxnum (data1);
datamaxy = getmaxclass1.getmaxnum (data2);
ndclass1.ndzb(DataFileName,data1,data2,data3);
k = ndclass1.rei ();
getkd(datamaxx,datamaxy);
…
2.2 数据值到曲线转换模块
2.2.1模块分析及流程设计
数值曲线包括二维曲线和三维曲线。“数据值到曲线转换模块”将数据值进行预处理分析后,提取特征点的数据信息,经拟合及平滑流程后导入系统在屏幕上显示。
流程设计如下:系统首先读数据,判断数据的有效性之后存入相应的数组列表中。然后系统进行数据预处理,从原始数据中提取特征信息,经过数据平滑之后,将其转换成标准格式。同时按坐标数据、连接信息、浓度特征三部分分类存放后导入系统绘制曲线。
数据值到三维曲线转化模块与二维曲线绘制有着异曲同工之妙,不同在于三维等高线的绘制过程中涉及到的浓度等高点的确定,因此,程序将加入“数据拟合”功能模块。从而,大大缩短开发周期。数据值到三维曲线转化模块流程设计如图2所示。
2.2.2 关键算法实现
数据值到曲线的转换模块主要应用在数据流通信部分,完成的工作是将读入的数据值转化成图像形式显示在屏幕上。根据转换曲线类别的不同,操作执行的流程也有所不同。因此,需要进行判断操作,选择不同的模块入口。程序设计的部分代码如下:
public void ndzb(string s ,double[] datax,double[] datay,double[] datan)
{ Class1.readerclass readerclass = new readerclass ();
射气运移模拟系统.Class1.getmaxclass getmaxclass = new getmaxclass ();
maxn = getmaxclass.getmaxnum (datan);
AnalNDFuncion(maxn);
for(xhblj = 0;xhblj<k;xhblj++)
{ if( datax[xhblj] > 0 & datay[xhblj] == 0 )
{ area1.Add ( datax[xhblj] );}…
if(area1.Count >0)
…
2.3曲线显示模块
2.3.1模块设计分析及流程设计
曲线显示模块为用户提供直观的图形界面显示,包含二维图形显示、三维图形显示模块。曲线显示模块设计中,将根据“数据值到曲线转换模块”生成的有效特征数据值进行绘制。由于GDI+坐标系统与常用的笛卡尔坐标系不同,因此系统提供了坐标变换模块。二维曲线同三维曲线的设计理念相似,只是在绘制技巧中有所不同。现以三维曲线绘制流程为例,流程如图3所示。
2.3.2 关键算法实现
曲线绘制显示功能主要采用了GDI+图形设备接口技术完成曲线绘制要求,系统通过Graphics类对象提供完备的绘制方法和属性,部分代码如下:
if(VerOrLevbool==0)//竖直方向的浓度分布;
{ PMx = tranx / cursorx *(PMxArr[i]-stapot)+40+tranx;
PMy = VerNDLineCla.rePMY (PMDisArr); }
else if (VerOrLevbool==1)//水平上向上的浓度分布;
{ PMx = LevNDLineCla.rePMX (PMDisArr); … }}
在绘制过程中主要调用GDI+ System.Drawing类中的:Brush、Font、Graphics、Pen、Region等类,以及Graphics 类的DrawLine、DrawString等方法,绘制出氡及其子体二维和三维分布曲线。
本文以计算机模拟作为氡及其子体运移机制研究的一种新手段和工具,模拟分析了氡及其子体运移的数学模型,获得了有参考价值的分析结果。该结论对揭示团簇理论的科学性具有重要意义,同时对揭示地气向上运移、气溶胶的形成与运移以及团簇研究都具有积极和深远的影响。
模拟技术提供的预见性,可预测系统的特性、外作用的影响,可以更直观地为团簇理论提供有力的技术支持,并为氡运移研究提供新的研究途径。这种研究思路充分利用计算机的丰富资源,提高研发的安全性,而且具有经济、可靠、易升级等优点。因此,计算机模拟引入射气分布规律研究是一个必然的趋势。
参考文献
[1] 乐仁昌. 氡及其子体的释放和运移规律及机理研究[D]. 成都:成都理工大学博士学位论文.2002.5;
[2] 贾文懿,方方,周蓉生.氡及其子体运移规律与机理研究[J]. 核技术,2000,23(3):169-175.
[3] 吕云翔,王晰鹏编著.软件工程.北京:人民邮电出版社,2009.
[4] 肖丁,吴建林,周春燕,等编著.软件工程模型与方法.北京:北京邮电大学出版社,2008.