我们在边界上可以通过多项式构造高精度的差分格式
假设物理量ϕ 在这么一段微小离散尺度上是连续的,那么可以用多项式描述
ϕ=a+by+cy2(8)
那么,在图上 1 点,有y=0
ϕ1=a
在图上 2 点,y=Δy
ϕ2=a+bΔy+c(Δy)2
在图上 3 点,y=2Δy
ϕ2=a+b(2Δy)+c(2Δy)2
由这三点可以求解得到b
b=2Δy−3ϕ1+4ϕ2−ϕ3
在对式(8)求 y 偏导
∂y∂ϕ=b+2cy
在边界处,y=0
(∂y∂ϕ)1=b
得到单侧差分格式(和泰勒展开的项进行对比,可以知道此表达式的精度为二阶精度)
(∂y∂ϕ)1=2Δy−3ϕ1+4ϕ2−ϕ3+O(Δy)2
类似的,我们可以使用多项式方法构造使用更多点信息的更高精度差分格式,以保证边界上计算准确。
差分格式具体怎么用在偏微分方程的求解上呢?
我们通过简单的问题举例说明。
差分方程的构造
以一维非稳态热传导方程为例(材料总长 L
)
∂t∂T=α∂x2∂2T
左侧为时间项,右侧为扩散项,该方程没有对流项和源项
如果是 Dirichlet 边界条件
{T(0,t)T(L,t)=Tr=Tl
如果是 Neumann 边界条件
{∂x∂T(0,t)=Tr′(t)∂x∂T(L,t)=Tl′(t)
初始条件
T(x,0)=T0(x)
离散
将计算域划分成nx 个单元,时间步长dt ,计算时间步nt 步,所以
每个单元的长度为
dx=L/nx
总计算时间为
tt=dt∗nt
我们采用 C++ 的序号约定,即从 0 开始。
右边界节点T0 ,
中间节点从右向左依次是
T1,T2,T3,...,Tnx−1
左边界节点Tnx
如果使用上面的 Dirichlet 边界条件,则
{T0=TrTnx=Tl
如果使用上面的 Neumann 边界条件,则
显式构造
利用差分格式得到差分方程为
ΔtTin+1−Tin=α(Δx)2Ti+1n−2Tin+Ti−1n
- 上标n 为当前时间步,已知量
- 上标n+1 为下一时间步,待求未知量
- 下标i 为当前点,i−1 为上一点,i+1 为下一点
整理后可得
Tin+1=Tin+α(Δx)2Δt(Ti+1n−2Tin+Ti−1n)
方程左边为待求未知量,右侧为已知量。
这种类型的表达式可以直接迭代求解。即显式的按时间推进求解,通过每一个时间步的旧值可以算出下一个时间步的新值。
隐式构造
如果我们处理差分方程得到如下形式
ΔtTin+1−Tin=α(Δx)22Ti+1n+1+Ti+1n−2(2Tin+1+Tin)+2Ti−1n+1+Ti−1n
这种引入新时间步与旧时间步之间平均值的格式被称为克兰克 - 尼科尔森格式。这种格式下,新时间步的未知量不止是Tin+1 ,而且还有Ti+1n+1 和Ti−1n+1 。
整理上式有
2(Δx)2αΔtTi−1n+1−[1+(Δx)2αΔt]Tin+1+2(Δx)2αΔtTi+1n+1=−Tin−2(Δx)2αΔt(Ti+1n−2Tin+Ti−1n)
方程的左侧的三项都是待求未知量,右侧是已知量。
这种格式不能再按时间推进求解,而必须列出完整代数方程组,即构建Ax=b, 同时求出所有的未知量。这种方法就是隐式求解。
比较
显式构造看起来更加直观,算法和编程实现也更加方便。但是时间步长和空间步长必须要取很小才能保持计算稳定
回忆数值计算课程中的误差分析部分。
稳定性也是计算流体力学中一个重点,这里暂不深究。
隐式构造有点在于使用大得多的时间步长也能保持计算稳定。但是算法和编程实现更复杂,因为时间步长取的较大,也会导致时间上不够精确(对于一些求定常发展状态的流动,时间精确其实无所谓)。
求解一维传热方程
我们通过一个完整的问题来进一步讨论有限差分法的应用。
对于一维传热问题(热扩散问题),控制方程如下
∂t∂T=α∂x2∂2T
边界条件如下:
{TL=−1.0TR=1.0
我们对该方程分别进行显式和隐式数值计算
显式计算
算法
离散方程为
ΔtTin+1−Tin=α(Δx)2Ti+1n−2Tin+Ti−1n
整理后为
Tin+1=Tin+α(Δx)2Δt(Ti+1n−2Tin+Ti−1n)
实现
#todo
Copyright Notice: 此文章版权归aerosand.cn所有,如有转载,请注明来自原作者
Sponsor
支付宝打赏
微信打赏
Loading the Database