Beruflich Dokumente
Kultur Dokumente
This program computes the steady state flow parameters in a constant area
duct with a reservoir pressure = 1 atm and temperature = 300K. There are
12 grid points (ten internal nodes and two boundary nodes). FTCS scheme
is applied to the conservative form of 1-D Euler Equations for conservation
of mass, momentum and energy. Shift boundary conditions are applied at the
inlet and the exit. Artificial Viscosity is added to eliminate oscillations.
*/
#include <iostream.h>
#include <math.h>
class GridPoints
{
public:
void CreateNodes();
void Initialize();
void InputData();
void ConvCriterion();
void Solve();
void DisplayResult();
private:
int dimension, internal, iterations;
double *Area;
double *q1,*q2,*q3;
double *e1,*e2,*e3;
double *rho,*Et,*p,*u,*t;
double cfl,viscosity,a,M,U,inlet,throat,exit,L_conv,L_div,deltat,deltax,deltaA;
double ti,te;
double Q1,Q2,Q3,error,error1,error2,error3;
double gamma,cp,R;
int Pi,Ti;
double Pe,Te;
double criterion;
};
// Creates the Grid
void GridPoints::CreateNodes()
{
// cout << "\nEnter the number of internal nodes: ";
// cin >> internal;
internal = 15;
dimension = internal + 2;
q1 = new double[dimension];
q2 = new double[dimension];
q3 = new double[dimension];
e1 = new double[dimension];
e2 = new double[dimension];
e3 = new double[dimension];
rho = new double[dimension];
u = new double[dimension];
Et = new double[dimension];
p = new double[dimension];
t = new double[dimension];
Area = new double[dimension];
}
// Input Data
void GridPoints :: InputData()
{
int i;
1]*u[dimension-1];
q3[dimension-1] = relax*rho[dimension-1]*Et[dimension-1];
A = (Area[dimension-1]-Area[dimension-1])/(deltax*Area[dimension-1]);
e1[dimension-1] = q2[dimension-1]*A;
e2[dimension-1] = (q2[dimension-1]*q2[dimension-1]*A*A)/q1[dimension-1] + (gamma-1)*(
q3[dimension-1] - (q2[dimension-1]*q2[dimension-1]*0.5)/q1[dimension-1] );
e3[dimension-1] = (q2[dimension-1]/q1[dimension-1]) * A * ( q3[dimension-1] + (gamma-1)*(
q3[dimension-1] - (q2[dimension-1]*q2[dimension-1]*0.5)/q1[dimension-1] ) );
}while(iterations < 500);
}
void GridPoints::DisplayResult()
{
int i;
cout << "\n\tNumber of iterations = " << iterations << "\n\n";
cout << "
Node
Pressure
Velocity
for(i=0;i<dimension;i++)
cout << "\t" << i+1 << "\t" << p[i] << "\t\t" << u[i] << "\t\t" << rho[i] <<"\n\n";
}
void main()
{
char TryAgain;
do
{
GridPoints newgrid;
newgrid.CreateNodes();
newgrid.InputData();
newgrid.Initialize();
newgrid.Solve();
newgrid.DisplayResult();
cout << "Try another case?(y/n): ";
cin >> TryAgain;
}while(TryAgain!='n');