3 #ifndef DUNE_GRID_YASPGRID_COORDINATES_HH
4 #define DUNE_GRID_YASPGRID_COORDINATES_HH
9 #include <dune/common/array.hh>
10 #include <dune/common/fvector.hh>
25 template<
class ct,
int dim>
67 inline int size(
int d)
const
81 Dune::array<int,dim> news;
82 Dune::FieldVector<ct,dim> newh;
84 for (
int i=0; i<dim; i++)
103 s <<
"Printing equidistant coordinate information:" << std::endl;
104 s <<
"Meshsize: " << _h << std::endl <<
"Size: " << _s << std::endl;
108 Dune::FieldVector<ct,dim> _h;
109 Dune::array<int,dim> _s;
112 template<
class ct,
int dim>
113 inline std::ostream& operator<< (std::ostream& s, EquidistantCoordinates<ct,dim>& c)
123 template<
class ct,
int dim>
143 : _origin(origin), _h(h), _s(s) {}
160 return _origin[d] + i*_h[d];
188 Dune::array<int,dim> news;
189 Dune::FieldVector<ct,dim> newh;
191 for (
int i=0; i<dim; i++)
202 newh[i] = _h[i] / 2.;
210 s <<
"Printing equidistant coordinate information:" << std::endl;
211 s <<
"Meshsize: " << _h << std::endl <<
"Size: " << _s << std::endl;
212 s <<
"Offset to origin: " << _origin << std::endl;
216 Dune::FieldVector<ct,dim> _origin;
217 Dune::FieldVector<ct,dim> _h;
218 Dune::array<int,dim> _s;
221 template<
class ct,
int dim>
222 inline std::ostream& operator<< (std::ostream& s, EquidistantOffsetCoordinates<ct,dim>& c)
232 template<
class ct,
int dim>
251 : _c(c),_offset(offset)
260 return _c[d][i+1-_offset[d]] - _c[d][i-_offset[d]];
269 return _c[d][i-_offset[d]];
277 return _c[d].size() - 1;
288 Dune::array<std::vector<ct>,dim> newcoords;
289 Dune::array<int,dim> newoffset(_offset);
290 for (
int i=0; i<dim; i++)
295 int newsize = 2 * _c[i].size() - 1;
306 newcoords[i].resize(newsize);
308 typename std::vector<ct>::const_iterator it = _c[i].begin();
309 typename std::vector<ct>::const_iterator end = _c[i].end()-1;
310 typename std::vector<ct>::iterator iit = newcoords[i].begin() - 1;
317 *(++iit) = (*it + *(++it)) / 2.;
326 *(++iit) = (*it + *(++it)) / 2.;
329 if (++iit != newcoords[i].end())
338 s <<
"Printing TensorProduct Coordinate information:" << std::endl;
339 for (
int i=0; i<dim; i++)
341 s <<
"Direction " << i <<
": " << _c[i].size() <<
" coordinates" << std::endl;
342 for (std::size_t j=0; j<_c[i].size(); j++)
343 s << _c[i][j] << std::endl;
348 Dune::array<std::vector<ct>,dim> _c;
349 Dune::array<int,dim> _offset;
352 template<
class ct,
int dim>
353 inline std::ostream& operator<< (std::ostream& s, TensorProductCoordinates<ct,dim>& c)
360 template<
class ctype, std::
size_t dim>
363 for (std::size_t i=0; i<dim; i++)
365 if (coords[i].size() <= 1)
367 for (std::size_t j=1; j<coords[i].size(); j++)
368 if (coords[i][j] < coords[i][j-1])
TensorProductCoordinates()
the default constructor
Definition: coordinates.hh:242
int size(int d) const
Definition: coordinates.hh:67
ct coordinate(int d, int i) const
Definition: coordinates.hh:158
ct ctype
export the coordinate type
Definition: coordinates.hh:128
ct meshsize(int d, int i) const
Definition: coordinates.hh:258
EquidistantCoordinates(const Dune::FieldVector< ct, dim > &h, const Dune::array< int, dim > &s)
construct a container with all necessary information
Definition: coordinates.hh:43
bool checkIfMonotonous(const Dune::array< std::vector< ctype >, dim > &coords)
Definition: coordinates.hh:361
ct origin(int d) const
Definition: coordinates.hh:174
ct coordinate(int d, int i) const
Definition: coordinates.hh:267
Include standard header files.
Definition: agrid.hh:59
TensorProductCoordinates(const Dune::array< std::vector< ct >, dim > &c, const Dune::array< int, dim > &offset)
construct a container with all necessary information
Definition: coordinates.hh:250
Coordinate container for a tensor product YaspGrid.
Definition: coordinates.hh:233
EquidistantOffsetCoordinates< ct, dim > refine(std::bitset< dim > ovlp_low, std::bitset< dim > ovlp_up, int overlap, bool keep_ovlp) const
Definition: coordinates.hh:185
void print(std::ostream &s) const
print information on this container
Definition: coordinates.hh:101
EquidistantCoordinates< ct, dim > refine(std::bitset< dim > ovlp_low, std::bitset< dim > ovlp_up, int overlap, bool keep_ovlp) const
Definition: coordinates.hh:78
Container for equidistant coordinates in a YaspGrid with non-trivial origin.
Definition: coordinates.hh:124
EquidistantOffsetCoordinates()
default constructor
Definition: coordinates.hh:133
static const int dimension
export dimension
Definition: coordinates.hh:239
TensorProductCoordinates< ct, dim > refine(std::bitset< dim > ovlp_low, std::bitset< dim > ovlp_up, int overlap, bool keep_ovlp) const
Definition: coordinates.hh:286
ct ctype
export the coordinate type
Definition: coordinates.hh:30
EquidistantOffsetCoordinates(const Dune::FieldVector< ct, dim > &origin, const Dune::FieldVector< ct, dim > &h, const Dune::array< int, dim > &s)
construct a container with all necessary information
Definition: coordinates.hh:142
int size(int d) const
Definition: coordinates.hh:275
Overlap overlap
PartitionSet for the overlap partition.
Definition: partitionset.hh:232
static const int dimension
export dimension
Definition: coordinates.hh:32
EquidistantCoordinates()
default constructor
Definition: coordinates.hh:35
static const int dimension
export dimension
Definition: coordinates.hh:130
Container for equidistant coordinates in a YaspGrid.
Definition: coordinates.hh:26
void print(std::ostream &s) const
print information on this container
Definition: coordinates.hh:336
void print(std::ostream &s) const
print information on this container
Definition: coordinates.hh:208
ct meshsize(int d, int i) const
Definition: coordinates.hh:50
ct ctype
export the coordinate type
Definition: coordinates.hh:237
ct meshsize(int d, int i) const
Definition: coordinates.hh:149
ct coordinate(int d, int i) const
Definition: coordinates.hh:59
int size(int d) const
Definition: coordinates.hh:166