pittsun 发表于 2007-12-30 12:25:18

请教:Roe格式求解一维欧拉方程

主要步骤在于求解通量。
我的算法完全参照教材,可是在求算Sod问题时,在激波处总是计算发散,不知道为什么。我怀疑是不是程序中的算法有什么问题,在这儿我把求解通量的函数贴在这儿,请高手们帮我看看。
int i,j,k;
// new items in Roe method
double *lambda = new double ;
double vec;
double *alpha = new double ;
double FL;
double FR;
double sound;
double rho;
double u;
double e;
double enthalpy;
double temp_l,temp_r;
double temp1,temp2;
//calculation process of Flux[]
for(i=0;i<cells+1;i++)
{
//set values
rho = sqrt(U*U);
temp_l = sqrt(U);
temp_r = sqrt(U);
u = (temp_l*U+temp_r*U)/(temp_l+temp_r);
e = 0.5*G4*U/U;
e = 0.5*G4*U/U;
temp1 = temp_r*(e+0.5*U*U+U/U);
temp2 = temp_l*(e+0.5*U*U+U/U);
enthalpy = (temp1+temp2)/(temp_l+temp_r);
sound = sqrt(G8*(enthalpy-0.5*u*u));
lambda = u-sound;
lambda = u;
lambda = u+sound;
vec = 1.0;            vec = 1.0;      vec = 1.0;
vec = lambda;      vec = u;      vec = lambda;
vec = enthalpy-u*sound; vec = 0.5*u*u;vec = enthalpy+u*sound;
temp1 = (U-U)-rho*sound*(U-U);
temp2 = (U-U)+rho*sound*(U-U);
alpha = 0.5*temp1/sound/sound;
alpha = (U-U)-(U-U)/sound/sound;
alpha = 0.5*temp2/sound/sound;
FL = U*U;
FL = FL*U+U;
FL = U*(0.5*G3*U+0.5*U*U*U);
FR = U*U;
FR = FL*U+U;
FR = U*(0.5*G3*U+0.5*U*U*U);

for(j=0;j<3;j++)
{
double temp = 0;
for(k=0;k<3;k++)
{
temp += fabs(lambda)*alpha*vec;
}
Flux = 0.5*(FL+FR)-0.5*temp;
}
}
程序中U数组为基本变量数组,依次为密度,速度,压力。
多谢先。[以下内容由 pittsun 在 2007年12月30日 00:31pm 时添加]
// G8 = gamma-1.0
// G4 = 2.0/(gamma-1.0); [以下内容由 pittsun 在 2007年12月30日 00:32pm 时添加]
// G3 = 2.0*gamma/(gamma-1.0);

zongxing85 发表于 2008-1-14 19:59:10

请教:Roe格式求解一维欧拉方程

你看的那本书啊?这个程序完整吗?

zongxing85 发表于 2008-1-15 16:47:17

请教:Roe格式求解一维欧拉方程

你把熵条件加进去,再试试看看可不可以

pittsun 发表于 2008-1-21 15:35:05

请教:Roe格式求解一维欧拉方程

下面引用由zongxing85在 2008/01/15 04:47pm 发表的内容:
你把熵条件加进去,再试试看看可不可以

不是熵条件的问题,是我程序里一个i,j的顺序弄错了,现在全改好了,多谢哈~

shirazbj 发表于 2014-6-6 11:44:50

页: [1]
查看完整版本: 请教:Roe格式求解一维欧拉方程