玲珑阁
返回 · 书籍

第 122 章

第122章 攻克

拒绝认亲,真少爷走上顶峰 · 清源公子 · 3323 字


第二天一早,张辰和钱瑾姝到了办公室。两人并排坐下,打开电脑和笔记本,开始按照昨天的思路,把判据的分区界从动量厚度换成排移厚度。

钱瑾姝负责推导新的阈值标定公式。排移厚度的积分区间更靠近壁面,阈值函数的系数不能直接沿用原来的。她在纸上列了积分式,代入风洞实验数据开始拟合。

写到第三页的时候,笔停了。

“不对。”钱瑾姝盯着纸上的几行推导,“拟合出来的系数在内外层的过渡区域跳变太大,判据会在那里出现不连续。”

张辰凑过来看了一眼。他明白钱瑾姝的意思——判据如果不连续,加密区域就会在边界层中间出现不该有的突变,导致网格质量下降。

“换一种拟合方式?”张辰问道。

“已经试了三种。”钱瑾姝把前面几页翻给他看,“多项式、指数、分段线性,都有问题。”

办公室里安静下来,键盘声和笔尖声都停了。

张辰盯着屏幕上的代码,脑子里在过另一种思路,不拟合系数,直接用物理约束反推?但那样计算量太大。

两个人各自想各自的,谁都没说话。窗外的阳光从东边移到桌子中间,落在钱瑾姝的草稿纸上,把那些公式照得发亮。

下午两点,老刘来接他们去钱老家。

到了钱家,钱文忠已经在书房等着了。张辰把上午卡住的情况说了一遍。

钱文忠听完,没急着回答。他拿起桌上的老花镜戴上,翻了翻钱瑾姝带来的草稿纸,翻到第三页停了一下。

“你们在用全局拟合?”钱老问道。

钱瑾姝点头。

“不要拟合系数。”钱文忠把草稿纸放下,从书架上抽出一本旧书,翻到某一页,递过去,“直接用边界层内的局部平衡条件反推判据。系数不是算出来的,是物理过程本身的产物,你们把因和果搞反了。”

张辰接过书,那是一本七十年代的气动热力学讲义,页角已经泛黄,但公式依然清晰。

钱老指的那一页讲的是边界层内不同尺度的主导机制,内层粘性主导,外层对流主导,中间有个过渡区。判据的阈值不需要拟合,只需要让内层和外层的判据在过渡区自动衔接。

“内层用一种判据,外层用另一种,中间用加权平均过渡。”钱文忠道,“权函数用边界层厚度的相对位置就行。”

张辰脑子里那根弦一下子通了,看着书上的推导,又看了看自己上午的代码,知道问题出在哪了。

他们在用一个判据打天下,而正确的做法是分而治之。

“谢谢钱爷爷!!”。

钱文忠摆了摆手,把书放回书架,坐回椅子上,“继续往下讲。今天讲最优控制的对偶原理。”

张辰把书上的关键公式抄在笔记本上后,开始认真钱文忠讲课。

讲的内容是约束条件下的弹道优化,讲协态变量的物理意义,讲哈密顿函数的构造。

张辰和钱瑾姝一边听一边记,谁都没再提判据的事。

从钱老家出来,天已经暗了。

由于两家距离并不远,张辰边走,脑子里边想钱老说的“分而治之”。

内层用一种判据,外层用另一种,中间加权平均。

权重函数用边界层厚度的相对位置,靠近壁面的地方内层判据占主导,远离壁面的地方外层判据占主导,过渡区自然衔接。

接下来两天,两人把所有精力都扑在判据模块上。

第一天上午,张辰重写了判据模块的架构。原来是一个判据算到底,现在拆成三个子模块:内层判据、外层判据、过渡区加权。

内层判据用局部曲率,外层判据用压力梯度,过渡区的权函数用双曲正切形式,保证平滑衔接。

钱瑾姝同时重新推导阈值参数。内层和外层的阈值分开标定——内层用靠近壁面的实验数据,外层用边界层外缘的数据。

两组阈值之间的差异不大,但分开标定之后,过渡区的连续性明显改善了。

下午的时候,两套判据分别跑通。

内层判据加密的区域集中在壁面附近梯度最陡的地方,外层判据标记了逆压梯度的起始位置。

两层的结果单独看都没问题,但合在一起的时候,过渡区还有一点点不连续。

张辰盯着输出结果,钱瑾姝在旁边翻笔记本。

“权函数的陡度参数调一下。过渡带的宽度太窄了,把陡度系数从十降到五。”,钱瑾姝道。

张辰改了参数,重新跑。这次过渡区平滑了,两层判据的加密标记没有重叠也没有缝隙。

第二天上午,他们把新判据嵌进全流程代码,开始跑验证。三组标准算例,一组一组地过。

第一组算例跑完,加密后的网格数量比原始方案少了百分之三十二,关键区域的气动参数与实验数据偏差百分之一点八。

第二组算例,偏差百分之一点六。

第三组算例,偏差百分之一点四。

“比之前那个版本还好。”钱瑾姝道。

张辰把三组结果整理成简报,发给周明。

邮件里附了对比曲线和网格图,备注里写了一句话:“判据已改成分区加权方案,建议集成测试。”

周明没回邮件,二十分钟后,他直接过来了。

他站在张辰身后,把三组结果走马观花看了一遍,又翻了翻钱瑾姝的草稿纸。分区判据的推导、内外层阈值的标定、加权函数的选取,每一步都在上面。

“谁的主意?”周明问道。

“钱老给我们的思路。”张辰道。

周明点了点头,没多问。“集成测试我来安排。判据先定型,后面不要再动了。”

周明走后,办公室又安静下来。

张辰盯着屏幕上的网格加密图,看了好一会儿,然后把代码从开发分支合并到主线。提交注释写的是:“判据模块定版。内层曲率判据,外层压力梯度判据,过渡区双曲正切加权。基于排移厚度。”

钱瑾姝在旁边把草稿纸整理好,用夹子夹住,放进了帆布包。

周五集成测试,总师亲自到场。

张辰和钱瑾姝提前把判据模块嵌进了全流程代码,在测试服务器上预跑了一遍,没有问题。

总师进来的时候,张辰正在看日志输出,钱瑾姝在核对输出文件。

测试脚本开始跑。第一个算例,第二个算例,第三个算例。日志一条条地弹,屏幕上绿色的“PASS”一行接一行。

总师站在后面,没说话。

第三个算例跑完,张辰把关键区域的气动参数提取出来,和风洞实验数据做比对。

壁面压力分布曲线几乎重合,热流密度在转捩区域的最大偏差不超过百分之一点五。

总师转过身,指了指张辰和钱瑾姝。

“判据模块定型。后续网格生成直接调用这个版本。”

他说完就走了,周明跟在后面,走到门口的时候回头看了张辰一眼,竖了个大拇指。

张辰把测试数据整理归档,代码提交到版本库。

提交注释里多写了一行:“集成测试通过,总师签字定版。”

他靠在椅背上,转过头,钱瑾姝也在看他,两人长舒一口气。

“结束了!!”,张辰感慨道。

“嗯。”

四天,从钱老指出方向,到判据模块定型,仅仅用了四天。

判据模块定型后,张辰和钱瑾姝没闲着。周明把下一个子任务发到了他们邮箱——弹道优化模块的参数校准。

任务文档不长,只有四页。张辰从头到尾看了一遍,核心问题写得很清楚:现有的弹道优化算法在给定约束条件下收敛速度太慢,需要从数学层面改进目标函数的梯度计算方法。

“又是数学问题。”张辰把文档推到一边,靠在椅背上。

钱瑾姝还在看第二页,没抬头。过了十几秒,道:“不是梯度计算的问题。”

张辰转过头看她。

“梯度计算的方法没错,错在约束条件的处理顺序。”钱瑾姝把文档转过来,指着其中一段,“现在的算法先处理动力学约束,再处理边界约束。顺序反过来,收敛能快至少一倍。”

张辰拿过文档又看了一遍。钱瑾姝说得有道理——边界约束比动力学约束更紧,先处理紧约束能缩小搜索空间,梯度下降的方向会更准。但他在脑子里快速过了一遍算法框架,发现还有一个更深层的问题。

“顺序调换只能解决收敛速度,但局部最优的问题还在。边界约束处理完之后,搜索空间还是非凸的。得改目标函数的光滑性。”

钱瑾姝愣了一下,然后点了点头,“你是说用光滑逼近替换不光滑项?”

“嗯。燃料消耗的积分形式不光滑,现有方案用的是绝对值函数,梯度不连续。换成费雷歇可微的近似函数,内点法才能收敛到全局最优。”

两人对视了一眼,同时转回去看文档。张辰把这个问题在心里又过了一遍——不光滑项的逼近精度如果太高,计算量会上去;如果太低,逼近误差会影响最优性。他决定先把精度定在千分之一,后续再调。

“周哥知道这些吗?”张辰问道。

“文档是他写的,他应该知道。可能是之前没往这方面想。”钱瑾姝道。

张辰打开电脑,把弹道优化的代码从版本库拉下来。代码量不小,两千多行,光初始化就占了三分之一。

他先找到约束条件处理的部分,把顺序调换了一下。编译通过后跑了个简单的测试用例——收敛速度确实快了,接近三倍。但正如他预判的,结果陷入了局部最优,不是全局解。

“光滑逼近你来写?”张辰看向钱瑾姝道。

“行。你改内点法的主循环。”

— 本章完 —