在人们的认知中,通常会给需要较长时间、较多经验、较高成本习得的技能以较高的评价,比如以不同的分级定义钢琴学习者的能力,通常飞行员和外科大夫因为有很高的习得难度,因此也有较好的社会地位。在工业产品中民用大型飞机、光刻机居于金字塔尖的位置。在这个非常狭窄的空间里,前面两位头戴光环的大佬,估计也会侧侧身给通用工业仿真软件留下一个小小的位置。塔尖上这三者的共同特点是开发他们需要巨额的金钱,无数的经验和漫长的时间。
工业仿真软件集计算数学、软件技术、硬件技术、工业知识于一体,是企业竞争力乃至国家科技实力的真实表征。随着国际国内政治经济环境的变化,国内对于自主工业仿真软件的呼声一浪高过一浪,各类产品银瓶咋破目不暇接。很多产品是平地一声雷,谤誉满天下。
历经半个多世纪的发展,仿真软件的开发已经形成以下三点相对客观的标准,能否满足这套标准不一定能决定一家企业能做多大,但是一定能决定其软件产品能走多远。互联网经济带来的快公司风格,民族基因中或多或少的急功近利,管理部门的弯道超车心理都对工业仿真软件的开发带来了负面的影响。
标准之一:基础架构
基础架构承载了软件的基因。一个创始人以什么动机、什么目的、什么工具和什么方法写下了这个软件的第一行代码一定是非常非常清楚的。如果这个问题没有说清楚,那么很大概率就存在原罪。最通俗的原罪就是代码来源于开源工具。
知识的借鉴,思维的碰撞,经验的传承这本身是人类社会数千年发展的模式。借鉴和仿写别人的代码一点也不需要感到羞耻。这里面穿插一个华为的小故事。
2002年12月中旬,思科全球副总裁在深圳香格里拉酒店约见华为高层,正式提出了华为侵犯思科知识产权的问题,并随即在2003年1月23日在美国得克萨斯州东区联邦法庭提起诉讼,指控华为及其美国子公司FutureWei盗用部分思科的IOS(互联网操作系统)源代码,应用在其Quidway路由器和交换机的操作系统中,对思科专利形成至少五项侵权。思科长达77页的起诉书中,华为涉及专利、版权、不正当竞争、商业秘密等八大类指控,21项罪名,几乎涵盖了知识产权诉讼的所有领域。
为了胜诉,2003年10月华为把涉及争议的VRP技术平台的全部源代码带到美国去接受检验。在没有任何一个中国人参与的第三方审核团严格认证后,结果是,在思科指出的"8大类21项指控"相关的2000多条源代码中,未发现华为对思科的侵权。以知识产权诉讼的形式,华为在技术研发上完成了一次严格的"体检"。可以说没有20年前的坚实基础,华为无法获得今天的技术地位。
以今天国内的专业技术实力,在不太多的投资的情况下,一个数学力学基础强劲的十多人的团队是完全有可能在2年左右吃透类似于Openfoam这种体量的通用代码,并再花2到3年重写整个架构。更何况国内还有东岳老师这批熟读典籍武艺精湛的牛人。路途虽遥,行则必至。
标准之二:验证和确认(Verification & Validation)
验证(Verification)是指保证代码本身编制过程中不存在任何错误,包括:公式推导、算法植入、代码编写都正确。这一类错误通常称之为bug,理解为作者知道正确的写法,但是因为某种原因写错了。这类错误的排查往往是一个较长时间的过程。因为每次代码更新都可能会引入新的bug。
确认(Validation)的过程要比验证难得多。确认是把计算结果和理论/解析解或者可靠的实验结果进行印证的过程。
困难之一:由于算法的局限,与精确解总是存在误差。
困难之二:如何获得可靠的用以确认和校准的实验结果。国产风雷软件的内部实验数据所耗费的成本应该很难用金钱来计量。可以公开获得的实验结果通常是非常稀少的局部数据,也不太可能对一个通用代码进行系统验证。这类公开实验结果的误差评定往往并不公开。
单独靠一个企业完成代码确认过程是不太可能的,除非是拥有独立实验设施的国立的大型科研机构。对于一般类型的企业代码,还可以借鉴下面的认证/试用过程来间接完成确认。
标准之三:认证和试用
现代学术和科研体系的内在并不是一个文献发表机构也不是一个技术名誉颁发机构,而是学术认证体系。在这个体系中,有一套成熟的方法(方法、观点、论点的公开表述)让同行对于学术内容进行评定。
国际上拳击和自由搏击都有相应的赛制管理体系,在这些赛制中获得冠军的选手会获得很高的荣誉和金钱作为报酬。相比之下,传统徒手武术的一切招数技法实际上被证明主要是用于体能和健身。这就是认证体系的价值。
同样道理,一个自主开发的求解器如果想获得专业领域的认可,必须要进入国际学术体系进行认证。
以犹他大学开源的著名的非线性生物力学求解器Febio为例,2017年至今使用该软件公开发表的学位论文和学术文章不低于100篇,作者几乎全部来自于国际上排名前100名的高校。这类广泛的软件试用实际上同步完成了认证和确认工作,就是既获得了大家的认可也间接完成了代码的实验确认。此方法值得借鉴。
漫长而光辉的道路
依据国际上仿真代码开发的历史,或许有以下三点可以作为共识:
如果是商业代码并基于开源架构且目标长远,重写整个基础架构是最快的捷径
开源基础架构,并放开试用
利用典型案例,展现代码特点,发表文献并参与国际学术评价
致所有的自主开发者,当然也包括我们自己:
自主开发是一段漫长而艰辛的道路,但是有无数盏灯在照耀前行!