• 高分辨率格式理论


    一个核心概念:人工粘性

    考虑经典的双曲守恒律方程
    ∂ u ∂ t + ∂ f ∂ x = 0 {{\partial u} \over {\partial t}} + {{\partial f} \over {\partial x}} = 0 tu+xf=0
    可以写成守恒形式的数值格式
    u i n + 1 = u i n − λ ( f ^ i + 1 / 2 n − f ^ i + 1 / 2 n ) u_i^{n + 1} = u_i^n - \lambda \left( {\hat f_{i + 1/2}^n - \hat f_{i + 1/2}^n} \right) uin+1=uinλ(f^i+1/2nf^i+1/2n)
    式中 λ \lambda λ是时间步长与空间步长之比。 f ^ {\hat f} f^则是面上的数值通量。各种格式的最终目的就是设法给出数值通量的近似。
    为了减小间断处的震荡,一种有效的方法是在方程右端添加人工粘性项
    ∂ u ∂ t + ∂ f ∂ x = Δ x 2 Δ t ∂ ∂ x ( Q ∂ u ∂ x ) {{\partial u} \over {\partial t}} + {{\partial f} \over {\partial x}} = {{\Delta {x^2}} \over {\Delta t}}{\partial \over {\partial x}}\left( {Q{{\partial u} \over {\partial x}}} \right) tu+xf=ΔtΔx2x(Qxu)相似地,也可差分得到下式
    u i n + 1 = u i n − λ ( f ^ i + 1 / 2 n − f ^ i + 1 / 2 n ) + 1 / 2 ( Q i + 1 / 2 Δ + u i n − Q i − 1 / 2 Δ − u i n ) u_i^{n + 1} = u_i^n - \lambda \left( {\hat f_{i + 1/2}^n - \hat f_{i + 1/2}^n} \right) +1/2 \left( {{Q_{i + 1/2}}{\Delta ^ + }u_i^n - {Q_{i - 1/2}}{\Delta ^ - }u_i^n} \right) uin+1=uinλ(f^i+1/2nf^i+1/2n)+1/2(Qi+1/2Δ+uinQi1/2Δuin)
    可以将右侧第三项与数值通量合并,得到新的数值通量
    f ˉ i + 1 / 2 n = f ^ i + 1 / 2 n − Q i + 1 / 2 2 λ Δ + u i n \bar f_{i + 1/2}^n = \hat f_{i + 1/2}^n - {{{Q_{i + 1/2}}} \over {2\lambda }}{\Delta ^ + }u_i^n fˉi+1/2n=f^i+1/2n2λQi+1/2Δ+uin f ˉ i − 1 / 2 n = f ^ i − 1 / 2 n − Q i − 1 / 2 2 λ Δ − u i n \bar f_{i - 1/2}^n = \hat f_{i - 1/2}^n - {{{Q_{i - 1/2}}} \over 2\lambda }{\Delta ^ - }u_i^n fˉi1/2n=f^i1/2n2λQi1/2Δuin

    这里可以看出“人工粘性”可增加逆梯度方向上的通量,即如果 u i + 1 n > u i n u_{i + 1}^n > u_i^n ui+1n>uin那么“人工粘性”将会减少 i + 1 / 2 i + 1/2 i+1/2面上的正向通量。相反地,负人工粘性则会增加 i + 1 / 2 i + 1/2 i+1/2面上的通量。合适地选取、改变、调整负人工粘性则是开发高分辨率格式的核心问题。

    经典格式

    中心差分格式

    f ^ i + 1 / 2 n = f i + f i + 1 2 \hat f_{i + 1/2}^n = {{{f_i} + {f_{i + 1}}} \over 2} f^i+1/2n=2fi+fi+1

    一阶迎风格式

    f ^ i + 1 / 2 n = f i + f i + 1 2 − 1 2 ∣ a i + 1 / 2 n ∣ ( u i + 1 − u i ) \hat f_{i + 1/2}^n = {{{f_i} + {f_{i + 1}}} \over 2} - {1 \over 2}\left| {a_{i + 1/2}^n} \right|\left( {{u_{i + 1}} - {u_i}} \right) f^i+1/2n=2fi+fi+121ai+1/2n(ui+1ui)
    式中右端第二项为一阶迎风格式引入的数值粘性

    Lax-Fridrichs一阶格式

    f ^ i + 1 / 2 n = f i + f i + 1 2 − 1 2 λ ( u i + 1 − u i ) \hat f_{i + 1/2}^n = {{{f_i} + {f_{i + 1}}} \over 2} - {1 \over {2\lambda }}\left( {{u_{i + 1}} - {u_i}} \right) f^i+1/2n=2fi+fi+12λ1(ui+1ui)
    第二项是数值粘性,该格式的数值粘性非常大

    Lax-Wendroff二阶格式

    f ^ i + 1 / 2 n = f i + f i + 1 2 − 1 2 λ ( a i + 1 / 2 n ) 2 ( u i + 1 − u i ) \hat f_{i + 1/2}^n = {{{f_i} + {f_{i + 1}}} \over 2} - {1 \over 2}\lambda {\left( {a_{i + 1/2}^n} \right)^2}\left( {{u_{i + 1}} - {u_i}} \right) f^i+1/2n=2fi+fi+121λ(ai+1/2n)2(ui+1ui)

    注意:"数值粘性"来源于格式本身,"人工粘性"来源于人为添加的扩散项,虽然表象不同,但二者的本质是相同的。

    高分辨率TVD格式的原理

    尝试在1阶TVD格式的基础上添加负的"人工粘性“。这个“人工粘性”必须是非线性的,使得:在光滑区域达到二阶格式,而在间断区域回归到一阶格式。

    A 通量修正法

    Harten1提出的通量修正法即是在1阶TVD格式的基础上修正物理通量 f f f以部分抵消原格式的截断误差。这个修正量(事实上的“人工粘性”)必须是非线性的,使得:在光滑区域完全抵消低阶格式的数值粘性,并趋近于二阶L-W格式的数值粘性,达到二阶格式。而在间断区域回归到一阶格式。为了实现这一目标,必须平衡好 f ˉ i + 1 / 2 n \bar f_{i + 1/2}^n fˉi+1/2n中蕴含的“数值粘性”部分与“人工粘性”部分。

    B 通量限制器

    与Harten的想法类似,但是不再修正"物理通量 f f f",而是直接修正"数值通量 f ˉ i + 1 / 2 n \bar f_{i + 1/2}^n fˉi+1/2n"。将高阶格式的数值通量写为低阶格式的数值通量与反扩散通量之和,为了使格式总变差不增(TVD条件),需要限制反扩散通量的大小。这就是通量限制器。反扩散通量实质上就是负的"人工粘性"。
    比如,取使用L-W格式作为高阶格式
    [ f ^ i + 1 / 2 n ] H i g h = f i + f i + 1 2 − 1 2 λ ( a i + 1 / 2 n ) 2 ( u i + 1 − u i ) {\left[ {\hat f_{i + 1/2}^n} \right]_{{\rm{High}}}} = {{{f_i} + {f_{i + 1}}} \over 2} - {1 \over 2}\lambda {\left( {a_{i + 1/2}^n} \right)^2}\left( {{u_{i + 1}} - {u_i}} \right) [f^i+1/2n]High=2fi+fi+121λ(ai+1/2n)2(ui+1ui)
    再使用一阶迎风格式作为低价格式
    [ f ^ i + 1 / 2 n ] L o w = f i + f i + 1 2 − 1 2 ∣ a i + 1 / 2 n ∣ ( u i + 1 − u i ) {\left[ {\hat f_{i + 1/2}^n} \right]_{{\rm{Low}}}} = {{{f_i} + {f_{i + 1}}} \over 2} - {1 \over 2}\left| {a_{i + 1/2}^n} \right|\left( {{u_{i + 1}} - {u_i}} \right) [f^i+1/2n]Low=2fi+fi+121ai+1/2n(ui+1ui)
    两种格式进行组合
    f ^ i + 1 / 2 n = [ f ^ i + 1 / 2 n ] L o w + φ ( [ f ^ i + 1 / 2 n ] H i g h − [ f ^ i + 1 / 2 n ] L o w ) \hat f_{i + 1/2}^n = {\left[ {\hat f_{i + 1/2}^n} \right]_{{\rm{Low}}}} + \varphi \left( {{{\left[ {\hat f_{i + 1/2}^n} \right]}_{{\rm{High}}}} - {{\left[ {\hat f_{i + 1/2}^n} \right]}_{{\rm{Low}}}}} \right) f^i+1/2n=[f^i+1/2n]Low+φ([f^i+1/2n]High[f^i+1/2n]Low) = f i + f i + 1 2 − 1 2 ∣ a i + 1 / 2 n ∣ ( u i + 1 − u i ) + φ ( − 1 2 λ ( a i + 1 / 2 n ) 2 ( u i + 1 − u i ) + 1 2 ∣ a i + 1 / 2 n ∣ ( u i + 1 − u i ) ) = {{{f_i} + {f_{i + 1}}} \over 2} - {1 \over 2}\left| {a_{i + 1/2}^n} \right|\left( {{u_{i + 1}} - {u_i}} \right) + \varphi \left( { - {1 \over 2}\lambda {{\left( {a_{i + 1/2}^n} \right)}^2}\left( {{u_{i + 1}} - {u_i}} \right) + {1 \over 2}\left| {a_{i + 1/2}^n} \right|\left( {{u_{i + 1}} - {u_i}} \right)} \right) =2fi+fi+121ai+1/2n(ui+1ui)+φ(21λ(ai+1/2n)2(ui+1ui)+21ai+1/2n(ui+1ui)) = f i + f i + 1 2 − 1 2 ∣ a i + 1 / 2 n ∣ ( u i + 1 − u i ) + φ s g n ( ν i + 1 / 2 n ) − ν i + 1 / 2 n 2 a i + 1 / 2 n ( u i + 1 − u i ) = {{{f_i} + {f_{i + 1}}} \over 2} - {1 \over 2}\left| {a_{i + 1/2}^n} \right|\left( {{u_{i + 1}} - {u_i}} \right) + \varphi {{{\mathop{\rm sgn}} \left( {\nu _{i + 1/2}^n} \right) - \nu _{i + 1/2}^n} \over 2}a_{i + 1/2}^n\left( {{u_{i + 1}} - {u_i}} \right) =2fi+fi+121ai+1/2n(ui+1ui)+φ2sgn(νi+1/2n)νi+1/2nai+1/2n(ui+1ui)
    式中的 φ \varphi φ表示通量限制器,对于光滑区域取1,达到二阶L-W格式,对于间断区域取0,恢复到一阶迎风格式。首先使用变量 r r r描述解的光滑程度
    r i + 1 / 2 = { u i − u i − 1 u i + 1 − u i , a i + 1 / 2 > 0 u i + 2 − u i + 1 u i + 1 − u i , a i + 1 / 2 < 0 r_{i+1 / 2}=\left\{

    uiui1ui+1ui,ai+1/2>0ui+2ui+1ui+1ui,ai+1/2<0" role="presentation">uiui1ui+1ui,ai+1/2>0ui+2ui+1ui+1ui,ai+1/2<0
    \right. ri+1/2={ui+1uiuiui1,ai+1/2>0ui+1uiui+2ui+1,ai+1/2<0
    然后使用 r r r描述通量限制器 φ \varphi φ,通量限制器的表达式有许多,详见Sweby2的工作
    在这里插入图片描述

    C 斜率限制器

    采用分片线性函数重构解,在单元面上应用TVD模板。
    f ^ i + 1 / 2 ( u i , u i + 1 ) → f ^ i + 1 / 2 ( u i + 1 / 2 L , u i + 1 / 2 R ) {\hat f_{i + 1/2}}\left( {{u_i},{u_{i + 1}}} \right) \to {\hat f_{i + 1/2}}\left( {u_{i + 1/2}^L,u_{i + 1/2}^R} \right) f^i+1/2(ui,ui+1)f^i+1/2(ui+1/2L,ui+1/2R) u i + 1 / 2 L = u i + s i Δ x 2 , u i + 1 / 2 R = u i + 1 − s i + 1 Δ x 2 u_{i + 1/2}^L = {u_i} + {s_i}{{\Delta x} \over 2},u_{i + 1/2}^R = {u_{i + 1}} - {s_{i + 1}}{{\Delta x} \over 2} ui+1/2L=ui+si2Δx,ui+1/2R=ui+1si+12Δx可以证明,在一定条件下,前者是一阶TVD的,那么后者是二阶TVD的
    需要使用限制器来限制线性函数的斜率以实现TVD格式。其本质与通量限制器相同。限制后的斜率与通量限制器之间的关系是
    s i = ( u i + 1 − u i Δ x ) φ ( r i + 1 / 2 ) {s _{i}} = \left( {{{{u_{i + 1}} - {u_i}} \over {\Delta x}}} \right)\varphi \left( {{r_{i + 1/2}}} \right) si=(Δxui+1ui)φ(ri+1/2)具体可参考MUSCL格式


    1. HARTEN A. High resolution schemes for hyperbolic conservation laws[J]. Journal of Computationalphysics, 1983(49): 357-393. ↩︎

    2. SWEBY P K. High resolution schemes using flux limiters for hyperbolic conservation laws[J]. Siam Journal On Numerical Analysis, 1984, 21(5): 995-1011. ↩︎

  • 相关阅读:
    PyCharm 2024.1最新变化
    解决 React 跨域问题
    Windows10启用WSL2,安装子系统Ubuntu20.04.4 LTS并在Ubuntu中部署docker
    对角线的输出
    亚马逊测评,买家号支付不了、砍单率高是什么问题,需要怎么解决
    github创建个人网页登录后404无法显示的问题
    【JavaScript】DOM增删改的操作
    Oracle Audit Vault部署
    Tomcat知识点(深入剖析Tomcat学习笔记)
    Gang Scheduling Performance Benefits for Fine-Grain Synchronization
  • 原文地址:https://blog.csdn.net/weixin_43325228/article/details/128026406