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) <<
" ";
129 static Grid *
restore (
const std::string &filename, Comm comm = Comm())
131 std::ifstream file(filename);
133 return restore(file,comm);
136 std::cerr <<
"ERROR: BackupRestoreFacility::restore: couldn't open file `" << filename <<
"'" << std::endl;
142 static Grid *
restore (std::istream &stream, Comm comm = Comm())
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);
263 static Grid *
restore (
const std::string &filename, Comm comm = Comm())
265 std::ostringstream filename_str;
266 filename_str << filename;
267 filename_str << comm.rank();
268 std::ifstream file(filename_str.str());
270 return restore(file, comm);
273 std::cerr <<
"ERROR: BackupRestoreFacility::restore: couldn't open file `" << filename_str.str() <<
"'" << std::endl;
279 static Grid *
restore (std::istream &stream, Comm comm = Comm())
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)
357 #endif // #ifndef DUNE_GRID_YASPGRID_BACKUPRESTORE_HH Include standard header files.
Definition: agrid.hh:58
const Torus< CollectiveCommunicationType, dim > & torus() const
return reference to torus
Definition: yaspgrid.hh:249
void globalRefine(int refCount)
refine the grid refCount times.
Definition: yaspgrid.hh:1049
static void writeOrigin(S &s, const Coordinates &coord)
Definition: yaspgrid/backuprestore.hh:27
Coordinates::ctype ctype
Type used for coordinates.
Definition: yaspgrid.hh:179
int maxLevel() const
Definition: yaspgrid.hh:1043
const iTupel & dims() const
return dimensions of torus
Definition: torus.hh:116
YGridLevelIterator end() const
return iterator pointing to one past the finest level
Definition: yaspgrid.hh:310
Grid::Traits::CollectiveCommunication Comm
Definition: yaspgrid/backuprestore.hh:221
[ provides Dune::Grid ]
Definition: yaspgrid.hh:58
static void readOrigin(S &s, Dune::FieldVector< typename Coordinates::ctype, Coordinates::dimension > &coord)
Definition: yaspgrid/backuprestore.hh:31
static void writeOrigin(S &s, const Coordinates &coord)
Definition: yaspgrid/backuprestore.hh:48
#define YASPGRID_BACKUPRESTORE_FORMAT_VERSION
Definition: yaspgrid/backuprestore.hh:17
Grid::Traits::CollectiveCommunication Comm
Definition: yaspgrid/backuprestore.hh:83
constexpr Overlap overlap
PartitionSet for the overlap partition.
Definition: partitionset.hh:276
YGridLevelIterator begin() const
return iterator pointing to coarsest level
Definition: yaspgrid.hh:296
const CollectiveCommunicationType & comm() const
return a collective communication object
Definition: yaspgrid.hh:1590
Coordinate container for a tensor product YaspGrid.
Definition: coordinates.hh:233
ReservedVector< YGridLevel, 32 >::const_iterator YGridLevelIterator
Iterator over the grid levels.
Definition: yaspgrid.hh:293
static Grid * restore(const std::string &filename, Comm comm=Comm())
Definition: yaspgrid/backuprestore.hh:263
Definition: yaspgrid/backuprestore.hh:23
ct origin(int d) const
Definition: coordinates.hh:174
int levelSize(int l, int i) const
return size of the grid (in cells) on level l in direction i
Definition: yaspgrid.hh:267
static void backup(const Grid &grid, const std::string &filename)
Definition: yaspgrid/backuprestore.hh:86
Dune::EquidistantOffsetCoordinates< ctype, dim > Coordinates
Definition: yaspgrid/backuprestore.hh:45
int overlapSize(int level, int codim) const
return size (= distance in graph) of overlap region
Definition: yaspgrid.hh:1232
Container for equidistant coordinates in a YaspGrid with non-trivial origin.
Definition: coordinates.hh:124
facility for writing and reading grids
Definition: common/backuprestore.hh:40
static Grid * restore(std::istream &stream, Comm comm=Comm())
Definition: yaspgrid/backuprestore.hh:142
static Grid * restore(std::istream &stream, Comm comm=Comm())
Definition: yaspgrid/backuprestore.hh:279
Dune::YaspGrid< dim, Coordinates > Grid
Definition: yaspgrid/backuprestore.hh:81
Implement partitioner that gets a fixed partitioning from an array If the given partitioning doesn't ...
Definition: partitioning.hh:115
static void readOrigin(S &s, Dune::FieldVector< ctype, dim > &coord)
Definition: yaspgrid/backuprestore.hh:57
static void backup(const Grid &grid, const std::string &filename)
Definition: yaspgrid/backuprestore.hh:224
void refineOptions(bool keepPhysicalOverlap)
set options for refinement
Definition: yaspgrid.hh:1103
YaspGrid< dim, TensorProductCoordinates< ctype, dim > > Grid
Definition: yaspgrid/backuprestore.hh:220
static void backup(const Grid &grid, std::ostream &stream)
Definition: yaspgrid/backuprestore.hh:239
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 backup(const Grid &grid, std::ostream &stream)
Definition: yaspgrid/backuprestore.hh:102
static Grid * restore(const std::string &filename, Comm comm=Comm())
Definition: yaspgrid/backuprestore.hh:129
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
Grid::ctype ctype
Definition: yaspgrid/backuprestore.hh:82
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
bool isPeriodic(int i) const
return whether the grid is periodic in direction i
Definition: yaspgrid.hh:282