Skip to content
Snippets Groups Projects
heatEquationSolver.h 3.65 KiB
Newer Older
  • Learn to ignore specific revisions
  • /***************************************************************************
                              simpleProblemSolver.h  -  description
                                 -------------------
        begin                : Feb 23, 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 HEATEQUATIONSOLVER_H_
    #define HEATEQUATIONSOLVER_H_
    
    #include <matrices/tnlCSRMatrix.h>
    #include <solvers/preconditioners/tnlDummyPreconditioner.h>
    #include <solvers/tnlSolverMonitor.h>
    #include <core/tnlLogger.h>
    #include <core/vectors/tnlVector.h>
    #include <core/vectors/tnlSharedVector.h>
    
    #include <solvers/pde/tnlExplicitUpdater.h>
    
    #include "heatEquationSolver.h"
    #include "tnlAnalyticSolution.h"
    
    
    
    template< typename Mesh,
              typename Diffusion,
              typename BoundaryCondition,
    
              typename RightHandSide >
    
       typedef typename Diffusion::RealType RealType;
       typedef typename Mesh::DeviceType DeviceType;
       typedef typename Diffusion::IndexType IndexType;
    
       typedef Mesh MeshType;
       typedef tnlVector< RealType, DeviceType, IndexType> DofVectorType;
    
       static tnlString getTypeStatic();
    
       tnlString getPrologHeader() const;
    
       void writeProlog( tnlLogger& logger,
                         const tnlParameterContainer& parameters ) const;
    
       bool init( const tnlParameterContainer& parameters );
    
    
       bool setInitialCondition( const tnlParameterContainer& parameters,
                                 const MeshType& mesh );
    
       bool makeSnapshot( const RealType& time,
                          const IndexType& step,
                          const MeshType& mesh );
    
       IndexType getDofs( const MeshType& mesh ) const;
    
    
       IndexType getAuxiliaryDofs( const MeshType& mesh ) const;
    
    
       void bindDofs( const MeshType& mesh,
    
                      DofVectorType& dofs );
    
       void bindAuxiliaryDofs( const MeshType& mesh,
                               DofVectorType& auxiliaryDofs );
    
    
       void GetExplicitRHS( const RealType& time,
                            const RealType& tau,
    
                            const MeshType& mesh,
    
                            DofVectorType& _u,
                            DofVectorType& _fu );
    
       tnlSolverMonitor< RealType, IndexType >* getSolverMonitor();
       
       protected:
    
    
       tnlSharedVector< RealType, DeviceType, IndexType > numericalSolution,
                                                          exactSolution,
                                                          analyticLaplace,
                                                          numericalLaplace;
    
    
       tnlExplicitUpdater< Mesh, DofVectorType, BoundaryCondition, Diffusion > explicitUpdater;
    
    
       //AnalyticSpaceFunction analyticSpaceFunction;
       //TimeFunction timeFunction;
       //AnalyticSolution< MeshType, RealType, IndexType > analyticSolution;
    
    
       BoundaryCondition boundaryCondition;
    
       //IndexType ifLaplaceCompare, ifSolutionCompare;
    
    };
    
    #include "heatEquationSolver_impl.h"
    
    #endif /* HEATEQUATIONSOLVER_H_ */