From 6298206323142e4160efcc71a2be9ddb742e1c13 Mon Sep 17 00:00:00 2001 From: peters <peters@irmb.tu-bs.de> Date: Fri, 11 Jun 2021 12:15:14 +0200 Subject: [PATCH] Add new constrcutor to parameter. WIP --- src/basics/config/ConfigurationFile.cpp | 125 ++++++++++++++++++ ...figurationFile.hpp => ConfigurationFile.h} | 108 --------------- src/cpu/VirtualFluids.h | 2 +- .../Communication/Communicator.cpp | 4 +- .../Communication/Communicator.h | 4 +- .../VirtualFluids_GPU/Parameter/Parameter.cpp | 20 +++ .../VirtualFluids_GPU/Parameter/Parameter.h | 10 +- 7 files changed, 159 insertions(+), 114 deletions(-) create mode 100644 src/basics/config/ConfigurationFile.cpp rename src/basics/config/{ConfigurationFile.hpp => ConfigurationFile.h} (58%) diff --git a/src/basics/config/ConfigurationFile.cpp b/src/basics/config/ConfigurationFile.cpp new file mode 100644 index 000000000..eae1a9226 --- /dev/null +++ b/src/basics/config/ConfigurationFile.cpp @@ -0,0 +1,125 @@ +#include "ConfigurationFile.h" + + +#include <map> +#include <vector> +#include <sstream> +#include <string> +#include <fstream> +#include <iostream> +#include <stdlib.h> + +#include <basics/basics/utilities/UbException.h> + + +namespace vf::basics +{ + +void ConfigurationFile::clear() +{ + data.clear(); +} +////////////////////////////////////////////////////////////////////////// +bool ConfigurationFile::load(const std::string& file) +{ + std::ifstream inFile(file.c_str()); + + if (!inFile.good()) + { + UB_THROW(UbException(UB_EXARGS, "Cannot read configuration file "+file+"!")); + } + + while (inFile.good() && ! inFile.eof()) + { + std::string line; + getline(inFile, line); + + // filter out comments + if (!line.empty()) + { + size_t pos = line.find('#'); + + if (pos != std::string::npos) + { + line = line.substr(0, pos); + } + } + + // split line into key and value + if (!line.empty()) + { + size_t pos = line.find('='); + + if (pos != std::string::npos) + { + std::string key = trim(line.substr(0, pos)); + std::string value = trim(line.substr(pos + 1)); + + if (!key.empty() && !value.empty()) + { + data[key] = value; + } + } + } + } + + return true; +} +////////////////////////////////////////////////////////////////////////// +bool ConfigurationFile::contains(const std::string& key) const +{ + return data.find(key) != data.end(); +} +////////////////////////////////////////////////////////////////////////// +std::string ConfigurationFile::getString(const std::string& key) const +{ + std::map<std::string, std::string>::const_iterator iter = data.find(key); + + if (iter != data.end()) + { + std::string value = iter->second; + return value; + } + else + { + UB_THROW(UbException(UB_EXARGS, "The parameter \"" + key + "\" is missing!")); + } +} +////////////////////////////////////////////////////////////////////////// +std::string ConfigurationFile::trim(const std::string& str) +{ + size_t first = str.find_first_not_of(" \t\n\r"); + + if (first != std::string::npos) + { + size_t last = str.find_last_not_of(" \t\n\r"); + + return str.substr(first, last - first + 1); + } + else + { + return ""; + } +} +////////////////////////////////////////////////////////////////////////// +void ConfigurationFile::split(std::vector<std::string>& lst, const std::string& input, const std::string& separators, bool remove_empty) const +{ + std::ostringstream word; + for (size_t n = 0; n < input.size(); ++n) + { + if (std::string::npos == separators.find(input[n])) + word << input[n]; + else + { + if (!word.str().empty() || !remove_empty) + lst.push_back(word.str()); + word.str(""); + } + } + if (!word.str().empty() || !remove_empty) + lst.push_back(word.str()); +} +////////////////////////////////////////////////////////////////////////// + + +} diff --git a/src/basics/config/ConfigurationFile.hpp b/src/basics/config/ConfigurationFile.h similarity index 58% rename from src/basics/config/ConfigurationFile.hpp rename to src/basics/config/ConfigurationFile.h index f48161557..4f608faab 100644 --- a/src/basics/config/ConfigurationFile.hpp +++ b/src/basics/config/ConfigurationFile.h @@ -82,96 +82,6 @@ private: }; -// ---------------------------------- -// method implementations -// ---------------------------------- - -void ConfigurationFile::clear() -{ - data.clear(); -} -////////////////////////////////////////////////////////////////////////// -bool ConfigurationFile::load(const std::string& file) -{ - std::ifstream inFile(file.c_str()); - - if (!inFile.good()) - { - UB_THROW(UbException(UB_EXARGS, "Cannot read configuration file "+file+"!")); - } - - while (inFile.good() && ! inFile.eof()) - { - std::string line; - getline(inFile, line); - - // filter out comments - if (!line.empty()) - { - size_t pos = line.find('#'); - - if (pos != std::string::npos) - { - line = line.substr(0, pos); - } - } - - // split line into key and value - if (!line.empty()) - { - size_t pos = line.find('='); - - if (pos != std::string::npos) - { - std::string key = trim(line.substr(0, pos)); - std::string value = trim(line.substr(pos + 1)); - - if (!key.empty() && !value.empty()) - { - data[key] = value; - } - } - } - } - - return true; -} -////////////////////////////////////////////////////////////////////////// -bool ConfigurationFile::contains(const std::string& key) const -{ - return data.find(key) != data.end(); -} -////////////////////////////////////////////////////////////////////////// -std::string ConfigurationFile::getString(const std::string& key) const -{ - std::map<std::string, std::string>::const_iterator iter = data.find(key); - - if (iter != data.end()) - { - std::string value = iter->second; - return value; - } - else - { - UB_THROW(UbException(UB_EXARGS, "The parameter \"" + key + "\" is missing!")); - } -} -////////////////////////////////////////////////////////////////////////// -std::string ConfigurationFile::trim(const std::string& str) -{ - size_t first = str.find_first_not_of(" \t\n\r"); - - if (first != std::string::npos) - { - size_t last = str.find_last_not_of(" \t\n\r"); - - return str.substr(first, last - first + 1); - } - else - { - return ""; - } -} ////////////////////////////////////////////////////////////////////////// template<class T> std::vector<T> ConfigurationFile::getVector(const std::string& key) const @@ -190,24 +100,6 @@ std::vector<T> ConfigurationFile::getVector(const std::string& key) const return v; } ////////////////////////////////////////////////////////////////////////// -void ConfigurationFile::split(std::vector<std::string>& lst, const std::string& input, const std::string& separators, bool remove_empty) const -{ - std::ostringstream word; - for (size_t n = 0; n < input.size(); ++n) - { - if (std::string::npos == separators.find(input[n])) - word << input[n]; - else - { - if (!word.str().empty() || !remove_empty) - lst.push_back(word.str()); - word.str(""); - } - } - if (!word.str().empty() || !remove_empty) - lst.push_back(word.str()); -} -////////////////////////////////////////////////////////////////////////// template<class T> T ConfigurationFile::fromString(const std::string& str) const { diff --git a/src/cpu/VirtualFluids.h b/src/cpu/VirtualFluids.h index 64c8382cd..f5064398a 100644 --- a/src/cpu/VirtualFluids.h +++ b/src/cpu/VirtualFluids.h @@ -42,7 +42,7 @@ #include <basics/PointerDefinitions.h> -#include <basics/config/ConfigurationFile.hpp> +#include <basics/config/ConfigurationFile.h> #include <basics/container/CbArray2D.h> #include <basics/container/CbArray3D.h> diff --git a/src/gpu/VirtualFluids_GPU/Communication/Communicator.cpp b/src/gpu/VirtualFluids_GPU/Communication/Communicator.cpp index 7beae77cf..32fd45109 100644 --- a/src/gpu/VirtualFluids_GPU/Communication/Communicator.cpp +++ b/src/gpu/VirtualFluids_GPU/Communication/Communicator.cpp @@ -155,8 +155,8 @@ void Communicator::exchngDataGeo(int *sbuf_t, int *rbuf_t, int *sbuf_b, int *rbu MPI_Isend(sbuf_b, count, MPI_INT, nbrbottom, 0, comm1d, &request[3]); MPI_Waitall(4, request, status); } -int Communicator::getPID() { return PID; } -int Communicator::getNummberOfProcess() { return numprocs; } +int Communicator::getPID() const { return PID; } +int Communicator::getNummberOfProcess() const { return numprocs; } int Communicator::getNeighbourTop() { return nbrtop; } int Communicator::getNeighbourBottom() { return nbrbottom; } MPI_Comm Communicator::getCommunicator() { return comm1d; } diff --git a/src/gpu/VirtualFluids_GPU/Communication/Communicator.h b/src/gpu/VirtualFluids_GPU/Communication/Communicator.h index b67cdf264..72c4a136e 100644 --- a/src/gpu/VirtualFluids_GPU/Communication/Communicator.h +++ b/src/gpu/VirtualFluids_GPU/Communication/Communicator.h @@ -36,8 +36,8 @@ public: void exchngTopToBottom(float* sbuf, float* rbuf, int count); void waitAll(); void distributeGeometry(unsigned int* dataRoot, unsigned int* dataNode, int dataSizePerNode); - int getPID(); - int getNummberOfProcess(); + int getPID() const; + int getNummberOfProcess() const; int getNeighbourTop(); int getNeighbourBottom(); void exchngData(float* sbuf_t, float* rbuf_t, float* sbuf_b, float* rbuf_b, int count); diff --git a/src/gpu/VirtualFluids_GPU/Parameter/Parameter.cpp b/src/gpu/VirtualFluids_GPU/Parameter/Parameter.cpp index 0446608cf..5c9cccec3 100644 --- a/src/gpu/VirtualFluids_GPU/Parameter/Parameter.cpp +++ b/src/gpu/VirtualFluids_GPU/Parameter/Parameter.cpp @@ -23,6 +23,8 @@ //#endif //lib for windows Ws2_32.lib +#include <basics/config/ConfigurationFile.h> + SPtr<Parameter> Parameter::make() { @@ -37,6 +39,24 @@ SPtr<Parameter> Parameter::make(SPtr<ConfigData> configData, vf::gpu::Communicat Parameter::Parameter() { } + +Parameter::Parameter(const vf::gpu::Communicator& comm) +{ + ic.numprocs = comm.getNummberOfProcess(); + ic.myid = comm.getPID(); +} + +Parameter::Parameter(const vf::basics::ConfigurationFile& configData, + const vf::gpu::Communicator& comm) : + Parameter(comm) + +{ + if (configData.contains("NumberOfDevices")) + ic.maxdev = configData.getValue<int>("NumberOfDevices"); + else + ic.maxdev = 1; +} + Parameter::Parameter(SPtr<ConfigData> configData, vf::gpu::Communicator* comm) { ////////////////////////////////////////////////////////////////////////// diff --git a/src/gpu/VirtualFluids_GPU/Parameter/Parameter.h b/src/gpu/VirtualFluids_GPU/Parameter/Parameter.h index ccb13e83b..e3ddb717c 100644 --- a/src/gpu/VirtualFluids_GPU/Parameter/Parameter.h +++ b/src/gpu/VirtualFluids_GPU/Parameter/Parameter.h @@ -32,10 +32,16 @@ namespace gpu { class Communicator; } + +namespace basics +{ +class ConfigurationFile; +} } //struct -struct ParameterStruct{ +struct ParameterStruct +{ bool evenOrOdd; unsigned int numberofthreads; @@ -290,6 +296,8 @@ struct ParameterStruct{ class VIRTUALFLUIDS_GPU_EXPORT Parameter { public: + Parameter(const vf::gpu::Communicator& comm); + Parameter(const vf::basics::ConfigurationFile& configData, const vf::gpu::Communicator& comm); //////////////////////////////////////////////////////////////////////////// ////really ugly...should be in private... //Parameter(); -- GitLab