Skip to content
Snippets Groups Projects
eulerProblem.h 3.97 KiB
Newer Older
  • Learn to ignore specific revisions
  • #ifndef eulerPROBLEM_H_
    #define eulerPROBLEM_H_
    
    #include <problems/tnlPDEProblem.h>
    #include <functions/tnlMeshFunction.h>
    
    template< typename Mesh,
              typename BoundaryCondition,
              typename RightHandSide,
               typename DifferentialOperator >
    class eulerProblem:
       public tnlPDEProblem< Mesh,
                             typename DifferentialOperator::RealType,
                             typename Mesh::DeviceType,
                             typename DifferentialOperator::IndexType >
    {
       public:
    
          typedef typename DifferentialOperator::RealType RealType;
          typedef typename Mesh::DeviceType DeviceType;
          typedef typename DifferentialOperator::IndexType IndexType;
          typedef tnlMeshFunction< Mesh > MeshFunctionType;
          typedef tnlPDEProblem< Mesh, RealType, DeviceType, IndexType > BaseType;
    
          using typename BaseType::MeshType;
          using typename BaseType::DofVectorType;
          using typename BaseType::MeshDependentDataType;
    
          typedef tnlMeshFunction<Mesh,Mesh::getMeshDimensions(),RealType>MeshFunction;
        //definition
    	tnlVector< RealType, DeviceType, IndexType > _uRho;
    	tnlVector< RealType, DeviceType, IndexType > _uRhoVelocity;
    	tnlVector< RealType, DeviceType, IndexType > _uEnergy;
    
    	tnlVector< RealType, DeviceType, IndexType > _fuRho;
    	tnlVector< RealType, DeviceType, IndexType > _fuRhoVelocity;
    	tnlVector< RealType, DeviceType, IndexType > _fuEnergy;
    
    
    
          static tnlString getTypeStatic();
    
          tnlVector< RealType, DeviceType, IndexType > rho;
          tnlVector< RealType, DeviceType, IndexType > rhoVel;
          tnlVector< RealType, DeviceType, IndexType > energy;
    
          tnlVector< RealType, DeviceType, IndexType > data;
    
          tnlVector< RealType, DeviceType, IndexType > pressure;
          tnlVector< RealType, DeviceType, IndexType > velocity;
    
          double gamma;
    
          tnlString getPrologHeader() const;
    
          void writeProlog( tnlLogger& logger,
                            const tnlParameterContainer& parameters ) const;
    
          bool setup( const tnlParameterContainer& parameters );
    
          bool setInitialCondition( const tnlParameterContainer& parameters,
                                    const MeshType& mesh,
                                    DofVectorType& dofs,
                                    MeshDependentDataType& meshDependentData );
    
          template< typename Matrix >
          bool setupLinearSystem( const MeshType& mesh,
                                  Matrix& matrix );
    
          bool makeSnapshot( const RealType& time,
                             const IndexType& step,
                             const MeshType& mesh,
                             DofVectorType& dofs,
                             MeshDependentDataType& meshDependentData );
    
          IndexType getDofs( const MeshType& mesh ) const;
    
          void bindDofs( const MeshType& mesh,
                         DofVectorType& dofs );
    
          void getExplicitRHS( const RealType& time,
                               const RealType& tau,
                               const MeshType& mesh,
                               DofVectorType& _u,
                               DofVectorType& _fu,
                               MeshDependentDataType& meshDependentData );
    
          template< typename Matrix >
          void assemblyLinearSystem( const RealType& time,
                                     const RealType& tau,
                                     const MeshType& mesh,
                                     DofVectorType& dofs,
                                     Matrix& matrix,
                                     DofVectorType& rightHandSide,
                                     MeshDependentDataType& meshDependentData );
    
          
          bool postIterate( const RealType& time,
                            const RealType& tau,
                            const MeshType& mesh,
                            DofVectorType& dofs,
                            MeshDependentDataType& meshDependentData );
    
    
       protected:
    
          DifferentialOperator differentialOperator;
          BoundaryCondition boundaryCondition;
          RightHandSide rightHandSide;
    };
    
    #include "eulerProblem_impl.h"
    
    #endif /* eulerPROBLEM_H_ */