方程
对一维Schrödinger-Boussinesq方程
⎩⎨⎧i∂tψ+γψxx−ξuψutt−uxx+αuxxxx−(f(u))xx−ω(∣ψ∣2)xx=0=0
取周期边界.
令ψ=p+iq, vxx=∂tu.
则方程变成
⎩⎨⎧∂tp∂tq∂tu∂tv=−γqxx+ξuq=γpxx−ξup=vxx=u−αuxx+f(u)+ω∣ψ∣2
记质量为
∫Ω∣ψ(x,t)∣2dx
有质量守恒
记能量为
E(p,q,u,v)=∫Ωu2+∣∇v∣2+ξ2ωγ∣∇ψ∣2+α∣∇u∣2+2F(u)+2ωu∣ψ∣2dx
其中F(u)表示f(u)的积分, 一般取f(u)=θu2.
这时有能量守恒.
能量守恒
VP-AVF
空间采取有限差分, 对(u,v)→(p,q)的顺序进行基于变量的AVF方法后, 格式为
⎩⎨⎧δt+pnδt+qnδt+unδt+vn=−Dγq21+ξun+1q21=Dγp21−ξun+1p21=Dv21=u21−Dαu21+ω∣ψn∣2+3θ((un)2+(un+1)2+unun+1)
其中D表示2阶中心差分离散.
GRD-AVF
在基于格点的AVF方法中, 不妨采取(i−1)→(i)→(i+1)的顺序, 则格式有
⎩⎨⎧δt+Pinδt+Qinδt+Uinδt+Vin=−h2γ(Qi−1n+1+Qi+1n−2Qi21)+2ξUin+1(Qin+Qin+1)=h2γ(Pi−1n+1+Pi+1n−2Pi21)−2ξUin+1(Pin+Pin+1)=h21(Vi+1n+Vi−1n+1−Vin−Vin+1)=Ui21−h2α(Ui−1n+1+Ui+1n−Uin+1−Uin)+ω∣Ψin∣2+3θ((Uin)2+(Uin+1)2+UinUin+1)
数值格式
DP-AVF
将前两式合并后可得数值格式
⎩⎨⎧(i−2τξUin+1−h2τγ)Ψin+1Uin+1+h2τVin+1Vin+1−τ(h2α+21+3θUin)Uin+1−3τθ(Uin+1)2=iΨin−h2τγ(Ψi+1n+Ψi−1n+1−Ψin)+2τξUin+1Ψin=h2τ(Vi+1n+Vi−1n+1−Vin+1)+Uin=Vin+2τUin−h2τα(Ui−1n+1+Ui+1n−Uin)+τω∣Ψin∣2+3τθ(Uin)2
伴随格式
⎩⎨⎧(i−2τξUin−h2τγ)Ψin+1Uin+1+h2τVin+1Vin+1−τ(h2α+21+3θUin)Uin+1−3τθ(Uin+1)2=iΨin−h2τγ(Ψi−1n+Ψi+1n+1−Ψin)+2τξUinΨin=h2τ(Vi−1n+Vi+1n+1−Vin+1)+Uin=Vin+2τUin−h2τα(Ui+1n+1+Ui−1n−Uin)+τωΨin+12+3τθ(Uin)2
启动层外推
Dyin=h2yin+yi+2n−2yi+1n
⎩⎨⎧(i−2τξUin+2h2τγ)Ψin+1Uin+1−2h2τVin+1Vin+1−τ(−2h2α+21+3θUin)Uin+1−3τθ(Uin+1)2=iΨin−h2τγ(21Ψin+Ψi+2n−2Ψi+1n)+2τξUinΨin=Uin+h2τ(21Vin+Vi+2n−2Vi+1n)=Vin+2τUin−h2τα(21Uin+Ui+2n−2Ui+1n)+τω∣Ψin∣2+3τθ(Uin)2
数值验证
精确解算例
- 平面波解
u=2ψ=ei(x−t)
- 孤子波解
取b1=δ+4γS2, d1=1−S2, μ=γb1, ζ=x−St, S和δ是自由变量.
- γξd1=2b1(3γθ−αξ), 3αξ=γθ, 4αb1=γd1.
⎩⎨⎧ψuv=±ξ6b1γωγθ−αξsech(μζ)tanh(μζ)exp(i(2γSx+δt))=−ξ6b1sech2(μζ)=μξ12Sb1(xr−xlxr−x−1+e2μζ1)x∈[xl,xr],t≥0
- 3αξ=γθ, 4αb1=γd1.
⎩⎨⎧ψuv=γ2θω6αb1(γd1−4αb1)sech(μζ)exp(i(2γSx+δt))=−ξ6b1sech2(μζ)=μξ4Sb1(xr−xlxr−x−1+e2μζ1)x∈[xl,xr],t≥0
- γ=1, ξ=1, α=1, θ=34, ω=181, S=51, δ=121, Ω=[−40,40], T=10.
此时b1=152, d1=54, μ=152, 应选择第1个精确解.
- γ=1, ξ=1, α=32, θ=91, ω=−21, S=1522, δ=31, Ω=[−64,64], T=1.
此时b1=107, d1=−157, μ=107, 应选择第1个精确解.
问题
- 需要启动层
- 暂时单线程不并行的情况下, 左边界用精确解代替.
- 应该是要用别的数值格式来先算出启动层, 还在看.
- Richardson Extrapolation/外推
- 数值格式涉及二次函数, 两个根的问题
- 先试了一下求根公式中正负号, 发现全正会发散, 全负时误差10−1.
- 双根取离上一步近的那个.
- 目前能量误差10−2.