Loading src/mesh/layers/tnlMeshSubentityStorageLayer.h +140 −5 Original line number Diff line number Diff line Loading @@ -25,11 +25,14 @@ template< typename ConfigTag, typename EntityTag, typename DimensionTraits, typename DimensionsTag, typename SubentityStorageTag = typename tnlMeshSubentitiesTraits< ConfigTag, EntityTag, DimensionTraits >::SubentityStorageTag > DimensionsTag >::SubentityStorageTag, typename SubentityOrientationStorage = tnlStorageTraits< tnlMeshConfigTraits< ConfigTag>:: template SubentityTraits< EntityTag, DimensionsTag >::orientationEnabled > > class tnlMeshSubentityStorageLayer; Loading @@ -49,6 +52,7 @@ template< typename ConfigTag, class tnlMeshSubentityStorageLayer< ConfigTag, EntityTag, DimensionsTag, tnlStorageTraits< true >, tnlStorageTraits< true > > : public tnlMeshSubentityStorageLayer< ConfigTag, EntityTag, Loading Loading @@ -189,6 +193,136 @@ template< typename ConfigTag, class tnlMeshSubentityStorageLayer< ConfigTag, EntityTag, DimensionsTag, tnlStorageTraits< true >, tnlStorageTraits< false > > : public tnlMeshSubentityStorageLayer< ConfigTag, EntityTag, typename DimensionsTag::Decrement > { typedef tnlMeshSubentityStorageLayer< ConfigTag, EntityTag, typename DimensionsTag::Decrement > BaseType; typedef tnlMeshSubentitiesTraits< ConfigTag, EntityTag, DimensionsTag > SubentityTraits; protected: typedef typename SubentityTraits::ContainerType ContainerType; typedef typename SubentityTraits::SharedContainerType SharedContainerType; typedef typename ContainerType::ElementType GlobalIndexType; typedef int LocalIndexType; typedef typename SubentityTraits::IdArrayType IdArrayType; tnlMeshSubentityStorageLayer() { this->subentitiesIndices.setValue( -1 ); this->sharedSubentitiesIndices.bind( this->subentitiesIndices ); this->sharedSubentitiesIndices.setName( "sharedSubentitiesIndices" ); //this->subentitiesIndices.setName( "subentitiesIndices" ); } /*~tnlMeshSubentityStorageLayer() { cout << " Destroying " << this->sharedSubentitiesIndices.getSize() << " subentities with "<< DimensionsTag::value << " dimensions." << endl; }*/ tnlMeshSubentityStorageLayer& operator = ( const tnlMeshSubentityStorageLayer& layer ) { BaseType::operator=( layer ); this->subentitiesIndices = layer.subentitiesIndices; return *this; } bool save( tnlFile& file ) const { if( ! BaseType::save( file ) || ! this->subentitiesIndices.save( file ) ) { cerr << "Saving of the entity subentities layer with " << DimensionsTag::value << " failed." << endl; return false; } return true; } bool load( tnlFile& file ) { if( ! BaseType::load( file ) || ! this->subentitiesIndices.load( file ) ) { cerr << "Loading of the entity subentities layer with " << DimensionsTag::value << " failed." << endl; return false; } this->sharedSubentitiesIndices.bind( this->subentitiesIndices ); return true; } void print( ostream& str ) const { BaseType::print( str ); str << endl; str << "\t Subentities with " << DimensionsTag::value << " dimensions are: " << subentitiesIndices << "."; } bool operator==( const tnlMeshSubentityStorageLayer& layer ) const { return ( BaseType::operator==( layer ) && subentitiesIndices == layer.subentitiesIndices ); } /**** * Make visible setters and getters of the lower subentities */ using BaseType::getSubentityIndex; using BaseType::setSubentityIndex; using BaseType::getSubentitiesIndices; /**** * Define setter/getter for the current level of the subentities */ void setSubentityIndex( DimensionsTag, const LocalIndexType localIndex, const GlobalIndexType globalIndex ) { this->subentitiesIndices[ localIndex ] = globalIndex; } GlobalIndexType getSubentityIndex( DimensionsTag, const LocalIndexType localIndex ) const { return this->subentitiesIndices[ localIndex ]; } SharedContainerType& getSubentitiesIndices( DimensionsTag ) { tnlAssert( this->subentitiesIndices.getData() == this->sharedSubentitiesIndices.getData(), ); return this->sharedSubentitiesIndices; } const SharedContainerType& getSubentitiesIndices( DimensionsTag ) const { tnlAssert( this->subentitiesIndices.getData() == this->sharedSubentitiesIndices.getData(), ); return this->sharedSubentitiesIndices; } using BaseType::subentityIdsArray; IdArrayType& subentityIdsArray( DimensionsTag ) { return this->subentitiesIndices; } private: IdArrayType subentitiesIndices; SharedContainerType sharedSubentitiesIndices; }; template< typename ConfigTag, typename EntityTag, typename DimensionsTag > class tnlMeshSubentityStorageLayer< ConfigTag, EntityTag, DimensionsTag, tnlStorageTraits< false >, tnlStorageTraits< false > > : public tnlMeshSubentityStorageLayer< ConfigTag, EntityTag, Loading @@ -202,7 +336,8 @@ template< typename ConfigTag, class tnlMeshSubentityStorageLayer< ConfigTag, EntityTag, tnlDimensionsTag< 0 >, tnlStorageTraits< true > > tnlStorageTraits< true >, tnlStorageTraits< false > > { typedef tnlDimensionsTag< 0 > DimensionsTag; Loading src/mesh/tnlMeshEntity.h +4 −4 Original line number Diff line number Diff line Loading @@ -337,7 +337,7 @@ class tnlMeshEntity } template< typename DimensionsTag > typename tnlMeshConfigTraits< ConfigTag >::template SubentityTraits< EntityTag, DimensionsTag >::OrientationArray& subentityOrientationsArray() typename tnlMeshConfigTraits< ConfigTag >::template SubentityTraits< EntityTag, DimensionsTag >::OrientationArrayType& subentityOrientationsArray() { return SubentityStorageLayers::subentityOrientationsArray( DimensionsTag() ); } Loading src/mesh/tnlMeshEntityInitializer.h +3 −2 Original line number Diff line number Diff line Loading @@ -239,8 +239,9 @@ class tnlMeshEntityInitializerLayer< ConfigTag, for( LocalIndexType i = 0; i < subentitySeeds.getSize(); i++ ) { cout << " Adding subentity " << subentityIdsArray[ i ] << endl; subentityIdsArray[ i ] = meshInitializer.findEntitySeedIndex( subentitySeeds[ i ] ); subentityOrientationsArray[ i ] = meshInitializer.template getReferenceOrientation< DimensionsTag >( subentitySeeds[ i ] ).createOrientation( subentitySeeds[ i ] ); GlobalIndexType subentityIndex = meshInitializer.findEntitySeedIndex( subentitySeeds[ i ] ); subentityIdsArray[ i ] = subentityIndex; subentityOrientationsArray[ i ] = meshInitializer.template getReferenceOrientation< DimensionsTag >( subentityIndex ).createOrientation( subentitySeeds[ i ] ); meshInitializer. template getSuperentityInitializer< DimensionsTag >(). addSuperentity( EntityDimensionsTag(), subentityIdsArray[ i ], entityIndex ); Loading src/mesh/tnlMeshInitializer.h +21 −7 Original line number Diff line number Diff line Loading @@ -87,43 +87,57 @@ class tnlMeshInitializer } template<typename SubDimensionsTag, typename EntityType > static typename tnlMeshConfigTraits< ConfigTag >::template SubentityTraits< typename EntityType::Tag, SubDimensionsTag >::IdArrayType& subentityIdsArray( EntityType& entity ) static typename tnlMeshConfigTraits< ConfigTag >::template SubentityTraits< typename EntityType::Tag, SubDimensionsTag >::IdArrayType& subentityIdsArray( EntityType& entity ) { return entity.template subentityIdsArray< SubDimensionsTag >(); } template< typename SuperDimensionsTag, typename MeshEntity> static typename tnlMeshConfigTraits< ConfigTag >::IdArrayAccessorType& superentityIdsArray( MeshEntity& entity ) static typename tnlMeshConfigTraits< ConfigTag >::IdArrayAccessorType& superentityIdsArray( MeshEntity& entity ) { return entity.template superentityIdsArray< SuperDimensionsTag >(); } template<typename SubDimensionsTag, typename MeshEntity > static typename tnlMeshConfigTraits< ConfigTag >::template SubentityTraits< typename MeshEntity::Tag, SubDimensionsTag >::OrientationArrayType& subentityOrientationsArray( MeshEntity &entity ) { return entity.template subentityOrientationsArray< SubDimensionsTag >(); } template< typename DimensionsTag > typename tnlMeshConfigTraits< ConfigTag >::template EntityTraits< DimensionsTag>::ContainerType& meshEntitiesArray() typename tnlMeshConfigTraits< ConfigTag >::template EntityTraits< DimensionsTag>::ContainerType& meshEntitiesArray() { return mesh->template entitiesArray< DimensionsTag >(); } template< typename DimensionsTag, typename SuperDimensionsTag > typename tnlMeshConfigTraits< ConfigTag >::GlobalIdArrayType& meshSuperentityIdsArray() typename tnlMeshConfigTraits< ConfigTag >::GlobalIdArrayType& meshSuperentityIdsArray() { return mesh->template superentityIdsArray< DimensionsTag, SuperDimensionsTag >(); } static void setVertexPoint( typename MeshType::VertexType& vertex, const typename MeshType::PointType& point ) static void setVertexPoint( typename MeshType::VertexType& vertex, const typename MeshType::PointType& point ) { vertex.setPoint( point ); } template< typename DimensionsTag > tnlMeshSuperentityStorageInitializer< ConfigTag, typename tnlMeshConfigTraits< ConfigTag >::template EntityTraits< DimensionsTag >::Tag >& getSuperentityInitializer() tnlMeshSuperentityStorageInitializer< ConfigTag, typename tnlMeshConfigTraits< ConfigTag >::template EntityTraits< DimensionsTag >::Tag >& getSuperentityInitializer() { return BaseType::getSuperentityInitializer( DimensionsTag() ); } typedef typename tnlMeshTraits< ConfigTag >::GlobalIndexType GlobalIndexType; template< typename DimensionsTag > const tnlMeshEntityReferenceOrientation< ConfigTag, typename tnlMeshConfigTraits< ConfigTag >::template EntityTraits< DimensionsTag >::Tag >& getReferenceOrientation( GlobalIndexType index) const const tnlMeshEntityReferenceOrientation< ConfigTag, typename tnlMeshConfigTraits< ConfigTag >::template EntityTraits< DimensionsTag >::Tag >& getReferenceOrientation( GlobalIndexType index) const { return BaseType::getReferenceOrientation( DimensionsTag(), index); } Loading src/mesh/traits/tnlMeshSubentitiesTraits.h +1 −1 Original line number Diff line number Diff line Loading @@ -44,7 +44,7 @@ class tnlMeshSubentitiesTraits typedef typename Tag::Tag SubentityTag; typedef tnlMeshEntity< ConfigTag, SubentityTag > SubentityType; typedef tnlMeshEntitySeed< ConfigTag, SubentityTag > Seed; typedef tnlMeshEntityOrientation< ConfigTag, EntityTag > Orientation; typedef tnlMeshEntityOrientation< ConfigTag, SubentityTag > Orientation; typedef tnlStorageTraits< storageEnabled > SubentityStorageTag; Loading Loading
src/mesh/layers/tnlMeshSubentityStorageLayer.h +140 −5 Original line number Diff line number Diff line Loading @@ -25,11 +25,14 @@ template< typename ConfigTag, typename EntityTag, typename DimensionTraits, typename DimensionsTag, typename SubentityStorageTag = typename tnlMeshSubentitiesTraits< ConfigTag, EntityTag, DimensionTraits >::SubentityStorageTag > DimensionsTag >::SubentityStorageTag, typename SubentityOrientationStorage = tnlStorageTraits< tnlMeshConfigTraits< ConfigTag>:: template SubentityTraits< EntityTag, DimensionsTag >::orientationEnabled > > class tnlMeshSubentityStorageLayer; Loading @@ -49,6 +52,7 @@ template< typename ConfigTag, class tnlMeshSubentityStorageLayer< ConfigTag, EntityTag, DimensionsTag, tnlStorageTraits< true >, tnlStorageTraits< true > > : public tnlMeshSubentityStorageLayer< ConfigTag, EntityTag, Loading Loading @@ -189,6 +193,136 @@ template< typename ConfigTag, class tnlMeshSubentityStorageLayer< ConfigTag, EntityTag, DimensionsTag, tnlStorageTraits< true >, tnlStorageTraits< false > > : public tnlMeshSubentityStorageLayer< ConfigTag, EntityTag, typename DimensionsTag::Decrement > { typedef tnlMeshSubentityStorageLayer< ConfigTag, EntityTag, typename DimensionsTag::Decrement > BaseType; typedef tnlMeshSubentitiesTraits< ConfigTag, EntityTag, DimensionsTag > SubentityTraits; protected: typedef typename SubentityTraits::ContainerType ContainerType; typedef typename SubentityTraits::SharedContainerType SharedContainerType; typedef typename ContainerType::ElementType GlobalIndexType; typedef int LocalIndexType; typedef typename SubentityTraits::IdArrayType IdArrayType; tnlMeshSubentityStorageLayer() { this->subentitiesIndices.setValue( -1 ); this->sharedSubentitiesIndices.bind( this->subentitiesIndices ); this->sharedSubentitiesIndices.setName( "sharedSubentitiesIndices" ); //this->subentitiesIndices.setName( "subentitiesIndices" ); } /*~tnlMeshSubentityStorageLayer() { cout << " Destroying " << this->sharedSubentitiesIndices.getSize() << " subentities with "<< DimensionsTag::value << " dimensions." << endl; }*/ tnlMeshSubentityStorageLayer& operator = ( const tnlMeshSubentityStorageLayer& layer ) { BaseType::operator=( layer ); this->subentitiesIndices = layer.subentitiesIndices; return *this; } bool save( tnlFile& file ) const { if( ! BaseType::save( file ) || ! this->subentitiesIndices.save( file ) ) { cerr << "Saving of the entity subentities layer with " << DimensionsTag::value << " failed." << endl; return false; } return true; } bool load( tnlFile& file ) { if( ! BaseType::load( file ) || ! this->subentitiesIndices.load( file ) ) { cerr << "Loading of the entity subentities layer with " << DimensionsTag::value << " failed." << endl; return false; } this->sharedSubentitiesIndices.bind( this->subentitiesIndices ); return true; } void print( ostream& str ) const { BaseType::print( str ); str << endl; str << "\t Subentities with " << DimensionsTag::value << " dimensions are: " << subentitiesIndices << "."; } bool operator==( const tnlMeshSubentityStorageLayer& layer ) const { return ( BaseType::operator==( layer ) && subentitiesIndices == layer.subentitiesIndices ); } /**** * Make visible setters and getters of the lower subentities */ using BaseType::getSubentityIndex; using BaseType::setSubentityIndex; using BaseType::getSubentitiesIndices; /**** * Define setter/getter for the current level of the subentities */ void setSubentityIndex( DimensionsTag, const LocalIndexType localIndex, const GlobalIndexType globalIndex ) { this->subentitiesIndices[ localIndex ] = globalIndex; } GlobalIndexType getSubentityIndex( DimensionsTag, const LocalIndexType localIndex ) const { return this->subentitiesIndices[ localIndex ]; } SharedContainerType& getSubentitiesIndices( DimensionsTag ) { tnlAssert( this->subentitiesIndices.getData() == this->sharedSubentitiesIndices.getData(), ); return this->sharedSubentitiesIndices; } const SharedContainerType& getSubentitiesIndices( DimensionsTag ) const { tnlAssert( this->subentitiesIndices.getData() == this->sharedSubentitiesIndices.getData(), ); return this->sharedSubentitiesIndices; } using BaseType::subentityIdsArray; IdArrayType& subentityIdsArray( DimensionsTag ) { return this->subentitiesIndices; } private: IdArrayType subentitiesIndices; SharedContainerType sharedSubentitiesIndices; }; template< typename ConfigTag, typename EntityTag, typename DimensionsTag > class tnlMeshSubentityStorageLayer< ConfigTag, EntityTag, DimensionsTag, tnlStorageTraits< false >, tnlStorageTraits< false > > : public tnlMeshSubentityStorageLayer< ConfigTag, EntityTag, Loading @@ -202,7 +336,8 @@ template< typename ConfigTag, class tnlMeshSubentityStorageLayer< ConfigTag, EntityTag, tnlDimensionsTag< 0 >, tnlStorageTraits< true > > tnlStorageTraits< true >, tnlStorageTraits< false > > { typedef tnlDimensionsTag< 0 > DimensionsTag; Loading
src/mesh/tnlMeshEntity.h +4 −4 Original line number Diff line number Diff line Loading @@ -337,7 +337,7 @@ class tnlMeshEntity } template< typename DimensionsTag > typename tnlMeshConfigTraits< ConfigTag >::template SubentityTraits< EntityTag, DimensionsTag >::OrientationArray& subentityOrientationsArray() typename tnlMeshConfigTraits< ConfigTag >::template SubentityTraits< EntityTag, DimensionsTag >::OrientationArrayType& subentityOrientationsArray() { return SubentityStorageLayers::subentityOrientationsArray( DimensionsTag() ); } Loading
src/mesh/tnlMeshEntityInitializer.h +3 −2 Original line number Diff line number Diff line Loading @@ -239,8 +239,9 @@ class tnlMeshEntityInitializerLayer< ConfigTag, for( LocalIndexType i = 0; i < subentitySeeds.getSize(); i++ ) { cout << " Adding subentity " << subentityIdsArray[ i ] << endl; subentityIdsArray[ i ] = meshInitializer.findEntitySeedIndex( subentitySeeds[ i ] ); subentityOrientationsArray[ i ] = meshInitializer.template getReferenceOrientation< DimensionsTag >( subentitySeeds[ i ] ).createOrientation( subentitySeeds[ i ] ); GlobalIndexType subentityIndex = meshInitializer.findEntitySeedIndex( subentitySeeds[ i ] ); subentityIdsArray[ i ] = subentityIndex; subentityOrientationsArray[ i ] = meshInitializer.template getReferenceOrientation< DimensionsTag >( subentityIndex ).createOrientation( subentitySeeds[ i ] ); meshInitializer. template getSuperentityInitializer< DimensionsTag >(). addSuperentity( EntityDimensionsTag(), subentityIdsArray[ i ], entityIndex ); Loading
src/mesh/tnlMeshInitializer.h +21 −7 Original line number Diff line number Diff line Loading @@ -87,43 +87,57 @@ class tnlMeshInitializer } template<typename SubDimensionsTag, typename EntityType > static typename tnlMeshConfigTraits< ConfigTag >::template SubentityTraits< typename EntityType::Tag, SubDimensionsTag >::IdArrayType& subentityIdsArray( EntityType& entity ) static typename tnlMeshConfigTraits< ConfigTag >::template SubentityTraits< typename EntityType::Tag, SubDimensionsTag >::IdArrayType& subentityIdsArray( EntityType& entity ) { return entity.template subentityIdsArray< SubDimensionsTag >(); } template< typename SuperDimensionsTag, typename MeshEntity> static typename tnlMeshConfigTraits< ConfigTag >::IdArrayAccessorType& superentityIdsArray( MeshEntity& entity ) static typename tnlMeshConfigTraits< ConfigTag >::IdArrayAccessorType& superentityIdsArray( MeshEntity& entity ) { return entity.template superentityIdsArray< SuperDimensionsTag >(); } template<typename SubDimensionsTag, typename MeshEntity > static typename tnlMeshConfigTraits< ConfigTag >::template SubentityTraits< typename MeshEntity::Tag, SubDimensionsTag >::OrientationArrayType& subentityOrientationsArray( MeshEntity &entity ) { return entity.template subentityOrientationsArray< SubDimensionsTag >(); } template< typename DimensionsTag > typename tnlMeshConfigTraits< ConfigTag >::template EntityTraits< DimensionsTag>::ContainerType& meshEntitiesArray() typename tnlMeshConfigTraits< ConfigTag >::template EntityTraits< DimensionsTag>::ContainerType& meshEntitiesArray() { return mesh->template entitiesArray< DimensionsTag >(); } template< typename DimensionsTag, typename SuperDimensionsTag > typename tnlMeshConfigTraits< ConfigTag >::GlobalIdArrayType& meshSuperentityIdsArray() typename tnlMeshConfigTraits< ConfigTag >::GlobalIdArrayType& meshSuperentityIdsArray() { return mesh->template superentityIdsArray< DimensionsTag, SuperDimensionsTag >(); } static void setVertexPoint( typename MeshType::VertexType& vertex, const typename MeshType::PointType& point ) static void setVertexPoint( typename MeshType::VertexType& vertex, const typename MeshType::PointType& point ) { vertex.setPoint( point ); } template< typename DimensionsTag > tnlMeshSuperentityStorageInitializer< ConfigTag, typename tnlMeshConfigTraits< ConfigTag >::template EntityTraits< DimensionsTag >::Tag >& getSuperentityInitializer() tnlMeshSuperentityStorageInitializer< ConfigTag, typename tnlMeshConfigTraits< ConfigTag >::template EntityTraits< DimensionsTag >::Tag >& getSuperentityInitializer() { return BaseType::getSuperentityInitializer( DimensionsTag() ); } typedef typename tnlMeshTraits< ConfigTag >::GlobalIndexType GlobalIndexType; template< typename DimensionsTag > const tnlMeshEntityReferenceOrientation< ConfigTag, typename tnlMeshConfigTraits< ConfigTag >::template EntityTraits< DimensionsTag >::Tag >& getReferenceOrientation( GlobalIndexType index) const const tnlMeshEntityReferenceOrientation< ConfigTag, typename tnlMeshConfigTraits< ConfigTag >::template EntityTraits< DimensionsTag >::Tag >& getReferenceOrientation( GlobalIndexType index) const { return BaseType::getReferenceOrientation( DimensionsTag(), index); } Loading
src/mesh/traits/tnlMeshSubentitiesTraits.h +1 −1 Original line number Diff line number Diff line Loading @@ -44,7 +44,7 @@ class tnlMeshSubentitiesTraits typedef typename Tag::Tag SubentityTag; typedef tnlMeshEntity< ConfigTag, SubentityTag > SubentityType; typedef tnlMeshEntitySeed< ConfigTag, SubentityTag > Seed; typedef tnlMeshEntityOrientation< ConfigTag, EntityTag > Orientation; typedef tnlMeshEntityOrientation< ConfigTag, SubentityTag > Orientation; typedef tnlStorageTraits< storageEnabled > SubentityStorageTag; Loading