/* * Copyright (C) 2022 NHR@FAU, University Erlangen-Nuremberg. * All rights reserved. * Use of this source code is governed by a MIT-style * license that can be found in the LICENSE file. */ #include #include #include #include #include #include "parameter.h" #include "progress.h" #include "solver.h" #include "particletracing.h" #include "timing.h" #include "vtkWriter.h" enum VARIANT { SOR = 1, RB, RBA }; int main (int argc, char** argv) { int rank; int variant = RB; double S, E; Parameter params; Solver solver; ParticleTracer particletracer; initParameter(¶ms); if (argc < 2) { printf("Usage: %s \n", argv[0]); exit(EXIT_SUCCESS); } readParameter(¶ms, argv[1]); if (argc == 3) { variant = atoi(argv[2]); } printParameter(¶ms); initSolver(&solver, ¶ms); initParticleTracer(&particletracer, ¶ms); printParticleTracerParameters(&particletracer); #ifndef VERBOSE initProgress(solver.te); #endif double tau = solver.tau; double te = solver.te; double t = 0.0; int nt = 0; void (*solver_generic[])() = {solve, solveRB, solveRBA}; S = getTimeStamp(); while (t <= te) { if (tau > 0.0) computeTimestep(&solver); setBoundaryConditions(&solver); setSpecialBoundaryCondition(&solver); computeFG(&solver); computeRHS(&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); t += solver.dt; nt++; #ifdef VERBOSE printf("TIME %f , TIMESTEP %f\n", t, solver.dt); #else printProgress(t); #endif } printf("Total particles : %d\n", particletracer.totalParticles); E = getTimeStamp(); stopProgress(); freeParticles(&particletracer); printf("Solution took %.2fs\n", E - S); writeResult(&solver); return EXIT_SUCCESS; }