fixed: some of my doxygen sins remedied
git-svn-id: http://svn.sintef.no/trondheim/IFEM/trunk@1261 e10b68d5-8a6e-419e-a041-bce267b0401d
This commit is contained in:
		@@ -10,25 +10,38 @@
 | 
			
		||||
class DataWriter;
 | 
			
		||||
class SIMparameters;
 | 
			
		||||
 | 
			
		||||
/*! \brief Admininster and write data using DataWriters
 | 
			
		||||
   
 | 
			
		||||
  \details This class holds a list of data writers, and SIM classes/vectors
 | 
			
		||||
  to write.
 | 
			
		||||
*/
 | 
			
		||||
class DataExporter
 | 
			
		||||
{
 | 
			
		||||
 public:
 | 
			
		||||
   //! \brief Supported field types
 | 
			
		||||
  enum FieldType {
 | 
			
		||||
    VECTOR,
 | 
			
		||||
    SIM
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  //! \brief An enum used to describe the results to write
 | 
			
		||||
  enum Results {
 | 
			
		||||
    PRIMARY=0,
 | 
			
		||||
    SECONDARY=1,
 | 
			
		||||
    NORMS=2
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  //! \brief A structure holding information about registered fields
 | 
			
		||||
  struct FileEntry {
 | 
			
		||||
    //! \brief The description of the field
 | 
			
		||||
    std::string description;
 | 
			
		||||
    //! \brief The type of the field
 | 
			
		||||
    FieldType field;
 | 
			
		||||
    //! \brief Which results to store
 | 
			
		||||
    int results;
 | 
			
		||||
    //! \brief Pointer to the primary data (e.g. a SIM class)
 | 
			
		||||
    void* data;
 | 
			
		||||
    //! \brief Pointer to the secondary data (e.g. a vector)
 | 
			
		||||
    void* data2;
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
@@ -54,51 +67,105 @@ class DataExporter
 | 
			
		||||
		     const std::string& description,
 | 
			
		||||
		     FieldType field, int results=PRIMARY);
 | 
			
		||||
 | 
			
		||||
  //! \brief Register a data writer
 | 
			
		||||
  //! \param[in] writer A pointer to the datawriter we want registered
 | 
			
		||||
  bool registerWriter(DataWriter* writer);
 | 
			
		||||
 | 
			
		||||
  //! \brief Set the data values for a registered field
 | 
			
		||||
  //! \param[in] name Name the field is registered with
 | 
			
		||||
  //! \param[in] data The value to set the field to
 | 
			
		||||
  //! \param[in] data2 (optional) The secondary data of the field
 | 
			
		||||
  bool setFieldValue(const std::string& name, void* data, void* data2=NULL);
 | 
			
		||||
 | 
			
		||||
  //! \brief This dumps all registered fields using all registered writers
 | 
			
		||||
  //! \param[in] tp Current time stepping info
 | 
			
		||||
  //! \param[in] geometryUpdated Whether or not geometries are updated. If true, we write new geometries
 | 
			
		||||
  bool dumpTimeLevel(SIMparameters* tp=NULL, bool geometryUpdated=false);
 | 
			
		||||
 | 
			
		||||
  //! \brief Loads last time level with first registered writer by default.
 | 
			
		||||
  //! param[in] level Time level to load, defaults to last time level
 | 
			
		||||
  //! param[in] info The datawriter to read the info from (e.g. the XML writer)
 | 
			
		||||
  //! param[in] input The datawriter to read the data from (e.g. the HDF5 writer)
 | 
			
		||||
  //! \param[in] level Time level to load, defaults to last time level
 | 
			
		||||
  //! \param[in] info The datawriter to read the info from (e.g. the XML writer)
 | 
			
		||||
  //! \param[in] input The datawriter to read the data from (e.g. the HDF5 writer)
 | 
			
		||||
  bool loadTimeLevel(int level=-1, DataWriter* info=NULL, DataWriter* input=NULL);
 | 
			
		||||
 | 
			
		||||
  //! \brief Return the current time level of the exporter
 | 
			
		||||
  int getTimeLevel();
 | 
			
		||||
protected:
 | 
			
		||||
  //! \brief Internal helper function
 | 
			
		||||
  int getWritersTimeLevel() const;
 | 
			
		||||
 | 
			
		||||
  //! \brief A map of field names -> field info structures
 | 
			
		||||
  std::map<std::string,FileEntry> m_entry;
 | 
			
		||||
  //! \brief A vector of registered data writers
 | 
			
		||||
  std::vector<DataWriter*> m_writers;
 | 
			
		||||
  //! \brief If true, we are in charge of freeing up datawriters
 | 
			
		||||
  bool m_delete;
 | 
			
		||||
  //! \brief Current time level
 | 
			
		||||
  int m_level;
 | 
			
		||||
  //! \brief A stride for dumping. We dump at every m_ndump'th time level
 | 
			
		||||
  int m_ndump;
 | 
			
		||||
  //! \brief The temporal order used. We need this to facilitate restart of > first order simulations.
 | 
			
		||||
  int m_order;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
//! \brief Convenience type
 | 
			
		||||
typedef std::pair<std::string,DataExporter::FileEntry> DataEntry;
 | 
			
		||||
 | 
			
		||||
/*! \brief Stores and reads data from a file
 | 
			
		||||
 | 
			
		||||
 A DataWriter is a backend for the DataExporter, they abstract different
 | 
			
		||||
 file formats.
 | 
			
		||||
*/
 | 
			
		||||
class DataWriter
 | 
			
		||||
{
 | 
			
		||||
protected:
 | 
			
		||||
  //! \brief Protected constructor as this is a purely virtual class
 | 
			
		||||
  DataWriter(const std::string& name);
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
  //! \brief Empty destructor
 | 
			
		||||
  virtual ~DataWriter() {}
 | 
			
		||||
 | 
			
		||||
  //! \brief Return the last time level stored in file
 | 
			
		||||
  virtual int getLastTimeLevel() = 0;
 | 
			
		||||
 | 
			
		||||
  //! \brief Open the file at a given time level
 | 
			
		||||
  //! \param[in] level The requested time level
 | 
			
		||||
  virtual void openFile(int level) = 0;
 | 
			
		||||
 | 
			
		||||
  //! \brief Close the file
 | 
			
		||||
  //! \param[in] level Level we just wrote to the file
 | 
			
		||||
  //! \param[in] force If true, we always close the actual file, 
 | 
			
		||||
  //                   else it's up to the individual writers
 | 
			
		||||
  virtual void closeFile(int level, bool force=false) = 0;
 | 
			
		||||
 | 
			
		||||
  //! \brief Write a vector to file
 | 
			
		||||
  //! \param[in] level The time level to write the vector at
 | 
			
		||||
  //! \param[in] entry The DataEntry describing the vector
 | 
			
		||||
  virtual void writeVector(int level, const DataEntry& entry) = 0;
 | 
			
		||||
 | 
			
		||||
  //! \brief Read a vector from file
 | 
			
		||||
  //! \param[in] level The time level to read the vector at
 | 
			
		||||
  //! \param[in] entry The DataEntry describing the vector
 | 
			
		||||
  virtual bool readVector(int level, const DataEntry& entry) = 0;
 | 
			
		||||
 | 
			
		||||
  //! \brief Write data from a SIM to file
 | 
			
		||||
  //! \param[in] level The time level to write the data at
 | 
			
		||||
  //! \param[in] entry The DataEntry describing the vector
 | 
			
		||||
  //! \param[in] geometryUpdated Whether or not geometries should be written 
 | 
			
		||||
  virtual void writeSIM(int level, const DataEntry& entry,
 | 
			
		||||
                        bool geometryUpdated) = 0;
 | 
			
		||||
 | 
			
		||||
  //! \brief Read data from a file into SIM
 | 
			
		||||
  //! \param[in] level The time level to read the data at
 | 
			
		||||
  //! \param[in] entry The DataEntry describing the SIM
 | 
			
		||||
  virtual bool readSIM(int level, const DataEntry& entry) = 0;
 | 
			
		||||
 | 
			
		||||
  //! \brief Write time stepping info to file (currently a dummy)
 | 
			
		||||
  //! \param[in] level The time level to write the info at
 | 
			
		||||
  //! \param[in] order The temporal order
 | 
			
		||||
  //! \param[in] interval The number of time steps between each data dump
 | 
			
		||||
  //! \param[in] tp The current time stepping info
 | 
			
		||||
  virtual bool writeTimeInfo(int level, int order, int interval,
 | 
			
		||||
                             SIMparameters& tp) = 0;
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -383,8 +383,11 @@ protected:
 | 
			
		||||
  //! \brief Evaluates the function.
 | 
			
		||||
  virtual real evaluate(const Vec3& X) const;
 | 
			
		||||
 | 
			
		||||
  //! \brief The (1D) grid the data is associated with
 | 
			
		||||
  std::vector<double> grid;
 | 
			
		||||
  //! \brief The (scalar) data values
 | 
			
		||||
  std::vector<double> values;
 | 
			
		||||
  //! \brief In which direction to perform the interpolation
 | 
			
		||||
  int dir;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -5,7 +5,7 @@
 | 
			
		||||
//!
 | 
			
		||||
//! \date Jul 7 2011
 | 
			
		||||
//!
 | 
			
		||||
//! \author Arne MOrten Kvarving / SINTEF
 | 
			
		||||
//! \author Arne Morten Kvarving / SINTEF
 | 
			
		||||
//!
 | 
			
		||||
//! \brief Output of model and results to HDF5 file.
 | 
			
		||||
//!
 | 
			
		||||
@@ -29,6 +29,7 @@
 | 
			
		||||
#include <mpi.h>
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
//! \brief If file system has less than this amount free we bail to avoid corrupting file when a new write is initiated
 | 
			
		||||
#define HDF5_SANITY_LIMIT 10*1024*1024LL // 10MB
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -7,44 +7,128 @@
 | 
			
		||||
 | 
			
		||||
class SIMbase;
 | 
			
		||||
 | 
			
		||||
/*! \brief Write data to a HDF5 file.
 | 
			
		||||
 | 
			
		||||
 \details The HDF5 writer writes data to a HDF5 file. It supports
 | 
			
		||||
          parallel I/O, and can be used to add restart capability
 | 
			
		||||
          to applications.
 | 
			
		||||
*/
 | 
			
		||||
class HDF5Writer : public DataWriter
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
  HDF5Writer(const std::string& name, bool append = false, bool keepopen=false);
 | 
			
		||||
  //! \brief Default constructor
 | 
			
		||||
  //! \param[in] name The name (filename without extension) of data file
 | 
			
		||||
  //! \param[in] append Whether to append to or overwrite an existing file
 | 
			
		||||
  //! \param[in] keepopen Whether to always keep the HDF5 open
 | 
			
		||||
  HDF5Writer(const std::string& name, bool append = false,
 | 
			
		||||
             bool keepopen=false);
 | 
			
		||||
 | 
			
		||||
  //! \brief Default destructor
 | 
			
		||||
  virtual ~HDF5Writer() {}
 | 
			
		||||
 | 
			
		||||
  //! \brief Return the last time level stored in the HDF5 file
 | 
			
		||||
  virtual int getLastTimeLevel();
 | 
			
		||||
 | 
			
		||||
  //! \brief Open the file at a given time level
 | 
			
		||||
  //! \param[in] level The requested time level
 | 
			
		||||
  virtual void openFile(int level);
 | 
			
		||||
 | 
			
		||||
  //! \brief Close the file
 | 
			
		||||
  //! \param[in] level Level we just wrote to the file
 | 
			
		||||
  //! \param[in] force If true, we close even if we were given the keepopen flag on construction
 | 
			
		||||
  virtual void closeFile(int level, bool force=false);
 | 
			
		||||
 | 
			
		||||
  //! \brief Write a vector to file
 | 
			
		||||
  //! \param[in] level The time level to write the vector at
 | 
			
		||||
  //! \param[in] entry The DataEntry describing the vector
 | 
			
		||||
  virtual void writeVector(int level, const DataEntry& entry);
 | 
			
		||||
 | 
			
		||||
  //! \brief Read a vector from file
 | 
			
		||||
  //! \param[in] level The time level to read the vector at
 | 
			
		||||
  //! \param[in] entry The DataEntry describing the vector
 | 
			
		||||
  virtual bool readVector(int level, const DataEntry& entry);
 | 
			
		||||
 | 
			
		||||
  //! \brief Write data from a SIM to file
 | 
			
		||||
  //! \param[in] level The time level to write the data at
 | 
			
		||||
  //! \param[in] entry The DataEntry describing the vector
 | 
			
		||||
  //! \param[in] geometryUpdated Whether or not geometries should be written 
 | 
			
		||||
  virtual void writeSIM(int level, const DataEntry& entry,
 | 
			
		||||
                        bool geometryUpdated);
 | 
			
		||||
 | 
			
		||||
  //! \brief Read data from a file into SIM
 | 
			
		||||
  //! \param[in] level The time level to read the data at
 | 
			
		||||
  //! \param[in] entry The DataEntry describing the SIM
 | 
			
		||||
  virtual bool readSIM(int level, const DataEntry& entry);
 | 
			
		||||
 | 
			
		||||
  //! \brief Write time stepping info to file (currently a dummy)
 | 
			
		||||
  //! \param[in] level The time level to write the info at
 | 
			
		||||
  //! \param[in] order The temporal order
 | 
			
		||||
  //! \param[in] interval The number of time steps between each data dump
 | 
			
		||||
  //! \param[in] tp The current time stepping info
 | 
			
		||||
  virtual bool writeTimeInfo(int level, int order, int interval,
 | 
			
		||||
                             SIMparameters& tp);
 | 
			
		||||
 | 
			
		||||
  //! \brief Reads a vector field into a given SIM
 | 
			
		||||
  //! \param[in] level The time level to read at
 | 
			
		||||
  //! \param[in] name The name of the field
 | 
			
		||||
  //! \param[in] vec The vector to read into
 | 
			
		||||
  //! \param[in] sim The SIM this vector is associated with
 | 
			
		||||
  //! \param[in] components The number of components in the field
 | 
			
		||||
  bool readField(int level, const std::string& name,
 | 
			
		||||
                 Vector& vec, SIMbase* sim, int components);
 | 
			
		||||
 | 
			
		||||
  //! \brief Reads a text string
 | 
			
		||||
  //! \param[in] name The name (path in HDF5 file) to the string
 | 
			
		||||
  //! \param[out] out The string to read data into
 | 
			
		||||
  void readString(const std::string& name, std::string& out);
 | 
			
		||||
 | 
			
		||||
  //! \brief Reads a vector
 | 
			
		||||
  //! \param[in] level The time level to read at
 | 
			
		||||
  //! \param[in] name The name (path in HDF5 file) to the string
 | 
			
		||||
  //! \param[in] patch The patch to read
 | 
			
		||||
  //! \param[out] vec The vector to read data into
 | 
			
		||||
  bool readVector(int level, const std::string& name,
 | 
			
		||||
                  int patch, Vector& vec);
 | 
			
		||||
 | 
			
		||||
  //! \brief Check if updated geometries exists in file at given time level
 | 
			
		||||
  //! \param[in] level The time level to check
 | 
			
		||||
  bool hasGeometries(int level);
 | 
			
		||||
 | 
			
		||||
protected:
 | 
			
		||||
  //! \brief Internal helper function. Writes a data array to HDF5 file
 | 
			
		||||
  //! \param[in] group The HDF5 group to write data into
 | 
			
		||||
  //! \param[in] name The name of the array
 | 
			
		||||
  //! \param[in] len The length of the array
 | 
			
		||||
  //! \param[in] data The array to write
 | 
			
		||||
  //! \param[in] type The HDF5 type for the data (see H5T)
 | 
			
		||||
  void writeArray(int group, const std::string& name,
 | 
			
		||||
                  int len, const void* data, int type);
 | 
			
		||||
 | 
			
		||||
  //! \brief Internal helper function. Writes a SIM's basis (geometry) to file
 | 
			
		||||
  //! \param[in] SIM The SIM we want to write basis for
 | 
			
		||||
  //! \param[in] name The name of the basis
 | 
			
		||||
  //! \param[in] basis 1/2 Write primary or secondary basis from SIM
 | 
			
		||||
  //! \param[in] level The time level to write the basis at
 | 
			
		||||
  void writeBasis(SIMbase* SIM, const std::string& name,
 | 
			
		||||
                     int basis, int level);
 | 
			
		||||
 | 
			
		||||
  //! \brief Internal helper function. Reads an array into a array of doubles
 | 
			
		||||
  //! \param[in] group The HDF5 group to read data from
 | 
			
		||||
  //! \param[in] name The name of the array
 | 
			
		||||
  //! \param[in] len The length of the data to read
 | 
			
		||||
  //! \param[out] data The array to read data into
 | 
			
		||||
  void readArray(int group, const std::string& name,
 | 
			
		||||
                 int& len, double*& data);
 | 
			
		||||
 | 
			
		||||
  //! \brief Internal helper function. Check if a group exists in the HDF5 file
 | 
			
		||||
  //! \param[in] parent The HDF5 group of the parent
 | 
			
		||||
  //! \param[in] group The name of the group to check for
 | 
			
		||||
  //! \return true if group exists, otherwise false
 | 
			
		||||
  bool checkGroupExistence(int parent, const char* group);
 | 
			
		||||
 | 
			
		||||
  //! \brief The HDF5 handle for our file
 | 
			
		||||
  int          m_file;
 | 
			
		||||
  //! \brief The file flags to open HDF5 file with
 | 
			
		||||
  unsigned int m_flag;
 | 
			
		||||
  //! \brief If true, we always keep the file open 
 | 
			
		||||
  bool m_keepOpen;
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
@@ -9,24 +9,44 @@ class TiXmlNode;
 | 
			
		||||
class SIMparameters;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/*! \brief Write data (metadata) to a XML file.
 | 
			
		||||
 | 
			
		||||
 The XML writer writes metadata (name of fields, description,...)
 | 
			
		||||
 in a humanly readable (XML) text format.
 | 
			
		||||
*/
 | 
			
		||||
class XMLWriter : public DataWriter
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
  //! \brief A structure used when reading info from the file
 | 
			
		||||
  struct Entry {
 | 
			
		||||
    //! \brief Name of field
 | 
			
		||||
    std::string name;
 | 
			
		||||
    //! \brief Description of field
 | 
			
		||||
    std::string description;
 | 
			
		||||
    //! \brief The name of the basis the field is associated with
 | 
			
		||||
    std::string basis;
 | 
			
		||||
    //! \brief Number of patches in field
 | 
			
		||||
    int patches;
 | 
			
		||||
    //! \brief Number of components in field
 | 
			
		||||
    int components;
 | 
			
		||||
    //! \brief The timestep associated with the field
 | 
			
		||||
    double timestep;
 | 
			
		||||
    //! \brief The temporal order associated with the field
 | 
			
		||||
    int order;
 | 
			
		||||
    //! \brief The dumping interval for the field
 | 
			
		||||
    int interval;
 | 
			
		||||
    //! \brief The type of the field
 | 
			
		||||
    std::string type;
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  //! \brief Default constructor
 | 
			
		||||
  //! \param[in] name The name (filename without extension) of data file
 | 
			
		||||
  XMLWriter(const std::string& name);
 | 
			
		||||
  
 | 
			
		||||
  //! \brief Default destructor
 | 
			
		||||
  virtual ~XMLWriter() {}
 | 
			
		||||
 | 
			
		||||
  //! \brief Return the last time level stored in file
 | 
			
		||||
  virtual int getLastTimeLevel();
 | 
			
		||||
 | 
			
		||||
  //! \brief Calculate the real time level, taking order and ndump into account
 | 
			
		||||
@@ -35,30 +55,73 @@ public:
 | 
			
		||||
  //! \brief Calculate the real time level, taking order and ndump into account
 | 
			
		||||
  int realTimeLevel(int filelevel, int order, int interval) const;
 | 
			
		||||
 | 
			
		||||
  //! \brief Read info from file
 | 
			
		||||
  void readInfo();
 | 
			
		||||
 | 
			
		||||
  //! \brief Returns a const vector to the entries (\sa readInfo)
 | 
			
		||||
  const std::vector<Entry>& getEntries() const { return m_entry; }
 | 
			
		||||
 | 
			
		||||
  //! \brief Open the file at a given time level
 | 
			
		||||
  //! \param[in] level The requested time level
 | 
			
		||||
  virtual void openFile(int level);
 | 
			
		||||
 | 
			
		||||
  //! \brief Close the file
 | 
			
		||||
  //! \param[in] level Level we just wrote to the file
 | 
			
		||||
  //! \param[in] force Ignored
 | 
			
		||||
  virtual void closeFile(int level, bool force=false);
 | 
			
		||||
 | 
			
		||||
  //! \brief Write a vector to file
 | 
			
		||||
  //! \param[in] level The time level to write the vector at
 | 
			
		||||
  //! \param[in] entry The DataEntry describing the vector
 | 
			
		||||
  virtual void writeVector(int level, const DataEntry& entry);
 | 
			
		||||
 | 
			
		||||
  //! \brief Read a vector from file
 | 
			
		||||
  //! \param[in] level The time level to read the vector at
 | 
			
		||||
  //! \param[in] entry The DataEntry describing the vector
 | 
			
		||||
  virtual bool readVector(int level, const DataEntry& entry);
 | 
			
		||||
 | 
			
		||||
  //! \brief Write data from a SIM to file
 | 
			
		||||
  //! \param[in] level The time level to write the data at
 | 
			
		||||
  //! \param[in] entry The DataEntry describing the vector
 | 
			
		||||
  //! \param[in] geometryUpdated Ignored
 | 
			
		||||
  virtual void writeSIM(int level, const DataEntry& entry,
 | 
			
		||||
                        bool geometryUpdated);
 | 
			
		||||
  virtual bool readSIM(int level, const DataEntry& entry);
 | 
			
		||||
  virtual bool writeTimeInfo(int level, int order, int interval, 
 | 
			
		||||
                             SIMparameters& tp);
 | 
			
		||||
 | 
			
		||||
  //! \brief Read data from a file into SIM
 | 
			
		||||
  //! \param[in] level The time level to read the data at
 | 
			
		||||
  //! \param[in] entry The DataEntry describing the SIM
 | 
			
		||||
  virtual bool readSIM(int level, const DataEntry& entry);
 | 
			
		||||
 | 
			
		||||
  //! \brief Write time stepping info to file (currently a dummy)
 | 
			
		||||
  //! \param[in] level The time level to write the info at
 | 
			
		||||
  //! \param[in] order The temporal order
 | 
			
		||||
  //! \param[in] interval The number of time steps between each data dump
 | 
			
		||||
  //! \param[in] tp The current time stepping info
 | 
			
		||||
  virtual bool writeTimeInfo(int level, int order, int interval,
 | 
			
		||||
                             SIMparameters& tp);
 | 
			
		||||
protected:
 | 
			
		||||
  //! \brief Internal helper function
 | 
			
		||||
  //! \param[in] name The name of the field to add
 | 
			
		||||
  //! \param[in] description The description of the field to add
 | 
			
		||||
  //! \param[in] geometry The name of the geometry the field uses
 | 
			
		||||
  //! \param[in] components Number of components in the field
 | 
			
		||||
  //! \param[in] patches Number of patches in the field
 | 
			
		||||
  //! \param[in] type The type of the field
 | 
			
		||||
  void addField(const std::string& name, const std::string& description,
 | 
			
		||||
                const std::string& geometry, int components, int patches,
 | 
			
		||||
                const std::string& type="field");
 | 
			
		||||
 | 
			
		||||
  //! \brief A vector of entries read from file
 | 
			
		||||
  std::vector<Entry> m_entry;
 | 
			
		||||
 | 
			
		||||
  //! \brief Our xml document
 | 
			
		||||
  TiXmlDocument* m_doc;
 | 
			
		||||
  //! \brief The document's root node
 | 
			
		||||
  TiXmlNode* m_node;
 | 
			
		||||
  //! \brief The current (constant) timestep
 | 
			
		||||
  double m_dt;
 | 
			
		||||
  //! \brief The temporal order
 | 
			
		||||
  int m_order;
 | 
			
		||||
  //! \brief A stride for dumping. We dump at every m_interval'th time level
 | 
			
		||||
  int m_interval;
 | 
			
		||||
};
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user