5#ifndef DUNE_DGF_INTERVALBLOCK_HH 
    6#define DUNE_DGF_INTERVALBLOCK_HH 
   12#include <dune/grid/io/file/dgfparser/blocks/basic.hh> 
   27        Interval( 
const Interval& interval, 
const std::vector<int>& map )
 
   29          copy( interval, map );
 
   31        void copy(
const Interval& interval, 
const std::vector<int>& map )
 
   33          const int size = map.size();
 
   38          assert( 
size == 
int(interval.n.size()) );
 
   39          for( 
int i=0; i<
size; ++i )
 
   41            p[ 0 ][ i ] = interval.p[ 0 ][ map[ i ] ];
 
   42            p[ 1 ][ i ] = interval.p[ 1 ][ map[ i ] ];
 
   43            n[ i ] = interval.n[ map[ i ] ];
 
   44            h[ i ] = interval.h[ map[ i ] ];
 
   47        std::array< std::vector< double >, 2 > p; 
 
   48        std::vector< double > h;             
 
   53      std::vector< Interval > intervals_;
 
   54      std::vector< int > map_;
 
   59      explicit IntervalBlock ( std::istream &in );
 
   61      void get ( std::vector< std::vector< double > > &vtx, 
int &nofvtx,
 
   62                 std::vector< std::vector< unsigned int > > &
simplex, 
int &nofsimpl )
 
   64        for( 
size_t i = 0; i < intervals_.size(); ++i )
 
   67          nofvtx += getVtx( i, vtx );
 
   68          nofsimpl += getHexa( i, 
simplex, oldvtx );
 
   72      void get ( std::vector< std::vector< double > > &vtx, 
int &nofvtx )
 
   74        for( 
size_t i = 0; i < intervals_.size(); ++i )
 
   75          nofvtx += getVtx( i, vtx );
 
   78      const Interval &
get ( 
int block )
 const 
   80        return intervals_[ block ];
 
   83      int numIntervals ()
 const 
   85        return intervals_.size();
 
   93      int getVtx ( 
int block, std::vector< std::vector< double > > &vtx ) 
const;
 
   94      int getHexa ( 
int block, std::vector< std::vector< unsigned int > > &cubes,
 
   95                    int offset = 0 ) 
const;
 
   97      int nofvtx ( 
int block )
 const 
   99        const Interval &interval = 
get( block );
 
  101        for( 
int i = 0; i < dimw_; ++i )
 
  102          n *= (interval.n[ i ] + 1);
 
  106      int nofhexa ( 
int block )
 const 
  108        const Interval &interval = 
get( block );
 
  110        for( 
int i = 0; i < dimw_; ++i )
 
  111          n *= interval.n[ i ];
 
  117      void parseLine ( std::vector< T > &v );
 
  122    inline std::ostream &
 
  123    operator<< ( std::ostream &out, 
const IntervalBlock::Interval &interval )
 
  125      if( interval.p[ 0 ].empty() || interval.p[ 1 ].empty() || interval.n.empty() )
 
  126        return out << 
"Interval {}";
 
  128      out << 
"Interval { p0 = (" << interval.p[ 0 ][ 0 ];
 
  129      for( 
size_t i = 1; i < interval.p[ 0 ].size(); ++i )
 
  130        out << 
", " << interval.p[ 0 ][ i ];
 
  131      out << 
"), p1 = (" << interval.p[ 1 ][ 0 ];
 
  132      for( 
size_t i = 1; i < interval.p[ 1 ].size(); ++i )
 
  133        out << 
", " << interval.p[ 1 ][ i ];
 
  134      out << 
"), n = (" << interval.n[ 0 ];
 
  135      for( 
size_t i = 1; i < interval.n.size(); ++i )
 
  136        out << 
", " << interval.n[ i ];
 
constexpr GeometryType simplex(unsigned int dim)
Returns a GeometryType representing a simplex of dimension dim.
Definition: type.hh:453
 
Dune namespace.
Definition: alignedallocator.hh:13
 
constexpr std::integral_constant< std::size_t, sizeof...(II)> size(std::integer_sequence< T, II... >)
Return the size of the sequence.
Definition: integersequence.hh:75
 
constexpr auto get(std::integer_sequence< T, II... >, std::integral_constant< std::size_t, pos >={})
Return the entry at position pos of the given sequence.
Definition: integersequence.hh:22