Enhancednced solver.
This commit is contained in:
@@ -57,9 +57,9 @@ int main (int argc, char** argv)
|
||||
|
||||
void (*solver_generic[])() = {solve, solveRB, solveRBA};
|
||||
|
||||
//print(&solver, solver.s);
|
||||
// printGrid(&solver, solver.s);
|
||||
|
||||
//exit(0);
|
||||
// exit(0);
|
||||
|
||||
S = getTimeStamp();
|
||||
|
||||
@@ -68,14 +68,17 @@ int main (int argc, char** argv)
|
||||
if (tau > 0.0) computeTimestep(&solver);
|
||||
setBoundaryConditions(&solver);
|
||||
setSpecialBoundaryCondition(&solver);
|
||||
setObjectBoundaryCondition(&solver);
|
||||
|
||||
computeFG(&solver);
|
||||
computeRHS(&solver);
|
||||
if (nt % 100 == 0) normalizePressure(&solver);
|
||||
//if (nt % 100 == 0) normalizePressure(&solver);
|
||||
solver_generic[variant - 1](&solver);
|
||||
adaptUV(&solver);
|
||||
|
||||
|
||||
/* Added function for particle tracing. Will inject and advance particles as per timePeriod */
|
||||
//trace(&particletracer, solver.u, solver.v, t);
|
||||
// trace(&particletracer, solver.u, solver.v, t);
|
||||
|
||||
t += solver.dt;
|
||||
nt++;
|
||||
@@ -96,6 +99,11 @@ int main (int argc, char** argv)
|
||||
|
||||
freeParticles(&particletracer);
|
||||
|
||||
// printf("\nU : \n\n");
|
||||
// print(&solver, solver.u);
|
||||
// printf("\nV : \n\n");
|
||||
// print(&solver, solver.v);
|
||||
|
||||
printf("Solution took %.2fs\n", E - S);
|
||||
writeResult(&solver);
|
||||
return EXIT_SUCCESS;
|
||||
|
@@ -43,6 +43,20 @@ void print(Solver* solver, double* grid)
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
void printGrid(Solver* solver, int* grid)
|
||||
{
|
||||
int imax = solver->imax;
|
||||
|
||||
for (int j = 0; j < solver->jmax + 2; j++) {
|
||||
printf("%02d: ", j);
|
||||
for (int i = 0; i < solver->imax + 2; i++) {
|
||||
printf("%2d ", grid[j * (imax + 2) + i]);
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
fflush(stdout);
|
||||
}
|
||||
|
||||
static void printConfig(Solver* solver)
|
||||
{
|
||||
printf("Parameters for #%s#\n", solver->problem);
|
||||
@@ -111,7 +125,7 @@ void initSolver(Solver* solver, Parameter* params)
|
||||
solver->rhs[i] = 0.0;
|
||||
solver->f[i] = 0.0;
|
||||
solver->g[i] = 0.0;
|
||||
solver->s[i] = 1.0;
|
||||
solver->s[i] = NONE;
|
||||
}
|
||||
|
||||
double dx = solver->dx;
|
||||
@@ -121,7 +135,7 @@ void initSolver(Solver* solver, Parameter* params)
|
||||
|
||||
int iCenter = 0, jCenter = 0, iRectLength = 0, jRectLength = 0, radius = 0;
|
||||
|
||||
double* s = solver->s;
|
||||
int* s = solver->s;
|
||||
|
||||
switch(params->shape)
|
||||
{
|
||||
@@ -148,8 +162,7 @@ void initSolver(Solver* solver, Parameter* params)
|
||||
{
|
||||
if(i1 <= i && i <= i2 && j1 <= j && j <= j2)
|
||||
{
|
||||
// if(i == i1 || i == i2 || j == j1 || j == j2) S(i, j) = 2.0;
|
||||
S(i, j) = 0.0;
|
||||
S(i, j) = LOCAL;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -166,7 +179,7 @@ void initSolver(Solver* solver, Parameter* params)
|
||||
{
|
||||
if(distance(i, j, iCenter, jCenter) <= radius)
|
||||
{
|
||||
S(i, j) = 0.0;
|
||||
S(i, j) = LOCAL;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -176,6 +189,30 @@ void initSolver(Solver* solver, Parameter* params)
|
||||
break;
|
||||
}
|
||||
|
||||
for (int j = 1; j < jmax + 1; j++)
|
||||
{
|
||||
for (int i = 1; i < imax + 1; i++)
|
||||
{
|
||||
// if( S(i+1,j+1) == NONE && S(i+1,j) == NONE && S(i,j+1) == NONE && S(i-1,j-1) == LOCAL && S(i,j) == LOCAL ) S(i,j) = BOTTOMRIGHT;
|
||||
// else if( S(i-1,j+1) == NONE && S(i-1,j) == NONE && S(i,j+1) == NONE && S(i+1,j-1) == LOCAL && S(i,j) == LOCAL ) S(i,j) = BOTTOMLEFT;
|
||||
// else if( S(i+1,j-1) == NONE && S(i,j-1) == NONE && S(i+1,j) == NONE && S(i-1,j+1) == LOCAL && S(i,j) == LOCAL ) S(i,j) = TOPRIGHT;
|
||||
// else if( S(i-1,j-1) == NONE && S(i,j-1) == NONE && S(i-1,j) == NONE && S(i+1,j+1) == LOCAL && S(i,j) == LOCAL ) S(i,j) = TOPLEFT;
|
||||
// else if( S(i+1,j) == NONE && S(i-1,j) == LOCAL && S(i,j) == LOCAL ) S(i,j) = RIGHT;
|
||||
// else if( S(i,j+1) == NONE && S(i,j-1) == LOCAL && S(i,j) == LOCAL ) S(i,j) = BOTTOM;
|
||||
// else if( S(i-1,j) == NONE && S(i+1,j) == LOCAL && S(i,j) == LOCAL ) S(i,j) = LEFT;
|
||||
// else if( S(i,j-1) == NONE && S(i,j+1) == LOCAL && S(i,j) == LOCAL ) S(i,j) = TOP;
|
||||
|
||||
if( S(i,j-1) == NONE && S(i,j+1) == LOCAL && S(i,j) == LOCAL ) S(i,j) = BOTTOM; //TOP
|
||||
if( S(i-1,j) == NONE && S(i+1,j) == LOCAL && S(i,j) == LOCAL ) S(i,j) = LEFT; //LEFT
|
||||
if( S(i+1,j) == NONE && S(i-1,j) == LOCAL && S(i,j) == LOCAL ) S(i,j) = RIGHT; //RIGHT
|
||||
if( S(i,j+1) == NONE && S(i,j-1) == LOCAL && S(i,j) == LOCAL ) S(i,j) = TOP; //BOTTOM
|
||||
if( S(i-1,j-1) == NONE && S(i,j-1) == NONE && S(i-1,j) == NONE && S(i+1,j+1) == LOCAL && (S(i,j) == LOCAL || S(i,j) == LEFT || S(i,j) == BOTTOM ) ) S(i,j) = BOTTOMLEFT; //TOPLEFT
|
||||
if( S(i+1,j-1) == NONE && S(i,j-1) == NONE && S(i+1,j) == NONE && S(i-1,j+1) == LOCAL && (S(i,j) == LOCAL || S(i,j) == RIGHT || S(i,j) == BOTTOM ) ) S(i,j) = BOTTOMRIGHT; //TOPRIGHT
|
||||
if( S(i-1,j+1) == NONE && S(i-1,j) == NONE && S(i,j+1) == NONE && S(i+1,j-1) == LOCAL && (S(i,j) == LOCAL || S(i,j) == LEFT || S(i,j) == TOP )) S(i,j) = TOPLEFT; //BOTTOMLEFT
|
||||
if( S(i+1,j+1) == NONE && S(i+1,j) == NONE && S(i,j+1) == NONE && S(i-1,j-1) == LOCAL && (S(i,j) == LOCAL || S(i,j) == RIGHT || S(i,j) == TOP ) ) S(i,j) = TOPRIGHT; //BOTTOMRIGHT
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef VERBOSE
|
||||
printConfig(solver);
|
||||
#endif
|
||||
@@ -191,11 +228,14 @@ void computeRHS(Solver* solver)
|
||||
double* rhs = solver->rhs;
|
||||
double* f = solver->f;
|
||||
double* g = solver->g;
|
||||
int* s = solver->s;
|
||||
|
||||
for (int j = 1; j < jmax + 1; j++) {
|
||||
for (int i = 1; i < imax + 1; i++) {
|
||||
RHS(i, j) = idt *
|
||||
((F(i, j) - F(i - 1, j)) * idx + (G(i, j) - G(i, j - 1)) * idy);
|
||||
for (int j = 1; j < jmax + 1; j++)
|
||||
{
|
||||
for (int i = 1; i < imax + 1; i++)
|
||||
{
|
||||
// if(S(i,j) == NONE)
|
||||
RHS(i, j) = idt * ((F(i, j) - F(i - 1, j)) * idx + (G(i, j) - G(i, j - 1)) * idy);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -266,7 +306,7 @@ void solveRB(Solver* solver)
|
||||
double idy2 = 1.0 / dy2;
|
||||
double factor = solver->omega * 0.5 * (dx2 * dy2) / (dx2 + dy2);
|
||||
double* p = solver->p;
|
||||
double* s = solver->s;
|
||||
int* s = solver->s;
|
||||
double* rhs = solver->rhs;
|
||||
double epssq = eps * eps;
|
||||
int it = 0;
|
||||
@@ -278,22 +318,24 @@ void solveRB(Solver* solver)
|
||||
res = 0.0;
|
||||
jsw = 1;
|
||||
|
||||
for (pass = 0; pass < 2; pass++) {
|
||||
for (pass = 0; pass < 2; pass++)
|
||||
{
|
||||
isw = jsw;
|
||||
|
||||
for (int j = 1; j < jmax + 1; j++) {
|
||||
for (int i = isw; i < imax + 1; i += 2) {
|
||||
// val = S(i+1, j) + S(i-1, j) + S(i, j+1) + S(i, j-1);
|
||||
// if(val == 0 || S(i,j) == 0)
|
||||
for (int j = 1; j < jmax + 1; j++)
|
||||
{
|
||||
for (int i = isw; i < imax + 1; i += 2)
|
||||
{
|
||||
// if(S(i,j) == NONE)
|
||||
// {
|
||||
// continue;
|
||||
// }
|
||||
double r = RHS(i, j) -
|
||||
((P(i + 1, j) - 2.0 * P(i, j) + P(i - 1, j)) * idx2 +
|
||||
(P(i, j + 1) - 2.0 * P(i, j) + P(i, j - 1)) * idy2);
|
||||
double r = RHS(i, j) -
|
||||
((P(i + 1, j) - 2.0 * P(i, j) + P(i - 1, j)) * idx2 +
|
||||
(P(i, j + 1) - 2.0 * P(i, j) + P(i, j - 1)) * idy2);
|
||||
|
||||
P(i, j) -= (factor * r );
|
||||
res += (r * r);
|
||||
P(i, j) -= (factor * r );
|
||||
|
||||
res += (r * r);
|
||||
// }
|
||||
}
|
||||
isw = 3 - isw;
|
||||
}
|
||||
@@ -310,6 +352,8 @@ void solveRB(Solver* solver)
|
||||
P(imax + 1, j) = P(imax, j);
|
||||
}
|
||||
|
||||
//setObjectPBoundaryCondition(solver);
|
||||
|
||||
res = res / (double)(imax * jmax);
|
||||
|
||||
#ifdef DEBUG
|
||||
@@ -561,12 +605,122 @@ void setSpecialBoundaryCondition(Solver* solver)
|
||||
}
|
||||
}
|
||||
|
||||
void setObjectBoundaryCondition(Solver* solver)
|
||||
{
|
||||
int imax = solver->imax;
|
||||
int jmax = solver->jmax;
|
||||
double* u = solver->u;
|
||||
double* v = solver->v;
|
||||
int* s = solver->s;
|
||||
|
||||
for (int j = 1; j < jmax + 1; j++)
|
||||
{
|
||||
for (int i = 1; i < imax + 1; i++)
|
||||
{
|
||||
switch(S(i,j))
|
||||
{
|
||||
case TOP:
|
||||
U(i,j) = -U(i,j+1);
|
||||
U(i-1,j) = -U(i-1,j+1);
|
||||
V(i,j) = 0.0;
|
||||
break;
|
||||
case BOTTOM:
|
||||
U(i,j) = -U(i,j-1);
|
||||
U(i-1,j) = -U(i-1,j-1);
|
||||
V(i,j) = 0.0;
|
||||
break;
|
||||
case LEFT:
|
||||
U(i,j) = 0.0;
|
||||
V(i,j) = -V(i-1,j);
|
||||
V(i,j-1) = -V(i-1,j-1);
|
||||
break;
|
||||
case RIGHT:
|
||||
U(i,j) = 0.0;
|
||||
V(i,j) = -V(i+1,j);
|
||||
V(i,j-1) = -V(i+1,j-1);
|
||||
break;
|
||||
case TOPLEFT:
|
||||
U(i,j) = -U(i,j+1);
|
||||
U(i-1,j) = 0.0;
|
||||
V(i,j) = 0.0;
|
||||
V(i,j+1) = -V(i-1,j+1);
|
||||
break;
|
||||
case TOPRIGHT:
|
||||
U(i,j) = 0.0;
|
||||
U(i+1,j) = -U(i+1,j+1);
|
||||
V(i,j) = 0.0;
|
||||
V(i,j+1) = -V(i+1,j+1);
|
||||
break;
|
||||
case BOTTOMLEFT:
|
||||
U(i,j) = -U(i,j-1);
|
||||
U(i-1,j) = 0.0;
|
||||
V(i,j) = -V(i-1,j);
|
||||
V(i,j-1) = 0.0;
|
||||
break;
|
||||
case BOTTOMRIGHT:
|
||||
U(i,j) = 0.0;
|
||||
U(i+1,j) = -U(i+1,j-1);
|
||||
V(i,j) = -V(i,j+1);
|
||||
V(i,j-1) = 0.0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void setObjectPBoundaryCondition(Solver* solver)
|
||||
{
|
||||
int imax = solver->imax;
|
||||
int jmax = solver->jmax;
|
||||
|
||||
double* p = solver->p;
|
||||
int* s = solver->s;
|
||||
|
||||
for (int j = 1; j < jmax + 1; j++)
|
||||
{
|
||||
for (int i = 1; i < imax + 1; i++)
|
||||
{
|
||||
switch (S(i,j))
|
||||
{
|
||||
case TOP:
|
||||
P(i,j) = P(i,j+1);
|
||||
break;
|
||||
case BOTTOM:
|
||||
P(i,j) = P(i,j-1);
|
||||
break;
|
||||
case LEFT:
|
||||
P(i,j) = P(i-1,j);
|
||||
break;
|
||||
case RIGHT:
|
||||
P(i,j) = P(i,j+1);
|
||||
break;
|
||||
case TOPLEFT:
|
||||
P(i,j) = (P(i-1,j) + P(i,j+1))/2;
|
||||
break;
|
||||
case TOPRIGHT:
|
||||
P(i,j) = (P(i+1,j) + P(i,j+1))/2;
|
||||
break;
|
||||
case BOTTOMLEFT:
|
||||
P(i,j) = (P(i-1,j) + P(i,j-1))/2;
|
||||
break;
|
||||
case BOTTOMRIGHT:
|
||||
P(i,j) = (P(i+1,j) + P(i,j-1))/2;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void computeFG(Solver* solver)
|
||||
{
|
||||
double* u = solver->u;
|
||||
double* v = solver->v;
|
||||
double* f = solver->f;
|
||||
double* g = solver->g;
|
||||
int* s = solver->s;
|
||||
int imax = solver->imax;
|
||||
int jmax = solver->jmax;
|
||||
double gx = solver->gx;
|
||||
@@ -579,45 +733,84 @@ void computeFG(Solver* solver)
|
||||
double du2dx, dv2dy, duvdx, duvdy;
|
||||
double du2dx2, du2dy2, dv2dx2, dv2dy2;
|
||||
|
||||
for (int j = 1; j < jmax + 1; j++) {
|
||||
for (int i = 1; i < imax + 1; i++) {
|
||||
du2dx = inverseDx * 0.25 *
|
||||
((U(i, j) + U(i + 1, j)) * (U(i, j) + U(i + 1, j)) -
|
||||
(U(i, j) + U(i - 1, j)) * (U(i, j) + U(i - 1, j))) +
|
||||
gamma * inverseDx * 0.25 *
|
||||
(fabs(U(i, j) + U(i + 1, j)) * (U(i, j) - U(i + 1, j)) +
|
||||
fabs(U(i, j) + U(i - 1, j)) * (U(i, j) - U(i - 1, j)));
|
||||
for (int j = 1; j < jmax + 1; j++)
|
||||
{
|
||||
for (int i = 1; i < imax + 1; i++)
|
||||
{
|
||||
if(S(i,j) == NONE)
|
||||
{
|
||||
du2dx = inverseDx * 0.25 *
|
||||
((U(i, j) + U(i + 1, j)) * (U(i, j) + U(i + 1, j)) -
|
||||
(U(i, j) + U(i - 1, j)) * (U(i, j) + U(i - 1, j))) +
|
||||
gamma * inverseDx * 0.25 *
|
||||
(fabs(U(i, j) + U(i + 1, j)) * (U(i, j) - U(i + 1, j)) +
|
||||
fabs(U(i, j) + U(i - 1, j)) * (U(i, j) - U(i - 1, j)));
|
||||
|
||||
duvdy = inverseDy * 0.25 *
|
||||
((V(i, j) + V(i + 1, j)) * (U(i, j) + U(i, j + 1)) -
|
||||
(V(i, j - 1) + V(i + 1, j - 1)) * (U(i, j) + U(i, j - 1))) +
|
||||
gamma * inverseDy * 0.25 *
|
||||
(fabs(V(i, j) + V(i + 1, j)) * (U(i, j) - U(i, j + 1)) +
|
||||
fabs(V(i, j - 1) + V(i + 1, j - 1)) *
|
||||
(U(i, j) - U(i, j - 1)));
|
||||
duvdy = inverseDy * 0.25 *
|
||||
((V(i, j) + V(i + 1, j)) * (U(i, j) + U(i, j + 1)) -
|
||||
(V(i, j - 1) + V(i + 1, j - 1)) * (U(i, j) + U(i, j - 1))) +
|
||||
gamma * inverseDy * 0.25 *
|
||||
(fabs(V(i, j) + V(i + 1, j)) * (U(i, j) - U(i, j + 1)) +
|
||||
fabs(V(i, j - 1) + V(i + 1, j - 1)) *
|
||||
(U(i, j) - U(i, j - 1)));
|
||||
|
||||
du2dx2 = inverseDx * inverseDx * (U(i + 1, j) - 2.0 * U(i, j) + U(i - 1, j));
|
||||
du2dy2 = inverseDy * inverseDy * (U(i, j + 1) - 2.0 * U(i, j) + U(i, j - 1));
|
||||
F(i, j) = U(i, j) + dt * (inverseRe * (du2dx2 + du2dy2) - du2dx - duvdy + gx);
|
||||
du2dx2 = inverseDx * inverseDx * (U(i + 1, j) - 2.0 * U(i, j) + U(i - 1, j));
|
||||
du2dy2 = inverseDy * inverseDy * (U(i, j + 1) - 2.0 * U(i, j) + U(i, j - 1));
|
||||
F(i, j) = U(i, j) + dt * (inverseRe * (du2dx2 + du2dy2) - du2dx - duvdy + gx);
|
||||
|
||||
duvdx = inverseDx * 0.25 *
|
||||
((U(i, j) + U(i, j + 1)) * (V(i, j) + V(i + 1, j)) -
|
||||
(U(i - 1, j) + U(i - 1, j + 1)) * (V(i, j) + V(i - 1, j))) +
|
||||
gamma * inverseDx * 0.25 *
|
||||
(fabs(U(i, j) + U(i, j + 1)) * (V(i, j) - V(i + 1, j)) +
|
||||
fabs(U(i - 1, j) + U(i - 1, j + 1)) *
|
||||
(V(i, j) - V(i - 1, j)));
|
||||
duvdx = inverseDx * 0.25 *
|
||||
((U(i, j) + U(i, j + 1)) * (V(i, j) + V(i + 1, j)) -
|
||||
(U(i - 1, j) + U(i - 1, j + 1)) * (V(i, j) + V(i - 1, j))) +
|
||||
gamma * inverseDx * 0.25 *
|
||||
(fabs(U(i, j) + U(i, j + 1)) * (V(i, j) - V(i + 1, j)) +
|
||||
fabs(U(i - 1, j) + U(i - 1, j + 1)) *
|
||||
(V(i, j) - V(i - 1, j)));
|
||||
|
||||
dv2dy = inverseDy * 0.25 *
|
||||
((V(i, j) + V(i, j + 1)) * (V(i, j) + V(i, j + 1)) -
|
||||
(V(i, j) + V(i, j - 1)) * (V(i, j) + V(i, j - 1))) +
|
||||
gamma * inverseDy * 0.25 *
|
||||
(fabs(V(i, j) + V(i, j + 1)) * (V(i, j) - V(i, j + 1)) +
|
||||
fabs(V(i, j) + V(i, j - 1)) * (V(i, j) - V(i, j - 1)));
|
||||
dv2dy = inverseDy * 0.25 *
|
||||
((V(i, j) + V(i, j + 1)) * (V(i, j) + V(i, j + 1)) -
|
||||
(V(i, j) + V(i, j - 1)) * (V(i, j) + V(i, j - 1))) +
|
||||
gamma * inverseDy * 0.25 *
|
||||
(fabs(V(i, j) + V(i, j + 1)) * (V(i, j) - V(i, j + 1)) +
|
||||
fabs(V(i, j) + V(i, j - 1)) * (V(i, j) - V(i, j - 1)));
|
||||
|
||||
dv2dx2 = inverseDx * inverseDx * (V(i + 1, j) - 2.0 * V(i, j) + V(i - 1, j));
|
||||
dv2dy2 = inverseDy * inverseDy * (V(i, j + 1) - 2.0 * V(i, j) + V(i, j - 1));
|
||||
G(i, j) = V(i, j) + dt * (inverseRe * (dv2dx2 + dv2dy2) - duvdx - dv2dy + gy);
|
||||
dv2dx2 = inverseDx * inverseDx * (V(i + 1, j) - 2.0 * V(i, j) + V(i - 1, j));
|
||||
dv2dy2 = inverseDy * inverseDy * (V(i, j + 1) - 2.0 * V(i, j) + V(i, j - 1));
|
||||
G(i, j) = V(i, j) + dt * (inverseRe * (dv2dx2 + dv2dy2) - duvdx - dv2dy + gy);
|
||||
}
|
||||
else
|
||||
{
|
||||
switch(S(i,j))
|
||||
{
|
||||
case TOP:
|
||||
G(i,j) = V(i,j);
|
||||
break;
|
||||
case BOTTOM:
|
||||
G(i,j-1) = V(i,j-1);
|
||||
break;
|
||||
case LEFT:
|
||||
F(i-1,j) = U(i-1,j);
|
||||
break;
|
||||
case RIGHT:
|
||||
F(i,j) = U(i,j);
|
||||
break;
|
||||
case TOPLEFT:
|
||||
F(i-1,j) = U(i-1,j);
|
||||
G(i,j) = V(i,j);
|
||||
break;
|
||||
case TOPRIGHT:
|
||||
F(i,j) = U(i,j);
|
||||
G(i,j) = V(i,j);
|
||||
break;
|
||||
case BOTTOMLEFT:
|
||||
F(i-1,j) = U(i-1,j);
|
||||
G(i,j-1) = V(i,j-1);
|
||||
break;
|
||||
case BOTTOMRIGHT:
|
||||
F(i,j) = U(i,j);
|
||||
G(i,j-1) = V(i,j-1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -641,7 +834,7 @@ void adaptUV(Solver* solver)
|
||||
double* p = solver->p;
|
||||
double* u = solver->u;
|
||||
double* v = solver->v;
|
||||
double* s = solver->s;
|
||||
int* s = solver->s;
|
||||
double* f = solver->f;
|
||||
double* g = solver->g;
|
||||
double factorX = solver->dt / solver->dx;
|
||||
@@ -653,19 +846,6 @@ void adaptUV(Solver* solver)
|
||||
{
|
||||
for (int i = 1; i < imax + 1; i++)
|
||||
{
|
||||
val = S(i+1, j) + S(i-1, j) + S(i, j+1) + S(i, j-1);
|
||||
if(S(i,j) == 0 && val == 0)
|
||||
{
|
||||
U(i, j) = 0;
|
||||
V(i, j) = 0;
|
||||
continue;
|
||||
}
|
||||
// else if(S(i,j) == 2.0)
|
||||
// {
|
||||
// U(i, j) = -U(i, j);
|
||||
// V(i, j) = -V(i, j);
|
||||
// continue;
|
||||
// }
|
||||
U(i, j) = F(i, j) - (P(i + 1, j) - P(i, j)) * factorX;
|
||||
V(i, j) = G(i, j) - (P(i, j + 1) - P(i, j)) * factorY;
|
||||
}
|
||||
|
@@ -8,6 +8,7 @@
|
||||
#define __SOLVER_H_
|
||||
#include "parameter.h"
|
||||
|
||||
enum OBJECTBOUNDARY { NONE = 0, TOP, BOTTOM, LEFT, RIGHT, TOPLEFT, BOTTOMLEFT, TOPRIGHT, BOTTOMRIGHT, LOCAL };
|
||||
enum BC { NOSLIP = 1, SLIP, OUTFLOW, PERIODIC };
|
||||
/// @brief
|
||||
enum SHAPE { NOSHAPE = 0, RECT, CIRCLE };
|
||||
@@ -20,7 +21,8 @@ typedef struct {
|
||||
/* arrays */
|
||||
double *p, *rhs;
|
||||
double *f, *g;
|
||||
double *u, *v, *s;
|
||||
double *u, *v;
|
||||
int *s;
|
||||
/* parameters */
|
||||
double eps, omega, rho;
|
||||
double re, tau, gamma;
|
||||
@@ -42,8 +44,12 @@ extern void normalizePressure(Solver*);
|
||||
extern void computeTimestep(Solver*);
|
||||
extern void setBoundaryConditions(Solver*);
|
||||
extern void setSpecialBoundaryCondition(Solver*);
|
||||
extern void setObjectBoundaryCondition(Solver*);
|
||||
extern void setObjectPBoundaryCondition(Solver*);
|
||||
extern void computeFG(Solver*);
|
||||
extern void adaptUV(Solver*);
|
||||
extern void writeResult(Solver*);
|
||||
extern void print(Solver*, double*);
|
||||
extern void printGrid(Solver*, int*);
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user