希望借此激发出更多的人的心声.不管是初生牛犊,还是泰山北斗,都希望大家能够各抒己见,旁征博引,为国产大型通用有限元软件的发展出谋 划策,尽职尽力. 我国有数以千计的人再次从事有限元的工作,其中不乏理论名家大家,可是我们却始终看不到我们自己的一款大型通用有限元分析软件.国内的市场基本都被 Ansys一家做大垄断了.可是令人痛心的是, 我们大部分时间做有限元计算的科研工作者用的都是盗版有限元软件,尤其是学生,本科生.没有钱去买那昂贵的商业软件,可是学校有没有那么多的资源可以利 用.最终的结果是,我们的科研是基本建立在盗版软件的基础上.可想而知,这最终受害的还是我们自己.有谁能保证盗版软件的质量和可靠性呢?
看到国不少的人在讨论我们的cae软件的窘状,可是,大部分时间都是在以茶余饭后闲话聊天的形式进行这样的讨论, 少有人进行过较为严肃较为系统的考虑. 这里引用得这篇文章虽然不尽完美,但是能看出作者是进行了一番认真的思考的. 我们须要的就是这样的讨论.
[摘文]
CAE(计算机辅助工程)是继CAD(计算机辅助设计)又一个提升研发水平的工具。目前的CAE软件几乎是国外产品的天下,国内的有识之士都很着 急,并大声疾呼,有院士,也有一些原来用FORTRAN开发过大型计算软件的前辈,连自然科 学基金会都着急了,想对有关的计算机软件的技术研究进行支助(见自然科学基金会的2009年公告),但这可能难以改变现状。自从80年代航空系统组织大量 技术人员开发“哈杰夫”以后,国内的自主研发的系统就再没“风光”过,即便是小有名气,大都在SAP5、ADINA的源代码上修修补补,自己也干过这种事 情,到现在已和国外的距离越来越大,问题出在哪里呢?
CAE的核心是有限单元法,包括有限体积法等,像边界单元法、无网格法等等,纯科学的研究意义很大,用在CAE中很难取得有限元法那样的效果,因为 CAE 的对象是工程,要考虑用统一的、比较简便的方法解决工程问题,软件甚至要傻瓜化,工程师几乎不用什么基础知识就能解决工程问题。
CAE的难度有三个。
其一 前处理
将用户的模型变成有限元计算所需要的单元、节点、边界等数据,现在三维设计软件非常成熟,几乎所有的三维设计软件都是用“几何 框架” 描述,并且几何框架的描述已经中间化,即所谓的“几何内核”,这样的中间件,既有开源的,也有商业的,像ACIS等,都是一帮搞计算几何的人弄的,将几何 框架模型转换为“单元”,有一些成熟的算法,但总的来说是个技术活,比如圆角处理,网格加密等等,这种技术并不被所有的技术人员掌握,搞有限元法的人绝少 在计算几何方面深钻过,要学数据结构、图论、计算几何等,太复杂了。
其二是解方程
有限元的方程不外是线性代数方程、非线性方程、特征值问题、差分方程,虽然,有限元得出的刚度矩阵是主对角占优、对称正定,方程有什 么好解 的?实际大有讲究,你可以作一个实验,自己编写一个方程求解程序,再下载一个BLAS等,编程调用,再用MATLAB计算一下,当然方程的维数要非常大, 比较计算时间,差别就出来了,维数越大,这种差别越大,更遑论现在老外玩的是超大规模并行计算、网格计算、云计算、GPU的方程求解,80年代 初,NASA的一些科学家构思了一种脉动阵列机,干什么用呢?专门用于求解方程,太牛了。解方程的方法,大有讲究,这是数学家们的“饭碗”,别人很难想出 比他们更高的招数,什么降条件数呀,异步并行呀,同步并行呀,空间映射呀,还不算针对特定矩阵的特定解法,能用上的全用上,难追呀!
上面两点都是纯数学或者几何的问题,与有限元法使用关系不大。
第三是本构方程
这是有限元法的物理方面,力学方面。有限元的另一个物理、力学方面表现在连续方程等,CAE面临的对象多种多样,有力学、温度、声、电磁等等,包括耦合,能用一种统一的方法解决工程这正是有限元方法的魅力所在。
本构方程是描述两个物理变量的函数关系,比如应力与应变,核心是通过实验研究,得出函数关系,原则上函数关系中的未知变量要有明确的物理意义,否则价值就不大,并用实验来检验本构关系的正确与准确性,要在有限元中应用,本构关系还要求是显函数。
工程面临的物理对象、物理材料是纷繁的,对本构关系的研究构成了固体力学的主要研究内容,也应该是主要研究内容,知道了本构关系,就等于说知道了材 料的 “受载”,但是材料会破坏,何时破坏就属于“强度”问题了,古典有四个强度理论,还有学者在发展它,最为“时髦”是向材料的微观、细观、纳米,甚至原子、 分子上靠,最好直接“从头算”,解薛定谔方程,直接算材料的“命”、计算材料的各种特征、计算材料的演化规律,不过这有些“异想天开”,因为原子的运动服 从统计规律,是随机运动,想想也是,如果不随机,就不会有自然界的进化,随机是进化的基础。不过科学家还是想弄清楚这些,往极大与极小两个极端走,极大就 要找寻宇宙中心,极小就要寻求微观世界的本质。
以上说了三个难度都是数学、力学层面的,实际上,一个CAE软件还需要很多支撑,在现在这个计算机软件科学、软件技术飞速发展的时期,离开计算机技术,主要是软件技术恐怕是很难在商业上成功。
我看过很多搞有限元方法的人、或者搞数值计算的人编写的程序,几乎没有任何软件科学,哪怕是软件技术的基本知识,只会一门某某语言,大多数是 FORTRAN,就开始编写代码,这样搞CAE软件太难了。即便是大公司,按照软件工程的方法编写大型的应用软件,失败的项目也不少,投资都打了水漂。软 件也是一门科学,要高效编写程序,就要服从软件科学的规律,编写有限元软件乃至于CAE软件要考虑很多问题,这个团队必须要软件工程师参与,甚至要让软件 工程师来当“项目经理”,来“领导”项目的“生产”。
对于软件技术具体要考虑如下问题:
1)要严格按照软件工程的思路、方法进行开发、管理;
2)要精心设计系统的架构;
3)基于何种平台开发,windows或者linux,java或 者 dotnet等等;
4)后处理要考虑,强烈建议直接调用3D引擎,java3d简单易学,又是基于场景模式,DirectX和OpenGL也不难;
5)人 机交互界面是软件能否易用的基础;
6)脚本很有意思,写一段代码,直接交给系统,直接得出结果,中间的环节一概省略,脚本等于要自己定义一种“语言”,现 在解释性语言的魅力越来越大,自己就编写过一个计算表达式的解释器,还能计算复数,很多的函数等,现在将它部署在服务器上,用户打开网页,输入表达式,直 接得到结果,又学了一段时间的JavaCC,不得法,后来放弃了,不过学会了词法、标记、BNF、语法等计算机知识。
7)数据库一定是要考虑的,对于大量 的数据,它的检索速度要快得多,把你的所有数据存在数据库上吧!存文件的方法落后了,有微软的SQL,也有免费的mySQL。
8)数据结构是说用什么样的 方法表示你的数据,这个概念比较抽象,有些类似OOP,这是整个软件设计的基础,还有软件界的牛人炮制出来“模式设计”的思想,说了一些面向对象设计的基 本原则,但是它非常抽象。
9)Web化,现在的趋势是有业界大佬说“网络就是软件”,目地是用户以后都不要在自己的计算机上安装软件了,一切都Web化 了,按月给“我”交钱就行,也不贵。
10)并行化的目地是让从开始计算到计算结束,花费的时间仅可能短,有它的方法,我比较看好异步的Web Service。
11)接口问题,一个软件要考虑与别人的信息交换,我觉得数据库中数据源的思想非常高明,大家都遵守一个数据接口,不管你如何实现,用户 直接调用,这就是所谓的异构数据库,现在有人构思3D的数据源了,搞软件的大公司都非常好,对某一件事大家都遵守一个规范,就像现在的TD-CDMA,按 照此标准大家都都能够互相3G了。
12)语言问题不好说,java和dotnet都很好,连fortran、matlab都对象化了,关键是你的思想与技 巧掌握如何。
13)开发队伍问题,要开发就要组织一个团队,搞系统设计的,搞计划的,coder等,人员结构要合理。
14)文档是软件开发的基本要求,说 的太多了,我看别人的无注释程序,还不如自己写,我想很多coder都有这样的经历,这就是文档的重要性。
15)软件要健壮,就要测试,很多coder并 不重视这一点,junit、nunit是好的选择,还有一些专门的测试软件。
16)计划管理,make code就像工厂的生产,有计划有监督有奖有罚,才能保证“产出”,作坊式的生产已经很不和时宜了。还有很多,这些还只是皮毛,不能深论了。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删