流体力学并行计算软件资源及其利用方法
吴锤结
(河海大学流体力学研究所,南京210098)
摘要如何利用网络提供的便利条件,充分利用网络资源进行科学研究,这是一个摆在我们面前的新课题。本文将从大处开场,小处结尾,谈谈这一研究方法。
1
1.1自由软件运动及其开发方式自由软件运动.
20世纪末软件行业发生的最重大事件不是微软帝国的登峰造极,而是由RichardStallman和DonaldKnuth(高德纳)发起、倡导并亲自实践的自由软件运动的兴起。我们必须认识到:自由不等于免费:自由不等于低水平;自由不等于不稳定。
为了防止一些厂家将自由软件稍加修改,就宣称这种改良过的软件是新的发明,而被不肖厂商抢去,成为专属软件,Stallman创造了“Copyleft'’(GPL版权)的授权办法:Copyleft允许在GNU程序上作任何的修改,但不得原样照抄;Copyleft要求任何采用GNU软件的人,也必须把源程序提供给他人用,但可酌收一点费用:如果新的程序采纳任何已被Copyleft管制的程序片段,该新程序也就被“Copylefted”了。
Stallman希望:软件业者不是靠目前的“Copylefted”的法律,迫使客户购买软件,而是提供服务(如技术支援、培训)来赚钱。自由软件崇尚的“资源免费、服务获利”的理念正引导软件开发模式发生一次革命性变革,而其“源代码开放、软件自由拷贝”的主张更是软件业创新和活力的一次大释放。・
1.2软件开发方式
有两大类软件开发方式:大型专属软件和自由软件。
绝大多数商用软件都是大型专属软件,它需要像建造大教堂一样来开发,即由一群与世隔绝的奇才在统一号令下精心闭门造车,且在成功之前不发布beta版。
而自由软件主要是基于Intemet、分布在全球的软件开发者共同合作进行开发。Linux团体看起来像一个巨大的有各种不同议程和方法的乱哄哄的集市,但一个一致而稳定的系统却奇迹般地从中产生出来。LinusTorvalds是第一个学会怎样充分利用hltemet的人,而Linux则是第一个有意识地成功地利用整个世界做为它的头脑库的项目。
廉价的IIltemet对于Linux模式的演化来说是一个必要条件;另一个关键因素是领导风格和协作氛围的创造,使得开放源代码软件开发人员可以吸引其他协作开发人员并最大限度地利用Internet。
自由软件开发方式是:依托Intcrnet,组成不受地域、国家限制的开发团队;委托所有可以委托的事;对所有的改动和融合开放;早发布、常发布、听取客户的建议;把用户当做协作开发者是快速改进代码和高效调试的最佳方式。
1.3自由软件开发工具
自由软件有一整套自己的开发工具,如CVS(ConcurrentVersionsSystem)版本控制软件,它可记录源代码文件的历史,即:CVS可以为软件的每一版本保留一个副本.这些副本只保留不同版本间的差异。另外,自由软件还有自己的开源软件开发网站,如著名的SourceForge网站。
1.4操作系统的选择充分体现了使用者的人生哲学和价值取向MSWindows的开发者与使用者的关系就像是警察与小偷的关系,而Linux开发者与使用者的关系是同一战壕里的战友。开放和共享不仅是开源软件而且是整个科学传统的核心。
2网上资源利用与研究方法
2.1。好的程序员知道该写什么,伟大的程序员知道该重写(和重用)什么”.
在利用开源软件做研究时要努力寻找最高的“巨人肩膀”,充分利用“巨人”提供的一切资源,将注意力集中到实现自己的具有创新性的思想上去,只做真正属于自己的工作;利用网上资源做研究并不简单。首先,必须明确自己的关键创新点及可借鉴他人之处。只有这样才能抓住重点,有目的地去寻找所需资源;网上资源非常多,但完全适合自己需要的很少。必需将-43PL~版权下的程序中适用部分切出,然后按需重新组合;在利用网上资源的过程中可以学到全世界优秀研究者的很多绝招。
2.2搿每个好的软件都始于搔到开发者本人的痒处一
“需要是发明之母”,一旦有了需求,就能最大限度刺激开发的欲望。如:我们自己开发的CCT几aTex自动排版模块一“CCT~排版宝典”就为研究生论文写作提供了极大便利;在进行最优动力系统研究时,我们充分利用自动微分工具一Odyssee,非常高效地完成了极为繁复的解析和数值计算;为了开发Linux下的胶片软件,我与张林波密切合作,不断提出新的要求,协助他开发了CCT和CCT--Slides软件。
新的研究不断提出新问题,促使我们不断开发、掌握新方法和新工具。真是“越痒越搔,越搔越爽!”
。加法”使研究一步登天,搿减法一使程序一路畅通
在计算流体力学的研究中,必须学会熟练地运用“加法”,即,把2.3不同的现有成熟的程序模块有机地组织在一起,以实现我们的思想。在研究中研究者必须把问题分解成许多很小且非常明确的任务,然后再一个一个地实现它们。小步前进是研究顺利进行的有利保证。为了尽可能地减少验证所带来的麻烦,应尽量借用成熟可靠且被认可的程序一站在“巨人”的肩膀上,才能搿一步登天”。
在调程序过程中,首要的任务是定位错误:“减法”一即当你实在203
无法找到什么地方出错时,你可以把程序中正确或不正确的无关部分全部删除掉。
要尽量使用最简单明了的方法去完成所有工作。“简单即美”。调程序如此,评价程序更应如此:“最好的设计不是再也没有什么东西可以添加了,而是再也没有什么东西可以去掉了。”爱因斯坦也说:“使之保持简单,尽可能简单,但不要过于简单。”
1
3网上资源查找、获取方法
3.1搜索引擎。常用的有Google,天网,Yahoo,Altavista,AskJeff.…..等。学会高效地利用搜索引擎能为研究工作带来极大便利。.
3.2专业资源网站
充分利用专业资源网站提供的信息,如StevenBaum的Linux软件百科全书网站,CFDonline网站,美国能源部的EnergyScienceandTechnologySoftwareCenter及谷同祥博士后的《并行数值分析软件综述》都是很好的信息资源。
3.3专业开发网站
经常去开源软件的专业开发网站看看,会有意想不到的收获,例如SourceForge上的CFD项目,LinuxHighPerformanceComputing网站等。
3.4专业研究中心
许多专业研究中心的网页中包含了极多有用的信息,不可放过,如网页“CFD部分相关站点”中就提供了大量相关信息。
3.5科学家个人交往
最后,必须十分重视开展科学家之间的个人交往。科学研究必须由,人来进行,通过交流能够获得第一手信息和灵感,如我与BillDavidGropp,Keyes和张林波的长期交往,对我的科研工作帮助极大。
4科学计算软件资源与计算流体力学软件简介
4.1操作系统平台
利用开源软件工作,最佳操作系统平台是Linux。
4.2编程、编译及软件开发工具
我经常采用的编程、编译及软件开发工具有G95,Fortran,C,C++,CFortran,CWEB,Pacific—SierraResearchCorporation的VF90,CVS,…..等等。
4.3并行计算平台
目前最常用的并行计算平台有MPI和PVM,以及网格计算平台NetSolve,…..等。・
4.4计算数学通用程序库
充分利用计算数学通用程序库能极大便利开发者,常用的计算数学通用程序库有Netlib,ISML库,IMS,ACM数学程序库,NumericalRecipes,BLAS,Lapack,Scalapack,FFTPACK,SpecPack,PseudoPack2000,ATLAS,FFTW,……等。
4.5计算数学通用软件平台
许多计算数学通用软件平台,如Odyssee,UG,PETSc,OverTure,CCSE,GeoFEM,FEAT,…..等,功能强大。
。
4.6免费大型计算流体力学软件
网上有非常多免费大型计算流体力学软件,如OpenFOAM,Gerris,FEAlrFLOW,Nek玑Ir,CCSE,MOUSE,CLAWPACK,NaSt2D/3D,Mt3Duns.ModFlow,Elmer,DUNS,ADFC,FreeFEN,UG,MM5,SURFER,AllSpeed3D,KIVA.I/II/III,SALE2D/3D,…..等等,但这些开源软件绝大多数都是运行在Linux平台上的。由此也可以看出,为什么我们在科研工作中极力推荐Linux系统,为什么世界上众多高手对垄断软件MSWindows嗤之以鼻,而对貌似年幼的开源软件Linux宠爱有
加。
AllFlow/OpenCFD软件研制计划
从2003年起,我们开始了一个开源计算流体力学软件开发项目一5AIlFlow/OpenCFD软件研制计划。。
5.1研制目的
采用开源代码软件研制模式和GPL版权协议,以国家自然科学基金课题和江苏省自然科学基金重点课题等为依托,与国内、外计算流体力学、计算数学界的朋友共同合作,经过5.10年努力,开发出基于高级计算数学平台、可运行在装有Linux操作系统的并行计算机(含并行机群)上的计算流体力学+最优控制软件包——A11Flow/opencFD该软件包可用于工业、环境、军事等应用场合的计算流体力学数值模拟,并可进行诸如最优智能物面流动控制等前沿课题的研究工作。力争使CFD等核心模块达到或超过商用计算流体力学软件。
5.2软件模块及功能
前处理模块:包含网格自动生成、复杂物体造型等功能;
CFD模块:包含二/三维、可压/不可压、层流/湍流(直接数值模拟、大涡模拟和湍流模式)、动边界、自由表面、颗粒流、燃烧、化学反应流等数值模拟库,这些库由基于结构/非结构网格之上的多重网格、自适应网格并行有限元法、有限体积法、谱元法、高精度差分法等组成。这些模拟库建立在UG、PETSc、CCSE等计算数学和小伸I~等并行平台之上;
最优控制模块:建立在Dakota等并行最优控制平台和神经网络、遗传算法等方法之上的单目标/多目标、局部/全局最优化、最优控制模块;
后处理模块:包含图形、动画等后处理模块。:.:
5.3研制现状
已完成:并行二维、三维可压/不可压层流/湍流、动边界有限体206
积法+基于ODE的最优控制模块;
正在进行中的研究:基于UG和NekTar的并行二维/三维可压/不可压层流/湍流、动边界有限元、hp谱元法+基于Dakota的并行最优控制模块。
我们承担的江苏省自然科学基金重点项目:“流体力学中的并行自适应软件”是该项目的一部分,该课题现已完成,2007年1月江苏省科技厅组织鉴定,结论为:优。
6利用开源软件进行的并行计算流体力学研究
多年来,我们在7项国家自然科学基金资助下,利用开源软件进行的并行计算流体力学研究课题有:
1.颗粒流直接数值模拟:如二维有限元悬浮颗粒流,有限元动网格,三维沙漠地貌形成规律数值模拟等。
2.气泡相互作用直接数值模拟:三维气泡运动,三维气泡与自由表面相互作用的研究等。.
3.运动物面流动控制研究:包括最优智能翼型流动控制,振荡最优智能翼型流动控制,动波浪壁流动控制研究等。
4.鱼类自由游动研究:包括二维鱼群游动及其控制,三维鱼类游动数值模拟等。
7结语
我们认为,在博士、硕士研究生教学中必须要求学生完全自主编写中、小型CFD程序至少一次,同时必须教会他们充分利用网上资源的方法,培养开放、合作、高效的科研习惯。
AllFlow/OpenCFD项目需要众多同仁参与、经费支持和固定网站。河海大学流体力学研究所为本项目提供了开发网站和工作条件。
流体力学并行计算软件资源及其利用方法
吴锤结
(河海大学流体力学研究所,南京210098)
摘要如何利用网络提供的便利条件,充分利用网络资源进行科学研究,这是一个摆在我们面前的新课题。本文将从大处开场,小处结尾,谈谈这一研究方法。
1
1.1自由软件运动及其开发方式自由软件运动.
20世纪末软件行业发生的最重大事件不是微软帝国的登峰造极,而是由RichardStallman和DonaldKnuth(高德纳)发起、倡导并亲自实践的自由软件运动的兴起。我们必须认识到:自由不等于免费:自由不等于低水平;自由不等于不稳定。
为了防止一些厂家将自由软件稍加修改,就宣称这种改良过的软件是新的发明,而被不肖厂商抢去,成为专属软件,Stallman创造了“Copyleft'’(GPL版权)的授权办法:Copyleft允许在GNU程序上作任何的修改,但不得原样照抄;Copyleft要求任何采用GNU软件的人,也必须把源程序提供给他人用,但可酌收一点费用:如果新的程序采纳任何已被Copyleft管制的程序片段,该新程序也就被“Copylefted”了。
Stallman希望:软件业者不是靠目前的“Copylefted”的法律,迫使客户购买软件,而是提供服务(如技术支援、培训)来赚钱。自由软件崇尚的“资源免费、服务获利”的理念正引导软件开发模式发生一次革命性变革,而其“源代码开放、软件自由拷贝”的主张更是软件业创新和活力的一次大释放。・
1.2软件开发方式
有两大类软件开发方式:大型专属软件和自由软件。
绝大多数商用软件都是大型专属软件,它需要像建造大教堂一样来开发,即由一群与世隔绝的奇才在统一号令下精心闭门造车,且在成功之前不发布beta版。
而自由软件主要是基于Intemet、分布在全球的软件开发者共同合作进行开发。Linux团体看起来像一个巨大的有各种不同议程和方法的乱哄哄的集市,但一个一致而稳定的系统却奇迹般地从中产生出来。LinusTorvalds是第一个学会怎样充分利用hltemet的人,而Linux则是第一个有意识地成功地利用整个世界做为它的头脑库的项目。
廉价的IIltemet对于Linux模式的演化来说是一个必要条件;另一个关键因素是领导风格和协作氛围的创造,使得开放源代码软件开发人员可以吸引其他协作开发人员并最大限度地利用Internet。
自由软件开发方式是:依托Intcrnet,组成不受地域、国家限制的开发团队;委托所有可以委托的事;对所有的改动和融合开放;早发布、常发布、听取客户的建议;把用户当做协作开发者是快速改进代码和高效调试的最佳方式。
1.3自由软件开发工具
自由软件有一整套自己的开发工具,如CVS(ConcurrentVersionsSystem)版本控制软件,它可记录源代码文件的历史,即:CVS可以为软件的每一版本保留一个副本.这些副本只保留不同版本间的差异。另外,自由软件还有自己的开源软件开发网站,如著名的SourceForge网站。
1.4操作系统的选择充分体现了使用者的人生哲学和价值取向MSWindows的开发者与使用者的关系就像是警察与小偷的关系,而Linux开发者与使用者的关系是同一战壕里的战友。开放和共享不仅是开源软件而且是整个科学传统的核心。
2网上资源利用与研究方法
2.1。好的程序员知道该写什么,伟大的程序员知道该重写(和重用)什么”.
在利用开源软件做研究时要努力寻找最高的“巨人肩膀”,充分利用“巨人”提供的一切资源,将注意力集中到实现自己的具有创新性的思想上去,只做真正属于自己的工作;利用网上资源做研究并不简单。首先,必须明确自己的关键创新点及可借鉴他人之处。只有这样才能抓住重点,有目的地去寻找所需资源;网上资源非常多,但完全适合自己需要的很少。必需将-43PL~版权下的程序中适用部分切出,然后按需重新组合;在利用网上资源的过程中可以学到全世界优秀研究者的很多绝招。
2.2搿每个好的软件都始于搔到开发者本人的痒处一
“需要是发明之母”,一旦有了需求,就能最大限度刺激开发的欲望。如:我们自己开发的CCT几aTex自动排版模块一“CCT~排版宝典”就为研究生论文写作提供了极大便利;在进行最优动力系统研究时,我们充分利用自动微分工具一Odyssee,非常高效地完成了极为繁复的解析和数值计算;为了开发Linux下的胶片软件,我与张林波密切合作,不断提出新的要求,协助他开发了CCT和CCT--Slides软件。
新的研究不断提出新问题,促使我们不断开发、掌握新方法和新工具。真是“越痒越搔,越搔越爽!”
。加法”使研究一步登天,搿减法一使程序一路畅通
在计算流体力学的研究中,必须学会熟练地运用“加法”,即,把2.3不同的现有成熟的程序模块有机地组织在一起,以实现我们的思想。在研究中研究者必须把问题分解成许多很小且非常明确的任务,然后再一个一个地实现它们。小步前进是研究顺利进行的有利保证。为了尽可能地减少验证所带来的麻烦,应尽量借用成熟可靠且被认可的程序一站在“巨人”的肩膀上,才能搿一步登天”。
在调程序过程中,首要的任务是定位错误:“减法”一即当你实在203
无法找到什么地方出错时,你可以把程序中正确或不正确的无关部分全部删除掉。
要尽量使用最简单明了的方法去完成所有工作。“简单即美”。调程序如此,评价程序更应如此:“最好的设计不是再也没有什么东西可以添加了,而是再也没有什么东西可以去掉了。”爱因斯坦也说:“使之保持简单,尽可能简单,但不要过于简单。”
1
3网上资源查找、获取方法
3.1搜索引擎。常用的有Google,天网,Yahoo,Altavista,AskJeff.…..等。学会高效地利用搜索引擎能为研究工作带来极大便利。.
3.2专业资源网站
充分利用专业资源网站提供的信息,如StevenBaum的Linux软件百科全书网站,CFDonline网站,美国能源部的EnergyScienceandTechnologySoftwareCenter及谷同祥博士后的《并行数值分析软件综述》都是很好的信息资源。
3.3专业开发网站
经常去开源软件的专业开发网站看看,会有意想不到的收获,例如SourceForge上的CFD项目,LinuxHighPerformanceComputing网站等。
3.4专业研究中心
许多专业研究中心的网页中包含了极多有用的信息,不可放过,如网页“CFD部分相关站点”中就提供了大量相关信息。
3.5科学家个人交往
最后,必须十分重视开展科学家之间的个人交往。科学研究必须由,人来进行,通过交流能够获得第一手信息和灵感,如我与BillDavidGropp,Keyes和张林波的长期交往,对我的科研工作帮助极大。
4科学计算软件资源与计算流体力学软件简介
4.1操作系统平台
利用开源软件工作,最佳操作系统平台是Linux。
4.2编程、编译及软件开发工具
我经常采用的编程、编译及软件开发工具有G95,Fortran,C,C++,CFortran,CWEB,Pacific—SierraResearchCorporation的VF90,CVS,…..等等。
4.3并行计算平台
目前最常用的并行计算平台有MPI和PVM,以及网格计算平台NetSolve,…..等。・
4.4计算数学通用程序库
充分利用计算数学通用程序库能极大便利开发者,常用的计算数学通用程序库有Netlib,ISML库,IMS,ACM数学程序库,NumericalRecipes,BLAS,Lapack,Scalapack,FFTPACK,SpecPack,PseudoPack2000,ATLAS,FFTW,……等。
4.5计算数学通用软件平台
许多计算数学通用软件平台,如Odyssee,UG,PETSc,OverTure,CCSE,GeoFEM,FEAT,…..等,功能强大。
。
4.6免费大型计算流体力学软件
网上有非常多免费大型计算流体力学软件,如OpenFOAM,Gerris,FEAlrFLOW,Nek玑Ir,CCSE,MOUSE,CLAWPACK,NaSt2D/3D,Mt3Duns.ModFlow,Elmer,DUNS,ADFC,FreeFEN,UG,MM5,SURFER,AllSpeed3D,KIVA.I/II/III,SALE2D/3D,…..等等,但这些开源软件绝大多数都是运行在Linux平台上的。由此也可以看出,为什么我们在科研工作中极力推荐Linux系统,为什么世界上众多高手对垄断软件MSWindows嗤之以鼻,而对貌似年幼的开源软件Linux宠爱有
加。
AllFlow/OpenCFD软件研制计划
从2003年起,我们开始了一个开源计算流体力学软件开发项目一5AIlFlow/OpenCFD软件研制计划。。
5.1研制目的
采用开源代码软件研制模式和GPL版权协议,以国家自然科学基金课题和江苏省自然科学基金重点课题等为依托,与国内、外计算流体力学、计算数学界的朋友共同合作,经过5.10年努力,开发出基于高级计算数学平台、可运行在装有Linux操作系统的并行计算机(含并行机群)上的计算流体力学+最优控制软件包——A11Flow/opencFD该软件包可用于工业、环境、军事等应用场合的计算流体力学数值模拟,并可进行诸如最优智能物面流动控制等前沿课题的研究工作。力争使CFD等核心模块达到或超过商用计算流体力学软件。
5.2软件模块及功能
前处理模块:包含网格自动生成、复杂物体造型等功能;
CFD模块:包含二/三维、可压/不可压、层流/湍流(直接数值模拟、大涡模拟和湍流模式)、动边界、自由表面、颗粒流、燃烧、化学反应流等数值模拟库,这些库由基于结构/非结构网格之上的多重网格、自适应网格并行有限元法、有限体积法、谱元法、高精度差分法等组成。这些模拟库建立在UG、PETSc、CCSE等计算数学和小伸I~等并行平台之上;
最优控制模块:建立在Dakota等并行最优控制平台和神经网络、遗传算法等方法之上的单目标/多目标、局部/全局最优化、最优控制模块;
后处理模块:包含图形、动画等后处理模块。:.:
5.3研制现状
已完成:并行二维、三维可压/不可压层流/湍流、动边界有限体206
积法+基于ODE的最优控制模块;
正在进行中的研究:基于UG和NekTar的并行二维/三维可压/不可压层流/湍流、动边界有限元、hp谱元法+基于Dakota的并行最优控制模块。
我们承担的江苏省自然科学基金重点项目:“流体力学中的并行自适应软件”是该项目的一部分,该课题现已完成,2007年1月江苏省科技厅组织鉴定,结论为:优。
6利用开源软件进行的并行计算流体力学研究
多年来,我们在7项国家自然科学基金资助下,利用开源软件进行的并行计算流体力学研究课题有:
1.颗粒流直接数值模拟:如二维有限元悬浮颗粒流,有限元动网格,三维沙漠地貌形成规律数值模拟等。
2.气泡相互作用直接数值模拟:三维气泡运动,三维气泡与自由表面相互作用的研究等。.
3.运动物面流动控制研究:包括最优智能翼型流动控制,振荡最优智能翼型流动控制,动波浪壁流动控制研究等。
4.鱼类自由游动研究:包括二维鱼群游动及其控制,三维鱼类游动数值模拟等。
7结语
我们认为,在博士、硕士研究生教学中必须要求学生完全自主编写中、小型CFD程序至少一次,同时必须教会他们充分利用网上资源的方法,培养开放、合作、高效的科研习惯。
AllFlow/OpenCFD项目需要众多同仁参与、经费支持和固定网站。河海大学流体力学研究所为本项目提供了开发网站和工作条件。