Loading CMakeLists.txt +2 −2 Original line number Diff line number Diff line Loading @@ -79,7 +79,7 @@ endif() # set Debug/Release options set( CMAKE_CXX_FLAGS "-std=c++11 -pthread -Wall -Wno-unused-local-typedefs -Wno-unused-variable" ) set( CMAKE_CXX_FLAGS_DEBUG "-g" ) set( CMAKE_CXX_FLAGS_DEBUG "-g -rdynamic -ftemplate-backtrace-limit=0" ) set( CMAKE_CXX_FLAGS_RELEASE "-O3 -march=native -mtune=native -DNDEBUG" ) #set( CMAKE_CXX_FLAGS_RELEASE "-O3 -march=native -mtune=native -DNDEBUG -ftree-vectorizer-verbose=1 -ftree-vectorize -fopt-info-vec-missed -funroll-loops" ) # pass -rdynamic only in Debug mode Loading Loading @@ -229,7 +229,7 @@ if( ${WITH_CUDA} ) endif() endif() endif() set( CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} ; ${CUDA_ARCH} -D_FORCE_INLINES ) set( CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} ; ${CUDA_ARCH} -D_FORCE_INLINES -lineinfo ) # TODO: this is necessary only due to a bug in cmake set( CUDA_ADD_LIBRARY_OPTIONS -shared ) endif() Loading src/Examples/CMakeLists.txt +6 −3 Original line number Diff line number Diff line Loading @@ -3,6 +3,12 @@ add_subdirectory( heat-equation ) add_subdirectory( transport-equation ) add_subdirectory( navier-stokes ) add_subdirectory( inviscid-flow ) add_subdirectory( inviscid-flow-sw ) add_subdirectory( inviscid-flow-vl ) #add_subdirectory( mean-curvature-flow ) add_subdirectory( flow ) add_subdirectory( flow-sw ) add_subdirectory( flow-vl ) #add_subdirectory( mean-curvature-flow ) #add_subdirectory( hamilton-jacobi ) Loading @@ -11,6 +17,3 @@ add_subdirectory( inviscid-flow ) #add_subdirectory( hamilton-jacobi-parallel-map ) #add_subdirectory( fast-sweeping-map ) #add_subdirectory( narrow-band ) #add_subdirectory( incompressible-navier-stokes ) #add_subdirectory( mean-curvature-flow ) src/Examples/advection/Riemann1DBoundaryConditions.h 0 → 100644 +150 −0 Original line number Diff line number Diff line //** coppied and changed /*************************************************************************** tnlRiemann1DBoundaryConditions.h - description ------------------- begin : Nov 17, 2014 copyright : (C) 2014 by 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 TNLRIEMANN1DBOUNDARYCONDITIONS_H_ #define TNLRIEMANN1DBOUNDARYCONDITIONS_H_ #pragma once #include <TNL/Operators/Operator.h> #include <TNL/Functions/Analytic/Constant.h> #include <TNL/Functions/FunctionAdapter.h> #include <TNL/Functions/MeshFunction.h> namespace TNL { namespace Operators { template< typename Mesh, typename Function = Functions::Analytic::Constant< Mesh::getMeshDimensions(), typename Mesh::RealType >, int MeshEntitiesDimensions = Mesh::getMeshDimensions(), typename Real = typename Mesh::RealType, typename Index = typename Mesh::IndexType > class Riemann1DBoundaryConditions : public Operator< Mesh, Functions::MeshBoundaryDomain, MeshEntitiesDimensions, MeshEntitiesDimensions, Real, Index > { public: typedef Mesh MeshType; typedef Function FunctionType; typedef Real RealType; typedef typename MeshType::DeviceType DeviceType; typedef Index IndexType; typedef Pointers::SharedPointer< Mesh > MeshPointer; typedef Containers::Vector< RealType, DeviceType, IndexType> DofVectorType; typedef typename MeshType::VertexType VertexType; static constexpr int getMeshDimensions() { return MeshType::meshDimensions; } static void configSetup( Config::ConfigDescription& config, const String& prefix = "" ) { Function::configSetup( config, prefix ); } bool setup( const MeshPointer& meshPointer, const Config::ParameterContainer& parameters, const String& prefix = "" ) { return Functions::FunctionAdapter< MeshType, FunctionType >::template setup< MeshPointer >( this->function, meshPointer, parameters, prefix ); } void setFunction( const Function& function ) { this->function = function; } Function& getFunction() { return this->function; } const Function& getFunction() const { return this->function; } template< typename EntityType, typename MeshFunction > __cuda_callable__ const RealType operator()( const MeshFunction& u, const EntityType& entity, const RealType& time = 0 ) const { const MeshType& mesh = entity.getMesh(); const auto& neighbourEntities = entity.getNeighbourEntities(); if( entity.getCoordinates().x() == 0 ) return 1.0; else return 0.0; //tady se asi delaji okrajove podminky //static_assert( EntityType::getDimensions() == MeshEntitiesDimensions, "Wrong mesh entity dimensions." ); } template< typename EntityType > __cuda_callable__ IndexType getLinearSystemRowLength( const MeshType& mesh, const IndexType& index, const EntityType& entity ) const { return 1; } template< typename PreimageFunction, typename MeshEntity, typename Matrix, typename Vector > __cuda_callable__ void setMatrixElements( const PreimageFunction& u, const MeshEntity& entity, const RealType& time, const RealType& tau, Matrix& matrix, Vector& b ) const { typename Matrix::MatrixRow matrixRow = matrix.getRow( entity.getIndex() ); const IndexType& index = entity.getIndex(); matrixRow.setElement( 0, index, 1.0 ); b[ index ] = Functions::FunctionAdapter< MeshType, Function >::getValue( this->function, entity, time ); } protected: Function function; //static_assert( Device::DeviceType == Function::Device::DeviceType ); }; template< typename Mesh, typename Function > std::ostream& operator << ( std::ostream& str, const Riemann1DBoundaryConditions< Mesh, Function >& bc ) { str << "Riemann1D boundary conditions: vector = " << bc.getVector(); return str; } } // namespace Operators } // namespace TNL #endif /* TNLRIEMANN1DBOUNDARYCONDITIONS_H_ */ src/Examples/advection/Riemann2DBoundaryConditions.h 0 → 100644 +153 −0 Original line number Diff line number Diff line //** coppied and changed /*************************************************************************** tnlRiemann2DBoundaryConditions.h - description ------------------- begin : Nov 17, 2014 copyright : (C) 2014 by 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 TNLRIEMANN2DBOUNDARYCONDITIONS_H_ #define TNLRIEMANN2DBOUNDARYCONDITIONS_H_ #pragma once #include <TNL/Operators/Operator.h> #include <TNL/Functions/Analytic/Constant.h> #include <TNL/Functions/FunctionAdapter.h> #include <TNL/Functions/MeshFunction.h> namespace TNL { namespace Operators { template< typename Mesh, typename Function = Functions::Analytic::Constant< Mesh::getMeshDimensions(), typename Mesh::RealType >, int MeshEntitiesDimensions = Mesh::getMeshDimensions(), typename Real = typename Mesh::RealType, typename Index = typename Mesh::IndexType > class Riemann2DBoundaryConditions : public Operator< Mesh, Functions::MeshBoundaryDomain, MeshEntitiesDimensions, MeshEntitiesDimensions, Real, Index > { public: typedef Mesh MeshType; typedef Function FunctionType; typedef Real RealType; typedef typename MeshType::DeviceType DeviceType; typedef Index IndexType; typedef Pointers::SharedPointer< Mesh > MeshPointer; typedef Containers::Vector< RealType, DeviceType, IndexType> DofVectorType; typedef typename MeshType::VertexType VertexType; static constexpr int getMeshDimensions() { return MeshType::meshDimensions; } static void configSetup( Config::ConfigDescription& config, const String& prefix = "" ) { Function::configSetup( config, prefix ); } bool setup( const MeshPointer& meshPointer, const Config::ParameterContainer& parameters, const String& prefix = "" ) { return Functions::FunctionAdapter< MeshType, FunctionType >::template setup< MeshPointer >( this->function, meshPointer, parameters, prefix ); } void setFunction( const Function& function ) { this->function = function; } Function& getFunction() { return this->function; } const Function& getFunction() const { return this->function; } template< typename EntityType, typename MeshFunction > __cuda_callable__ const RealType operator()( const MeshFunction& u, const EntityType& entity, const RealType& time = 0 ) const { const MeshType& mesh = entity.getMesh(); const auto& neighbourEntities = entity.getNeighbourEntities(); typedef typename MeshType::Cell Cell; int count = mesh.template getEntitiesCount< Cell >(); count = std::sqrt(count); if( entity.getCoordinates().x() < count * 0.5 ) return 1; else return 0; //tady se asi delaji okrajove podminky //static_assert( EntityType::getDimensions() == MeshEntitiesDimensions, "Wrong mesh entity dimensions." ); } template< typename EntityType > __cuda_callable__ IndexType getLinearSystemRowLength( const MeshType& mesh, const IndexType& index, const EntityType& entity ) const { return 1; } template< typename PreimageFunction, typename MeshEntity, typename Matrix, typename Vector > __cuda_callable__ void setMatrixElements( const PreimageFunction& u, const MeshEntity& entity, const RealType& time, const RealType& tau, Matrix& matrix, Vector& b ) const { typename Matrix::MatrixRow matrixRow = matrix.getRow( entity.getIndex() ); const IndexType& index = entity.getIndex(); matrixRow.setElement( 0, index, 1.0 ); b[ index ] = Functions::FunctionAdapter< MeshType, Function >::getValue( this->function, entity, time ); } protected: Function function; //static_assert( Device::DeviceType == Function::Device::DeviceType ); }; template< typename Mesh, typename Function > std::ostream& operator << ( std::ostream& str, const Riemann2DBoundaryConditions< Mesh, Function >& bc ) { str << "Riemann2D boundary conditions: vector = " << bc.getVector(); return str; } } // namespace Operators } // namespace TNL #endif /* RIEMANN2DBOUNDARYCONDITIONS_H_ */ src/Examples/advection/tnl-run-advection 0 → 100644 +28 −0 Original line number Diff line number Diff line #!/usr/bin/env bash tnl-grid-setup --dimensions 1 \ --origin-x 0.0 \ --proportions-x 1.0 \ --size-x 50 \ #tnl-init --test-function sin-wave \ # --output-file init.tnl ~/bak/tnl/Debug/bin/tnl-advection-dbg --time-discretisation explicit \ --time-step 2.0e-2 \ --boundary-conditions-constant 0 \ --discrete-solver euler \ --snapshot-period 1.0\ --final-time 2.0 \ --artifical-viscosity 0.5 \ --begin exp \ --move advection \ --advection-speedX 0.2 \ --dimension 1 \ --realSize 1.0 tnl-view --mesh mesh.tnl --input-files *tnl tnl-diff --mesh mesh.tnl \ --input-files a-*.tnl u-*.tnl \ --mode halves \ Loading
CMakeLists.txt +2 −2 Original line number Diff line number Diff line Loading @@ -79,7 +79,7 @@ endif() # set Debug/Release options set( CMAKE_CXX_FLAGS "-std=c++11 -pthread -Wall -Wno-unused-local-typedefs -Wno-unused-variable" ) set( CMAKE_CXX_FLAGS_DEBUG "-g" ) set( CMAKE_CXX_FLAGS_DEBUG "-g -rdynamic -ftemplate-backtrace-limit=0" ) set( CMAKE_CXX_FLAGS_RELEASE "-O3 -march=native -mtune=native -DNDEBUG" ) #set( CMAKE_CXX_FLAGS_RELEASE "-O3 -march=native -mtune=native -DNDEBUG -ftree-vectorizer-verbose=1 -ftree-vectorize -fopt-info-vec-missed -funroll-loops" ) # pass -rdynamic only in Debug mode Loading Loading @@ -229,7 +229,7 @@ if( ${WITH_CUDA} ) endif() endif() endif() set( CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} ; ${CUDA_ARCH} -D_FORCE_INLINES ) set( CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS} ; ${CUDA_ARCH} -D_FORCE_INLINES -lineinfo ) # TODO: this is necessary only due to a bug in cmake set( CUDA_ADD_LIBRARY_OPTIONS -shared ) endif() Loading
src/Examples/CMakeLists.txt +6 −3 Original line number Diff line number Diff line Loading @@ -3,6 +3,12 @@ add_subdirectory( heat-equation ) add_subdirectory( transport-equation ) add_subdirectory( navier-stokes ) add_subdirectory( inviscid-flow ) add_subdirectory( inviscid-flow-sw ) add_subdirectory( inviscid-flow-vl ) #add_subdirectory( mean-curvature-flow ) add_subdirectory( flow ) add_subdirectory( flow-sw ) add_subdirectory( flow-vl ) #add_subdirectory( mean-curvature-flow ) #add_subdirectory( hamilton-jacobi ) Loading @@ -11,6 +17,3 @@ add_subdirectory( inviscid-flow ) #add_subdirectory( hamilton-jacobi-parallel-map ) #add_subdirectory( fast-sweeping-map ) #add_subdirectory( narrow-band ) #add_subdirectory( incompressible-navier-stokes ) #add_subdirectory( mean-curvature-flow )
src/Examples/advection/Riemann1DBoundaryConditions.h 0 → 100644 +150 −0 Original line number Diff line number Diff line //** coppied and changed /*************************************************************************** tnlRiemann1DBoundaryConditions.h - description ------------------- begin : Nov 17, 2014 copyright : (C) 2014 by 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 TNLRIEMANN1DBOUNDARYCONDITIONS_H_ #define TNLRIEMANN1DBOUNDARYCONDITIONS_H_ #pragma once #include <TNL/Operators/Operator.h> #include <TNL/Functions/Analytic/Constant.h> #include <TNL/Functions/FunctionAdapter.h> #include <TNL/Functions/MeshFunction.h> namespace TNL { namespace Operators { template< typename Mesh, typename Function = Functions::Analytic::Constant< Mesh::getMeshDimensions(), typename Mesh::RealType >, int MeshEntitiesDimensions = Mesh::getMeshDimensions(), typename Real = typename Mesh::RealType, typename Index = typename Mesh::IndexType > class Riemann1DBoundaryConditions : public Operator< Mesh, Functions::MeshBoundaryDomain, MeshEntitiesDimensions, MeshEntitiesDimensions, Real, Index > { public: typedef Mesh MeshType; typedef Function FunctionType; typedef Real RealType; typedef typename MeshType::DeviceType DeviceType; typedef Index IndexType; typedef Pointers::SharedPointer< Mesh > MeshPointer; typedef Containers::Vector< RealType, DeviceType, IndexType> DofVectorType; typedef typename MeshType::VertexType VertexType; static constexpr int getMeshDimensions() { return MeshType::meshDimensions; } static void configSetup( Config::ConfigDescription& config, const String& prefix = "" ) { Function::configSetup( config, prefix ); } bool setup( const MeshPointer& meshPointer, const Config::ParameterContainer& parameters, const String& prefix = "" ) { return Functions::FunctionAdapter< MeshType, FunctionType >::template setup< MeshPointer >( this->function, meshPointer, parameters, prefix ); } void setFunction( const Function& function ) { this->function = function; } Function& getFunction() { return this->function; } const Function& getFunction() const { return this->function; } template< typename EntityType, typename MeshFunction > __cuda_callable__ const RealType operator()( const MeshFunction& u, const EntityType& entity, const RealType& time = 0 ) const { const MeshType& mesh = entity.getMesh(); const auto& neighbourEntities = entity.getNeighbourEntities(); if( entity.getCoordinates().x() == 0 ) return 1.0; else return 0.0; //tady se asi delaji okrajove podminky //static_assert( EntityType::getDimensions() == MeshEntitiesDimensions, "Wrong mesh entity dimensions." ); } template< typename EntityType > __cuda_callable__ IndexType getLinearSystemRowLength( const MeshType& mesh, const IndexType& index, const EntityType& entity ) const { return 1; } template< typename PreimageFunction, typename MeshEntity, typename Matrix, typename Vector > __cuda_callable__ void setMatrixElements( const PreimageFunction& u, const MeshEntity& entity, const RealType& time, const RealType& tau, Matrix& matrix, Vector& b ) const { typename Matrix::MatrixRow matrixRow = matrix.getRow( entity.getIndex() ); const IndexType& index = entity.getIndex(); matrixRow.setElement( 0, index, 1.0 ); b[ index ] = Functions::FunctionAdapter< MeshType, Function >::getValue( this->function, entity, time ); } protected: Function function; //static_assert( Device::DeviceType == Function::Device::DeviceType ); }; template< typename Mesh, typename Function > std::ostream& operator << ( std::ostream& str, const Riemann1DBoundaryConditions< Mesh, Function >& bc ) { str << "Riemann1D boundary conditions: vector = " << bc.getVector(); return str; } } // namespace Operators } // namespace TNL #endif /* TNLRIEMANN1DBOUNDARYCONDITIONS_H_ */
src/Examples/advection/Riemann2DBoundaryConditions.h 0 → 100644 +153 −0 Original line number Diff line number Diff line //** coppied and changed /*************************************************************************** tnlRiemann2DBoundaryConditions.h - description ------------------- begin : Nov 17, 2014 copyright : (C) 2014 by 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 TNLRIEMANN2DBOUNDARYCONDITIONS_H_ #define TNLRIEMANN2DBOUNDARYCONDITIONS_H_ #pragma once #include <TNL/Operators/Operator.h> #include <TNL/Functions/Analytic/Constant.h> #include <TNL/Functions/FunctionAdapter.h> #include <TNL/Functions/MeshFunction.h> namespace TNL { namespace Operators { template< typename Mesh, typename Function = Functions::Analytic::Constant< Mesh::getMeshDimensions(), typename Mesh::RealType >, int MeshEntitiesDimensions = Mesh::getMeshDimensions(), typename Real = typename Mesh::RealType, typename Index = typename Mesh::IndexType > class Riemann2DBoundaryConditions : public Operator< Mesh, Functions::MeshBoundaryDomain, MeshEntitiesDimensions, MeshEntitiesDimensions, Real, Index > { public: typedef Mesh MeshType; typedef Function FunctionType; typedef Real RealType; typedef typename MeshType::DeviceType DeviceType; typedef Index IndexType; typedef Pointers::SharedPointer< Mesh > MeshPointer; typedef Containers::Vector< RealType, DeviceType, IndexType> DofVectorType; typedef typename MeshType::VertexType VertexType; static constexpr int getMeshDimensions() { return MeshType::meshDimensions; } static void configSetup( Config::ConfigDescription& config, const String& prefix = "" ) { Function::configSetup( config, prefix ); } bool setup( const MeshPointer& meshPointer, const Config::ParameterContainer& parameters, const String& prefix = "" ) { return Functions::FunctionAdapter< MeshType, FunctionType >::template setup< MeshPointer >( this->function, meshPointer, parameters, prefix ); } void setFunction( const Function& function ) { this->function = function; } Function& getFunction() { return this->function; } const Function& getFunction() const { return this->function; } template< typename EntityType, typename MeshFunction > __cuda_callable__ const RealType operator()( const MeshFunction& u, const EntityType& entity, const RealType& time = 0 ) const { const MeshType& mesh = entity.getMesh(); const auto& neighbourEntities = entity.getNeighbourEntities(); typedef typename MeshType::Cell Cell; int count = mesh.template getEntitiesCount< Cell >(); count = std::sqrt(count); if( entity.getCoordinates().x() < count * 0.5 ) return 1; else return 0; //tady se asi delaji okrajove podminky //static_assert( EntityType::getDimensions() == MeshEntitiesDimensions, "Wrong mesh entity dimensions." ); } template< typename EntityType > __cuda_callable__ IndexType getLinearSystemRowLength( const MeshType& mesh, const IndexType& index, const EntityType& entity ) const { return 1; } template< typename PreimageFunction, typename MeshEntity, typename Matrix, typename Vector > __cuda_callable__ void setMatrixElements( const PreimageFunction& u, const MeshEntity& entity, const RealType& time, const RealType& tau, Matrix& matrix, Vector& b ) const { typename Matrix::MatrixRow matrixRow = matrix.getRow( entity.getIndex() ); const IndexType& index = entity.getIndex(); matrixRow.setElement( 0, index, 1.0 ); b[ index ] = Functions::FunctionAdapter< MeshType, Function >::getValue( this->function, entity, time ); } protected: Function function; //static_assert( Device::DeviceType == Function::Device::DeviceType ); }; template< typename Mesh, typename Function > std::ostream& operator << ( std::ostream& str, const Riemann2DBoundaryConditions< Mesh, Function >& bc ) { str << "Riemann2D boundary conditions: vector = " << bc.getVector(); return str; } } // namespace Operators } // namespace TNL #endif /* RIEMANN2DBOUNDARYCONDITIONS_H_ */
src/Examples/advection/tnl-run-advection 0 → 100644 +28 −0 Original line number Diff line number Diff line #!/usr/bin/env bash tnl-grid-setup --dimensions 1 \ --origin-x 0.0 \ --proportions-x 1.0 \ --size-x 50 \ #tnl-init --test-function sin-wave \ # --output-file init.tnl ~/bak/tnl/Debug/bin/tnl-advection-dbg --time-discretisation explicit \ --time-step 2.0e-2 \ --boundary-conditions-constant 0 \ --discrete-solver euler \ --snapshot-period 1.0\ --final-time 2.0 \ --artifical-viscosity 0.5 \ --begin exp \ --move advection \ --advection-speedX 0.2 \ --dimension 1 \ --realSize 1.0 tnl-view --mesh mesh.tnl --input-files *tnl tnl-diff --mesh mesh.tnl \ --input-files a-*.tnl u-*.tnl \ --mode halves \