2016年autodesk公司把CNN用于不同外形的流场预测。但是CNN这面最爆炸性的成果当属2021年google那面发表在PNAS的工作。目前被引700多次。
在Kochkov等的工作中,作者们在4倍糙化的网格上,实现了传统CFD做直接模拟的精度。这一篇工作并不是首创。google在2021年的另外一篇文章中,将他们的思想最开始应用于一个简单的对流传输方程中。
2021年稍早,哈佛大学与google公司合作,在Zhuang等的工作中提出了Learned Intepolation。即通过大量的样本来训练出来的CFD格式。
这对于咱们做CFD的很好理解,传统的面插值格式,可以直接从网格体心插值过来,也可以从2个网格体心或者多个网格体心取平均过来。对于CNN的插值格式,是通过针对样本进行多次采样,实现一个类似可以理解的在糙网格下,实现细网格上同样结果的插值格式。更好的理解可以这样:
在细网格下,传统CFD预测的面插值是1,糙网格下,CFD预测的是0.5。CNN经过多次特征与标签的采样之后,在糙网格下预测的插值可能是0.9。通过这样来实现糙网格的高精度模拟。
在google公司的工作中,除此之外,全部用的是CFD传统的解法。这对于使用深度学习从头到尾的计算,有很多优势。最大的优势就是,可以保证传统CFD的守恒特性。
在上图中,第1行是CFD计算的细网格的结果。第4行是CFD糙网格计算的结果。第2行,是CFD细网格的结果,通过平均技术投影到糙网格的结果。第3行,是CNN计算的结果。
可以看出,第3行与第1行结果相当!也就是CNN的“学习来的数值格式”可以在糙网格上进行直接模拟。
问题还是有的,这部分数据样本还是来自于CFD。如果CFD本身样本不对。那学习的样本本身就是错误的。
需要保持警惕的是:从错误中来学习,必然是大错特错。
google的工作是通过他们自家的机器学习代码jax来实现的。google的工程师为了弄这个,在jax上面写了个错位网格的CFD代码。。
CFD自家亲戚都懂的,现在很少有错位网格的CFD代码了。
因为google那面CFD层面比较初级,所以需要处理成同位网格,时间步进还没有植入高阶格式,多重网格求解器也还没有,边界条件只有周期边界条件。。。
目前,google团队还在公开欢迎各类CFD大佬去参与合作。岳子就是没有闲工夫,要不然岳子也要躺一躺这个浑水。