关于数值模拟的一些看法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
关于数值模拟的一些看法
1.数值模拟
十八世纪前人类主要通过实践经验和试验认识世界,十八世纪牛顿等科学家发明了微积分与力学,从而人类有了第二种手段—理论研究探索自然,这种手段就是采用力学与微积分方法把大自然的各种规律归结为一组常微分方程或者偏微分方程。
但是如果只有微分方程而没有微分方程的解,人们还无法研究这些自然界的规律。因此从十八世纪至二十世纪,大量的力学家,物理学家和数学家,以毕生的精力投入到这些微分方程的研究及其求解方法。遗憾的是只有对这些微分方程进行了大量的简化,即在极其理想的条件下,才能得到部分微分方程的解。这种理论研究方法只能获得自然界某些规律的定性认识,因此还不能准确认识这些规律。
二十世纪四十年代由于电子计算机的发明和差分方法的提出,以及随后的有限元方法和有限体积法大提出,为数值求解微分方程,准确认识自然规律创造了客观条件。从而产生了人类认识自然的第三种手段—数值试验与数值模拟。这种新手段比前两种手段更优越更没有局限性。但是由于当时计算机能力的限制,人们对自然规律的认识主要还是依靠实践经验和物理实验,数值模拟还只能起到参考与辅助的作用。
随着计算机的迅猛发展以及计算数学与应用数学的长足进步,尤其是以并行计算机和并行计算为基础的高性能计算在二十世纪八十年代的兴起使得计算能力大幅度提高,从而能够精确求解各种复杂的微分方程问题,数值模拟正逐渐成为人类认识自然规律的主要手段,物理实验逐渐变成辅助手段。
二十一世纪高性能计算已成为高科技的核心,基于高性能计算的数值模拟已成为经济竞争力和国家安全的关键。高性能计算应用的水平已成为衡量企业、大学和研究院所高科技水平的试金石。发达国家纷纷投入巨资开展高性能计算的研究及其在各种领域的应用。
2.数值模拟软件
数值模拟主要就是求偏微分方程的数值解,当今世界上求解偏微分方程最主要的有三种数值方法:有限元方法,有限体积法和差分方法。差分方法由于其适应性比较差,商业软件
极少采用。基于有限元方法的数值模拟商业软件最多,它们主要面向固体力学和结构力学问题,基于有限体积法的商业软件也不少,它们主要面向流体力学和传热传质学问题。
目前数值模拟商业软件以通用软件为主,它们适用于许多领域和不同的企业,专用软件较少,它们只适用于某个领域和某些企业。通用软件庞大复杂,一般有几十万行至几百万行代码量,适用面广但维护困难,使用不方便。专用软件相对比较简单,代码量一般在几万行至几十万行,适用面窄,但维护较简单,使用方便。
开发一个通用软件需要几百甚至几千人年,投资大,时间长,维护费用很高。随着高性能计算的兴起,软件的并行化在所难免,基于MPI的并行软件要比串行软件复杂得多,困难得多,维护与修改将更加困难,费用更高。
船大调头难,通用软件由于其庞大与复杂,阅读与改动十分困难,专用软件相对短小与简单,易理解,易改变,使用方便,很受用户欢迎,但由于适用面窄,其用户数远远少于通用软件。
3.软件的新途径
软件的不可再用长期以来严重地影响着软件业的发展。人们一直努力提高软件的再用性,寻找各种能提高再用性的软件开发模式。近十年来包括IBM和微软等许多大公司倡导的组件化,构件化和中间件的软件开发模式就是提高软件再用性的一种途径,并已逐渐被许多软件公司接受。
基于模型语言的软件自动生成技术则是另外一条鲜为人知的有效途径。由模型语言编写的程序比采用任何一种高级语言减少一个数量级(即90%)的代码量,并且很容易阅读和理解,再用性的大幅提高是显然的。但模型语言只适用于特定领域。
数值模拟软件主要采用有限元或有限体积法,为了提高数值模拟软件开发效率及其再用性,有限元(有限体积法)语言的提出是很自然的,采用有限元语言编写有限元程序,由该语言的生成器产生某种高级语言程序。
4.有限元语言
有限元方法是当今求解偏微分方程的最有效的数值方法,其原理是基于微分方程弱解形式(即力学的虚位移原理),有限元语言的第一项任务就是如何描述弱解形式的微分方程表达式。Petrov-Galerkin方法给出了最一般的弱解形式,因此有限元语言应以这一形式书写微
分方程。
有限元语言的第二项任务就是如何描述各种各样的算法(即有限元的计算格式)。这些算法包括单物理场的计算格式与多物理场的耦合算法两个方面。前者的关键问题是如何获得对应于单物理场的线性代数方程组,有限元语言(有限元程序自动生成系统)以表达式的形式给出代数方程组的矩阵及右端项。后者则需要各物理场之间的耦合关系及各种组件程序的执行次序与控制。有限元语言通过一个十分简练又十分通用的脚本文件主要以宏命令的形式描述多场耦合算法。
5.生成器
生成器的任务就是把有限元语言书写的程序转换成某种高级语言程序(有限元语言转换为FORTRAN语言程序)。有限元语言对于微分方程表达式,由生成器产生全部的单元子程序。对于算法程序则只产生一部分的高级语言代码程序,大部分代码是事先写好的,与有限元语言书写的算法程序无关,这一部分的代码约占到整个程序的代码量的三分之二以上,这样做的目的是为了减少生成程序的代码量和增加软件的灵活性。
生成器采用了以下的三项软件技术:
自动生成技术:由微分方程表达式和算法产生高级语言程序。
组件化技术:又称构件化,中间件技术,近十年由IBM、微软等大公司倡导的新的软件开发模式。由于采用了自动生成技术,组件程序可根据微分方程表达式和算法的不同自动改变,因此所需的组件程序非常少。
公式库技术:把各种微分方程表达式和算法,以及形函数等常用公式存入库中,有限元语言可直接调用这些公式。这是采用模型语言与程序自动生成技术所特有的软件技术,类似高级语言的程序库技术。
有限元语言采用这三项软件技术带来了以下的好处:系统程序大为减少,约十万行代码。维护简单,人人都能参与,可持续发展性强。由有限元语言书写的程序不仅大大减少了代码量,大大提高了编程效率,更重要的是程序可读性强,再用性强。有限元语言是一种超平台的语言,既不依赖于硬件也不依赖于操作系统,适用于各种计算机环境,包括单CPU与基于OPENMP和MPI的多CPU计算机。