本文主要从软件开发角度来分析CAE软件产品的定位。这里所指的CAE软件 仍然是指用有限元,有限体积,差分等方法进行仿真的软件。数据管理,云计算之类不包含在内。
根据从易到难分为以下几种:
1. 基于其它CAE软件的二次开发
利用CAE软件提供的命令流脚本,脚本语言 开发功能模块
典型的应用是在Ansys里APDL建立界面, Abaqus里用Python编写脚本
2. 基于 其它CAE软件二次开发(独立界面)
开发独立于CAE软件的GUI,在GUI中输入参数,将输入的参数组织成命令流或者脚本,然后导入到CAE软件里,在CAE软件里进行建立几何模型,划分网格,建立有限元模型以及仿真,结果可以在CAE里查看,也可以在开发的GUI里查看。
这类开发的特点是 需要额外的开发工具开发GUI,运行时后台调用其它CAE软件,让用户感觉是独立的软件。
典型的应用:
<1 用QT建立界面,接收用户输入参数,然后生成APDL命令流,导入Ansys进行建模仿真。
<2 Isight 调用生成的 Ansys *.cdb模型进行仿真优化。
<3 利用VBscript脚本建立模型 导入到HFSS中进行仿真。
3. 开发专业前后处理器,调用其它CAE软件求解器:
通用CAE软件一个最大的短处是建模繁琐。这类软件在前后处理上提供了相当的便利,通常能独立的快速创建编辑几何模型,网格,有限元模型,提供模板等功能。有限元模型生成好以后输出相应的求解器文件供第三方软件求解。
典型应用:
SimLab/Ansa/其它专业CAE软件。
4. 某一类型/行业一揽子解决方案
在第三类基础上提供求解器。同时提供更专业的一揽子解决方案。比如专门针对涡轮发动机,提供热,结构,转子动力,振动,流体等全面求解方案,提供快速几何建模,有限元建模,优化设计,等功能。这类软件客户针对性强,集中解决某一领域或某一行业的问题,是以后CAE软件研发的趋势。
典型的应用:
LS-dyna: 碰撞分析的标准。
Fluent:流体仿真的标准。
Midas/PKPM: 建筑行业。
HFSS: 电子行业高频仿真的标准。
5. 大型通用CAE软件
比如 Ansys/Nastran/abaqus/Comsol 不再多举例
目前国内科研院校主要以第一,二类开发为主。CAE的核心模块比如几何建模,网格划分,有限元模型,求解器都没有涉及到(这里的求解器是 可以商用的求解器, 开源软件拿来改改的不算)。
第三,四类 涉及到了CAD/CAE软件的核心功能,尤其是第四类CAE产品,是以后CAE软件发展的方向:专业化,傻瓜化,one-stop服务,当然开发投入成本也高。
第五类产品的研发像OS,需要国家从战略上的投入
目前国内大部分求解器,以及开源求解器的开发仍然停留在小作坊式的水平,开发出来的程序能实现基本功能,但在稳定性,扩展性,测试性,维护性等方面差强人意,很难达到商业应用的要求。严格意义上来讲,求解器的开发也属于软件开发的范畴,理应用软件工程的思想来指导,但由于求解器本身有其特殊性,开发流程也不适合完全按照一般软件开发流程来做。
目前国内大部分求解器,以及开源求解器的开发仍然停留在小作坊式的水平,开发出来的程序能实现基本功能,但在稳定性,扩展性,测试性,维护性等方面差强人意,很难达到商业应用的要求。
严格意义上来讲,求解器的开发也属于软件开发的范畴,理应用软件工程的思想来指导,但由于求解器本身有其特殊性,开发流程也不适合完全按照一般软件开发流程来做。
结合自己开发经验,讨论一下如何系统的开发求解器。求解器开发可以分为三个阶段:
1.原型开发;
2.迭代开发;
3.维护开发;
1. 原型开发
这阶段主要完成以下任务:
1.1.技术选型;
确定要实现的功能,使用的开发语言,开发环境和工具。目前大部分求解器开发使用C/C++/Fortran语言
1.2 实现基本功能;
要能对最简单的例子进行计算,并得到正确的结果。需要做的工作:
1.3. 完成求解器原型;
这里需要介绍一下Matlab软件,基本介绍看百度,主要说一下Matlab混合编程。Matlab有工具是可以把M文件翻译成C++的,不推荐。主要介绍如何把C++/Fortran文件编译成Matlab文件。这个功能很有用,当进行模块化开发的时候,C++/Fortran完成模块功能,然后编译成Mex文件,作为Matlab的模块使用。这样可以逐步将Matlab翻译成C++/Fortran,提高开发效率。
小结:
2. 迭代开发
可靠性:正确的模型,都能给出可靠的计算结果;
鲁棒性:任何例子都能给出正确的反馈;
稳定性:大规模计算时,程序能保持稳定;
3. 完善求解器的前处理和后处理:
有限元模型检查;
网格质量检查;
仿真结果分析;
4. 创建更多经典的Benchmark例子进行测试。
小结:
迭代开发阶段的主要目的是完善求解器,建立规范化的开发流程:
1> 确定技术选型,比如线性方程组库的使用,并行计算,GPU等
2> 完善前处理和后处理
3> 建立更多经典Benchmark例子,例子的选择需要 有经验的工程师的参与
4> 确定求解器输入文件格式
5> 定期发布版本以供测试
3. 维护开发
这阶段主要完成任务有:
1. 测试实际工程的例子,处理实际工程中所碰到的问题
实际工程的模型要远比经典模型复杂,求解器需要更多的功能支持计算实际的模型。
2. 建立回归测试机制
回归测试是求解器开发中非常重要的一环,通常求解器修改后,需要验证是否对以前的case有影响,这就需要建立回归测试机制,通常用一种脚本语言(Python,Perl)开发回归测试程序。每次修改代码后,运行程序,比对修改后与修改前的计算结果。
可以看出要开发出高质量的求解器,既要熟悉求解器本身的算法,又要了解软件开发流程,更要熟悉软件工程中的架构,复用,重构,模块等思想,对开发人员提出了更高的要求。
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删