空气动力学基本概念:激波:激波的数值模拟方法_第1页
空气动力学基本概念:激波:激波的数值模拟方法_第2页
空气动力学基本概念:激波:激波的数值模拟方法_第3页
空气动力学基本概念:激波:激波的数值模拟方法_第4页
空气动力学基本概念:激波:激波的数值模拟方法_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

空气动力学基本概念:激波:激波的数值模拟方法1空气动力学基础1.1流体动力学方程流体动力学方程是描述流体运动的基本方程,主要包括连续性方程、动量方程和能量方程。这些方程基于质量、动量和能量守恒原理,是进行激波数值模拟的理论基础。1.1.1连续性方程连续性方程描述了流体质量的守恒。在不可压缩流体中,连续性方程可以表示为:∂其中,ρ是流体密度,u是流体速度矢量,t是时间。1.1.2动量方程动量方程描述了流体动量的守恒,即牛顿第二定律在流体动力学中的应用。在三维空间中,动量方程可以表示为:∂其中,p是流体压力,τ是应力张量,g是重力加速度。1.1.3能量方程能量方程描述了流体能量的守恒,包括内能和动能。能量方程可以表示为:∂其中,E是总能量,k是热导率,T是温度,ϕ是做功率。1.2激波的形成与特性激波是流体动力学中的一种现象,当流体速度超过声速时,激波形成。激波具有以下特性:不可逆性:激波的形成是一个不可逆过程,伴随着熵的增加。能量转换:激波中,动能转换为热能,导致温度和压力的突然增加。速度突变:流体通过激波时,速度从超音速突然减至亚音速。1.2.1激波的数值模拟激波的数值模拟通常使用有限体积法或有限差分法。这里以有限体积法为例,介绍激波的数值模拟方法。有限体积法有限体积法是一种基于控制体的数值方法,将计算域划分为一系列控制体,然后在每个控制体上应用守恒定律。对于激波模拟,关键在于正确处理激波附近的非线性效应。.1算法步骤网格划分:将计算域划分为一系列非重叠的控制体。状态变量离散:在每个控制体上,计算状态变量(如密度、速度、压力)的平均值。通量计算:计算控制体边界上的通量,通常使用Riemann求解器。时间推进:使用时间积分方法(如Euler方法或Runge-Kutta方法)更新状态变量。边界条件:处理边界条件,确保计算域的封闭性。迭代:重复步骤3至5,直到达到稳定状态或满足终止条件。.2示例代码以下是一个使用Python和NumPy库实现的简单有限体积法激波模拟示例:importnumpyasnp

#参数设置

rho=np.zeros(100)#密度

u=np.zeros(100)#速度

p=np.zeros(100)#压力

gamma=1.4#比热比

dx=0.1#空间步长

dt=0.01#时间步长

cfl=0.5#CFL数

#初始条件

rho[:50]=1.0

rho[50:]=0.125

u[:]=0.0

p[:50]=1.0

p[50:]=0.1

#主循环

forninrange(1000):

#计算速度

u+=dt*(p[1:]-p[:-1])/(rho*dx)

#计算压力

p+=dt*(rho*u[1:]*(u[1:]-u[:-1])+gamma*(p[1:]-p[:-1])/dx)

#应用CFL条件

dt=cfl*dx/np.max(np.abs(u))

#输出结果

print("Density:",rho)

print("Velocity:",u)

print("Pressure:",p)1.2.2代码解释此代码示例使用有限体积法模拟一维激波。首先,设置初始条件,包括密度、速度和压力的分布。然后,在主循环中,计算速度和压力的更新,使用CFL条件调整时间步长,以确保数值稳定性。最后,输出模拟结果。激波的数值模拟是一个复杂的过程,需要深入理解流体动力学方程和数值方法。上述代码仅为简化示例,实际应用中需要更复杂的算法和更精细的网格划分。2空气动力学基本概念:激波的数值模拟方法2.1激波理论2.1.1维激波管问题一维激波管问题是一类经典的空气动力学问题,用于研究激波的形成和传播。激波管内部通常被分为两个区域,每个区域具有不同的初始状态,如压力、密度和速度。当管中的隔板突然移除时,两个区域的气体开始混合,形成激波、膨胀波和接触间断。数值模拟方法数值模拟激波管问题通常采用有限体积法。这种方法将计算域离散成一系列体积单元,然后在每个单元上应用守恒定律。对于激波管问题,主要关注的是质量、动量和能量的守恒。代码示例下面是一个使用Python和NumPy库实现的一维激波管问题的简单数值模拟代码示例:importnumpyasnp

importmatplotlib.pyplotasplt

#参数设置

gamma=1.4#比热比

dx=0.01#空间步长

dt=0.001#时间步长

L=1.0#管长

N=int(L/dx)#网格点数

x=np.linspace(0,L,N+1)#空间网格

#初始条件

rho_L=1.0

u_L=0.0

p_L=1.0

rho_R=0.125

u_R=0.0

p_R=0.1

rho=np.zeros(N+1)

u=np.zeros(N+1)

p=np.zeros(N+1)

rho[:int(N/2)]=rho_L

rho[int(N/2):]=rho_R

u[:int(N/2)]=u_L

u[int(N/2):]=u_R

p[:int(N/2)]=p_L

p[int(N/2):]=p_R

#定义状态方程

defeos(rho,p):

returnp/(rho*(gamma-1))

#定义Riemann求解器

defriemann(rho_L,u_L,p_L,rho_R,u_R,p_R):

#计算左、右状态的声速

c_L=np.sqrt(gamma*p_L/rho_L)

c_R=np.sqrt(gamma*p_R/rho_R)

#计算特征速度

s_L=u_L-c_L

s_R=u_R+c_R

#根据特征速度判断波型

ifs_L<0ands_R>0:

#激波

u_star=(p_R-p_L+rho_L*u_L*(c_L**2)-rho_R*u_R*(c_R**2))/(rho_L*(c_L**2)-rho_R*(c_R**2))

rho_star=rho_L*(p_R/p_L)**(1/gamma)

p_star=p_R

elifs_L>0ands_R>0:

#右膨胀波

u_star=u_L

rho_star=rho_L

p_star=p_L

else:

#左膨胀波

u_star=u_R

rho_star=rho_R

p_star=p_R

returnrho_star,u_star,p_star

#主循环

fortinnp.arange(0,0.2,dt):

#更新边界条件

rho[0]=rho_L

rho[-1]=rho_R

u[0]=u_L

u[-1]=u_R

p[0]=p_L

p[-1]=p_R

#计算状态变量

foriinrange(1,N):

rho_star,u_star,p_star=riemann(rho[i-1],u[i-1],p[i-1],rho[i],u[i],p[i])

rho[i]+=dt/dx*(rho_star*rho[i-1]-rho_star*rho[i])

u[i]+=dt/dx*(rho_star*u_star*rho[i-1]-rho_star*u_star*rho[i])

p[i]+=dt/dx*(rho_star*eos(rho[i-1],p[i-1])*rho[i-1]-rho_star*eos(rho[i],p[i])*rho[i])

#绘制结果

plt.plot(x,rho)

plt.xlabel('位置')

plt.ylabel('密度')

plt.show()代码解释这段代码首先定义了比热比、空间步长、时间步长、管长和网格点数。然后,它设置了激波管的初始条件,包括左右两侧的密度、速度和压力。接下来,定义了状态方程和Riemann求解器,用于计算状态变量。在主循环中,代码更新边界条件,计算状态变量,并更新密度、速度和压力。最后,使用matplotlib库绘制了密度随位置的变化。2.1.2维激波与边界层相互作用二维激波与边界层相互作用是空气动力学中一个复杂的现象,当激波遇到物体表面的边界层时,会产生复杂的流动结构,如分离点、涡旋和激波反射。这种现象在超音速和高超音速飞行器的设计中尤为重要。数值模拟方法数值模拟二维激波与边界层相互作用通常采用有限体积法或有限差分法。这些方法可以处理复杂的几何形状和流动结构。此外,为了捕捉激波和边界层的细节,通常需要使用非结构化网格和自适应网格细化技术。代码示例下面是一个使用OpenFOAM实现的二维激波与边界层相互作用的数值模拟代码示例。由于OpenFOAM是一个复杂的C++库,这里只提供一个简化的代码框架://网格读取

volVectorFieldU("U");

volScalarFieldp("p");

volScalarFieldT("T");

surfaceScalarFieldphi("phi");

//物理属性

dimensionedScalarrho("rho",dimDensity,1.225);

dimensionedScalarmu("mu",dimViscosity,1.7894e-5);

dimensionedScalargamma("gamma",dimless,1.4);

//激波和边界层的初始条件

U=(0,0,0);

p=101325;

T=288.15;

//激波条件

labelshockCell=100;//假设激波位于第100个单元

U[shockCell]=(1,0,0);

p[shockCell]=202650;

T[shockCell]=576.3;

//边界层条件

labelboundaryLayerCell=200;//假设边界层位于第200个单元

U[boundaryLayerCell]=(0.1,0,0);

p[boundaryLayerCell]=101325;

T[boundaryLayerCell]=288.15;

//主循环

forAll(U,celli)

{

//计算状态变量

scalarrhoStar,uStar,pStar;

rhoStar=...;//使用Riemann求解器计算密度

uStar=...;//使用Riemann求解器计算速度

pStar=...;//使用Riemann求解器计算压力

//更新状态变量

U[celli]=uStar;

p[celli]=pStar;

T[celli]=pStar/(rhoStar*gamma);

}

//输出结果

runTime.write();代码解释这段代码首先读取了网格和状态变量,包括速度、压力和温度。然后,它定义了物理属性,如密度、粘度和比热比。接下来,设置了激波和边界层的初始条件。在主循环中,代码使用Riemann求解器计算状态变量,并更新速度、压力和温度。最后,使用OpenFOAM的runTime.write()函数输出结果。请注意,上述代码示例是简化的,实际的OpenFOAM代码将包含更多的细节,如网格生成、边界条件设置、求解器选择和收敛性检查。此外,由于OpenFOAM使用C++编写,代码示例中的省略号表示需要根据具体问题填写的计算细节。3空气动力学数值模拟方法:激波的捕捉与分析3.1数值模拟方法3.1.1有限差分法基础有限差分法是求解偏微分方程的一种数值方法,广泛应用于空气动力学中的流体动力学问题。它通过将连续的偏微分方程离散化,将连续空间和时间上的问题转化为离散网格上的问题,从而可以使用计算机进行求解。原理有限差分法的核心是用差商代替导数。例如,对于一维空间中的偏微分方程,可以使用中心差分格式来近似导数:∂其中,ui是网格点i上的函数值,Δx代码示例下面是一个使用Python实现的简单一维有限差分法示例,用于求解线性对流方程:importnumpyasnp

importmatplotlib.pyplotasplt

#参数设置

nx=41

dx=2/(nx-1)

nt=25

dt=0.025

c=1#波速

#初始化网格和函数值

u=np.ones(nx)

u[int(0.5/dx):int(1/dx+1)]=2

#计算过程

un=np.ones(nx)

forninrange(nt):

un=u.copy()

foriinrange(1,nx):

u[i]=un[i]-c*dt/dx*(un[i]-un[i-1])

#绘制结果

plt.plot(np.linspace(0,2,nx),u)

plt.xlabel('x')

plt.ylabel('u')

plt.title('有限差分法求解线性对流方程')

plt.show()3.1.2激波捕捉方案激波捕捉方案是专门设计用于处理激波和间断现象的数值方法。在空气动力学中,激波是流体速度突然变化的区域,传统的有限差分法在处理激波时容易产生振荡和不稳定性。激波捕捉方案通过添加人工粘性或使用非线性稳定性增强的格式来克服这些问题。原理激波捕捉方案通常基于高分辨率的数值格式,如通量限制器方案或WENO(WeightedEssentiallyNon-Oscillatory)方案。这些方法通过局部调整差分格式的平滑性,确保在激波附近不会产生振荡。代码示例下面是一个使用Python实现的Lax-Friedrichs方案,这是激波捕捉的一种简单方法,用于求解Burgers方程:importnumpyasnp

importmatplotlib.pyplotasplt

#参数设置

nx=41

dx=2/(nx-1)

nt=25

dt=0.025

c=1#波速

#初始化网格和函数值

u=np.ones(nx)

u[int(0.5/dx):int(1/dx+1)]=2

#计算过程

un=np.ones(nx)

forninrange(nt):

un=u.copy()

foriinrange(1,nx):

u[i]=0.5*(un[i-1]+un[i+1])-0.5*c*dt/dx*(un[i+1]-un[i-1])

#绘制结果

plt.plot(np.linspace(0,2,nx),u)

plt.xlabel('x')

plt.ylabel('u')

plt.title('Lax-Friedrichs方案求解Burgers方程')

plt.show()3.1.3网格生成技术网格生成是数值模拟中的关键步骤,它决定了计算的精度和效率。在空气动力学中,网格通常需要适应复杂的几何形状和激波的动态位置。原理网格生成技术包括结构化网格和非结构化网格。结构化网格通常用于简单几何形状,非结构化网格则适用于复杂几何。自适应网格细化(AMR)技术可以在激波附近自动增加网格密度,提高计算精度。代码示例网格生成的代码示例通常涉及复杂的几何处理和网格优化算法,这里提供一个使用Python和matplotlib库生成简单结构化网格的示例:importmatplotlib.pyplotasplt

importnumpyasnp

#定义网格范围和点数

x=np.linspace(0,1,100)

y=np.linspace(0,1,100)

#创建网格

X,Y=np.meshgrid(x,y)

#绘制网格

plt.plot(X,Y,color='k',linewidth=0.5)

plt.plot(X.T,Y.T,color='k',linewidth=0.5)

plt.axis('equal')

plt.title('结构化网格示例')

plt.show()3.1.4时间推进策略时间推进策略是数值模拟中用于更新时间步长上的解的方法。在空气动力学中,激波的动态特性要求使用稳定且高效的时间推进策略。原理常用的时间推进策略包括显式和隐式方法。显式方法简单直观,但可能受到时间步长的限制;隐式方法可以使用较大的时间步长,但需要求解线性或非线性方程组。代码示例下面是一个使用Python实现的显式Euler方法,用于时间推进的示例:importnumpyasnp

#参数设置

nx=41

dx=2/(nx-1)

nt=25

dt=0.025

c=1#波速

#初始化网格和函数值

u=np.ones(nx)

u[int(0.5/dx):int(1/dx+1)]=2

#显式Euler方法时间推进

forninrange(nt):

un=u.copy()

foriinrange(1,nx):

u[i]=un[i]-c*dt/dx*(un[i]-un[i-1])以上代码示例展示了如何使用有限差分法、激波捕捉方案、网格生成技术以及时间推进策略来解决空气动力学中的激波问题。通过这些方法,可以有效地模拟和分析激波的形成和传播,为飞机设计、火箭发射等领域的研究提供重要支持。4激波模拟实践4.1激波模拟软件介绍在空气动力学领域,模拟激波的软件多种多样,其中最常用的包括:OpenFOAM:一个开源的CFD(计算流体动力学)软件包,提供了丰富的物理模型和数值方法,适用于激波模拟。FLUENT:由ANSYS公司开发的商业CFD软件,广泛应用于航空航天、汽车和制造等行业,其强大的网格适应性和多物理场耦合能力使其在激波模拟中表现优异。SU2:一个开源的多物理场仿真软件,特别适合于航空航天应用,包括激波的数值模拟。这些软件的核心是使用数值方法求解流体动力学的基本方程,如欧拉方程或纳维-斯托克斯方程,以预测激波的形成、传播和与物体的相互作用。4.1.1OpenFOAM示例:超音速流过圆柱下面是一个使用OpenFOAM模拟超音速流过圆柱的简单示例。我们将使用supersonicInletOutletVelocity边界条件和rhoCentralFoam求解器。#创建案例目录

mkdir-p~/OpenFOAM/stitch/supersonicCylinder

cd~/OpenFOAM/stitch/supersonicCylinder

#复制模板文件

cp-r~/OpenFOAM/OpenFOAM-7/tutorials/incompressible/rhoCentralFoam/sonicCylinder/*.

#修改边界条件

sed-i's/sonicCylinder/supersonicCylinder/g'system/fvSchemes

sed-i's/sonicCylinder/supersonicCylinder/g'system/fvSolution

sed-i's/sonicCylinder/supersonicCylinder/g'0/U

#设置超音速入口条件

echo"inlet{typesupersonicInletOutletVelocity;inletValueuniform(100000);valueuniform(100000);}">0/U.boundaryField.inlet

#运行求解器

~/OpenFOAM/OpenFOAM-7/bin/runApplicationrhoCentralFoam-case~/OpenFOAM/stitch/supersonicCylinder4.1.2代码解释创建案例目录:首先,我们创建一个案例目录,用于存放所有与模拟相关的文件。复制模板文件:从OpenFOAM的教程目录中复制sonicCylinder案例的文件到我们的案例目录。修改边界条件:使用sed命令修改边界条件文件,将sonicCylinder替换为supersonicCylinder,以适应我们的案例名称。设置超音速入口条件:在入口边界条件文件中,我们设置超音速入口速度为1000m/s,方向沿x轴。运行求解器:最后,我们使用rhoCentralFoam求解器运行模拟。4.2案例分析:超音速流过圆柱超音速流过圆柱的案例是空气动力学中一个经典的测试案例,用于验证激波模拟的准确性。在这个案例中,我们通常设置一个圆柱体在超音速气流中,观察激波的形成和圆柱体周围的流场变化。4.2.1模拟设置流体:空气入口速度:超音速,例如Mach1.5圆柱直径:通常选择一个标准值,如1m网格:使用结构化或非结构化网格,圆柱周围需要加密网格以准确捕捉激波。4.2.2模拟结果模拟结果通常包括:压力分布:显示激波前后的压力变化。速度矢量图:可视化流体的速度分布,特别是激波的形成和传播。温度分布:激波区域的温度通常会显著升高。4.3结果后处理与分析后处理是激波模拟中不可或缺的一步,它帮助我们理解模拟结果,验证模型的准确性,并提取有用的信息。OpenFOAM提供了多种工具进行后处理,如paraFoam,它是一个基于ParaView的图形用户界面,用于可视化和分析CFD结果。4.3.1使用ParaView分析结果启动ParaView:通过paraFoam命令启动ParaView。加载数据:在ParaView中打开你的案例目录,选择foamToVTK工具将OpenFOAM的数据转换为ParaView可读的格式。可视化:使用ParaView的多种可视化工具,如等值面、流线和剪切面,来分析流场和激波的特性。4.3.2分析技巧比较理论与模拟结果:将模拟结果与理论预测或实验数据进行比较,验证模拟的准确性。激波强度分析:通过观察压力和温度的突变,评估激波的强度。流场结构分析:分析流体的速度矢量和涡度,理解激波对流场结构的影响。通过这些步骤,我们可以深入理解激波的形成机制,以及它如何影响物体周围的流场,这对于设计超音速飞行器和喷气发动机至关重要。5激波的多尺度模拟5.1概念与原理激波的多尺度模拟是一种综合考虑不同物理尺度的数值方法,旨在更准确地描述激波在不同条件下的行为。激波,作为流体动力学中的重要现象,其形成和演化涉及到从微观分子运动到宏观流体动力学的广泛尺度。多尺度模拟方法通过耦合不同尺度的模型,如分子动力学(MD)、离散速度法(DVM)、直接模拟蒙特卡洛(DSMC)和连续流体动力学方程(如Navier-Stokes方程),来捕捉这些跨尺度的物理过程。5.1.1分子动力学(MD)分子动力学是一种基于牛顿运动方程的微观模拟方法,适用于描述激波前后的分子行为。MD模拟可以揭示激波在微观尺度上的结构和动力学特性,如分子的碰撞频率、速度分布和温度变化。示例代码#分子动力学模拟示例

importnumpyasnp

fromegrateimportodeint

#定义分子动力学方程

defmolecular_dynamics(y,t,params):

#y:状态变量,如位置和速度

#t:时间

#params:模型参数,如分子质量、碰撞截面等

#返回dy/dt

pass

#初始条件和时间范围

y0=np.array([0,0,1,0])#位置和速度

t=np.linspace(0,10,1000)#时间范围

#模型参数

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论