3 #ifndef DUNE_GRID_YASPGRID_COORDINATES_HH
4 #define DUNE_GRID_YASPGRID_COORDINATES_HH
10 #include <dune/common/fvector.hh>
25 template<
class ct,
int dim>
46 for (
int i=0; i<dim; i++)
47 _h[i] = upperRight[i] / _s[i];
54 inline ct
meshsize(
int d, [[maybe_unused]]
int i)
const
71 inline int size(
int d)
const
85 std::array<int,dim> news;
86 Dune::FieldVector<ct,dim> newUpperRight;
88 for (
int i=0; i<dim; i++)
99 newUpperRight[i] = (_h[i] / ct(2.)) * news[i];
107 s <<
"Printing equidistant coordinate information:" << std::endl;
108 s <<
"Meshsize: " << _h << std::endl <<
"Size: " << _s << std::endl;
112 Dune::FieldVector<ct,dim> _h;
113 std::array<int,dim> _s;
116 template<
class ct,
int dim>
127 template<
class ct,
int dim>
148 : _origin(lowerLeft), _s(s)
150 for (
int i=0; i<dim; i++)
151 _h[i] = (upperRight[i] - lowerLeft[i]) / s[i];
158 inline ct
meshsize(
int d, [[maybe_unused]]
int i)
const
169 return _origin[d] + i*_h[d];
197 std::array<int,dim> news;
198 Dune::FieldVector<ct,dim> newUpperRight;
200 for (
int i=0; i<dim; i++)
211 newUpperRight[i] = _origin[i] + (_h[i] / ct(2.)) * news[i];
219 s <<
"Printing equidistant coordinate information:" << std::endl;
220 s <<
"Meshsize: " << _h << std::endl <<
"Size: " << _s << std::endl;
221 s <<
"Offset to origin: " << _origin << std::endl;
225 Dune::FieldVector<ct,dim> _origin;
226 Dune::FieldVector<ct,dim> _h;
227 std::array<int,dim> _s;
230 template<
class ct,
int dim>
241 template<
class ct,
int dim>
260 : _c(c),_offset(offset)
269 return _c[d][i+1-_offset[d]] - _c[d][i-_offset[d]];
278 return _c[d][i-_offset[d]];
286 return _c[d].size() - 1;
297 std::array<std::vector<ct>,dim> newcoords;
298 std::array<int,dim> newoffset(_offset);
299 for (
int i=0; i<dim; i++)
304 int newsize = 2 * _c[i].size() - 1;
315 newcoords[i].resize(newsize);
317 typename std::vector<ct>::const_iterator it = _c[i].begin();
318 typename std::vector<ct>::const_iterator end = _c[i].end()-1;
319 typename std::vector<ct>::iterator iit = newcoords[i].begin() - 1;
326 *(++iit) = (*it + *(++it)) / ct(2.);
335 *(++iit) = (*it + *(++it)) / ct(2.);
338 if (++iit != newcoords[i].end())
347 s <<
"Printing TensorProduct Coordinate information:" << std::endl;
348 for (
int i=0; i<dim; i++)
350 s <<
"Direction " << i <<
": " << _c[i].size() <<
" coordinates" << std::endl;
351 for (std::size_t j=0; j<_c[i].size(); j++)
352 s << _c[i][j] << std::endl;
357 std::array<std::vector<ct>,dim> _c;
358 std::array<int,dim> _offset;
361 template<
class ct,
int dim>
369 template<
class ctype, std::
size_t dim>
372 for (std::size_t i=0; i<dim; i++)
374 if (coords[i].size() <= 1)
376 for (std::size_t j=1; j<coords[i].size(); j++)
377 if (coords[i][j] < coords[i][j-1])
std::ostream & operator<<(std::ostream &out, const PartitionType &type)
write a PartitionType to a stream
Definition: gridenums.hh:70
Include standard header files.
Definition: agrid.hh:58
constexpr Overlap overlap
PartitionSet for the overlap partition.
Definition: partitionset.hh:276
bool checkIfMonotonous(const std::array< std::vector< ctype >, dim > &coords)
Definition: coordinates.hh:370
Container for equidistant coordinates in a YaspGrid.
Definition: coordinates.hh:27
EquidistantCoordinates< ct, dim > refine(std::bitset< dim > ovlp_low, std::bitset< dim > ovlp_up, int overlap, bool keep_ovlp) const
Definition: coordinates.hh:82
ct coordinate(int d, int i) const
Definition: coordinates.hh:63
int size(int d) const
Definition: coordinates.hh:71
static const int dimension
export dimension
Definition: coordinates.hh:32
void print(std::ostream &s) const
print information on this container
Definition: coordinates.hh:105
EquidistantCoordinates()
default constructor
Definition: coordinates.hh:35
ct ctype
export the coordinate type
Definition: coordinates.hh:30
EquidistantCoordinates(const Dune::FieldVector< ct, dim > &upperRight, const std::array< int, dim > &s)
construct a container with all necessary information
Definition: coordinates.hh:43
ct meshsize(int d, [[maybe_unused]] int i) const
Definition: coordinates.hh:54
Container for equidistant coordinates in a YaspGrid with non-trivial origin.
Definition: coordinates.hh:129
EquidistantOffsetCoordinates()
default constructor
Definition: coordinates.hh:137
EquidistantOffsetCoordinates(const Dune::FieldVector< ct, dim > &lowerLeft, const Dune::FieldVector< ct, dim > &upperRight, const std::array< int, dim > &s)
construct a container with all necessary information
Definition: coordinates.hh:147
void print(std::ostream &s) const
print information on this container
Definition: coordinates.hh:217
ct origin(int d) const
Definition: coordinates.hh:183
int size(int d) const
Definition: coordinates.hh:175
ct ctype
export the coordinate type
Definition: coordinates.hh:132
static const int dimension
export dimension
Definition: coordinates.hh:134
ct meshsize(int d, [[maybe_unused]] int i) const
Definition: coordinates.hh:158
ct coordinate(int d, int i) const
Definition: coordinates.hh:167
EquidistantOffsetCoordinates< ct, dim > refine(std::bitset< dim > ovlp_low, std::bitset< dim > ovlp_up, int overlap, bool keep_ovlp) const
Definition: coordinates.hh:194
Coordinate container for a tensor product YaspGrid.
Definition: coordinates.hh:243
void print(std::ostream &s) const
print information on this container
Definition: coordinates.hh:345
ct meshsize(int d, int i) const
Definition: coordinates.hh:267
ct coordinate(int d, int i) const
Definition: coordinates.hh:276
static const int dimension
export dimension
Definition: coordinates.hh:248
TensorProductCoordinates< ct, dim > refine(std::bitset< dim > ovlp_low, std::bitset< dim > ovlp_up, int overlap, bool keep_ovlp) const
Definition: coordinates.hh:295
TensorProductCoordinates(const std::array< std::vector< ct >, dim > &c, const std::array< int, dim > &offset)
construct a container with all necessary information
Definition: coordinates.hh:259
TensorProductCoordinates()
the default constructor
Definition: coordinates.hh:251
ct ctype
export the coordinate type
Definition: coordinates.hh:246
int size(int d) const
Definition: coordinates.hh:284