Working 2D-mpi for enhanced solver
This commit is contained in:
@@ -39,7 +39,7 @@ $(BUILD_DIR)/%.s: %.c
|
||||
|
||||
.PHONY: clean distclean tags info asm format
|
||||
|
||||
clean: viz
|
||||
clean: vis
|
||||
$(info ===> CLEAN)
|
||||
@rm -rf $(BUILD_DIR)
|
||||
@rm -f tags
|
||||
@@ -48,7 +48,7 @@ distclean: clean
|
||||
$(info ===> DIST CLEAN)
|
||||
@rm -f $(TARGET)
|
||||
|
||||
viz:
|
||||
vis:
|
||||
$(info ===> REMOVING VIZUALISATION FILES)
|
||||
@rm -f vtk_files/particle*.vtk
|
||||
@rm -f vis_files/particle*.dat
|
||||
|
@@ -15,7 +15,7 @@ bcRight 3 #
|
||||
gx 0.0 # Body forces (e.g. gravity)
|
||||
gy 0.0 #
|
||||
|
||||
re 16500.0 # Reynolds number
|
||||
re 36500.0 # Reynolds number
|
||||
|
||||
u_init 1.0 # initial value for velocity in x-direction
|
||||
v_init 0.0 # initial value for velocity in y-direction
|
||||
@@ -48,10 +48,10 @@ gamma 0.9 # upwind differencing factor gamma
|
||||
# Particle Tracing Data:
|
||||
# -----------------------
|
||||
|
||||
numberOfParticles 60
|
||||
startTime 100.0
|
||||
injectTimePeriod 0.5
|
||||
writeTimePeriod 0.2
|
||||
numberOfParticles 200
|
||||
startTime 0
|
||||
injectTimePeriod 1.0
|
||||
writeTimePeriod 0.5
|
||||
|
||||
x1 0.0
|
||||
y1 0.5
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -25,8 +25,7 @@
|
||||
|
||||
static double distance(double i, double j, double iCenter, double jCenter)
|
||||
{
|
||||
return sqrt(pow(iCenter - i, 2)
|
||||
+ pow(jCenter - j, 2) * 1.0);
|
||||
return sqrt(pow(iCenter - i, 2) + pow(jCenter - j, 2) * 1.0);
|
||||
}
|
||||
|
||||
void print(Solver* solver, double* grid)
|
||||
@@ -106,7 +105,6 @@ void initSolver(Solver* solver, Parameter* params)
|
||||
solver->gamma = params->gamma;
|
||||
solver->rho = params->rho;
|
||||
|
||||
|
||||
int imax = solver->imax;
|
||||
int jmax = solver->jmax;
|
||||
size_t size = (imax + 2) * (jmax + 2) * sizeof(double);
|
||||
@@ -134,75 +132,86 @@ void initSolver(Solver* solver, Parameter* params)
|
||||
solver->dtBound = 0.5 * solver->re * 1.0 / invSqrSum;
|
||||
|
||||
double xCenter = 0, yCenter = 0, radius = 0;
|
||||
double x1=0, x2=0, y1=0, y2=0;
|
||||
double x1 = 0, x2 = 0, y1 = 0, y2 = 0;
|
||||
|
||||
int* s = solver->s;
|
||||
|
||||
|
||||
switch(params->shape)
|
||||
{
|
||||
case NOSHAPE:
|
||||
break;
|
||||
case RECT:
|
||||
x1 = params->xCenter - params->xRectLength/2;
|
||||
x2 = params->xCenter + params->xRectLength/2;
|
||||
y1 = params->yCenter - params->yRectLength/2;
|
||||
y2 = params->yCenter + params->yRectLength/2;
|
||||
switch (params->shape) {
|
||||
case NOSHAPE:
|
||||
break;
|
||||
case RECT:
|
||||
x1 = params->xCenter - params->xRectLength / 2;
|
||||
x2 = params->xCenter + params->xRectLength / 2;
|
||||
y1 = params->yCenter - params->yRectLength / 2;
|
||||
y2 = params->yCenter + params->yRectLength / 2;
|
||||
|
||||
for (int j = 1; j < jmax + 1; j++)
|
||||
{
|
||||
for (int i = 1; i < imax + 1; i++)
|
||||
{
|
||||
if((x1 <= (i*dx)) && ((i*dx) <= x2) && (y1 <= (j*dy)) && ((j*dy) <= y2))
|
||||
{
|
||||
S(i, j) = LOCAL;
|
||||
}
|
||||
for (int j = 1; j < jmax + 1; j++) {
|
||||
for (int i = 1; i < imax + 1; i++) {
|
||||
if ((x1 <= (i * dx)) && ((i * dx) <= x2) && (y1 <= (j * dy)) &&
|
||||
((j * dy) <= y2)) {
|
||||
S(i, j) = LOCAL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
case CIRCLE:
|
||||
xCenter = params->xCenter;
|
||||
yCenter = params->yCenter;
|
||||
radius = params->circleRadius;
|
||||
break;
|
||||
case CIRCLE:
|
||||
xCenter = params->xCenter;
|
||||
yCenter = params->yCenter;
|
||||
radius = params->circleRadius;
|
||||
|
||||
for (int j = 1; j < jmax + 1; j++)
|
||||
{
|
||||
for (int i = 1; i < imax + 1; i++)
|
||||
{
|
||||
if(distance((i*dx), (j*dy), xCenter, yCenter) <= radius)
|
||||
{
|
||||
S(i, j) = LOCAL;
|
||||
}
|
||||
for (int j = 1; j < jmax + 1; j++) {
|
||||
for (int i = 1; i < imax + 1; i++) {
|
||||
if (distance((i * dx), (j * dy), xCenter, yCenter) <= radius) {
|
||||
S(i, j) = LOCAL;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
break;
|
||||
default:
|
||||
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;
|
||||
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
|
||||
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
|
||||
}
|
||||
}
|
||||
|
||||
@@ -223,12 +232,11 @@ void computeRHS(Solver* solver)
|
||||
double* g = solver->g;
|
||||
int* s = solver->s;
|
||||
|
||||
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);
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -276,7 +284,7 @@ void solve(Solver* solver)
|
||||
}
|
||||
|
||||
res = res / (double)(imax * jmax);
|
||||
|
||||
|
||||
#ifdef DEBUG
|
||||
printf("%d Residuum: %e\n", it, res);
|
||||
#endif
|
||||
@@ -311,7 +319,6 @@ void solveRB(Solver* solver)
|
||||
res = 0.0;
|
||||
jsw = 1;
|
||||
|
||||
|
||||
for (int i = 1; i < imax + 1; i++) {
|
||||
P(i, 0) = P(i, 1);
|
||||
P(i, jmax + 1) = P(i, jmax);
|
||||
@@ -324,23 +331,20 @@ void solveRB(Solver* solver)
|
||||
|
||||
// setObjectPBoundaryCondition(solver);
|
||||
|
||||
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)
|
||||
{
|
||||
for (int j = 1; j < jmax + 1; j++) {
|
||||
for (int i = isw; i < imax + 1; i += 2) {
|
||||
// if(S(i,j) == NONE)
|
||||
// {
|
||||
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;
|
||||
@@ -349,7 +353,7 @@ void solveRB(Solver* solver)
|
||||
}
|
||||
|
||||
res = res / (double)(imax * jmax);
|
||||
|
||||
|
||||
#ifdef DEBUG
|
||||
printf("%d Residuum: %e\n", it, res);
|
||||
#endif
|
||||
@@ -400,7 +404,7 @@ void solveRBA(Solver* solver)
|
||||
}
|
||||
isw = 3 - isw;
|
||||
}
|
||||
jsw = 3 - jsw;
|
||||
jsw = 3 - jsw;
|
||||
omega = (it == 0 && pass == 0 ? 1.0 / (1.0 - 0.5 * rho * rho)
|
||||
: 1.0 / (1.0 - 0.25 * rho * rho * omega));
|
||||
}
|
||||
@@ -589,8 +593,7 @@ void setSpecialBoundaryCondition(Solver* solver)
|
||||
for (int i = 1; i < imax; i++) {
|
||||
U(i, jmax + 1) = 2.0 - U(i, jmax);
|
||||
}
|
||||
}
|
||||
else if (strcmp(solver->problem, "canal") == 0) {
|
||||
} else if (strcmp(solver->problem, "canal") == 0) {
|
||||
double ylength = solver->ylength;
|
||||
double y;
|
||||
|
||||
@@ -598,18 +601,12 @@ void setSpecialBoundaryCondition(Solver* solver)
|
||||
y = mDy * (j - 0.5);
|
||||
U(0, j) = y * (ylength - y) * 4.0 / (ylength * ylength);
|
||||
}
|
||||
}
|
||||
else if (strcmp(solver->problem, "backstep") == 0)
|
||||
{
|
||||
for (int j = 1; j < jmax + 1; j++)
|
||||
{
|
||||
if(S(0,j) == NONE) U(0, j) = 1.0;
|
||||
} else if (strcmp(solver->problem, "backstep") == 0) {
|
||||
for (int j = 1; j < jmax + 1; j++) {
|
||||
if (S(0, j) == NONE) U(0, j) = 1.0;
|
||||
}
|
||||
}
|
||||
else if (strcmp(solver->problem, "karman") == 0)
|
||||
{
|
||||
for (int j = 1; j < jmax + 1; j++)
|
||||
{
|
||||
} else if (strcmp(solver->problem, "karman") == 0) {
|
||||
for (int j = 1; j < jmax + 1; j++) {
|
||||
U(0, j) = 1.0;
|
||||
}
|
||||
}
|
||||
@@ -617,62 +614,59 @@ 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;
|
||||
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-1,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;
|
||||
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 - 1, 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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -680,45 +674,42 @@ void setObjectBoundaryCondition(Solver* solver)
|
||||
|
||||
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;
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -743,12 +734,9 @@ 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++)
|
||||
{
|
||||
if(S(i,j) == NONE)
|
||||
{
|
||||
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))) +
|
||||
@@ -758,19 +746,24 @@ void computeFG(Solver* solver)
|
||||
|
||||
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))) +
|
||||
(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))) +
|
||||
(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)) *
|
||||
@@ -783,42 +776,42 @@ void computeFG(Solver* solver)
|
||||
(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);
|
||||
}
|
||||
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;
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -834,7 +827,7 @@ void computeFG(Solver* solver)
|
||||
for (int i = 1; i < imax + 1; i++) {
|
||||
G(i, 0) = V(i, 0);
|
||||
G(i, jmax) = V(i, jmax);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void adaptUV(Solver* solver)
|
||||
@@ -852,10 +845,8 @@ void adaptUV(Solver* solver)
|
||||
|
||||
double val = 0;
|
||||
|
||||
for (int j = 1; j < jmax + 1; j++)
|
||||
{
|
||||
for (int i = 1; i < imax + 1; i++)
|
||||
{
|
||||
for (int j = 1; j < jmax + 1; j++) {
|
||||
for (int i = 1; i < imax + 1; i++) {
|
||||
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;
|
||||
}
|
||||
|
@@ -1,7 +1,7 @@
|
||||
set terminal png size 3600,768 enhanced font ,28
|
||||
set output 'velocity.png'
|
||||
set xrange[0:30]
|
||||
set yrange[0:4]
|
||||
set xrange[0:7]
|
||||
set yrange[0:1.5]
|
||||
set size ratio -1
|
||||
set datafile separator whitespace
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Before Width: | Height: | Size: 206 KiB After Width: | Height: | Size: 188 KiB |
@@ -1,8 +1,10 @@
|
||||
unset border; unset tics; unset key;
|
||||
set term gif animate delay 50
|
||||
set term gif animate delay 10
|
||||
set output "trace.gif"
|
||||
set xrange [0:7]
|
||||
set yrange [0:1.5]
|
||||
set size ratio -1
|
||||
|
||||
set object 1 rect from 0.0,0.0 to 1.0,0.5 lw 5
|
||||
|
||||
|
||||
|
Binary file not shown.
Before Width: | Height: | Size: 732 KiB After Width: | Height: | Size: 453 KiB |
Reference in New Issue
Block a user