Professional Documents
Culture Documents
Prof. S.Saidi
Winter 2012
1. Definitions
The finite volume method starts, as always, with the discretization of the
flow domain and of the relevant transport equations. First we need to decide
where to store the velocities. It seems logical to define these at the same
locations as the scalar variables such as pressure, temperature etc. However,
if the velocities and pressures are both defined at the nodes of an ordinary
control volume a highly non-uniform pressure field can act like a uniform
field in the discretized momentum equations. This can be demonstrated with
the simple two-dimensional situation shown in Figure 1.1, where a uniform
grid is used for simplicity.
1|Page
If the pressures at 'e' and 'w' are obtained by linear interpolation the
pressure gradient term dp/dx in the u-momentum equation is given by
1.1.1
1.1.2
The pressure at the central node (P) does not appear in (1.1.1) and (1.1.2).
Substituting the appropriate values from the 'checker-board' pressure field in
Figure 1.1 into formulae (1.1.1-1.1.2) we find that all the discretized
gradients are zero at all the nodal points even though the pressure field
exhibits spatial oscillations in both directions.
As a result, this pressure field would give the same (zero) momentum
source in the discretized equations as a uniform pressure field. This behavior
is obviously nonphysical.
It is clear that, if the velocities are defined at the scalar grid nodes, the
influence of pressure is not properly represented in the discretized
momentum equations. A remedy for this problem is to use a staggered grid
for the velocity components (Harlow and Welch, 1965). The idea is to
evaluate scalar variables, such as pressure, density, temperature etc., at
ordinary nodal points but to calculate velocity components on staggered grids
centered on the cell faces. The arrangement for a two-dimensional flow
calculation is shown in Figure 1.2.
2|Page
The scalar variables, including pressure, are stored at the nodes marked ().
The velocities are defined at the (scalar) cell faces in between the nodes and
are indicated by arrows. Horizontal ( ) arrows indicate the locations for u-
velocities and vertical ( ) ones denote those for v-velocities. In addition to the
E,W, N,S notation Figure 1.2 also introduces a new system of notation based
on a numbering of grid lines and cell faces.
Fig. 1.2
We observe that the control volumes for u and v are different from the
scalar control volumes and different from each other. The scalar control
volumes are sometimes referred to as the pressure control volumes because,
as we shall see later, the discretized continuity equation is turned into a
pressure correction equation, which is evaluated on scalar control volumes.
3|Page
In the staggered grid arrangement, the pressure nodes coincide with the
cell faces of the u-control volume. The pressure gradient term dp/dx is given
by
1.1.3
Where , is the width of the u-control volume. Similarly dp/dy for the v-control
volume shown is given by
1.1.4
1.3.1
1.3.2
1.3.3
1.3.4
1.3.5
1.3.6
5|Page
1.3.7
1.3.8
1.3.9
1.3.10
1.3.11
1.3.12
1.3.13
6|Page
1.3.14
Note that the coefficients of equation (1.3.14) are the same as those in the
discretized pressure correction equation, with the difference that the source
term b is evaluated using the pseudo-velocities. Subsequently, the discretized
momentum equations:
are solved using the pressure field obtained above. This yields the velocity
components u* and v*. The velocity correction equations (1.3.2-1.3.5) are
used in the SIMPLER algorithm to obtain corrected velocities. Therefore, the
p'-equation
must also be solved to obtain the pressure corrections needed for the
velocity corrections. The full sequence of operations is described in Figure
1.3.1.
7|Page
Fig 1.3.1
8|Page
2. Assessment of the hybrid differencing scheme
The hybrid difference scheme exploits the favorable properties of the upwind and
central differencing schemes. It switches to the upwind differencing when the central
differencing produces inaccurate results at high Pe numbers. The scheme is fully
conservative and since the coefficients are always positive it is unconditionally bounded.
It satisfies the transportiveness requirement by using an upwind formulation for large
values of Peclet number. The scheme produces physically realistic solutions and is highly
stable when compared with the higher order schemes.
Hybrid differencing has been widely used in various computational fluid dynamics
(CFD) procedures and has proved to be very useful for predicting practical flows. The
disadvantage is that the accuracy in terms of Taylor series truncation error is only first-
order.
The hybrid differencing scheme can easily be extended to two- and three
dimensional problems by repeated application of the derivation in each new coordinate
direction. The discretized equation that covers all cases is given by:
and the coefficients of this equation for the hybrid differencing scheme are as
follows:
9|Page
In the above expressions the values of F and D are calculated with the following
formulae:
10 | P a g e
3. Results
11 | P a g e
o Residual-Iteration Plot
12 | P a g e
o Velocity and Pressure Contour
Pressure contour
U-component
13 | P a g e
V-component
14 | P a g e
U-component with Stream lines
o Pressure Grid
15 | P a g e
o Residual-Iteration Plots
16 | P a g e
o Velocity and Pressure Contour
Pressure Contour
17 | P a g e
U-Component
V-Component
18 | P a g e
o Velocity Profiles along the Symmetry Line at Different Levels
19 | P a g e
o Pressure Drop
20 | P a g e
4. Code
4.1. Main code
// Kabir.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "Mesh.h"
#include "discrete_func.h"
#include "assemblage.h"
#include "Solver.h"
#include "Results.h"
mesh u_mesh,v_mesh,p_mesh,mesh;
FILE *pp;
int Nx,Ny,i,j=0,k,n_repeat,n_p,n_v,n_run,project;
double *p_prine;
double *u_prine;
double *v_prine;
double
L,H,Rx,Ry,U0,u,v,rho,vis,eror_u,eror_v,eror_p,alfa_p,alfa_u,max_u_pr=1,max_v_pr=1,b_prin1=1,ma
x_b_pr,r_b,u_prin1=1,v_prin1=1;
if (pp==NULL)
{
printf("Cannot open file.\n");
exit(1);
}
project=2;
if (project==1)
{
L=1;
H=1;
Nx=30;
Ny=30;
n_run=0;
Rx=1;
Ry=1;
rho=23;
vis=1;
U0=1;
n_p=5;
n_v=20;
n_repeat=50000;
alfa_p=.3;
alfa_u=.6;
}
else if(project==2)
{
L=5;
H=1;
Nx=60;
Ny=15;
n_run=0;
Rx=1;
Ry=1;
rho=1;
vis=.01;
U0=1.8;
n_p=30;
n_v=6;
n_repeat=12000;
alfa_p=.5;
alfa_u=1;
p_mesh=p_mesh.mesh_generate(L,H,Rx,Ry,Nx,Ny);
21 | P a g e
v_mesh=v_mesh.v_mesh_generate(p_mesh,Nx,Ny);
u_mesh=v_mesh.u_mesh_generate(p_mesh,Nx,Ny);
p_prine=new double[p_mesh.n_cv];
v_prine=new double[p_mesh.n_cv];
u_prine=new double[p_mesh.n_cv];
fprintf(pp,"%s\t%s\t%s\t%s\t%s\t\n","variables=","\"repeat\"","\"continuity\"","\"u-
velocity\"","\"v-velocity\"");
//initial guess//
for (i=0;i<p_mesh.n_cv;i++)
{
u_mesh.cvs[i].phi=0;
v_mesh.cvs[i].phi=0;
p_mesh.cvs[i].phi=0;
u_mesh.cvs[i].temp=.1;
v_mesh.cvs[i].temp=.1;
p_mesh.cvs[i].temp=.1;
p_prine[i]=0;
if (project==1)
{
std::cout<<"Project=Cavity\n";
for (i=0;i<p_mesh.n_bface;i++)
{
if ((i>=2*Nx)&&(i<4*Nx))
{
u_mesh.bfaces[i].phi=U0;
p_mesh.bfaces[i].phi=0;
v_mesh.bfaces[i].phi=0;
}
else
{
u_mesh.bfaces[i].phi=0;
p_mesh.bfaces[i].phi=0;
v_mesh.bfaces[i].phi=0;
}
}
}
else if (project==2)
{
std::cout<<"Project=Channel\n";
for (i=0;i<p_mesh.n_bface;i++)
{
if ((i>4*Nx-1) && i<(4*Nx+2*Ny))
{
//std::cout<<i<<"\t"<<u_mesh.bfaces[i].x<<"\t"<<u_mesh.bfaces[i].x<<"\n";
u_mesh.bfaces[i].phi=U0;
p_mesh.bfaces[i].phi=0;
v_mesh.bfaces[i].phi=0;
}
else
{
u_mesh.bfaces[i].phi=0;
p_mesh.bfaces[i].phi=0;
v_mesh.bfaces[i].phi=0;
}
}
}
///end set_bc///
for(k=0;k<n_repeat;k++)
{
if (project==2)
{
for (i=4*Nx+2*Ny;i<4*Nx+4*Ny;i++)
{
22 | P a g e
u_mesh.bfaces[i].phi=u_mesh.cvs[u_mesh.bfaces[i].c1].phi;
}
}
//Loop for solving//
n_run=n_run+1;
for (i=0;i<p_mesh.n_cv;i++)
{
u_mesh.cvs[i].a=0;
u_mesh.cvs[i].ae=0;
u_mesh.cvs[i].aw=0;
u_mesh.cvs[i].as=0;
u_mesh.cvs[i].an=0;
u_mesh.cvs[i].b=0;
v_mesh.cvs[i].a=0;
v_mesh.cvs[i].ae=0;
v_mesh.cvs[i].aw=0;
v_mesh.cvs[i].as=0;
v_mesh.cvs[i].an=0;
v_mesh.cvs[i].b=0;
p_mesh.cvs[i].a=0;
p_mesh.cvs[i].ae=0;
p_mesh.cvs[i].aw=0;
p_mesh.cvs[i].as=0;
p_mesh.cvs[i].an=0;
p_mesh.cvs[i].b=0;
p_prine[i]=0;
}
Flux_calculate(p_mesh,u_mesh,v_mesh,rho,vis);
A_assemblage_momentom(p_mesh,u_mesh,v_mesh);
b_assemblage_momntom_velocity(p_mesh,u_mesh,v_mesh);
//std::cout<<"Solution Converged !";
for (i=0;i<p_mesh.n_cv;i++)
{
u_mesh.cvs[i].d=u_mesh.cvs[i].dy/u_mesh.cvs[i].a;
v_mesh.cvs[i].d=v_mesh.cvs[i].dx/v_mesh.cvs[i].a;
pseudo(u_mesh.cvs,2*Nx,u_mesh.n_cv,1);
pseudo(v_mesh.cvs,2*Nx,v_mesh.n_cv,1);
23 | P a g e
b_assemblage_momntom_pressure(p_mesh,u_mesh,v_mesh);
//std::cout<<"Solution Converged !";
for (i=0;i<p_mesh.n_cv;i++)
{
u_mesh.cvs[i].d=u_mesh.cvs[i].dy/u_mesh.cvs[i].a;
v_mesh.cvs[i].d=v_mesh.cvs[i].dx/v_mesh.cvs[i].a;
eror_u=cv_PDMA(u_mesh.cvs,p_mesh.n_cv,2*Nx,.4,n_v,1e-3);
eror_v=cv_PDMA(v_mesh.cvs,v_mesh.n_cv,2*Nx,.4,n_v,1e-3);
A_assemblage_continuity(p_mesh,u_mesh,v_mesh,rho);
b_assemblage_continuity(p_mesh,u_mesh,v_mesh,rho);
eror_p=PDMA(p_mesh.cvs,p_prine,v_mesh.n_cv,2*p_mesh.Nx,.3,n_p,1);
fprintf(pp,"%d\t%e\t%e\t%e\t\n",k,r_b,max_u_pr/u_prin1,max_v_pr/v_prin1);
for (i=2*Nx;i<p_mesh.n_cv;i++)
{
v_prine[i]=v_mesh.cvs[i].d*(p_prine[i-2*Nx]-p_prine[i]);
v_mesh.cvs[i].phi=v_mesh.cvs[i].phi+v_prine[i];
v_mesh.cvs[i].phi=alfa_u*v_mesh.cvs[i].phi+(1-
alfa_u)*v_mesh.cvs[i].temp;
v_mesh.cvs[i].temp=v_mesh.cvs[i].phi;
}
for (i=0;i<p_mesh.n_cv;i++)
{
if (i%(p_mesh.Nx*2)!=0)
{
u_prine[i]=u_mesh.cvs[i].d*(p_prine[i-1]-p_prine[i]);
u_mesh.cvs[i].phi=u_mesh.cvs[i].phi+u_prine[i];
u_mesh.cvs[i].phi=alfa_u*u_mesh.cvs[i].phi+(1-
alfa_u)*u_mesh.cvs[i].temp;
u_mesh.cvs[i].temp=u_mesh.cvs[i].phi;
}
}
for (i=0;i<p_mesh.n_cv;i++)
{
p_mesh.cvs[i].phi=p_mesh.cvs[i].phi+alfa_p*p_prine[i];
p_mesh.cvs[i].phi=(1-
alfa_p)*p_mesh.cvs[i].temp+alfa_p*p_mesh.cvs[i].phi;
p_mesh.cvs[i].temp=p_mesh.cvs[i].phi;
}
max_u_pr=max(u_prine,u_mesh.n_cv-u_mesh.Ny*2);
max_v_pr=max(v_prine,v_mesh.n_cv-v_mesh.Nx*2);
max_b_pr=max2(p_mesh.cvs,p_mesh.n_cv-1);
r_b=max_b_pr/b_prin1;
if (n_run==3)
{
b_prin1=max2(p_mesh.cvs,p_mesh.n_cv);
u_prin1=max(u_prine,u_mesh.n_cv-u_mesh.Ny*2);
v_prin1=max(v_prine,v_mesh.n_cv-v_mesh.Nx*2);
}
fprintf(pp,"%d\t%e\t%e\t%e\t\n",k,r_b,max_u_pr/u_prin1,max_v_pr/v_prin1);
if ((max_u_pr/U0<1e-3)&&(max_v_pr<1e-3)&&(r_b)<1e-5)
{
std::cout<<"Solution Converged !";
std::cin>>j;
break;
}
if(n_run%10==0)
{
std::cout<<n_run;
std::cout<<" Continuity Err = "<<r_b<<" Err_u =
"<<max_u_pr/u_prin1<<" \n ";
}
24 | P a g e
}
contour(u_mesh,v_mesh,p_mesh,"E:\contour.dat");
plot_u(u_mesh,"E:\plot_u.dat");
plot_v(v_mesh,"E:\plot_v.dat");
fclose(pp);
return 0;
}
4.2. Subroutines
4.2.1. Assemblage
int Ar(int i,int j,int n)
{
return (i*n+j);
};
// ifaces assemblage
for (i=0;i<u_mesh.n_iface;i++)
{
if(u_mesh.ifaces[i].sit=='v')
{
if ((u_mesh.ifaces[i].Pe>2)||(u_mesh.ifaces[i].Pe==0))
{
u_mesh.cvs[u_mesh.ifaces[i].c1].a=
u_mesh.cvs[u_mesh.ifaces[i].c1].a+
(u_mesh.ifaces[i].D+u_mesh.ifaces[i].F)*u_mesh.ifaces[i].A;
u_mesh.cvs[u_mesh.ifaces[i].c1].ae=
u_mesh.cvs[u_mesh.ifaces[i].c1].ae-
u_mesh.ifaces[i].D*u_mesh.ifaces[i].A;
u_mesh.cvs[u_mesh.ifaces[i].c2].aw=
u_mesh.cvs[u_mesh.ifaces[i].c2].aw-
(u_mesh.ifaces[i].D+u_mesh.ifaces[i].F)*u_mesh.ifaces[i].A;
u_mesh.cvs[u_mesh.ifaces[i].c2].a=
u_mesh.cvs[u_mesh.ifaces[i].c2].a+
(u_mesh.ifaces[i].D)*u_mesh.ifaces[i].A;
}
else if(u_mesh.ifaces[i].Pe<-2)
{
u_mesh.cvs[u_mesh.ifaces[i].c1].a=
u_mesh.cvs[u_mesh.ifaces[i].c1].a+
(u_mesh.ifaces[i].D)*u_mesh.ifaces[i].A;
u_mesh.cvs[u_mesh.ifaces[i].c1].ae=
u_mesh.cvs[u_mesh.ifaces[i].c1].ae+
(u_mesh.ifaces[i].F-u_mesh.ifaces[i].D)*u_mesh.ifaces[i].A;
u_mesh.cvs[u_mesh.ifaces[i].c2].aw=
u_mesh.cvs[u_mesh.ifaces[i].c2].aw-
u_mesh.ifaces[i].D*u_mesh.ifaces[i].A;
u_mesh.cvs[u_mesh.ifaces[i].c2].a=
u_mesh.cvs[u_mesh.ifaces[i].c2].a+
(u_mesh.ifaces[i].D-u_mesh.ifaces[i].F)*u_mesh.ifaces[i].A;
}
else
25 | P a g e
{
u_mesh.cvs[u_mesh.ifaces[i].c1].a=
u_mesh.cvs[u_mesh.ifaces[i].c1].a+
(u_mesh.ifaces[i].D+u_mesh.ifaces[i].F*(0.5+1/u_mesh.ifaces[i].Pe))*u_mesh.ifaces[i].A
;
u_mesh.cvs[u_mesh.ifaces[i].c1].ae=
u_mesh.cvs[u_mesh.ifaces[i].c1].ae+
(-u_mesh.ifaces[i].D+u_mesh.ifaces[i].F*(0.5-
1/u_mesh.ifaces[i].Pe))*u_mesh.ifaces[i].A;
u_mesh.cvs[u_mesh.ifaces[i].c2].aw=
u_mesh.cvs[u_mesh.ifaces[i].c2].aw-
(u_mesh.ifaces[i].D+u_mesh.ifaces[i].F*(0.5+1/u_mesh.ifaces[i].Pe))*u_mesh.ifaces[i].A
;
u_mesh.cvs[u_mesh.ifaces[i].c2].a=
u_mesh.cvs[u_mesh.ifaces[i].c2].a+
(u_mesh.ifaces[i].D-u_mesh.ifaces[i].F*(0.5-
1/u_mesh.ifaces[i].Pe))*u_mesh.ifaces[i].A;
}
}
else if (u_mesh.ifaces[i].sit=='h')
{
if((u_mesh.ifaces[i].Pe>2)||(u_mesh.ifaces[i].Pe==0))
{
u_mesh.cvs[u_mesh.ifaces[i].c1].a=
u_mesh.cvs[u_mesh.ifaces[i].c1].a+
(u_mesh.ifaces[i].D+u_mesh.ifaces[i].F)*u_mesh.ifaces[i].A;
u_mesh.cvs[u_mesh.ifaces[i].c1].an=
u_mesh.cvs[u_mesh.ifaces[i].c1].an-
u_mesh.ifaces[i].D*u_mesh.ifaces[i].A;
u_mesh.cvs[u_mesh.ifaces[i].c2].as=
u_mesh.cvs[u_mesh.ifaces[i].c2].as-
(u_mesh.ifaces[i].D+u_mesh.ifaces[i].F)*u_mesh.ifaces[i].A;
u_mesh.cvs[u_mesh.ifaces[i].c2].a=
u_mesh.cvs[u_mesh.ifaces[i].c2].a+
(u_mesh.ifaces[i].D)*u_mesh.ifaces[i].A;
}
else if(u_mesh.ifaces[i].Pe<-2)
{
u_mesh.cvs[u_mesh.ifaces[i].c1].a=
u_mesh.cvs[u_mesh.ifaces[i].c1].a+
(u_mesh.ifaces[i].D)*u_mesh.ifaces[i].A;
u_mesh.cvs[u_mesh.ifaces[i].c1].an=
u_mesh.cvs[u_mesh.ifaces[i].c1].an+
(u_mesh.ifaces[i].F-u_mesh.ifaces[i].D)*u_mesh.ifaces[i].A;
u_mesh.cvs[u_mesh.ifaces[i].c2].as=
u_mesh.cvs[u_mesh.ifaces[i].c2].as-
u_mesh.ifaces[i].D*u_mesh.ifaces[i].A;
u_mesh.cvs[u_mesh.ifaces[i].c2].a=
u_mesh.cvs[u_mesh.ifaces[i].c2].a+
(u_mesh.ifaces[i].D-u_mesh.ifaces[i].F)*u_mesh.ifaces[i].A;
}
else
{
u_mesh.cvs[u_mesh.ifaces[i].c1].a=
u_mesh.cvs[u_mesh.ifaces[i].c1].a+
(u_mesh.ifaces[i].D+u_mesh.ifaces[i].F*(0.5+1/u_mesh.ifaces[i].Pe))*u_mesh.ifaces[i].A
;
u_mesh.cvs[u_mesh.ifaces[i].c1].an=
u_mesh.cvs[u_mesh.ifaces[i].c1].an+
(-u_mesh.ifaces[i].D+u_mesh.ifaces[i].F*(0.5-
1/u_mesh.ifaces[i].Pe))*u_mesh.ifaces[i].A;
u_mesh.cvs[u_mesh.ifaces[i].c2].as=
u_mesh.cvs[u_mesh.ifaces[i].c2].as-
(u_mesh.ifaces[i].D+u_mesh.ifaces[i].F*(0.5+1/u_mesh.ifaces[i].Pe))*u_mesh.ifaces[i].A
;
u_mesh.cvs[u_mesh.ifaces[i].c2].a=
u_mesh.cvs[u_mesh.ifaces[i].c2].a+
(u_mesh.ifaces[i].D-u_mesh.ifaces[i].F*(0.5-
1/u_mesh.ifaces[i].Pe))*u_mesh.ifaces[i].A;
}
}
26 | P a g e
}
for (i=0;i<v_mesh.n_iface;i++)
{
if(v_mesh.ifaces[i].sit=='v')
{
if((v_mesh.ifaces[i].Pe>2)||(v_mesh.ifaces[i].Pe==0))
{
v_mesh.cvs[v_mesh.ifaces[i].c1].a=
v_mesh.cvs[v_mesh.ifaces[i].c1].a+
(v_mesh.ifaces[i].D+v_mesh.ifaces[i].F)*v_mesh.ifaces[i].A;
v_mesh.cvs[v_mesh.ifaces[i].c1].ae=
v_mesh.cvs[v_mesh.ifaces[i].c1].ae-
v_mesh.ifaces[i].D*v_mesh.ifaces[i].A;
v_mesh.cvs[v_mesh.ifaces[i].c2].aw=
v_mesh.cvs[v_mesh.ifaces[i].c2].aw-
(v_mesh.ifaces[i].D+v_mesh.ifaces[i].F)*v_mesh.ifaces[i].A;
v_mesh.cvs[v_mesh.ifaces[i].c2].a=
v_mesh.cvs[v_mesh.ifaces[i].c2].a+
(v_mesh.ifaces[i].D)*v_mesh.ifaces[i].A;
}
else if(v_mesh.ifaces[i].Pe<-2)
{
v_mesh.cvs[v_mesh.ifaces[i].c1].a=
v_mesh.cvs[v_mesh.ifaces[i].c1].a+
(v_mesh.ifaces[i].D)*v_mesh.ifaces[i].A;
v_mesh.cvs[v_mesh.ifaces[i].c1].ae=
v_mesh.cvs[v_mesh.ifaces[i].c1].ae+
(v_mesh.ifaces[i].F-v_mesh.ifaces[i].D)*v_mesh.ifaces[i].A;
v_mesh.cvs[v_mesh.ifaces[i].c2].aw=
v_mesh.cvs[v_mesh.ifaces[i].c2].aw-
v_mesh.ifaces[i].D*v_mesh.ifaces[i].A;
v_mesh.cvs[v_mesh.ifaces[i].c2].a=
v_mesh.cvs[v_mesh.ifaces[i].c2].a+
(v_mesh.ifaces[i].D-v_mesh.ifaces[i].F)*v_mesh.ifaces[i].A;
}
else
{
v_mesh.cvs[v_mesh.ifaces[i].c1].a=
v_mesh.cvs[v_mesh.ifaces[i].c1].a+
(v_mesh.ifaces[i].D+v_mesh.ifaces[i].F*(0.5+1/v_mesh.ifaces[i].Pe))*v_mesh.ifaces[i].A
;
v_mesh.cvs[v_mesh.ifaces[i].c1].ae=
v_mesh.cvs[v_mesh.ifaces[i].c1].ae+
(-v_mesh.ifaces[i].D+v_mesh.ifaces[i].F*(0.5-
1/v_mesh.ifaces[i].Pe))*v_mesh.ifaces[i].A;
v_mesh.cvs[v_mesh.ifaces[i].c2].aw=
v_mesh.cvs[v_mesh.ifaces[i].c2].aw-
(v_mesh.ifaces[i].D+v_mesh.ifaces[i].F*(0.5+1/v_mesh.ifaces[i].Pe))*v_mesh.ifaces[i].A
;
v_mesh.cvs[v_mesh.ifaces[i].c2].a=
v_mesh.cvs[v_mesh.ifaces[i].c2].a+
(v_mesh.ifaces[i].D-v_mesh.ifaces[i].F*(0.5-
1/v_mesh.ifaces[i].Pe))*v_mesh.ifaces[i].A;
}
}
else if (v_mesh.ifaces[i].sit=='h')
{
if((v_mesh.ifaces[i].Pe>2)||(v_mesh.ifaces[i].Pe==0))
{
v_mesh.cvs[v_mesh.ifaces[i].c1].a=
v_mesh.cvs[v_mesh.ifaces[i].c1].a+
(v_mesh.ifaces[i].D+v_mesh.ifaces[i].F)*v_mesh.ifaces[i].A;
v_mesh.cvs[v_mesh.ifaces[i].c1].an=
v_mesh.cvs[v_mesh.ifaces[i].c1].an-
v_mesh.ifaces[i].D*v_mesh.ifaces[i].A;
v_mesh.cvs[v_mesh.ifaces[i].c2].as=
v_mesh.cvs[v_mesh.ifaces[i].c2].as-
27 | P a g e
(v_mesh.ifaces[i].D+v_mesh.ifaces[i].F)*v_mesh.ifaces[i].A;
v_mesh.cvs[v_mesh.ifaces[i].c2].a=
v_mesh.cvs[v_mesh.ifaces[i].c2].a+
(v_mesh.ifaces[i].D)*v_mesh.ifaces[i].A;
}
else if(v_mesh.ifaces[i].Pe<-2)
{
v_mesh.cvs[v_mesh.ifaces[i].c1].a=
v_mesh.cvs[v_mesh.ifaces[i].c1].a+
(v_mesh.ifaces[i].D)*v_mesh.ifaces[i].A;
v_mesh.cvs[v_mesh.ifaces[i].c1].an=
v_mesh.cvs[v_mesh.ifaces[i].c1].an+
(v_mesh.ifaces[i].F-v_mesh.ifaces[i].D)*v_mesh.ifaces[i].A;
v_mesh.cvs[v_mesh.ifaces[i].c2].as=
v_mesh.cvs[v_mesh.ifaces[i].c2].as-
v_mesh.ifaces[i].D*v_mesh.ifaces[i].A;
v_mesh.cvs[v_mesh.ifaces[i].c2].a=
v_mesh.cvs[v_mesh.ifaces[i].c2].a+
(v_mesh.ifaces[i].D-v_mesh.ifaces[i].F)*v_mesh.ifaces[i].A;
}
else
{
v_mesh.cvs[v_mesh.ifaces[i].c1].a=
v_mesh.cvs[v_mesh.ifaces[i].c1].a+
(v_mesh.ifaces[i].D+v_mesh.ifaces[i].F*(0.5+1/v_mesh.ifaces[i].Pe))*v_mesh.ifaces[i].A
;
v_mesh.cvs[v_mesh.ifaces[i].c1].an=
v_mesh.cvs[v_mesh.ifaces[i].c1].an+
(-v_mesh.ifaces[i].D+v_mesh.ifaces[i].F*(0.5-
1/v_mesh.ifaces[i].Pe))*v_mesh.ifaces[i].A;
v_mesh.cvs[v_mesh.ifaces[i].c2].as=
v_mesh.cvs[v_mesh.ifaces[i].c2].as-
(v_mesh.ifaces[i].D+v_mesh.ifaces[i].F*(0.5+1/v_mesh.ifaces[i].Pe))*v_mesh.ifaces[i].A
;
v_mesh.cvs[v_mesh.ifaces[i].c2].a=
v_mesh.cvs[v_mesh.ifaces[i].c2].a+
(v_mesh.ifaces[i].D-v_mesh.ifaces[i].F*(0.5-
1/v_mesh.ifaces[i].Pe))*v_mesh.ifaces[i].A;
}
}
// bfaces assemblage
for (i=0;i<u_mesh.n_bface;i++)
{
u_mesh.cvs[u_mesh.bfaces[i].c1].a=
u_mesh.cvs[u_mesh.bfaces[i].c1].a+
u_mesh.bfaces[i].D*u_mesh.bfaces[i].A;
v_mesh.cvs[v_mesh.bfaces[i].c1].a=
v_mesh.cvs[v_mesh.bfaces[i].c1].a+
v_mesh.bfaces[i].D*v_mesh.bfaces[i].A;
28 | P a g e
void b_assemblage_momntom_velocity(mesh& p_mesh,mesh& u_mesh,mesh& v_mesh)
{
int i,j;
for (i=0;i<u_mesh.n_bface;i++)
{
u_mesh.cvs[u_mesh.bfaces[i].c1].b=u_mesh.cvs[u_mesh.bfaces[i].c1].b+
(u_mesh.bfaces[i].D)*u_mesh.bfaces[i].A*u_mesh.bfaces[i].phi;
u_mesh.cvs[u_mesh.bfaces[i].c1].b=u_mesh.cvs[u_mesh.bfaces[i].c1].b+
u_mesh.bfaces[i].F*u_mesh.bfaces[i].phi;
v_mesh.cvs[v_mesh.bfaces[i].c1].b=v_mesh.cvs[v_mesh.bfaces[i].c1].b+
v_mesh.bfaces[i].F*v_mesh.bfaces[i].phi;
}
}
void b_assemblage_momntom_pressure(mesh& p_mesh,mesh& u_mesh,mesh& v_mesh)
{
int i,j;
for(i=0;i<p_mesh.n_iface;i++)
{
if (p_mesh.ifaces[i].sit=='v')
u_mesh.cvs[u_mesh.ifaces[i].c2].b=u_mesh.cvs[u_mesh.ifaces[i].c2].b+u_mesh.ifaces[i].A
*(p_mesh.cvs[p_mesh.ifaces[i].c1].phi
-
p_mesh.cvs[p_mesh.ifaces[i].c2].phi);
else
v_mesh.cvs[v_mesh.ifaces[i].c2].b=v_mesh.cvs[v_mesh.ifaces[i].c2].b+v_mesh.ifaces[i].A
*(p_mesh.cvs[p_mesh.ifaces[i].c1].phi
-
p_mesh.cvs[p_mesh.ifaces[i].c2].phi);
}
void b_assemblage_continuity(mesh& p_mesh,mesh& u_mesh,mesh& v_mesh,double rho)
{
int i,j;
// in this lines d must change.
for (i=0;i<p_mesh.n_iface;i++)
{
if (p_mesh.ifaces[i].sit=='v')
{
p_mesh.cvs[p_mesh.ifaces[i].c1].b=p_mesh.cvs[p_mesh.ifaces[i].c1].b-
rho*p_mesh.ifaces[i].A*(u_mesh.cvs[u_mesh.ifaces[i].c2].phi-
(u_mesh.cvs[u_mesh.ifaces[i].c2].phi-
u_mesh.cvs[u_mesh.ifaces[i].c1].phi)
/u_mesh.ifaces[i].ds*p_mesh.ifaces[i].dxc);
p_mesh.cvs[p_mesh.ifaces[i].c2].b=p_mesh.cvs[p_mesh.ifaces[i].c2].b+
rho*p_mesh.ifaces[i].A*(u_mesh.cvs[u_mesh.ifaces[i].c2].phi-
(u_mesh.cvs[u_mesh.ifaces[i].c2].phi-
u_mesh.cvs[u_mesh.ifaces[i].c1].phi)
/u_mesh.ifaces[i].ds*p_mesh.ifaces[i].dxc);
}
else
{
p_mesh.cvs[p_mesh.ifaces[i].c1].b=p_mesh.cvs[p_mesh.ifaces[i].c1].b-
rho*p_mesh.ifaces[i].A*(v_mesh.cvs[v_mesh.ifaces[i].c2].phi-
(v_mesh.cvs[v_mesh.ifaces[i].c2].phi-
v_mesh.cvs[v_mesh.ifaces[i].c1].phi)
/v_mesh.ifaces[i].ds*p_mesh.ifaces[i].dxc);
p_mesh.cvs[p_mesh.ifaces[i].c2].b=p_mesh.cvs[p_mesh.ifaces[i].c2].b+
rho*p_mesh.ifaces[i].A*(v_mesh.cvs[v_mesh.ifaces[i].c2].phi-
(v_mesh.cvs[v_mesh.ifaces[i].c2].phi-
v_mesh.cvs[v_mesh.ifaces[i].c1].phi)
/v_mesh.ifaces[i].ds*p_mesh.ifaces[i].dxc);
29 | P a g e
}
}
for (i=0;i<u_mesh.n_bface;i++)
{
p_mesh.cvs[p_mesh.bfaces[i].c1].b=p_mesh.cvs[p_mesh.bfaces[i].c1].b+
p_mesh.bfaces[i].F;
}
p_mesh.cvs[p_mesh.ifaces[i].c1].ae=
p_mesh.cvs[p_mesh.ifaces[i].c1].ae-
rho*p_mesh.ifaces[i].A*(u_mesh.cvs[u_mesh.ifaces[i].c2].d-
(u_mesh.cvs[u_mesh.ifaces[i].c2].d-u_mesh.cvs[u_mesh.ifaces[i].c1].d)
/u_mesh.ifaces[i].ds*p_mesh.ifaces[i].dxc);
p_mesh.cvs[p_mesh.ifaces[i].c2].aw=
p_mesh.cvs[p_mesh.ifaces[i].c2].aw-
rho*p_mesh.ifaces[i].A*(u_mesh.cvs[u_mesh.ifaces[i].c2].d-
(u_mesh.cvs[u_mesh.ifaces[i].c2].d-u_mesh.cvs[u_mesh.ifaces[i].c1].d)
/u_mesh.ifaces[i].ds*p_mesh.ifaces[i].dxc);
p_mesh.cvs[p_mesh.ifaces[i].c2].a=
p_mesh.cvs[p_mesh.ifaces[i].c2].a+
rho*p_mesh.ifaces[i].A*(u_mesh.cvs[u_mesh.ifaces[i].c2].d-
(u_mesh.cvs[u_mesh.ifaces[i].c2].d-u_mesh.cvs[u_mesh.ifaces[i].c1].d)
/u_mesh.ifaces[i].ds*p_mesh.ifaces[i].dxc);
}
else
{
p_mesh.cvs[p_mesh.ifaces[i].c1].a=
p_mesh.cvs[p_mesh.ifaces[i].c1].a+
rho*p_mesh.ifaces[i].A*(v_mesh.cvs[v_mesh.ifaces[i].c2].d-
(v_mesh.cvs[v_mesh.ifaces[i].c2].d-v_mesh.cvs[v_mesh.ifaces[i].c1].d)
/v_mesh.ifaces[i].ds*p_mesh.ifaces[i].dxc);
p_mesh.cvs[p_mesh.ifaces[i].c1].an=
p_mesh.cvs[p_mesh.ifaces[i].c1].an-
rho*p_mesh.ifaces[i].A*(v_mesh.cvs[v_mesh.ifaces[i].c2].d-
(v_mesh.cvs[v_mesh.ifaces[i].c2].d-v_mesh.cvs[v_mesh.ifaces[i].c1].d)
/v_mesh.ifaces[i].ds*p_mesh.ifaces[i].dxc);
p_mesh.cvs[p_mesh.ifaces[i].c2].as=
p_mesh.cvs[p_mesh.ifaces[i].c2].as-
rho*p_mesh.ifaces[i].A*(v_mesh.cvs[v_mesh.ifaces[i].c2].d-
(v_mesh.cvs[v_mesh.ifaces[i].c2].d-v_mesh.cvs[v_mesh.ifaces[i].c1].d)
/v_mesh.ifaces[i].ds*p_mesh.ifaces[i].dxc);
p_mesh.cvs[p_mesh.ifaces[i].c2].a=
p_mesh.cvs[p_mesh.ifaces[i].c2].a+
rho*p_mesh.ifaces[i].A*(v_mesh.cvs[v_mesh.ifaces[i].c2].d-
(v_mesh.cvs[v_mesh.ifaces[i].c2].d-v_mesh.cvs[v_mesh.ifaces[i].c1].d)
/v_mesh.ifaces[i].ds*p_mesh.ifaces[i].dxc);
}
}
30 | P a g e
4.2.2. Mesh Generator
#pragma once
#include "math.h"
#include <stdlib.h>
#include <stdio.h>
#include <cstdlib>
#include <iostream>
class Mesh
{
Mesh(void);
~Mesh(void);
};
class iface
{
public:
int c1;
int c2;
double d1;
double d2;
double A;
double dxc;
double ds;
char sit;
double x;
double y;
double dA;
double dB;
double F;
double D;
double Pe;
double p;
double d;
};
class bface
{
public:
int c1;
double d1;
double A;
double ds;
char sit;
double x;
double y;
double phi;
double u;
double v;
double dA;
double dB;
double F;
double D;
};
class Cv
{
public:
double dx;
double dy;
double P_A;
double v;
double x;
double y;
double phi;
31 | P a g e
double dphidx;
double dphidy;
double d;
double ae;
double aw;
double as;
double an;
double a;
double b;
double stream;
double temp;
};
class mesh
{
public:
int n_iface;
int n_bface;
int n_cv;
int Nx;
int Ny;
iface *ifaces;
bface *bfaces;
Cv *cvs;
Cv *cv_p;
Cv *cv_v;
Cv *cv_u;
/// Function
// p_mesh_generation
public:mesh mesh_generate(double L,double H,double Rx,double Ry,int Nx,int Ny)
{
int i,j=0,k=0;
double dx1,s1=0,dy1;
for (i=0;i<Nx;i++)
s1=pow(Rx,i)+s1;
dx1=L/(2*s1);
s1=0;
for (i=0;i<Ny;i++)
s1=pow(Ry,i)+s1;
dy1=H/(2*s1);
mesh obj_mesh;
obj_mesh.n_iface=((2*Nx-1)*2*Ny+2*Nx*(2*Ny-1));
obj_mesh.n_bface=4*(Nx+Ny);
obj_mesh.n_cv=Nx*Ny*4;
obj_mesh.Nx=Nx;
obj_mesh.Ny=Ny;
obj_mesh.ifaces=new iface[obj_mesh.n_iface];
obj_mesh.bfaces=new bface[obj_mesh.n_bface];
obj_mesh.cvs=new Cv[obj_mesh.n_cv];
j=0;
k=0;
for(i=0;i<(2*Nx-1)*2*Ny;i++)
{
obj_mesh.ifaces[i].c1=i+k;
obj_mesh.ifaces[i].c2=i+k+1;
obj_mesh.ifaces[i].sit='v';
if (j==0)
{
obj_mesh.ifaces[i].x=-L/2+dx1*pow(Rx,Nx-1);
j=j+1;
if (k==0)
obj_mesh.ifaces[i].y=-H/2+dy1*pow(Ry,Ny-1)/2.0;
else if (k<=Ny-1)
obj_mesh.ifaces[i].y=obj_mesh.ifaces[i-1].y+dy1*(pow(Ry,Ny-
k)+pow(Ry,Ny-k-1))/2.0;
else if (k==Ny)
obj_mesh.ifaces[i].y=-obj_mesh.ifaces[i-2*(Nx-1)].y;
else
obj_mesh.ifaces[i].y=obj_mesh.ifaces[i-1].y+dy1*(pow(Ry,k-Ny-
1)+pow(Ry,k-Ny))/2.0;
}
else if (j<=Nx-1)
{
32 | P a g e
obj_mesh.ifaces[i].x=obj_mesh.ifaces[i-1].x+dx1*pow(Rx,Nx-1-j);
obj_mesh.ifaces[i].y=obj_mesh.ifaces[i-1].y;
j=j+1;
}
else if (j<2*Nx-2)
{
obj_mesh.ifaces[i].x=obj_mesh.ifaces[i-1].x+dx1*pow(Rx,j-Nx);
obj_mesh.ifaces[i].y=obj_mesh.ifaces[i-1].y;
j=j+1;
}
else if (j==2*Nx-2)
{
obj_mesh.ifaces[i].x=obj_mesh.ifaces[i-1].x+dx1*pow(Rx,j-Nx);
obj_mesh.ifaces[i].y=obj_mesh.ifaces[i-1].y;
j=0;
k=k+1;
}
for(i=(2*Nx-1)*2*Ny;i<(2*Nx-1)*2*Ny+2*Nx*(2*Ny-1);i++)
{
obj_mesh.ifaces[i].c1=p;
obj_mesh.ifaces[i].c2=p+2*Nx;
obj_mesh.ifaces[i].sit='h';
p=p+1;
if (j==0)
{
obj_mesh.ifaces[i].x=-L/2+dx1*pow(Rx,Nx-1)/2.0;
j=j+1;
if (k==0)
obj_mesh.ifaces[i].y=-H/2+dy1*pow(Ry,Ny-1);
else if (k<=Ny-1)
obj_mesh.ifaces[i].y=obj_mesh.ifaces[i-1].y+dy1*pow(Ry,Ny-1-k);
else
obj_mesh.ifaces[i].y=obj_mesh.ifaces[i-1].y+dy1*pow(Ry,k-Ny);
}
else if (j<=Nx-1)
{
obj_mesh.ifaces[i].x=obj_mesh.ifaces[i-1].x+dx1*(pow(Rx,Nx-1-
j)+pow(Rx,Nx-j))/2.0;
obj_mesh.ifaces[i].y=obj_mesh.ifaces[i-1].y;
j=j+1;
}
else if (j==Nx)
{
obj_mesh.ifaces[i].x=-obj_mesh.ifaces[i-1].x;
obj_mesh.ifaces[i].y=obj_mesh.ifaces[i-1].y;
j=j+1;
}
else if (j<2*Nx-1)
{
obj_mesh.ifaces[i].x=obj_mesh.ifaces[i-1].x+dx1*(pow(Rx,j-Nx-
1)+pow(Rx,j-Nx))/2.0;
obj_mesh.ifaces[i].y=obj_mesh.ifaces[i-1].y;
j=j+1;
}
else if (j==2*Nx-1)
{
obj_mesh.ifaces[i].x=obj_mesh.ifaces[i-1].x+dx1*(pow(Rx,j-Nx-
1)+pow(Rx,j-Nx))/2.0;
obj_mesh.ifaces[i].y=obj_mesh.ifaces[i-1].y;
j=0;
k=k+1;
}
33 | P a g e
}
/////////////////////////////bfaces
j=0;
k=0;
for(i=0;i<2*Nx;i++)
{
obj_mesh.bfaces[i].c1=i;
obj_mesh.bfaces[i+2*Nx].c1=(2*Ny-1)*2*Nx+i;
obj_mesh.bfaces[i].y=-H/2;
obj_mesh.bfaces[i+2*Nx].y=H/2;
obj_mesh.bfaces[i].sit='h';
obj_mesh.bfaces[i+2*Nx].sit='h';
if (j==0)
{
obj_mesh.bfaces[i].x=-L/2+dx1*pow(Rx,Nx-1)/2.0;
obj_mesh.bfaces[i+2*Nx].x=-L/2+dx1*pow(Rx,Nx-1)/2.0;
j=j+1;
}
else if (j<=Nx-1)
{
obj_mesh.bfaces[i].x=obj_mesh.bfaces[i-1].x+dx1*(pow(Rx,Nx-1-
j)+pow(Rx,Nx-j))/2.0;
obj_mesh.bfaces[i+2*Nx].x=obj_mesh.bfaces[i-1].x+dx1*(pow(Rx,Nx-1-
j)+pow(Rx,Nx-j))/2.0;
j=j+1;
}
else if(j==Nx)
{
obj_mesh.bfaces[i].x=-obj_mesh.bfaces[i-1].x;
obj_mesh.bfaces[i+2*Nx].x=-obj_mesh.bfaces[i-1].x;
j=j+1;
}
else if (j<=2*Nx-1)
{
obj_mesh.bfaces[i].x=obj_mesh.bfaces[i-1].x+dx1*(pow(Rx,j-Nx-
1)+pow(Rx,j-Nx))/2.0;
obj_mesh.bfaces[i+2*Nx].x=obj_mesh.bfaces[i-1].x+dx1*(pow(Rx,j-Nx-
1)+pow(Rx,j-Nx))/2.0;
j=j+1;
}
j=0;
k=0;
for(i=4*Nx;i<4*Nx+2*Ny;i++)
{
obj_mesh.bfaces[i].c1=2*j*Nx;
obj_mesh.bfaces[i+2*Ny].c1=2*(j+1)*Nx-1;
obj_mesh.bfaces[i].x=-L/2;
obj_mesh.bfaces[i+2*Ny].x=L/2;
obj_mesh.bfaces[i].sit='v';
obj_mesh.bfaces[i+2*Ny].sit='v';
if (j==0)
{
obj_mesh.bfaces[i].y=-H/2+dy1*pow(Ry,Ny-1)/2.0;
obj_mesh.bfaces[i+2*Ny].y=-H/2+dy1*pow(Ry,Ny-1)/2.0;
j=j+1;
}
else if (j<=Ny-1)
{
obj_mesh.bfaces[i].y=obj_mesh.bfaces[i-1].y+dy1*(pow(Ry,Ny-1-
j)+pow(Ry,Ny-j))/2.0;
obj_mesh.bfaces[i+2*Ny].y=obj_mesh.bfaces[i-1].y+dy1*(pow(Ry,Ny-1-
j)+pow(Ry,Ny-j))/2.0;
j=j+1;
}
else if (j==Ny)
{
obj_mesh.bfaces[i].y=-obj_mesh.bfaces[i-1].y;
obj_mesh.bfaces[i+2*Ny].y=-obj_mesh.bfaces[i-1].y;
j=j+1;
34 | P a g e
}
else if (j<=2*Ny-1)
{
obj_mesh.bfaces[i].y=obj_mesh.bfaces[i-1].y+dy1*(pow(Ry,j-Ny-
1)+pow(Ry,j-Ny))/2.0;
obj_mesh.bfaces[i+2*Ny].y=obj_mesh.bfaces[i-1].y+dy1*(pow(Ry,j-Ny-
1)+pow(Ry,j-Ny))/2.0;
j=j+1;
}
/////////////////CVS////////////////
j=0;
k=0;
i=0;
for(i=0;i<obj_mesh.n_cv;i++)
{
if (j==0)
{
obj_mesh.cvs[i].x=-L/2+dx1*pow(Rx,Nx-1)/2.0;
j=j+1;
if (k==0)
obj_mesh.cvs[i].y=-H/2+dy1*pow(Ry,Ny-1)/2.0;
else if (k<=Ny-1)
obj_mesh.cvs[i].y=obj_mesh.cvs[i-1].y+dy1*(pow(Ry,Ny-1-
k)+pow(Ry,Ny-k))/2.0;
else if(k==Ny)
obj_mesh.cvs[i].y=-obj_mesh.cvs[i-1].y;
else
obj_mesh.cvs[i].y=obj_mesh.cvs[i-1].y+dy1*(pow(Ry,k-Ny-
1)+pow(Ry,k-Ny))/2.0;
}
else if (j<=Nx-1)
{
obj_mesh.cvs[i].x=obj_mesh.cvs[i-1].x+dx1*(pow(Rx,Nx-1-j)+pow(Rx,Nx-
j))/2.0;
obj_mesh.cvs[i].y=obj_mesh.cvs[i-1].y;
j=j+1;
}
else if (j==Nx)
{
obj_mesh.cvs[i].x=-obj_mesh.cvs[i-1].x;
obj_mesh.cvs[i].y=obj_mesh.cvs[i-1].y;
j=j+1;
else if (j<2*Nx-1)
{
obj_mesh.cvs[i].x=obj_mesh.cvs[i-1].x+dx1*(pow(Rx,j-Nx-1)+pow(Rx,j-
Nx))/2.0;
obj_mesh.cvs[i].y=obj_mesh.cvs[i-1].y;
j=j+1;
}
else if (j==2*Nx-1)
{
obj_mesh.cvs[i].x=obj_mesh.cvs[i-1].x+dx1*(pow(Rx,j-Nx-1)+pow(Rx,j-
Nx))/2.0;
obj_mesh.cvs[i].y=obj_mesh.cvs[i-1].y;
j=0;
k=k+1;
}
k=1;
p=0;
for (i=0;i<obj_mesh.n_cv;i++)
{
p=p+1;
if (p==2*Nx)
35 | P a g e
{
obj_mesh.cvs[i].dx=dx1*pow(Rx,p-Nx-1);
p=0;
}
else if (p>Nx)
obj_mesh.cvs[i].dx=dx1*pow(Rx,p-Nx-1);
else if (p<=Nx)
obj_mesh.cvs[i].dx=dx1*pow(Rx,Nx-p);
if (k<=Ny)
obj_mesh.cvs[i].dy=dy1*pow(Ry,Ny-k);
else
obj_mesh.cvs[i].dy=dy1*pow(Ry,k-Ny-1);
if (p==0)
k=k+1;
}
for (i=0;i<obj_mesh.n_cv;i++)
{
obj_mesh.cvs[i].v=obj_mesh.cvs[i].dx*obj_mesh.cvs[i].dy;
obj_mesh.cvs[i].P_A=2*(obj_mesh.cvs[i].dx+obj_mesh.cvs[i].dy);
}
for (i=0;i<(2*Nx-1)*2*Ny;i++)
{
obj_mesh.ifaces[i].A=obj_mesh.cvs[obj_mesh.ifaces[i].c1].dy;
obj_mesh.ifaces[i].d1=obj_mesh.ifaces[i].x-
obj_mesh.cvs[obj_mesh.ifaces[i].c1].x;
obj_mesh.ifaces[i].d2=obj_mesh.ifaces[i].x-
obj_mesh.cvs[obj_mesh.ifaces[i].c2].x;
obj_mesh.ifaces[i].dxc=(obj_mesh.cvs[obj_mesh.ifaces[i].c1].x+obj_mesh.cvs[obj_mesh.if
aces[i].c2].x)/2.0-obj_mesh.ifaces[i].x;
obj_mesh.ifaces[i].ds=abs(obj_mesh.ifaces[i].d1)+abs(obj_mesh.ifaces[i].d2);
}
for (i=(2*Nx-1)*2*Ny;i<(2*Nx-1)*2*Ny+2*Nx*(2*Ny-1);i++)
{
obj_mesh.ifaces[i].A=obj_mesh.cvs[obj_mesh.ifaces[i].c1].dx;
obj_mesh.ifaces[i].d1=obj_mesh.ifaces[i].y-
obj_mesh.cvs[obj_mesh.ifaces[i].c1].y;
obj_mesh.ifaces[i].d2=obj_mesh.ifaces[i].y-
obj_mesh.cvs[obj_mesh.ifaces[i].c2].y;
obj_mesh.ifaces[i].dxc=(obj_mesh.cvs[obj_mesh.ifaces[i].c1].y+obj_mesh.cvs[obj_mesh.if
aces[i].c2].y)/2.0-obj_mesh.ifaces[i].y;
obj_mesh.ifaces[i].ds=abs(obj_mesh.ifaces[i].d1)+abs(obj_mesh.ifaces[i].d2);
}
for(i=0;i<4*Nx;i++)
{
obj_mesh.bfaces[i].A=obj_mesh.cvs[obj_mesh.bfaces[i].c1].dx;
obj_mesh.bfaces[i].d1=obj_mesh.bfaces[i].y-
obj_mesh.cvs[obj_mesh.bfaces[i].c1].y;
obj_mesh.bfaces[i].ds=abs(obj_mesh.bfaces[i].d1);
}
for(i=4*Nx;i<4*Nx+4*Ny;i++)
{
obj_mesh.bfaces[i].A=obj_mesh.cvs[obj_mesh.bfaces[i].c1].dy;
obj_mesh.bfaces[i].d1=obj_mesh.bfaces[i].x-
obj_mesh.cvs[obj_mesh.bfaces[i].c1].x;
obj_mesh.bfaces[i].ds=abs(obj_mesh.bfaces[i].d1);
}
return obj_mesh;
};
36 | P a g e
//Start U_mesh//
}
else if (k<=2*Nx)
{
u_mesh.cvs[i].dx=p_mesh.cvs[i].dx-(p_mesh.cvs[i].dx-
p_mesh.cvs[i-1].dx)/2.0;
u_mesh.cvs[i].x=p_mesh.cvs[i].x-u_mesh.cvs[i].dx/2.0;
if (k==2*Nx)
k=0;
}
u_mesh.cvs[i].dy=p_mesh.cvs[i].dy;
u_mesh.cvs[i].y=p_mesh.cvs[i].y;
u_mesh.cvs[i].v=u_mesh.cvs[i].dx*u_mesh.cvs[i].dy;
u_mesh.cvs[i].P_A=2*(u_mesh.cvs[i].dx+u_mesh.cvs[i].dy);
}
for (i=0;i<p_mesh.n_iface;i++)
{
u_mesh.ifaces[i].c1=p_mesh.ifaces[i].c1;
u_mesh.ifaces[i].c2=p_mesh.ifaces[i].c2;
u_mesh.ifaces[i].y=p_mesh.ifaces[i].y;
u_mesh.ifaces[i].sit=p_mesh.ifaces[i].sit;
if (i<(2*Nx-1)*2*Ny)
{
u_mesh.ifaces[i].x=p_mesh.ifaces[i].x-
p_mesh.ifaces[i].d1;
u_mesh.ifaces[i].A=p_mesh.ifaces[i].A;
u_mesh.ifaces[i].d1=u_mesh.ifaces[i].x-
u_mesh.cvs[u_mesh.ifaces[i].c1].x;
u_mesh.ifaces[i].d2=u_mesh.ifaces[i].x-
u_mesh.cvs[u_mesh.ifaces[i].c2].x;
u_mesh.ifaces[i].ds=abs(u_mesh.ifaces[i].d1)+abs(u_mesh.ifaces[i].d2);
u_mesh.ifaces[i].dxc=(u_mesh.cvs[u_mesh.ifaces[i].c1].x+u_mesh.cvs[u_mesh.ifaces[i].c2
].x)/2.0-u_mesh.ifaces[i].x;
}
else
{
u_mesh.ifaces[i].x=u_mesh.cvs[u_mesh.ifaces[i].c1].x;
u_mesh.ifaces[i].A=u_mesh.cvs[u_mesh.ifaces[i].c1].dx;
u_mesh.ifaces[i].d1=p_mesh.ifaces[i].d1;
u_mesh.ifaces[i].d2=p_mesh.ifaces[i].d2;
u_mesh.ifaces[i].ds=p_mesh.ifaces[i].ds;
u_mesh.ifaces[i].dxc=p_mesh.ifaces[i].dxc;
}
}
for (j=0;j<p_mesh.n_bface;j++)
{
u_mesh.bfaces[j].c1=p_mesh.bfaces[j].c1;
u_mesh.bfaces[j].sit=p_mesh.bfaces[j].sit ;
u_mesh.bfaces[j].y=p_mesh.bfaces[j].y;
37 | P a g e
if (u_mesh.bfaces[j].sit=='v')
{
u_mesh.bfaces[j].A=p_mesh.bfaces[j].A;
u_mesh.bfaces[j].x=p_mesh.bfaces[j].x-
p_mesh.cvs[p_mesh.bfaces[j].c1].dx/2.0;
u_mesh.bfaces[j].d1=u_mesh.bfaces[j].x-
u_mesh.cvs[u_mesh.bfaces[j].c1].x;
}
else
{
u_mesh.bfaces[j].A=u_mesh.cvs[u_mesh.bfaces[j].c1].dx;
u_mesh.bfaces[j].d1=p_mesh.bfaces[j].d1;
u_mesh.bfaces[j].x=u_mesh.cvs[u_mesh.bfaces[j].c1].x;
}
u_mesh.bfaces[j].ds=abs(u_mesh.bfaces[j].d1);
}
return u_mesh;
//Start v_mesh//
}
else if (i<=2*Ny*2*Nx)
{
v_mesh.cvs[i].dy=p_mesh.cvs[i].dy-(p_mesh.cvs[i].dy-
p_mesh.cvs[i-2*Nx].dy)/2.0;
v_mesh.cvs[i].y=p_mesh.cvs[i].y-v_mesh.cvs[i].dy/2.0;
}
v_mesh.cvs[i].dx=p_mesh.cvs[i].dx;
v_mesh.cvs[i].x=p_mesh.cvs[i].x;
v_mesh.cvs[i].v=v_mesh.cvs[i].dx*v_mesh.cvs[i].dy;
v_mesh.cvs[i].P_A=2*(v_mesh.cvs[i].dx+v_mesh.cvs[i].dy);
}
for (i=0;i<p_mesh.n_iface;i++)
{
v_mesh.ifaces[i].c1=p_mesh.ifaces[i].c1;
v_mesh.ifaces[i].c2=p_mesh.ifaces[i].c2;
v_mesh.ifaces[i].x=p_mesh.ifaces[i].x;
v_mesh.ifaces[i].sit=p_mesh.ifaces[i].sit;
if (i>=(2*Nx-1)*2*Ny)
{
v_mesh.ifaces[i].y=p_mesh.ifaces[i].y-
p_mesh.ifaces[i].d1;
v_mesh.ifaces[i].A=p_mesh.ifaces[i].A;
v_mesh.ifaces[i].d1=v_mesh.ifaces[i].y-
v_mesh.cvs[v_mesh.ifaces[i].c1].y;
v_mesh.ifaces[i].d2=v_mesh.ifaces[i].y-
v_mesh.cvs[v_mesh.ifaces[i].c2].y;
v_mesh.ifaces[i].ds=abs(v_mesh.ifaces[i].d1)+abs(v_mesh.ifaces[i].d2);
38 | P a g e
v_mesh.ifaces[i].dxc=(v_mesh.cvs[v_mesh.ifaces[i].c1].y+v_mesh.cvs[v_mesh.ifaces[i].c2
].y)/2.0-v_mesh.ifaces[i].y;
}
else
{
v_mesh.ifaces[i].y=v_mesh.cvs[v_mesh.ifaces[i].c1].y;
v_mesh.ifaces[i].A=v_mesh.cvs[v_mesh.ifaces[i].c1].dy;
v_mesh.ifaces[i].d1=p_mesh.ifaces[i].d1;
v_mesh.ifaces[i].d2=p_mesh.ifaces[i].d2;
v_mesh.ifaces[i].ds=p_mesh.ifaces[i].ds;
v_mesh.ifaces[i].dxc=p_mesh.ifaces[i].dxc;
}
for (j=0;j<p_mesh.n_bface;j++)
{
v_mesh.bfaces[j].x=p_mesh.bfaces[j].x;
v_mesh.bfaces[j].sit=p_mesh.bfaces[j].sit;
v_mesh.bfaces[j].c1=p_mesh.bfaces[j].c1;
if (v_mesh.bfaces[j].sit=='v')
{
v_mesh.bfaces[j].y=v_mesh.cvs[v_mesh.bfaces[j].c1].y;
v_mesh.bfaces[j].A=v_mesh.cvs[p_mesh.bfaces[j].c1].dy;
v_mesh.bfaces[j].d1=p_mesh.bfaces[j].d1;
}
else
{
v_mesh.bfaces[j].y=p_mesh.bfaces[j].y-
p_mesh.cvs[p_mesh.bfaces[j].c1].dy/2.0;
v_mesh.bfaces[j].d1=v_mesh.bfaces[j].y-
v_mesh.cvs[v_mesh.bfaces[j].c1].y;
v_mesh.bfaces[j].A=v_mesh.cvs[p_mesh.bfaces[j].c1].dx;
}
v_mesh.bfaces[j].ds=abs(v_mesh.bfaces[j].d1);
}
}
return v_mesh;
// drawing mesh//
public:void draw_mesh(mesh obj_mesh,char s[])
{
int i,j,k,t,f=0,n;
FILE *fp;
fp=fopen(s,"wb");
fprintf(fp,"%s%s\n","title=","\"Cavity_mesh\"");
fprintf(fp,"%s%s\t%s\n","variables=","\"x\"","\"y\"");
fprintf(fp,"%s%d\t%s%d\n","zone
i=",2*obj_mesh.Nx+1,"j=",2*obj_mesh.Ny+1);
k=4*obj_mesh.Nx;
t=4*obj_mesh.Nx+2*Ny;
for (i=0;i<2*obj_mesh.Ny;i++)
{
fprintf(fp,"%f\t%f\n",obj_mesh.bfaces[k].x,obj_mesh.bfaces[k].y-
obj_mesh.bfaces[k].A/2.0);
for (j=0;j<2*obj_mesh.Nx-1;j++)
39 | P a g e
{
fprintf(fp,"%f\t%f\n",obj_mesh.ifaces[f].x,obj_mesh.ifaces[f].y-
obj_mesh.ifaces[f].A/2.0);
f=f+1;
}
fprintf(fp,"%f\t%f\n",obj_mesh.bfaces[t].x,obj_mesh.bfaces[t].y-
obj_mesh.bfaces[t].A/2.0);
t=t+1;
k=k+1;
}
n=f-2*Nx+1;
fprintf(fp,"%f\t%f\n",obj_mesh.bfaces[k-1].x,obj_mesh.bfaces[k-
1].y+obj_mesh.bfaces[k-1].A/2.0);
for (j=0;j<2*obj_mesh.Nx-1;j++)
{
fprintf(fp,"%f\t%f\n",obj_mesh.ifaces[n].x,obj_mesh.ifaces[n].y+obj_mesh.ifaces[n].A/2
.0);
n=n+1;
}
fprintf(fp,"%f\t%f\n",obj_mesh.bfaces[t-1].x,obj_mesh.bfaces[t-
1].y+obj_mesh.bfaces[t-1].A/2.0);
fclose(fp);
};
class matrix
{
public:
double *row;
};
fprintf(fp,"%s%s\t%s\t%s\t%s\t%s\t%s\n","variables=","\"x\"","\"y\"","\"u\"","\"v\"","
\"p\"","\"Residual\"");
fprintf(fp,"%s%d\t%s%d\n","zone i=",2*p.Nx+2,"j=",2*p.Ny+2);
int i,j,k;
j=4*p.Nx;
k=4*p.Nx+2*p.Ny;
fprintf(fp,"%e\t%e\t%e\t%e\t%e\t\%e\t\n",p.bfaces[0].x-
p.bfaces[0].A/2.0,p.bfaces[0].y,u.bfaces[0].phi,v.bfaces[0].phi,
p.cvs[p.bfaces[0].c1].phi,0);
for(i=0;i<p.Nx*2;i++)
fprintf(fp,"%e\t%e\t%e\t%e\t%e\t\%e\t\n",p.bfaces[i].x,p.bfaces[i].y,u.bfaces[i].phi,v
.bfaces[i].phi,p.cvs[p.bfaces[i].c1].phi,0);
fprintf(fp,"%e\t%e\t%e\t%e\t%e\t\%e\t\n",p.bfaces[2*p.Nx-1].x+p.bfaces[2*p.Nx-
1].A/2.0,
40 | P a g e
p.bfaces[2*p.Nx-1].y,u.bfaces[2*p.Nx-1].phi,v.bfaces[2*p.Nx-
1].phi,p.cvs[p.bfaces[2*p.Nx-1].c1].phi,0);
for (i=0;i<p.n_cv;i++)
{
if (i%(p.Nx*2)==0)
{
fprintf(fp,"%e\t%e\t%e\t%e\t%e\t\%e\t\n",p.bfaces[j].x,p.bfaces[j].y
,u.bfaces[j].phi,v.bfaces[j].phi,p.cvs[i].phi,0);
j=j+1;
}
fprintf(fp,"%e\t%e\t%e\t%e\t%e\t\%e\t\n",p.cvs[i].x,p.cvs[i].y
,u.cvs[i].phi,v.cvs[i].phi,p.cvs[i].phi,abs(p.cvs[i].b));
if (i%(p.Nx*2)==p.Nx*2-1)
{
fprintf(fp,"%e\t%e\t%e\t%e\t%e\t\%e\t\n",p.bfaces[k].x,p.bfaces[k].y
,u.bfaces[k].phi,v.bfaces[k].phi,p.cvs[i].phi,0);
k=k+1;
}
}
fprintf(fp,"%e\t%e\t%e\t%e\t%e\t\%e\t\n",p.bfaces[2*p.Nx].x-
p.bfaces[p.Nx*2].A/2,p.bfaces[p.Nx*2].y,
u.bfaces[p.Nx*2].phi,v.bfaces[p.Nx*2].phi,p.cvs[p.bfaces[p.Nx*2].c1].phi,0.0);
for(i=2*p.Nx ;i<p.Nx*4;i++)
fprintf(fp,"%e\t%e\t%e\t%e\t\t%e\t\%e\t\n",p.bfaces[i].x,p.bfaces[i].y,u.bfaces[i].phi
,v.bfaces[i].phi,p.cvs[p.bfaces[i].c1].phi,0.0);
fprintf(fp,"%e\t%e\t%e\t%e\t%e\t\%e\t\n",p.bfaces[4*p.Nx-1].x+p.bfaces[p.Nx*4-
1].A/2,p.bfaces[p.Nx*4-1].y,
u.bfaces[p.Nx*4-1].phi,v.bfaces[p.Nx*4-1].phi,p.cvs[p.bfaces[p.Nx*4-
1].c1].phi,0.0);
fclose(fp);
}
fclose(fp);
}
void plot_v(mesh v,char a[])
{
FILE *fp;
fp=fopen(a,"wt");
fprintf(fp,"%s%s\n","title=","\"Cavity_mesh\"");
fprintf(fp,"%s\t%s\t%s\t\n","variables=","\"x\"","\"u\"");
fprintf(fp,"%s%d\t%s\n","zone I=",2*v.Ny,"F=POINT" );
int i;
for(i=2*v.Nx*v.Ny ;i<2*v.Nx*(v.Ny+1);i++)
fprintf(fp,"%e\t%e\n",v.cvs[i].x,v.cvs[i].phi);
fclose(fp);
}
4.2.4. Solver
41 | P a g e
return (i*n+j);
};
for(j=0;j<r;j++)
{
for (i=0;i<n;i++)
{
S=0;
temp=x[i];
if (cv[i].ae!=0)
S=S+cv[i].ae*x[i+1];
if (cv[i].aw!=0)
S=S+cv[i].aw*x[i-1];
if (cv[i].as!=0)
S=S+cv[i].as*x[i-m];
if (cv[i].an!=0)
S=S+cv[i].an*x[i+m];
42 | P a g e
x[i]=(1-alfa)*x[i]+alfa*(cv[i].b-S)/cv[i].a;
Err[i]=abs(x[i]-temp);
}
maxErr=max(Err,n);
if((maxErr<err))
break;
}
return maxErr;
}
double gause2(Cv *cv,int n,int m,double alfa,int r,double err)
{
int i,j,k;
double temp,S,*Err,maxErr;
Err=new double[n];
for(j=0;j<r;j++)
{
for (i=0;i<n;i++)
{
S=0;
temp=cv[i].phi;
if (cv[i].ae!=0)
S=S+cv[i].ae*cv[i+1].phi;
if (cv[i].aw!=0)
S=S+cv[i].aw*cv[i-1].phi;
if (cv[i].as!=0)
S=S+cv[i].as*cv[i-m].phi;
if (cv[i].an!=0)
S=S+cv[i].an*cv[i+m].phi;
cv[i].phi=(1-alfa)*cv[i].phi+alfa*(cv[i].b-S)/cv[i].a;
Err[i]=abs(cv[i].phi-temp);
}
maxErr=max(Err,n);
if((maxErr<err))
break;
}
return maxErr;
}
void solve_gause_ele(double A[],double b[],double *x,int n)
{
int i,j,k;
double sum;
for(k=0;k<=n-2;k++)
{
for(i=k+1;i<=n-1;i++)
{
for(j=n-1;j>=k+1;j--)
{
A[Ar1(i,j,n)]=A[Ar1(i,j,n)]-
A[Ar1(k,j,n)]*A[Ar1(i,k,n)]/A[Ar1(k,k,n)];
}
b[i]=b[i]-A[Ar1(i,k,n)]/A[Ar1(k,k,n)]*b[k];
}
}
x[n-1]=b[n-1]/A[Ar1(n-1,n-1,n)];
for(i=n-2;i>=0;i--)
{
sum=0;
for( j=n-1;j>=i+1;j--)
{
sum=A[Ar1(i,j,n)]*x[j]+sum;
}
x[i]=(b[i]-sum)/A[Ar1(i,i,n)];
}
}
43 | P a g e
int i,j,k;
double sum;
for(k=0;k<=n-2;k++)
{
for(i=k+1;i<=n-1;i++)
{
for(j=n-1;j>=k+1;j--)
{
A[Ar1(i,j,n)]=A[Ar1(i,j,n)]-
A[Ar1(k,j,n)]*A[Ar1(i,k,n)]/A[Ar1(k,k,n)];
}
b[i]=b[i]-A[Ar1(i,k,n)]/A[Ar1(k,k,n)]*b[k];
}
}
x[n-1].phi=b[n-1]/A[Ar1(n-1,n-1,n)];
for(i=n-2;i>=0;i--)
{
sum=0;
for( j=n-1;j>=i+1;j--)
{
sum=A[Ar1(i,j,n)]*x[j].phi+sum;
}
x[i].phi=(b[i]-sum)/A[Ar1(i,i,n)];
}
return 0;
}
double PDMA(Cv *cv ,double *x,int n,int m,double alfa,int r,double err)
{
// m=row nuber in mesh
// n=row number*column nuber
double *a,*c;
double temp,*Err,maxErr;
Err=new double[n];
int i,j;
a=new double[n];
c=new double[n];
for(j=0;j<r;j++)
{
a[0]=-cv[0].ae/cv[0].a;
c[0]=(cv[0].b-cv[0].an*x[m])/cv[0].a;
for(i=1;i<m;i++)
{
a[i]=-cv[i].ae/(cv[i].a+cv[i].aw*a[i-1]);
c[i]=(-cv[i].aw*c[i-1]+cv[i].b-cv[i].an*x[i+m])/(cv[i].a+cv[i].aw*a[i-1]);
}
for(i=m;i<n-m;i++)
{
a[i]=(-cv[i].ae)/(cv[i].a+cv[i].aw*a[i-1]);
c[i]=(-cv[i].aw*c[i-1]+cv[i].b-cv[i].an*x[i+m]-cv[i].as*x[i-
m])/(cv[i].a+cv[i].aw*a[i-1]);
}
for(i=n-m;i<n;i++)
{
a[i]=(-cv[i].ae)/(cv[i].a+cv[i].aw*a[i-1]);
c[i]=(-cv[i].aw*c[i-1]+cv[i].b-cv[i].as*x[i-m])/(cv[i].a+cv[i].aw*a[i-1]);
}
temp=x[n-1];
x[n-1]=(1-alfa)*temp+alfa*c[n-1];
Err[n-1]=abs(x[n-1]-temp);
for(i=n-2;i>=0;i--)
{
temp=x[i];
x[i]=(1-alfa)*temp+alfa*(a[i]*x[i+1]+c[i]);
Err[i]=abs((x[i]-temp)/temp);
}
maxErr=max(Err,n);
if((maxErr<err))
break;
// else if (maxErr>1e6)
// break;
}
delete(a);
delete(Err);
delete(c);
return maxErr;
44 | P a g e
}
45 | P a g e
4.2.5. Discretize Function
u_mesh.ifaces[i].F=rho*(u_mesh.cvs[u_mesh.ifaces[i].c1].phi
+(abs(u_mesh.ifaces[i].d1/u_mesh.ifaces[i].ds))*
(u_mesh.cvs[u_mesh.ifaces[i].c2].phi-
u_mesh.cvs[u_mesh.ifaces[i].c1].phi));
if(i<2*u_mesh.Nx-1)
{
v_mesh.ifaces[i].F=rho*
((u_mesh.cvs[u_mesh.ifaces[i].c2].phi-
(u_mesh.cvs[u_mesh.ifaces[i].c2].phi-
u_mesh.cvs[u_mesh.ifaces[i].c1].phi)
/u_mesh.ifaces[i].ds*v_mesh.ifaces[i].dxc))/2.00;
}
else
{
v_mesh.ifaces[i].F=rho*
((u_mesh.cvs[u_mesh.ifaces[i].c2].phi-
(u_mesh.cvs[u_mesh.ifaces[i].c2].phi-
u_mesh.cvs[u_mesh.ifaces[i].c1].phi)
/u_mesh.ifaces[i].ds*v_mesh.ifaces[i].dxc)+
(u_mesh.cvs[u_mesh.ifaces[i].c2-
2*u_mesh.Nx].phi-
(u_mesh.cvs[u_mesh.ifaces[i].c2-
2*u_mesh.Nx].phi-u_mesh.cvs[u_mesh.ifaces[i].c1-2*u_mesh.Nx].phi)
/u_mesh.ifaces[i].ds*v_mesh.ifaces[i].dxc))/2.00;
}
else if (p_mesh.ifaces[i].sit=='h')
{
v_mesh.ifaces[i].F=rho*(v_mesh.cvs[v_mesh.ifaces[i].c1].phi
+(abs(v_mesh.ifaces[i].d1/v_mesh.ifaces[i].ds))*
(v_mesh.cvs[v_mesh.ifaces[i].c2].phi-
v_mesh.cvs[v_mesh.ifaces[i].c1].phi));
if (i%(2*u_mesh.Nx)==0)
{
u_mesh.ifaces[i].F=rho*
((v_mesh.cvs[v_mesh.ifaces[i].c2].phi-
(v_mesh.cvs[v_mesh.ifaces[i].c2].phi-
v_mesh.cvs[v_mesh.ifaces[i].c1].phi)
/v_mesh.ifaces[i].ds*u_mesh.ifaces[i].dxc))/2.00;
}
else
46 | P a g e
{
u_mesh.ifaces[i].F=rho*
((v_mesh.cvs[v_mesh.ifaces[i].c2].phi-
(v_mesh.cvs[v_mesh.ifaces[i].c2].phi-
v_mesh.cvs[v_mesh.ifaces[i].c1].phi)
/v_mesh.ifaces[i].ds*u_mesh.ifaces[i].dxc)+
(v_mesh.cvs[v_mesh.ifaces[i].c2-1].phi-
(v_mesh.cvs[v_mesh.ifaces[i].c2-1].phi-
v_mesh.cvs[v_mesh.ifaces[i].c1-1].phi)
/v_mesh.ifaces[i].ds*u_mesh.ifaces[i].dxc))/2.00;
}
u_mesh.ifaces[i].Pe=u_mesh.ifaces[i].F/u_mesh.ifaces[i].D;
v_mesh.ifaces[i].Pe=v_mesh.ifaces[i].F/v_mesh.ifaces[i].D;
//std::cout<<v_mesh.ifaces[i].gama<<"\n";
for (i=0;i<p_mesh.n_bface;i++)
{
p_mesh.bfaces[i].D=vis/p_mesh.bfaces[i].ds;
u_mesh.bfaces[i].D=vis/u_mesh.bfaces[i].ds;
v_mesh.bfaces[i].D=vis/v_mesh.bfaces[i].ds;
p_mesh.bfaces[i].F=0;
if (u_mesh.bfaces[i].sit=='v')
{
if (u_mesh.bfaces[i].x<0)
{
u_mesh.bfaces[i].F=rho*u_mesh.bfaces[i].A*u_mesh.bfaces[i].phi;
v_mesh.bfaces[i].F=rho*u_mesh.bfaces[i].A*u_mesh.bfaces[i].phi;
p_mesh.bfaces[i].F=rho*u_mesh.bfaces[i].A*u_mesh.bfaces[i].phi;
}
else
{
u_mesh.bfaces[i].F=-
rho*u_mesh.bfaces[i].A*u_mesh.bfaces[i].phi;
v_mesh.bfaces[i].F=-
rho*u_mesh.bfaces[i].A*u_mesh.bfaces[i].phi;
p_mesh.bfaces[i].F=-
rho*u_mesh.bfaces[i].A*u_mesh.bfaces[i].phi;
}
}
else
{
if (u_mesh.bfaces[i].x<0)
{
u_mesh.bfaces[i].F=rho*u_mesh.bfaces[i].A*v_mesh.bfaces[i].phi;
v_mesh.bfaces[i].F=rho*u_mesh.bfaces[i].A*v_mesh.bfaces[i].phi;
p_mesh.bfaces[i].F=rho*u_mesh.bfaces[i].A*v_mesh.bfaces[i].phi;
}
else
{
u_mesh.bfaces[i].F=-
rho*u_mesh.bfaces[i].A*v_mesh.bfaces[i].phi;
v_mesh.bfaces[i].F=-
rho*u_mesh.bfaces[i].A*v_mesh.bfaces[i].phi;
p_mesh.bfaces[i].F=-
rho*u_mesh.bfaces[i].A*v_mesh.bfaces[i].phi;
}
}
}
47 | P a g e
}
48 | P a g e