1#ifndef DUNE_FEM_DATAWRITER_HH
2#define DUNE_FEM_DATAWRITER_HH
21#include <dune/grid/common/backuprestore.hh>
24#include <dune/grid/io/visual/grapedatadisplay.hh>
63 template <
class GridImp,
101 :
BaseType( grid, data, parameter ),
117 :
BaseType( grid, data, tp, parameter ),
135 template<
class OutputTuple >
137 OutputTuple &data )
const
145 if( IOTupleType :: length > 0 )
148 IOTupleType :: output(
grid_, sequenceStamp, timeStepPath,
datapref_, data );
235 template<
class Gr
idImp >
239 typedef std::tuple<> DataImp;
260 const bool pushFront = true ;
280 std::string gridBackup ;
283 std::stringstream gridBackupStream;
284 Dune::BackupRestoreFacility< GridType > :: backup(
grid_, gridBackupStream );
285 gridBackup = gridBackupStream.str();
287 PersistenceManager :: backupStream() << gridBackup;
289 catch (
const Dune :: NotImplemented& )
292 if( Parameter :: verbose () )
293 std::cerr <<
"GridPersistentObject::backup: cannot use stream backup." << std::endl;
298 std::string filename( PersistenceManager :: uniqueFileName(
name_ ) );
299 Dune::BackupRestoreFacility< GridType > :: backup(
grid_, filename );
301 catch (
const Dune :: NotImplemented& )
303 std::cerr <<
"ERROR: GridPersistentObject::backup: not possible!" << std::endl;
308 DofManagerType :: instance(
grid_ ).backup();
363 ,
myRank_( grid.comm().rank() )
383 ,
myRank_( grid.comm().rank() )
425 const char * checkFile,
426 const bool takeCareOfPersistenceManager =
true,
460 const bool warn = (myRank == 0);
463 std::cerr <<
"WARNING: Coudn't open file `" << checkFile <<
"' trying file `" <<
checkPointFile_ <<
"' instead!" << std::endl;
469 std::cerr <<
"ERROR: unable to open checkpoint file! \n";
493 const int givenRank = -1,
496 const int rank = ( givenRank < 0 ) ? MPIManager :: rank() : givenRank ;
497 std::string datapref( parameter.checkPointPrefix() );
500 const bool verbose = (rank == 0);
502 int checkPointNumber = 0;
504 if( !
readParameter(checkFile,
"LastCheckPoint",checkPointNumber, verbose,
false ) )
509 std::string checkPointFile =
path;
511 checkPointFile +=
"/";
512 checkPointFile += parameter.checkPointPrefix();
515 std::cerr <<
"WARNING: Coudn't open file `" << checkFile <<
"' trying file `" << checkPointFile <<
"' instead!" << std::endl;
517 readParameter(checkPointFile,
"LastCheckPoint",checkPointNumber, verbose);
530 path, rank, datapref, checkPointNumber, parameter.separateRankPath() );
533 PersistenceManager :: startRestore (
path );
539 std::string gridData;
540 PersistenceManager :: restoreStream() >> gridData;
543 std::stringstream gridStream( gridData );
545 gridData = std::string();
548 grid = Dune::BackupRestoreFacility< GridType > :: restore( gridStream );
550 catch (
const Dune :: NotImplemented& )
553 if( Parameter :: verbose () )
554 std::cerr <<
"GridPersistentObject::restore: cannot use stream restore." << std::endl;
557 std::string name ( Fem :: gridName( *grid ) );
558 std::string filename( PersistenceManager :: uniqueFileName( name ) );
559 grid = Dune::BackupRestoreFacility< GridType > :: restore( filename );
561 catch (
const Dune :: NotImplemented& )
563 std::cerr <<
"ERROR: GridPersistentObject::restore: not possible!" << std::endl;
569 DUNE_THROW(InvalidStateException,
"Could not recover grid");
585 const int myRank = ( rank < 0 ) ? grid.comm().rank() : rank ;
588 if( checkFile ==
"" )
590 DUNE_THROW(InvalidStateException,
"Checkpoint file empty!");
620 template<
class InputTuple >
626 DofManagerType :: instance(
grid_ ).restore();
633 DofManagerType :: instance(
grid_ ).compress();
643 virtual const char*
myClassName()
const {
return "CheckPointer"; }
657 const bool storePersistenceManager,
695 std::string recoverPath;
703 int storedPersistentManager = 0;
720 const int savestep )
const
726 std::string checkpointstr ;
728 std::stringstream checkpoint;
729 checkpoint <<
"LastCheckPoint: " << savestep << std::endl;
730 checkpoint.precision( 16 );
731 checkpoint <<
"Time: " << std::scientific << time << std::endl;
732 checkpoint <<
"SaveCount: " << savestep << std::endl;
734 checkpoint <<
"NumberProcessors: " <<
grid_.comm().size() << std::endl;
735 checkpoint <<
"# RecoverPath can be edited by hand if data has been moved!" << std::endl;
736 checkpoint <<
"RecoverPath: " <<
path_ << std::endl;
737 checkpointstr = checkpoint.str();
745 file << checkpointstr;
751 std::string checkPointStepFile(
path );
754 std::ofstream file ( checkPointStepFile.c_str() );
757 file << checkpointstr;
Definition: bindguard.hh:11
static bool readParameter(std::istream &file, const std::string keyword, T &data, bool verbose=true, bool warn=true)
Definition: asciiparser.hh:18
static const std::string & gridName()
Definition: gridname.hh:33
Parameter class for Dune::Fem::DataOutput.
Definition: dataoutput.hh:73
const ParameterReader & parameter() const noexcept
Definition: dataoutput.hh:182
const std::string keyPrefix_
Definition: dataoutput.hh:75
Implementation of the Dune::Fem::IOInterface. This class manages data output. Available output format...
Definition: dataoutput.hh:197
const std::string & path() const
return output path name
Definition: dataoutput.hh:413
int writeStep_
Definition: dataoutput.hh:488
std::string path_
Definition: dataoutput.hh:482
int writeStep() const
return write step
Definition: dataoutput.hh:419
bool grapeDisplay_
Definition: dataoutput.hh:485
OutputFormat outputFormat_
Definition: dataoutput.hh:498
OutPutDataType data_
Definition: dataoutput.hh:479
virtual bool willWrite() const
returns true if data will be written on next write call
Definition: dataoutput.hh:350
const GridType & grid_
type of this class
Definition: dataoutput.hh:478
std::string datapref_
Definition: dataoutput.hh:483
Definition: datawriter.hh:34
virtual bool separateRankPath() const
return true if all data should be written to a spearate path per rank
Definition: datawriter.hh:50
DataWriterParameters(std::string keyPrefix, const ParameterReader ¶meter=Parameter::container())
Definition: datawriter.hh:35
virtual std::string macroGridName(const int dim) const
base of file name for data file (fem.io.macroGridFile)
Definition: datawriter.hh:44
DataWriterParameters(const ParameterReader ¶meter=Parameter::container())
Definition: datawriter.hh:39
Implementation of the Dune::IOInterface. This class manages data output. Available output formats are...
Definition: datawriter.hh:66
DataWriter(const GridType &grid, OutPutDataType &data, const TimeProviderBase &tp, const DataWriterParameters ¶meter=DataWriterParameters())
Constructor creating data writer.
Definition: datawriter.hh:113
const bool separateRankPath_
Definition: datawriter.hh:88
virtual void writeBinaryData(const double sequenceStamp) const
write binary data
Definition: datawriter.hh:130
virtual const char * myClassName() const
print class name
Definition: datawriter.hh:127
DataOutput< GridImp, DataImp > BaseType
Definition: datawriter.hh:76
virtual ~DataWriter()
destructor
Definition: datawriter.hh:123
std::stringstream macroGrid_
Definition: datawriter.hh:87
GridImp GridType
type of grid used
Definition: datawriter.hh:69
DataImp OutPutDataType
type of data tuple
Definition: datawriter.hh:71
DataWriter< GridImp, DataImp > ThisType
type of this class
Definition: datawriter.hh:74
std::string writeMyBinaryData(const double sequenceStamp, const int step, OutputTuple &data) const
Definition: datawriter.hh:136
DataWriter(const GridType &grid, OutPutDataType &data, const DataWriterParameters ¶meter=DataWriterParameters())
Constructor creating data writer.
Definition: datawriter.hh:98
local parameter collection for CheckPointer
Definition: datawriter.hh:169
virtual int outputformat() const
format of output (fem.io.outputformat)
Definition: datawriter.hh:220
virtual std::string checkPointPrefix() const
return default value for check point prefix
Definition: datawriter.hh:203
virtual int checkPointStep() const
return number of timestep to be passed until next checkpoint in written
Definition: datawriter.hh:191
virtual int maxNumberOfCheckPoints() const
maximal number of checkpoint stages written (default = 2)
Definition: datawriter.hh:197
bool writeMode_
Definition: datawriter.hh:171
virtual bool writeMode() const
writeMode, true when checkpointer is in backup mode
Definition: datawriter.hh:209
virtual std::string prefix() const
base of file name for data file (fem.io.datafileprefix)
Definition: datawriter.hh:185
virtual bool separateRankPath() const
return true if all data should be written to a spearate path per rank
Definition: datawriter.hh:215
CheckPointerParameters(const bool writeMode, const std::string keyPrefix="fem.io.")
Definition: datawriter.hh:174
CheckPointerParameters(const std::string keyPrefix="fem.io.")
Definition: datawriter.hh:179
Implementation of the IOInterface. This class manages checkpointing.
Definition: datawriter.hh:238
std::string checkPointFile_
Definition: datawriter.hh:346
static void restoreData(const GridType &grid, 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:582
std::unique_ptr< PersistentGridObjectType > persistentGridObject_
Definition: datawriter.hh:338
CheckPointer(const GridType &grid, const CheckPointerParameters ¶meter=CheckPointerParameters())
Constructor generating a checkpointer.
Definition: datawriter.hh:356
DofManager< GridType > DofManagerType
Definition: datawriter.hh:244
GridPersistentObject PersistentGridObjectType
Definition: datawriter.hh:337
const int checkPointStep_
Definition: datawriter.hh:342
const int maxCheckPointNumber_
Definition: datawriter.hh:343
bool readCheckPoint(const bool warn=true)
read checkpoint file
Definition: datawriter.hh:688
void restoreUserData(InputTuple &data)
Definition: datawriter.hh:621
bool willWrite(const TimeProviderBase &tp) const
returns true if data will be written on next write call
Definition: datawriter.hh:648
int myRank_
Definition: datawriter.hh:344
OutPutDataType fakeData_
Definition: datawriter.hh:335
OutPutDataType * dataPtr_
Definition: datawriter.hh:340
DataWriter< GridImp, DataImp > BaseType
type of base class
Definition: datawriter.hh:318
static void writeSingleCheckPoint(const GridType &grid, const double time, const bool storePersistenceManager, const int writeStep=0)
Definition: datawriter.hh:655
virtual const char * myClassName() const
print class name
Definition: datawriter.hh:643
void writeCheckPoint(const std::string &path, const double time, const int savestep) const
Definition: datawriter.hh:718
GridImp GridType
used grid type
Definition: datawriter.hh:242
DataImp OutPutDataType
used data tuple
Definition: datawriter.hh:334
static GridType * restoreGrid(const std::string checkFile, const int givenRank=-1, const CheckPointerParameters ¶meter=CheckPointerParameters())
restore grid from previous runs
Definition: datawriter.hh:492
CheckPointer(const GridType &grid, const TimeProviderBase &tp, const CheckPointerParameters ¶meter=CheckPointerParameters())
Constructor generating a checkpointer.
Definition: datawriter.hh:376
void initialize(const CheckPointerParameters ¶meter)
Definition: datawriter.hh:390
void restoreData()
Definition: datawriter.hh:636
CheckPointer(const GridType &grid, const int myRank, const char *checkFile, const bool takeCareOfPersistenceManager=true, const int writeStep=0)
Constructor generating a checkpointer to restore data.
Definition: datawriter.hh:423
CheckPointer< GridImp > ThisType
type of this class
Definition: datawriter.hh:331
std::string restorePersistentData()
restores data, assumes that all objects have been created before this method is called
Definition: datawriter.hh:604
bool takeCareOfPersistenceManager_
Definition: datawriter.hh:348
virtual void writeBinaryData(const double time) const
write binary data
Definition: datawriter.hh:664
call appropriate backup and restore methods on the grid class
Definition: datawriter.hh:248
virtual void restore()
restore grid
Definition: datawriter.hh:312
virtual void backup() const
backup grid
Definition: datawriter.hh:273
const std::string name_
Definition: datawriter.hh:250
GridPersistentObject(const GridType &grid)
constructor storing grid
Definition: datawriter.hh:253
const GridType & grid_
Definition: datawriter.hh:249
~GridPersistentObject()
destructor removing grid object
Definition: datawriter.hh:266
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
static std::string defaultGridKey(int dimension, bool check=true)
return FEM key for macro grid reading
Definition: iointerface.hh:186
static void createPath(const std::string &path)
create given path in combination with rank
Definition: iointerface.hh:237
static std::string readPath()
Definition: iointerface.hh:260
Definition: iotuple.hh:153
base class for persistent objects
Definition: persistencemanager.hh:101
static void remove(PersistentObject &object)
Definition: persistencemanager.hh:364
void backup(const std::string &token, const T &value)
Definition: persistencemanager.hh:312
void restore(const std::string &token, T &value)
Definition: persistencemanager.hh:319
static void insert(PersistentObject &object, const bool pushFront=false)
Definition: persistencemanager.hh:359
Container for User Specified Parameters.
Definition: io/parameter.hh:191
static ParameterContainer & container()
Definition: io/parameter.hh:193
static bool verbose()
obtain the cached value for fem.verbose
Definition: io/parameter.hh:445
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:516
T getValue(const std::string &key) const
get mandatory parameter
Definition: reader.hh:159
general base for time providers
Definition: timeprovider.hh:36
int timeStep() const
obtain number of the current time step
Definition: timeprovider.hh:103
Definition: dofmanager.hh:761