ArchiveOpener< Archive, Stream > Class Template Reference

#include <ArchiveOpener.hpp>

Collaboration diagram for ArchiveOpener< Archive, Stream >:
Collaboration graph
[legend]

List of all members.

Public Member Functions

 ArchiveOpener (const std::string &rDirectory, const std::string &rFileName, bool relativeToChasteTestOutput=true, unsigned procId=PetscTools::GetMyRank())
 ~ArchiveOpener ()
Archive * GetCommonArchive ()
template<>
 ArchiveOpener (const std::string &rDirectory, const std::string &rFileName, bool relativeToChasteTestOutput, unsigned procId)
template<>
 ArchiveOpener (const std::string &rDirectory, const std::string &rFileName, bool relativeToChasteTestOutput, unsigned procId)

Private Attributes

Stream * mpCommonStream
Stream * mpPrivateStream
Archive * mpCommonArchive
Archive * mpPrivateArchive

Friends

class TestArchivingHelperClasses

Detailed Description

template<class Archive, class Stream>
class ArchiveOpener< Archive, Stream >

A convenience class to assist with managing archives for parallel checkpointing.

When checkpointing a parallel simulation, there are two kinds of data that need to be saved: replicated (same for every process) and distributed (different on each process). We wish to write these to separate archive files. This class hides the complexity of doing so, such that all a user needs to do is create an instance of this class, call GetCommonArchive, and read from/write to the returned archive. When done, just destroy the instance (e.g. by closing the scope).

Internally the class uses ProcessSpecificArchive<Archive> to store the secondary archive.

Note also that implementations of this templated class only exist for text archives, i.e. Archive = boost::archive::text_iarchive (with Stream = std::ifstream), or Archive = boost::archive::text_oarchive (with Stream = std::ofstream).

Definition at line 53 of file ArchiveOpener.hpp.


Constructor & Destructor Documentation

template<class Archive, class Stream>
ArchiveOpener< Archive, Stream >::ArchiveOpener ( const std::string &  rDirectory,
const std::string &  rFileName,
bool  relativeToChasteTestOutput = true,
unsigned  procId = PetscTools::GetMyRank() 
)

Open the archives for this process, either for reading or writing depending on the template parameter Archive.

Note that when writing, only the master process writes to the main archive. For other processes the main archive is a dummy, writing to /dev/null.

Note:
Must be called collectively, i.e. by all processes!
Parameters:
rDirectory folder containing archive files.
rFileName base name of archive files. This will be used for the main archive (for replicated data) with ".n" (where n is the process index) being appended for the secondary archive.
relativeToChasteTestOutput whether rDirectory should be interpreted as being relative to CHASTE_TEST_OUTPUT (default) or the current working directory.
procId this can be specified to read a specific secondary archive, rather than this process' default. Should not be used for writing!
template<class Archive, class Stream>
ArchiveOpener< Archive, Stream >::~ArchiveOpener (  ) 

Close the opened archives.

template<>
ArchiveOpener< boost::archive::text_iarchive, std::ifstream >::ArchiveOpener ( const std::string &  rDirectory,
const std::string &  rFileName,
bool  relativeToChasteTestOutput,
unsigned  procId 
) [inline]
template<>
ArchiveOpener< boost::archive::text_oarchive, std::ofstream >::ArchiveOpener ( const std::string &  rDirectory,
const std::string &  rFileName,
bool  relativeToChasteTestOutput,
unsigned  procId 
) [inline]

Member Function Documentation

template<class Archive, class Stream>
Archive* ArchiveOpener< Archive, Stream >::GetCommonArchive (  )  [inline]

Member Data Documentation

template<class Archive, class Stream>
Archive* ArchiveOpener< Archive, Stream >::mpCommonArchive [private]
template<class Archive, class Stream>
Stream* ArchiveOpener< Archive, Stream >::mpCommonStream [private]

The file stream for the main archive

Definition at line 96 of file ArchiveOpener.hpp.

Referenced by ArchiveOpener< Archive, Stream >::ArchiveOpener().

template<class Archive, class Stream>
Archive* ArchiveOpener< Archive, Stream >::mpPrivateArchive [private]

The secondary archive

Definition at line 102 of file ArchiveOpener.hpp.

Referenced by ArchiveOpener< Archive, Stream >::ArchiveOpener().

template<class Archive, class Stream>
Stream* ArchiveOpener< Archive, Stream >::mpPrivateStream [private]

The file stream for the secondary archive

Definition at line 98 of file ArchiveOpener.hpp.

Referenced by ArchiveOpener< Archive, Stream >::ArchiveOpener().


The documentation for this class was generated from the following file:

Generated by  doxygen 1.6.2