Professional Documents
Culture Documents
h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
#include <stdio.h>
/* Geometry
L1 = 0.65 mm
L2 = *** mm
L = L1 + L2 = 2.4
Ri = 5.7 mm
Rt = 5.5328 mm
Re = 6 mm
At/A* = 1.176
M = 1.5
Yc = 5.7 - 0.2679487179x
Yd = 5.365607937 + 0.267935998x
Grid Info
47 Internal Nodes along X-direction with uniform grid spacing of 0.05 mm
** Internal Nodes along Y-direction with a spacing of 0.05 mm at the exit plane
(5.5328/60) = 0.092213333 mm spacing along the throat
*/
// Total no.of x[i] nodes = 49 (i = 0 to 48)
// Total no.of y[i] nodes = 5978 (i = 0 to 5977)
// Total no.of cy[i] nodes = 5928 (i = 0 to 5927)
// Each y[i] node is the center of a cell
#include <fstream.h>
#include <conio.h>
class nozzle
{
public:
void Grid();
void SaveGrid();
void Initialize();
void Solve();
double
nxab[6000],nyab[6000],nxbc[6000],nybc[6000],nxcd[6000],nycd[6000],nxda[6000],nyda[6000];
double Q1,Q2,Q3,Q4,error,error1,error2,error3,error4;
double criterion;
double R,gamma,Cp,Po,Pa,To,Ta;
double uab,vab,ubc,vbc,ucd,vcd,uda,vda;
};
void nozzle:: Grid()
{
int node,i,j;
double cslope,dslope;
node = 0;
// GRID GENERATION FOR CONTROL VOLUME SURFACES
// Along X-direction
cx[0]= 0;
for (i = 1; i < 49; i++) // 47 internal nodes
{
cx[i] = cx[i-1] + 0.005;
//cout << i << "\t" << x[i] << "\n";
}
// Along Y-direction
// Wall contour Grid
cslope = (0.55 - 0.57)/0.065;
dslope = (0.6 - 0.55)/(0.24-0.065);
for(i = 0; i < 49; i++)
{
if(cx[i] <= 0.066)
cywall[i] = 0.57 + cx[i]*cslope;
// INITIALIZATION
void nozzle:: Initialize()
{
int i;
Pa = 101325;
Ta = 300;
R = 287.5;
gamma = 1.4;
for(i = 0; i < 5760; i++) // 120x48 cell centers
{
p[i] = Pa;
t[i] = Ta;
u[i] = 0;
v[i] = 0;
rho[i] = Pa / (R*Ta);
q1[i] = rho[i];
q2[i] = 0; //rho[i]*u[i];
q3[i] = 0; //rho[i]*v[i];
Et[i] = p[i]/( rho[i]*(gamma - 1) ); // + 0.5*( pow(u[i],2) + pow(v[i],2) );
q4[i] = rho[i] * Et[i];
}
for(i = 0; i < 5760; i++) // 120x48 cell centers
{
deltaxab[i] = 0.00005;
deltaxbc[i] = 0;
deltaxcd[i] = -0.00005;
deltaxda[i] = 0;
if(i<120)
deltayab[i] = cy[121+i] - cy[i];
else
deltayab[i] = cy[122+i] - cy[i];
deltaybc[i] = spacing[(i/120)+1];
if(i<120)
deltaycd[i] = -cy[122+i] + cy[i+1];
else
deltaycd[i] = -cy[123+i] + cy[i+2];
deltayda[i] = -spacing[i/120];
deltasab[i] = sqrt( (deltaxab[i]*deltaxab[i]) + (deltayab[i]*deltayab[i]) );
deltasbc[i] = spacing[(i/120)+1]; //sqrt( pow(deltaxbc[i],2) + pow(deltaybc[i],2) );
}
Vncd = ( ucd * deltaycd[i] - vcd * deltaxcd[i] ) / deltascd[i];
Mncd = Vncd / c[i];
if(i < 120)
{
uda = u[i];
vda = v[i];
}
else
{
uda = (u[i] + u[i-120]) * 0.5;
vda = (v[i] + v[i-120]) * 0.5;
}
Vnda = (uda * deltayda[i] - vda * deltaxda[i] ) / deltasda[i];
Mnda = Vnda / c[i];
nxab[i] = deltayab[i] / deltasab[i];
nyab[i] = - deltaxab[i] / deltasab[i];
nxbc[i] = 1; //deltaybc[i] / deltasbc[i];
nybc[i] = 0; //- deltaxbc[i] / deltasbc[i];
nxcd[i] = deltaycd[i] / deltascd[i];
nycd[i] = - deltaxcd[i] / deltascd[i];
nxda[i] = 1; //deltayda[i] / deltasda[i];
nyda[i] = 0; //- deltaxda[i] / deltasda[i];
// 1/gamma = 0.7142857
// 1/(2*(gamma^2 - 1)) = 0.520833333
qab = 0.5 * ( (u[i]*u[i]) + (v[i]*v[i]) - (Vnab*Vnab) );
qbc = 0.5 * ( (u[i]*u[i]) + (v[i]*v[i]) - (Vnbc*Vnbc) );
qcd = 0.5 * ( (u[i]*u[i]) + (v[i]*v[i]) - (Vncd*Vncd) );
qda = 0.5 * ( (u[i]*u[i]) + (v[i]*v[i]) - (Vnda*Vnda) );
if(i%120 == 0)
{
e1ab[i] = 0; e2ab[i] = 0; e3ab[i] = 0; e4ab[i] = 0;
f1ab[i] = 0; f2ab[i] = 0; f3ab[i] = 0; f4ab[i] = 0;
}
else
{
e1ab[i] = 0.25*rho[i]*c[i]*(Mnab + 1)*(Mnab + 1);
e2ab[i] = e1ab[i] * (u[i] + 0.7142857*nxab[i]*(2*c[i] - Vnab));
e3ab[i] = e1ab[i] * (v[i] + 0.7142857*nyab[i]*(2*c[i] - Vnab));
e4ab[i] = e1ab[i] * (qab + 0.520833333*(0.4*Vnab + 2*c[i])*(0.4*Vnab + 2*c[i]) );
f1ab[i] = - 0.25*rho[i]*c[i]*(Mnab - 1)*(Mnab - 1);
f2ab[i] = f1ab[i] * (u[i] + 0.7142857*nxab[i]*(- 2*c[i] - Vnab));
f3ab[i] = f1ab[i] * (v[i] + 0.7142857*nyab[i]*(- 2*c[i] - Vnab));
f4ab[i] = f1ab[i] * ( qab + 0.520833333*(0.4*Vnab - 2*c[i])*(0.4*Vnab - 2*c[i]) );
}
if(i%120 == 119)
{
e1cd[i] = 0; e2cd[i] = 0; e3cd[i] = 0; e4cd[i] = 0;
f1cd[i] = 0; f2cd[i] = 0; f3cd[i] = 0; f4cd[i] = 0;
}
else
{
e1cd[i] = 0.25*rho[i]*c[i]*(Mncd + 1)*(Mncd + 1);
e2cd[i] = e1cd[i] * (u[i] + 0.7142857*nxcd[i]*(2*c[i] - Vncd));
e3cd[i] = e1cd[i] * (v[i] + 0.7142857*nycd[i]*(2*c[i] - Vncd));
e4cd[i] = e1cd[i] * ( qcd + 0.520833333*(0.4*Vncd + 2*c[i])*(0.4*Vncd + 2*c[i]) );
f1cd[i] = - 0.25*rho[i]*c[i]*(Mncd - 1)*(Mncd - 1);
f2cd[i] = f1cd[i] * (u[i] + 0.7142857*nxcd[i]*(- 2*c[i] - Vncd));
f3cd[i] = f1cd[i] * (v[i] + 0.7142857*nycd[i]*(- 2*c[i] - Vncd));
f4cd[i] = f1cd[i] * ( qcd + 0.520833333*(0.4*Vncd - 2*c[i])*(0.4*Vncd - 2*c[i]) );
}
E1da[i] = e1da[i];
// 1/gamma = 0.7142857
// 1/(2*(gamma^2 - 1)) = 0.520833333
// BOUNDARY CONDITION FOR SUBSONIC INLET - INTERIOR POINTS
for(i = 1;i < 119;i++)
{
u[i] = u[i+120];
v[i] = v[i+120];
t[i] = To - (0.5*u[i]*u[i])/cp;
c[i] = sqrt(gamma*R*t[i]);
p[i] = Po*pow(t[i]/To,3.5);
rho[i] = p[i]/(R*t[i]);
q1[i] = rho[i];
q2[i] = rho[i]*u[i];
q3[i] = rho[i]*v[i];
Et[i] = p[i]/(rho[i]*(gamma-1)) + 0.5*u[i]*u[i];
q4[i] = rho[i]*Et[i];
uab = (u[i] + u[i-1]) * 0.5;
vab = (v[i] + v[i-1]) * 0.5;
Vnab = ( uab * deltayab[i] - vab * deltaxab[i] ) / deltasab[i];
Mnab = Vnab / c[i];
ubc = (u[i] + u[i+120]) * 0.5;
vbc = (v[i] + v[i+120]) * 0.5;
Vnbc = ubc; //( (ubc * deltaybc[i] - vbc * deltaxbc[i] ) / deltasbc[i];
Mnbc = Vnbc / c[i];
ucd = (u[i] + u[i+1]) * 0.5;
vcd = (v[i] + v[i+1]) * 0.5;
>= 1)
E1bc[i] = e1bc[i];
if(Mncd <= -1)
E1cd[i] = f1cd[i];
if(Mncd > -1 && Mncd < 1)
E1cd[i] = e1cd[i] + f1cd[i];
if(Mncd >= 1)
E1cd[i] = e1cd[i];
if(Mnda <= -1)
E1da[i] = f1da[i];
if(Mnda > -1 && Mnda < 1)
E1da[i] = e1da[i] + f1da[i];
if(Mnda >= 1)
E1da[i] = e1da[i];
// 1/gamma = 0.7142857
// 1/(2*(gamma^2 - 1)) = 0.520833333
}
// INLET WALL POINT (i = 119)
i = 119;
u[i] = u[i+120];
v[i] = v[i+120];
t[i] = To - (0.5*u[i]*u[i])/cp;
c[i] = sqrt(gamma*R*t[i]);
p[i] = Po*pow(t[i]/To,3.5);
rho[i] = p[i]/(R*t[i]);
q1[i] = rho[i];
q2[i] = rho[i]*u[i];
q3[i] = rho[i]*v[i];
Et[i] = p[i]/(rho[i]*(gamma-1)) + 0.5*u[i]*u[i];
q4[i] = rho[i]*Et[i];
uab = (u[i] + u[i-1]) * 0.5;
vab = (v[i] + v[i-1]) * 0.5;
Vnab = ( uab * deltayab[i] - vab * deltaxab[i] ) / deltasab[i];
Mnab = Vnab / c[i];
ubc = (u[i] + u[i+120]) * 0.5;
vbc = (v[i] + v[i+120]) * 0.5;
Vnbc = (ubc * deltaybc[i] - vbc * deltaxbc[i] ) / deltasbc[i];
Mnbc = Vnbc / c[i];
//ucd = (u[i] + u[i+1]) * 0.5;
//vcd = (v[i] + v[i+1]) * 0.5;
Vncd = 0; //( ucd * deltaycd[i] - vcd * deltaxcd[i] ) / deltascd[i];
Mncd = 0; //Vncd / c[i];
uda = u[i]; //(u[i] + u[i]) * 0.5;
vda = u[i]; //(v[i] + v[i]) * 0.5;
Vnda = (uda * deltayda[i] - vda * deltaxda[i] ) / deltasda[i];
Mnda = Vnda / c[i];
qab = 0.5 * ( (u[i]*u[i]) + (v[i]*v[i]) - (Vnab*Vnab) );
qbc = 0.5 * ( (u[i]*u[i]) + (v[i]*v[i]) - (Vnbc*Vnbc) );
qcd = 0.5 * ( (u[i]*u[i]) + (v[i]*v[i]) - (Vncd*Vncd) );
qda = 0.5 * ( (u[i]*u[i]) + (v[i]*v[i]) - (Vnda*Vnda) );
e1ab[i] = 0.25*rho[i]*c[i]*(Mnab + 1)*(Mnab + 1);
e2ab[i] = e1ab[i] * (u[i] + 0.7142857*nxab[i]*(2*c[i] - Vnab));
e3ab[i] = e1ab[i] * (v[i] + 0.7142857*nyab[i]*(2*c[i] - Vnab));
q3[i] = rho[i]*v[i];
Et[i] = p[i]/(rho[i]*(gamma-1)) + 0.5*u[i]*u[i];
q4[i] = rho[i]*Et[i];
uab = (u[i] + u[i-1]) * 0.5;
vab = (v[i] + v[i-1]) * 0.5;
Vnab = ( uab * deltayab[i] - vab * deltaxab[i] ) / deltasab[i];
Mnab = Vnab / c[i];
ubc = (u[i] + u[i+120]) * 0.5;
vbc = (v[i] + v[i+120]) * 0.5;
Vnbc = ubc; //( (ubc * deltaybc[i] - vbc * deltaxbc[i] ) / deltasbc[i];
Mnbc = Vnbc / c[i];
ucd = (u[i] + u[i+1]) * 0.5;
vcd = (v[i] + v[i+1]) * 0.5;
Vncd = ( ucd * deltaycd[i] - vcd * deltaxcd[i] ) / deltascd[i];
Mncd = Vncd / c[i];
uda = u[i]; //(u[i] + u[i]) * 0.5;
vda = u[i]; //(v[i] + v[i]) * 0.5;
Vnda = uda; //( (uda * deltayda[i] - vda * deltaxda[i] ) / deltasda[i];
Mnda = Vnda / c[i];
// 1/gamma = 0.7142857
// 1/(2*(gamma^2 - 1)) = 0.520833333
qab = 0.5 * ( (u[i]*u[i]) + (v[i]*v[i]) - (Vnab*Vnab) );
qbc = 0.5 * ( (u[i]*u[i]) + (v[i]*v[i]) - (Vnbc*Vnbc) );
qcd = 0.5 * ( (u[i]*u[i]) + (v[i]*v[i]) - (Vncd*Vncd) );
qda = 0.5 * ( (u[i]*u[i]) + (v[i]*v[i]) - (Vnda*Vnda) );
e1ab[i] = 0.25*rho[i]*c[i]*(Mnab + 1)*(Mnab + 1);
e2ab[i] = e1ab[i] * (u[i] + 0.7142857*nxab[i]*(2*c[i] - Vnab));
<= -1)
E1bc[i] = f1bc[i];
if(Mnbc > -1 && Mnbc < 1)
E1bc[i] = e1bc[i] + f1bc[i];
if(Mnbc >= 1)
E1bc[i] = e1bc[i];
if(Mncd <= -1)
E1cd[i] = f1cd[i];
if(Mncd > -1 && Mncd < 1)
E1cd[i] = e1cd[i] + f1cd[i];
if(Mncd >= 1)
E1cd[i] = e1cd[i];
if(Mnda <= -1)
E1da[i] = f1da[i];
{
E1ab_avg = (e1ab[i] + e1ab[i-1]) * 0.5 + (f1ab[i] + f1ab[i+1]) * 0.5;
E2ab_avg = (e2ab[i] + e2ab[i-1]) * 0.5 + (f2ab[i] + f2ab[i+1]) * 0.5;
E3ab_avg = (e3ab[i] + e3ab[i-1]) * 0.5 + (f3ab[i] + f3ab[i+1]) * 0.5;
E4ab_avg = (e4ab[i] + e4ab[i-1]) * 0.5 + (f4ab[i] + f4ab[i+1]) * 0.5;
//E4ab[i] = e4ab[i] + f4ab[i];
}
if(Mnab >= 1)
{
E1ab[i] = e1ab[i];
E1ab_avg = (E1ab[i] + E1ab[i-1]) * 0.5;
E2ab[i] = e2ab[i];
E2ab_avg = (E2ab[i] + E2ab[i-1]) * 0.5;
E3ab[i] = e3ab[i];
E3ab_avg = (E3ab[i] + E3ab[i-1]) * 0.5;
E4ab[i] = e4ab[i];
E4ab_avg = (E4ab[i] + E4ab[i-1]) * 0.5;
}
if(Mnbc <= -1)
{
E1bc[i] = f1bc[i];
E1bc_avg = (E1bc[i] + E1bc[i+1]) * 0.5;
E2bc[i] = f2bc[i];
E2bc_avg = (E2bc[i] + E2bc[i+1]) * 0.5;
E3bc[i] = f3bc[i];
E3bc_avg = (E3bc[i] + E3bc[i+1]) * 0.5;
E4bc[i] = f4bc[i];
E4bc_avg = (E4bc[i] + E4bc[i+1]) * 0.5;
}
E3ab_avg = 0;
E4ab_avg = 0;
}
/* else
{
E1ab_avg = (E1ab[i] + E1ab[i-1]) * 0.5;
E2ab_avg = (E2ab[i] + E2ab[i-1]) * 0.5;
E3ab_avg = (E3ab[i] + E3ab[i-1]) * 0.5;
E4ab_avg = (E4ab[i] + E4ab[i-1]) * 0.5;
}*/
if(i%119==0) // FOR WALL BOUNDARY
{
E1cd_avg = 0;
E2cd_avg = 0;
E3cd_avg = 0;
E4cd_avg = 0;
}
/* else
{
E1cd_avg = (E1cd[i] + E1ab[i+1]) * 0.5;
E2cd_avg = (E2cd[i] + E2ab[i+1]) * 0.5;
E3cd_avg = (E3cd[i] + E3ab[i+1]) * 0.5;
E4cd_avg = (E4cd[i] + E4ab[i+1]) * 0.5;
}
E1bc_avg = (E1bc[i] + E1bc[i+120]) * 0.5;
E2bc_avg = (E2bc[i] + E2bc[i+120]) * 0.5;
E3bc_avg = (E3bc[i] + E3bc[i+120]) * 0.5;
E4bc_avg = (E4bc[i] + E4bc[i+120]) * 0.5;
savefile << iterations << "\t" << error << "\t" << u[8000] << "\n";
}
savefile.close();
void main()
{
nozzle newnozzle;
fflush(stdout);
newnozzle.Grid();
// newnozzle.SaveGrid();
newnozzle.Initialize();
newnozzle.Solve();
}