Fully working BasicSolver

This commit is contained in:
2024-07-24 22:56:05 +02:00
parent 312af6f663
commit d9361a8086
45 changed files with 372 additions and 110 deletions

View File

@@ -38,9 +38,22 @@ $(BUILD_DIR)/%.s: %.c
$(info ===> GENERATE ASM $@)
$(CC) -S $(CPPFLAGS) $(CFLAGS) $< -o $@
.PHONY: clean distclean tags info asm format
.PHONY: clean distclean vis vis_clean tags info asm format
clean:
vis:
$(info ===> GENERATE VISUALIZATION)
@gnuplot -e "filename='pressure.dat'" ./surface.plot
@gnuplot -e "filename='velocity.dat'" ./vector.plot
@gnuplot -e "filename='residual.dat'" ./residual.plot
vis_clean:
$(info ===> CLEAN VISUALIZATION)
@rm -f *.dat
@rm -f *.png
@rm -f ./vis_files/*.dat
@rm -f ./vis_files/*.gif
clean: vis_clean
$(info ===> CLEAN)
@rm -rf $(BUILD_DIR)
@rm -f tags

View File

@@ -0,0 +1,9 @@
set terminal png size 1800,768 enhanced font ,12
set output 'residual.png'
set datafile separator whitespace
set xlabel "Timestep"
set ylabel "Residual"
set logscale y 2
plot 'residual.dat' using 1:2 title "Residual"

View File

@@ -20,8 +20,10 @@ int main(int argc, char** argv)
Parameter p;
Discretization d;
Solver s;
initParameter(&p);
FILE* fp;
fp = initResidualWriter();
if (argc != 2) {
printf("Usage: %s <configFile>\n", argv[0]);
@@ -32,7 +34,7 @@ int main(int argc, char** argv)
printParameter(&p);
initDiscretization(&d, &p);
initSolver(&s, &d, &p);
#ifndef VERBOSE
initProgress(d.te);
#endif
@@ -41,8 +43,9 @@ int main(int argc, char** argv)
double te = d.te;
double t = 0.0;
int nt = 0;
double res = 0.0;
timeStart = getTimeStamp();
timeStart = getTimeStamp();
while (t <= te) {
if (tau > 0.0) computeTimestep(&d);
setBoundaryConditions(&d);
@@ -50,8 +53,11 @@ int main(int argc, char** argv)
computeFG(&d);
computeRHS(&d);
if (nt % 100 == 0) normalizePressure(&d);
solve(&s, d.p, d.rhs);
res = solve(&s, d.p, d.rhs);
adaptUV(&d);
writeResidual(fp, t, res);
t += d.dt;
nt++;
@@ -61,6 +67,7 @@ int main(int argc, char** argv)
printProgress(t);
#endif
}
fclose(fp);
timeStop = getTimeStamp();
stopProgress();
printf("Solution took %.2fs\n", timeStop - timeStart);

View File

@@ -49,3 +49,22 @@ void stopProgress()
printf("\n");
fflush(stdout);
}
FILE* initResidualWriter()
{
FILE* fp;
fp = fopen("residual.dat", "w");
if (fp == NULL) {
printf("Error!\n");
exit(EXIT_FAILURE);
}
return fp;
}
void writeResidual(FILE* fp, double ts, double res)
{
fprintf(fp, "%f, %f\n", ts, res);
}

View File

@@ -10,5 +10,7 @@
extern void initProgress(double);
extern void printProgress(double);
extern void stopProgress(void);
extern FILE* initResidualWriter(void);
extern void writeResidual(FILE*, double, double);
#endif

View File

@@ -209,11 +209,13 @@ void initSolver(Solver* s, Discretization* d, Parameter* p)
}
}
void solve(Solver* s, double* p, double* rhs)
double solve(Solver* s, double* p, double* rhs)
{
double res = multiGrid(s, p, rhs, 0, s->grid->imax, s->grid->jmax);
#ifdef VERBOSE
printf("Residuum: %.6f\n", res);
#endif
return res;
}

View File

@@ -15,7 +15,7 @@ void initSolver(Solver* s, Discretization* d, Parameter* p)
s->omega = p->omg;
}
void solve(Solver* solver, double* p, double* rhs)
double solve(Solver* solver, double* p, double* rhs)
{
int imax = solver->grid->imax;
int jmax = solver->grid->jmax;
@@ -73,4 +73,6 @@ void solve(Solver* solver, double* p, double* rhs)
#ifdef VERBOSE
printf("Solver took %d iterations to reach %f\n", it, sqrt(res));
#endif
return res;
}

View File

@@ -15,7 +15,7 @@ void initSolver(Solver* s, Discretization* d, Parameter* p)
s->omega = p->omg;
}
void solve(Solver* solver, double* p, double* rhs)
double solve(Solver* solver, double* p, double* rhs)
{
int imax = solver->grid->imax;
int jmax = solver->grid->jmax;
@@ -65,4 +65,6 @@ void solve(Solver* solver, double* p, double* rhs)
#ifdef VERBOSE
printf("Solver took %d iterations to reach %f\n", it, sqrt(res));
#endif
return res;
}

View File

@@ -22,6 +22,6 @@ typedef struct {
} Solver;
extern void initSolver(Solver*, Discretization*, Parameter*);
extern void solve(Solver*, double*, double*);
extern double solve(Solver*, double*, double*);
#endif