1 #ifndef DUNE_FEM_DATAWRITER_HH 2 #define DUNE_FEM_DATAWRITER_HH 18 #include <dune/grid/common/backuprestore.hh> 21 #include <dune/grid/io/visual/grapedatadisplay.hh> 60 template <
class GridImp,
75 using BaseType :: grid_;
76 using BaseType :: data_;
78 using BaseType :: path_;
79 using BaseType :: datapref_;
80 using BaseType :: writeStep_;
81 using BaseType :: outputFormat_ ;
111 OutPutDataType& data,
129 writeMyBinaryData( sequenceStamp, writeStep_ , data_ );
132 template<
class OutputTuple >
134 OutputTuple &data )
const 142 if( IOTupleType :: length > 0 )
145 IOTupleType :: output( grid_, sequenceStamp, timeStepPath, datapref_, data );
173 writeMode_( writeMode )
184 return checkPointPrefix();
238 template<
class Gr
idImp,
class DataImp = tuple<> >
262 const bool pushFront = true ;
283 Dune::BackupRestoreFacility< GridType > :: backup( grid_, stream );
285 catch ( Dune :: NotImplemented )
289 std::cerr <<
"GridPersistentObject::backup: cannot use stream backup." << std::endl;
295 Dune::BackupRestoreFacility< GridType > :: backup( grid_, filename );
297 catch ( Dune :: NotImplemented )
299 std::cerr <<
"ERROR: GridPersistentObject::backup: not possible!" << std::endl;
304 DofManagerType :: instance( grid_ ).backup();
312 DofManagerType :: instance( grid_ ).restore();
319 using BaseType :: grid_;
320 using BaseType :: data_;
322 using BaseType :: path_;
323 using BaseType :: datapref_;
324 using BaseType :: writeStep_;
325 using BaseType :: outputFormat_ ;
326 using BaseType :: grapeDisplay_;
327 using BaseType :: separateRankPath_;
360 OutPutDataType& data,
364 , persistentGridObject_( new PersistentGridObjectType( grid_ ) )
366 , checkPointStep_(
parameter.checkPointStep() )
367 , maxCheckPointNumber_(
parameter.maxNumberOfCheckPoints() )
368 , myRank_( grid.comm().rank() )
369 , takeCareOfPersistenceManager_( true )
383 : BaseType(grid, *( new OutPutDataType () ), tp,
parameter )
384 , persistentGridObject_( new PersistentGridObjectType( grid_ ) )
385 , dataPtr_ ( &data_ )
386 , checkPointStep_(
parameter.checkPointStep() )
387 , maxCheckPointNumber_(
parameter.maxNumberOfCheckPoints() )
388 , myRank_( grid.comm().rank() )
389 , takeCareOfPersistenceManager_( true )
397 delete persistentGridObject_;
398 persistentGridObject_ = 0;
413 outputFormat_ = BaseType :: binary;
415 grapeDisplay_ = false ;
417 checkPointFile_ = path_;
418 checkPointFile_ +=
"/";
419 checkPointFile_ += parameter.
prefix();
445 OutPutDataType& data,
446 const char * checkFile,
447 const bool takeCareOfPersistenceManager =
true,
448 const int writeStep = 0 )
450 , persistentGridObject_( 0 )
452 , checkPointStep_( 0 )
453 , maxCheckPointNumber_( writeStep + 1 )
455 , takeCareOfPersistenceManager_( takeCareOfPersistenceManager )
458 outputFormat_ = BaseType :: binary;
460 grapeDisplay_ = false ;
468 checkPointFile_ = checkFile;
470 bool ok = readCheckPoint();
476 checkPointFile_ = path_;
477 checkPointFile_ +=
"/";
480 ok = readCheckPoint();
483 std::cerr <<
"ERROR: unable to open checkpoint file! \n";
494 writeStep_ = writeStep ;
507 const int givenRank = -1,
511 std::string datapref(
parameter.checkPointPrefix() );
514 const bool verbose = (rank == 0);
516 int checkPointNumber = 0;
518 if( !
readParameter(checkFile,
"LastCheckPoint",checkPointNumber,verbose ) )
523 std::string checkPointFile =
path;
525 checkPointFile +=
"/";
526 checkPointFile +=
parameter.checkPointPrefix();
527 readParameter(checkPointFile,
"LastCheckPoint",checkPointNumber, verbose);
540 path, rank, datapref, checkPointNumber,
parameter.separateRankPath() );
550 grid = Dune::BackupRestoreFacility< GridType > :: restore( stream );
552 catch ( Dune :: NotImplemented )
556 std::cerr <<
"GridPersistentObject::restore: cannot use stream restore." << std::endl;
561 grid = Dune::BackupRestoreFacility< GridType > :: restore( filename );
563 catch ( Dune :: NotImplemented )
565 std::cerr <<
"ERROR: GridPersistentObject::restore: not possible!" << std::endl;
571 DUNE_THROW(InvalidStateException,
"Could not recover grid");
584 void restoreData (
const GridType &grid,
const std::string checkFile )
587 restoreData( grid, fakeData, checkFile );
598 template <
class InputTupleType>
601 InputTupleType& data,
602 const std::string checkFile,
603 const int rank = -1 )
606 const int myRank = ( rank < 0 ) ? grid.comm().rank() : rank ;
609 if( checkFile ==
"" )
611 DUNE_THROW(InvalidStateException,
"Checkpoint file empty!");
629 path_, myRank_ , datapref_, writeStep_, separateRankPath_ );
632 if( takeCareOfPersistenceManager_ )
641 template<
class InputTuple >
645 std::string
path = restorePersistentData( );
650 if( IOTupleType :: length > 0 )
652 IOTupleType :: restoreData( data, grid_, path , datapref_ );
656 DofManagerType :: instance( grid_ ).compress();
661 restoreUserData( data_ );
666 virtual const char*
myClassName()
const {
return "CheckPointer"; }
668 using BaseType :: willWrite ;
675 return ( (checkPointStep_ > 0) && (((timestep % checkPointStep_) == 0) && timestep > 0) );
678 template <
class OutputTuple>
682 const bool storePersistenceManager,
683 const int writeStep = 0 )
686 data, 0, storePersistenceManager, writeStep );
693 if( writeStep_ >= maxCheckPointNumber_ ) writeStep_ = 0;
696 std::string
path = this->writeMyBinaryData( time, writeStep_, data_ );
699 if( takeCareOfPersistenceManager_ )
706 writeCheckPoint(path, time,
719 if(
readParameter(checkPointFile_,
"LastCheckPoint",writeStep_, verbose, warn ) )
721 std::string recoverPath;
723 if( !
readParameter(checkPointFile_,
"RecoverPath", recoverPath, verbose) )
729 int storedPersistentManager = 0;
730 if(
readParameter(checkPointFile_,
"PersistenceManager", storedPersistentManager, verbose) )
732 takeCareOfPersistenceManager_ = ( storedPersistentManager > 0 );
752 std::string checkpointstr ;
754 std::stringstream checkpoint;
755 checkpoint <<
"LastCheckPoint: " << savestep << std::endl;
756 checkpoint.precision( 16 );
757 checkpoint <<
"Time: " << std::scientific << time << std::endl;
758 checkpoint <<
"SaveCount: " << savestep << std::endl;
759 checkpoint <<
"PersistenceManager: " << takeCareOfPersistenceManager_ << std::endl;
760 checkpoint <<
"NumberProcessors: " << grid_.comm().size() << std::endl;
761 checkpoint <<
"# RecoverPath can be edited by hand if data has been moved!" << std::endl;
762 checkpoint <<
"RecoverPath: " << path_ << std::endl;
763 checkpointstr = checkpoint.str();
768 std::ofstream file (checkPointFile_.c_str());
771 file << checkpointstr;
777 std::string checkPointStepFile( path );
778 checkPointStepFile +=
"/" + datapref_;
780 std::ofstream file ( checkPointStepFile.c_str() );
783 file << checkpointstr;
795 #endif // #ifndef DUNE_FEM_DATAWRITER_HH DataWriter(const GridType &grid, OutPutDataType &data, const TimeProviderBase &tp, const DataWriterParameters ¶meter=DataWriterParameters())
Constructor creating data writer.
Definition: datawriter.hh:110
std::stringstream macroGrid_
Definition: datawriter.hh:84
std::string restorePersistentData()
restores data, assumes that all objects have been created before this method is called ...
Definition: datawriter.hh:625
void writeCheckPoint(const std::string &path, const double time, const int savestep) const
Definition: datawriter.hh:744
virtual std::string prefix() const
base of file name for data file (fem.io.datafileprefix)
Definition: datawriter.hh:182
void backup(const std::string &token, const T &value)
Definition: persistencemanager.hh:308
CheckPointer< GridImp, DataImp > ThisType
type of this class
Definition: datawriter.hh:333
virtual bool writeMode() const
writeMode, true when checkpointer is in backup mode
Definition: datawriter.hh:206
virtual bool separateRankPath() const
return true if all data should be written to a spearate path per rank
Definition: datawriter.hh:47
virtual const char * myClassName() const
print class name
Definition: datawriter.hh:666
PersistentGridObjectType * persistentGridObject_
Definition: datawriter.hh:339
static int rank()
Definition: mpimanager.hh:116
Implementation of the IOInterface. This class manages checkpointing.
Definition: datawriter.hh:239
CheckPointer(const GridType &grid, const TimeProviderBase &tp, const CheckPointerParameters ¶meter=CheckPointerParameters())
Constructor generating a checkpointer.
Definition: datawriter.hh:380
Container for User Specified Parameters.
Definition: io/parameter.hh:187
int timeStep() const
obtain number of the current time step
Definition: timeprovider.hh:103
static std::string uniqueFileName(const std::string &tag="")
Definition: persistencemanager.hh:368
const ParameterReader & parameter() const noexcept
Definition: dataoutput.hh:170
static void startRestore(const std::string &path)
Definition: persistencemanager.hh:363
static RestoreStreamType & restoreStream()
Definition: persistencemanager.hh:338
virtual void writeBinaryData(const double sequenceStamp) const
write binary data
Definition: datawriter.hh:127
bool willWrite(const TimeProviderBase &tp) const
returns true if data will be written on next write call
Definition: datawriter.hh:671
Implementation of the Dune::IOInterface. This class manages data output. Available output formats are...
Definition: datawriter.hh:62
static void insert(PersistentObject &object, const bool pushFront=false)
Definition: persistencemanager.hh:343
static std::string readPath()
Definition: iointerface.hh:260
std::ostream & stream()
Definition: standardstreams.hh:85
Implementation of the Dune::Fem::IOInterface. This class manages data output. Available output format...
Definition: dataoutput.hh:183
GridImp GridType
type of grid used
Definition: datawriter.hh:66
Definition: datacollector.hh:45
static void writeSingleCheckPoint(const GridType &grid, OutputTuple &data, const double time, const bool storePersistenceManager, const int writeStep=0)
Definition: datawriter.hh:679
std::string writeMyBinaryData(const double sequenceStamp, const int step, OutputTuple &data) const
Definition: datawriter.hh:133
CheckPointerParameters(const std::string keyPrefix="fem.io.")
Definition: datawriter.hh:176
static bool readParameter(std::istream &file, const std::string keyword, T &data, bool verbose=true, bool warn=true)
Definition: asciiparser.hh:18
CheckPointerParameters(const bool writeMode, const std::string keyPrefix="fem.io.")
Definition: datawriter.hh:171
static std::string defaultGridKey(int dimension, bool check=true)
return FEM key for macro grid reading
Definition: iointerface.hh:186
DataWriter< GridImp, DataImp > BaseType
type of base class
Definition: datawriter.hh:317
DataWriterParameters(const ParameterReader ¶meter=Parameter::container())
Definition: datawriter.hh:36
Parameter class for Dune::Fem::DataOutput.
Definition: dataoutput.hh:57
void initialize(const CheckPointerParameters ¶meter)
Definition: datawriter.hh:410
general base for time providers
Definition: timeprovider.hh:35
static void restoreData(const GridType &grid, const std::string checkFile)
restores data, assumes that all objects have been created and inserted to PersistenceManager before t...
Definition: datawriter.hh:584
DataWriter(const GridType &grid, OutPutDataType &data, const DataWriterParameters ¶meter=DataWriterParameters())
Constructor creating data writer.
Definition: datawriter.hh:95
void restore(const std::string &token, T &value)
Definition: persistencemanager.hh:315
const std::string name_
Definition: datawriter.hh:252
CheckPointer(const GridType &grid, const int myRank, OutPutDataType &data, const char *checkFile, const bool takeCareOfPersistenceManager=true, const int writeStep=0)
Constructor generating a checkpointer to restore data.
Definition: datawriter.hh:443
call appropriate backup and restore methods on the grid class
Definition: datawriter.hh:249
static const std::string & gridName()
Definition: gridname.hh:33
virtual bool separateRankPath() const
return true if all data should be written to a spearate path per rank
Definition: datawriter.hh:212
static BackupStreamType & backupStream()
Definition: persistencemanager.hh:333
bool writeMode_
Definition: datawriter.hh:168
Definition: coordinate.hh:4
Definition: iotuple.hh:155
virtual void writeBinaryData(const double time) const
write binary data
Definition: datawriter.hh:690
OutPutDataType * dataPtr_
Definition: datawriter.hh:341
const int maxCheckPointNumber_
Definition: datawriter.hh:344
const int checkPointStep_
Definition: datawriter.hh:343
DataOutput< GridImp, DataImp > BaseType
Definition: datawriter.hh:73
virtual std::string checkPointPrefix() const
return default value for check point prefix
Definition: datawriter.hh:200
GridPersistentObject(const GridType &grid)
constructor storing grid
Definition: datawriter.hh:255
GridImp GridType
used grid type
Definition: datawriter.hh:244
const GridType & grid_
Definition: datawriter.hh:251
virtual void restore()
restore grid
Definition: datawriter.hh:308
~CheckPointer()
Definition: datawriter.hh:394
std::istream & stream()
Definition: standardstreams.hh:220
static ParameterContainer & container()
Definition: io/parameter.hh:190
static void write(const std::string &filename, const std::string &fileextension="", bool writeAll=true)
write the parameter database to a file
Definition: io/parameter.hh:515
void restoreData()
Definition: datawriter.hh:659
static void remove(PersistentObject &object)
Definition: persistencemanager.hh:348
base class for persistent objects
Definition: persistencemanager.hh:96
static GridType * restoreGrid(const std::string checkFile, const int givenRank=-1, const CheckPointerParameters ¶meter=CheckPointerParameters())
restore grid from previous runs
Definition: datawriter.hh:506
bool readCheckPoint(const bool warn=true)
read checkpoint file
Definition: datawriter.hh:714
virtual int maxNumberOfCheckPoints() const
maximal number of checkpoint stages written (default = 2)
Definition: datawriter.hh:194
static bool verbose()
obtain the cached value for fem.verbose
Definition: io/parameter.hh:444
DofManager< GridType > DofManagerType
Definition: datawriter.hh:246
DataWriter< GridImp, DataImp > ThisType
type of this class
Definition: datawriter.hh:71
local parameter collection for CheckPointer
Definition: datawriter.hh:165
virtual std::string path() const
path where the data is stored (always relative to fem.prefix)
Definition: dataoutput.hh:76
GridPersistentObject PersistentGridObjectType
Definition: datawriter.hh:338
void restoreUserData(InputTuple &data)
Definition: datawriter.hh:642
virtual int checkPointStep() const
return number of timestep to be passed until next checkpoint in written
Definition: datawriter.hh:188
CheckPointer(const GridType &grid, OutPutDataType &data, const TimeProviderBase &tp, const CheckPointerParameters ¶meter=CheckPointerParameters())
Constructor generating a checkpointer.
Definition: datawriter.hh:359
T getValue(const std::string &key) const
get mandatory parameter
Definition: reader.hh:149
const std::string keyPrefix_
Definition: dataoutput.hh:63
static void restoreData(const GridType &grid, InputTupleType &data, const std::string checkFile, const int rank=-1)
restores data, assumes that all objects have been created and inserted to PersistenceManager before t...
Definition: datawriter.hh:600
std::string checkPointFile_
Definition: datawriter.hh:347
virtual std::string macroGridName(const int dim) const
base of file name for data file (fem.io.macroGridFile)
Definition: datawriter.hh:41
virtual int outputformat() const
format of output (fem.io.outputformat)
Definition: datawriter.hh:217
Definition: datawriter.hh:30
DataImp OutPutDataType
type of data tuple
Definition: datawriter.hh:68
static void createPath(const std::string &path)
create given path in combination with rank
Definition: iointerface.hh:237
DataImp OutPutDataType
used data tuple
Definition: datawriter.hh:336
virtual void backup() const
backup grid
Definition: datawriter.hh:275
virtual ~DataWriter()
destructor
Definition: datawriter.hh:120
int myRank_
Definition: datawriter.hh:345
~GridPersistentObject()
destructor removing grid object
Definition: datawriter.hh:268
virtual const char * myClassName() const
print class name
Definition: datawriter.hh:124
bool takeCareOfPersistenceManager_
Definition: datawriter.hh:349
virtual double savestep() const
save data every savestep interval (fem.io.savestep)
Definition: dataoutput.hh:121
virtual bool writeMode() const
Definition: dataoutput.hh:165
static std::string createRecoverPath(const std::string &pathPrefix, const int rank, const std::string &dataPrefix, const int step, const bool alsoUseRankPath=true)
Definition: iointerface.hh:331
DataWriterParameters(std::string keyPrefix, const ParameterReader ¶meter=Parameter::container())
Definition: datawriter.hh:32
const bool separateRankPath_
Definition: datawriter.hh:85