Newer
Older
/***************************************************************************
tnlMesh.h - description
-------------------
begin : Feb 16, 2014
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 TNLMESH_H_
#define TNLMESH_H_
#include <core/tnlObject.h>
#include <mesh/tnlMeshEntity.h>
#include <mesh/traits/tnlMeshTraits.h>
#include <mesh/layers/tnlMeshStorageLayer.h>
#include <mesh/config/tnlMeshConfigValidator.h>
template< typename MeshConfig > //,
//typename Device = tnlHost >
class tnlMesh : public tnlObject/*,
public tnlMeshStorageLayers< MeshConfig >*/
typedef MeshConfig Config;
typedef tnlMeshTraits< MeshConfig > MeshTraits;
typedef typename MeshTraits::DeviceType DeviceType;
typedef typename MeshTraits::GlobalIndexType GlobalIndexType;
typedef typename MeshTraits::LocalIndexType LocalIndexType;
typedef typename MeshTraits::CellType CellType;
typedef typename MeshTraits::VertexType VertexType;
typedef typename MeshTraits::PointType PointType;
static const int dimensions = MeshTraits::meshDimensions;
template< int Dimensions > using EntityTraits = typename MeshTraits::template EntityTraits< Dimensions >;
template< int Dimensions > using EntityType = typename EntityTraits< Dimensions >::EntityType;
static tnlString getType();
virtual tnlString getTypeVirtual() const;
static constexpr int getDimensions();
template< int Dimensions >
bool entitiesAvalable() const;
GlobalIndexType getNumberOfCells() const;
template< int Dimensions >
GlobalIndexType getNumberOfEntities() const;
CellType& getCell( const GlobalIndexType entityIndex );
const CellType& getCell( const GlobalIndexType entityIndex ) const;
template< int Dimensions >
EntityType< Dimensions >& getEntity( const GlobalIndexType entityIndex );
template< int Dimensions >
const EntityType< Dimensions >& getEntity( const GlobalIndexType entityIndex ) const;
bool load( tnlFile& file );
using tnlObject::load;
using tnlObject::save;
void print( ostream& str ) const;
// TODO: this is only for mesh intializer - remove it if possible
template< typename DimensionsTag >
typename EntityTraits< DimensionsTag::value >::StorageArrayType& entitiesArray();
template< typename DimensionsTag, typename SuperDimensionsTag >
typename tnlMeshTraits< MeshConfig >::GlobalIdArrayType& superentityIdsArray();
Tomáš Oberhuber
committed
template< typename EntityTopology, typename SuperdimensionsTag >
typename MeshTraits::template SuperentityTraits< EntityTopology, SuperdimensionsTag::value >::StorageNetworkType&
getSuperentityStorageNetwork()
{
return entitiesStorage.template getSuperentityStorageNetwork< SuperdimensionsTag >( tnlDimensionsTag< EntityTopology::dimensions >() );
}
bool init( const typename MeshTraits::PointArrayType& points,
const typename MeshTraits::CellSeedArrayType& cellSeeds );
tnlMeshStorageLayers< MeshConfig > entitiesStorage;
tnlMeshConfigValidator< MeshConfig > configValidator;
template< typename MeshConfig >
std::ostream& operator <<( std::ostream& str, const tnlMesh< MeshConfig >& mesh );