ESyS-Particle  4.0.1
CheckPointController.h
00001 
00002 //                                                         //
00003 // Copyright (c) 2003-2011 by The University of Queensland //
00004 // Earth Systems Science Computational Centre (ESSCC)      //
00005 // http://www.uq.edu.au/esscc                              //
00006 //                                                         //
00007 // Primary Business: Brisbane, Queensland, Australia       //
00008 // Licensed under the Open Software License version 3.0    //
00009 // http://www.opensource.org/licenses/osl-3.0.php          //
00010 //                                                         //
00012 
00013 
00014 #ifndef CHECKPOINTCONTROLLER_H
00015 #define CHECKPOINTCONTROLLER_H
00016 
00017 // --- MPI includes ---
00018 #include <mpi.h>
00019 
00020 // --- Project includes ---
00021 #include "Geometry/GeometryInfo.h"
00022 #include "Foundation/StringUtil.h"
00023 #include "Foundation/BoundingBox.h"
00024 
00025 // --- STL includes ---
00026 #include <string>
00027 
00031 class CheckPointController
00032 {
00033 public:
00039   CheckPointController();
00040 
00047   CheckPointController(
00048     const std::string &fileNamePrefix,
00049     int beginTime,
00050     int endTime,
00051     int timeInterval,
00052     bool writeThroughMaster=false
00053   );
00054 
00058   virtual ~CheckPointController();
00059 
00068   virtual void performCheckPoint(int currentTime);
00069   virtual void performSnapShot(int currentTime);
00070 
00076   virtual void issueCheckPointCmd(int currentTime);
00077   virtual void issueCheckPointCmdWTM(int currentTime);
00078   virtual void issueSnapShotCmd(int currentTime);
00079   virtual void issueCheckPointLoadingCmd(const std::string&);
00080 
00087   bool isCheckPoint(int time);
00088 
00092   void setCheckPointParams(
00093     const std::string &fileNamePrefix,
00094     int beginTime,
00095     int endTime,
00096     int timeInterval,
00097     bool writeThroughMaster=false
00098   );
00099 
00100   std::string getLatticeDataFileName(const std::string &fileNamePrefix, int timeStep, int rank);
00101 
00102   esys::lsm::StringVector getLatticeDataFiles(int timeStep, int size);
00103 
00104   esys::lsm::StringVector getLatticeDataFiles(int timeStep);
00105 
00110   void set_is2d(bool do2d);
00111 
00115   void setLsmGeoVersion(float version);
00116 
00120   void setPeriodicDimensions(esys::lsm::BoolVector periodicDimensions);
00121 
00125   void setGeometryInfo(const esys::lsm::GeometryInfo &geoInfo);
00126 
00130   void setSpatialDomain(const esys::lsm::BoundingBox &bBox);
00131 
00135   esys::lsm::GeometryInfo getGeometryInfo() const;
00136 
00140   int getNumTimeSteps() const;
00141   
00145   void setNumTimeSteps(int numTimeSteps);
00146 
00150   double getTimeStepSize() const;
00151   
00155   void setTimeStepSize(double timeStepSize);
00156 
00157   bool spatialDomainHasBeenSet() const;
00158   
00159 
00160   MPI_Comm getMpiComm() const;
00161 
00162   void setMpiComm(MPI_Comm mpiComm);
00163 
00164 protected:
00168   MPI_Comm m_mpiComm;
00169 
00170 
00174   std::string m_fileNamePrefix;
00175 
00179   int m_beginTime;
00180 
00184   int m_endTime;
00185 
00189   int m_timeInterval;
00190 
00194   esys::lsm::GeometryInfo m_geoInfo;
00195 
00199   int m_numTimeSteps;
00200 
00204   double m_timeStepSize;
00205 
00206   bool m_spatialDomainHasBeenSet;
00207   
00212   bool m_writeThroughMaster;  
00213 };
00214 
00215 #endif