内容导引
01什么是CAE求解器?
02“站在巨人的肩膀上”or“成为巨人本身”?
03从求学到创业,我的CAE追寻之路
04第一版LBM流体求解器的诞生
05计算效率三年提升10倍,依然不被看好?
06五年提速百倍,大浪淘沙中的蜕变
01
阅读进度:0%
“能不能用一句话来描述清楚什么是求解器?”很多投资人朋友都这样问过我。
讲求解器之前先要对CAE有个明确的概念。CAE,也即计算机辅助工程,通过求解器解析和模拟真实物理现象,用“虚拟”的方式再现工程生产过程。如果说CAD是我们用来辅助设计的工具,那么CAE要做的就是用“虚拟”来评估这些“实际”的设计,这也是CAE的内核和最本质的作用。作为最重要的核心元素,求解器要做的就是“精确”地把握和还原真实物理现象,进而给出评估、评判“生产过程”好坏的标准。
在此基础上,如果真用一句话来描述求解器,那我会说:“CAE求解器是一个具备描述特定物理现象能力的矩阵运算代码包”。
首先,它必须得能解决某种类型的物理问题(通过求解描述这个物理过程的PDEs——偏微分方程组);
其次,它是个代码包或者库;
再者,这个库的主要功能是做矩阵(逻辑和/或代数)运算。
这样看起来似乎很复杂,但其实CAE求解器和我们日常生活中的计算器没有本质区别,当我们在计算器上敲入一些数字和运算符号,点击下令计算的等号“=”后就会产生结果,整个计算过程就是“求解器”完成的,它内嵌到了设备中,我们看不见,但是我们知道它存在。
CAE求解器与之类似。拿流体力学求解器来讲,在求解时同样需要输入一些参数,例如材料属性参数(如粘度)、温度、初始条件(如速度、压力)、边界条件(滑移、无滑移、镜像、对称)等,将这些参数输入到软件的“计算器”中,点击下令计算的等号“=”,就可以获得结果,基于这个结果我们再做后续的分析。
与计算器简单的计算过程相比,计算流体形态的过程更为复杂。首先,流动是一个随着时间会持续演化的过程,它的解不恒定,而是在每一时刻都有一个解;其次,评估流动形态不能只靠一个数字,而是需要多维指标来评估,例如速度、压力、紊乱度、界面形态等,甚至包括涡量、旋度、能量耗散等。人们发明出一系列的无量纲数来衡量流动的状态,比较著名的有雷诺数、普朗特数、瑞利数等。之所以有这么多指标,就是因为流动本身的自由度(涉及的变量、空间和时间)很大,我们无法仅对其进行简单的“好”或“坏”的评估。
工业软件五大学科基石[1]
不难看出,CAE求解器的研发需要多学科的交叉融合再加上强大的编程能力,其研发门槛之高可见一斑。关于要不要开发自主CAE求解器,我常举的一个例子是:CAE求解器对于工业CAE软件,就像航空发动机是飞机的心脏一样重要。
GE、PH的航空发动机在技术实力上远远领先我们,买来后直接组装在飞机上不就可以了吗?但被誉为“工业皇冠上的明珠”的航空发动机,是集成众多尖端技术的核心装备,加快其自主可控国产化替代的脚步已经刻不容缓,截至年底,由中央国务院批准设立“航空发动机与燃气轮机”国家科技重大专项(“两机专项”)的投入已经达到亿元。[2]
同样的道理,CAE求解器对工业CAE软件来讲就是引擎,是心脏,而这颗心脏一直是从美国、德国等发达工业国家漂洋过海远道而来,为我国的工业制造“施舍”着血脉奔涌的动力,我们享受到了这些“美国味”、“德国味”的甜头,尽管对它们也有诸多不满,却依然在这唯一不二的选择前甘之如饴。可是华为被制裁、MATLAB禁用等事件让大家从温水煮青蛙的安逸中醒悟过来,这颗心脏已经慢慢变成了一颗“定时炸弹”,不知道什么时候就可能让依赖着它的本体遍体鳞伤。于是大家开始高举“国产化替代”的大旗,工信部也把工业软件列为十四五规划“新五基”之一,整体政策环境欣欣向荣,就等着CAE厂商及锋而试,弯道超车。
而所有CAE厂商面前最大的拦路虎,就是求解器。
别人花了十年甚至二十年攻克的研发成果,我们想用一两年就啃下来,这在大部分人看来是不现实的,有能力也有勇气啃硬骨头的,可以说寥寥无几,屈指可数。而就是在这样残酷的现实下,我创立了适创科技,决定投身自主CAE求解器的开发。
02
阅读进度:11%
五年前,我是适创科技“第一代”也是当时唯一的算法工程师。作为一个“科研工作者”,我的想法很简单:先实现算法原型,再去优化,用fortran90编程——一个不那么规范但却高效的语言。5年的博士生涯,加上近7年的国内外工作经验,我积累了大量的对物理模型和数值算法的理解,为我带来的最直接的好处就是,针对一个工程问题涉及到的物理模型,我不再需要尝试所有的数值算法去做百里挑一的筛选,因为我已经大概率知道哪个算法对这类模型最有效。因此,在开发流体力学求解器时,我毫不犹豫地选择了LBM——格子玻尔兹曼方法。我告诉自己,绝不能让这个求解器成为呆在“实验室”里的一堆in-house代码,我们必须让这些代码成为真正的计算引擎来服务于工业客户,创造真正的价值。
当时的我站在十字路口的中央,一条路是下载开源软件库,基于这个库做二次开发,形成“自己”的求解器;另一条路是一切从0开始,解析、分解模型,选择、适配数值算法,编码、优化、迭代,最终形成自主的求解器。
选择一个好的开源软件库就可以说是“站在了巨人的肩膀上”,毕竟,这些开源软件包是由大量的算法、软件工程师编写的,其总体工作量可以达到数百人年。如果是好的库、优质的库,其代码规范、运行效率都很高,在此基础上进行二次开发、迭代的话,如果继承者团队本身实力很强,完全可以创造出更优质的代码库,这其实就是一个继承和升级的过程。但是从另一个角度上讲,这种继承和升级也存在着很大的风险。
首先,“站在巨人肩膀上”站得能有多高,取决于这个“巨人”本身有多高。我前面也提到了,这个开源软件库一定要是优质的,但是如何判断它到底是不是优质的呢?退一步讲,如果确实是优质的,能不能下载、买到也是不确定的。互联网上充斥着大量的开源代码,其中所谓的开源求解器,毫不避讳地说,它们大部分都是垃圾,并不具备实际的竞争力。真正有价值的开源库少之又少,而且大部分时候都存在因为一系列政治因素影响下的不可获取性。
其次,可以获取到的开源代码库大部分来自高校、研究院、国家实验室或一些“业余”兴趣爱好者,他们基于某些国家、政府项目编写的代码包,其实质目的是为了方便做研究,通过这些已“成形”的代码结合二次开发,便于科研人员更快速地开展各自的研究。所以总得来说,这些代码库并非为了商用,它只是提供一个框架,让科研工作者可以更高效地产生新的模型和知识。
再者,开源软件库在计算稳定上会有一系列问题。因为其重研究的属性,开发人员更多考虑的是它能不能解决某一类或某几类问题,而不会花很大精力去考虑各种情况(特别是复杂边界条件)去完善和优化代码的稳定性。在这种情况下,如果是两个完全不同的领域需要代码做适配,就会存在许多计算稳定性的隐患,最终稳定与否就完全决定于后来者的技术水平了。
所以,基于开源软件做“自己”的求解器,既取决于开源代码本身的质量或高度,也取决于继承者本身的技术水平。如果后者的水平在前者之下,那最多就发挥到前者本身的水平,而如果后水平远高于前者,那就可以发挥出两者能力乘积的倍数效应。但对于CAE求解器类型的开源软件,特别是针对难度较大的流体、结构塑形求解器来说,后一种情况非常罕见,因为对这些难度较大的CAE求解器来讲,其开发本身就已经不容易了,继承者要在技术实力上超过前辈,除非是有组织和有传承性的继承,否则其可能性是微乎其微的。
那么第二条路,也就是自己从0到1来开发呢?
很显然,相较于继承开源,成功自主开发CAE求解器的不确定性更大,毕竟继承开源进行开发最差的情况下也肯定有一个“求解器”,但是独立摸索进行自主开发的话,有可能的结果就是0成果,什么也没开发出来,或者更可能的是开发出一个“矮子”求解器,毫无竞争力,这种求解器对研究工作来说有可能有一定意义,但是做为商用化是完全不行的。这种“矮子”不是特例,而是一种普遍现象,也是我们国内一直没有能真正商用化的求解器的最本质原因。
如果说商用求解器需要算法和软件本身成熟度达到9级(准确性、稳定性、计算效率各3级),那么我们目前所能看到的大部分求解器只能达到3-6级。真正能商用化、有产业、国际竞争力的求解器,拿流体力学来讲,全世界其实也没有几个。所以可想而知这是一个多么有挑战的事,但是完全自主开发求解器这条路最大的好处,就是我们可以从“一张白纸”开始,拥有所有的自由度,从另一个维度来理解和摸索,整个开发过程并没有任何框架或天花板,所有的天花板都取决于开发者本身。
求解器的技术成熟度
对产业应用来讲,工业仿真软件最重要的产品属性其实是时效性,也就是在满足客户需要的前提下尽可能为客户节省时间、提交效率,翻译成求解器的能力,那就是计算稳定性和计算效率,在这个大前提下才能去探讨计算精度。
影响计算精度的因素非常多,相较于算法中的“数值阶数(order)”,计算精度更多地取决于边界条件或环境约束的影响,反而并不是求解算法本身。我记得一位著名学者说过:模拟计算中,如果你的输入是垃圾,那结果必定也是垃圾。不得不承认,就算有“完美”精确性的求解器,如果在输入阶段就漏洞百出,那么计算结果就完全没有参考价值。因此,想要在计算精度上做文章,我们更应该聚焦于如何能把“输入”做对,而不是过多地苛求数值计算“阶数”的提高。
我举一个热咖啡变凉的例子。
假设我们要模拟热咖啡随着与周围环境(杯子)不断热交换而变凉的过程,实现这个计算我们要知道咖啡、杯子等材质的热物性参数,也就是和传热相关的材料本身属性,包括热导率、密度、比热容等,同时,我们也要知道初始条件,包括咖啡、杯子的初始温度,然后我们做好几何模型,将参数代入传热求解器开始计算并产生结果。实际上即便我们不做计算也会感觉到,咖啡变凉的速度不完全决定于这些参数,而更重要的是取决于杯子的类型,比方说一个是普通的杯子,另一个是保温杯,显然保温杯条件下咖啡凉的慢。实际上,在这个简单的传热过程中,真正决定传热效率的是咖啡和杯子之间热阻,保温杯的热阻明显比普通杯子的大,因此整体传热更慢。但是真正的问题来了,我们在计算这样一个简单问题的时候,咖啡和杯子之间的界面热阻该怎么设置呢?显然,设置不当,计算出来结果的精确性会急剧下降。这个小的例子其实引申出来一个很重要的分析思路,也就是在模拟仿真过程中,决定计算结果精确性的是那些核心输入参数,比如上面所说的界面热阻,想提高我们对真实过程模拟的精确性,我们一定要抓住、