5#ifndef DUNE_GRID_YASPGRID_BACKUPRESTORE_HH
6#define DUNE_GRID_YASPGRID_BACKUPRESTORE_HH
13#include <dune/common/exceptions.hh>
14#include <dune/common/fvector.hh>
20#define YASPGRID_BACKUPRESTORE_FORMAT_VERSION 2
25 template<
class Coordinates>
34 static void readOrigin(S& , Dune::FieldVector<typename Coordinates::ctype,Coordinates::dimension>& )
37 template<
typename... A>
39 const Dune::FieldVector<typename Coordinates::ctype,Coordinates::dimension>& , A... args)
45 template<
class ctype,
int dim>
54 for (
int i=0; i<dim; i++)
55 s << coord.
origin(i) <<
" ";
60 static void readOrigin(S& s, Dune::FieldVector<ctype, dim>& coord)
64 for (
int i=0; i<dim; i++)
68 template<
typename... A>
70 const Dune::FieldVector<typename Coordinates::ctype,Coordinates::dimension>& lowerleft,
71 const Dune::FieldVector<typename Coordinates::ctype,Coordinates::dimension>& extension, A... args)
73 Dune::FieldVector<typename Coordinates::ctype,Coordinates::dimension> upperright(lowerleft);
74 upperright += extension;
80 template<
int dim,
class Coordinates>
89 static void backup (
const Grid &grid,
const std::string &filename )
91 if (grid.
comm().rank() == 0)
93 std::ofstream file(filename);
100 std::cerr <<
"ERROR: BackupRestoreFacility::backup: couldn't open file `" << filename <<
"'" << std::endl;
105 static void backup (
const Grid &grid, std::ostream &stream )
108 stream <<
"Torus structure: ";
109 for (
int i=0; i<dim; i++)
111 stream << std::endl <<
"Refinement level: " << grid.
maxLevel() << std::endl;
112 stream <<
"Periodicity: ";
113 for (
int i=0; i<dim; i++)
115 stream << std::endl <<
"Overlap: " << grid.
overlapSize(0,0) << std::endl;
116 stream <<
"KeepPhysicalOverlap: ";
118 stream << (i->keepOverlap ?
"1" :
"0") <<
" ";
120 stream <<
"Coarse Size: ";
121 for (
int i=0; i<dim; i++)
124 stream <<
"Meshsize: " ;
125 for (
int i=0; i<dim; i++)
126 stream << grid.
begin()->coords.meshsize(i,0) <<
" ";
136 std::ifstream file(filename);
141 std::cerr <<
"ERROR: BackupRestoreFacility::restore: couldn't open file `" << filename <<
"'" << std::endl;
154 stream >> input >> input >> input >> input;
157 DUNE_THROW(Dune::Exception,
"Your YaspGrid backup file is written in an outdated format!");
159 std::array<int,dim> torus_dims;
160 stream >> input >> input;
161 for (
int i=0; i<dim; i++)
162 stream >> torus_dims[i];
165 stream >> input >> input;
166 stream >> refinement;
168 std::bitset<dim> periodic;
171 for (
int i=0; i<dim; i++)
181 std::vector<bool> physicalOverlapSize;
182 physicalOverlapSize.resize(refinement);
184 for (
int i=0; i<refinement; ++i)
187 physicalOverlapSize[i] = b;
190 std::array<int,dim> coarseSize;
191 stream >> input >> input;
192 for (
int i=0; i<dim; i++)
193 stream >> coarseSize[i];
195 Dune::FieldVector<ctype,dim> h;
197 for (
int i=0; i<dim; i++)
200 Dune::FieldVector<ctype,dim> origin;
204 Dune::FieldVector<ctype,dim> length(h);
205 for (
int i=0; i<dim; i++)
206 length[i] *= coarseSize[i];
212 for (
int i=0; i<refinement; ++i)
223 template<
int dim,
class ctype>
231 static void backup (
const Grid &grid,
const std::string &filename )
233 std::ostringstream filename_str;
234 filename_str << filename << grid.
comm().rank();
235 std::ofstream file( filename_str.str() );
242 std::cerr <<
"ERROR: BackupRestoreFacility::backup: couldn't open file `" << filename_str.str() <<
"'" << std::endl;
246 static void backup (
const Grid &grid, std::ostream &stream )
249 stream <<
"Torus structure: ";
250 for (
int i=0; i<dim; i++)
252 stream << std::endl <<
"Refinement level: " << grid.
maxLevel() << std::endl;
253 stream <<
"Periodicity: ";
254 for (
int i=0; i<dim; i++)
256 stream << std::endl <<
"Overlap: " << grid.
overlapSize(0,0) << std::endl;
257 stream <<
"KeepPhysicalOverlap: ";
259 stream << (i->keepOverlap ?
"1" :
"0") <<
" ";
261 stream <<
"Coarse Size: ";
262 for (
int i=0; i<dim; i++)
266 grid.
begin()->coords.print(stream);
275 std::ostringstream filename_str;
276 filename_str << filename;
277 filename_str << comm.rank();
278 std::ifstream file(filename_str.str());
283 std::cerr <<
"ERROR: BackupRestoreFacility::restore: couldn't open file `" << filename_str.str() <<
"'" << std::endl;
297 stream >> input >> input >> input >> input;
300 DUNE_THROW(Dune::Exception,
"Your YaspGrid backup file is written in an outdated format!");
302 std::array<int,dim> torus_dims;
303 stream >> input >> input;
304 for (
int i=0; i<dim; i++)
305 stream >> torus_dims[i];
308 stream >> input >> input;
309 stream >> refinement;
311 std::bitset<dim> periodic;
314 for (
int i=0; i<dim; i++)
324 std::vector<bool> physicalOverlapSize;
325 physicalOverlapSize.resize(refinement);
327 for (
int i=0; i<refinement; ++i)
330 physicalOverlapSize[i] = b;
334 std::array<int,dim> coarseSize;
335 stream >> input >> input;
336 for (
int i=0; i<dim; i++)
337 stream >> coarseSize[i];
339 std::array<std::vector<ctype>,dim> coords;
340 stream >> input >> input >> input >> input;
341 for (
int d=0; d<dim; d++)
343 stream >> input >> input;
348 coords[d].resize(size);
349 for (
int i=0; i<size; i++)
357 Grid* grid =
new Grid(coords, periodic, overlap, comm, coarseSize, &lb);
359 for (
int i=0; i<refinement; ++i)
Include standard header files.
Definition agrid.hh:60
YaspGrid(FieldVector< ctype, dim >, std::array< int, std::size_t{dim}>, std::bitset< std::size_t{dim}>=std::bitset< std::size_t{dim}>{0ULL}, int=1, YaspCommunication=YaspCommunication(), const Yasp::Partitioning< dim > *=YaspGrid< dim, EquidistantCoordinates< ctype, dim > >::defaultPartitioner()) -> YaspGrid< dim, EquidistantCoordinates< ctype, dim > >
facility for writing and reading grids
Definition common/backuprestore.hh:43
static Grid * restore(const std::string &)
read a hierarchic grid from disk
Definition common/backuprestore.hh:78
static void backup(const Grid &, const std::string &)
write a hierarchic grid to disk
Definition common/backuprestore.hh:51
[ provides Dune::Grid ]
Definition yaspgrid.hh:166
const Torus< Communication, dim > & torus() const
return reference to torus
Definition yaspgrid.hh:246
typename Base::Communication Communication
Definition yaspgrid.hh:181
void globalRefine(int refCount)
refine the grid refCount times.
Definition yaspgrid.hh:1216
YGridLevelIterator end() const
return iterator pointing to one past the finest level
Definition yaspgrid.hh:307
int maxLevel() const
Definition yaspgrid.hh:1210
int overlapSize(int level, int codim) const
return size (= distance in graph) of overlap region
Definition yaspgrid.hh:1399
bool isPeriodic(int i) const
return whether the grid is periodic in direction i
Definition yaspgrid.hh:279
void refineOptions(bool keepPhysicalOverlap)
set options for refinement
Definition yaspgrid.hh:1270
ReservedVector< YGridLevel, 32 >::const_iterator YGridLevelIterator
Definition yaspgrid.hh:290
const Communication & comm() const
return a communication object
Definition yaspgrid.hh:1756
Coordinates::ctype ctype
Definition yaspgrid.hh:179
int levelSize(int l, int i) const
return size of the grid (in cells) on level l in direction i
Definition yaspgrid.hh:264
YGridLevelIterator begin() const
return iterator pointing to coarsest level
Definition yaspgrid.hh:293
Definition yaspgrid/backuprestore.hh:27
static void writeOrigin(S &, const Coordinates &)
Definition yaspgrid/backuprestore.hh:30
static void readOrigin(S &, Dune::FieldVector< typename Coordinates::ctype, Coordinates::dimension > &)
Definition yaspgrid/backuprestore.hh:34
static Dune::YaspGrid< Coordinates::dimension, Coordinates > * createGrid(const Dune::FieldVector< typename Coordinates::ctype, Coordinates::dimension > &, A... args)
Definition yaspgrid/backuprestore.hh:38
static void writeOrigin(S &s, const Coordinates &coord)
Definition yaspgrid/backuprestore.hh:51
static Dune::YaspGrid< Coordinates::dimension, Coordinates > * createGrid(const Dune::FieldVector< typename Coordinates::ctype, Coordinates::dimension > &lowerleft, const Dune::FieldVector< typename Coordinates::ctype, Coordinates::dimension > &extension, A... args)
Definition yaspgrid/backuprestore.hh:69
static void readOrigin(S &s, Dune::FieldVector< ctype, dim > &coord)
Definition yaspgrid/backuprestore.hh:60
Dune::EquidistantOffsetCoordinates< ctype, dim > Coordinates
Definition yaspgrid/backuprestore.hh:48
Dune::YaspGrid< dim, Coordinates > Grid
Definition yaspgrid/backuprestore.hh:84
Grid::ctype ctype
Definition yaspgrid/backuprestore.hh:85
static void backup(const Grid &grid, std::ostream &stream)
write a hierarchic grid to disk
Definition yaspgrid/backuprestore.hh:105
static Grid * restore(std::istream &stream, Comm comm=Comm())
read a hierarchic grid from a stream
Definition yaspgrid/backuprestore.hh:149
static Grid * restore(const std::string &filename, Comm comm=Comm())
read a hierarchic grid from disk
Definition yaspgrid/backuprestore.hh:134
static void backup(const Grid &grid, const std::string &filename)
write a hierarchic grid to disk
Definition yaspgrid/backuprestore.hh:89
Grid::Traits::Communication Comm
Definition yaspgrid/backuprestore.hh:86
static void backup(const Grid &grid, const std::string &filename)
write a hierarchic grid to disk
Definition yaspgrid/backuprestore.hh:231
YaspGrid< dim, TensorProductCoordinates< ctype, dim > > Grid
Definition yaspgrid/backuprestore.hh:227
static Grid * restore(std::istream &stream, Comm comm=Comm())
read a hierarchic grid from disk
Definition yaspgrid/backuprestore.hh:292
static Grid * restore(const std::string &filename, Comm comm=Comm())
read a hierarchic grid from disk
Definition yaspgrid/backuprestore.hh:273
Grid::Traits::Communication Comm
Definition yaspgrid/backuprestore.hh:228
static void backup(const Grid &grid, std::ostream &stream)
write a hierarchic grid to disk
Definition yaspgrid/backuprestore.hh:246
Container for equidistant coordinates in a YaspGrid with non-trivial origin.
Definition coordinates.hh:131
ct origin(int d) const
Definition coordinates.hh:185
Coordinate container for a tensor product YaspGrid.
Definition coordinates.hh:245
Implement partitioner that gets a fixed partitioning from an array If the given partitioning doesn't ...
Definition partitioning.hh:147
const iTupel & dims() const
return dimensions of torus
Definition torus.hh:112
#define YASPGRID_BACKUPRESTORE_FORMAT_VERSION
Definition yaspgrid/backuprestore.hh:20