首页/文章/ 详情

开源仿真软件的开发和利用

2年前浏览2361

1 开源软件协议

常见的开源软件协议如下:

  • 具有传染性的GPL协议: 基于GPL协议软件开发的软件也必须是GPL协议。GPL要求你在将你的软件贩卖给用户时必须向用户公开你的源代码。如果你的软件只做SaaS服务,倒是可以不公开源代码,因为你并没有把软件贩卖给用户。

  • LGPL协议: 如果只是与LGPL软件做动态链接,那么你的软件不需遵守LGPL协议。

  • BSD/MIT/X11协议: 不要求基于这些协议软件开发的软件公开源码,只要求著作权等的表示

  • Apache协议: 与上述BSD协议类似,但是受美国出口法律约束。(注: 我注意到中国厂家的WPS也有类似条款,因此在法律上华为现在不能使用WPS)

  • 在美国的开源服务器,如GitHub也受美国法律约束。这里面是有很多隐患的,需要小心。

(作者不是法律专家,上述意见仅供参考。如有错误,敬请斧正!)

2 开源的理由

  • 不得不开源,比如说基于GPL协议

  • 炫技,得到承认的欲求(请点赞,请关注等)。同时伴随着扩大软件的知名度的希望。

  • 争取更多用户,提高知名度。如此希望得到更多的投资机会和合作的可能。

  • 降低软件公布门槛,提高软件质量。因为开源软件完全免责,可以把bug留给他人修改。

  • 用税金开的软件被要求开源(美国,法国,日本)。但中国例外。

  • 有些自己开发的东西,放在自己手里多半是要烂掉了,还不如开源。

对于商业公司而言,他们还有其他考量:

  • 可以增加名气, 增加影响力. 开源软件的质量是新兴公司技术水平的最好体现。

  • 给使用者建立信心。由于门槛低(不要钱)使得用户乐于尝试,由于开源没有断供的危险。

  • 一种广告手段。可以得到免费的测试,修正,而提高软件质量。用户的反馈也有利与对市场的把握,而节省市场调查的成本。

  • 一种招聘高水平员工的手段。

  • 可以自由的使用各种开源软件,以减少开放成本。

  • 一种打破垄断的弱者的战略。

基于开源的商业软件战略可以有如下几点。

  • Support and service: 为开源软件的使用提供技术服务。RedHat采用的是这种策略。这个是不是中国人最熟悉的做法?我发现中国有不少提供国外商业仿真软件使用方法培训的公司,奇怪的是它们并不能开发软件,甚至没有软件的代理权?开源软件的使用提供技术服务是进一步的做法,由于熟悉开源软件内部,应该能做得更好。不过我怀疑这种模式的收入有限,因为仿真软件的用户数量毕竟不能和RedHat这样的操作系统,LAMP这样的开发环境相比。但是另一方面,软件的咨询服务方面的费用比例正在上升。具体的数字就不知道了。

  • Dual license: 提供限定功能的免费版本和无限定的付费版本。一般情况下免费版本的使用也加上一定条件,如源码修正必须公开,不允许商用等。这种方式营销的面比较强。免费版本可以使潜在的用户产生信任感,得到迅速的反馈,了解用户的需求,还可以得到免费的软件测试,甚至是开发人员。MySQL采用的是这种策略。

  • Constomazation: 付费定制。定制的内容可以是现有软件欠缺的,也有可能是特殊行业的特殊功能,也有可能是便利化工具。以近期流行的3D打印为例,其特点是材料的渐增过程,解法上也许不需要什么新东西,需要的就是计算工具的重组和相应的便利化工具。个人认为这是一个非常广阔的领域。能够熟练地操作这一工具是打破ABAQUS,ANSYS等独霸市场的有力武器。

  • SaaS: Google,eBay他们开发软件,但是不买软件,他们买网上服务。在这里,你用GPL软件也可以,这是其魅力之一。

  • 人才培养: 归根结底,如果没有相应的人才,什么战略都归为空谈。而中国正是缺少这样的人才。如果能够通过开源软件形成一个开发社区,可以用来教育培养相应的开发人才向商业软件公司输送。也许这才是最根本靠谱的战略吧。

3 中国的仿真软件开放

在中国开发仿真软件需要认清如下三个问题

  • 开发仿真软件首先需要了解"应用(研究的/工业的)→物理/力学原理 → 数学 算法 软件工程"这一系列的过程。如果你要开发一流的软件,你更是需要精通这一系列的过程。根据我个人的经验,最低限度你需要经自己的手推导出全部的公式,厘清每一个数据的走向。这是一个很高的门槛,即要求很高的数理素养,还要具备一定的软件开发人员的工匠气质,决定了能参加这类软件开发的人很少。科学计算平台trilinos可以是最有影响力的平台之一了,它在Github上现在的星数是349,这个数字和高人气的通用开源软件相比要差一,二个数量级。

  • 中国的研究水平较低。在我熟悉的专业(力学有限元)中,我没有看到国内专家的高水平专著,也很少看到有影响力的论文。这是中国很难出现相应的高水平软件的原因之一。另外,据我个人的经验,中国的教授们很少自己编程,因此很难理解认识软件开发的难点,痛点。而据我所知,名著Finite Element Method的作者之一·R.L.Taylor,名著Finite Element Procedure的作者K.J. Bath都是会自己动手编程的,而你如果有机会读到FEAP的源码,你还可以看到英年早逝的力学大师J.C.Simo和其他名家开发的代码。

  • 中国缺少开源软件开发的文化。有句话说"Opensource is an ethos not just license". 在中国,竞价排名,知识付费的盛行正是反映了某种缺失。另外,在欧美,日本,利用税金开发的软件一般是要求开源的,据说中国也投入过数亿开发有限元软件,但是并不公开。如上所述,我们应该可以想象光靠高校等的研究人员来开发出一个可用的软件是非常困难的,最好的可能是开发出一个还不错的基础平台。如果能借此培养一些开发人才,形成一定的开源开发社区,从企业拿到二次,三次开发资金,还有成长起来的可能。上面的独吞模式必定是一条走不通的死胡同!参考这里

4 仿真用开源软件

4.1 CAD软件

4.1.1 OpenCASCADE

OpenCASCADE is a powerful CAD/CAM/CAE kernel and development platform for 3D modeling applications

用C 开发的程序库,主要功能是3D形状的表现和演算。EUCLID-IS CAD/CAM system in 1987年. 1999年以OpenCASCAD为名开源。

4.1.2 FreeCAD

标准的CAD软件,用C 开发,采用OpenCASCAD内核。留有与有限元软件的接口,可以无缝链接calculix等开源软件。

4.1.3 SALOME

仿真解析用前,后处理软件,用C 和python开发,使用了Qt4,VTK, OpenCASCAD库。包含CAD功能,网格划分功能,计算条件设定功能,计算结果后处理功能。

4.2 网格划分软件

4.2.1 Netgen

从CAD数据生成三角形(2D)或四面体(3D)单元的软件库和软件。

4.2.2 Tetgen

从CAD数据生成四面体单元的软件库和软件。

4.2.3 Gmsh

从CAD数据生成四面体单元的软件库和软件。

4.3 网格管理软件

网格管理软件负责管理既存网格,比如节点,单元的生成,删除。网格细分,粗化。并行计算时的通信管理等。

4.3.1 MOAB

4.3.2 MSTK

4.3.3 STK

这个是大型平台trilinos包含的一个程序库。trilinos内还有一个网格管理库PUMI,但是缺乏一些必要的功能,如side set的实装,现在还在开发中。

4.3.4 INMOST

4.3.5 MESQUITE

这是一个自适应(adaptive)网格划分工具。用于修正网格以提高网格性能。

4.3.6 MetisScotchZoltan

Graph数据结构管理软件。我把它们放在这里是因为它们经常用于并行计算时网格的分割。

4.4 计算工具

4.4.1 blaslapack

blas内包含最简单的矩阵,矢量运算。Lapack内包含矩阵求异,固有值计算等。他们之所以重要,是因为所有计算都少不了这些计算。matlab也好,ruby也好,python也好,其函数实际上就是调用这两个库。其二,这两个库都经历了极致的优化。直接调用优化后的库函数往往意味计算速度的大量提升。个人建议,如果购买了intel编译器,建议使用其MKL库。否则建议使用openblas

4.4.2 各种各样的求解器

mumps:MUltifrontal Massively Parallel sparse direct Solver联立方程组求解器

arpack,parpackImplicitly Restarted Arnoldi Method固有值求解器

fftw:离散傅立叶变换计算库

存在大量类似的计算工具。现在有将这些工具整理归总的趋势,如suitesparse就包含十来计算软件。下述计算平台trilinos和Petsc就包含的更多了。

4.5 科学计算平台

现代科学计算软件的开发面临着硬件环境的巨大变化,软件技术的快速进化和解析对象的巨大化,复杂化的问题。为了提高科学计算软件开发的效率,将靠近硬件处理,方程组求解等基本功能制成预制部件提供给用户,使用户能够集中于特定功能的开发。基于这种想法开发了科学计算平台TrilinosPetsc

Portable, Extensible Toolkit for Scientific Computation
Trilinos is Greek and conveys the idea of a string of pearls suggesting a number of software packages linked together by a common infrastructure


Petsc:软件平台提供基础的计算模块。用户只需集中开发application codes即可

Trilinos是用c 开发的。它整合了不少开源软件与自己的数据结构相连。该软件由数十个相对独立的package构成。多物理场通用有限元软件Albany,CFD有限元软件NaluCFD是完全基于Trilinos的。Petsc是用c开发的软件,其结构就紧凑多了。

4.6 FVM/FEM软件

4.6.1 OpenFOAM

基于C 的FVM CFD软件。仿真软件界最最最成功的开源软件。原来是博士论文程序的开源,现在在全世界范围内广泛使用。甚至出现了不少专做openfoam的咨询公司,基于openfoam的定制开发公司。

4.6.2 libMesh

一个FEM功能软件库,用C 编成。包括网格的输入输出,各种各样的插值函数,积分方法等。细节非常全。

4.6.3 freefem

数学家编制的为数学家服务的FEM软件。其求解对象为PDE的弱形式,具体可参见这里。商业软件Comsol multiphysics应该受到了它的影响。

4.6.4 deal.II

基于C 的多物理场有限元软件。从2000年公开已有20个年头了。说实话对其能够生存下来有些意外,因为它的基本设计只能允许一种单元存在,2维四面体,3维六面体。这个通用性太差了!

4.6.4 Elmer

芬兰开发的多物理场有限元软件。在2000年开发的软件中这是我知道的唯一用Fortran开发的。

4.6.5 CodeAsterCalculixFrontISTR

对于固体,结构变形计算来说上面三个还不错。其中Code Aster的功能最全。但是都是基于c或Fortran结构化程序,太古老了!

4.6.6 Albany

全面基于Trilinos的多物理场有限元软件。活跃开发中

4.6.7 mfem

最少量的使用外部软件库,相对小巧的多物理场有限元软件库。其基本设计很大程度地参考了前述freefem 。它有一个特点是导入了Isogeometric analysis功能。

其设计有个毛病是要求全解析领域的自由度一致。希望开发者能修正这一问题。

4.6.8 moosekratos

近期开发活动最活跃的多物理场有限元软件之二。

4.7 可视化处理

科学计算领域的数据可视化有数据多样,复杂和庞大等特征。可以处理FEM/FVM的计算结果是必须的功能。在可视化领域,说VTK已经一统江湖不算夸张。其中VTK是图形显示处理库,ParaviewVisit基于VTK的可视化软件。




另外vtk.js是基于java script的VTK的网络版本。Paraview glance是paravew的网络版本。用户可以利用其搭建自己的云处理可视化系统。

理论科普通用非线性静力学结构基础
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2022-10-01
最近编辑:2年前
hillyuan
力学博士,仿真软件开发者
获赞 139粉丝 12文章 28课程 0
点赞
收藏
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈