本文摘要(由AI生成):
本文介绍了Amesim仿真软件中多个分析模块的功能和应用。Run statistics模块统计了17项变量,其中关注的主要有CPU时长、运行时长、积分步长相关变量及不连续数量,这些变量能反映运算速度和模型稳定性。State contributions模块统计了状态变量在计算过程中的被调用次数,帮助分析模型在不同阶段的重点调用变量。Frequencies模块显示模型频率信息,重点关注阻尼比小的模态频率,以避免高频振荡。Discontinuities模块则提供了模型中不连续的详细信息,为优化子模型参数提供方向。这些模块共同帮助用户优化仿真模型,提高求解速度和稳定性。
一、引言
1.1 求解的困境
在Amesim仿真求解过程中,我们经常会遇到求解十分缓慢并且没有有效提示信息,或者干脆卡死报错的情况,笔者称之为“求解的困境”。造成求解困境的最主要原因是参数设置不合理。
说到“参数设置不合理”,包括以下两种情况:
第一种是物理上的不合理。比如,当我们使用带限位的质量块时,如果设置的lower limit比higher limit还要大,这就好比儿子的年龄老子还大,肯定是不行的;再比如,图1所示的几种报错,都属于物理上的不合理而导致的计算中止。
图1 物理上的参数不合理举例
物理上的不合理通常是由建模错误造成的,我们通过认真检查都可以避免或排除此类问题;但计算上的不合理并非都源于建模错误,因此往往难以发现和解决。在我们QQ答疑群里经常会提到“参数设置不合理”,通常都是指计算上的不合理,而这正是性能分析器所要重点解决的问题。1.2 计算上的不合理
导致计算上的不合理的直接原因通常有两个,一是高频振荡,二是不连续太多。我们知道,Amesim的求解器默认采用变步长进行仿真计算,可以根据具体模型调整求解步长,以便用较少的求解资源实现所需的求解精度。模型中的高频振荡和不连续会加大仿真求解的难度,求解器需要用较小的求解步长才能满足求解精度,从而减缓了仿真求解速度。如果高频振荡和不连续太多,就会大大增加求解难度,有时步长甚至会达到10的负几十次方秒的数量级,求解器会疯狂调用相应的状态变量,进而导致求解困境的发生。
要解决这一问题,必须修改不合理的仿真参数,减少不必要的高频振荡和不连续数量。但麻烦的是,这些计算上的不合理往往没有那么直观,看不见也摸不着,就像妖怪一样藏在模型中惹是生非。我们没有孙悟空的火眼金睛,因此需要一面照妖镜把它们找出来,而性能分析器正是这样一面照妖镜,它可以帮我们揪出模型中参数设置的不合理之处,为我们指明改进的方向。二、性能分析器详解
通过��文的介绍,相信大家对于性能分析器的作用已经有了初步的认识。严谨讲就是:性能分析器工具可以让我们更好地分析和理解模型的求解性能;根据此工具提供的相关信息,我们可以对模型参数进行手动修改,以便改善模型的可求解性,加快仿真求解速度。
在仿真进行过程中或仿真结束后,单击工具栏中的Performance Analyzer按钮,即可打开性能分析器窗口,如图3所示。该窗口共包含四个模块,即运行统计Run statistics、状态贡献度State contributions、频率Frequencies和不连续Discontinuities。用户可以通过单击最左侧的四个按钮在不同模块间切换。
需要注意的是,建模时必须在模型中放置Simulation库中的runstats元件(图4所示),才可以正常使用Run statistics模块。下面详细介绍性能分析器各模块的作用和使用方法。
2.1 Run statistics模块
Run statistics模块窗口如图5所示,用于统计计算过程中求解器的各种信息。窗口左侧显示了当前时刻求解器信息变量;右侧是绘图区,默认两张曲线图分别是CPU时长曲线和积分步长曲线(包括当前、最小和最大积分步长曲线,均以以10为底的对数形式表示)。另外,此处的变量和模型中其他变量一样,拖至模型空白处即可绘制相应曲线。如图5所示,Run statistics统计得到的变量共有17项。一般情况下,我们只需关注其中的部分变量(已在图5中标出)。下面对这些变量做简单说明:其次,变量③至⑦是与积分步长相关的变量,均以以10为底的对数形式表示。如果在某一时刻或某时间段内,积分步长很小,说明模型在此处存在高频振荡或者不连续的数量较多。需要指出的是,变量③表示当前时间步长,其曲线图受打印间隔影响较大,如果极小或极大的积分步长发生在打印间隔间隙,那么变量③的曲线图就会丢失这些重要信息;而变量④至⑦均不受打印间隔的影响,因此必须综合分析变量③和变量④至⑦的曲线图才能得到有用结论。
最后,变量⑧表示的是当前累计不连续数量。不连续越多,则运算越慢,甚至会卡死报错。
除上述8个变量外的其他变量,只有当我们为子模型编写代码时才有必要关注,因此通常情况下可以不用管。2.2 State contributions模块
State contributions模块窗口如图6所示,用于统计各状态变量在计算过程中被调用的次数。窗口左侧列出了当前时刻模型中的各状态变量被调用的总次数,也包括它们的编号、所属子模型、变量名、单位、类型等详细信息;右侧为曲线图,上图是状态变量的累计贡献度,下图是瞬时贡献度。图6 State contributions模块窗口状态变量的贡献度即它们在运算过程中的被调用次数。通常情况下,在仿真求解的不同阶段求解器会重点调用不同的状态变量。通过State contributions模块我们可以分析出哪些状态变量在哪些时刻被求解器重点调用。如果在某一时候某个状态变量被疯狂调用,说明对应的子模型在此处存在高频振荡或大量不连续,这会大大拖慢仿真速度,需要重点优化和改进。Frequencies模块窗口如图7所示,用于显示模型的频率信息。窗口左侧显示的是模型初始时刻的时间常数、固有频率和阻尼等信息;在窗口右侧点击Start按钮,可以进行线性化运算,分析模型在整个运算过程中的最大频率。频率这部分内容解释起来相对麻烦,需要有较好的系统动力学或振动力学方面的理论基础才能很好地理解。简单点说,大家要明白以下内容:
模态频率是动态系统的固有特性。如果系统的某阶模态频率对应的阻尼比太小,当它被激发时,就会产生大幅振荡。因此,如果系统的高阶模态频率对应的阻尼比太小,仿真时就很容易发生大振幅的高频振荡,这会大大增加求解难度、拖慢仿真速度。因此,必须保证模型中无关紧要的高阶模态频率具有较高的阻尼比,以便抑制或消除不必要的高频振荡,进而加快仿真求解速度。图7窗口中左侧红色和橙色标记的频率,正是无关紧要的高阶模态频率和阻尼比太小的模态频率(注:Amesim默认的感兴趣的频率范围是200Hz以内,阻尼比要在0.01以上,这两个数值也可由用户根据具体模型在图6窗口中手动输入),我们在优化模型参数时需要重点关注。当然,单独查看Frequencies模块并不能分析得到需要优化的具体子模型或参数,需要结合另外几个模块共同分析才可以。2.4 Discontinuities模块
Discontinuities模块窗口如图8所示,用于统计模型中子模型不连续的详细信息。窗口左侧列出了模型中包含不连续的子模型,以及它们的不连续数量和占比;右侧为绘图区,有两个选项卡,默认为饼状图(Pie chart),显示了不同子模型的不连续数量占比,也可切换至曲线(Curves),包含累计不连续数量和瞬时不连续数量两个曲线图。
上文已经提到过,不连续的数量太多会减慢仿真速度,过于密集甚至会卡死报错。Discontinuities模块提供了模型中不连续的详细信息,根据这些信息,我们可以分析得到哪些子模型在哪些时刻存在数量较多的不连续,从而为改进和优化子模型参数提供方向。
首发公众号Amesim学习与应用,作者新浩。