工程上,我们常常需要分析材料的温度场分布,编写程序是一种有效的计算方法。很多人对编程望而却步,其实相反,程序只是工具,我们是工程技术人员,有时候只关心结果,而不必精通C++亦可解决问题,未必是编程高手才能解决工程中的编程问题。
笔者在学习有限差分法过程中走了很多弯路,希望把方法写出来,希望能够让初学者入门。其次,笔者不是编程高手,也没有完全精通所有算法,属于现学现卖,也希望和大家一起进步。另外,笔者有一师兄A,写了一个2D温度场有限差分程序,但是不肯教给师弟;一次,在另外一个师兄B的计算机上有类似程序,师兄A发现后立即删除,并说别到处乱传;笔者当时很寒心,觉得这类程序其实不难,于是想自己写一个,打破实验室的技术封锁。人和人的智商不会相差一百吧,只要努力,任何问题都有可能解决。最近的日子里,笔者打算写一些粗浅的教程出来,希望使初学者理解其原理,不要把会程序的师兄当神看,你也可以的。
笔者是一个不入流不资深Flash爱好者,打算统编使用Flash的编程语言AS3(Action Script 3.0),.笔者认为AS3是最优雅的计算机语言。运行本教程的程序需要使用Adobe Flash Builder,笔者使用的是最新的版本号为4.7试用版,可以到Adobe官方网站上申请试用,开发Flash程序还有很多开发环境,此处不再列举。为什么不使用C/C++,因为作者想借用Flash的Stage 3D技术,使用该技术直接操纵显卡绘制温度场云图,而较少的CPU资源;算法是一样的,很容易翻译到C/C++ et. al.。另外如果希望将计算结果到处到常见后处理软件Tecplot中,大家可以去其官方网站申请试用。
本教程打算分为如下几个部分:
1 ,有限差分发原理及本程序结构;
2,类的概念:节点类和材料类的;
3,前处理,网格及材料;
4,温度场的显示迭代计算;
5,温度场求解结果后处理,基于Adobe Flash Stage 3D技术;
6,展望:3D,对流传热,一阶迎风格式,非线性材料,非均匀网格。
阅读基础,读者应当初步了解如下概念:
1,温度场的控制微分方程及其定解条件;
2,有限差分法,一阶导数,二阶导数的离散方法;
3,一定编程基础,了解任何一门C-Style的语言。
参考文献:
1,陶文铨:数值传热学(第2版);
2,孙颖:Flash ActionScript3殿堂之路(含光盘1张);
3,李庆:我的Flex我精通:RIA高级开发指南(含CD-ROM光盘1张) ;
4,Adobe AS3 API 文档 http://www.adobe.com/go/as3lr
注意事项:
1,笔者的注释往往使用英文,原因:一故弄玄虚,二其它编辑器打开不至于出现乱码,三有拼写错误及时告知;
2,笔者近视,错别字可能会有;
3,程序勿用于商业价值;
4,程序解决不了你的问题,不要骂笔者,笔者不欠你什么,来去自如。
示例,我们以钢液冷却过程为例(考虑凝固潜热),计算其连续冷却过程中的温度场分布。由于对称考虑其对称性,我们仅仅计算其1/4横截面,下图是网格节点及材质(绝热、钢液、空气,初始温度分别为0,1550,30摄氏度),如下图。
下图(看不完整,可将其下载后查看)是2D温度场控制微分方程及其离散方法,全是冷冰冰的符号。本文不使用该类方法,而使用物理意义明确的有限容积法。
本程序的架构划分如下:
1,前处理:网格剖分
2,前处理:设置材料,初始条件,边界条件;
3,迭代计算;
4,后处理,计算结果可视化。
主程序如下:
solution=new TSolverMgr();
solution.SetDim(15,15,1,1);
solution.SetMaterial();
solution.UpdateHeatExchangeFactor();
//solution.ExportSetting();
for(var i:uint=0;i<100;i++)
{
solution.Step(1);
}
solution.Export2Tecplot();
今天理发了,LP要看我的尊容,无奈笔记本上没有安装摄像头软件,于是在AS3 API里面参考了flash.media.Camera类,编译,运行,得到自己靓照。