Skip to content
Snippets Groups Projects
Commit 9e3ad40f authored by Stefan Girke's avatar Stefan Girke
Browse files

renamed checkpointinitializer into checkpointhandler

parent 2a45b570
No related branches found
No related tags found
No related merge requests found
#ifndef FEMDG_CHECKPOINTINITIALIZER_HH
#define FEMDG_CHECKPGRIDINITIALIZER_HH
#ifndef FEMDG_CHECKPOINTHANDLER_HH
#define FEMDG_CHECKPGRIDHANDLER_HH
#include <memory>
......@@ -16,52 +16,50 @@ namespace Fem
template< class GridImp, class DataImp = tuple<> >
class DefaultCheckPointInitializer
class DefaultCheckPointHandler
{
public:
typedef Dune::Fem::CheckPointer< GridImp, DataImp > CheckPointerType;
DefaultCheckPointInitializer()
: checkPointer_()
DefaultCheckPointHandler( const std::string keyPrefix = "" )
: checkPointer_(),
keyPrefix_( keyPrefix )
{}
static bool checkPointExists()
static bool checkPointExists( const std::string keyPrefix = "" )
{
return (checkPointFile().size() > 0 );
return (checkPointFile(keyPrefix).size() > 0 );
}
static inline std::string checkPointFile ()
static Dune::GridPtr< GridImp > restoreGrid( const std::string keyPrefix = "" )
{
static bool initialized = false ;
static std::string checkFileName ;
if( ! initialized )
if( 0 == Dune::Fem::MPIManager :: rank () )
{
const std::string key( "fem.io.checkpointrestartfile" );
if( Fem::Parameter::exists( key ) )
{
checkFileName = Fem::Parameter::getValue<std::string> ( key );
}
else
checkFileName = "" ;
initialized = true ;
std::cout << std::endl;
std::cout << "********************************************************" << std::endl;
std::cout << "** Restart from checkpoint `" << checkPointFile() << "' " << std::endl;
std::cout << "********************************************************" << std::endl;
std::cout << std::endl;
}
return checkFileName ;
}
static Dune::GridPtr< GridImp > restoreGrid()
{
Dune::GridPtr< GridImp > gridptr ;
gridptr = CheckPointerType::restoreGrid( checkPointFile(), -1, Dune::Fem::CheckPointerParameters( Dune::ParameterKey::generate( "", "fem.io." ) ) );
gridptr = CheckPointerType::restoreGrid( checkPointFile( keyPrefix ), -1,
Dune::Fem::CheckPointerParameters( Dune::ParameterKey::generate( keyPrefix, "fem.io." ) ) );
return gridptr;
}
template< class TimeProviderImp, class FirstArg, class ... Args>
bool restoreData( const GridImp& grid, TimeProviderImp& tp, const FirstArg& head, const Args& ... tail ) const
{
addPersistentObject( head );
return restoreData( grid, tp, tail... );
};
template< class TimeProviderImp >
bool restoreData( const GridImp& grid, const TimeProviderImp& tp ) const
{
std::string checkPointRestartFile = checkPointFile();
std::string checkPointRestartFile = checkPointFile( keyPrefix_ );
// if check file is non-zero a restart is performed
if( checkPointRestartFile.size() > 0 )
......@@ -80,13 +78,32 @@ namespace Fem
return true;
}
private:
static inline std::string checkPointFile ( const std::string keyPrefix = "" )
{
static bool initialized = false ;
static std::string checkFileName ;
if( ! initialized )
{
const std::string key( Dune::ParameterKey::generate( keyPrefix, "fem.io.checkpointrestartfile" ) );
if( Fem::Parameter::exists( key ) )
{
checkFileName = Fem::Parameter::getValue<std::string> ( key );
}
else
checkFileName = "" ;
initialized = true ;
}
return checkFileName ;
}
template< class TimeProviderImp >
CheckPointerType& checkPointer( const GridImp& grid, TimeProviderImp& tp ) const
CheckPointerType& checkPointer( const GridImp& grid, const TimeProviderImp& tp ) const
{
// create check point if not existent
if( ! checkPointer_ )
checkPointer_.reset( new CheckPointerType( grid, tp, Dune::Fem::CheckPointerParameters( Dune::ParameterKey::generate( "", "fem.io." ) ) ) );
checkPointer_.reset( new CheckPointerType( grid, tp, Dune::Fem::CheckPointerParameters( Dune::ParameterKey::generate( keyPrefix_, "fem.io." ) ) ) );
return *checkPointer_;
}
......@@ -96,11 +113,49 @@ namespace Fem
Dune::Fem::persistenceManager << obj;
}
private:
mutable std::unique_ptr< CheckPointerType > checkPointer_;
const std::string keyPrefix_;
};
template< class GridImp, class DataImp = tuple<> >
class NoCheckPointHandler
{
public:
typedef Dune::Fem::CheckPointer< GridImp, DataImp > CheckPointerType;
NoCheckPointHandler()
{}
template< class ... Args>
static bool checkPointExists( const Args& ... args )
{
return false;
}
template< class ... Args>
static Dune::GridPtr< GridImp > restoreGrid( const Args& ... args )
{
Dune::GridPtr< GridImp > gridptr;
return gridptr;
}
template< class ... Args>
bool restoreData( const Args& ... args ) const
{
return false;
}
template< class ... Args>
bool writeData( const Args& ... args ) const
{
return false;
}
};
}
}
#endif
......@@ -74,7 +74,8 @@ namespace Fem
template <class ... Args>
void write( Args& ... a) const {};
void finalize() const {};
template <class ... Args>
void finalize(Args& ... a) const {};
};
}
......
......@@ -10,7 +10,7 @@
#include <dune/fem/misc/femtimer.hh>
#include <dune/fem-dg/misc/parameterkey.hh>
#include <dune/fem-dg/algorithm/checkpointinitializer.hh>
#include <dune/fem-dg/algorithm/checkpointhandler.hh>
namespace Dune
{
......@@ -18,10 +18,10 @@ namespace Fem
{
template< class GridImp,
class CheckPointInitializerImp = DefaultCheckPointInitializer< GridImp > >
class CheckPointHandlerImp = DefaultCheckPointHandler< GridImp > >
class DefaultGridInitializer
{
typedef CheckPointInitializerImp CheckPointInitializerType;
typedef CheckPointHandlerImp CheckPointHandlerType;
public:
static Dune::GridPtr< GridImp > initialize( const std::string name = "" )
......@@ -35,18 +35,8 @@ namespace Fem
// grid pointer object
Dune::GridPtr< GridImp > gridptr;
if( CheckPointInitializerType::checkPointExists() )
{
if( 0 == Dune::Fem::MPIManager :: rank () )
{
std::cout << std::endl;
std::cout << "********************************************************" << std::endl;
std::cout << "** Restart from checkpoint `" << CheckPointInitializerType::checkPointFile() << "' " << std::endl;
std::cout << "********************************************************" << std::endl;
std::cout << std::endl;
}
gridptr = CheckPointInitializerType::restoreGrid();
}
if( CheckPointHandlerType::checkPointExists("") )
gridptr = CheckPointHandlerType::restoreGrid("");
else // normal new start
{
// ----- read in runtime parameters ------
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment