diff --git a/src/lbm/boundary/factories/DefaultBoundaryHandling.h b/src/lbm/boundary/factories/DefaultBoundaryHandling.h index 1e196a12c07d697ec4fb68364011aa66057c01a7..328bd1aacddc3a5ae9835659b527c63a60ab2b2a 100644 --- a/src/lbm/boundary/factories/DefaultBoundaryHandling.h +++ b/src/lbm/boundary/factories/DefaultBoundaryHandling.h @@ -89,7 +89,18 @@ public: const real_t pressure0, const real_t pressure1 ) { - DefaultBoundaryHandlingFactory factory ( flagFieldID, pdfFieldID, flagUIDSet, velocity0, velocity1, pressure0, pressure1 ); + return addBoundaryHandlingToStorage(bs, identifier, flagFieldID, pdfFieldID, flagUIDSet, velocity0, velocity1, pressure0, pressure1, BoundaryHandling::Mode::OPTIMIZED_SPARSE_TRAVERSAL); + } + + static BlockDataID addBoundaryHandlingToStorage( const shared_ptr< StructuredBlockStorage > & bs, const std::string & identifier, + BlockDataID flagFieldID, BlockDataID pdfFieldID, const Set< FlagUID > & flagUIDSet, + const Vector3<real_t> & velocity0, + const Vector3<real_t> & velocity1, + const real_t pressure0, + const real_t pressure1, + const typename BoundaryHandling::Mode boundaryHandlingTraversalMode ) + { + DefaultBoundaryHandlingFactory factory ( flagFieldID, pdfFieldID, flagUIDSet, velocity0, velocity1, pressure0, pressure1, boundaryHandlingTraversalMode ); return bs->addStructuredBlockData< BoundaryHandling >( factory, identifier ); } @@ -110,8 +121,9 @@ public: DefaultBoundaryHandlingFactory( const BlockDataID & flagField, const BlockDataID & pdfField, const Set< FlagUID > & flagUIDSet, - const Velocity velocity0, const Velocity velocity1, - const real_t pressure0, const real_t pressure1 ); + const Velocity velocity0, const Velocity velocity1, + const real_t pressure0, const real_t pressure1, + const typename BoundaryHandling::Mode boundaryHandlingTraversalMode ); BoundaryHandling * operator()( walberla::IBlock * const block, const walberla::StructuredBlockStorage * const storage ) const; @@ -124,6 +136,8 @@ private: Velocity velocity0_, velocity1_; real_t pressure0_, pressure1_; + const typename BoundaryHandling::Mode boundaryHandlingTraversalMode_; + }; // class DefaultBoundaryHandlingFactory @@ -143,16 +157,17 @@ template <typename LatticeModel, typename FlagFieldT > DefaultBoundaryHandlingFactory<LatticeModel, FlagFieldT>::DefaultBoundaryHandlingFactory( const BlockDataID & flagField, const BlockDataID & pdfField, const Set< FlagUID > & flagUIDSet, const Velocity velocity0, const Velocity velocity1, - const real_t pressure0, const real_t pressure1 ) : + const real_t pressure0, const real_t pressure1, + const typename BoundaryHandling::Mode boundaryHandlingTraversalMode ) : flagField_( flagField ), pdfField_( pdfField ), flagUIDSet_(flagUIDSet), velocity0_( velocity0 ), velocity1_( velocity1 ), - pressure0_( pressure0 ), pressure1_( pressure1 ) + pressure0_( pressure0 ), pressure1_( pressure1 ), boundaryHandlingTraversalMode_( boundaryHandlingTraversalMode ) { } template <typename LatticeModel, typename FlagFieldT > typename DefaultBoundaryHandlingFactory<LatticeModel, FlagFieldT>::BoundaryHandling * DefaultBoundaryHandlingFactory<LatticeModel, FlagFieldT>::operator()( walberla::IBlock * const block, - const walberla::StructuredBlockStorage * const /*storage*/ ) const + const walberla::StructuredBlockStorage * const /*storage*/ ) const { PdfFieldLM * const pdfField = block->getData< PdfFieldLM >( pdfField_ ); FlagFieldT * const flagField = block->getData< FlagFieldT >( flagField_ ); @@ -167,7 +182,8 @@ DefaultBoundaryHandlingFactory<LatticeModel, FlagFieldT>::operator()( walberla:: BcSimpleUBB ( getVelocity0BoundaryUID(), getVelocity0(), pdfField, velocity0_ ), BcSimpleUBB ( getVelocity1BoundaryUID(), getVelocity1(), pdfField, velocity1_ ), BcSimplePressure( getPressure0BoundaryUID(), getPressure0(), pdfField, pressure0_ ), - BcSimplePressure( getPressure1BoundaryUID(), getPressure1(), pdfField, pressure1_ ) + BcSimplePressure( getPressure1BoundaryUID(), getPressure1(), pdfField, pressure1_ ), + boundaryHandlingTraversalMode_ ); return handling; diff --git a/src/lbm/boundary/factories/ExtendedBoundaryHandlingFactory.h b/src/lbm/boundary/factories/ExtendedBoundaryHandlingFactory.h index 4c08292b5638039717c3a5f2fa0f6c6e0eee9c68..118065cff9670fa67b3c4055b9199e56087930bc 100644 --- a/src/lbm/boundary/factories/ExtendedBoundaryHandlingFactory.h +++ b/src/lbm/boundary/factories/ExtendedBoundaryHandlingFactory.h @@ -87,9 +87,16 @@ public: typedef walberla::boundary::BoundaryHandling< FlagFieldT, Stencil, BcNoSlip, BcFreeSlip, BcPressure, BcUBB, BcOutlet, BcCurved > BoundaryHandling; static BlockDataID addBoundaryHandlingToStorage( const shared_ptr< StructuredBlockStorage > & bs, const std::string & identifier, - BlockDataID flagFieldID, BlockDataID pdfFieldID, const Set< FlagUID > & flagUIDSet ) + BlockDataID flagFieldID, BlockDataID pdfFieldID, const Set< FlagUID > & flagUIDSet) { - ExtendedBoundaryHandlingFactory factory ( flagFieldID, pdfFieldID, flagUIDSet ); + return addBoundaryHandlingToStorage(bs, identifier, pdfFieldID, pdfFieldID, flagUIDSet,BoundaryHandling::Mode::OPTIMIZED_SPARSE_TRAVERSAL ); + } + + static BlockDataID addBoundaryHandlingToStorage( const shared_ptr< StructuredBlockStorage > & bs, const std::string & identifier, + BlockDataID flagFieldID, BlockDataID pdfFieldID, const Set< FlagUID > & flagUIDSet, + const typename BoundaryHandling::Mode boundaryHandlingTraversalMode ) + { + ExtendedBoundaryHandlingFactory factory ( flagFieldID, pdfFieldID, flagUIDSet, boundaryHandlingTraversalMode ); return bs->addStructuredBlockData< BoundaryHandling >( factory, identifier ); } @@ -109,7 +116,8 @@ public: static const walberla::BoundaryUID & getCurvedBoundaryUID() { static BoundaryUID uid( "Curved" ); return uid; } - ExtendedBoundaryHandlingFactory( const BlockDataID & flagField, const BlockDataID & pdfField, const Set< FlagUID > & flagUIDSet ); + ExtendedBoundaryHandlingFactory( const BlockDataID & flagField, const BlockDataID & pdfField, const Set< FlagUID > & flagUIDSet, + const typename BoundaryHandling::Mode boundaryHandlingTraversalMode ); BoundaryHandling * operator()( walberla::IBlock * const block, const walberla::StructuredBlockStorage * const storage ) const; @@ -119,6 +127,8 @@ private: const Set< FlagUID > flagUIDSet_; + const typename BoundaryHandling::Mode boundaryHandlingTraversalMode_; + }; // class ExtendedBoundaryHandlingFactory @@ -132,8 +142,9 @@ private: //********************************************************************************************************************** template <typename LatticeModel, typename FlagFieldT > ExtendedBoundaryHandlingFactory<LatticeModel, FlagFieldT>::ExtendedBoundaryHandlingFactory( - const BlockDataID & flagField, const BlockDataID & pdfField, const Set< FlagUID > & flagUIDSet ) : - flagField_( flagField ), pdfField_( pdfField ), flagUIDSet_(flagUIDSet) + const BlockDataID & flagField, const BlockDataID & pdfField, const Set< FlagUID > & flagUIDSet, + const typename BoundaryHandling::Mode boundaryHandlingTraversalMode ) : + flagField_( flagField ), pdfField_( pdfField ), flagUIDSet_(flagUIDSet), boundaryHandlingTraversalMode_(boundaryHandlingTraversalMode) { } @@ -158,7 +169,8 @@ ExtendedBoundaryHandlingFactory<LatticeModel, FlagFieldT>::operator()( IBlock * BcPressure ( getPressureBoundaryUID(), getPressure(), pdfField ), BcUBB ( getUBBBoundaryUID(), getUBB(), pdfField, flagField, storage->getLevel(*block), block->getAABB() ), BcOutlet ( getOutletBoundaryUID(), getOutlet(), pdfField, flagField, mask ), - BcCurved ( getCurvedBoundaryUID(), getCurved(), pdfField, flagField, mask ) + BcCurved ( getCurvedBoundaryUID(), getCurved(), pdfField, flagField, mask ), + boundaryHandlingTraversalMode_ ); return handling;