一维黎曼问题(共7页).doc

上传人:飞****2 文档编号:14017534 上传时间:2022-05-02 格式:DOC 页数:7 大小:300KB
返回 下载 相关 举报
一维黎曼问题(共7页).doc_第1页
第1页 / 共7页
一维黎曼问题(共7页).doc_第2页
第2页 / 共7页
点击查看更多>>
资源描述

《一维黎曼问题(共7页).doc》由会员分享,可在线阅读,更多相关《一维黎曼问题(共7页).doc(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、精选优质文档-倾情为你奉上附录A 一维问题数值解与计算程序一维问题,即激波管问题,是一个典型的一维可压缩无黏气体动力学问题,并有 解析解。对它采用二阶精度两步差分格式进行数值求解。同时,为了初学者入门和练习方便,这里给出了用语言和编写的计算一维问题的计算程序,供大家学习参考。A-1利用两步差分格式求解一维问题1.一维问题图A.1 激波管问题示意图一维问题实际上就是激波管问题。激波管是一根两端封闭、内部充满气体的直管,如图A.1所示。在直管中由一薄膜将激波管隔开,在薄膜两侧充有均匀理想气体(可以是同一种气体,也可以是不同种气体),薄膜两侧气体的压力、密度不同。当时,气体处于静止状态。当时,薄膜瞬

2、时突然破裂,气体从高压端冲向低压端,同时在管内形成激波、稀疏波和接触间断等复杂波系。2.基本方程组、初始条件和边界条件设气体是理想气体。一维问题在数学上可以用一维可压缩无黏气体方程组来描述。在直角坐标系下量纲为一的一维方程组为: (A.1)其中 (A.2) 这里、分别是流体的密度、速度、压力和单位体积总能。理想气体状态方程: (A.3)初始条件:;。边界条件:和处为自由输出条件,,。3.二阶精度差分格式两步差分格式: (A.4)其中。计算实践表明,两步差分格式不能抑制激波附近非物理振荡。因此在计算激波时,必须采用人工黏性滤波方法: (A.5)为了在激波附近人工黏性起作用,而在光滑区域人工黏性为

3、零,需要引入一个与密度(或者压力)相关的开关函数: (A.6)由式(A.6) 可以看出,在光滑区域,密度变化很缓,因此值也很小;而在激波附近密度变化很陡,值就很大。带有开关函数的前置人工黏性滤波方法为: (A.7)其中参数往往需要通过实际试算来确定,也可采用线性近似方法得到:(A.8)由于声速不会超过3,所以取,在本计算中取。4.计算结果分析计算分别采用标准的语言和语言编写程序。计算中网格数取,计算总时间为。计算得到在时刻的密度、速度和压力分布如图A.2(语言计算结果)和图A.3(语言计算结果)所示。采用两种不同语言编写程序所得到的计算结果完全吻合。从图A.2和图A.3中可以发现,两步差分格式

4、能很好地捕捉激波,计算得到的激波面很陡、很窄,计算激波精度是很高的。采用带开关函数的前置人工滤波法能消除激波附近的非物理振荡,计算效果很好。从图A.2和图A.3中可以看出通过激波后气体的密度、压力和速度都是增加的;在压力分布中存在第二个台阶,表明在这里存在一个接触间断,在接触间断两侧压力是有间断的,而密度和速度是相等的。这个计算结果正确地反映了一维问题的物理特性,并被激波管实验所验证。 图A.2采用语言程序得到的一维问题密度、速度和压力分布图A.3采用语言程序得到的一维问题密度、速度和压力分布A-2 一维问题数值计算源程序1. 语言源程序/ MacCormack1D.cpp : 定义控制台应用

5、程序的入口点。/*-*利用差分格式求解一维激波管问题(语言版本)* -*/#include stdafx.h #include #include #include #define GAMA 1.4/气体常数#define PI 3.#define L 2.0/计算区域#define TT 0.4/总时间#define Sf 0.8/时间步长因子#define J 1000/网格数/全局变量double UJ+23,UfJ+23,EfJ+23;/*-计算时间步长入口: U,当前物理量,dx,网格宽度;返回: 时间步长。-*/double CFL(double UJ+23,double dx) i

6、nt i; double maxvel,p,u,vel; maxvel=1e-100; for(i=1;imaxvel)maxvel=vel; return Sf*dx/maxvel;/*-初始化入口: 无;出口: U, 已经给定的初始值, dx, 网格宽度。-*/void Init(double UJ+23,double & dx) int i; double rou1=1.0 ,u1=0.0,p1=1.0; /初始条件 double rou2=0.125,u2=0.0,p2=0.1; dx=L/J; for(i=0;i=J/2;i+) Ui0=rou1; Ui1=rou1*u1; Ui2=

7、p1/(GAMA-1)+rou1*u1*u1/2; for(i=J/2+1;i=J+1;i+) Ui0=rou2; Ui1=rou2*u2; Ui2=p2/(GAMA-1)+rou2*u2*u2/2; /*-边界条件入口: dx,网格宽度;出口: U, 已经给定的边界。-*/void bound(double UJ+23,double dx) int k; /左边界 for(k=0;k3;k+)U0k=U1k; /右边界 for(k=0;k3;k+)UJ+1k=UJk;/*-根据U计算E入口: U, 当前U矢量;出口: E, 计算得到的E矢量,U、E的定义见Euler方程组。-*/void U

8、2E(double U3,double E3) double u,p; u=U1/U0; p=(GAMA-1)*(U2-0.5*U1*U1/U0); E0=U1; E1=U0*u*u+p; E2=(U2+p)*u;/*-一维差分格式求解器入口: U, 上一时刻的U矢量,Uf、Ef,临时变量, dx,网格宽度,dt, 时间步长;出口: U, 计算得到的当前时刻U矢量。-*/void MacCormack_1DSolver(double UJ+23,double UfJ+23,double EfJ+23,double dx,double dt) int i,k; double r,nu,q; r=

9、dt/dx; nu=0.25; for(i=1;i=J;i+) q=fabs(fabs(Ui+10-Ui0)-fabs(Ui0-Ui-10) /(fabs(Ui+10-Ui0)+fabs(Ui0-Ui-10)+1e-100); /开关函数 for(k=0;k3;k+) Efik=Uik+0.5*nu*q*(Ui+1k-2*Uik+Ui-1k);/人工黏性项 for(k=0;k3;k+) for(i=1;i=J;i+)Uik=Efik; for(i=0;i=J+1;i+)U2E(Ui,Efi); for(i=0;i=J;i+) for(k=0;k3;k+) Ufik=Uik-r*(Efi+1k-

10、Efik); /U(n+1/2)(i+1/2) for(i=0;i=J;i+)U2E(Ufi,Efi); /E(n+1/2)(i+1/2) for(i=1;i=J;i+) for(k=0;k3;k+) Uik=0.5*(Uik+Ufik)-0.5*r*(Efik-Efi-1k); /U(n+1)(i) /*-输出结果, 用数据格式画图入口: U, 当前时刻U矢量,dx, 网格宽度;出口: 无。-*/void Output(double UJ+23,double dx) int i; FILE *fp; double rou,u,p; fp=fopen(result.txt,w); for(i=

11、0;i=J+1;i+) rou=Ui0; u=Ui1/rou; p=(GAMA-1)*(Ui2-0.5*Ui0*u*u); fprintf(fp,%20f%20.10e%20.10e%20.10e%20.10en,i*dx,rou,u,p,Ui2); fclose(fp);/*-主函数入口: 无;出口: 无。-*/void main() double T,dx,dt; Init(U,dx); T=0; while(TTT) dt=CFL(U,dx); T+=dt; printf(T=%10g dt=%10gn,T,dt); MacCormack_1DSolver(U,Uf,Ef,dx,dt); bound(U,dx); Output(U,dx);-专心-专注-专业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁