ImageVerifierCode 换一换
格式:DOCX , 页数:19 ,大小:160.70KB ,
资源ID:23102999      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/23102999.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(一维黎曼问题数值解与计算程序.docx)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

一维黎曼问题数值解与计算程序.docx

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

2、然破裂,气体从高压端冲向低压端,同时在管内形成激波、稀疏波和接触间断等复杂波系。2.基本方程组、初始条件和边界条件设气体是理想气体。一维问题在数学上可以用一维可压缩无黏气体方程组来描述。在直角坐标系下量纲为一的一维方程组为: (A.1)其中 (A.2) 这里、分别是流体的密度、速度、压力和单位体积总能。理想气体状态方程: (A.3),计算总时间为。计算得到在时刻的密度、速度和压力分布如图A.2(语言计算结果)和图A.3(语言计算结果)所示。采用两种不同语言编写程序所得到的计算结果完全吻合。从图A.2和图A.3中可以发现,两步差分格式能很好地捕捉激波,计算得到的激波面很陡、很窄,计算激波精度是很

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

4、fine GAMA 1.4/气体常数#define PI 3.141592654#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) int i; double maxvel,p,u,vel; maxvel=1e-100; for(i=1;imaxvel)maxvel=vel; retu

5、rn 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=p1/(GAMA-1)+rou1*u1*u1/2; for(i=J/2+1;i=J+1;i+) Ui0=rou2; Ui1=rou2*u2; Ui2=p

6、2/(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 U2E(double U3,double E3) double u,p; u=U1/U0; p=(GAMA-1)*(U2-0.5*U1*U1/U0); E

7、0=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=dt/dx; nu=0.25; for(i=1;i=J;i+) q=fabs(fabs(Ui+10-Ui0)-fabs(Ui0-Ui-10) /(fab

8、s(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-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=

9、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=0;i=J+1;i+) rou=Ui0; u=Ui1/rou; p=(GAMA-1)*(Ui2-0.5*Ui0*u*u); fprintf(fp,%20

10、f%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);-2. 语言源程序! MacCormack1D.for -!利用差分格式求解一维激波管问题(语言版

11、本) -*/ program MacCormack1D implicit double precision (a-h,o-z) parameter (M=1000) common /G_def/ GAMA,PI,J,JJ,dL,TT,Sf dimension U(0:M+1,0:2),Uf(0:M+1,0:2) dimension Ef(0:M+1,0:2)!气体常数 GAMA=1.4 PI=3.1415926!网格数 J=M!计算区域 dL=2.0!总时间 TT=0.4!时间步长因子 Sf=0.8 call Init(U,dx) T=01 dt=CFL(U,dx) T=T+dt write(

12、*,*)T=,T,dt=,dt call MacCormack_1D_Solver(U,Uf,Ef,dx,dt) call bound(U,dx) if(T.lt.TT)goto 1 call Output(U,dx) end!-!计算时间步长!入口: U, 当前物理量,dx, 网格宽度;!返回: 时间步长。!- double precision function CFL(U,dx) implicit double precision (a-h,o-z) common /G_def/ GAMA,PI,J,JJ,dL,TT,Sf dimension U(0:J+1,0:2) dmaxvel=1e

13、-10 do 10 i=1,J uu=U(i,1)/U(i,0) p=(GAMA-1)*(U(i,2)-0.5*U(i,0)*uu*uu) vel=dsqrt(GAMA*p/U(i,0)+dabs(uu) if(vel.gt.dmaxvel)dmaxvel=vel10 continue CFL=Sf*dx/dmaxvel end !-!初始化!入口: 无;!出口: U, 已经给定的初始值,dx,网格宽度。!- subroutine Init(U,dx) implicit double precision (a-h,o-z) common /G_def/ GAMA,PI,J,JJ,dL,TT,S

14、f dimension U(0:J+1,0:2)!初始条件 rou1=1.0 u1=0 v1=0 p1=1.0 rou2=0.125 u2=0 v2=0 p2=0.1 dx=dL/J do 20 i=0,J/2 U(i,0)=rou1 U(i,1)=rou1*u1 U(i,2)=p1/(GAMA-1)+0.5*rou1*u1*u120 continue do 21 i=J/2+1,J+1 U(i,0)=rou2 U(i,1)=rou2*u2 U(i,2)=p2/(GAMA-1)+0.5*rou2*u2*u221 continue end!-!边界条件!入口: dx,网格宽度;!出口: U, 已

15、经给定边界。!- subroutine bound(U,dx) implicit double precision (a-h,o-z) common /G_def/ GAMA,PI,J,JJ,dL,TT,Sf dimension U(0:J+1,0:2)!左边界 do 30 k=0,2 U(0,k)=U(1,k)30 continue!右边界 do 31 k=0,2 U(J+1,k)=U(J,k)31 continue end!-!根据U计算E!入口: U,当前U矢量;!出口: E,计算得到的E矢量,! U、E定义见Euler方程组。!- subroutine U2E(U,E,is,in) i

16、mplicit double precision (a-h,o-z) common /G_def/ GAMA,PI,J,JJ,dL,TT,Sf dimension U(0:J+1,0:2),E(0:J+1,0:2) do 40 i=is,in uu=U(i,1)/U(i,0) p=(GAMA-1)*(U(i,2) $ -0.5*U(i,1)*U(i,1)/U(i,0) E(i,0)=U(i,1) E(i,1)=U(i,0)*uu*uu+p E(i,2)=(U(i,2)+p)*uu40 continue end!-!一维差分格式求解器!入口: U, 上一时刻U矢量,! Uf、Ef,临时变量,!

17、dx,网格宽度,dt,,时间步长;!出口: U, 计算得到得当前时刻U矢量。!- subroutine MacCormack_1D_Solver(U,Uf,Ef,dx,dt) implicit double precision (a-h,o-z) common /G_def/ GAMA,PI,J,JJ,dL,TT,Sf dimension U(0:J+1,0:2),Uf(0:J+1,0:2) dimension Ef(0:J+1,0:2) r=dt/dx dnu=0.25 do 60 i=1,J do 60 k=0,2!开关函数 q=dabs(dabs(U(i+1,0)-U(i,0)-dabs

18、(U(i,0)-U(i-1,0) $ /(dabs(U(i+1,0)-U(i,0)+dabs(U(i,0)-U(i-1,0)+1e-10)!人工黏性项 Ef(i,k)=U(i,k)+0.5*dnu*q*(U(i+1,k)-2*U(i,k)+U(i-1,k) 60 continue do 61 k=0,2 do 61 i=1,J U(i,k)=Ef(i,k)61 continue call U2E(U,Ef,0,J+1) do 63 i=0,J do 63 k=0,2!U(n+1/2)(i+1/2) Uf(i,k)=U(i,k)-r*(Ef(i+1,k)-Ef(i,k)63 continue !

19、E(n+1/2)(i+1/2) call U2E(Uf,Ef,0,J) do 64 i=1,J do 64 k=0,2!U(n+1)(i) U(i,k)=0.5*(U(i,k)+Uf(i,k)-0.5*r*(Ef(i,k)-Ef(i-1,k) 64 continue end!-!输出结果, 用数据格式画图!入口: U, 当前时刻U矢量,! dx,网格宽度;!出口: 无。!- subroutine Output(U,dx) implicit double precision (a-h,o-z) common /G_def/ GAMA,PI,J,JJ,dL,TT,Sf dimension U(0:J+1,0:2) open(1,file=result.txt,status=unknown) do 80 i=0,J+1 rou=U(i,0) uu=U(i,1)/rou p=(GAMA-1)*(U(i,2)-0.5*U(i,0)*uu*uu) write(1,81)i*dx,rou,uu,p,U(i,2)80 continue close(1) 81 format(D20.10,D20.10,D20.10,D20.10,D20.10) end -

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1