/* * Copyright (C) 2022 NHR@FAU, University Erlangen-Nuremberg. * All rights reserved. This file is part of nusif-solver. * Use of this source code is governed by a MIT style * license that can be found in the LICENSE file. */ #ifndef __SOLVER_H_ #define __SOLVER_H_ #include "grid.h" #include "parameter.h" enum OBJECTBOUNDARY { NONE = 0, /* Front Corners */ FRONTTOPLEFTCORNER, FRONTTOPRIGHTCORNER, FRONTBOTTOMLEFTCORNER, FRONTBOTTOMRIGHTCORNER, /* Back Corners */ BACKTOPLEFTCORNER, BACKTOPRIGHTCORNER, BACKBOTTOMLEFTCORNER, BACKBOTTOMRIGHTCORNER, /* Faces */ FRONTFACE, BACKFACE, LEFTFACE, RIGHTFACE, TOPFACE, BOTTOMFACE, /* Front Lines remaining after Corners and Faces */ FRONTLEFTLINE, FRONTRIGHTLINE, FRONTTOPLINE, FRONTBOTTOMLINE, /* Bottom Lines remaining after Corners and Faces */ BACKLEFTLINE, BACKRIGHTLINE, BACKTOPLINE, BACKBOTTOMLINE, /* Mid Lines remaining after Corners and Faces */ MIDTOPLEFTLINE, MIDTOPRIGHTLINE, MIDBOTTOMLEFTLINE, MIDBOTTOMRIGHTLINE, /* Local where its an object but not a boundary */ LOCAL }; enum BC { NOSLIP = 1, SLIP, OUTFLOW, PERIODIC }; /// @brief enum SHAPE { NOSHAPE = 0, RECT, CIRCLE }; typedef struct { /* geometry and grid information */ Grid grid; /* arrays */ double *p, *rhs; double *f, *g, *h; double *u, *v, *w; int* seg; /* parameters */ double eps, omega, rho; double re, tau, gamma; double gx, gy, gz; /* time stepping */ int itermax; double dt, te; double dtBound; char* problem; int bcLeft, bcRight, bcBottom, bcTop, bcFront, bcBack; } Solver; extern void initSolver(Solver*, Parameter*); extern void computeRHS(Solver*); extern void solve(Solver*); extern void solveRB(Solver*); extern void solveRBA(Solver*); extern void normalizePressure(Solver*); extern void computeTimestep(Solver*); extern void setBoundaryConditions(Solver*); extern void setObjectBoundaryCondition(Solver*); extern void setSpecialBoundaryCondition(Solver*); extern void computeFG(Solver*); extern void adaptUV(Solver*); extern void writeResult(Solver*); extern void printGrid(Solver*, int*); #endif