double cont();
//double tau(double,double,double,double);
double funE(int,int,int,int);
double funF(int,int,int,int);
double funG(int,int,int,int);
double implicitpart(double);
void keps();
void explicitpart(int);
int i,j,pos,n,iter;
double
rho,ptime,visc,eij,cu,r,dt,dx,dr,sigmak,sigmaeps,c1eps,c2eps,ut,rad,r1,dt1,beta,dmax;
double du[pos0],du1[pos0],u[i0][j0][t0],v[i0][j0][t0],w[i0][j0][t0];
double k[i0][j0][t0],eps[i0][j0][t0],pr[i0][j0][t0],visct[i0][j0]
[t0],d[i0][j0],ubar[i0][j0][t0],vbar[i0][j0][t0];
int main()
{
double dmax1,dtest,x=0,flag;
ofstream file("file.xls");
ofstream dma("dmax.xls");
//constants for the flow.....considering dx=dr for grids
rad=0.2;
r=0.5;
dx=dr=0.02;
dt=dr*r;
beta=1/(2*dt*(1/(dx*dx)+1/(dr*dr)));
dt1=dt;
rho=1;
visc=2e-5;
//constants for k-eps model
cu=0.09;
c1eps=1.44;
c2eps=1.92;
sigmak=1.0;
sigmaeps=1.0;
//Initializing the varialbles for t=0
n=0;
for(i=0;i<i0;i++)
{
for(j=0;j<j0;j++)
{
u[i][j][n]=1.0;
v[i][j][n]=0.0;
pr[i][j][n]=101325.0;
k[i][j][n]=(1/10.0)*(u[i][j][0]*u[i][j][0]);
eps[i][j][n]=pow(k[i][j][0],1.5)/dr;
visct[i][j][n] = cu*(pow(k[i][j][n],1.5))/eps[i][j][n]
+visc;
}
}
dtest=0.005*u[0][0][0]/dx;
//loop for calculation
for(n=0;n<t0;n++)
{
flag=0;
file<<n+1<<endl;
dmax1=1.0;
iter=0;
while((fabs(dmax1))>= dtest)
{
keps();//k-eps equation
if(flag==0)
{
explicitpart(n);//momemtum equation without pressure term and
du/dt
flag=1;
}
dmax1=implicitpart(beta);//eveluating pressure term implicitly
and then calculating u using that pressure
iter++;
if(iter>100)//just to avoid excess computation and break loop in
that case
break;
}
for(i=0;i<i0;i++)
{
for(j=0;j<j0;j++)
{
file<<i<<"\t"<<j<<"\t"<<u[i][j][n]<<"\t"<<k[i][j]
[n]<<"\t"<<eps[i][j][n]<<"\t"<<dmax1<<endl;//display of values
}
}
}
//display
file.close();
dma.close();
return 0;
}
double funE(int i1, int j1, int pos1, int t1)
{
if(pos1==0)
return (u[i1][j1][t1]*u[i1][j1][t1]-(visct[i1][j1][t1]/dr)*(u[i1+1][j1]
[t1]-u[i1][j1][t1]));//evaluating dE/dx for x dir mom eq
if(pos1==1)
return (u[i1][j1][t1]*v[i1][j1][t1]-(visct[i1][j1][t1]/dr)*(v[i1+1][j1]
[t1]-v[i1][j1][t1])); //evaluating dE/dx for r dir mom eq
if(pos1==2)
return (rho*k[i1][j1][t1]*u[i1][j1][t1]-(visct[i1][j1][t1]/
sigmak)*(k[i1+1][j1][t1]-k[i1][j1][t1])/dr);//evaluating dE/dx for k
eq
if(pos1==3)
return (rho*eps[i1][j1][t1]*u[i1][j1][t1]-(visct[i1][j1][t1]/
sigmaeps)*(eps[i1+1][j1][t1]-eps[i1][j1][t1])/dr);//evaluating dE/dx
for eps eq
}
double funF(int i2,int j2, int pos2, int t2)
{
if(pos2==0)
return (u[i2][j2][t2]*v[i2][j2][t2]-(visct[i2][j2][t2]/dr*(u[i2][j2+1]
[t2]-u[i2][j2][t2]))-(visct[i2][j2][t2]*u[i2][j2][t2]/r1));//
evaluating dF/dr for x dir mom eq
if(pos2==1)
return (v[i2][j2][t2]*v[i2][j2][t2]-(visct[i2][j2][t2]/dr*(v[i2][j2+1]
[t2]-v[i2][j2][t2]))-(visct[i2][j2][t2]*v[i2][j2][t2]/r1));//
evaluating dF/dr for r dir mom eq
if(pos2==2)
return (rho*k[i2][j2][t2]*u[i2][j2][t2]-(visct[i2][j2][t2]/
sigmak)*(k[i2][j2+1][t2]-k[i2][j2][t2])/dr);//evaluating dF/dr for k
eq
if(pos2==3)
return (rho*eps[i2][j2][t2]*u[i2][j2][t2]-(visct[i2][j2][t2]/
sigmaeps)*(eps[i2][j2+1][t2]-eps[i2][j2][t2])/dr);//evaluating dF/dr
for eps eq
}
double funG(int i3,int j3, int pos3, int t3)
{
double mixed;
mixed=(1/(dr*dr))*((u[i3][j3+1][t3]-u[i3][j3][t3]+v[i3+1][j3][t3]-v[i3]
[j3][t3])*(u[i3][j3+1][t3]-u[i3][j3][t3]+v[i3+1][j3][t3]-v[i3][j3]
[t3])/4);
eij=(1/(dr*dr))*((2*(u[i3+1][j3][t3]-u[i3][j3][t3])*(u[i3+1][j3][t3]-
u[i3][j3][t3]))+(2*(v[i3][j3+1][t3]-v[i3][j3][t3])*(v[i3][j3+1][t3]-
v[i3][j3][t3])))+ mixed;
//evaluating the productiong term in k-eps eq
if(pos3==0)
return (visc*u[i3][j3][t3]/(r1*r1));//evaluating G for x dir mom eq
if(pos3==1)
return (visc*v[i3][j3][t3]/(r1*r1));//evaluating G for r dir mom eq
if(pos3==2)
return (2*visct[i3][j3][t3]*eij*eij-rho*eps[i3][j3][t3]);//evaluating
G for k eq
if(pos3==3)
return (c1eps*eps[i3][j3][t3]*2*visct[i3][j3][t3]*eij*eij-
c2eps*rho*eps[i3][j3][t3]*eps[i3][j3][t3]/k[i3][j3][t3]);//evaluating
G for eps eq
}
double implicitpart(double beta)
{int a,b;
for(i=1;i<i0-1;i++)
{
r1=dr*2;
for(j=1;j<j0-1;j++)
{
if(iter>0)
{
u[i][j][n]=u[i][j][n+1];
v[i][j][n]=v[i][j][n+1];
u[i-1][j][n]=u[i-1][j][n+1];
v[i][j-1][n]=v[i][j-1][n+1];
}
d[i][j]=((u[i][j][n]-u[i-1][j][n])/dr+(v[i][j][n]-v[i][j-1][n])/
dr+(v[i][j][n]/r1));//continuity equation
if ((i<1)&& ((fabs(d[i][j]))>dmax))
dmax = d[i][j];//max value of continuity eq to compare for
iteration
//if(n>0&&j==8) {cout<<i<<" "<<j<<" "<<n<<" "<<u[i][j][n]<<"
"<<u[i-1][j][n]<<" "<<v[i][j][n]<<" "<<" "<<v[i][j-1][n]<<" "<<d[i]
[j]<<endl;getch();}
r1=r1+dr;
}
}
for(i=1;i<i0-1;i++)
{
for(j=1;j<j0-1;j++)
{
pr[i][j][n]=pr[i][j][n]-beta*d[i][j];//pressure computation
// if((i==1)&&(j==8)&&(n>0)){cout<<iter<<" "<<i<<" "<<j<<"
"<<n<<" "<<pr[i][j][n]<<" "<<beta<<" "<<d[i][j]<<endl;getch();}
}
}
for(i=0;i<i0;i++)
{
r1=dr;
for(j=0;j<j0;j++)
{
if((i>0)&&(j>0))
{
u[i][j][n+1] = ubar[i][j][n]+(dt/dx)*(pr[i][j][n]-pr[i-1][j]
[n]);//velocity computations
v[i][j][n+1] = vbar[i][j][n]+(dt/dr)*(pr[i][j][n]-pr[i][j-1]
[n]);
}
//boundaries for vel compoents
if((i==2)&&(j!=j0-1))
{//inlet boundary conditions
u[0][j][n+1] = fabs(sin(PI*0.1*n));
v[0][j][n+1] = 2*u[1][j][n+1]-u[2][j][n+1];
pr[0][j][n+1] = 2*pr[1][j][n+1]-pr[2][j][n+1];
}
if(j==1)
{//axial boundary case
u[i][j-1][n+1]=u[i][j][n+1];
v[i][j-1][n+1]=v[i][j][n+1];
}
if((i>i0-3)&&(j!=j0-1))
{//outlet boundary conditions
u[i][j][n+1]=2*u[i-2][j][n+1]-u[i-3][j][n+1];
v[i][j][n+1]=2*v[i-2][j][n+1]-v[i-3][j][n+1];
}
if((j==j0-1)&&(i>0)&&(i<i0))
{//wall boundary conditions
u[i][j][n+1]=0.0;
v[i][j][n+1]=0.0;
visct[i][j][n+1] = 0.0;
ut=sqrt(visct[i][j][n+1]/rho*(u[i][j0-2][n+1]-u[i][j0-1][n
+1])/dr);
k[i][j0-1][n+1]=0.0;
eps[i][j0-1][n+1]=0.0;
}
r1=r1+dr;
}
}
return dmax;//for comparsion
}
void explicitpart(int n)
{
for(i=1;i<i0-1;i++)
{
r1=dr;
for(j=0;j<j0-1;j++)
{
du[0] = u[i][j][n];
du[1] = v[i][j][n];
ubar[i][j][n] = du[0] - (r*(funE(i+1,j,0,n) - funE(i,j,0,n))) -
(r*(funF(i,j+1,0,n) - funF(i,j,0,n))) + (dt*funG(i,j,0,n));//explicit
part of
// if(j==8&&n>0){cout<<i<<" "<<j<<" "<<n<<" "<<u[i][j][n+1]<<"
"<<ubar[i][j][n]<<" "<<(dt*funG(i,j,2,n))<<endl;getch();}
vbar[i][j][n] = du[1] - (r*(funE(i+1,j,1,n) - funE(i,j,1,n))) -
(r*(funF(i,j+1,1,n) - funF(i,j,1,n))) + (dt*funG(i,j,1,n));//vel
compoennts at n+1
r1=r1+dr;
}
}
}
void keps()
{
for(i=0;i<i0;i++)
{
r1=dr;
for(j=0;j<j0;j++)
{
du[2] = k[i][j][n]*rho;
du[3] = eps[i][j][n]*rho;
du1[2] = du[2] - (r*(funE(i+1,j,2,n) - funE(i,j,2,n))) -
(r*(funF(i,j+1,2,n) - funF(i,j,2,n))) + (dt*funG(i,j,2,n));//
evaluation of k at n+1
du1[3] = du[3] - (r*(funE(i+1,j,3,n) - funE(i,j,3,n))) -
(r*(funF(i,j+1,3,n) - funF(i,j,3,n))) + (dt*funG(i,j,3,n));//
evaluation of eps at n+1
k[i][j][n+1] = du1[2]/rho;
eps[i][j][n+1] = du1[3]/rho;
r1=r1+dr;
//boundaries for k eps eq
if((i==2)&&(j!=j0-1))
{//inlet boundary conditions
k[0][j][n+1] = 2*u[1][j][n+1]-u[1][j][n+1];
eps[i-2][j][n+1]=pow(k[0][j][n+1],1.5);
}
if(j==1)
{//inlet axial conditions
k[i][j-1][n+1]=k[i][j][n+1];
eps[i][j-1][n+1]=eps[i][j][n+1];
}
if((i>i0-3)&&(j!=j0-1))
{//outlet boundary conditions
k[i][j][n+1]=2*k[i-2][j][n+1]-k[i-3][j][n+1];
eps[i][j][n+1]=2*eps[i-2][j][n+1]-eps[i-3][j][n+1];
}
visct[i][j][n+1] = cu*(pow(k[i][j][n+1],1.5))/eps[i][j][n
+1]+visc;
}
}
}
i have tried to explain what each loop is doing incase you want any
clarification plz let me know if i can copy and paste it in your
compiler and could help me out in much more details it would be
grateful
Sachin Kanetkar