diff --git a/CMake/CMakeSetCompilerFlags.cmake b/CMake/CMakeSetCompilerFlags.cmake index 2ea8c0b2faf0a398681e32232aa7d247b511c72c..26eeca2a08436c910d1b936b665ef471ed3e557b 100644 --- a/CMake/CMakeSetCompilerFlags.cmake +++ b/CMake/CMakeSetCompilerFlags.cmake @@ -47,7 +47,7 @@ endmacro() ################################################################ ### ADD_COMPILER_FLAGS_TO_PROJECT ### ################################################################ -function(addAdditionalFlags project_name) +function(addAdditionalFlags library_name) status_lib("additional compiler flags CXX: ${CS_COMPILER_FLAGS_CXX}") status_lib("additional compiler flags CXX debug: ${CS_COMPILER_FLAGS_CXX_DEBUG}") @@ -67,18 +67,18 @@ function(addAdditionalFlags project_name) # compile options foreach(flag IN LISTS CS_COMPILER_FLAGS_CXX) - target_compile_options(${project_name} PRIVATE "$<$<COMPILE_LANGUAGE:CXX>:${flag}>") + target_compile_options(${library_name} PRIVATE "$<$<COMPILE_LANGUAGE:CXX>:${flag}>") if(MSVC) - target_compile_options(${project_name} PRIVATE "$<$<COMPILE_LANGUAGE:CUDA>:-Xcompiler=${flag}>") + target_compile_options(${library_name} PRIVATE "$<$<COMPILE_LANGUAGE:CUDA>:-Xcompiler=${flag}>") endif() endforeach() foreach(flag IN LISTS CS_COMPILER_FLAGS_CXX_DEBUG) - target_compile_options(${project_name} PRIVATE "$<$<AND:$<COMPILE_LANGUAGE:CXX>,$<CONFIG:DEBUG>>:${flag}>") + target_compile_options(${library_name} PRIVATE "$<$<AND:$<COMPILE_LANGUAGE:CXX>,$<CONFIG:DEBUG>>:${flag}>") endforeach() foreach(flag IN LISTS CS_COMPILER_FLAGS_CXX_RELEASE) - target_compile_options(${project_name} PRIVATE "$<$<AND:$<COMPILE_LANGUAGE:CXX>,$<CONFIG:RELEASE>>:${flag}>") + target_compile_options(${library_name} PRIVATE "$<$<AND:$<COMPILE_LANGUAGE:CXX>,$<CONFIG:RELEASE>>:${flag}>") endforeach() endfunction() \ No newline at end of file diff --git a/CMake/VirtualFluidsMacros.cmake b/CMake/VirtualFluidsMacros.cmake index debb5ee7826d7dc3d6499b3813070dcab4b94bd4..62388cdf333aac80464e49af0edd4facdfceb6de 100644 --- a/CMake/VirtualFluidsMacros.cmake +++ b/CMake/VirtualFluidsMacros.cmake @@ -80,7 +80,7 @@ endfunction() ################################################################################# function (vf_get_library_test_name library_test_name) vf_get_library_name (folder_name) - set (${library_test_name} ${library_name}Tests PARENT_SCOPE) + set (${library_test_name} ${folder_name}Tests PARENT_SCOPE) endfunction() @@ -103,11 +103,11 @@ endfunction() function(vf_add_library) set( options ) - set( oneValueArgs ) - set( multiValueArgs NAME BUILDTYPE PUBLIC_LINK PRIVATE_LINK FILES FOLDER EXCLUDE) + set( oneValueArgs NAME BUILDTYPE) + set( multiValueArgs PUBLIC_LINK PRIVATE_LINK FILES FOLDER EXCLUDE) cmake_parse_arguments( ARG "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN} ) - if(${ARG_NAME}) + if(DEFINED ARG_NAME) set(library_name ${ARG_NAME}) else() vf_get_library_name (library_name) diff --git a/src/gpu/VirtualFluids_GPU/CMakeLists.txt b/src/gpu/VirtualFluids_GPU/CMakeLists.txt index 95405b25864f506e5580fa6711a4389d39d8d7a7..b80eec73174110e5759bf5f496d7f45fdfd4bd9f 100644 --- a/src/gpu/VirtualFluids_GPU/CMakeLists.txt +++ b/src/gpu/VirtualFluids_GPU/CMakeLists.txt @@ -12,3 +12,5 @@ linkBoost(COMPONENTS "serialization") #SET(TPN_WIN32 "/EHsc") #https://stackoverflow.com/questions/6832666/lnk2019-when-including-asio-headers-solution-generated-with-cmake #https://stackoverflow.com/questions/27442885/syntax-error-with-stdnumeric-limitsmax + +vf_add_tests() diff --git a/src/gpu/VirtualFluids_GPU/LBM/Simulation.cpp b/src/gpu/VirtualFluids_GPU/LBM/Simulation.cpp index d185487bb2642fb1628e1a9dc0a932c0ea1e71a0..0eb7471e7fe1b4442a180188ab0782845e351eaa 100644 --- a/src/gpu/VirtualFluids_GPU/LBM/Simulation.cpp +++ b/src/gpu/VirtualFluids_GPU/LBM/Simulation.cpp @@ -40,18 +40,11 @@ #include "Calculation/ForceCalculations.h" #include "Calculation/PorousMedia.h" ////////////////////////////////////////////////////////////////////////// -//CUDA +#include "Restart/RestartObject.h" + #include <cuda_runtime.h> #include <helper_functions.h> #include <helper_cuda.h> -////random numbers -//#include <curand.h> -//#include <curand_kernel.h> -////////////////////////////////////////////////////////////////////////// -#include <boost/foreach.hpp> -#include <stdio.h> -#include <vector> -#include "Restart/RestartPostprocessor.h" ////////////////////////////////////////////////////////////////////////// #include "DataStructureInitializer/GridProvider.h" #include "Output/DataWriter.h" @@ -59,14 +52,11 @@ #include "PreProcessor/PreProcessorFactory/PreProcessorFactory.h" #include "Kernel/Kernel.h" -Simulation::Simulation() -{ -} -Simulation::~Simulation() +std::string getFileName(const std::string& fname, int step, int myID) { - + return std::string(fname + "_Restart_" + UbSystem::toString(myID) + "_" + UbSystem::toString(step)); } @@ -114,9 +104,7 @@ void Simulation::init(SPtr<Parameter> para, SPtr<GridProvider> gridProvider, std else para->setStartTurn((unsigned int)0); //100000 - //Restart object - restObj = new RestartObject(); - rest = new RestartPostprocessor(restObj, RestartPostprocessor::TXT); + restart_object = std::make_shared<ASCIIRestartObject>(); ////////////////////////////////////////////////////////////////////////// output.setName(para->getFName() + StringUtil::toString<int>(para->getMyID()) + ".log"); if(para->getMyID() == 0) output.setConsoleOut(true); @@ -264,7 +252,7 @@ void Simulation::init(SPtr<Parameter> para, SPtr<GridProvider> gridProvider, std ////////////////////////////////////////////////////////////////////////// ////allocVeloForForcing(para); //output << "new object forceCalulator " << "\n"; - //forceCalculator = new ForceCalculations(para.get()); + //forceCalculator = std::make_shared<ForceCalculations>(para.get()); ////////////////////////////////////////////////////////////////////////// //output << "define the Grid..." ; @@ -330,10 +318,10 @@ void Simulation::init(SPtr<Parameter> para, SPtr<GridProvider> gridProvider, std if (para->getDoRestart()) { output << "Restart...\n...get the Object...\n"; - restObj = rest->restart(para->getFName(), para->getTimeDoRestart(), para->getMyID()); - output << "...load...\n"; - restObj->load(para.get()); - //para = rest->restart(para->getTimeDoRestart()); + + const auto name = getFileName(para->getFName(), para->getTimeDoRestart(), para->getMyID()); + restart_object->deserialize(name, para); + output << "...copy Memory for Restart...\n"; for (int lev=para->getCoarse(); lev <= para->getFine(); lev++) { @@ -523,8 +511,10 @@ void Simulation::run() } output << "Dateien fuer CheckPoint schreiben t=" << t << "..."; - restObj->safe(para.get()); - rest->doCheckPoint(para->getFName(), t, para->getMyID()); + + const auto name = getFileName(para->getFName(), t, para->getMyID()); + restart_object->serialize(name, para); + output << "\n fertig\n"; } ////////////////////////////////////////////////////////////////////////// @@ -1299,11 +1289,6 @@ void Simulation::free() } ////////////////////////////////////////////////////////////////////////// - para->~Parameter(); - gridProvider->~GridProvider(); - dataWriter->~DataWriter(); - comm->~Communicator(); - for(std::size_t i = 0; i < kernels.size(); i++) - kernels.at(i)->~Kernel(); + delete comm; } \ No newline at end of file diff --git a/src/gpu/VirtualFluids_GPU/LBM/Simulation.h b/src/gpu/VirtualFluids_GPU/LBM/Simulation.h index afecb7afd5b0ec241de1b408612fe734db3a560c..7a91331a76e565f9240e3a51ae45a88c753e9ee1 100644 --- a/src/gpu/VirtualFluids_GPU/LBM/Simulation.h +++ b/src/gpu/VirtualFluids_GPU/LBM/Simulation.h @@ -20,7 +20,6 @@ class Parameter; class GridProvider; class PorousMedia; class RestartObject; -class RestartPostprocessor; class ForceCalculations; class DataWriter; class Kernel; @@ -33,8 +32,6 @@ class TrafficMovementFactory; class VIRTUALFLUIDS_GPU_EXPORT Simulation { public: - Simulation(); - ~Simulation(); void run(); void init(SPtr<Parameter> para, SPtr<GridProvider> gridProvider, std::shared_ptr<DataWriter> dataWriter, std::shared_ptr<CudaMemoryManager> cudaManager); void free(); @@ -73,12 +70,10 @@ protected: std::vector < SPtr< ADKernel>> adKernels; std::shared_ptr<PreProcessor> preProcessor; - //Restart object - RestartObject* restObj; - RestartPostprocessor* rest; + SPtr<RestartObject> restart_object; //Forcing Calculation - ForceCalculations* forceCalculator; + std::shared_ptr<ForceCalculations> forceCalculator; //Porous Media std::vector<std::shared_ptr<PorousMedia>> pm; diff --git a/src/gpu/VirtualFluids_GPU/Restart/RestartObject.cpp b/src/gpu/VirtualFluids_GPU/Restart/RestartObject.cpp index ac01d57a1291911d36b94ae7a69e223579d4695f..dc9460491df245874488a50492120bc0347e495f 100644 --- a/src/gpu/VirtualFluids_GPU/Restart/RestartObject.cpp +++ b/src/gpu/VirtualFluids_GPU/Restart/RestartObject.cpp @@ -1,61 +1,154 @@ #include "RestartObject.h" + +#include <fstream> + #include "Parameter/Parameter.h" #include "basics/utilities/UbMath.h" -RestartObject::RestartObject() +void RestartObject::deserialize(const std::string &filename, std::shared_ptr<Parameter> para) { + for (int j = para->getCoarse(); j <= para->getFine(); j++) { + std::vector<real> vec; + fs.push_back(vec); + + for (unsigned int i = 0; i < (para->getD3Qxx() * para->getParH(j)->size_Mat_SP); i++) { + para->getParH(j)->d0SP.f[0][i] = fs[j][i]; + } + } + + deserialize_internal(filename); } -////////////////////////////////////////////////////////////////////////// -RestartObject::~RestartObject() + +void RestartObject::serialize(const std::string &filename, std::shared_ptr<Parameter> para) { + if (fs.size() > 0) { + clear(para); + } + for (int j = para->getCoarse(); j <= para->getFine(); j++) { + std::vector<real> vec; + fs.push_back(vec); + + for (unsigned int i = 0; i < (para->getD3Qxx() * para->getParH(j)->size_Mat_SP); i++) { + if (UbMath::isNaN(para->getParH(j)->d0SP.f[0][i])) { + fs[j].push_back((real)0.0); + } else { + fs[j].push_back(para->getParH(j)->d0SP.f[0][i]); + } + } + } + + serialize_internal(filename); } -////////////////////////////////////////////////////////////////////////// -void RestartObject::load(Parameter* para) + +void RestartObject::clear(std::shared_ptr<Parameter> para) { - for (int j = para->getCoarse(); j <= para->getFine(); j++) - { - std::vector<real> vec; - fs.push_back(vec); - - for (unsigned int i = 0; i < (para->getD3Qxx()*para->getParH(j)->size_Mat_SP); i++) - { - para->getParH(j)->d0SP.f[0][i] = fs[j][i]; - } - } + for (int j = para->getCoarse(); j <= para->getFine(); j++) { + fs[j].resize(0); + } + fs.resize(0); } ////////////////////////////////////////////////////////////////////////// -void RestartObject::safe(Parameter* para) + +void ASCIIRestartObject::serialize_internal(const std::string &filename) { - if (fs.size() > 0) - { - clear(para); - } - for (int j = para->getCoarse(); j <= para->getFine(); j++) - { - std::vector<real> vec; - fs.push_back(vec); - - for (unsigned int i = 0; i < (para->getD3Qxx()*para->getParH(j)->size_Mat_SP); i++) - { - if (UbMath::isNaN(para->getParH(j)->d0SP.f[0][i])) - { - fs[j].push_back((real)0.0); - } - else - { - fs[j].push_back(para->getParH(j)->d0SP.f[0][i]); - } - } - } + std::ofstream stream(filename + ".txt"); + + if (!stream) { + stream.clear(); + std::string path = UbSystem::getPathFromString(filename); + if (path.size() > 0) { + UbSystem::makeDirectory(path); + stream.open(filename.c_str()); + } + + if (!stream) + throw UbException(UB_EXARGS, "couldn't open file " + filename); + } + + for (std::vector<std::vector<real>>::size_type i = 0; i < fs.size(); i++) { + for (std::vector<real>::size_type j = 0; j < fs[i].size(); j++) { + stream << fs[i][j] << " "; + } + stream << "\n"; + } + + stream.close(); } -////////////////////////////////////////////////////////////////////////// -void RestartObject::clear(Parameter* para) + +void ASCIIRestartObject::deserialize_internal(const std::string &filename) +{ + std::ifstream stream(filename + ".txt", std::ios_base::in); + + if (!stream.is_open()) + throw UbException(UB_EXARGS, "couldn't open check point file " + filename); + + std::string line; + while (std::getline(stream, line)) { + std::vector<real> lineData; + std::stringstream lineStream(line); + + real value; + while (lineStream >> value) { + lineData.push_back(value); + } + fs.push_back(lineData); + } + + stream.close(); +} + +void BinaryRestartObject::serialize_internal(const std::string &filename) { - for (int j = para->getCoarse(); j <= para->getFine(); j++) - { - fs[j].resize(0); - } - fs.resize(0); + std::ofstream stream(filename + ".bin", std::ios_base::binary); + + if (!stream) { + stream.clear(); + std::string path = UbSystem::getPathFromString(filename); + if (path.size() > 0) { + UbSystem::makeDirectory(path); + stream.open(filename.c_str()); + } + + if (!stream) + throw UbException(UB_EXARGS, "couldn't open file " + filename); + } + + // Store size of the outer vector + int s1 = fs.size(); + stream.write(reinterpret_cast<const char *>(&s1), sizeof(s1)); + + // Now write each vector one by one + for (auto &v : fs) { + // Store its size + int size = v.size(); + stream.write(reinterpret_cast<const char *>(&size), sizeof(size)); + + // Store its contents + stream.write(reinterpret_cast<const char *>(&v[0]), v.size() * sizeof(float)); + } + + stream.close(); } -////////////////////////////////////////////////////////////////////////// +void BinaryRestartObject::deserialize_internal(const std::string &filename) +{ + std::ifstream stream(filename + ".bin", std::ios_base::in | std::ifstream::binary); + + if (!stream.is_open()) + throw UbException(UB_EXARGS, "couldn't open check point file " + filename); + + int size = 0; + stream.read(reinterpret_cast<char *>(&size), sizeof(size)); + fs.resize(size); + for (int n = 0; n < size; ++n) { + int size2 = 0; + stream.read(reinterpret_cast<char *>(&size2), sizeof(size2)); + real f; + for (int k = 0; k < size2; ++k) { + stream.read(reinterpret_cast<char *>(&f), sizeof(f)); + fs[n].push_back(f); + } + } + + stream.close(); +} diff --git a/src/gpu/VirtualFluids_GPU/Restart/RestartObject.h b/src/gpu/VirtualFluids_GPU/Restart/RestartObject.h index 9e919b4b667a2ee302b173abe52473c58fea2cb4..34540ba5036d2127c21eb263b09b96d47c14dc4b 100644 --- a/src/gpu/VirtualFluids_GPU/Restart/RestartObject.h +++ b/src/gpu/VirtualFluids_GPU/Restart/RestartObject.h @@ -1,36 +1,44 @@ #ifndef RestartObject_H #define RestartObject_H -#include "LBM/LB.h" -#include "LBM/D3Q27.h" -#include "Parameter/Parameter.h" -#include "basics/utilities/UbSystem.h" -#include "boost/serialization/serialization.hpp" -#include "boost/serialization/vector.hpp" +#include <memory> +#include <string> +#include <vector> + +#include <basics/Core/DataTypes.h> + +class Parameter; class RestartObject { public: - RestartObject(); - ~RestartObject(); - void load(Parameter* para); - void safe(Parameter* para); - void clear(Parameter* para); -protected: + virtual ~RestartObject() = default; + + void deserialize(const std::string &filename, std::shared_ptr<Parameter> para); + void serialize(const std::string &filename, std::shared_ptr<Parameter> para); + + std::vector<std::vector<real>> fs; + + virtual void serialize_internal(const std::string &filename) = 0; + virtual void deserialize_internal(const std::string &filename) = 0; private: - ////////////////////////////////////////////////////////////////////////// - //Restart - friend class boost::serialization::access; - template<class Archive> - void serialize(Archive & ar, const unsigned int version) - { - ar & fs; - } - ////////////////////////////////////////////////////////////////////////// - std::vector< std::vector<real> > fs; - ////////////////////////////////////////////////////////////////////////// + void clear(std::shared_ptr<Parameter> para); +}; + +class ASCIIRestartObject : public RestartObject +{ +private: + virtual void serialize_internal(const std::string &filename); + virtual void deserialize_internal(const std::string &filename); +}; + +class BinaryRestartObject : public RestartObject +{ +private: + virtual void serialize_internal(const std::string &filename); + virtual void deserialize_internal(const std::string &filename); }; #endif diff --git a/src/gpu/VirtualFluids_GPU/Restart/RestartObjectTests.cpp b/src/gpu/VirtualFluids_GPU/Restart/RestartObjectTests.cpp new file mode 100644 index 0000000000000000000000000000000000000000..5fa40d64daaa02abcf4815281ccf5349ad7b0f60 --- /dev/null +++ b/src/gpu/VirtualFluids_GPU/Restart/RestartObjectTests.cpp @@ -0,0 +1,43 @@ +#include <gmock/gmock.h> + +#include "RestartObject.h" + + +TEST(RestartObjectTests, saveAndLoad_ascii) +{ + std::shared_ptr<RestartObject> sut = std::make_shared<ASCIIRestartObject>(); + + sut->fs = std::vector<std::vector<float>> { + { 1,2,3 }, + { 4,5,6 } + }; + + std::string name {"test_do_check_point"}; + sut->serialize_internal(name); + + + std::shared_ptr<RestartObject> obj_read = std::make_shared<ASCIIRestartObject>(); + obj_read->deserialize_internal(name); + + EXPECT_THAT(sut->fs, ::testing::ContainerEq(obj_read->fs)); +} + + +TEST(RestartObjectTests, saveAndLoad_binary) +{ + std::shared_ptr<RestartObject> sut = std::make_shared<BinaryRestartObject>(); + + sut->fs = std::vector<std::vector<float>> { + { 1,2,3 }, + { 4,5,6 } + }; + + std::string name {"test_do_check_point"}; + sut->serialize_internal(name); + + + std::shared_ptr<RestartObject> obj_read = std::make_shared<BinaryRestartObject>(); + obj_read->deserialize_internal(name); + + EXPECT_THAT(sut->fs, ::testing::ContainerEq(obj_read->fs)); +} diff --git a/src/gpu/VirtualFluids_GPU/Restart/RestartPostprocessor.cpp b/src/gpu/VirtualFluids_GPU/Restart/RestartPostprocessor.cpp deleted file mode 100644 index a284230ed07515cf483cae2276336ac9226820e2..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Restart/RestartPostprocessor.cpp +++ /dev/null @@ -1,104 +0,0 @@ -#include "RestartPostprocessor.h" -#include <boost/archive/binary_oarchive.hpp> -#include <boost/archive/binary_iarchive.hpp> - -#include <boost/archive/text_oarchive.hpp> -#include <boost/archive/text_iarchive.hpp> - -//#include "BoostSerializationClassExportHelper.h" - -RestartPostprocessor::RestartPostprocessor(RestartObject *object, ArchiveType type) -{ - archiveType = type; - obj = object; -} -////////////////////////////////////////////////////////////////////////// -RestartPostprocessor::~RestartPostprocessor() -{ -} -////////////////////////////////////////////////////////////////////////// -void RestartPostprocessor::doCheckPoint( std::string fname, int step, int myID) -{ - std::string filename = fname + "_Restart_" + UbSystem::toString(myID) + "_" + UbSystem::toString(step); - - if (archiveType == TXT) - { - saveTxtArchive(filename + ".txt"); - } - else if(archiveType == BINARY) - { - saveBinArchive(filename + ".bin"); - } -} -////////////////////////////////////////////////////////////////////////// -RestartObject* RestartPostprocessor::restart( std::string fname, int step, int myID) -{ - std::string filename = fname + "_Restart_" + UbSystem::toString(myID) + "_" + UbSystem::toString(step); - - if (archiveType == TXT) - { - loadTxtArchive(filename + ".txt"); - } - else if(archiveType == BINARY) - { - loadBinArchive(filename + ".bin"); - } - - return obj; -} -////////////////////////////////////////////////////////////////////////// -void RestartPostprocessor::saveTxtArchive(std::string filename) -{ - std::ofstream file(filename.c_str()); - if(!file) - { - file.clear(); - std::string path = UbSystem::getPathFromString(filename); - if(path.size()>0){ UbSystem::makeDirectory(path); file.open(filename.c_str());} - if(!file) throw UbException(UB_EXARGS,"couldn't open file "+filename); - } - boost::archive::text_oarchive oa(file); - oa.register_type<RestartObject>(); - oa << obj; -} -////////////////////////////////////////////////////////////////////////// -void RestartPostprocessor::loadTxtArchive( std::string filename ) -{ - std::ifstream file(filename.c_str()); - //if (!file.is_open()) UB_THROW( UbException(UB_EXARGS,"Can not open check point file \"" + filename + "\"")); - if (!file.is_open()) throw UbException(UB_EXARGS,"couldn't open check point file "+filename); - printf("the check point file is open..."); - boost::archive::text_iarchive ia(file); - printf("boost archive is allocated..."); - ia.register_type<RestartObject>(); - printf("register type is set..."); - ia >> obj; - printf("obj is filled..."); -} -////////////////////////////////////////////////////////////////////////// -void RestartPostprocessor::saveBinArchive( std::string filename ) -{ - //impotent for binary archive add std::ios::binary - std::ofstream file(filename.c_str(), std::ios::binary); - if(!file) - { - file.clear(); - std::string path = UbSystem::getPathFromString(filename); - if(path.size()>0){ UbSystem::makeDirectory(path); file.open(filename.c_str());} - if(!file) throw UbException(UB_EXARGS,"couldn't open file "+filename); - } - boost::archive::binary_oarchive oa(file); - oa.register_type<RestartObject>(); - oa << obj; -} -////////////////////////////////////////////////////////////////////////// -void RestartPostprocessor::loadBinArchive( std::string filename ) -{ - //impotent for binary archive add std::ios::binary - std::ifstream file(filename.c_str(), std::ios::binary); - //if (!file.is_open()) UB_THROW( UbException(UB_EXARGS,"Can not open check point file \"" + filename + "\"")); - boost::archive::binary_iarchive ia(file); - ia.register_type<RestartObject>(); - ia >> obj; -} - diff --git a/src/gpu/VirtualFluids_GPU/Restart/RestartPostprocessor.h b/src/gpu/VirtualFluids_GPU/Restart/RestartPostprocessor.h deleted file mode 100644 index 289339e5ef84326ef5f1e5d751b92de4c5851f7e..0000000000000000000000000000000000000000 --- a/src/gpu/VirtualFluids_GPU/Restart/RestartPostprocessor.h +++ /dev/null @@ -1,32 +0,0 @@ -#ifndef Restarter_H -#define Restarter_H - -#include "LBM/LB.h" -#include "LBM/D3Q27.h" -#include "Restart/RestartObject.h" -#include "basics/utilities/UbSystem.h" - -#include <boost/shared_ptr.hpp> -class RestartPostprocessor; -typedef boost::shared_ptr<RestartPostprocessor> RestartPostprocessorPtr; - -class RestartPostprocessor -{ -public: - enum ArchiveType {TXT, BINARY}; -public: - RestartPostprocessor(RestartObject *object, ArchiveType typetype = BINARY); - ~RestartPostprocessor(); - void doCheckPoint( std::string fname, int step, int myID); - RestartObject* restart( std::string fname, int step, int myID); -protected: - void saveTxtArchive(std::string filename); - void loadTxtArchive(std::string filename); - void saveBinArchive(std::string filename); - void loadBinArchive(std::string filename); -private: - ArchiveType archiveType; - RestartObject *obj; -}; - -#endif