区别于其他行业的软件开发,CAE软件的研发有其特殊性,这里的CAE软件主要指使用有限元/有限差分/有限体积等数值计算方法进行仿真的软件,其中包含了前处理器,后处理器,求解器以及相关模块,求解领域包括但不仅限于静力,动力,流体,电磁,声,热,光等。
中国在数值计算方法很早就有比较突出的成果,以冯康为代表的老一代数学家在有限元理论方面的研究处于世界领先地位,在工程应用方面也取得了相当的成功。只可惜由于种种客观原因的限制(主要是计算机在中国发展的限制以及投入不足),中国的CAE软件没能取得长足的发展。也导致了目前中国CAE软件市场被国外软件一统天下的局面。
长期从事CAE软件的管理研发工作,本文想从几个方面探讨一下CAE软件研发的一些相关话题。
1. 中国有无研发大型通用CAE软件的必要性。
2. 中国自主研发CAE软件的出路是什么
3. CAE软件架构设计
4. CAE软件研发管理
5. CAE软件的核心技术和风险
1. 中国有无研发大型通用CAE软件的必要性。
这是个老生常谈的话题,每逢开各种学术会议,最后总会得出结论:发展国产通用CAE软件是当务之急云云,开完会后不了了之。殊不知通用CAE软件研发涉及到的范围相当广,需要从技术,资金投入,开发周期,人才储备,市场应用,项目支撑等各个方面做好调研。开发一款优秀的通用CAE软件绝不是买个求解器,做一个前处理器,算两个case就能成气候的。Ansys,Nastran,Abaqus 发展了几十年,在研发方面投入巨资,不仅自己做开发,还收购了相当多优秀的CAE公司,将产品应用到无数的实际工程中,一步一个脚印才逐步发展到现在的水平的。
个人以为开发国产通用CAE软件虽然是个美好的愿望,在中国目前的环境下,不切实际(国家连OS研发都不愿意投入,CAE更不用讲了)。退一万步讲,即使能开发出来一个像样的产品出来,结局也能想到:基本上是被国外的产品直接拍死,只能做做科研或者给高校使用。
2. 中国自主研发CAE软件的出路是什么
既然没必要开发大型通用CAE软件,那国产CAE软件研发的出路在哪里呢?
既然通用的道路走不通,那就走专业化的道路。使用CAE软件的目的不外乎两点:优化和验证设计,缩短产品上市周期。在这个过程中,用户最耗时的部分是 几何模型和有限元模型的建立以及模型的优化。如果能针对这个部分做一些专业定制的开发,将会给客户带来很大的价值。试想,对一艘船进行仿真,建立整船的几何到建立有限元模型需要1个月。分析的工况有20个,这些要全部手工建立,仿真结束后要自己生成报告。如果能开发出一款专业的船舶建模软件,用户通过输入参数就能很快建立几何模型,而且可以从模板库直接取船舶的部件,考虑到船舶分析的一些特殊情况,比如大量使用shell和梁,杆单元,能够帮助用户快速建立好有限元模型,同时把常用的工况也做成模板,求解可以调用公认标准求解器,也可以调用针对船舶开发的专业求解器,仿真结束后把结果输出为用户想要的报告格式。可能3天就能完成整个仿真流程。这样可以大大减少用户的工作量。尤其对于精密制造业比如飞机,发动机,芯片等,效率就是王道。
3. CAE软件架构设计
略,以后通过UML图的
状态图
用例图 活动图等来描述一般CAE软件的架构和设计
4. CAE软件研发管理
CAE软件各个功能相对独立,因此很容易模块化,但是集成后各个模块之间耦合度很高。
曾经调试过一个case,仿真出现错误,从求解器开始debug,经过Mesh,FEM模型,CAD模型,最后找到问题的原因是CAD单位问题,也有过从求解器debug开始到CAD再又回来,最终问题定位到Mesh上。
人员配置:
不同于常规软件研发,CAE软件研发对研发人员背景有较高要求,需要理解CAE里很多概念。
对于一款常规的专业CAE软件,参考开发人员配置:
1> 系统架构师(1名)
系架构师主要负责 与应用工程师和客户工程师沟通,进行需求分析,技术选型,概要设计,模块设计,数据结构设计,保证产品按预计进度开发,以及软件仿真流程正确运行。这就要求系统架构师不仅需要有丰富的研发,架构设计经验,而且要对CAE行业有较深刻的理解。
2>前处理开发(2-3名)
前处理开发主要负责 将CAD模型转化为有限元模型,这个过程中主要是对CAD模型(按照各个行业需求,模板等,快速生成CAD模型)和有限元模型(有限元单元自动设置,网格密度优化,边界自动识别设置等)进行编辑,以及可视化。这块的操作需要
应用工程师的大力协助,因为这块是最需要专业知识的地方。也是对图形学要求最多的地方。
3>CAD开发(1名,可选)
CAD通常需要一个CAD内核,主要是建立和编辑几何模型(三维),可以用开源OCC,也可以用商业ACIS/Parasolid,也可以自主开发,看实际需求。
4>GUI/常用功能(若干)
主要是进行各种界面,以及常用功能进行设计和实现,比如工程文件设计,打开,保存。这块实际上和前处理会有很多重叠的地方。
5> 求解器开发人员(1-2名 ,可选)
不多说,核心开发。一名开发求解器,一名辅助做benchmark,也需要应用工程师的支持
画外音:如果有一个厉害的求解器就够了,如LS-Dyna和powerflow,各种前后处理器会围着团团转
6>后处理开发(1名,可选)
辅助:
1>应用工程师
2>客户工程师
应用工程师主要负责和系统架构师,客户工程师沟通,讲实际工程需求和客户需求转化为实际可开发需求。可以这样说:应用工程师是整个团队的军师。
敏捷开发可以应用到CAE的研发管理中,早期做原型时,可以一个月作为一个Sprint,半年左右完成原型,以后逐步缩减Sprint时间,转为迭代开发。敏捷开发的思路比较清晰,做法也很明确,可以根据实际需要进行运用。
5. CAE软件的核心技术和风险
目前自主研发CAE软件并没有太多的技术障碍,通常认为的技术障碍,比如CAD内核,网格,甚至求解器都可以购买商业库。个人认为CAE软件的核心技术在于:
给用户提供一整套问题的解决方案,帮助用户快速解决实际工程问题,尤其在通用CAE软件解决不了或者解决起来很费劲的的领域,软件在这个过程甚至可以只起辅助作用。当然从长远来,所有的基础开发都不可避免。
在国外尤其是美国,CAE软件研发的生态环境比较完善,高校,各种科研机构,公司,技术人员都能从CAE研发中获得稳定长期的利益,包括开源产品,这也是为什么CAE软件产品能在国外蓬勃发展。
开发专业CAE软件的目的是提高分析效率,但是如果提高的效率的程度不能中和产品研发的成本,就会存在商业上的风险,这是做需求分析时必须要考虑到的。
这里的CAE是广义的,包含了传统意义上的 CAD/CFD/EDA/CAE/CAPP等
本文的设计主要覆盖软件工程流程中的
概要设计和详细设计。因为客观原因,CAE软件与软件标准开发流程有所不同,设计文档更倾向基于可快速实现的
原型开发。
设计中并不强调某一模块的功能,也不追求某一方面的性能效率,而是基于软件工程,着重搭建一个通用性,可靠性,稳定性,扩展性,可测试性,维护性优秀的CAE软件平台。基于此平台,既可以开发大型通用有限元软件,也可以快速开发出行业CAE软件产品。
第一部分:模块划分
根据功能分以下几大
模块:
1. 输入输出(Input/Output或 I/O)
2. 几何
3. 有限元模型
4. 后处理器
5. 求解器
6. 图形
------------------------------------------------------
7. 公共模块
8. 高性能计算(HPC)
9. 参数优化设计
用例图(略)
第二部分:详细设计
1. 输入输出模块(Input/Output)
1.1.文件的读入与写出。文件类型包括:
1>. 软件自定义的工程文件
2>. 标准的CAD文件(DWG/Step/IGS/SAT/X_T/STL/Model/等)
3>. 标准有限元模型文件(bdf/cdb/inp/k/NEU/ModelFlow/I-deas/Ansa/Mar/Admin等)
4>. 标准的行业CAD文件 (制衣CAD格式,PCB板CAD格式等)
需要说明的是第四种文件,该文件的格式数据通常包含了几何描述信息和属性,几何描述信息是指无几何的拓扑信息(比如一个长方体,几何描述信息是用初始点坐标和长,宽,高四个参数来表示,而没有实际的点线面体拓扑信息),读入该类文件后,需要用CAD内核重新建立模型。
类图
1.2. 外部接口
通常CAE软件能够供其他软件调用,或者作为其中一个模块,也能够实现参数化命令行调用。
2. 几何模块(Geometry)
这里的几何指广义上的CAD,包含了几何的创建,编辑,管理等。一般的商业CAE软件提供了CAD功能,都比较简单。对于复杂的实际工程,很少在CAE软件中建模,而是在专业CAD软件(Catia/UG/ProE/Inventor等)或者行业CAD软件中建立几何模型,然后导入到CAE软件中。所以CAD不是CAE软件的重点,但是好的CAD模块能提高
CAE仿真的效率,避免外部CAD数据与CAE接口之间的损耗(最典型的就是CAD数据修补)。CAD建模本身也是一项技术含量很高的工作(参数建模,约束建模),而且Catia/UG/ProE/Inventor这些产品在CAD方面已经做的非常好了。CAD与解方程组数值算法一样,也是基础性学科领域。
这里不涉及通用的CAD建模,重点在建立CAD模板。所谓的模板是指可反复使用,用户输入参数或者导入模板参数文件,即可建立所需的CAD模型,不需要用户手工去生成。(比如用户定义了一架飞机模型参数,参数可以保存为文件,生成实体几何后,修改机翼长度的参数,可再次生成模型而不用做其他修改)。这也是专业CAD软件的优势所在。
CAD建模,首先需要内核,目前商业的3D CAD内核有Parasolid和ACIS,Granite,开源的OCC,国内的CAD内核有广联达的GGP等。
3. 有限元模型(FE Model)
3.1. 单元
面向对象方法很适合构造有限元中的单元,ElementType为所有单元的基类。主要方法有:点的集合,材料,分析类型,阶次。根据单元的空间维数将单元划分为 0/1/2/3D单元。如需扩充新单元类型,在相应的单元类型上派生即可。
3.2. CAD和CAD属性(边界条件)
这里边界条件泛指任何在几何(点,线,面,体)上的属性(位移/荷载/温度/吸收边界/约束。。。)
CYCAD_Controller 负责获得几何数据和附加在几何上的属性(边界条件)。CYCAD_Data存储几何数据,CYCAD_Attribute存储与几何对应的属性。CYCAD_Engine是CAD内核的接口,通过接口也可以调用自己开发CAD内核。基于该结构,实现了CAD与MESH的解耦,对于已经有的CAD/Mesh接口,能实现最小限度的修改。
3.3. 网格划分
从名称可以看出采用了Factory和Facade模式,CYMesh_Facade负责与外部的接口,主要是设置1. CAD数据,2. CAD属性(材料,荷载,温度,边界等),3.网格划分参数和策略。Controller主要负责Mesh流程,CYMesh_Engine 是执行Mesh引擎的接口,可以根据实际需要选用网格引擎,以上选取了Gmsh,NetGen,Distene,VKI等,在此结构上,开发人员可以方便的对网格划分流程和网格引擎进行扩展。
3.4.网格属性
网格划分完成后,通常做法是把网格数据保存为规定的文件格式以供求解器调用。也有直接在内存中供求解器调用的,虽然提高了效率,但是不利于调试。对于自主开发的求解器,可以把网格导出为Ansys/Nastran等求解器的格式,以方便做Benchmark。
网格的数据包含了如下信息:
1. 节点信息: 索引和坐标(Vertex)
2. 边信息:索引和点索引(Edge)
3. 面片信息:索引和边索引(Face)
4. 单元信息:索引和节点索引(Element)
通常以上信息只需得到 点和单元的信息,其它都可以求出。
5. 属性标签:加在几何上的属性会分配在相应的网格单元或者节点上。(边界条件/荷载/材料 等)
网格活动图:
说明:
1. Mesh Data为 网格数据
2. Validate Mesh quality 验证网格的质量,网格质量指单元的形状的好坏,有通用的公式计算(比如最大角度,长宽比,Aspect ratio/Skew 等)。网格质量的好坏直接影响到求解精度
3. Output to Mesh file导出为网格文件
4. Run Solver 调用求解器
5. Need refine:根据求解器反馈的结果和预定义的收敛准则,判断是否需要加密网格
6. Refine Mesh: 加密网格
4. 后处理
后处理是对仿真结果的处理,包括可视化,归纳分析,导出报告,与实验数据对比等。技术上来讲没有太多瓶颈,主要是数据的组织,再就是大数据显示的效率。
3.1. 可视化主要包括等值线,云图,XYplot,动画等,
3.2. 归纳分析,是指对仿真的原始数据进行加工,得到所需要的参数,比如VonMises应力,S参数等。
3.3. 与实验数据对比,这个也是以后CAE仿真的一个发展方向:即如何将仿真得出的数据与实验数据,保证仿真数据具有实际参考价值。
后处理主要用到
图形显示模块。
目前市场上比较通用的商业后处理器:Ensight,HyperView,Femap。
5. 求解器
求解器核心是求解偏微分方程(PDE),有限差分/有限元/有限体积等数值方法二三十年前就已经很成熟,功能上没有太多难点。开发求解器主要在稳定性,扩展性,效率以及定制化等方面还有很多改进余地。开发求解器面临的主要问题是非技术问题,就跟键盘布局一样,大家用习惯了,再出来新的除非特别优秀或者有足够多的亮点,否则用户很难认可。拿求解器Radioss来说,Altair声称兼容Nastran,但是行业认可度并不高。另一个例子是Comsol,Comsol在求解器,前后处理上并无太多亮点,但打出了多物理场的旗号,并且在多物理场建模方面也确实提供了一些便利。
求解器涉及的领域有结构,电磁,热,声,光,流体等领域,可参考附件。
6. 图形
该模块包括以下几部分:
1. 几何模型,有限元模型,结果的可视化
2. 几何有限元模型的图形化编辑
3 GUI设计
1. 几何模型,有限元模型,结果的可视化
可视化开发工具首选OpengGL,使用OpenGL需要较深的图形学功底。目前绝大部分可视化工具都是基于OpengL。也有些公司在OpengGL之上做了封装,提供了更高层次的调用接口。
开源可视化工具VTK,ParaView。
也有提供商业可视化工具的(VKI/HOOPS/Gravies/),价格不便宜。
2. 几何/有限元模型的图形化编辑
涉及到编辑几何,编辑网格。允许用户通过鼠标,输入等方式编辑几何和网格,支持更复杂的功能(比如装配体的网格组合)
CAE软件通常采用卡片式编辑,即在一个ListView中按Index显示所有内容,提供编辑,删除,添加等,在新的窗口中实现功能。
3. GUI
图形化用户接口开发工具有MFC,QT,WPF等。最近十年QT的发展已有超过MFC的势头。作为GUI开发工具,QT具有使用简单,不依赖平台,开发资源丰富等特点,可作为开发的首选。
因为GUI涉及到软件的每个部分,同样,为了建立兼容的CAE开发平台,在开发之初最好能确定GUI工具,以后就不再改动。
7. 公共模块
公共模块没有太多核心技术,实现也没有难点,但在CAE开发中相当重要,尤其到开发的中后期,公共模块的重要性更加突出。一个好的公共模块能大大提高开发测试效率。
公共库主要包括 字符操作,数值计算,基本数据结构,错误返回代码定义,图形算法,常用算法,矩阵类等。
CYMatrix_Operator是定义的一个中间矩阵类,主要是统一矩阵操作的接口。考虑到求解器用的矩阵库各不相同,通过此接口可以统一,但性能上会有所降低。
8. HPC(High performance computation)
参考 FEM之求解器加速---HPC简介
9. 参数优化设计
参考
FEM之优化算法
总结:
1. 本文只是一个初步的架构设计,其中有很多细节很难用文档来描述。
2. 设计中参考了如下软件:
ANSA/Catia/SolidWork/Patran/Nastran/Ansys/Abaqus/HyperWork/HFSS/FEMAP/LMS/ADMIN/Comsol/Cubit/SimLab
写文本的目的只想说明,不管是开发大型通用CAE软件,还是行业的CAE软件,在技术上都是可行的。
还是那句话:在国内开发一个Ansys/Nastran 量级的CAE产品,任重而道远~
查看更多评论 >