Hdf5DataWriter Class Reference

#include <Hdf5DataWriter.hpp>

Collaboration diagram for Hdf5DataWriter:

Collaboration graph
[legend]

List of all members.

Public Member Functions

 Hdf5DataWriter (DistributedVectorFactory &rVectorFactory, const std::string &rDirectory, const std::string &rBaseName, bool cleanDirectory=true, bool extendData=false)
virtual ~Hdf5DataWriter ()
void DefineFixedDimension (long dimensionSize)
void DefineFixedDimension (const std::vector< unsigned > &rNodesToOuput, long vecSize)
void DefineUnlimitedDimension (const std::string &rVariableName, const std::string &rVariableUnits, unsigned estimatedLength=1)
void AdvanceAlongUnlimitedDimension ()
int DefineVariable (const std::string &rVariableName, const std::string &rVariableUnits)
virtual void EndDefineMode ()
void PossiblyExtend ()
void PutVector (int variableID, Vec petscVector)
void PutStripedVector (std::vector< int > variableIDs, Vec petscVector)
void PutUnlimitedVariable (double value)
void Close ()
int GetVariableByName (const std::string &rVariableName)
bool ApplyPermutation (const std::vector< unsigned > &rPermutation)
void DefineFixedDimensionUsingMatrix (const std::vector< unsigned > &rNodesToOuput, long vecSize)
void SetFixedChunkSize (unsigned chunkSize)

Private Member Functions

void CheckVariableName (const std::string &rName)
void CheckUnitsName (const std::string &rName)
void ComputeIncompleteOffset ()

Private Attributes

DistributedVectorFactorymrVectorFactory
std::string mDirectory
std::string mBaseName
bool mCleanDirectory
bool mIsInDefineMode
bool mIsFixedDimensionSet
bool mIsUnlimitedDimensionSet
std::string mUnlimitedDimensionName
std::string mUnlimitedDimensionUnit
unsigned mEstimatedUnlimitedLength
unsigned mFileFixedDimensionSize
unsigned mDataFixedDimensionSize
unsigned mLo
unsigned mHi
unsigned mNumberOwned
unsigned mOffset
bool mIsDataComplete
bool mNeedExtend
std::vector< unsigned > mIncompleteNodeIndices
bool mUseMatrixForIncompleteData
std::vector< DataWriterVariablemVariables
hid_t mFileId
hid_t mDatasetId
hid_t mTimeDatasetId
long mCurrentTimeStep
hsize_t mDatasetDims [DATASET_DIMS]
Mat mSinglePermutation
Mat mDoublePermutation
Mat mSingleIncompleteOutputMatrix
Mat mDoubleIncompleteOutputMatrix
bool mUseOptimalChunkSizeAlgorithm
unsigned mFixedChunkSize

Static Private Attributes

static const unsigned DATASET_DIMS = 3


Detailed Description

A concrete HDF5 data writer class.

Definition at line 43 of file Hdf5DataWriter.hpp.


Constructor & Destructor Documentation

Hdf5DataWriter::Hdf5DataWriter ( DistributedVectorFactory rVectorFactory,
const std::string &  rDirectory,
const std::string &  rBaseName,
bool  cleanDirectory = true,
bool  extendData = false 
)

Constructor.

Parameters:
rVectorFactory the factory to use in creating PETSc Vec and DistributedVector objects.
rDirectory the directory in which to write the data to file
rBaseName the name of the file in which to write the data
cleanDirectory whether to clean the directory (defaults to true)
extendData whether to try opening an existing file and appending to it.
The extendData parameter allows us to add to an existing dataset. It only really makes sense if the existing file has an unlimited dimension which we can extend. It also only makes sense if cleanDirectory is false, otherwise there won't be a file there to read...

Todo:
1300 We can't set mDataFixedDimensionSize, because the information isn't in the input file. This means that checking the size of input vectors in PutVector and PutStripedVector is impossible.

Definition at line 42 of file Hdf5DataWriter.cpp.

References AdvanceAlongUnlimitedDimension(), ComputeIncompleteOffset(), DATASET_DIMS, EXCEPTION, DistributedVectorFactory::GetLocalOwnership(), OutputFileHandler::GetOutputDirectoryFullPath(), mBaseName, mCurrentTimeStep, mDataFixedDimensionSize, mDatasetDims, mDatasetId, mDirectory, mFileFixedDimensionSize, mFileId, mIncompleteNodeIndices, mIsDataComplete, mIsFixedDimensionSet, mIsInDefineMode, mIsUnlimitedDimensionSet, mLo, mNumberOwned, mOffset, mrVectorFactory, mTimeDatasetId, mUnlimitedDimensionName, mUnlimitedDimensionUnit, DataWriterVariable::mVariableName, mVariables, and DataWriterVariable::mVariableUnits.

Hdf5DataWriter::~Hdf5DataWriter (  )  [virtual]


Member Function Documentation

void Hdf5DataWriter::CheckVariableName ( const std::string &  rName  )  [private]

Check name of variable is allowed, i.e. contains only alphanumeric & _, and isn't blank.

Parameters:
rName variable name

Definition at line 406 of file Hdf5DataWriter.cpp.

References CheckUnitsName(), and EXCEPTION.

Referenced by DefineVariable().

void Hdf5DataWriter::CheckUnitsName ( const std::string &  rName  )  [private]

Check name of unit is allowed, i.e. contains only alphanumeric & _, and isn't blank.

Parameters:
rName unit name

Definition at line 415 of file Hdf5DataWriter.cpp.

References EXCEPTION.

Referenced by CheckVariableName(), and DefineVariable().

void Hdf5DataWriter::ComputeIncompleteOffset (  )  [private]

Compute mOffset and mNumberOwned from mIncompleteNodeIndices when we have incomplete data.

Definition at line 354 of file Hdf5DataWriter.cpp.

References mHi, mIncompleteNodeIndices, mLo, mNumberOwned, and mOffset.

Referenced by DefineFixedDimension(), DefineFixedDimensionUsingMatrix(), and Hdf5DataWriter().

void Hdf5DataWriter::DefineFixedDimension ( long  dimensionSize  ) 

void Hdf5DataWriter::DefineFixedDimension ( const std::vector< unsigned > &  rNodesToOuput,
long  vecSize 
)

Define the fixed dimension, assuming incomplete data output (subset of the nodes).

Parameters:
rNodesToOuput Node indexes to be output (precondition: to be monotonic increasing)
vecSize 

Definition at line 272 of file Hdf5DataWriter.cpp.

References ComputeIncompleteOffset(), DefineFixedDimension(), EXCEPTION, mFileFixedDimensionSize, mIncompleteNodeIndices, and mIsDataComplete.

void Hdf5DataWriter::DefineUnlimitedDimension ( const std::string &  rVariableName,
const std::string &  rVariableUnits,
unsigned  estimatedLength = 1 
)

Define a variable.

Parameters:
rVariableName The name of the dimension
rVariableUnits The physical units of the dimension
estimatedLength An estimate of the unlimited dimension length for performance reasons

Definition at line 923 of file Hdf5DataWriter.cpp.

References EXCEPTION, mEstimatedUnlimitedLength, mIsInDefineMode, mIsUnlimitedDimensionSet, mUnlimitedDimensionName, and mUnlimitedDimensionUnit.

Referenced by AbstractCardiacProblem< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM >::DefineWriterColumns().

void Hdf5DataWriter::AdvanceAlongUnlimitedDimension (  ) 

Advance along the unlimited dimension. Normally this will be called when all variables in a row have been input.

Definition at line 943 of file Hdf5DataWriter.cpp.

References EXCEPTION, mCurrentTimeStep, mDatasetDims, mEstimatedUnlimitedLength, mIsUnlimitedDimensionSet, and mNeedExtend.

Referenced by Hdf5DataWriter(), CardiacElectroMechanicsProblem< DIM >::Solve(), and AbstractCardiacProblem< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM >::Solve().

int Hdf5DataWriter::DefineVariable ( const std::string &  rVariableName,
const std::string &  rVariableUnits 
)

void Hdf5DataWriter::EndDefineMode (  )  [virtual]

void Hdf5DataWriter::PossiblyExtend (  ) 

Extend the dataset to the correct to the correct dimensions if needed.

Definition at line 973 of file Hdf5DataWriter.cpp.

References mDatasetDims, mDatasetId, mNeedExtend, and mTimeDatasetId.

Referenced by PutStripedVector(), PutUnlimitedVariable(), and PutVector().

void Hdf5DataWriter::PutVector ( int  variableID,
Vec  petscVector 
)

void Hdf5DataWriter::PutStripedVector ( std::vector< int >  variableIDs,
Vec  petscVector 
)

Write data for two variables from a Petsc vector to the dataset.

Parameters:
variableIDs vector of IDs of variables of the columns in the HDF5 file
petscVector the data

Definition at line 737 of file Hdf5DataWriter.cpp.

References PetscTools::CreateVec(), DATASET_DIMS, EXCEPTION, mCurrentTimeStep, mDataFixedDimensionSize, mDatasetId, mDoubleIncompleteOutputMatrix, mDoublePermutation, mFileFixedDimensionSize, mIncompleteNodeIndices, mIsDataComplete, mIsInDefineMode, mLo, mNumberOwned, mOffset, mUseMatrixForIncompleteData, and PossiblyExtend().

Referenced by BidomainProblem< DIM >::WriteOneStep().

void Hdf5DataWriter::PutUnlimitedVariable ( double  value  ) 

Write a single value for the unlimited variable (e.g. time) to the dataset.

Parameters:
value the data

Definition at line 869 of file Hdf5DataWriter.cpp.

References PetscTools::AmMaster(), EXCEPTION, mCurrentTimeStep, mIsInDefineMode, mIsUnlimitedDimensionSet, mTimeDatasetId, and PossiblyExtend().

Referenced by MonodomainProblem< ELEMENT_DIM, SPACE_DIM >::WriteOneStep(), and BidomainProblem< DIM >::WriteOneStep().

void Hdf5DataWriter::Close (  ) 

int Hdf5DataWriter::GetVariableByName ( const std::string &  rVariableName  ) 

Get the id of the given variable, the variable must already exist or an exception will be thrown.

Parameters:
rVariableName variable name to look up
Returns:
HDF5 id for the given variable.

Definition at line 983 of file Hdf5DataWriter.cpp.

References EXCEPTION, and mVariables.

Referenced by AbstractCardiacProblem< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM >::DefineExtraVariablesWriterColumns(), BidomainProblem< DIM >::DefineWriterColumns(), and AbstractCardiacProblem< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM >::DefineWriterColumns().

bool Hdf5DataWriter::ApplyPermutation ( const std::vector< unsigned > &  rPermutation  ) 

Apply a permutation to all occurences of PutVector Should be called when in define mode

Parameters:
rPermutation a forward/?reverse permutation
Returns:
success value. A value "false" indictates that the permutation was empty or was the identity and was not applied

Definition at line 1002 of file Hdf5DataWriter.cpp.

References EXCEPTION, mDataFixedDimensionSize, mDoublePermutation, mFileFixedDimensionSize, mHi, mIsInDefineMode, mLo, mSinglePermutation, and PetscTools::SetupMat().

Referenced by AbstractCardiacProblem< ELEMENT_DIM, SPACE_DIM, PROBLEM_DIM >::InitialiseWriter().

void Hdf5DataWriter::DefineFixedDimensionUsingMatrix ( const std::vector< unsigned > &  rNodesToOuput,
long  vecSize 
)

Define the fixed dimension, assuming incomplete data output (subset of the nodes) and using a matrix to convert from full to incomplete output (rather than picking required data values out one at a time).

Parameters:
rNodesToOuput Node indexes to be output (precondition: to be monotonic increasing)
vecSize 

Definition at line 297 of file Hdf5DataWriter.cpp.

References ComputeIncompleteOffset(), DefineFixedDimension(), EXCEPTION, mDataFixedDimensionSize, mDoubleIncompleteOutputMatrix, mFileFixedDimensionSize, mHi, mIncompleteNodeIndices, mIsDataComplete, mLo, mNumberOwned, mOffset, mSingleIncompleteOutputMatrix, mUseMatrixForIncompleteData, and PetscTools::SetupMat().

void Hdf5DataWriter::SetFixedChunkSize ( unsigned  chunkSize  ) 

Use a particular chunk size, ignoring the algorithm that figures out the optimal value. Useful for reducing size of checkpoints. USE WITH CAUTION.

Parameters:
chunkSize user provided chunk size

Definition at line 1083 of file Hdf5DataWriter.cpp.

References mFixedChunkSize, mIsInDefineMode, and mUseOptimalChunkSizeAlgorithm.


Member Data Documentation

The factory to use in creating PETSc Vec and DistributedVector objects.

Definition at line 47 of file Hdf5DataWriter.hpp.

Referenced by DefineFixedDimension(), and Hdf5DataWriter().

std::string Hdf5DataWriter::mDirectory [private]

Directory output files will be stored in.

Definition at line 48 of file Hdf5DataWriter.hpp.

Referenced by EndDefineMode(), and Hdf5DataWriter().

std::string Hdf5DataWriter::mBaseName [private]

The base name for the output data files.

Definition at line 49 of file Hdf5DataWriter.hpp.

Referenced by EndDefineMode(), and Hdf5DataWriter().

Whether to wipe the output directory

Definition at line 50 of file Hdf5DataWriter.hpp.

Referenced by EndDefineMode().

Is the fixed dimension set

Definition at line 52 of file Hdf5DataWriter.hpp.

Referenced by DefineFixedDimension(), EndDefineMode(), and Hdf5DataWriter().

Is the unlimited dimension set

Definition at line 53 of file Hdf5DataWriter.hpp.

Referenced by AdvanceAlongUnlimitedDimension(), Close(), DefineUnlimitedDimension(), EndDefineMode(), Hdf5DataWriter(), and PutUnlimitedVariable().

The name of the unlimited dimension.

Definition at line 54 of file Hdf5DataWriter.hpp.

Referenced by DefineUnlimitedDimension(), EndDefineMode(), and Hdf5DataWriter().

The physical units of the unlimited dimension.

Definition at line 55 of file Hdf5DataWriter.hpp.

Referenced by DefineUnlimitedDimension(), EndDefineMode(), and Hdf5DataWriter().

An estimate of the unlimited dimension length for performance reasons.

Definition at line 56 of file Hdf5DataWriter.hpp.

Referenced by AdvanceAlongUnlimitedDimension(), DefineUnlimitedDimension(), and EndDefineMode().

The size of the fixed dimension (number of rows)

Definition at line 57 of file Hdf5DataWriter.hpp.

Referenced by ApplyPermutation(), DefineFixedDimension(), DefineFixedDimensionUsingMatrix(), EndDefineMode(), Hdf5DataWriter(), PutStripedVector(), and PutVector().

The size of the fixed dimension (size of the vector of nodes)

Definition at line 58 of file Hdf5DataWriter.hpp.

Referenced by ApplyPermutation(), DefineFixedDimension(), DefineFixedDimensionUsingMatrix(), Hdf5DataWriter(), PutStripedVector(), and PutVector().

unsigned Hdf5DataWriter::mLo [private]

unsigned Hdf5DataWriter::mHi [private]

Local ownership of a PETSc vector of size mFileFixedDimensionSize

Definition at line 60 of file Hdf5DataWriter.hpp.

Referenced by ApplyPermutation(), ComputeIncompleteOffset(), DefineFixedDimension(), and DefineFixedDimensionUsingMatrix().

unsigned Hdf5DataWriter::mNumberOwned [private]

mNumberOwned=mHi-mLo; except with incomplete data

Definition at line 61 of file Hdf5DataWriter.hpp.

Referenced by ComputeIncompleteOffset(), DefineFixedDimension(), DefineFixedDimensionUsingMatrix(), Hdf5DataWriter(), PutStripedVector(), and PutVector().

unsigned Hdf5DataWriter::mOffset [private]

mOffset=mLo; except with incomplete data

Definition at line 62 of file Hdf5DataWriter.hpp.

Referenced by ComputeIncompleteOffset(), DefineFixedDimension(), DefineFixedDimensionUsingMatrix(), Hdf5DataWriter(), PutStripedVector(), and PutVector().

Whether the data file is complete.

Definition at line 63 of file Hdf5DataWriter.hpp.

Referenced by DefineFixedDimension(), DefineFixedDimensionUsingMatrix(), EndDefineMode(), Hdf5DataWriter(), PutStripedVector(), and PutVector().

Used so that the data set is only extended when data is written

Definition at line 64 of file Hdf5DataWriter.hpp.

Referenced by AdvanceAlongUnlimitedDimension(), and PossiblyExtend().

std::vector<unsigned> Hdf5DataWriter::mIncompleteNodeIndices [private]

Vector of node indices for which the data file does contain data.

Definition at line 65 of file Hdf5DataWriter.hpp.

Referenced by ComputeIncompleteOffset(), DefineFixedDimension(), DefineFixedDimensionUsingMatrix(), EndDefineMode(), Hdf5DataWriter(), PutStripedVector(), and PutVector().

Whether to use a matrix format for incomplete data

Definition at line 66 of file Hdf5DataWriter.hpp.

Referenced by DefineFixedDimensionUsingMatrix(), PutStripedVector(), and PutVector().

The data variables

Definition at line 68 of file Hdf5DataWriter.hpp.

Referenced by DefineVariable(), EndDefineMode(), GetVariableByName(), and Hdf5DataWriter().

hid_t Hdf5DataWriter::mFileId [private]

The data file ID.

Definition at line 70 of file Hdf5DataWriter.hpp.

Referenced by Close(), EndDefineMode(), and Hdf5DataWriter().

hid_t Hdf5DataWriter::mDatasetId [private]

The variables data set ID.

Definition at line 71 of file Hdf5DataWriter.hpp.

Referenced by Close(), EndDefineMode(), Hdf5DataWriter(), PossiblyExtend(), PutStripedVector(), and PutVector().

The time data set ID.

Definition at line 72 of file Hdf5DataWriter.hpp.

Referenced by Close(), EndDefineMode(), Hdf5DataWriter(), PossiblyExtend(), and PutUnlimitedVariable().

The current time step.

Definition at line 74 of file Hdf5DataWriter.hpp.

Referenced by AdvanceAlongUnlimitedDimension(), Hdf5DataWriter(), PutStripedVector(), PutUnlimitedVariable(), and PutVector().

const unsigned Hdf5DataWriter::DATASET_DIMS = 3 [static, private]

Defined in HDF5 reader too.

Todo:
: define it once

Definition at line 76 of file Hdf5DataWriter.hpp.

Referenced by EndDefineMode(), Hdf5DataWriter(), PutStripedVector(), and PutVector().

The sizes of each variable data set.

Definition at line 77 of file Hdf5DataWriter.hpp.

Referenced by AdvanceAlongUnlimitedDimension(), EndDefineMode(), Hdf5DataWriter(), and PossiblyExtend().

Stores a permutation as a matrix

Definition at line 79 of file Hdf5DataWriter.hpp.

Referenced by ApplyPermutation(), PutVector(), and ~Hdf5DataWriter().

Stores a permutation of a striped structure (u_0 v_0 u_1 v_1) as a matrix

Definition at line 80 of file Hdf5DataWriter.hpp.

Referenced by ApplyPermutation(), PutStripedVector(), and ~Hdf5DataWriter().

Stores nodes to be output as a matrix

Definition at line 82 of file Hdf5DataWriter.hpp.

Referenced by DefineFixedDimensionUsingMatrix(), PutVector(), and ~Hdf5DataWriter().

Stores striped nodes to be output as a matrix

Definition at line 83 of file Hdf5DataWriter.hpp.

Referenced by DefineFixedDimensionUsingMatrix(), PutStripedVector(), and ~Hdf5DataWriter().

Whether to use the built-in algorithm for optimal chunk size

Definition at line 85 of file Hdf5DataWriter.hpp.

Referenced by EndDefineMode(), and SetFixedChunkSize().

unsigned Hdf5DataWriter::mFixedChunkSize [private]

User-provided chunk size

Definition at line 86 of file Hdf5DataWriter.hpp.

Referenced by EndDefineMode(), and SetFixedChunkSize().


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

Generated on Mon Apr 18 11:37:09 2011 for Chaste by  doxygen 1.5.5