1 #ifndef DUNE_SPGRID_MESH_HH
2 #define DUNE_SPGRID_MESH_HH
39 const MultiIndex &
bound (
int b )
const { assert( (b == 0) || (b == 1) );
return bound_[ b ]; }
45 template<
class Refinement >
46 typename std::enable_if< Refinement::dimension == dim, SPMesh< dim > >::type
47 refine (
const Refinement &refinement )
const;
54 std::pair< This, This >
split (
const int dir,
const int leftWeight,
const int rightWeight )
const;
59 int width (
const int i )
const;
64 std::array< MultiIndex, 2 > bound_;
75 bound_[ 0 ] = MultiIndex::zero();
92 for(
int b = 0; b < 2; ++b )
102 for(
int b = 0; b < 2; ++b )
103 bound_[ b ] -= shift;
112 for(
int i = 0; i < dimension; ++i )
113 empty |= (end()[ i ] < begin()[ i ]);
119 template<
class Refinement >
120 inline typename std::enable_if< Refinement::dimension == dim, SPMesh< dim > >::type
124 for(
int i = 0; i < dimension; ++i )
126 const int factor = refinement.factor( i );
127 childBegin[ i ] = factor * begin()[ i ];
128 childEnd[ i ] = factor * end()[ i ];
130 return This( childBegin, childEnd );
138 for(
int i = 0; i < dim; ++i )
140 begin[ i ] = begin()[ i ] - size;
141 end[ i ] = end()[ i ] + size;
143 return This( begin, end );
151 return This( begin() - size, end() + size );
159 return This( std::max( begin(), other.
begin() ), std::min( end(), other.
end() ) );
170 assert( (dir >= 0) && (dir < dimension) );
171 const int width = (rend[ dir ] - lbegin[ dir ]);
172 const int leftWidth = (leftFraction * width) / (leftFraction + rightFraction);
176 rbegin[ dir ] = lend[ dir ] = lbegin[ dir ] + leftWidth;
178 return std::make_pair(
This( lbegin, lend ),
This( rbegin, rend ) );
187 for(
int i = 0; i < dimension; ++i )
197 for(
int i = 0; i < dimension; ++i )
207 return end()[ i ] - begin()[ i ];
216 for(
int i = 0; i < dimension; ++i )
226 template<
class char_type,
class traits,
int dim >
227 inline std::basic_ostream< char_type, traits > &
228 operator<< ( std::basic_ostream< char_type, traits > &out,
const SPMesh< dim > &mesh )
230 return out <<
"[ " << mesh.begin() <<
", " << mesh.end() <<
" [";
239 return copy += shift;
248 return copy -= shift;
Definition: iostream.hh:7
SPMesh< dim > operator-(const SPMesh< dim > &mesh, const SPMultiIndex< dim > &shift)
Definition: mesh.hh:245
SPMesh< dim > operator+(const SPMesh< dim > &mesh, const SPMultiIndex< dim > &shift)
Definition: mesh.hh:236
std::basic_ostream< char_type, traits > & operator<<(std::basic_ostream< char_type, traits > &out, const SPCube< ct, dim > &cube)
Definition: cube.hh:148
MultiIndex width() const
Definition: mesh.hh:194
int volume() const
Definition: mesh.hh:183
const MultiIndex & bound(int b) const
Definition: mesh.hh:39
This intersect(const This &other) const
Definition: mesh.hh:157
int bound(const SPNormalId< dimension > &id) const
Definition: mesh.hh:41
static This unitMesh()
Definition: mesh.hh:213
This grow(int size) const
Definition: mesh.hh:135
std::enable_if< Refinement::dimension==dim, SPMesh< dim > >::type refine(const Refinement &refinement) const
Definition: mesh.hh:121
This grow(const MultiIndex &size) const
Definition: mesh.hh:149
std::pair< This, This > split(const int dir, const int leftWeight, const int rightWeight) const
Definition: mesh.hh:165
bool empty() const
Definition: mesh.hh:109
const MultiIndex & end() const
Definition: mesh.hh:37
const This & operator+=(const MultiIndex &shift)
Definition: mesh.hh:90
SPMesh(const MultiIndex &begin, const MultiIndex &end)
Definition: mesh.hh:81
const This & operator-=(const MultiIndex &shift)
Definition: mesh.hh:100
SPMesh(const MultiIndex &width)
Definition: mesh.hh:73
int width(const int i) const
Definition: mesh.hh:204
const MultiIndex & begin() const
Definition: mesh.hh:36
static const int dimension
Definition: mesh.hh:25
SPMultiIndex< dimension > MultiIndex
Definition: mesh.hh:27