Newer
Older
/***************************************************************************
navierStokesSolver.h - description
-------------------
begin : Jan 13, 2013
copyright : (C) 2013 by Tomas Oberhuber
email : tomas.oberhuber@fjfi.cvut.cz
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef NAVIERSTOKESSOLVER_H_
#define NAVIERSTOKESSOLVER_H_
#include <core/tnlLogger.h>
#include <core/tnlHost.h>
#include <core/vectors/tnlVector.h>
#include <config/tnlParameterContainer.h>
#include <matrices/tnlCSRMatrix.h>
#include <solvers/preconditioners/tnlDummyPreconditioner.h>
#include <solvers/tnlSolverMonitor.h>
#include <operators/euler/fvm/tnlLaxFridrichs.h>
#include <operators/gradient/tnlCentralFDMGradient.h>
#include <operators/diffusion/tnlLinearDiffusion.h>
#include <solvers/cfd/navier-stokes/tnlNavierStokesSolver.h>
#include "navierStokesSolverMonitor.h"
#include "navierStokesBoundaryConditions.h"
template< typename Mesh,
typename EulerScheme >
class navierStokesSolver
{
public:
typedef typename Mesh :: RealType RealType;
typedef typename Mesh :: DeviceType DeviceType;
typedef typename Mesh :: IndexType IndexType;
typedef Mesh MeshType;
typedef tnlVector< RealType, DeviceType, IndexType> DofVectorType;
typedef tnlCSRMatrix< RealType, DeviceType, IndexType > DiscreteSolverMatrixType;
typedef tnlDummyPreconditioner< RealType, DeviceType, IndexType > DiscreteSolverPreconditioner;
enum BoundaryConditionType { dirichlet, neumann, noSlip };
enum ProblemType { riser, cavity };
navierStokesSolver();
static tnlString getTypeStatic();
tnlString getPrologHeader() const;
void writeProlog( tnlLogger& logger,
const tnlParameterContainer& parameters ) const;
template< typename Geom >
bool setMeshGeometry( Geom& geometry ) const;
bool setMeshGeometry( tnlLinearGridGeometry< 2, RealType, DeviceType, IndexType >& geometry ) const;
template< typename InitMesh >
bool initMesh( InitMesh& mesh, const tnlParameterContainer& parameters ) const;
template< typename Real, typename Device, typename Index, template< int, typename, typename, typename > class Geometry >
bool initMesh( tnlGrid< 1, Real, Device, Index, Geometry >& mesh,
const tnlParameterContainer& parameters ) const;
template< typename Real, typename Device, typename Index, template< int, typename, typename, typename > class Geometry >
bool initMesh( tnlGrid< 2, Real, Device, Index, Geometry >& mesh,
const tnlParameterContainer& parameters ) const;
template< typename Real, typename Device, typename Index, template< int, typename, typename, typename > class Geometry >
bool initMesh( tnlGrid< 3, Real, Device, Index, Geometry >& mesh,
const tnlParameterContainer& parameters ) const;
bool init( const tnlParameterContainer& parameters );
bool setInitialCondition( const tnlParameterContainer& parameters );
DofVectorType& getDofVector();
bool makeSnapshot( const RealType& t,
const IndexType step );
bool solve();
void GetExplicitRHS( const RealType& time,
const RealType& tau,
DofVectorType& _u,
DofVectorType& _fu );
tnlSolverMonitor< RealType, IndexType >* getSolverMonitor();
protected:
//RealType regularize( const RealType& r ) const;
ProblemType problem;
MeshType mesh;
DofVectorType dofVector, rhsDofVector;
RealType p_0, gravity, T;
tnlNavierStokesSolver< EulerScheme,
tnlLinearDiffusion< MeshType >,
navierStokesBoundaryConditions< MeshType > > nsSolver;
tnlLinearDiffusion< MeshType > u1Viscosity, u2Viscosity, eViscosity;
tnlCentralFDMGradient< MeshType > pressureGradient;
navierStokesBoundaryConditions< MeshType > boundaryConditions;
navierStokesSolverMonitor< RealType, IndexType > solverMonitor;
IndexType rhsIndex;
};
#include "navierStokesSolver_impl.h"
#endif /* NAVIERSTOKESSOLVER_H_ */