Commit 1f5a2fb1 authored by Tomáš Oberhuber's avatar Tomáš Oberhuber
Browse files

Refactoring the Lax-Fridrichs scheme, adding geometry to the tnlGrid.

parent 8b9d52dc
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -13,7 +13,7 @@ group Problem
   integer y-size(!)                    [Number of grid cells along y-axis.];   
   real max-inflow-velocity(1.0)        [];
   real max-outflow-velocity(0.8)       [];
   real start-up(1.0)                   [Start-up time of the riser.];
   real start-up(0.0)                   [Start-up time of the riser.];
   real mu(!)                           [Viscosity.];
   real p0(!)                           [Pressure for the initial condition.];
   real T(!)                            [Temperature.];
+8 −1
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@

#include <mesh/tnlGrid.h>
#include <schemes/euler/fvm/tnlLaxFridrichs.h>
#include <schemes/gradient/tnlCentralFDMGradient.h>

template< typename SolverStarter >
   template< typename RealType,
@@ -39,7 +40,13 @@ bool navierStokesSetter< SolverStarter > :: run( const tnlParameterContainer& pa
   {
      typedef tnlGrid< 2, RealType, DeviceType, IndexType > MeshType;
      if( schemeName == "lax-fridrichs" )
         return solverStarter. run< navierStokesSolver< MeshType, tnlLaxFridrichs< MeshType > > >( parameters );
         return solverStarter. run< navierStokesSolver< MeshType,
                                                        tnlLaxFridrichs< MeshType,
                                                                        tnlCentralFDMGradient< MeshType :: Dimensions,
                                                                                               typename MeshType :: RealType,
                                                                                               typename MeshType :: DeviceType,
                                                                                               typename MeshType :: IndexType > > > >
                                                        ( parameters );
   }
}

+3 −1
Original line number Diff line number Diff line
@@ -27,8 +27,10 @@
#include <solvers/tnlSolverMonitor.h>
#include "navierStokesSolverMonitor.h"
#include <schemes/euler/fvm/tnlLaxFridrichs.h>
#include <schemes/gradient/tnlCentralFDMGradient.h>

template< typename Mesh, typename EulerScheme >
template< typename Mesh,
          typename EulerScheme >
class navierStokesSolver
{
   public:
+32 −9
Original line number Diff line number Diff line
@@ -222,6 +222,27 @@ bool navierStokesSolver< Mesh, EulerScheme > :: makeSnapshot( const RealType& t,
   FileNameBaseNumberEnding( "u-", step, 5, ".tnl", fileName );
   if( ! u. save( fileName ) )
      return false;
   FileNameBaseNumberEnding( "rho-t-", step, 5, ".tnl", fileName );
   if( ! rho_t. save( fileName ) )
      return false;
   FileNameBaseNumberEnding( "rho-u1-t-", step, 5, ".tnl", fileName );
   if( ! rho_u1_t. save( fileName ) )
      return false;

   FileNameBaseNumberEnding( "rho-u2-t-", step, 5, ".tnl", fileName );
   if( ! rho_u2_t. save( fileName ) )
      return false;

   FileNameBaseNumberEnding( "rho-", step, 5, ".tnl", fileName );
   if( ! rho. save( fileName ) )
      return false;
   FileNameBaseNumberEnding( "rho-u1-", step, 5, ".tnl", fileName );
   if( ! rho_u1. save( fileName ) )
      return false;

   FileNameBaseNumberEnding( "rho-u2-", step, 5, ".tnl", fileName );
   if( ! rho_u2. save( fileName ) )
      return false;
   return true;
}

@@ -300,10 +321,16 @@ void navierStokesSolver< Mesh, EulerScheme > :: GetExplicitRHS( const RealType&
   rho_u1. bind( & u. getData()[ dofs ], dofs );
   rho_u2. bind( & u. getData()[ 2 * dofs ], dofs );

   eulerScheme. setRho( rho );
   eulerScheme. setRhoU1( rho_u1 );
   eulerScheme. setRhoU2( rho_u2 );

   rho_t. bind( & fu. getData()[ 0 ], dofs );
   rho_u1_t. bind( & fu. getData()[ dofs ], dofs );
   rho_u2_t. bind( & fu. getData()[ 2 * dofs ], dofs );



   updatePhysicalQuantities( rho, rho_u1, rho_u2 );

   /****
@@ -407,17 +434,13 @@ void navierStokesSolver< Mesh, EulerScheme > :: GetExplicitRHS( const RealType&
            const RealType u_sqr = u * u;
            const RealType v_sqr = v * v;
            eulerScheme. getExplicitRhs( c,
                                         rho,
                                         rho_u1,
                                         rho_u2,
                                         rho_t,
                                         rho_u1_t,
                                         rho_u2_t );
            
            rho_u1_t[ c ] += -( p[ e ] - p[ w ] ) / ( 2.0 * hx );
            rho_u2_t[ c ] += -( p[ n ] - p[ s ] ) / ( 2.0 * hy );
                                         rho_t[ c ],
                                         rho_u1_t[ c ],
                                         rho_u2_t[ c ] );
            
            //rho_u1_t[ c ] += -( p[ e ] - p[ w ] ) / ( 2.0 * hx );
            rho_u2_t[ c ] += //-( p[ n ] - p[ s ] ) / ( 2.0 * hy );
                             - startUpCoefficient * this -> gravity * this -> rho[ c ];
                  break;

            /***
             * Add the viscosity term
+57 −38
Original line number Diff line number Diff line
@@ -26,16 +26,18 @@ using namespace std;

template< typename Real,
          typename Device,
          typename Index >
tnlGrid< 1, Real, Device, Index> :: tnlGrid()
          typename Index,
          template< int, typename, typename, typename > class Geometry >
tnlGrid< 1, Real, Device, Index, Geometry > :: tnlGrid()
: dofs( 0 )
{
}

template< typename Real,
          typename Device,
          typename Index >
tnlString tnlGrid< 1, Real, Device, Index> :: getTypeStatic()
          typename Index,
          template< int, typename, typename, typename > class Geometry  >
tnlString tnlGrid< 1, Real, Device, Index, Geometry > :: getTypeStatic()
{
   return tnlString( "tnlGrid< " ) +
          tnlString( Dimensions ) + ", " +
@@ -46,16 +48,18 @@ tnlString tnlGrid< 1, Real, Device, Index> :: getTypeStatic()

template< typename Real,
          typename Device,
          typename Index >
tnlString tnlGrid< 1, Real, Device, Index> :: getType() const
          typename Index,
          template< int, typename, typename, typename > class Geometry  >
tnlString tnlGrid< 1, Real, Device, Index, Geometry > :: getType() const
{
   return this -> getTypeStatic();
}

template< typename Real,
          typename Device,
          typename Index >
void tnlGrid< 1, Real, Device, Index> :: setDimensions( const Index xSize )
          typename Index,
          template< int, typename, typename, typename > class Geometry  >
void tnlGrid< 1, Real, Device, Index, Geometry > :: setDimensions( const Index xSize )
{
   tnlAssert( xSize > 1,
              cerr << "The number of Elements along x-axis must be larger than 1." );
@@ -65,8 +69,9 @@ void tnlGrid< 1, Real, Device, Index> :: setDimensions( const Index xSize )

template< typename Real,
          typename Device,
          typename Index >
void tnlGrid< 1, Real, Device, Index> :: setDimensions( const tnlTuple< 1, Index >& dimensions )
          typename Index,
          template< int, typename, typename, typename > class Geometry  >
void tnlGrid< 1, Real, Device, Index, Geometry > :: setDimensions( const tnlTuple< 1, Index >& dimensions )
{
   tnlAssert( dimensions. x() > 1,
              cerr << "The number of Elements along x-axis must be larger than 1." );
@@ -76,48 +81,54 @@ void tnlGrid< 1, Real, Device, Index> :: setDimensions( const tnlTuple< 1, Index

template< typename Real,
          typename Device,
          typename Index >
const tnlTuple< 1, Index >& tnlGrid< 1, Real, Device, Index> :: getDimensions() const
          typename Index,
          template< int, typename, typename, typename > class Geometry  >
const tnlTuple< 1, Index >& tnlGrid< 1, Real, Device, Index, Geometry > :: getDimensions() const
{
   return this -> dimensions;
}

template< typename Real,
          typename Device,
          typename Index >
void tnlGrid< 1, Real, Device, Index> :: setOrigin( const tnlTuple< 1, Real >& origin )
          typename Index,
          template< int, typename, typename, typename > class Geometry  >
void tnlGrid< 1, Real, Device, Index, Geometry > :: setOrigin( const tnlTuple< 1, Real >& origin )
{
   this -> origin = origin;
}

template< typename Real,
          typename Device,
          typename Index >
const tnlTuple< 1, Real >& tnlGrid< 1, Real, Device, Index> :: getOrigin() const
          typename Index,
          template< int, typename, typename, typename > class Geometry  >
const tnlTuple< 1, Real >& tnlGrid< 1, Real, Device, Index, Geometry > :: getOrigin() const
{
   return this -> origin;
}

template< typename Real,
          typename Device,
          typename Index >
void tnlGrid< 1, Real, Device, Index> :: setProportions( const tnlTuple< 1, Real >& proportions )
          typename Index,
          template< int, typename, typename, typename > class Geometry  >
void tnlGrid< 1, Real, Device, Index, Geometry > :: setProportions( const tnlTuple< 1, Real >& proportions )
{
   this -> proportions = proportions;
}

template< typename Real,
          typename Device,
          typename Index >
const tnlTuple< 1, Real >& tnlGrid< 1, Real, Device, Index> :: getProportions() const
          typename Index,
          template< int, typename, typename, typename > class Geometry  >
const tnlTuple< 1, Real >& tnlGrid< 1, Real, Device, Index, Geometry > :: getProportions() const
{
   return this -> proportions;
}

template< typename Real,
          typename Device,
          typename Index >
void tnlGrid< 1, Real, Device, Index> :: setSpaceStep( const tnlTuple< 1, Real >& spaceStep )
          typename Index,
          template< int, typename, typename, typename > class Geometry  >
void tnlGrid< 1, Real, Device, Index, Geometry > :: setSpaceStep( const tnlTuple< 1, Real >& spaceStep )
{
   this -> proportions. x() = this -> dimensions. x() *
                              spaceStep. x();
@@ -125,8 +136,9 @@ void tnlGrid< 1, Real, Device, Index> :: setSpaceStep( const tnlTuple< 1, Real >

template< typename Real,
          typename Device,
          typename Index >
tnlTuple< 1, Real > tnlGrid< 1, Real, Device, Index> :: getSpaceStep() const
          typename Index,
          template< int, typename, typename, typename > class Geometry  >
tnlTuple< 1, Real > tnlGrid< 1, Real, Device, Index, Geometry > :: getSpaceStep() const
{
   tnlAssert( dimensions. x() > 0,
              cerr << "Cannot get the space step hx since number of Elements along the x axis is not known in tnlGrid "
@@ -140,8 +152,9 @@ tnlTuple< 1, Real > tnlGrid< 1, Real, Device, Index> :: getSpaceStep() const

template< typename Real,
          typename Device,
          typename Index >
Index tnlGrid< 1, Real, Device, Index> :: getElementIndex( const Index i ) const
          typename Index,
          template< int, typename, typename, typename > class Geometry >
Index tnlGrid< 1, Real, Device, Index, Geometry > :: getElementIndex( const Index i ) const
{
   tnlAssert( i < dimensions. x(),
              cerr << "Index i ( " << i
@@ -152,16 +165,18 @@ Index tnlGrid< 1, Real, Device, Index> :: getElementIndex( const Index i ) const

template< typename Real,
          typename Device,
          typename Index >
Index tnlGrid< 1, Real, Device, Index> :: getDofs() const
          typename Index,
          template< int, typename, typename, typename > class Geometry >
Index tnlGrid< 1, Real, Device, Index, Geometry > :: getDofs() const
{
   return this -> dofs;
};

template< typename Real,
          typename Device,
          typename Index >
bool tnlGrid< 1, Real, Device, Index> :: save( tnlFile& file ) const
          typename Index,
          template< int, typename, typename, typename > class Geometry >
bool tnlGrid< 1, Real, Device, Index, Geometry > :: save( tnlFile& file ) const
{
   if( ! tnlObject :: save( file ) )
      return false;
@@ -178,8 +193,9 @@ bool tnlGrid< 1, Real, Device, Index> :: save( tnlFile& file ) const

template< typename Real,
          typename Device,
          typename Index >
bool tnlGrid< 1, Real, Device, Index> :: load( tnlFile& file )
          typename Index,
          template< int, typename, typename, typename > class Geometry >
bool tnlGrid< 1, Real, Device, Index, Geometry > :: load( tnlFile& file )
{
   if( ! tnlObject :: load( file ) )
      return false;
@@ -197,25 +213,28 @@ bool tnlGrid< 1, Real, Device, Index> :: load( tnlFile& file )

template< typename Real,
          typename Device,
          typename Index >
bool tnlGrid< 1, Real, Device, Index> :: save( const tnlString& fileName ) const
          typename Index,
          template< int, typename, typename, typename > class Geometry >
bool tnlGrid< 1, Real, Device, Index, Geometry > :: save( const tnlString& fileName ) const
{
   return tnlObject :: save( fileName );
};

template< typename Real,
          typename Device,
          typename Index >
bool tnlGrid< 1, Real, Device, Index> :: load( const tnlString& fileName )
          typename Index,
          template< int, typename, typename, typename > class Geometry >
bool tnlGrid< 1, Real, Device, Index, Geometry > :: load( const tnlString& fileName )
{
   return tnlObject :: load( fileName );
};

template< typename Real,
           typename Device,
           typename Index >
           typename Index,
           template< int, typename, typename, typename > class Geometry >
   template< typename MeshFunction >
bool tnlGrid< 1, Real, Device, Index> :: write( const MeshFunction& function,
bool tnlGrid< 1, Real, Device, Index, Geometry > :: write( const MeshFunction& function,
                                                const tnlString& fileName,
                                                const tnlString& format ) const
{
Loading