/* * 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 "particletracing.h" #include "progress.h" #include "timing.h" #include int main(int argc, char** argv) { int rank; double S, E; Parameter params; Solver solver; ParticleTracer particletracer; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); initParameter(¶ms); if (argc < 2) { printf("Usage: %s \n", argv[0]); exit(EXIT_SUCCESS); } readParameter(¶ms, argv[1]); initSolver(&solver, ¶ms); initParticleTracer(&particletracer, ¶ms, &solver); if (rank == 0) { printParameter(¶ms); } printParticleTracerParameters(&particletracer); initProgress(solver.te); double tau = solver.tau; double te = solver.te; double t = 0.0; S = getTimeStamp(); while (t <= te) { if (tau > 0.0) { computeTimestep(&solver); } setBoundaryConditions(&solver); setSpecialBoundaryCondition(&solver); setObjectBoundaryCondition(&solver); computeFG(&solver); computeRHS(&solver); multiGrid(&solver); adaptUV(&solver); trace(&particletracer, solver.u, solver.v, solver.s, t); t += solver.dt; #ifdef VERBOSE if (rank == 0) { printf("TIME %f , TIMESTEP %f\n", t, solver.dt); } #else printProgress(t); #endif } E = getTimeStamp(); stopProgress(); if (rank == 0) { printf("Solution took %.2fs\n", E - S); } collectResult(&solver); freeParticles(&particletracer); MPI_Finalize(); return EXIT_SUCCESS; }