nonreflection boundary conditions
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
无反射边界条件数值计算
一.问题描述
一维欧拉方程:
0U F
t x
∂∂+=∂∂ (1)
()2,u U u F u p e e p u ρρρρ⎛⎫
⎛⎫
⎪ ⎪=+ ⎪ ⎪ ⎪ ⎪+⎝⎭⎝⎭
(2)
通过差分方法在计算域a x b ≤≤上求解方程(1)时,需要知道a x b ≤≤上的初始条件和,x a x b ==的边界条件。无反射边界条件即讨论如何处理边界条件的问题。 通过线性变换,方程(1)可以写作: 0U U
A t x
∂∂+=∂∂ (3)
其中:
20,00
u
c p U u A u s s u ρ
ρρρ⎛⎫
⎛⎫
⎪ ⎪
⎪
== ⎪ ⎪ ⎪ ⎪⎝⎭ ⎪⎝
⎭
(4)
求矩阵A 的特征值i λ,及其相应的左右特征向量,i i I r 。
i i i i i i
I A I Ar r λλ== (5)
自然可以得到对角变换: 1SAS -=Λ
(10)
其中:
()11
121232
33,,,,I S I S r r r I λλλ-⎛⎫⎛⎫
⎪ ⎪==Λ= ⎪ ⎪ ⎪ ⎪⎝⎭⎝
⎭
(11)
(10)带入(3)得到: 0U U
S
S t x ∂∂+Λ=∂∂ (12) 0i i i U U I I t x λ∂∂+=∂∂ (13)
令:
i i dV I dU =
(14)
所以:
0i i i V V
t x
λ∂∂+=∂∂ (15)
式(15)描述了一系列特征速度为i λ的波动方程。对于方程(3)变换以后得到(15),其中:
()1231232123, , ,,, 0,0,1, ,,, , u c u u c
p p I c I I c sc sc V p cu V p c V p cu
λλλρρρρρ=-==+⎛⎫⎛
⎫=--== ⎪ ⎪⎝⎭⎝
⎭=-=-=+(16)
现在来看如何根据(15)来给定计算过程中的边界条件,以计算域的左侧边界x a =为例。当波速0i λ>,表示波由计算域外传入,而实际上若x a =点处并没有实际的源存在,则应当有
0i V x ∂=∂,即0i V
t
∂=∂,这就保证不会在无源有计算所引进的误差而使有i V 传入计算域,若x a =点本身就有源,则直接根据给定的源确定边界条件即可;当0i λ<,表示波右计算域内往外传播,这个时候就应当由前差的方法,由x a =右侧点n t t =时刻的信息来得到x a =点在n t t t =+∆时刻的边界条件。一下给出具体的取值格式: 离散方程组: 10i i i i i dp du
c dt dt ρη-+= (17) 220i i
i i dp d c dt dt ρη-+= (18)
30i i
i i i dp du c dt dt
ρη++= (19)
其中j η分别为相应j V 的空间导数,当在边界处无源时,应当安一下方法取值。若波由外传入,则取0j η=,若波由计算域传出,则有:
,1,j ,,1j []/ 0[]/ 0
ji j j i j i ji ji j i j i V V dx V V dx ηλληλλ+-=-<=-> (20)
特征值方法处理无反射边界条件可以很好的帮助理解,但在做高维问题是会比较
困难。
二.作业:
一维直管道(如下图所示),计算域为 1010≤≤-x ,在下游出口处有一声源为:
)]1(
sin[111'''t Ma x
p u +-⎪
⎪⎪⎭
⎫ ⎝⎛-=⎪⎪⎪⎭⎫ ⎝⎛ωερ, 510-=ε, πω6.0= 主控方程为一维线化Euler 方程,计算t=1, 3, 5, 10, 20, 40,60,80等时刻管内声场分布,并与解析解对比。
三.数值程序
#include
using namespace std;
const int N=1001;
const double gamma=1.4; const double EPS=0.00001; const double Ma=0.4; const double XR=10.0; const double XL=-10.0;
const double PI=3.1415926538; int main() {
int i,step;
double dx,dt,t,w,c0,rho0,p0,u0;
double x[N],rho[N],p[N],u[N],lambda[3],VV[N][3]; w=0.6*PI; dt=0.0001;
dx=(XR-XL)/(N-1);
for(i=0;i<=N-1;i++)
x[i]=XL+i*dx;
c0=1.0;
rho0=1.0;
u0=Ma;
p0=1.0/gamma;
for(i=0;i<=N-1;i++)
{
rho[i]=0.0;
u[i]=Ma;
p[i]=0.0;
VV[i][0]=0.0;
VV[i][1]=0.0;
VV[i][2]=0.0;
}
step=0;
lambda[0]=Ma-1;
lambda[1]=Ma;
lambda[2]=Ma+1;
t=0.0;
do
{
step++;
//------right boundary----
rho[N-1]=EPS*sin(w*(XR/(1.0-Ma)+t));
u[N-1]=-EPS*sin(w*(XR/(1.0-Ma)+t));
p[N-1]=EPS*sin(w*(XR/(1.0-Ma)+t));
VV[N-1][0]=p[N-1]-rho0*c0*u[N-1];
VV[N-1][1]=p[N-1]-c0*c0*rho[N-1];
VV[N-1][2]=p[N-1]+rho0*c0*u[N-1];
//------left boundary----
VV[0][0]=VV[0][0]-lambda[0]*dt*(VV[1][0]-VV[0][0])/dx;
VV[0][1]=VV[1][1];
VV[0][2]=VV[1][2];
//-----inner flow-------
for(i=N-2;i>=1;i--)
{
VV[i][0]=VV[i][0]-0.5*lambda[0]*dt*(VV[i+1][0]-VV[i-1][0])/dx;
VV[i][1]=VV[i][1]-0.5*lambda[1]*dt*(VV[i+1][1]-VV[i-1][1])/dx;