国产CAE软件产品定位与开发求解器解析

本文主要从软件开发角度来分析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 实现基本功能;

要能对最简单的例子进行计算,并得到正确的结果。需要做的工作:
 

  • 能生成标准求解器的输入文件,比如Nastran,Ansys,HFSS,Fluent等的求解器输入文件,例子的计算结果要与这些标准求解器计算的结果做比较。
  • 标准求解器输入文件的解析器。用来解析输入文件,作为开发求解器的输入数据。
  • 比较标准求解器的计算结果和开发的求解器结果。
  • 这阶段的主要目的是保证算法的正确性。开发时为了提高效率,可以借助Matlab软件: 用Matlab完成原型的开发,直到计算结果正确。在此基础上再将Matlab翻译成 C++/Fortran。这样在早起可以将精力集中在算法验证上。需要注意的是尽量进行模块化开发。


1.3. 完成求解器原型;

这里需要介绍一下Matlab软件,基本介绍看百度,主要说一下Matlab混合编程。Matlab有工具是可以把M文件翻译成C++的,不推荐。主要介绍如何把C++/Fortran文件编译成Matlab文件。这个功能很有用,当进行模块化开发的时候,C++/Fortran完成模块功能,然后编译成Mex文件,作为Matlab的模块使用。这样可以逐步将Matlab翻译成C++/Fortran,提高开发效率。
 


小结:

  • 1>需要开发一种标准求解器文件的解析器。
  • 2>需要熟练使用标准CAE软件进行仿真,熟悉求解器输入文件和计算结果
  • 3>开发的求解器要能正确计算经典的Benchmark例子
  • 4>原型开发决定了开发的可行性,如果这阶段的任务无法完成,需要加强研发的投入。
     


2. 迭代开发

  • 这阶段主要完成以下任务:
  • 1. 完善新功能
  • 在完成原型的基础上,添加新功能,比如支持新的单元类型,支持新的荷载边界,处理更复杂的模型等。
  • 2. 保证计算准确性基础上,进一步提高求解器的质量


可靠性:正确的模型,都能给出可靠的计算结果;
鲁棒性:任何例子都能给出正确的反馈;

稳定性:大规模计算时,程序能保持稳定;

  • 效率:计算速度,内存消耗。考虑GPU,并行计算;


3. 完善求解器的前处理和后处理:


有限元模型检查;

网格质量检查;
仿真结果分析;



4. 创建更多经典的Benchmark例子进行测试。


小结:

迭代开发阶段的主要目的是完善求解器,建立规范化的开发流程:

1> 确定技术选型,比如线性方程组库的使用,并行计算,GPU等

2> 完善前处理和后处理

3> 建立更多经典Benchmark例子,例子的选择需要 有经验的工程师的参与

4> 确定求解器输入文件格式

5> 定期发布版本以供测试
 

3. 维护开发

这阶段主要完成任务有:
 

1. 测试实际工程的例子,处理实际工程中所碰到的问题

实际工程的模型要远比经典模型复杂,求解器需要更多的功能支持计算实际的模型。
 

2. 建立回归测试机制

回归测试是求解器开发中非常重要的一环,通常求解器修改后,需要验证是否对以前的case有影响,这就需要建立回归测试机制,通常用一种脚本语言(Python,Perl)开发回归测试程序。每次修改代码后,运行程序,比对修改后与修改前的计算结果。
 

可以看出要开发出高质量的求解器,既要熟悉求解器本身的算法,又要了解软件开发流程,更要熟悉软件工程中的架构,复用,重构,模块等思想,对开发人员提出了更高的要求。
 

1.jpg


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空