3#ifndef DUNE_GRID_YASPGRID_BACKUPRESTORE_HH
4#define DUNE_GRID_YASPGRID_BACKUPRESTORE_HH
10#include <dune/common/exceptions.hh>
11#include <dune/common/fvector.hh>
17#define YASPGRID_BACKUPRESTORE_FORMAT_VERSION 2
22 template<
class Coordinates>
31 static void readOrigin(S& s, Dune::FieldVector<typename Coordinates::ctype,Coordinates::dimension>& coord)
34 template<
typename... A>
36 const Dune::FieldVector<typename Coordinates::ctype,Coordinates::dimension>& lowerleft, A... args)
42 template<
class ctype,
int dim>
51 for (
int i=0; i<dim; i++)
52 s << coord.
origin(i) <<
" ";
57 static void readOrigin(S& s, Dune::FieldVector<ctype, dim>& coord)
61 for (
int i=0; i<dim; i++)
65 template<
typename... A>
67 const Dune::FieldVector<typename Coordinates::ctype,Coordinates::dimension>& lowerleft,
68 const Dune::FieldVector<typename Coordinates::ctype,Coordinates::dimension>& extension, A... args)
70 Dune::FieldVector<typename Coordinates::ctype,Coordinates::dimension> upperright(lowerleft);
71 upperright += extension;
77 template<
int dim,
class Coordinates>
86 static void backup (
const Grid &grid,
const std::string &filename )
88 if (grid.
comm().rank() == 0)
90 std::ofstream file(filename);
97 std::cerr <<
"ERROR: BackupRestoreFacility::backup: couldn't open file `" << filename <<
"'" << std::endl;
102 static void backup (
const Grid &grid, std::ostream &stream )
105 stream <<
"Torus structure: ";
106 for (
int i=0; i<dim; i++)
108 stream << std::endl <<
"Refinement level: " << grid.
maxLevel() << std::endl;
109 stream <<
"Periodicity: ";
110 for (
int i=0; i<dim; i++)
112 stream << std::endl <<
"Overlap: " << grid.
overlapSize(0,0) << std::endl;
113 stream <<
"KeepPhysicalOverlap: ";
115 stream << (i->keepOverlap ?
"1" :
"0") <<
" ";
117 stream <<
"Coarse Size: ";
118 for (
int i=0; i<dim; i++)
121 stream <<
"Meshsize: " ;
122 for (
int i=0; i<dim; i++)
123 stream << grid.
begin()->coords.meshsize(i,0) <<
" ";
131 std::ifstream file(filename);
136 std::cerr <<
"ERROR: BackupRestoreFacility::restore: couldn't open file `" << filename <<
"'" << std::endl;
147 stream >> input >> input >> input >> input;
150 DUNE_THROW(Dune::Exception,
"Your YaspGrid backup file is written in an outdated format!");
152 std::array<int,dim> torus_dims;
153 stream >> input >> input;
154 for (
int i=0; i<dim; i++)
155 stream >> torus_dims[i];
158 stream >> input >> input;
159 stream >> refinement;
161 std::bitset<dim> periodic;
164 for (
int i=0; i<dim; i++)
174 std::vector<bool> physicalOverlapSize;
175 physicalOverlapSize.resize(refinement);
177 for (
int i=0; i<refinement; ++i)
180 physicalOverlapSize[i] = b;
183 std::array<int,dim> coarseSize;
184 stream >> input >> input;
185 for (
int i=0; i<dim; i++)
186 stream >> coarseSize[i];
188 Dune::FieldVector<ctype,dim> h;
190 for (
int i=0; i<dim; i++)
193 Dune::FieldVector<ctype,dim> origin;
197 Dune::FieldVector<ctype,dim> length(h);
198 for (
int i=0; i<dim; i++)
199 length[i] *= coarseSize[i];
205 for (
int i=0; i<refinement; ++i)
216 template<
int dim,
class ctype>
224 static void backup (
const Grid &grid,
const std::string &filename )
226 std::ostringstream filename_str;
227 filename_str << filename << grid.
comm().rank();
228 std::ofstream file( filename_str.str() );
235 std::cerr <<
"ERROR: BackupRestoreFacility::backup: couldn't open file `" << filename_str.str() <<
"'" << std::endl;
239 static void backup (
const Grid &grid, std::ostream &stream )
242 stream <<
"Torus structure: ";
243 for (
int i=0; i<dim; i++)
245 stream << std::endl <<
"Refinement level: " << grid.
maxLevel() << std::endl;
246 stream <<
"Periodicity: ";
247 for (
int i=0; i<dim; i++)
249 stream << std::endl <<
"Overlap: " << grid.
overlapSize(0,0) << std::endl;
250 stream <<
"KeepPhysicalOverlap: ";
252 stream << (i->keepOverlap ?
"1" :
"0") <<
" ";
254 stream <<
"Coarse Size: ";
255 for (
int i=0; i<dim; i++)
259 grid.
begin()->coords.print(stream);
265 std::ostringstream filename_str;
266 filename_str << filename;
267 filename_str << comm.rank();
268 std::ifstream file(filename_str.str());
273 std::cerr <<
"ERROR: BackupRestoreFacility::restore: couldn't open file `" << filename_str.str() <<
"'" << std::endl;
284 stream >> input >> input >> input >> input;
287 DUNE_THROW(Dune::Exception,
"Your YaspGrid backup file is written in an outdated format!");
289 std::array<int,dim> torus_dims;
290 stream >> input >> input;
291 for (
int i=0; i<dim; i++)
292 stream >> torus_dims[i];
295 stream >> input >> input;
296 stream >> refinement;
298 std::bitset<dim> periodic;
301 for (
int i=0; i<dim; i++)
311 std::vector<bool> physicalOverlapSize;
312 physicalOverlapSize.resize(refinement);
314 for (
int i=0; i<refinement; ++i)
317 physicalOverlapSize[i] = b;
321 std::array<int,dim> coarseSize;
322 stream >> input >> input;
323 for (
int i=0; i<dim; i++)
324 stream >> coarseSize[i];
326 std::array<std::vector<ctype>,dim> coords;
327 stream >> input >> input >> input >> input;
328 for (
int d=0; d<dim; d++)
330 stream >> input >> input;
335 coords[d].resize(size);
336 for (
int i=0; i<size; i++)
344 Grid* grid =
new Grid(coords, periodic, overlap, comm, coarseSize, &lb);
346 for (
int i=0; i<refinement; ++i)
Include standard header files.
Definition agrid.hh:60
facility for writing and reading grids
Definition common/backuprestore.hh:41
static Grid * restore(const std::string &filename)
read a hierarchic grid from disk
Definition common/backuprestore.hh:76
static void backup(const Grid &grid, const std::string &filename)
write a hierarchic grid to disk
Definition common/backuprestore.hh:49
GridFamily::Traits::CollectiveCommunication CollectiveCommunication
A type that is a model of Dune::CollectiveCommunication. It provides a portable way for collective co...
Definition common/grid.hh:519
[ provides Dune::Grid ]
Definition yaspgrid.hh:165
void globalRefine(int refCount)
refine the grid refCount times.
Definition yaspgrid.hh:1052
const Torus< CollectiveCommunicationType, dim > & torus() const
return reference to torus
Definition yaspgrid.hh:249
YGridLevelIterator end() const
return iterator pointing to one past the finest level
Definition yaspgrid.hh:310
int maxLevel() const
Definition yaspgrid.hh:1046
int overlapSize(int level, int codim) const
return size (= distance in graph) of overlap region
Definition yaspgrid.hh:1235
const CollectiveCommunicationType & comm() const
return a collective communication object
Definition yaspgrid.hh:1593
bool isPeriodic(int i) const
return whether the grid is periodic in direction i
Definition yaspgrid.hh:282
void refineOptions(bool keepPhysicalOverlap)
set options for refinement
Definition yaspgrid.hh:1106
ReservedVector< YGridLevel, 32 >::const_iterator YGridLevelIterator
Iterator over the grid levels.
Definition yaspgrid.hh:293
Coordinates::ctype ctype
Type used for coordinates.
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:267
YGridLevelIterator begin() const
return iterator pointing to coarsest level
Definition yaspgrid.hh:296
Definition yaspgrid/backuprestore.hh:24
static void writeOrigin(S &s, const Coordinates &coord)
Definition yaspgrid/backuprestore.hh:27
static void readOrigin(S &s, Dune::FieldVector< typename Coordinates::ctype, Coordinates::dimension > &coord)
Definition yaspgrid/backuprestore.hh:31
static Dune::YaspGrid< Coordinates::dimension, Coordinates > * createGrid(const Dune::FieldVector< typename Coordinates::ctype, Coordinates::dimension > &lowerleft, A... args)
Definition yaspgrid/backuprestore.hh:35
static void writeOrigin(S &s, const Coordinates &coord)
Definition yaspgrid/backuprestore.hh:48
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:66
static void readOrigin(S &s, Dune::FieldVector< ctype, dim > &coord)
Definition yaspgrid/backuprestore.hh:57
Dune::EquidistantOffsetCoordinates< ctype, dim > Coordinates
Definition yaspgrid/backuprestore.hh:45
Dune::YaspGrid< dim, Coordinates > Grid
Definition yaspgrid/backuprestore.hh:81
Grid::ctype ctype
Definition yaspgrid/backuprestore.hh:82
static void backup(const Grid &grid, std::ostream &stream)
Definition yaspgrid/backuprestore.hh:102
Grid::Traits::CollectiveCommunication Comm
Definition yaspgrid/backuprestore.hh:83
static Grid * restore(std::istream &stream, Comm comm=Comm())
Definition yaspgrid/backuprestore.hh:142
static Grid * restore(const std::string &filename, Comm comm=Comm())
Definition yaspgrid/backuprestore.hh:129
static void backup(const Grid &grid, const std::string &filename)
Definition yaspgrid/backuprestore.hh:86
static void backup(const Grid &grid, const std::string &filename)
Definition yaspgrid/backuprestore.hh:224
YaspGrid< dim, TensorProductCoordinates< ctype, dim > > Grid
Definition yaspgrid/backuprestore.hh:220
static Grid * restore(std::istream &stream, Comm comm=Comm())
Definition yaspgrid/backuprestore.hh:279
static Grid * restore(const std::string &filename, Comm comm=Comm())
Definition yaspgrid/backuprestore.hh:263
Grid::Traits::CollectiveCommunication Comm
Definition yaspgrid/backuprestore.hh:221
static void backup(const Grid &grid, std::ostream &stream)
Definition yaspgrid/backuprestore.hh:239
Container for equidistant coordinates in a YaspGrid with non-trivial origin.
Definition coordinates.hh:125
ct origin(int d) const
Definition coordinates.hh:174
Coordinate container for a tensor product YaspGrid.
Definition coordinates.hh:234
Implement partitioner that gets a fixed partitioning from an array If the given partitioning doesn't ...
Definition partitioning.hh:116
const iTupel & dims() const
return dimensions of torus
Definition torus.hh:115
#define YASPGRID_BACKUPRESTORE_FORMAT_VERSION
Definition yaspgrid/backuprestore.hh:17