Loading src/TNL/Meshes/MeshDetails/initializer/MeshEntityInitializer.h +7 −8 Original line number Diff line number Diff line Loading @@ -39,10 +39,9 @@ template< typename MeshConfig, MeshConfig::subentityStorage( typename MeshTraits< MeshConfig >::template EntityTraits< SuperdimensionsTag::value >::EntityTopology(), SubdimensionsTag::value ), bool SubentityOrientationStorage = // FIXME false, // MeshTraits< MeshConfig >::template SubentityTraits< EntityTopology, DimensionsTag::value >::orientationEnabled && // MeshTraits< MeshConfig >::template EntityTraits< DimensionsTag::value >::orientationNeeded, MeshConfig::subentityOrientationStorage( typename MeshTraits< MeshConfig >::template EntityTraits< SuperdimensionsTag::value >::EntityTopology(), SubdimensionsTag::value ) && MeshTraits< MeshConfig >::template EntityTraits< SubdimensionsTag::value >::orientationNeeded, // storage in the subentity bool SuperentityStorage = MeshConfig::superentityStorage( typename MeshTraits< MeshConfig >::template EntityTraits< SubdimensionsTag::value >::EntityTopology(), Loading Loading @@ -211,7 +210,7 @@ public: auto& superentity = mesh.template getEntity< SuperdimensionsTag::value >( superentityIndex ); auto subentitySeeds = SubentitySeedsCreatorType::create( meshInitializer.getSubvertices( superentity, superentityIndex ) ); auto& subentityOrientationsArray = InitializerType::template subentityOrientationsArray< SuperdimensionsTag >( superentity ); auto& subentityOrientationsArray = InitializerType::template subentityOrientationsArray< SubdimensionsTag >( superentity ); for( LocalIndexType i = 0; i < subentitySeeds.getSize(); i++ ) { Loading @@ -219,7 +218,7 @@ public: meshInitializer.template setSubentityIndex< SubdimensionsTag::value >( superentity, superentityIndex, i, subentityIndex ); superentityInitializer.addSuperentity( subentityIndex, superentityIndex ); subentityOrientationsArray[ i ] = meshInitializer.template getReferenceOrientation< SuperdimensionsTag >( subentityIndex ).createOrientation( subentitySeeds[ i ] ); subentityOrientationsArray[ i ] = meshInitializer.template getReferenceOrientation< SubdimensionsTag >( subentityIndex ).createOrientation( subentitySeeds[ i ] ); } } Loading Loading @@ -272,14 +271,14 @@ public: auto& superentity = mesh.template getEntity< SuperdimensionsTag::value >( superentityIndex ); auto subentitySeeds = SubentitySeedsCreatorType::create( meshInitializer.getSubvertices( superentity, superentityIndex ) ); auto& subentityOrientationsArray = InitializerType::template subentityOrientationsArray< SuperdimensionsTag >( superentity ); auto& subentityOrientationsArray = InitializerType::template subentityOrientationsArray< SubdimensionsTag >( superentity ); for( LocalIndexType i = 0; i < subentitySeeds.getSize(); i++ ) { const GlobalIndexType subentityIndex = meshInitializer.findEntitySeedIndex( subentitySeeds[ i ] ); meshInitializer.template setSubentityIndex< SubdimensionsTag::value >( superentity, superentityIndex, i, subentityIndex ); subentityOrientationsArray[ i ] = meshInitializer.template getReferenceOrientation< SuperdimensionsTag >( subentityIndex ).createOrientation( subentitySeeds[ i ] ); subentityOrientationsArray[ i ] = meshInitializer.template getReferenceOrientation< SubdimensionsTag >( subentityIndex ).createOrientation( subentitySeeds[ i ] ); } } Loading src/TNL/Meshes/MeshDetails/initializer/MeshInitializer.h +33 −51 Original line number Diff line number Diff line Loading @@ -38,9 +38,7 @@ template< typename MeshConfig, bool EntityStorage = MeshEntityTraits< MeshConfig, DimensionTag::value >::storageEnabled, bool EntityReferenceOrientationStorage = // FIXME // MeshTraits< MeshConfig >::template EntityTraits< DimensionsTag::value >::orientationNeeded > false > MeshTraits< MeshConfig >::template EntityTraits< DimensionsTag::value >::orientationNeeded > class MeshInitializerLayer; Loading Loading @@ -308,11 +306,6 @@ class MeshInitializerLayer< MeshConfig, BaseType::initEntities( initializer, points, mesh ); } // void createEntityReferenceOrientations() // { // BaseType::createEntityReferenceOrientations(); // } using BaseType::getReferenceOrientation; using ReferenceOrientationType = typename EntityTraitsType::ReferenceOrientationType; const ReferenceOrientationType& getReferenceOrientation( DimensionsTag, GlobalIndexType index ) const {} Loading Loading @@ -357,23 +350,19 @@ class MeshInitializerLayer< MeshConfig, public: void createEntitySeedsFromCellSeeds( const CellSeedArrayType& cellSeeds ) { typedef MeshSubentitySeedsCreator< MeshConfig, CellTopology, DimensionsTag > SubentitySeedsCreator; //std::cout << " Creating mesh entities with " << DimensionsTag::value << " dimensions ... " << std::endl; for( GlobalIndexType i = 0; i < cellSeeds.getSize(); i++ ) GlobalIndexType getNumberOfEntities( InitializerType& initializer, MeshType& mesh ) { //std::cout << " Creating mesh entities from cell number " << i << " : " << cellSeeds[ i ] << std::endl; typedef typename SubentitySeedsCreator::SubentitySeedArray SubentitySeedArray; SubentitySeedArray subentytiSeeds( SubentitySeedsCreator::create( cellSeeds[ i ] ) ); for( LocalIndexType j = 0; j < subentytiSeeds.getSize(); j++ ) using SubentitySeedsCreator = MeshSubentitySeedsCreator< MeshConfig, MeshDimensionsTag< CellTopology::dimensions >, DimensionsTag >; std::set< typename SeedIndexedSet::key_type > seedSet; for( GlobalIndexType i = 0; i < mesh.getNumberOfCells(); i++ ) { //std::cout << "Creating subentity seed no. " << j << " : " << subentytiSeeds[ j ] << std::endl; //MeshEntitySeed< MeshConfigBase< CellTopology >, EntityTopology >& entitySeed = subentytiSeeds[ j ]; this->seedsIndexedSet.insert( subentytiSeeds[ j ] ); } auto subentitySeeds = SubentitySeedsCreator::create( initializer.getSubvertices( mesh.getCell( i ), i ) ); for( LocalIndexType j = 0; j < subentitySeeds.getSize(); j++ ) seedSet.insert( subentitySeeds[ j ] ); } // BaseType::createEntitySeedsFromCellSeeds( cellSeeds ); return seedSet.size(); } using BaseType::findEntitySeedIndex; Loading @@ -382,23 +371,33 @@ class MeshInitializerLayer< MeshConfig, return this->seedsIndexedSet.insert( seed ); } void initEntities( InitializerType& initializer, const PointArrayType& points, const CellSeedArrayType& cellSeeds, MeshType& mesh ) void initEntities( InitializerType& initializer, PointArrayType& points, MeshType& mesh ) { createEntitySeedsFromCellSeeds( cellSeeds ); createEntityReferenceOrientations(); //std::cout << " Initiating entities with " << DimensionsTag::value << " dimensions ... " << std::endl; initializer.template setNumberOfEntities< DimensionsTag::value >( this->seedsIndexedSet.getSize() ); SeedArrayType seedsArray; seedsArray.setSize( this->seedsIndexedSet.getSize() ); this->seedsIndexedSet.toArray( seedsArray ); for( GlobalIndexType i = 0; i < this->seedsIndexedSet.getSize(); i++ ) const GlobalIndexType numberOfEntities = getNumberOfEntities( initializer, mesh ); initializer.template setNumberOfEntities< DimensionsTag::value >( numberOfEntities ); this->referenceOrientations.setSize( numberOfEntities ); using SubentitySeedsCreator = MeshSubentitySeedsCreator< MeshConfig, MeshDimensionsTag< CellTopology::dimensions >, DimensionsTag >; for( GlobalIndexType i = 0; i < mesh.getNumberOfCells(); i++ ) { //std::cout << " Initiating entity " << i << std::endl; EntityInitializerType::initEntity( mesh.template getEntity< DimensionsTag::value >( i ), i, seedsArray[ i ], initializer ); auto subentitySeeds = SubentitySeedsCreator::create( initializer.getSubvertices( mesh.getCell( i ), i ) ); for( LocalIndexType j = 0; j < subentitySeeds.getSize(); j++ ) { auto& seed = subentitySeeds[ j ]; if( this->seedsIndexedSet.count( seed ) == 0 ) { const GlobalIndexType entityIndex = this->seedsIndexedSet.insert( seed ); EntityInitializerType::initEntity( mesh.template getEntity< DimensionsTag::value >( entityIndex ), entityIndex, seed, initializer ); this->referenceOrientations[ entityIndex ] = ReferenceOrientationType( seed ); } } } this->seedsIndexedSet.reset(); BaseType::initEntities( initializer, points, cellSeeds, mesh ); EntityInitializerType::initSuperentities( initializer, mesh ); this->seedsIndexedSet.clear(); this->referenceOrientations.reset(); BaseType::initEntities( initializer, points, mesh ); } using BaseType::getReferenceOrientation; Loading @@ -407,21 +406,6 @@ class MeshInitializerLayer< MeshConfig, return this->referenceOrientations[ index ]; } void createEntityReferenceOrientations() { //std::cout << " Creating entity reference orientations with " << DimensionsTag::value << " dimensions ... " << std::endl; SeedArrayType seedsArray; seedsArray.setSize( this->seedsIndexedSet.getSize() ); this->seedsIndexedSet.toArray( seedsArray ); this->referenceOrientations.setSize( seedsArray.getSize() ); for( GlobalIndexType i = 0; i < seedsArray.getSize(); i++ ) { //std::cout << " Creating reference orientation for entity " << i << std::endl; this->referenceOrientations[ i ] = ReferenceOrientationType( seedsArray[ i ] ); } // BaseType::createEntityReferenceOrientations(); } private: using SeedIndexedSet = typename MeshEntityTraits< MeshConfig, DimensionsTag::value >::SeedIndexedSetType; Loading Loading @@ -489,8 +473,6 @@ class MeshInitializerLayer< MeshConfig, // This method is due to 'using BaseType::findEntityIndex;' in the derived class. void findEntitySeedIndex() {} // void createEntityReferenceOrientations() const {} using ReferenceOrientationType = typename EntityTraitsType::ReferenceOrientationType; const ReferenceOrientationType& getReferenceOrientation( DimensionsTag, GlobalIndexType index ) const {} }; Loading Loading
src/TNL/Meshes/MeshDetails/initializer/MeshEntityInitializer.h +7 −8 Original line number Diff line number Diff line Loading @@ -39,10 +39,9 @@ template< typename MeshConfig, MeshConfig::subentityStorage( typename MeshTraits< MeshConfig >::template EntityTraits< SuperdimensionsTag::value >::EntityTopology(), SubdimensionsTag::value ), bool SubentityOrientationStorage = // FIXME false, // MeshTraits< MeshConfig >::template SubentityTraits< EntityTopology, DimensionsTag::value >::orientationEnabled && // MeshTraits< MeshConfig >::template EntityTraits< DimensionsTag::value >::orientationNeeded, MeshConfig::subentityOrientationStorage( typename MeshTraits< MeshConfig >::template EntityTraits< SuperdimensionsTag::value >::EntityTopology(), SubdimensionsTag::value ) && MeshTraits< MeshConfig >::template EntityTraits< SubdimensionsTag::value >::orientationNeeded, // storage in the subentity bool SuperentityStorage = MeshConfig::superentityStorage( typename MeshTraits< MeshConfig >::template EntityTraits< SubdimensionsTag::value >::EntityTopology(), Loading Loading @@ -211,7 +210,7 @@ public: auto& superentity = mesh.template getEntity< SuperdimensionsTag::value >( superentityIndex ); auto subentitySeeds = SubentitySeedsCreatorType::create( meshInitializer.getSubvertices( superentity, superentityIndex ) ); auto& subentityOrientationsArray = InitializerType::template subentityOrientationsArray< SuperdimensionsTag >( superentity ); auto& subentityOrientationsArray = InitializerType::template subentityOrientationsArray< SubdimensionsTag >( superentity ); for( LocalIndexType i = 0; i < subentitySeeds.getSize(); i++ ) { Loading @@ -219,7 +218,7 @@ public: meshInitializer.template setSubentityIndex< SubdimensionsTag::value >( superentity, superentityIndex, i, subentityIndex ); superentityInitializer.addSuperentity( subentityIndex, superentityIndex ); subentityOrientationsArray[ i ] = meshInitializer.template getReferenceOrientation< SuperdimensionsTag >( subentityIndex ).createOrientation( subentitySeeds[ i ] ); subentityOrientationsArray[ i ] = meshInitializer.template getReferenceOrientation< SubdimensionsTag >( subentityIndex ).createOrientation( subentitySeeds[ i ] ); } } Loading Loading @@ -272,14 +271,14 @@ public: auto& superentity = mesh.template getEntity< SuperdimensionsTag::value >( superentityIndex ); auto subentitySeeds = SubentitySeedsCreatorType::create( meshInitializer.getSubvertices( superentity, superentityIndex ) ); auto& subentityOrientationsArray = InitializerType::template subentityOrientationsArray< SuperdimensionsTag >( superentity ); auto& subentityOrientationsArray = InitializerType::template subentityOrientationsArray< SubdimensionsTag >( superentity ); for( LocalIndexType i = 0; i < subentitySeeds.getSize(); i++ ) { const GlobalIndexType subentityIndex = meshInitializer.findEntitySeedIndex( subentitySeeds[ i ] ); meshInitializer.template setSubentityIndex< SubdimensionsTag::value >( superentity, superentityIndex, i, subentityIndex ); subentityOrientationsArray[ i ] = meshInitializer.template getReferenceOrientation< SuperdimensionsTag >( subentityIndex ).createOrientation( subentitySeeds[ i ] ); subentityOrientationsArray[ i ] = meshInitializer.template getReferenceOrientation< SubdimensionsTag >( subentityIndex ).createOrientation( subentitySeeds[ i ] ); } } Loading
src/TNL/Meshes/MeshDetails/initializer/MeshInitializer.h +33 −51 Original line number Diff line number Diff line Loading @@ -38,9 +38,7 @@ template< typename MeshConfig, bool EntityStorage = MeshEntityTraits< MeshConfig, DimensionTag::value >::storageEnabled, bool EntityReferenceOrientationStorage = // FIXME // MeshTraits< MeshConfig >::template EntityTraits< DimensionsTag::value >::orientationNeeded > false > MeshTraits< MeshConfig >::template EntityTraits< DimensionsTag::value >::orientationNeeded > class MeshInitializerLayer; Loading Loading @@ -308,11 +306,6 @@ class MeshInitializerLayer< MeshConfig, BaseType::initEntities( initializer, points, mesh ); } // void createEntityReferenceOrientations() // { // BaseType::createEntityReferenceOrientations(); // } using BaseType::getReferenceOrientation; using ReferenceOrientationType = typename EntityTraitsType::ReferenceOrientationType; const ReferenceOrientationType& getReferenceOrientation( DimensionsTag, GlobalIndexType index ) const {} Loading Loading @@ -357,23 +350,19 @@ class MeshInitializerLayer< MeshConfig, public: void createEntitySeedsFromCellSeeds( const CellSeedArrayType& cellSeeds ) { typedef MeshSubentitySeedsCreator< MeshConfig, CellTopology, DimensionsTag > SubentitySeedsCreator; //std::cout << " Creating mesh entities with " << DimensionsTag::value << " dimensions ... " << std::endl; for( GlobalIndexType i = 0; i < cellSeeds.getSize(); i++ ) GlobalIndexType getNumberOfEntities( InitializerType& initializer, MeshType& mesh ) { //std::cout << " Creating mesh entities from cell number " << i << " : " << cellSeeds[ i ] << std::endl; typedef typename SubentitySeedsCreator::SubentitySeedArray SubentitySeedArray; SubentitySeedArray subentytiSeeds( SubentitySeedsCreator::create( cellSeeds[ i ] ) ); for( LocalIndexType j = 0; j < subentytiSeeds.getSize(); j++ ) using SubentitySeedsCreator = MeshSubentitySeedsCreator< MeshConfig, MeshDimensionsTag< CellTopology::dimensions >, DimensionsTag >; std::set< typename SeedIndexedSet::key_type > seedSet; for( GlobalIndexType i = 0; i < mesh.getNumberOfCells(); i++ ) { //std::cout << "Creating subentity seed no. " << j << " : " << subentytiSeeds[ j ] << std::endl; //MeshEntitySeed< MeshConfigBase< CellTopology >, EntityTopology >& entitySeed = subentytiSeeds[ j ]; this->seedsIndexedSet.insert( subentytiSeeds[ j ] ); } auto subentitySeeds = SubentitySeedsCreator::create( initializer.getSubvertices( mesh.getCell( i ), i ) ); for( LocalIndexType j = 0; j < subentitySeeds.getSize(); j++ ) seedSet.insert( subentitySeeds[ j ] ); } // BaseType::createEntitySeedsFromCellSeeds( cellSeeds ); return seedSet.size(); } using BaseType::findEntitySeedIndex; Loading @@ -382,23 +371,33 @@ class MeshInitializerLayer< MeshConfig, return this->seedsIndexedSet.insert( seed ); } void initEntities( InitializerType& initializer, const PointArrayType& points, const CellSeedArrayType& cellSeeds, MeshType& mesh ) void initEntities( InitializerType& initializer, PointArrayType& points, MeshType& mesh ) { createEntitySeedsFromCellSeeds( cellSeeds ); createEntityReferenceOrientations(); //std::cout << " Initiating entities with " << DimensionsTag::value << " dimensions ... " << std::endl; initializer.template setNumberOfEntities< DimensionsTag::value >( this->seedsIndexedSet.getSize() ); SeedArrayType seedsArray; seedsArray.setSize( this->seedsIndexedSet.getSize() ); this->seedsIndexedSet.toArray( seedsArray ); for( GlobalIndexType i = 0; i < this->seedsIndexedSet.getSize(); i++ ) const GlobalIndexType numberOfEntities = getNumberOfEntities( initializer, mesh ); initializer.template setNumberOfEntities< DimensionsTag::value >( numberOfEntities ); this->referenceOrientations.setSize( numberOfEntities ); using SubentitySeedsCreator = MeshSubentitySeedsCreator< MeshConfig, MeshDimensionsTag< CellTopology::dimensions >, DimensionsTag >; for( GlobalIndexType i = 0; i < mesh.getNumberOfCells(); i++ ) { //std::cout << " Initiating entity " << i << std::endl; EntityInitializerType::initEntity( mesh.template getEntity< DimensionsTag::value >( i ), i, seedsArray[ i ], initializer ); auto subentitySeeds = SubentitySeedsCreator::create( initializer.getSubvertices( mesh.getCell( i ), i ) ); for( LocalIndexType j = 0; j < subentitySeeds.getSize(); j++ ) { auto& seed = subentitySeeds[ j ]; if( this->seedsIndexedSet.count( seed ) == 0 ) { const GlobalIndexType entityIndex = this->seedsIndexedSet.insert( seed ); EntityInitializerType::initEntity( mesh.template getEntity< DimensionsTag::value >( entityIndex ), entityIndex, seed, initializer ); this->referenceOrientations[ entityIndex ] = ReferenceOrientationType( seed ); } } } this->seedsIndexedSet.reset(); BaseType::initEntities( initializer, points, cellSeeds, mesh ); EntityInitializerType::initSuperentities( initializer, mesh ); this->seedsIndexedSet.clear(); this->referenceOrientations.reset(); BaseType::initEntities( initializer, points, mesh ); } using BaseType::getReferenceOrientation; Loading @@ -407,21 +406,6 @@ class MeshInitializerLayer< MeshConfig, return this->referenceOrientations[ index ]; } void createEntityReferenceOrientations() { //std::cout << " Creating entity reference orientations with " << DimensionsTag::value << " dimensions ... " << std::endl; SeedArrayType seedsArray; seedsArray.setSize( this->seedsIndexedSet.getSize() ); this->seedsIndexedSet.toArray( seedsArray ); this->referenceOrientations.setSize( seedsArray.getSize() ); for( GlobalIndexType i = 0; i < seedsArray.getSize(); i++ ) { //std::cout << " Creating reference orientation for entity " << i << std::endl; this->referenceOrientations[ i ] = ReferenceOrientationType( seedsArray[ i ] ); } // BaseType::createEntityReferenceOrientations(); } private: using SeedIndexedSet = typename MeshEntityTraits< MeshConfig, DimensionsTag::value >::SeedIndexedSetType; Loading Loading @@ -489,8 +473,6 @@ class MeshInitializerLayer< MeshConfig, // This method is due to 'using BaseType::findEntityIndex;' in the derived class. void findEntitySeedIndex() {} // void createEntityReferenceOrientations() const {} using ReferenceOrientationType = typename EntityTraitsType::ReferenceOrientationType; const ReferenceOrientationType& getReferenceOrientation( DimensionsTag, GlobalIndexType index ) const {} }; Loading