cuIBM
A GPU-based Immersed Boundary Method code
|
Generic Navier-Stokes solver in the presence of immersed boundaries. More...
#include <NSWithBody.h>
Public Member Functions | |
virtual void | writeCommon () |
Writes flow variables and position of body points into files. More... | |
virtual void | shutDown () |
Closes iteration file and force file. More... | |
Public Member Functions inherited from NavierStokesSolver< memoryType > | |
NavierStokesSolver (parameterDB *pDB=NULL, domain *dInfo=NULL) | |
Constructor. Copies the database and information about the computational grid. More... | |
virtual void | initialise () |
Initializes parameters, arrays and matrices required for the simulation. More... | |
void | stepTime () |
Calculates the variables at the next time step. More... | |
virtual void | writeData () |
Writes data into files. More... | |
bool | finished () |
Evaluates the condition required to stop the simulation. More... | |
virtual std::string | name () |
Returns the name of the current solver. More... | |
Protected Member Functions | |
virtual void | calculateForce () |
void | initialiseBodies () |
Stores the parameters of the simulation and initializes the location and motion of each immersed bodies. More... | |
void | updateBodies () |
Updates location and motion of each immersed body at current time. More... | |
template<> | |
void | calculateForce () |
Calculates forces acting on an immersed body. More... | |
Protected Member Functions inherited from NavierStokesSolver< memoryType > | |
void | initialiseCommon () |
Initializes parameters common to all Navier-Stokes solvers. More... | |
void | initialiseArrays (int numQ, int numLambda) |
Initializes all arrays required to solve the Navier-Stokes equations. More... | |
virtual void | initialiseFluxes () |
virtual void | initialiseFluxes (real *q) |
Initializes velocity flux vectors. More... | |
void | initialiseBoundaryArrays () |
Initializes boundary velocity arrays with values stored in the database. More... | |
void | assembleMatrices () |
Assembles matrices of the intermediate flux solver and the Poisson solver. More... | |
void | generateM () |
virtual void | generateL () |
virtual void | generateA (real alpha) |
void | generateBN () |
Generates approximate inverse of the matrix resulting from implicit velocity terms. More... | |
virtual void | generateQT () |
void | updateQ (real gamma) |
Doing nothing. More... | |
virtual void | generateC () |
void | generateRN () |
Generates explicit terms of the momentum equation. More... | |
void | calculateExplicitQTerms () |
virtual void | calculateExplicitLambdaTerms () |
Doing nothing. Used in methods that use the explicit pressure term in the intermediate velocity solve step, such as FadlunEtAlSolver and DFModifiedSolver. More... | |
virtual void | generateBC1 () |
virtual void | generateBC2 () |
virtual void | assembleRHS1 () |
Assembles the right hand-side of the system for the intermediate flux. More... | |
void | assembleRHS2 () |
Assembles the right hand-side of the Poisson system. More... | |
virtual void | solveIntermediateVelocity () |
Solves for the intermediate flux velocity. More... | |
virtual void | solvePoisson () |
Solves the Poisson system. More... | |
virtual void | projectionStep () |
Projects the flux onto the divergence-free field. More... | |
void | updateBoundaryConditions () |
Doing nothing. More... | |
virtual void | updateSolverState () |
Doing nothing. Used in immersed boundary methods when the body moves. More... | |
template<> | |
void | generateA (real alpha) |
Assembles the matrix from implicit terms of momentum equation. More... | |
template<> | |
void | generateBC1 () |
Generates inhomogeneous boundary conditions from the discrete Laplacian operator. More... | |
template<> | |
void | generateBC2 () |
Generates inhomogeneous boundary conditions from the discrete continuity equation. More... | |
template<> | |
void | generateL () |
Generates the discrete Laplacian matrix. More... | |
template<> | |
void | generateM () |
Generates the mass matrix and its inverse. More... | |
template<> | |
void | generateQT () |
Generates the discrete divergence matrix. More... | |
template<> | |
void | calculateExplicitQTerms () |
Generates explicit terms that arise from the velocity fluxes. More... | |
template<> | |
void | initialiseFluxes () |
Initializes velocity flux vectors (on the device). More... | |
template<> | |
void | generateC () |
Generates the matrix of the Poisson solver. More... | |
Protected Attributes | |
bodies< memoryType > | B |
bodies in the flow More... | |
real | forceX |
force acting on each body in the x-direction More... | |
real | forceY |
force acting on each body in the y-direction More... | |
std::ofstream | forceFile |
file to write the forces More... | |
Protected Attributes inherited from NavierStokesSolver< memoryType > | |
parameterDB * | paramDB |
database that contains all the simulation parameters More... | |
domain * | domInfo |
computational grid information More... | |
integrationScheme | intgSchm |
instance of the class integrationScheme More... | |
real | QCoeff |
cusp::coo_matrix< int, real, memoryType > | M |
diagonal mass matrix More... | |
cusp::coo_matrix< int, real, memoryType > | Minv |
inverse of the mass matrix More... | |
cusp::coo_matrix< int, real, memoryType > | L |
discrete Laplacian matrix More... | |
cusp::coo_matrix< int, real, memoryType > | A |
combination of mass and Laplacian matrices More... | |
cusp::coo_matrix< int, real, memoryType > | Q |
gradient matrix (and regularization matrix if immersed body) More... | |
cusp::coo_matrix< int, real, memoryType > | QT |
transposed gradient matrix (and interpolation matrix if immersed body) More... | |
cusp::coo_matrix< int, real, memoryType > | BN |
N-th order Taylor series expansion of the inverse of A . More... | |
cusp::coo_matrix< int, real, memoryType > | C |
matrix of the Poisson system More... | |
cusp::array1d< real, memoryType > | q |
velocity flux vector More... | |
cusp::array1d< real, memoryType > | qStar |
intermediate velocity flux vector More... | |
cusp::array1d< real, memoryType > | qOld |
velocity flux vector at the previous time-step More... | |
cusp::array1d< real, memoryType > | lambda |
pressure vector (and body forces if immersed body) More... | |
cusp::array1d< real, memoryType > | rn |
explicit terms of the momentum equation More... | |
cusp::array1d< real, memoryType > | bc1 |
inhomogeneous boundary conditions from the discrete Laplacian operator More... | |
cusp::array1d< real, memoryType > | bc2 |
inhomogeneous boundary conditions from the discrete continuity equation More... | |
cusp::array1d< real, memoryType > | rhs1 |
right hand-side of the system for the intermediate velocity flux vector More... | |
cusp::array1d< real, memoryType > | rhs2 |
right hand-side of the Poisson system More... | |
cusp::array1d< real, memoryType > | H |
hold convective terms from previous time step More... | |
cusp::array1d< real, memoryType > | temp1 |
temporary 1D Cusp array More... | |
cusp::array1d< real, memoryType > | temp2 |
temporary 1D Cusp array More... | |
cusp::array1d< real, memoryType > | bc [4] |
array that contains the boundary conditions of the rectangular domain More... | |
preconditioner< cusp::coo_matrix< int, real, memoryType > > * | PC1 |
preconditioner for the intermediate flux solver More... | |
preconditioner< cusp::coo_matrix< int, real, memoryType > > * | PC2 |
preconditioner for the Poisson solver More... | |
size_t | timeStep |
iteration number More... | |
size_t | subStep |
number of sub-iterations More... | |
size_t | iterationCount1 |
number of iteration to solve the intermediate fluxes More... | |
size_t | iterationCount2 |
number of iteration to solve the Poisson equation More... | |
Logger | logger |
instance of the class Logger to track time of different tasks More... | |
std::ofstream | iterationsFile |
file that contains the number of iterations More... | |
Generic Navier-Stokes solver in the presence of immersed boundaries.
The class inherits from the class NavierStokesSolver
.
Definition at line 21 of file NSWithBody.h.
|
protectedvirtual |
Reimplemented in TairaColoniusSolver< memoryType >.
Referenced by DirectForcingSolver< memoryType >::writeData().
|
protected |
Calculates forces acting on an immersed body.
Uses the control volume approach explained by Lai and Peskin (2000). This is a general method that can be used with any immersed boundary method. It uses only the velocity and pressure fields to calculate the forces, and does not involve any body forces on the immersed boundary. Currently works only for one body.
Definition at line 68 of file NSWithBody.cu.
References kernels::forceX(), and kernels::forceY().
|
protected |
Stores the parameters of the simulation and initializes the location and motion of each immersed bodies.
Definition at line 16 of file NSWithBody.cu.
References NavierStokesSolver< memoryType >::initialise().
Referenced by TairaColoniusSolver< memoryType >::initialise(), and DirectForcingSolver< memoryType >::initialise().
|
virtual |
Closes iteration file and force file.
Reimplemented from NavierStokesSolver< memoryType >.
Definition at line 159 of file NSWithBody.cu.
References io::printTimingInfo().
|
protected |
Updates location and motion of each immersed body at current time.
Definition at line 45 of file NSWithBody.cu.
Referenced by TairaColoniusSolver< memoryType >::updateSolverState(), and DirectForcingSolver< memoryType >::updateSolverState().
|
virtual |
Writes flow variables and position of body points into files.
Reimplemented from NavierStokesSolver< memoryType >.
Definition at line 136 of file NSWithBody.cu.
References NavierStokesSolver< memoryType >::writeCommon().
Referenced by TairaColoniusSolver< memoryType >::writeData(), and DirectForcingSolver< memoryType >::writeData().
|
protected |
bodies in the flow
Definition at line 24 of file NSWithBody.h.
|
protected |
file to write the forces
Definition at line 29 of file NSWithBody.h.
|
protected |
force acting on each body in the x-direction
Definition at line 26 of file NSWithBody.h.
Referenced by TairaColoniusSolver< memoryType >::calculateForce(), and TairaColoniusSolver< memoryType >::writeData().
|
protected |
force acting on each body in the y-direction
Definition at line 26 of file NSWithBody.h.
Referenced by TairaColoniusSolver< memoryType >::calculateForce(), and TairaColoniusSolver< memoryType >::writeData().