摘要
本文将以单步法中的广义族积分器和多步法中的BDF族积分器为主要讨论对象,详细介绍大型多体系统动力学软件中常见类型的积分器的算法细节.每族积分器都给出了不止一套计算公式,而且其对应求解微分代数方程组(DAE)的index可以为1、2或者3.除此以外,本文还着重介绍了微分代数方程组的误差估计、变阶变步长策略等关键技术;并讨论了大型DAE问题求解过程中的初始条件分析、Jacobian矩阵复用等重要环节的算法实现;对于BDF积分器族,文中还详细描述了高阶格式的非绝对稳定性、速度变量的误差估计等瓶颈问题的解决方案.全文以多体系统动力学软件的积分器程序实现为目标,强调在满足给定精度的条件下,如何提高计算效率和保证仿真运行的鲁棒性.另外,本文也简要介绍了在某些应用场合中有很大潜力的显式积分器族.通过分析和比较,文中还将指出各种算法的优缺点以及可能的改进方向,希望能够为研究人员和程序开发者提供一定的参考.由于篇幅限制,本文只列出了几个标准的算例比较,作为文中内容的补充;并给出了几种积分器性能比较的一般性结论.文中几乎所有方法都经由作者程序实现、测试和比较,并且相关算法的实现细节也都已尽量列出,可以很容易地编程实现并应用到实际问题的求解中去.
* 国家自然科学基金资助项目(11772101)
多体系统动力学得到的动力学方程组是微分代数方程组(Differential-Algebraic Equations,简称DAEs),其一般形式特别复杂.为了简单起见,本文以最典型的index-3的完整约束DAEs:
(1) |
为主要对象,介绍一下常见的通用型软件积分器的常用算法与实现细节.通常来说,通用型多体动力学软件的积分器主要强调以下几个方面的特性:
(1) 精确性. 通过控制积分过程的局部误差,可以大致保证计算结果的正确性和精度;
(2) 高效性. 在满足给定的误差条件下,自适应地选择尽可能大的积分步长,保证计算速度;
(3) 鲁棒性. 积分器应当可以稳定地求解所有常见类型的多体系统动力学方程组.
通用型软件中的动力学方程组在形式上要比方程组(1)繁琐得多.除了完整约束方程组之外,很多实际系统中还包含非完整约束方程组、控制器方程组(一阶常微分方程组或代数方程组)、离散时间方程组等等.但从数值方法的角度来看,最复杂也最难求解的还是类似方程组(1)的index-3的微分代数方程组.因此,本文主要以方程组(1)为分析对象,而只在文中简要讨论一下其他情况,主要是带非完整约束的DAEs的求解方法.
本文只强调适合大规模多体系统动力学仿真软件的通用型积分器技术,而不详细讨论针对某些专门问题的特殊积分器技巧.在通用型软件中,积分器一般是作为独立模块开发的,主要用来宏观控制求解进程,而尽量少与其他模块在底层交互.软件中的方程组模型一般是提前设定好的.当软件的积分器模块开发调试完成后,一般很少再作大的修改.随着求解问题领域和规模的扩大,当软件架构需要扩展升级时,积分器模块往往也需要整体重新设计和开发,此时亟需整理和消化前人开发过程中发展出来的技术.因此积分器模块中求解技术的维护和传承非常重要.还应该指出的是,尽管积分器的理论对程序的开发有绝对的指导作用,但好的积分器中的绝大部分有效的技术细节往往都来自实践中的反复测试、改进和提供,而非理论公式推导本身.
本文尽量整理了作者在科研和程序开发中学习和体会到的积分器的一些技术细节.文中绝大部分积分器都经作者亲自开发并测试过,希望能对我国自主研发多体系统动力学软件有所帮助.
动力学方程组的特性分类
动力学过程是非线性时变的.积分器必须能够自适应地追踪系统的时变特性,并选择合适的时间步长来复现真实的物理过程.要做到既不能错过重要的物理现象,也没必要采用过密的时间节点而浪费大量计算资源.尽管待求解的方程组都是方程(1)的形式,但在仿真计算过程中,由于具体系统的动力学过程千差万别,积分器的表现也是非常不同的.从动力学特性上来说,多体系统仿真中常见的DAE系统大致可以分为以下几类:
(1) 刚体为主导的系统.这类系统在大型多体系统动力学中最为常见.由于建模方法不同,所得方程组的数学特征也稍有不同.
• 通过递归(recursive)公式建立的动力学方程组,其主要特点是:方程的非线性很强,表达式相当复杂;其Jacobian 矩阵经常为满阵,但其规模相对较小.
• 由绝对坐标描述,通过拉格朗日方程建立的方程组,其主要特点是:约束方程的个数很多,可能与动力学方程的个数为同一量级;刚体之间的相互作用绝大部分由作用力和约束方程来描述.
一般来说,多刚体系统方程的刚性问题往往并不严重,而且光滑性比较好,往往可以用高阶格式并结合比较大的时间步长进行数值积分.
(2) 柔性体动力学为主导的系统.一般来说,在这种多体系统中,刚体的个数仍然远多于柔性体的个数.但每个刚体只有6个自由度,而每个柔性体的模态坐标个数可能比较多.更重要的是,模态坐标对应的固有频率可能很高,会在DAE系统中引入比较强的刚性,导致Jacobian矩阵的条件数比较大.实践中发现,积分器本身的耗散往往不能有效地衰减模态坐标对应的高频振动,因此推荐在模态坐标中引入少许线性阻尼或结构阻尼以提高仿真计算效率.
(3) 大变形体为主导的系统.通常包含用几何精确方法或者绝对节点坐标方法建立的大变形有限元模型,需要引入几何非线性和/或材料非线性的影响.这类系统的动力学方程个数通常远远多于约束方程个数,且方程组主要由二阶动力学方程组成,具有特殊的稀疏格式.一般说来,从结构动力学中发展出来的方法,例如广义方法或者HHT方法,在求解这类问题中被证明是很有效的.
(4) 接触碰撞过程为主导的系统.在散体颗粒系统或者传动系统的动力学仿真中,经常会遇到这一类系统.首先,由于方程结构的变拓扑性,稀疏矩阵求解器的符号LU分解不再能复用,而根据具体条件进行矩阵LU分解是计算中所必需的.其次,常用的罚函数方法得到的接触碰撞动力学方程组的刚性和高频振荡问题都比较严重.最后,这类系统仿真过程对于接触体的几何形状和接触模型比较敏感,采用不同的算法求出的接触力可能差异比较大.
(5) 有特殊要求的一些多体系统.例如在虚拟现实仿真中,要求做到实时仿真,需要用到实时积分;高速旋转系统中,需要对转动进行有效精确描述;长时间运行的无耗散系统,对能量守恒要求比较高,需要用到守恒格式的积分器;对最优控制设计得到的系统,可能需要求解的并非初值问题,而是边值问题等等.这些问题将不在本文中详细讨论.
实际中遇到的大型多体系统仿真问题,往往是上述几种类型的组合.因此实践中需要的通用型积分器,要求能同时求解所有这些类型的方程组.此外,具体的应用场合也非常重要,而不同场合考验的是积分器不同方面的特性.例如,很多设计过程需要反复进行大量的动力学仿真以优化产品的动力学性能;而在另一些场合中,实时仿真的要求可能更加重要.一个优秀的通用型积分器应该在求解常见应用问题的时候具有高效性,而同时在不常见的特殊应用中也应该具有鲁棒性.
常见通用型DAE积分器简介
通用型DAE积分器需要有能力做到:
(1) 自适应地选择积分步长;对于变阶积分器,还需要自适应地选择阶数;
(2) 有效地进行误差估计,既可用于保证计算精确性,又可用于变阶变步长;
(3) 不连续性和不稳定性现象的检测与处理,自动进行算法调整和事件解决;
(4) 有效处理由于数值原因导致的速度、加速度、拉格朗日乘子曲线的不光滑性;
(5) 在奇异位形、不光滑点处积分器遇到无法解决的问题时可以自动重启.
所有的DAE积分器都源自相应的常微分方程 (Ordinary Differential Equations,简称ODEs) 积分器.但DAEs与ODEs在数值特性上有很大的不
常用的通用型DAE积分器大部分都是隐式格式的,其主流算法通常认为主要有三大类:基于向后差分公式(Backward Difference Formula,简称BDF)的积分器族,基于广义 (Generalized-)方法的积分器族,与基于隐式龙格库塔(Implicit Runge-Kutta,简称IRK)方法的积分器族.这些方法可以直接求解DAE方程组(1)或其变形.此外,将DAEs转化为ODEs并采用ODE积分器来进行计算也是重要的DAE求解思路.
BDF族积分器包含了一系列变阶变步长积分器.其具体的公式有好几种变形格
近年来,广义 族方
隐式龙格库塔算
以上积分器求解DAEs时都会遇到如下困难:
(1) Jacobian矩阵的相关问题.例如在约束系统的奇异位形下,Jacobian矩阵可能是奇异的或近似奇异的;在刚性问题中,可能由于 Jacobian矩阵条件数太
(2) 对方程组(1)的直接计算仿真过程中,隐含速度约束往往不能得到有效地满足,而加速度和拉格朗日乘子的曲线往往会有强烈的不连续性(spikes现象).此外,约束方程本身的不光滑性也可能会带来数值计算中的严重困难;
(3) 微分代数方程解的连续性往往弱于外激励的连续
(4) 大多数积分器的误差估计和自适应步长选择策略都是基于动力学响应解的光滑性假设.在各种非光滑情形,步长估计可能无效,往往引起大量的计算失败,大大增加整体计算量.
除了上面的直接方法以外,将DAEs转化为ODEs并用ODE积分器来进行仿真的方法也由来已久.通常认为这类方法计算效率不高,鲁棒性也较差,因此很少应用于商业软件的实践.如果约束方程组足够光滑,Baumgarte降阶方
坐标分解方法也是一种相当有效的方法,而且计算精度较高.利用约束方程将一部分广义坐标用和自由度个数相等的其他广义坐标表示出来,从而将动力学方程组(1)转化为ODE
与ODEs不同,DAEs的初始条件不能任意给出.理论分析表
(2) |
隐含速度约束
(3) |
和加速度条件,即
(4) |
其中代表对时间的全微分;而
(5) |
实际问题提供的初始条件 和 不一定满足这些约束方程,其原因可能有以下几点:
(1) 和 无法准确给出,或者由于人为原因导致错误的初值设定;
(2) 实践中,初值往往是测量出来的.而一般测量误差远大于数值计算中要求的误差量级,导致初始约束方程不能满足计算的精度要求;
(3) 设定的初始数据,其中有些量可能相对比较精确,而其他的可能并不精确.因而需要调整不精确的初始变量以满足约束方程;
(4) 求解过程中可能只确保了几何约束(2)能精确地满足,而速度约束和加速度约束不一定满足,导致积分器重启后的初始条件不合适.
初始条件分析的目的是优化初始数据,使各种约束条件都能精确满足,并算出初始加速度和约束力.在此之前,首先要确认约束方程组是适定的.
冗余约束分析
约束方程可能是冗余的,甚至是互相矛盾的.在建模过程中,有时也可能故意用冗余约束的方法来保证系统安装的完整性.冗余约束分析的目的是找出数值特性最好的一组约束方程组,而删除所有其他的冗余约束.冗余约束分析的基本方法是对进行全选主元的LU分解,并选择一组最大程度线性无关的约束方程组,而其余的约束方程即被认为是冗余约束而舍弃.
初始奇异位形检测
多体系统动力学仿真偶尔会陷入奇异位形中.在一般的计算过程中,由于舍入误差的存在,多体系统滑入奇异位形的可能性比较小,一般不需要专门的处理.更常见的情形是,多体系统的初始位形本身就是奇异位形,导致在冗余约束分析中,有些非冗余约束可能会被误判为冗余约束而舍去.此时,仿真计算的模型并不是需要的物理模型,因此有必要进行初始奇异位形检测,从而将这些非冗余约束捡回系统.
初始奇异位形检测的算法是对初始位形进行摄动,然后重新进行冗余约束分析,验证得到的独立约束个数是否与原来相同.如果不同,说明初始位形有奇异性.发生了这种情况,需要给出警告,要求用户输入更多信息来选择初始位置.如果用户不能提供其他信息,就随机选择若干个与初始位形非常接近的摄动位形分别出发进行仿真计算,并验证它们的最终计算结果是否相近.
初始位形分析
给出初始广义坐标,希望求得适合约束方程的初始位形.这可以简单地通过求解优化问题:
(6) |
而得出.其中为对角权重矩阵,其权重可根据的先验知识而调整.一般对已知精确的分量,其对角权重取为,而对于不确定的分量,其权重取为1.从方程(6)得到的优化方程组为
(7) |
这可以用牛顿迭代法求解,初始迭代向量取为.迭代收敛后,用计算出来的取代初始变量.初始位形分析一般只涉及完整约束和/或状态变量本身的约束表达式,而不需要用到非完整约束等其他形式的约束方程.
初始速度分析
给出初始广义坐标 ,为了求得适合速度约束方程的初始速度,可以简单地求解优化问题
(8) |
其中 为对角速度权重矩阵,其权重系数也可根据先验知识进行调整.得到的优化方程组为
(9) |
它完全是线性方程组,可以直接求解出满足速度约束方程组的初始速度.然后,用计算出来的 取代初始变量 .应该强调的是,在一般情况下,方程(8)中也应该包括动力学系统所有非完整约束方程,因此通常也需要通过迭代才能求解.
初始加速度和约束力计算
很多积分器需要提供初始加速度和拉格朗日乘子的值,这可以由方程(1)和(4)计算出来:
(10) |
通过初始值分析,既精简了约束方程,又得到了更合适的初始坐标、速度、加速度和拉氏乘子,是开展动力学仿真前的基础准备.
运动学问题是动力学系统的自由度为0的特殊情形.此时,约束方程组(2)足以决定整个系统的运动学.另外,此时Jacobian矩阵为方阵,且除了个别奇异位形以外是可逆的.运动学问题实际上就是用Newton迭代求解方程(2)
(11) |
求解的过程要注意以下几点:
(12) |
(2) 理论上,迭代时间步长h可以任意选取,但考虑到初始估计(12)必须足够精确以保证Newton迭代(11)的收敛性,h也不能太大.
(3) 由于Jacobian矩阵的生成和LU分解计算都比较昂贵,实用中常用拟Newton方法迭代.
计算得到了tn 时刻的之后,可以进而求出tn 时刻的速度,只需代入方程(3),即
(13) |
求解得出.更进一步,要求解tn时刻的加速度,需要用到方程(4),即
(14) |
最后,很多应用中还需要算出约束力,只需求解
(15) |
即可求出任意时刻的拉格朗日乘子,进而得到约束力.方程(13)、(14)和(15)中可使用同一矩阵的LU分解.当然,运动学仿真在实用中只占很少份额,绝大部分问题还是需要动力学仿真方法,这将是下文的主要内容.
广义方法最早是在结构动力学仿真中提出来
问题1 已知tn时刻的状态变量、、和,及步长的估计h之后,求出 tn+1 = tn + h时刻对应的变量、、以及,并作出误差估计以判断其是否满足误差条件要求.如果满足,则估计下一步的时间步长;如果不满足,则估计更合适的时间步长,并重新开始计算.
传统Newmark方法可用来求解常微分方程
(16) |
假设已知tn时刻的、和,则在估计出步长h之后,只需将当作未知量,取近似
(17) |
其中参数和用来调节计算精度和稳定性,且
(18) |
将作为的初步估计,令更新量 (innovations),则
(19) |
其中
代入方程(16),得到关于x的非线性方程组
(20) |
用Newton-Raphson方法迭代求解出修正量x,进而代入(19)中得到、和.
传统Newmark方法的缺点在于,除非 ,否则算法的精度只有一阶,达到所需精度所需要的计算步数太多;而 时数值稳定性又不太好,高频振荡的误差无法得到有效衰减,也会影响积分器的效率.为了提高计算的精确性和高效性,需要保证格式是二阶的而且是稳定的.引入一个自由参数,即可推导得到HHT积分
(21) |
而tn+1时刻的状态变量假设为
(22) |
其中
(23) |
而动力学方程组在较早的时间节点上离散
(24) |
其中未知量为,而
(25) |
HHT积分器直接求解的并不是方程组(1),而是其变形格
在广义积分器中,每步需求解的未知变量仍然是
(26) |
其中和两个参数一般并不相互独立,可以用一个自由参数表示出来,取值.令
(27) |
从方程(22)和(26)得出tn + 1时刻的状态变量
(28) |
取估计值,更新量,则
(29) |
其中
(30) |
此外,假设乘子具有一定的连续性,即取
(31) |
将表达
(32) |
用Newton-Raphson方法求解,其Jacobian矩阵为
(33) |
更新量x可以用来进行误差估计和步长选择.借鉴Negrut
(34) |
本文中的范数定义如下
(35) |
其中;其中为第k个广义坐标对应的参考变量;RTOL为相对误差限,而ATOLk为第k项的绝对误差限,一般有量纲.
如果 ,则说明误差条件没有满足,需要减小步长;而如果 太小,则说明计算步长太小,会降低计算效率,最好放大步长.一个合适的步长选择策略是
(36) |
其中系数0.9是安全系数.由于这里的计算是用本步得出的后验误差来估计下一步的积分步长,其正确性依赖于系统参数的缓变特性,因此安全系数是必要的.如果预测失败,即 ,则可以利用新得出的 和方程(36)设置本步的计算步长重新进行计算.由于该估计误差为后验误差,得到的hnew一般能很好地满足误差条件.如果仍不满足误差要求,直接将时间步长减半重新计算;如果再不满足,说明在tn和tn + h 之间出现了某种间断现象,需要进行间断检测,发现间断位置tn +
上述方法计算得出的加速度曲线和拉格朗日乘子曲线上经常会出现很多尖刺(Spikes),这种现象是非物理的随机误差,与所求解的方程组是index-3的DAEs有关.方程组(1)等价于
该方程需要在整个约束流形上满足,但数值离散格式不是在流形上开展的,而是在扩展的相空间 (q,v) 上进行的,这将导致如下问题:
2. 尽管约束方程的引入强制保证了计算出的 近似位于约束流形上,但隐含的速度约束方程(3)却没有保证会被满足.
数值上来说,广义坐标上量级为 的极小误差对应于速度变量上量级为 的误差以及加速度变量上量级为 的误差,而后者可能相当大,表现为尖刺现象.
将 和v作为独立变量;根据流形上的常微分方程理论,可以将方程换为约束流形上的等价格式;并将隐含的速度约束显式地引入方程组,得到新的动力学方程组
(37) |
其未知量为q、v、和 .该方程组是index-2的微分代数方程组,其与方程组(1)的等价性早已经被Gear等
此时速度项与不再相同,但二者差别不应该很大,不妨假设
计算中,取与其预测值相同,且假设
进而类似方程(29)可以得出,
代入方程(37)得到
(38) |
其未知量为x、y、和,迭代Jacobian矩阵为
(39) |
其中
由方程(38)可以看出,x是与同量级的量.用截断误差分析可以证
则为误差判定条件;而新步长估计方法仍然基于
BDF族积分器有好几种公式实
问题2 已知之前k + 1个相继时刻tn - i (i = 0, 1,…, k)对应的广义坐标、速度、加速度以及拉格朗日乘子,在给出时间步长h之后,求出 tn + 1 = tn + h时刻对应的变量 、、以及,并给出计算误差的估计,判断计算结果是否满足误差条件.如果满足,则估计下一步的阶数和时间步长;如果不满足,则更新本步阶数和时间步长,并重新进行计算.
下面以常微分方程为例,介绍两套常用的BDF公式.常微分方程组的形式为:
(40) |
准步长公式
假设给定一系列等步长为h的时间节点,以及其对应的数据.根据在以h为步长的均匀时间网格上,后差分算子如下递归定义:
(41) |
其中j= 0, 1, 2,….用中值定理可以证明,存在某个满足,使得
(42) |
给定,记
(43) |
递归地使用(41),可得,,…,其通项为
(44) |
特别当j = 0时有
(45) |
其中
(46) |
另外,可以直接验
(47) |
为唯一满足的k阶多项式,其中j= 0, 1, 2,…, k;对此方程求微分可得
(48) |
将近似表达
其截断误差主项为.利用公式(43)
(49) |
其截断误差主项为;其中
(50) |
其中的常数为
为了与后文符号的统一,记
(51) |
以及
(52) |
则方程(46)和(50)可以改为
(53) |
最后,应该指出的是,差分矩阵是基于时步长为h的均匀网格得到的.当步长h变化为新的步长时,需要求出新步长下的差分矩阵.这一变换可以用一个简单的计
(54) |
其中矩阵和为的矩阵,其(i, j)分量分别为
(55) |
其中 为步长缩放比.矩阵和的规模都很小,且很好计算,因此变步长操作很简便.
(56) |
参考
写成矩阵形式,即为=.进而利用如下恒等
计算流程:准定步长积分器的步进循环计算为:已知 ,以及估计得到的新步长h.
(1) 利用
(2) 判断后验误差 是否满足误差要求.如果不满足,重新估计阶数k和步长h,并利用
(3) 用递推
a) 已经求得;
b) ;
c) 依次计算,其中j= k, k-1, …, 1;
(4) 矩阵 中包含了所有k+1阶的后验误差;依次选择下一步的阶数 和步长 ,并利用
(5) 更新、、以及,回到起始步1开始下一循环.
代入初值依次计算出来.在以上计算过程中,只需要自适应地更新矩阵,而无需实际生成对应定步长网格.因此这一算法称为准定步长公式.
变步长公式
在这套公式下,均匀网格是不需要的,但理论推导要用到Newton插值公式:
(57) |
其中j= 1, 2, 3,….可以用数学归纳法和中值定理证明,存在某个 ,满足
为了符号方便,对j= 1,2,…,k+1,记
(58) |
并且记(注意它与
用中值定理可以证明此时近似
(59) |
利用这个公式递归可得
(60) |
以及
(61) |
可以证
是唯一满足的k阶多项式,其中.直接微分上式可得
(62) |
将
(63) |
且该表达式的截断误差主项为,其中
(64) |
为了符号统一,同样记 和 如
(65) |
给定步长h,可计算出下一时刻的,其分量为
(66) |
其中j = 1, 2,…,k+1.进一步,记
(67) |
于是
(68) |
而后者的截断误差主项为,其中
(69) |
计算结束后,如果误差符合要求,即被接受,就可以进一步用
计算流程:变步长积分器的步进计算为:
已知,时间向量以及新步长h
(1) 利用
(2) 利用
(3) 判断后验误差 是否满足误差要求.如果不满足,重新估计阶数k和步长h,回到1重新开始本步计算;如满足,进入下一步4;
(4) 更新矩阵 ,并估计从1阶到k+1阶的后验误差,进而选择下一步的阶数和步长;
(5) 令,进入下一步循环的起始步1.
初始条件.第一步采用定阶定步长;而从第二步才开始正式进入以上计算循环.
方程组求解细节
将表达
(70) |
用 拟 Newton方法求解,并且计算过程可以用近似
Jacobian 矩阵 A - hˆ fx来进行迭代;其中
(71) |
求解出更新量之后,就直接得出 k 阶截断误差主项为;同时可以更新 矩阵,得到 j = 1 , 2 , · · · , k + 1等各阶的后验误差估计,并基于这些信息选择下一步积分的阶数与时间步长.
求解方程组(1)用到 和 的差分矩阵
(72) |
从而这两个差分矩阵可以算出变量的估计表达式
(73) |
因此,广义坐标的BDF预测-校正公式为
(74) |
而对应速度变量的BDF预测-校正公式为
(75) |
为了求解方程组(1),可以将的离散格式化简,得到
(76) |
于是加速度可表达为
(77) |
将公式(
(78) |
可以用Newton迭代法求解,其Jacobian矩阵为
(79) |
其中
求解得到的 可以直接用来估计 的误差,但由方程(76)得出的 用来估计 的误差却可能会被严重放
其中
可以直接验证,,即 为 在约束流形切平面的投影.投影滤波法即用这部分分量 来进行误差估计.虽然投影得到的误差偏小,但其在数量级上是正确的,可以用于步长选择.但要注意的是, 的应用仅限于误差估计,而非数值计算.容易验证,通过求解
(80) |
即可得出,其中J即为
计算直接得到量(即)和 (即),进而利用和由
为了改进速度变量的误差估计,并减小加速度和拉氏乘子的计算误差,可以将方程组(1)转化为与其等价的index-2的方程
(81) |
然后用BDF积分器进行求解.该方程组的规模比直接求解方程组(1)大了一倍,所需的计算量也大了很多.具体计算步骤为:将变量的离散格式
(82) |
以及时间导数项的离散格式
(83) |
代入方程组(81),得到离散代数方程组为
(84) |
其未知量为、、和,可以用Newton-Raphson迭代求解,其迭代Jacobian矩阵为
在求解以上Index-2微分代数方程组并得到和后,就可以同时判断和相对于q和v的误差是否满足计算要求.计算得出的和都是准确的,但拉格朗日乘子和加速度
可能还是误差较大.为了进一步提高计算精度,可以将q、v和都变成index-1的变量,即方程(81)修改为
该方程组仍然是index-2的DAEs,但其对应的index-2的变量为较次要的 、 和 ,而所有重要的变量q、v和a都是index-1的变量,在计算中都可以精确地计算出来并进行误差控制.
变步长变阶
BDF方法是变阶变步长的,可以根据本步计算的后验误差进行下一步的阶数和步长的估计.早期的BDF族ODE积分器,例如DIFSUB
其中范数 的定义与方程(35)相同.BDF方法变阶变步长的原理是将本步的j阶后验误差
作为下一步计算步长仍为h时对应的j阶格式的误差预测,利用某种规则选择下一步最合适的阶数和时间步长.计算所需的相关数据都含在矩阵
中,其中备选的阶数为 j = 1 , 2 , · · · , k + 1.因此,每步计算中可以随时降多阶,但至多只能升1阶. 这样一来,积分器既可以在处理意外(不光滑)事件过程中做到自适应降阶;又可以在求解光滑的动力学过程中根据需要将阶数逐渐增加,提高仿真效率;达到了高效性与鲁棒性之间的有效平衡.
阶数和步长的选择有很多方法,最简单的思路是选择阶数使下一步的预测步长最大,即选择
和对应步长,其中0.8为安全系数.这种方法实现容易,其各种变形或修正格式在通用型软件的积分器中仍被广泛采用.
一般来说,BDF低阶格式计算效率低,而高阶格式(特别是k 3的格式)的稳定性较差.此外,如果保持阶数和步长,则上一步的Jacobian矩阵往往可以复用,会节省不少计算量.因此在新的阶数和步长的选择中,一般采用如下原则:尽量不变阶也不变步长;升阶时候尽量保守.例如:
(1) 在Gear的程序DIFSU
(85) |
(2) 在Petzold等的程序DASS
还要指出的是,如果变步
当然,矩阵 包含了远多于上述变阶变步长策略所需的信息,这给了变阶变步长算法更多自由度,而文献中也提供了一些其他思
高阶格式稳定性检测与自适应处理
不同阶数的BDF格式具有不同的稳定区域,其中只有前两阶是绝对稳定的,而更高阶的算法都在虚轴上有不稳定区域.在宽频动力学系统,特别是在含有柔性体或者大变形体的多体系统的仿真中,某些频率可能会滑到这些不稳定区域内,造成误差的严重放大.此时上文的误差估计方法就不再正确,且阶数和步长选择策略也不再具有鲁棒性,在计算中表现为一种积分阶数的频繁跳跃现象,并伴随出现大量的积分步失败.为了避免这一问题,很多程序(例如LSOD
(1) Skelboe[13 ] 经过稳定性分析给出了如下判据:如果时, 意味着k阶格式失稳发生了,其中k 3的由表2 给出.在实际计算中只需监测
若,则说明k阶格式发生失稳,程序自动降低到 阶格式进行仿真计算;
(2) 在DASS
(3) Stewar
则下一步暂时不考虑升阶,其中
作者经过测试发现,将Skelboe和Stewart的方案结合起来,虽然最有效地克服了失稳问题,但在实践中似乎偏于保守,会影响计算效率.DASSL采用的策略虽然也可以在一定程度上避免失稳现象,但却不能保证不会出现失稳.其工作原理大致如下:如果 至少k+1阶光滑可导,一般有
(86) |
这是因为若系统可以用Taylor展开表达式逐阶近似,高阶Taylor项应当比低阶项更小.系统的数值光滑度可定义为选择最大的k满足如下条件
如果达不到k阶光滑度,就不满足BDF算法的基本假设,只能采用阶的BDF格式来求解.作者认为上述条件过于严苛,而且没有理由认为低阶项会影响到高阶连续性,只要条件
满足,即可认为符合从k阶升到k +1阶的必要条件.这一判据可以和Skelboe的方法联合起来使用.这种解决方案效果比较明显,一般情况下只需设定最大计算阶数为5,在一般的高阶不稳定情形,程序自动会跳回2阶,而不会再出现阶数跳跃和步长估计失败的问题,保证了计算效率.
隐式积分器每步的计算量比较大,但其时间步长较大,总体来说计算效率较高;其稳定特性很好,可以很容易地处理方程组的刚性问题.但是,时间步长太大,可能会在计算中不能有效地处理局部的一些突变问题,而需要一些特殊的技巧.
在求解常微分方程(20)、(70)或者微分代数方程(32)、(38)、(78)和(84)的过程中,甚至在后文中显式积分器的约束流形投影过程中,都需要用到Newton迭代或者拟Newton迭代.动力学仿真中的非线性方程组的求解具有以下特点:
(1) 多. 每个时间步都要用拟Newton迭代求解;
(2) 快. 状态变量的预测值通常非常准确,往往只需2 - 3次拟Newton迭代即可收敛;
(3) 大. 待求解方程组的规模比较大;
(4) 规. Jacobian矩阵往往具有特定的稀疏性.
Jacobian矩阵的相关计算往往是整个仿真计算的瓶颈问题,这是由以下两个原因导致的:
(1) Jacobian矩阵生成过程的计算量很大,无论是用解析表达式还是数值差分方法;
(2) Jacobian矩阵的LU分解计算复杂度比其他计算过程要高,即使采用稀疏矩阵计算也是如此.
一般情况下多体动力学计算仿真中都用的是拟 Newton迭代,以避免大量的Jacobian矩阵计算,并在所有地方都尽量复用Jacobian矩阵的LU分解.实践证明,这样做往往可以将计算速度提高5到10倍.还应该指出的是,几乎在所有的仿真过程中,总会遇到少数拟Newton迭代收敛很慢甚至失败的情形,给整个仿真带来问题.如果这些问题不解决,会导致整个计算的中止.而拟Newton迭代的失败,大多是由于Jacobian矩阵不再精确造成的.因此,为了解决这一问题,可以设一个最大迭代步数(例如4到5次),如果达到最大迭代步数还不收敛,就可以认为拟Newton迭代失败,需要重新生成Jacobian矩阵并继续进行迭代.
拟Newton迭代的一般过程为,为了求解非线性方程组,采用迭代格式
直到修正量或残差足够小为止,其中为近似 Jacobian矩阵,v为松弛因子.根据压缩不动点定理,迭代收敛的充分条件是存在某一常数满足
(87) |
如果上述条件满足,则由压缩映射的性质得到,其中j = 1,2,· · ·,进而对所有项求和得出
其中
为了保证拟Newton迭代快速收敛,需要监测收敛速度.计算中如果发现,最好重新计算 Jacobian并估计.另外,实际计算中,条件(87)可能是不满足的,特别是在以下情形中:
(1) 所采用的Jacobian矩阵可能是奇异的或者近于奇异的.例如在机械系统的奇异位形附近,约束矩阵Cq近于冗余,而此时的范数很大,条件(87)可能不再满足;
(2) 强刚性问题中,Jacobian矩阵的条件数很大,近似Jacobian与真实Jacobian矩阵之间很小的差异,也会导致条件(87)不满
(3) 在很多问题中,真实解析Jacobian矩阵的生成太过烦琐,或者其稀疏性不太好,往往用近似Jacobian计算,可能不满足条件(87);
(4) 在某些场合,非线性问题本身的收敛域可能很小,而这种情况是完全无法提前预知的.
检测到拟Newton迭代不收敛时需要立即重新计算 Jacobian矩阵,并进行LU分解.一般说来,拟 Newton迭代的收敛速度低于Newton迭代,但计算量远小于后者.实际计算中需要结合二者的优点,尽可能地加快计算速度.
总体说来,广义 方法计算步长较小,拟 Newton方法的收敛性基本上是有保证的;除非在某些情形,Jacobian矩阵接近奇异,或者出现某些不连续现象.而BDF族方法一般步长较大,因此拟Newton迭代不收敛,或者收敛速度太慢的问题也更加严重.作者建议如果在5步以内拟Newton迭代不收敛的话,最好重新计算Jacobian 矩阵.
另一方面,由于一般动力学系统的质量矩阵、刚度矩阵和约束矩阵等随时间变化比较慢.因此,如果步长变化不大,上一步用到的Jacobian矩阵就可以在下一步被重复使用.作者经过比
则可以重复使用Jacobian矩阵,并采用松弛因子
对于广义 族方法,;而对于BDF族方法,,如方程(71)所示.实践表明,这一复用往往至少能把计算时间减少一半以上;如果动力学过程比较光滑,计算速度可以提升超过3倍.
最后,即使拟Newton迭代本身收敛,但得到的修正更新值也可能不满足预设的误差条件.总体说来,误差判断失败的原因可能有以下几点:
(1) 动力学中遇到非光滑事件(接触碰撞、机构奇点、参数或模型突变等),导致状态预测值不准确;
(2) 由于参数变化,用上一步仿真的后验误差估计得到的时间步长h太大,不满足误差限要求;
(3) 系统刚性太强,或者积分步长太小,导致Jacobian矩阵条件数很高,舍入误差太大.
其解决方案就是用得到的后验修正更新量重新设置迭代步长,并在必要的情况下降低积分器阶数.这一过程和变步长变阶策略类似,只是不会用到升阶,因而不用进行k + 1阶的误差估计.
数值奇点是仿真中经常遇到的问题.与物理奇异点不同,数值奇点指的是因为数值原因导致的奇异位形,例如用欧拉角等参数描述旋转矩阵时遇到的奇点.数值奇异性的处理流程为:
(1) 奇点检测:对于每种可能遇到的奇异性都要设置接近于奇点处的报警功能;
(2) 奇点消除技术:选择新的坐标系统将数值奇点处的位形变换到新坐标系统下的非奇异位形;
(3) 积分器重启技术:在新的坐标下重启积分器.
数值奇点检测与处理的缺点在于随着部件数量的增加,不但自由度个数会增加,而且奇点出现的机率也会增加,而积分器重启的可能性也会增加.自由度个数增加,本来计算量就会增加;而积分器重启的机率也会增加,给仿真带来的效率损失也会增加.而这种损失并非物理系统本身的特性导致的,是由于所选取坐标系统的数值特性不合适导致的,只能用数值方法来解决.
数值奇点附近光滑性保持问题对于单步法是比较简单的,例如对于广义方法,只要在奇点附近换一套局部非奇异坐标,换算出新坐标下的、、 和就可以直接开始下一步的计算.积分步长只是局部发生了一些变化,而不会影响整体的仿真效果.而对于多步法,情况比较复杂.一种思路是总是从最低阶(1阶)用很小的步长重启并开始计算,其缺点是重启过程太慢,一般需要10 -20步才能恢复正常仿真阶数和步长.对于很多部件组成的系统,奇点出现机会可能比较高,反复重启可能速度太慢,影响仿真效率.另一种思路是在奇点严重影响仿真效率之前,尽早进行坐标变换,并将前几步得到的结果也进行同样变换,保持高阶积分格式.
不光滑性出现一般有如下几个原因:接触碰撞、模型拓扑变化、不连续外力作用等等.其具体表现为某些物理量或者其时间导数、高阶导数的不连续性.不连续性问题在很多研究者看来似乎不甚重要,因为很多自适应步长的积分器往往可以通过多次试错突破不连续性的障碍,但其代价一般还是比较大的.好在对于绝大部分问题来说,不连续点的位置是比较少的,因此这些代价相当于整个计算成本来说还是比较小的.但事实上,确实有不少工业界遇到的问题,是由于不连续性太强而求解失败的.因此作为商业软件级别的积分器,还是应该包含不光滑性自动检测和定位的功能,从而可以保证更好的效率和鲁棒性.Gear
(1) 质量矩阵M随时间的变化一般是缓慢光滑的,而外力项Q可能有一些不连续现象,而Q的不光滑性检测可以给下一步的预测提供信息;
(2) 除了在有限个间断点之外,约束 都是至少二阶连续的.事实上,由于在所有计算过程中,都希望做到以及,因此不光滑性测试不能直接作用在它们上面,而选取实际中最关键的矩阵Cq中的非零元素作为不光滑性测试的量.
作者认为,BDF族方法得到的 矩阵很好地描述了动力学在tn至tn + 1之间的数值连续性,可以用于不光滑性检测,以及间断处理算法设计.
一般说来,显式积分器不适合用于求解代数微分动力学系统,但少数情形例外.在用递归方法得到的动力学方程组中,约束方程的个数远少于自由度个数;同时,如果系统的刚性问题不太严重,或者高频振动不能有效地得到衰减(例如对于大规模的接触碰撞问题的仿真),此时显式积分器的计算性能可能会优于隐式积分器.另外, 显式积分器的计算量基本可控,因此比较适用于实时仿真.还有,由于显式积分器无需迭代,在多积分器合作仿真中实现起来方便得多.
约束修正法
从形式上看,约束修正法有些类似直接求解 index-3的微分代数方程组.在这种意义下,大部分显式常微分方程积分器都可以用来求解方程组 (1).首先,将方程组(1)改写成常微分方程组
(88) |
其中 和方程(5)中的一样.直接求解方程(88)会引起约束违约现象,因为
(89) |
在多体系统动力学中,由于和变化缓慢.因而J也是时间缓变的,可以采用各种近似和复用来提高计算效率.求解常微分方程的计算过程可以用算子在形式上表示为
得到的和可能不适合于约束方程,要进一步作约束流形投影修正,包括位置修正
和速度修正
这两种修正计算都需要通过迭代完成,计算中可以复用方程(89)中的J,以节省计算量.
罚函数法
形式上,罚函数法有些类似求解index-2的微
分代数方程组(81),只是做了一些修改
(90) |
罚函数的意思是利用很大的正数 (罚因子)将
index-2的微分代数方程组中的约束方程组
中形如的约束改写成方程的形式,得到
(91) |
和
(92) |
可以从中求解出和,而且求解过程用到方程(89)中的J.得到的常微分方程组可以用显式积分器进行仿真,当然并非所有常微分方程积分器都适合开展罚函数法,有一类特殊的Runge-Kutta-Chebyshev类型的积分

图1 RKC积分器的稳定区域示意图
Fig. 1 Schematic of the Stable Domain for RKC Integrators
该积分器在虚轴上收敛区域有限,不适合用来求解刚性问题,但对一般非刚性的多刚体系统动力学的递归格式,显式积分格式求解(91)和(92)的效果非常好.要指出的是,在计算之前可以从系统最大特征值基本确定罚因子 ,因为 必须远远大于系统的最大特征值,进而可以定出递归阶.此外,提高计算效率的关键在于如何有效地从微分方程组(91)和(92)中求解出 和 ,可以根据所求问题的特点加进这一过程.
一般来说,非完整约束的DAEs比完整约束的 DAEs简单,因为对应的变量一般是index-2的.带非完整约束的DAEs的一般格式
(93) |
该方程组可以分别被上面介绍的几种方法离散:
(1) 广义族方法. 同样假设、和的表达式为方程(29)和(30),代入方程组(93),得到关于、和的代数方程组
可以用Newton-Raphson方法或者其他迭代方法求解,其对应Jacobian矩阵为
其中
(2) BDF族方法. 将BDF方法的公式 (
其对应Jacobian矩阵为
其中
在求解出位置修正量 后,可以计算出速度修正量;同样的,不能直接用来估计计算误差,而需要对几何约束作投影滤波修正.
带非完整约束的index-2格式的DAEs为
(94) |
该方程组同样可以用广义族方法和BDF族方法来进行积分,可以避免spikes现象,计算出更光滑更高精度的速度、加速度和约束力曲线.
此外,在实际应用中,多体动力学系统往往和控制算法结合起来应用,因此在仿真中也要将控制律方程组同时引入进行仿真.控制方程组往往由一阶微分方程组和代数方程组组成,因此可以通过一阶微分方程积分器,例如BDF方法等进行有效地时间离散.另外,动力学仿真中往往还包含一些离散动力学方程组,其积分方法大致有两种,一种是将离散系统连续化,另一种是交互仿真技术.前者比较简单,已经普遍应用于商业软件可以解决自适应步长与离散动力学时间节点的不协调问题;后者需要用到积分器与离散系统动力学之间的交互仿真技术,在本文中将不做赘述.
下面用两个典型多体系统动力学测试算例来说明文中讨论的一些技术细节.应该指出的是,不同族的积分器的局部误差估计在仿真精度控制实践中有着不同的意义,这既与积分器的阶数有关又与局部误差到全局误差的传导机制有关.仿真中的整体计算精度其实是由全局误差来控制的,但全局误差是很难估计的.大量测试发现,广义族积分器的局部相对误差限需要比BDF族积分器低两个数量级才能达到类似的整体仿真精度.例如在商业软件ADAMS
七刚体模

图2 七刚体机构系统
Fig. 2 Schematic of the seven body mechanism
上述模型分别用广义积分器、显式积分器、 BDF格式的index-3积分器进行仿真,其计算结果如



图3 七刚体机构仿真中的曲线图
Fig. 3 Diagram for the simulations of the seven body mechanism
仿真过程中各种积分器自适应计算的步数和时间比较见

图4 七刚体机构仿真中的BDF阶数曲线图
Fig. 4 BDF order profiles for the simulations of the Seven Body Mechanism
曲柄滑体机构模型是测试积分器性能的柔性多体系统动力学模型,因为实践表明,三阶以上的BDF积分器会在该模型中遇到稳定性的考验.
模型描述如

图5 曲柄-滑体机构系统
Fig. 5 Schematic of the crank slider mechanism
该模型具有很强的刚性,只能用隐式积分器来计算.用广义积分器、BDF格式的Index-2和Index-3积分器的计算结果如



图6 曲柄滑体机构仿真中的曲线图
Fig. 6 Diagram for the simulations of the crank slider mechanism
由于BDF积分器里使用了自适应稳定性算法,在各阶频率组合导致高阶格式可能会发生不稳定性的场合,程序自适应地找到最合适的低阶格式(一般为二阶格式,如

图7 曲柄滑块机构仿真中的BDF阶数曲线图
Fig. 7 BDF order profiles for the simulations of the crank slider mechanism
积分器的性能比较应该是在同样的计算精度下进行.在同样的误差要求下,index-2的DAE积分器的速度变量计算结果比index-3积分器的结果更准确;而且,index-2的DAE积分器可以解决index-3积分器在加速度和拉格朗日乘子曲线上的尖刺状误差.此外,index-1的DAE积分器计算得到的加速度曲线更光滑,而且可以对它们进行误差控制.其次从计算规模上来说,index-1的方程组规模大于index-2的方程组,更大于index-3的方程组;而其Jacobian矩阵的规模和复杂程度也是同样顺序.因此从计算效率上来说,index-3的DAE积分器大于index-2 的DAE积分器, 更大于index-1的DAE积分器.最后,从计算鲁棒性来说,大部分时候BDF族的 index-2格式积分器优于index-3格式积分器;而 index-3的广义积分器的鲁棒性似乎更佳.
从计算速度上来说,一般认为情况下在同样的精度要求下,BDF方法快于广义方法.显式积分器不能求解强刚性问题,而根据目前的测试结果,它在弱刚性问题和一些中等刚性问题(刚性< 1
就BDF方法的两种公式来说,一般认为,准定步长公式稍快于变步长公式,但由于后者直接采用原始数据而无需进行插值或者步长转换,在程序设计方便程度和鲁棒性方面优于前者.另外,广义方法的index-2格式尽管可以完全满足速度约束,但在很多实际问题应用中计算效率似乎不够高,值得进一步深入研究.
微分代数方程积分器是多体系统动力学软件的核心模块.在上世纪70至90年代,伴随多体系统动力学软件的开发热潮,积分器技术的发展进入了黄金时期.很多著名的研究团队,通过大量的理论分析和数值实验,提出了很多思路来解决动力学仿真中的各种数值问题.这些研究结果也大量被商业软件采用、验证和改进.同时,为了使自己的软件能更有效地求解各种工程问题,各大商业公司也投入成本,展开了大量的测试研究,从工程实践中提炼出了很多需求,并在软件升级中一一解决.目前可以认为,在比较有名的通用型软件中,传统单个积分器的技术已经比较成熟.
这几年,李群积分器和辛积分器的研究引起了很多学者的重视.李群积分器在求解高速旋转问题中有无与伦比的优势,其计算结果的精确性、算法的高效性和鲁棒性得到研究者们的赞赏.辛积分器在长时间仿真的应用中性能卓越.完善这些积分器的功能并开发出高效计算程序是目前正在开展的重要研究课题.
随着硬件技术的进步、计算规模的扩大和学科的交叉,多体系统动力学中的积分器技术也面临着新的挑战和机遇.积分器的计算复杂度一般在O(
本文讨论的都是动力学仿真中的初值问题.在最优控制的动力学系统仿真中,往往生成DAE的边值问题,即对某些状态变量,初始值给定;而对其他状态变量,最终值给定.一般多体系统动力学的边值问题要比初值问题复杂得多,其Newton迭代可能不收敛.发展适合大型多体系统动力学边值问题的积分器,也是需要重点研究的方向.
多物理场仿真目前来看是多体系统动力学的重点研究领域,而工业需求为积分器的研究提出了新的研究课题.如何将多体系统动力学中发展出来的积分器和其他学科的积分器整合起来求解多物理场问题,并要保证计算过程的精确性、高效性与鲁棒性,也是积分器技术的重要研究方向.
声明与致谢
多体系统动力学积分器的开发需要理论的指导,更需要详实的细节实现.在工作和学习中,作者阅读和研究过从Gear的DIFSUB到Petzold等人的DASPK等十几种ODE和DAE积分器的代码,从中受益非浅.本文主要以广义族和BDF族积分器为对象,并结合作者实践中的一些体会,尽量系统化地介绍积分器程序开发中的一些关键技术.这些技术也可以用于其他族积分器的实现.作者声明,在本文内绝不包含任何非开源代码的技术细节,以尊重商业软件的专利和知识产权.
本文初稿完成后,北京理工大学胡海岩院士, 清华大学任革学教授,青岛大学潘振宽教授,美国同事宋培林博士等阅读了相关内容,并给作者提出了宝贵的修改意见.作者深表感谢,也尽量按照几位前辈的意见作了相应的修改.作者在完成和修改本文过程中,曾就文中很多细节和北京理工大学刘铖研究员和哈工大魏承副教授反复交流讨论,最终才得以定稿,在此一并致谢.另外, 还要感谢我的几个学生,杨凯、杨思铭、袁腾飞等,最初本文只是团队内部的简单讨论笔记,各位同学向作者指出了初稿中的一些含糊不清之处,进而帮助作者完善了本文中的一些细节内容.
附录
附录中给出两个有代表性的隐式积分器的简单版本的算法细节,分别是 index-3 的广义积分器和变步长公式的index-3的BDF积分器.作者相信,读者可以类似地写出index-2的广义积分器、变步长公式的 index-2的BDF积分器、准定步长公式的 index-3和 index-2的BDF积分器,还可以很容易开发出index-1 的各类积分器.这两个积分器的共同特征是都需要初值处理程序,并且其Newton迭代过程有相似之处,因此将这两部分单独拿出来作为子程序.另外,程序中忽略了由于间断性导致积分器中断以及重启的步骤,这在商业软件级别的积分器中是非常关键的.最后,关于算法格式符号书写的几点说明:
2. = 用来判断两个值相等.
算法1 初始条件求解(IC Analysis):
输入:初始广义坐标和速度的估计值 和;
可选输入:对角权重矩阵 和 ,若没有用户相应输入,计算时缺省取为单位矩阵;
输出:满足约束方程的初始广义坐标 、广义速度、广义加速度 和拉格朗日乘子;
计算步骤:
1. 冗余约束分析:对进行选主元LU分解,剔除三角形矩阵中对角线元过小的行对应的约束;
2. 以为初值 ,迭代求解方程(7),然后用求出来 的更新;
3. 求解方程(9),然后用求出的更新;
4. 求解方程(10),得到初始加速度 和拉格朗日乘子.
注1 初始值修正对DAE的积分非常关键,但有时也会带来问题.例如对两个固定连接的刚体,如果修改其中一个刚体的广义坐标,但不同时修改另外一个刚体的相应坐标,用以上算法得出的结果与实际情形的关系不可预料.因此,在初始条件求解中非常关键的一步是利用先验知识,如果确定不需要修改某些变量,一定要相应把所要修改变量在权重矩阵中对应的对角元分量放大为1
算法2 积分器中的拟牛顿迭代算法
输入:近似Jacobian矩阵的LU分解;松弛因子;初始值估计;NeedJac指标以及误差限
输出:的更新量 , 全部或部分分量的迭代收敛速度及收敛性判定结果
计算过程:设置最大迭代次数
令修正量的初值 , 置当前Jacobian矩阵在迭代中的使用次数,进入以下循环
FOR to MaxIter
1. IF NeedJac,则重新生成进行LU分解,且置和
2. 生成非线性方程组,并计算;
3. 更新及;
4. IF,迭代收敛,跳出循环;
5. 进行收敛性检测
IF,设置以及;
ELSEIF,设置;
ELSE
a) 计算,以及;
b) IF,迭代收敛,跳出循环;
c) IF,;
d) IF, ;
6. 更新.
END
收敛性判定:
IF 并且 ,判断迭代不收敛;否则判定迭代收敛;
注2 本迭代子程序只是用来在积分器的每一时间步中求解非线性代数方程组.一般来说,预测值已经相当精确,只需要很少几步迭代即可收敛,而且不同时间步的 Jacobian 可以复用,以最大可能地节省计算量;但在少数情形,可能遇到不收敛的问题,因此需要重新生成 Jacobian 进行计算;在极少数情形,迭代可能很久也不能收敛,通常意味着遇到了不连续性问题,需要特殊处理,判定为本次迭代失败即可.
算法3 自适应步长广义方法:
输入:动力学方程组(1),初始估计的和,计算时间区间,积分参数 以及误差限
输出:一系列自适应的仿真时间节点,和每个时间节点 对应的状态量、、和,其中每一步计算的误差满足误差条件要求.
计算过程:
1. 用算法1求解初值问题,得出合适的初值、、和,并取;
2. 利用
3. 设置,, 以及初始步长 ;
4. IF,;
5. 设置步长失败标记,然后运行以下计算内循环直至本步计算成功.
a) 用方程(30)和(31)算出预测值、、、和;并将得到的表达
b) IF NeedJac = TRUE,用预测值生成Jacobian矩阵(33)并进行LU分解;
c) 用算法2结合方程(32)求解未知量;
d) 如果算法2迭代失败,进行不连续性检测,并重启积分器;
e) 更新、 、 、以及;
f) 用
g) Jacobian复用性判定
IF,设置松弛因子,以及;
ELSE设置Newton迭代松弛因子,以及NeedJac = TRUE
h) 进行内循环收敛性判断,即判断条件 是否满足?
如果满足,存储更新、、、和,并跳出内循环;
如果不满足
i. 判断本步迭代中是否首次失败18652331899
IF StepFail = TRUE,,NeedJac = TRUE;
ELSE 设置,及
ii. 返回(a),重启内循环
IF done,仿真结束,停止;
更新 和 ,返回4继续计算.
注3 不连续性检测程序比较复杂,此处暂忽略.
注4 测试表明,为了达到同样的积分精度,广义方法需要比 BDF方法更严格的局部误差限.实践中发现,广义方法取相对误差限1
算法4 自适应步长和阶数的Index-3变步长公式的BDF积分器:
输入:动力学方程组(1),初始估计的 和,计算时间区间以及局部误差限
输出:一系列自适应的仿真时间节点,以及对应时间节点的状态变量、、和,其中每一步计算的误差满足误差条件要求
计算过程:
1. 用算法1求解初值问题,得出合适的初值、、 和 ;
2. 设置 、、以及初始步长;
3. 设置初始差分矩阵、以及时间向量;
4. IF, ;
a) 利用
b) 从
c) 判断条件和是否同时满足
如果满足,设置松弛因子,以及;
如果不满足,设置松弛因子以及NeedJac=TRUE;
d) 用算法2迭代求出方程组(78),得到更新量 和 ,进而利用
e) 如果算法2迭代失败,进行不连续性检测,并重启积分器;
f) 从(即)、(即)和(即)出发,用投影修正
g) 设置以及;若,令;
h) 判断后验误差是否满足误差条件要求,即
如果满足,存储更新、、、和,进行下一步计算准备;
如果不满足,设置;更新;并且
i. 判断是否在本步迭代中首次失败
IF StepFail,;IF decr,需要降阶,即取及;
ELSE 设置;IF decr,需要降阶计算,即取及;
ii. 设置;返回(a),重启内循环
i) IF ,更新 和 ,并令,不变阶不变步长,直接进入下一步的起始步骤4;
j) 利用
i. 暂设定和,并更新;
ii. IF incr &&,下一步可能要升阶,即若 ,则设置 及
iii. IF decr,下一步需要降阶,即令和,跳到6;
参 考 文 献
Petzold L R. Differential/algebraic equations are not ODEs. SIAM Journal on Scientific computing, 1982, 3(3):367~384 [百度学术]
Van Wyk R. Variable mesh multistep methods for ordinary differential equations. Journal of Computational Physics, 1970, 5(2): 244~264 [百度学术]
Van Bokhoven W M G. Linear implicit differentiation formulas of variable steps and order. IEEE Transactions on Circuits and Systems, 1975, 22(2):109~115 [百度学术]
Jackson K R, Sacks Davis R. An alternative implementation of variable stepsize multistep formulas for stiff ODEs. ACM Transactions on Mathematical Software, 1980, 6(3):295~318 [百度学术]
Gear C W. Simultaneous numerical solution of differential algebraic equations. IEEE Transactions on circuit theory, 1971, 18(1):89~95 [百度学术]
Orlandea N, Chace M A, Calahan D A. A sparsity-oriented approach to the design of mechanical systems, Part I and II. Paper NO. 76-DET-19 and 76-DET-20, presented at ASME Mechanical Conferences, Montreal, Quebec, Canada, October, 1976 [百度学术]
Brenan K E, Engquist B. Backward differentiation approximations of nonlinear differential/ algebraic systems. Mathematics of Computation, 1988, 51(184):659~676 [百度学术]
Brenan K E, Campbell S L, Petzold L R. Numerical solution of intial value problems in differential algebraic equations, 2nd edition, SIAM Classics in applied Mathematics, 1997 [百度学术]
Petzold L R. Numerical solution of differential-algebraic equations in mechanical systems simulation. Physica D: Nonlinear Phenomena, 1995, 60:269~279 [百度学术]
Loetstedt P L, Petzold L R. Numerical solution of nonlinear differential equations with algebraic constraints I: Convergence Results for Backward Differentiation Formulas. Mathematics of Computation, 1986, 46(174):491~516 [百度学术]
Petzold L R, Loetstedt P. Numerical solution of nonlinear differential equations with algebraic constraints II: Practical Implementations. SIAM Journal on Scientific computing, 1986, 7(3):720~733 [百度学术]
Gear C W, Gupta G A, Leimkuhler B. Automatic integration of Euler-lagrange equations with constraints. Journal of Computational and Applied Mathematics, 1985, 12-13:77-90 [百度学术]
Skelboe S. The control of order and step length for backward difference methods. BIT Numerical Mathematics, 1977, 17: 269-279 [百度学术]
Stewart K. Avoiding stability-induced inefficiencies in BDF methods. Journal of Computational and Applied Mathematics, 1990, 29(3):357~367 [百度学术]
Arnold M, Bruels O. Convergence of the generalized-alpha scheme for constrained mechanical systems. Multibody System Dynamics, 2007, 18(2):185~202 [百度学术]
Negrut D, Rampalli R, Ottarsson G, Sajdak A. On an implementation of the Hilber-Hughes-Taylor method in the context of index 3 differential-algebraic equations of multibody dynamics. Journal of Computational Nonlinear Dynamics, 2007, 2(1):73~85 [百度学术]
Chung J, Hulbert G M. A time integration algorithm for structural dynamics with improved numerical dissipation: the generalized alpha method. ASME Journal of Applied Mechanics, 1993, 60:371~375 [百度学术]
Hilber H M, Hughes T J R, Taylor R L. Improved numerical dissipation for time integration algorithms in structural dynamics. Earthquake Engineering & Structural Dynamics, 1977, 5(3):283~292 [百度学术]
Negrut D, Jay L O, Khude N. A discussion of low-order numerical integration formulas for rigid and flexible multibody dynamics. Journal of Computational Nonlinear Dynamics, 2008, 4(2):149~160 [百度学术]
Hairer E, Roche L, Lubich C. The numerical solution of differential-algebraic systems by Runge-Kutta methods. SpringerVerlag, Berlin Heidelberg, 1989 [百度学术]
Hairer E, Wanner G. Solving ordinary differential equations ii: stiff and differential-algebraic problems. 2nd Edition, Springer-Verlag, Berlin Heidelberg, 1996 [百度学术]
Roche L. Implicit Runge-Kutta methods for differential algebraic equations. SIAM Journal on Numerical Analysis, 1989, 26(4): 963~975 [百度学术]
Jay L. Convergence of Runge-Kutta methods for differential-algebraic systems of index 3. Applied Numerical Mathematics, 1995, 17:97~118 [百度学术]
Jay L. Convergence of a Class of Runge-Kutta methods for differential-algebraic systems of index 2. BIT Numerical Mathematics, 1993, 33:137~150 [百度学术]
Skvortsov L M. Runge-Kutta collocation methods for differential-algebraic equations of indices 2 and 3. Computational Mathematics and Mathematical Physics, 2012, 52(10):1373~1383 [百度学术]
Negrut D, Haug E J, German H C. An implicit Runge-Kutta method for integration of differential algebraic equations of multibody dynamics. Multibody System Dynamics, 2003, 9(2):121~142 [百度学术]
Skvortsov L M. Diagonally implicit Runge-Kutta methods for differential-algebraic equations of indices 2 and 3. Computational Mathematics and Mathematical Physics, 2010, 50(6):1047~1059 [百度学术]
Verwer J H, Hundsdorfer W H, Sommeijer B P. Convergence properties of the Runge-Kutta-Chebyshev method. Numerische Mathematik, 1990, 57:157~178 [百度学术]
Burrage K, Petzold L R. On order reduction for Runge-Kutta Methods to differential/algebraic systems and to stiff systems of ODEs. SIAM Journal on Numerical Analysis, 1990, 27(2):447~456 [百度学术]
Skvortsov L M. How to avoid accuracy and order reduction in Runge-Kutta methods as applied to stiff problems. Computational Mathematics and Mathematical Physics, 2017, 57(7):1126~1141 [百度学术]
Baumgarte J. Stabilization of constraints and integrals of motion in dynamical systems. Computer Method in Applied Mechanics and Engineering, 1972, 1(1):1~16 [百度学术]
Shampine L F. Evaluation of implicit formulas for the solutions of ODEs. BIT Numerical Mathematics, 1979, 19:495~502 [百度学术]
Ostermeyer G P. On Baumgarte stabilization for diferential algebraic equations. In E. J. Haug and R. C. Deyo, editors, Real-Time Integration Methods for Mechanical System Simulation, 1990, 193~207 [百度学术]
Park K C, Chiou J C. Stabilization of computational procedures for constrained dynamical systems. Journal Guidance Control and Dynamics, 1988, 11(4):365~370 [百度学术]
Ascher U M, Chin H, Petzold L R, Reich S. Stabilization of constrained mechanical systems with DAEs and invariant manifolds. ACSE Journal Engineering Mechanics, 1994, 23(2):135~157 [百度学术]
Gear C W. Towards explicit methods for differential algebraic equations. BIT Numerical Mathematics, 2005, 46:505~514 [百度学术]
Braun D J, Goldfarb M. Simulation of constrained mechanical systems: Part I: an equation of motion, and Part II: explicit numerical integration. ASME Journal of Applied Mechanics, 2012, 79(4): 041017~041018 [百度学术]
Bauchau O A, Laulusa A. Review of contemporary approaches for constraint enforcement in multibody systems. Journal of Computational Nonlinear Dynamics, 2008, 3(1):011005 [百度学术]
Abdulle A, Medovikov A A. Second order Chebyshev methods based on orthogonal polynomials. Numerische Mathematik, 2001, 90:1~18 [百度学术]
Abdulle A. Fourth order Chebyshev methods with recurrence relation. SIAM Journal on Scientific computing, 2002, 25:2041~2054 [百度学术]
Haug E J, Yen J. Generalized coordinate partitioning methods for numerical integration of differential-algebraic equations of dynamics. In E. J. Haug and R. C. Deyo, editors, Real-Time Integration Methods for Mechanical System Simulation, 1990, 97~114 [百度学术]
Potra F A, Rheinbold W C. On the numerical solution of Euler-Lagrange equations. Mechanics of Structures and Machines, 1991, 19(1):1~18 [百度学术]
Rabier P J, Rheinbold W C. On the numerical solution of Euler-Lagrange equations. SIAM Journal on Numerical Analysis, 1995, 32(1):318~329 [百度学术]
Shabana A A, Hussein B A. A two-loop sparse matrix numerical integration procedure for the solution of differential/algebraic equations: application to multibody systems. Journal of Sound and Vibration, 2009, 327(3-5):557~563 [百度学术]
Hussein B A, Shabana A A. Sparse matrix implicit numerical integration of the stiff differential/algebraic equations: implementations. Nonlinear Dynamics, 2011, 65:369~382 [百度学术]
Aboubakr A K, Shabana A A. Efficient and robust implementation of the TLISMNI method. Journal of Sound and Vibration, 2015, 353(29):220~242 [百度学术]
Jay O L, Negrut D. A second order extension of the generalized alpha method for constrained systems in mechanics. In: Bottasso, C.(L. (eds) Multibody Dynamics. Computational Methods in Applied Sciences, 12. [百度学术]
Springer, Dordrecht, 2009 [百度学术]
Gear C W, Petzold L R. ODE Methods for the solution of differential/algebraic systems. SIAM Journal on Numerical Analysis, 1984, 21(4):716~728 [百度学术]
Shampine L F, Reichelt M W. The MATLAB ODE suite. SIAM Journal on Scientific computing, 1997, 18(1):1~22 [百度学术]
Gear C W. Numerical initial value problems in ordinary differential equations, Prentice-Hall, Englewood Cliffs, NJ, 1971 [百度学术]
Hindmarsh A C. LSODE and LSODI: two new initial value ordinary differential equation solvers. ACM SIGNUM Newsletters, 1980, 15:10~11 [百度学术]
Petzold L R. A description of DASSL: A differential/algebraic system solver. In: The 10th IMACS World Congress on System Simulation and Scientific Computation, 1982 [百度学术]
Gear C W, Tu K W. The effect of variable mesh size on the stability of multistep methods. SIAM Journal on Numerical Analysis, 1974, 11(5):1025~1043 [百度学术]
Gear C W, Watanabe D S. Stability and convergence of variable order multistep methods. SIAM Journal on Numerical Analysis, 1974, 11(5):1044~1058 [百度学术]
Moore P K, Petzold L R. A stepsize control strategy for stiff systems of ordinary differential equations. Applied Numerical Mathematics, 1994, 15(4):449~463 [百度学术]
Shampine L F. Implementations of implicit formulas for the solutions of ODEs. SIAM Journal on Scientific computing, 1980, 1(1):103~118 [百度学术]
Gear C W, Osterby O. Solving ordinary differential equations with discontinuities. ACM Transactions on Mathematical Software, 1984, 10(1):23~44 [百度学术]
Mao G, Petzold L R. Efficient integration over discontinuities for differential-algebraic systems. Computers & Mathematics with Application, 2002, 43(1-2): 65~79 [百度学术]
MSC. Software Corporation, ADAMS 2019 Online Help. MSC. Software Corporation, Ann Arbor, Michigan, USA [百度学术]
Schiehlen W. Multibody Systems Handbook, Springer-Verlag, Berlin Heidelberg, 1990 [百度学术]