凸多边形多面体上线性函数的积分点与权重

本文探讨了在二阶精度的有限体积方法中,如MUSCL和DG格式下,如何在凸多边形或多面体单元边界取数值通量并确定权重,以保证稳定性与正则性。通过Gauss-Green定理和重心公式推导出积分点权重的计算方法。

凸多边形/多面体上线性函数平均值的分解(积分点和积分权重)

背景

在一般凸多边形或者多面体单元的二阶精度的有限体积格式,例如MUSCL,或者DG格式,需要在单元边界的中点上取数值通量,权重用于稳定性和保正性的证明。下面是给出一般凸多胞体(多边形或者多面体)的积分点和权重的推导。

结论

设在单元(控制体)ViV_iVi 上守恒量UUU的平均值为UiU_iUi ,在单元ViV_iVi 上重构的线性函数为,
U(x)=Ui+∇U⋅(x−xi) U(x) = U_i + \nabla U \cdot(\boldsymbol{x}-\boldsymbol{x}_i) U(x)=Ui+U(xxi)
其中xi\boldsymbol{x}_ixi 是控制体ViV_iVi 的重心。控制点xijx_{ij}xij 为控制体ViV_iVi 的边界SijS_{ij}Sij 的重心,下标 j∈N(i)j \in N(i)jN(i)N(i)N(i)N(i) 表示单元ViV_iVi 的邻居指标集合。控制点的权重wijw_{ij}wij 满足,
∑j∈N(i)wij=1(1) \sum_{j \in N(i)} w_{ij}=1 \tag{1} jN(i)wij=1(1)
其中权重
wij=(xij−xi)⋅nij∣Sij∣D∣Vi∣(2) w_{ij} = \frac{(\boldsymbol{x}_{ij}-\boldsymbol{x}_i)\cdot\boldsymbol{n}_{ij}|S_{ij}|}{D|V_i|} \tag{2} wij=DVi(xijxi)nijSij(2)
其中,nij\boldsymbol{n}_{ij}nij 是边界SijS_{ij}Sij 指向单元外部的单位法向量,∣Sij∣|S_{ij}|Sij 是边界SijS_{ij}Sij 的长度或者面积。在几何上(xij−xi)⋅nij(\boldsymbol{x}_{ij}-\boldsymbol{x}_i)\cdot\boldsymbol{n}_{ij}(xijxi)nij 表示重心xix_ixiSijS_{ij}Sij 所在直线或者平面上的距离。

线性函数U(x)U(x)U(x) 的数值积分满足,
Ui=∑jwijUij(3) U_i = \sum_{j} w_{ij}U_{ij} \tag{3} Ui=jwijUij(3)
其中,Uij=U(xij)U_{ij}=U(\boldsymbol{x}_{ij})Uij=U(xij)

证明

预备知识

Gauss-Green 定理

对于向量函数F∈Rn\boldsymbol{F}\in \mathbb{R}^nFRn ,在区域Ω\OmegaΩ 上,有Gauss-Green公式,
∫Ω∇⋅Fdx=∫∂ΩF⋅ndS(x)(4) \int_{\Omega} \nabla \cdot \boldsymbol{F} d\boldsymbol{x} =\int_{\partial \Omega} \boldsymbol{F} \cdot \boldsymbol{n} dS(\boldsymbol{x}) \tag{4} ΩFdx=ΩFndS(x)(4)

Gauss-Green 变形公式

对于标量函数u,vu,vu,v ,变形公式为
∫Ω∇uvdx=−∫Ωu∇vdx+∫∂Ωuvndx(5) \int_{\Omega} \nabla u v d \boldsymbol{x} = -\int_{\Omega} u \nabla v d \boldsymbol{x} + \int_{\partial \Omega} u v \boldsymbol{n} d \boldsymbol{x} \tag{5} Ωuvdx=Ωuvdx+Ωuvndx(5)

证明结论(1)(2)

多胞体的重心公式满足
xi=1∣Vi∣∫VixdV(6) \boldsymbol{x}_i = \frac{1}{|V_i|} \int_{V_{i}} \boldsymbol{x} d V \tag{6} xi=Vi1VixdV(6)
控制体ViV_iVi的体积公式为
∣Vi∣=∫Vi1dV=∫Vi∇⋅xDdV=1D∫∂Vix⋅ndS=1D∑jxij⋅nij∣Sij∣(7) |V_i|= \int_{V_i} 1 dV = \int_{V_i} \frac{\nabla\cdot \boldsymbol{x}}{D}dV = \frac{1}{D}\int_{\partial V_i} \boldsymbol{x} \cdot \boldsymbol{n} dS = \frac{1}{D} \sum_j \boldsymbol{x}_{ij} \cdot \boldsymbol{n}_{ij}|S_{ij}| \tag{7} Vi=Vi1dV=ViDxdV=D1VixndS=D1jxijnijSij(7)
这里倒数第二个等号使用了Gauss-Green公式(4),导数第一个等号成立的是因为边界SijS_{ij}Sij是线性函数,在边界上取重心点就可以求出在整个边界上的积分,后面在单元边界∂Vi\partial V_iVi上离散时都会使用到,下面再赘述。

单元的重心xi\boldsymbol{x}_ixi 是一个常数,因而∇⋅xi=0\nabla \cdot \boldsymbol{x}_i =0xi=0 , 再套用公式(7)可以得到
0=∫Vi0dV=1D∫Vi∇⋅xidV=1D∑jxi⋅nij∣Sij∣(8) 0 = \int_{V_i}0 d V = \frac{1}{D}\int_{V_i} \nabla\cdot\boldsymbol{x}_i d V = \frac{1}{D} \sum_j \boldsymbol{x}_i \cdot \boldsymbol{n}_{ij}|S_{ij}| \tag{8} 0=Vi0dV=D1VixidV=D1jxinijSij(8)
将公式(7)(8)作差得到
∣Vi∣=1D∑jxij⋅nij∣Sij∣−1D∑jxi⋅nij∣Sij∣=1D∑j(xij−xi)⋅nij∣Sij∣ |V_i| = \frac{1}{D} \sum_j \boldsymbol{x}_{ij} \cdot \boldsymbol{n}_{ij}|S_{ij}| - \frac{1}{D} \sum_j \boldsymbol{x}_i \cdot \boldsymbol{n}_{ij}|S_{ij}| = \frac{1}{D} \sum_j (\boldsymbol{x}_{ij}-\boldsymbol{x}_i) \cdot \boldsymbol{n}_{ij}|S_{ij}| Vi=D1jxijnijSijD1jxinijSij=D1j(xijxi)nijSij
由此可以得到结论(1)(2).

证明结论(3)

对于标量函数UUU满足
U=1DDU=1D(∇⋅x)U=1D[∇⋅(Ux)−x⋅∇U](9) U= \frac{1}{D} D U = \frac{1}{D}(\nabla \cdot \boldsymbol{x})U = \frac{1}{D}[\nabla\cdot(U\boldsymbol{x})-\boldsymbol{x}\cdot \nabla U] \tag{9} U=D1DU=D1(x)U=D1[(Ux)xU](9)
单元的平均值UiU_iUi 的定义为
Ui=1∣Vi∣∫ViUdV U_i = \frac{1}{|V_i|}\int_{V_i} U d V Ui=Vi1ViUdV
代入公式(9)得到
Ui=1D∣Vi∣∫Vi[∇⋅(Ux)−x⋅∇U]dV=1D∣Vi∣[∫Vi∇⋅(Ux)dV−∇U⋅∫VixdV](10) U_i =\frac{1}{D|V_i|}\int_{V_i} [\nabla\cdot(U\boldsymbol{x})-\boldsymbol{x}\cdot \nabla U] dV =\frac{1}{D|V_i|}[\int_{V_i} \nabla\cdot(U\boldsymbol{x})dV-\nabla U \cdot \int_{V_i} \boldsymbol{x} dV ] \tag{10} Ui=DVi1Vi[(Ux)xU]dV=DVi1[Vi(Ux)dVUVixdV](10)
这里第二项∇U\nabla UU 可以放在积分号之外是因为∇U\nabla UU 是一个常数。因此对于梯度∇U\nabla UU同样有
∇U=1∣Vi∣∫Vi∇UdV=1Vi∫∂ViUndA=1∣Vi∣∑jUijnij∣Sij∣(11) \nabla U =\frac{1}{|V_i|}\int_{V_i} \nabla U dV = \frac{1}{V_i} \int_{\partial V_i} U \boldsymbol{n} dA =\frac{1}{|V_i|} \sum_j U_{ij}\boldsymbol{n}_{ij}|S_{ij}| \tag{11} U=Vi1ViUdV=Vi1ViUndA=Vi1jUijnijSij(11)
这里第二个等号使用到了Gauss-Green公式的变形公式(5).

公式(10)的第一项应用Gauss-Green公式(4),第二项代入重心公式(6),可以得到
Ui=1D∣Vi∣[∫∂ViUx⋅ndS−∇U⋅xi] U_i = \frac{1}{D|V_i|}\left [ \int_{\partial V_i} U \boldsymbol{x} \cdot \boldsymbol{n} dS -\nabla U \cdot \boldsymbol{x}_i\right] Ui=DVi1[ViUxndSUxi]
代入公式(11)可以得到
Ui=1D∣Vi∣[∫∂ViUx⋅ndS−xi⋅∫Vi∇UdV] U_i = \frac{1}{D|V_i|}\left [ \int_{\partial V_i} U \boldsymbol{x} \cdot \boldsymbol{n} dS -\boldsymbol{x}_i \cdot \int_{V_i} \nabla U dV\right] Ui=DVi1[ViUxndSxiViUdV]
离散之后得到
Ui=1D∣Vi∣[∑jUij(xij⋅nij)∣Sij∣−xi⋅∑jUij∣Sij∣nij]=1D∣Vi∣∑j(xij−xi)⋅nij∣Sij∣Uij=∑jwijUij U_i = \frac{1}{D|V_i|} \left[ \sum_j U_{ij}(\boldsymbol{x}_{ij}\cdot \boldsymbol{n}_{ij})|S_{ij}|-\boldsymbol{x}_i \cdot \sum_j U_{ij} |S_{ij}|\boldsymbol{n}_{ij} \right] = \frac{1}{D|V_i|} \sum_j (\boldsymbol{x}_{ij}-\boldsymbol{x}_{i})\cdot \boldsymbol{n}_{ij} |S_{ij}|U_{ij}=\sum_j w_{ij}U_{ij} Ui=DVi1[jUij(xijnij)SijxijUijSijnij]=DVi1j(xijxi)nijSijUij=jwijUij
得证结论(3)(3)(3).

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值