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

Debuging mesh entity orientation.

parent de3219a5
Loading
Loading
Loading
Loading
+140 −5
Original line number Diff line number Diff line
@@ -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;


@@ -49,6 +52,7 @@ template< typename ConfigTag,
class tnlMeshSubentityStorageLayer< ConfigTag,
                                    EntityTag,
                                    DimensionsTag,
                                    tnlStorageTraits< true >,
                                    tnlStorageTraits< true > >
   : public tnlMeshSubentityStorageLayer< ConfigTag,
                                          EntityTag,
@@ -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,
@@ -202,7 +336,8 @@ template< typename ConfigTag,
class tnlMeshSubentityStorageLayer< ConfigTag,
                                    EntityTag,
                                    tnlDimensionsTag< 0 >,
                                    tnlStorageTraits< true > >
                                    tnlStorageTraits< true >,
                                    tnlStorageTraits< false > >
{
   typedef tnlDimensionsTag< 0 >                           DimensionsTag;

+4 −4
Original line number Diff line number Diff line
@@ -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() );
   }      
+3 −2
Original line number Diff line number Diff line
@@ -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 );
+21 −7
Original line number Diff line number Diff line
@@ -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);
	}
+1 −1
Original line number Diff line number Diff line
@@ -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;