性能分析器应用案例
Previously on Performance Analyzer
在上一篇文章“性能分析器:模型不合理的照妖镜!”中,笔者向大家介绍了性能分析器工具的作用及其包含的主要内容。简单回顾一下,包括以下方面:
本文将分享一个性能分析器的具体应用案例,让大家更好地体会如何使用性能分析器分析和优化Amesim模型的可求解性。
本文采用的案例源于Amesim的Demo模型Performance_Analyzer.ame,大家可以通过图1所示方式获取此模型文件。模型如图2所示。
打开模型后,进入仿真模式。打开Run Parameters对话框,设置仿真时间为5s,打印间隔为0.0005s;然后切换至Standard options选项卡,勾选Discontinuities printout复选框,如图3所示。
图3 勾选Discontinuities printout复选框
『注:勾选Discontinuities printout,其作用是激活Run Details窗口中的Discontinuities按钮,输出并显示模型中的不连续信息(图4所示)。此操作会增加结果文件大小,默认不勾选。』
图4 Run Details窗口中输出的不连续信息
待仿真计算完成,点击工具栏中的Performance Analysis按钮,打开性能分析器窗口,查看并分析性能分析器的四个模块。
首先打开Run statistics模块,如图5所示。从CPU时长曲线(右上图)可以看出,大约从3.5s左右(注:为方便表述,本文将这一时刻称为T(char))开始,曲线斜率明显增大,说明计算速度明显减慢;从最小积分步长曲线(右下图红色曲线)可以看出,在T(char)之后的一段时间内,求解步长急剧减小。
将窗口左侧中的不连续数量拖至模型空白处绘制变量曲线,如图6所示。可以看出,从T(char)开始,模型中的不连续数量剧增,这与图5曲线中的求解步长减小和求解速度变慢的结论相对应。
为进一步查看和分析不连续的构成,将性能分析器切换至Discontinuities模块,如图7所示。可以看出,模型中的不连续主要来自液压缸和泵(注:双击左侧列表中的子模型,可直接在模型中定位),其中液压缸的不连续数量占到了总量的66.6%。另外,曲线图也表明,液压缸的不连续主要发生在T(char)之后的一小段时间内。
『注:也可通过运算细节窗口查看不连续的详细信息,如图4所示。』
接下来,将性能分析器切换至State contributions模块,如图8所示。在左侧状态贡献度列表中单击Controlled按钮,使之按照贡献度大小依次排列,可以看出排在第一位的是质量块m1的速度变量(注:质量块元件编号见图2;双击左侧列表中的子模型,可直接在模型中定位)。
在图8左侧只勾选质量块m1的速度变量,在右侧查看它的累计贡献度和瞬间贡献度曲线,不难发现,从T(char)时刻开始,其贡献度急剧增加。
为进一步揭示原因,绘制质量块m1的位移曲线和速度曲线,如图9所示。可以看出,T(char)正好是活塞杆运动至右端点与缸体接触的时刻,并且从此刻开始,质量块m1的速度出现大幅度的高频振荡:一方面,大幅度高频振荡会增加求解难度;另一方面,质量块速度在0左右剧烈振荡,导致活塞杆和缸体在极短时间内持续发生接触和分离,这正是造成不连续数量剧增的主要原因。
我们知道,大幅度的高频振荡产生的主要原因是高阶固有频率对应的阻尼比太小。为进一步验证这一想法,将性能分析器切换至Frequencies模块,如图10所示。可以看出,系统的最高固有频率为3565.572Hz,其对应的阻尼比几乎为0!
至此,通过性能分析器提供的有效信息,我们可以得到以下结论:液压缸端点处接触阻尼参数设置不合理(太小),导致在T(char)时刻,活塞缸运动到右端点与缸体接触碰撞时,质量块速度产生大振幅的高频振荡,并由此产生大量不连续;大振幅高频振荡和大量不连续使模型求解难度增大,求解步长急剧减小,求解器频繁调用质量块m1的速度等状态变量,从而导致求解时间加长。
查看液压缸的参数设置,如图11所示,发现damping coefficient onendstops这一参数为0N/(m/s)!进一步坐实了上述分析结论。
经过上述分析,我们知道,液压缸端点接触阻尼系数设置太小,这不合理,需要改进。接触阻尼系数可按下式进行计算:
式中,c表示需要设置的接触阻尼,单位为N/(m/s);z为阻尼比,通常可取值10%;k为接触刚度,此处k=10^9N/m;m为质量块m1的质量,此处m=1kg。计算得到c=6324.56N/(m/s)。
改进接触阻尼系数后,保存模型并提交运算。运算完成后提取质量块m1的速度曲线,如图12所示,T(char)时刻速度的振荡得到了明显抑制。
『注:从图12中可以看出,在0到3.5s这段时间,m1的速度仍存在高频振荡,这主要是由液压缸和质量块m1的运动阻尼太小造成的。大家在建模仿真过程中,可以根据实际情况决定是否对这些振动做进一步优化,此处不再展开说明。』
打开性能分析器,改进模型后的Run statistics模块如图13所示。可以看出,改进后在T(char)时刻不存在求解步长减小或求解速度明显减慢的现象;改进后模型的不连续数量为982,比改进前(2869)减少了65.8%;改进后模型计算所需的CPU时长为7.34765s,比改进前(21.5437s)加快了65.9%。
图13 改进模型后的Run statistics模块
『大家还可以通过性能分析器其他三个模块查看模型改进前后的区别,这里不再赘述。』
综上可知,通过使用性能分析器分析和优化模型,使模型的可求解性得到了极大改善!
关于本文的内容和性能分析器的使用,还有以下一些想法和体会分享给大家:
首先,本文所采用的案例模型较为简单,计算上也不存在求解速度异常缓慢或卡死报错等情况,它仅用来展示性能分析器的使用方法。我们在做建模仿真时,可能会遇到一些很复杂的模型,求解时也会出现棘手的问题,这时就可以参考文中的分析方法对模型参数进行优化和改进。
另外,经过上一篇文章"性能分析器:模型不合理的照妖镜!"对性能分析器的介绍和本文的案例,相信大家能够体会到,性能分析器只能为我们指明模型改进的方向,而不能明确告知我们应该修改哪些参数、如何修改,因此要熟练运用性能分析器为建模调试服务并非易事,需要对仿真分析的对象有深刻的认识、需要有足够的理论基础作为支撑、还需要有足够的耐心和一定的建模调试经验,有时甚至要靠一点点运气。
模型的调试往往就是这么枯燥!而真正让我们有所收获和提高的,正是这些不可名状的东西。一旦通过思考和努力把这些问题解决了,你就会充实而欣慰!