来自《ark_guide.pdf》
 对于ODE,M是I,PDF,则是a well-conditioned mass matrix,模拟过程中保持不变    积分的时间采用的是多阶时间插值法,最高可以去到5阶,这个参数可以由用户设置,比如 ARKStepSetDenseOrder
下面是阶数为0-3时的插值公式    fE部分,使用显式积分,针对系统nonstiff部分 fI部分,采用隐式积分,针对系统的stiff部分  ARKODE分为三种类型:ImEx, explicit, and implicit  系统如果有同时包含stiff,nonstiff,则可以手动拆成两部分,然后赋值给FE,FI,就是公式2.2的两部分   nonstiff问题,直接将公式2.2的FI置为NULL,这是ARK会退化成显式的龙格-库塔积分法(ERK)  stiff问题,最后使用的是classical diagonally-implicit Runge-Kutta methods (DIRK)
    ARKODE的步长是自适应的,它会根据局部的误差来调整步长。因此,除了返回给调用的y_n, ARKODE内部还维持了一个计算需要的y_n
LTE:local truncation error  误差测试通过,则这一步算成功。 误差测试不通过,则会重新采用新的步长在该点重新计算。 两次失败,h’/h<0.3,如果再失败,则h’/h<0.1. 多次失败,就会停止计算并返回错误信息。  上次成功的迭代步长h,下次预计的步长h’ 两者的比率:𝜂 = h’/h 这个比率的上限在不同的时候是不同的,由𝜂_max描述。
下面是步长调整的流程图   有些问题,构建雅可比或预测器的成本是很高的,或者不是很精确的数据不会影响收敛的,这时可能有需要避免步长的微小调整,防止过度计算,带来高昂的计算成本。 因此, 𝜂 ∈ [𝜂𝐿, 𝜂𝑈 ].就不会改变当前步长  fxedstep,实测绘导致数据的爆炸性增长。
|