diff --git a/apps/gpu/tests/NumericalTests/Utilities/ConfigFileReaderNT/ConfigFileReaderNT.cpp b/apps/gpu/tests/NumericalTests/Utilities/ConfigFileReaderNT/ConfigFileReaderNT.cpp index 947ce516e860e216806a6f288d134b1efd8b91a6..26d4045fe4b14cf9ffc5dea16815d70c716de000 100644 --- a/apps/gpu/tests/NumericalTests/Utilities/ConfigFileReaderNT/ConfigFileReaderNT.cpp +++ b/apps/gpu/tests/NumericalTests/Utilities/ConfigFileReaderNT/ConfigFileReaderNT.cpp @@ -1,6 +1,5 @@ #include "ConfigFileReaderNT.h" -// #include "Core/Input/Input.h" #include <basics/config/ConfigurationFile.h> #include "Core/StringUtilities/StringUtil.h" @@ -11,63 +10,11 @@ #define VAL(str) #str #define TOSTRING(str) VAL(str) -std::shared_ptr<ConfigFileReader> ConfigFileReader::getNewInstance(const std::string aFilePath) -{ - return std::shared_ptr<ConfigFileReader>(new ConfigFileReader(aFilePath)); -} +using ConfigFilePtr = std::shared_ptr<vf::basics::ConfigurationFile>; +using ConfigDataPtr = std::shared_ptr<ConfigDataStruct>; -ConfigFileReader::ConfigFileReader(const std::string aFilePath) : myFilePath(aFilePath) -{ - // If PATH_NUMERICAL_TESTS is not defined, the grid definitions for the tests needs to be placed in the project root - // directories. -#ifdef PATH_NUMERICAL_TESTS - pathNumericalTests = TOSTRING(PATH_NUMERICAL_TESTS) + std::string("/"); -#else - pathNumericalTests = TOSTRING(SOURCE_ROOT) + std::string("/"); -#endif - std::cout << pathNumericalTests << "\n"; -} -void ConfigFileReader::readConfigFile() -{ - configData = std::shared_ptr<ConfigDataStruct>(new ConfigDataStruct); - - auto input = std::make_shared<vf::basics::ConfigurationFile>(); - input->load(myFilePath); - - if (!checkConfigFile(input)) - exit(1); - - configData->viscosity = StringUtil::toDoubleVector(input->getValue<std::string>("Viscosity")); - configData->kernelsToTest = readKernelList(input); - configData->writeAnalyticalToVTK = StringUtil::toBool(input->getValue<std::string>("WriteAnalyResultsToVTK")); - configData->ySliceForCalculation = StringUtil::toInt(input->getValue<std::string>("ySliceForCalculation")); - - configData->logFilePath = pathNumericalTests + input->getValue<std::string>("FolderLogFile"); - configData->numberOfSimulations = calcNumberOfSimulations(input); - - std::shared_ptr<BasicSimulationParameterStruct> basicSimPara = makeBasicSimulationParameter(input); - - configData->taylorGreenVortexUxParameter = makeTaylorGreenVortexUxParameter(input, basicSimPara); - configData->taylorGreenVortexUxGridInformation = makeGridInformation(input, "TaylorGreenVortexUx"); - - configData->taylorGreenVortexUzParameter = makeTaylorGreenVortexUzParameter(input, basicSimPara); - configData->taylorGreenVortexUzGridInformation = makeGridInformation(input, "TaylorGreenVortexUz"); - - configData->shearWaveParameter = makeShearWaveParameter(input, basicSimPara); - configData->shearWaveGridInformation = makeGridInformation(input, "ShearWave"); - - configData->phiTestParameter = makePhiTestParameter(input); - configData->nyTestParameter = makeNyTestParameter(input); - configData->l2NormTestParameter = makeL2NormTestParameter(input); - configData->l2NormTestBetweenKernelsParameter = makeL2NormTestBetweenKernelsParameter(input); - - configData->vectorWriterInfo = makeVectorWriterInformationStruct(input); - - configData->logFilePara = makeLogFilePara(input); -} - -std::ifstream ConfigFileReader::openConfigFile(const std::string aFilePath) +std::ifstream openConfigFile(const std::string aFilePath) { std::ifstream stream; stream.open(aFilePath.c_str(), std::ios::in); @@ -77,9 +24,7 @@ std::ifstream ConfigFileReader::openConfigFile(const std::string aFilePath) return stream; } -std::shared_ptr<ConfigDataStruct> ConfigFileReader::getConfigData() { return configData; } - -bool ConfigFileReader::checkConfigFile(std::shared_ptr<vf::basics::ConfigurationFile> input) +bool checkConfigFile(ConfigFilePtr input) { std::vector<double> u0TGVux = StringUtil::toDoubleVector(input->getValue<std::string>("ux_TGV_Ux")); std::vector<double> amplitudeTGVux = StringUtil::toDoubleVector(input->getValue<std::string>("Amplitude_TGV_Ux")); @@ -112,7 +57,7 @@ bool ConfigFileReader::checkConfigFile(std::shared_ptr<vf::basics::Configuration } std::shared_ptr<BasicSimulationParameterStruct> -ConfigFileReader::makeBasicSimulationParameter(std::shared_ptr<vf::basics::ConfigurationFile> input) +makeBasicSimulationParameter(ConfigFilePtr input) { std::shared_ptr<BasicSimulationParameterStruct> basicSimPara = std::shared_ptr<BasicSimulationParameterStruct>(new BasicSimulationParameterStruct); @@ -123,8 +68,9 @@ ConfigFileReader::makeBasicSimulationParameter(std::shared_ptr<vf::basics::Confi } std::vector<std::shared_ptr<TaylorGreenVortexUxParameterStruct>> -ConfigFileReader::makeTaylorGreenVortexUxParameter(std::shared_ptr<vf::basics::ConfigurationFile> input, - std::shared_ptr<BasicSimulationParameterStruct> basicSimParameter) +makeTaylorGreenVortexUxParameter(const std::string pathNumericalTests, + ConfigFilePtr input, + std::shared_ptr<BasicSimulationParameterStruct> basicSimParameter) { std::vector<int> basisTimeStepLength = StringUtil::toIntVector(input->getValue<std::string>("BasisTimeStepLength_TGV_Ux")); std::vector<double> amplitude = StringUtil::toDoubleVector(input->getValue<std::string>("Amplitude_TGV_Ux")); @@ -151,8 +97,9 @@ ConfigFileReader::makeTaylorGreenVortexUxParameter(std::shared_ptr<vf::basics::C } std::vector<std::shared_ptr<TaylorGreenVortexUzParameterStruct>> -ConfigFileReader::makeTaylorGreenVortexUzParameter(std::shared_ptr<vf::basics::ConfigurationFile> input, - std::shared_ptr<BasicSimulationParameterStruct> basicSimParameter) +makeTaylorGreenVortexUzParameter(const std::string pathNumericalTests, + ConfigFilePtr input, + std::shared_ptr<BasicSimulationParameterStruct> basicSimParameter) { std::vector<int> basisTimeStepLength = StringUtil::toIntVector(input->getValue<std::string>("BasisTimeStepLength_TGV_Uz")); std::vector<double> amplitude = StringUtil::toDoubleVector(input->getValue<std::string>("Amplitude_TGV_Uz")); @@ -177,8 +124,9 @@ ConfigFileReader::makeTaylorGreenVortexUzParameter(std::shared_ptr<vf::basics::C return parameter; } std::vector<std::shared_ptr<ShearWaveParameterStruct>> -ConfigFileReader::makeShearWaveParameter(std::shared_ptr<vf::basics::ConfigurationFile> input, - std::shared_ptr<BasicSimulationParameterStruct> basicSimParameter) +makeShearWaveParameter(const std::string pathNumericalTests, + ConfigFilePtr input, + std::shared_ptr<BasicSimulationParameterStruct> basicSimParameter) { std::vector<int> basisTimeStepLength = StringUtil::toIntVector(input->getValue<std::string>("BasisTimeStepLength_SW")); std::vector<double> uz = StringUtil::toDoubleVector(input->getValue<std::string>("v0_SW")); @@ -203,7 +151,7 @@ ConfigFileReader::makeShearWaveParameter(std::shared_ptr<vf::basics::Configurati return parameter; } -std::shared_ptr<NyTestParameterStruct> ConfigFileReader::makeNyTestParameter(std::shared_ptr<vf::basics::ConfigurationFile> input) +std::shared_ptr<NyTestParameterStruct> makeNyTestParameter(ConfigFilePtr input) { std::shared_ptr<BasicTestParameterStruct> basicTestParameter = std::shared_ptr<BasicTestParameterStruct>(new BasicTestParameterStruct); @@ -220,7 +168,7 @@ std::shared_ptr<NyTestParameterStruct> ConfigFileReader::makeNyTestParameter(std return testParameter; } -std::shared_ptr<PhiTestParameterStruct> ConfigFileReader::makePhiTestParameter(std::shared_ptr<vf::basics::ConfigurationFile> input) +std::shared_ptr<PhiTestParameterStruct> makePhiTestParameter(ConfigFilePtr input) { std::shared_ptr<BasicTestParameterStruct> basicTestParameter = std::shared_ptr<BasicTestParameterStruct>(new BasicTestParameterStruct); @@ -238,7 +186,7 @@ std::shared_ptr<PhiTestParameterStruct> ConfigFileReader::makePhiTestParameter(s } std::shared_ptr<L2NormTestParameterStruct> -ConfigFileReader::makeL2NormTestParameter(std::shared_ptr<vf::basics::ConfigurationFile> input) +makeL2NormTestParameter(ConfigFilePtr input) { std::shared_ptr<BasicTestParameterStruct> basicTestParameter = std::shared_ptr<BasicTestParameterStruct>(new BasicTestParameterStruct); @@ -256,8 +204,42 @@ ConfigFileReader::makeL2NormTestParameter(std::shared_ptr<vf::basics::Configurat return testParameter; } +std::vector<std::string> readKernelList(ConfigFilePtr input) +{ + if (StringUtil::toBool(input->getValue<std::string>("L2NormBetweenKernelsTest"))) { + std::vector<std::string> kernelList = StringUtil::toStringVector(input->getValue<std::string>("KernelsToTest")); + std::string beginKernel = input->getValue<std::string>("BasicKernel_L2NormBetweenKernels"); + bool basicKernelInKernelList = false; + for (int i = 0; i < kernelList.size(); i++) { + if (kernelList.at(i) == beginKernel) + basicKernelInKernelList = true; + } + if (!basicKernelInKernelList) + kernelList.push_back(beginKernel); + + std::vector<std::string> kernelNames = kernelList; + + while (kernelNames.at(0) != beginKernel) { + kernelNames.push_back(kernelNames.at(0)); + std::vector<std::string>::iterator it = kernelNames.begin(); + kernelNames.erase(it); + } + std::vector<std::string> kernels; + for (int i = 0; i < kernelNames.size(); i++) + kernels.push_back(kernelNames.at(i)); + return kernels; + } else { + std::vector<std::string> kernelList = StringUtil::toStringVector(input->getValue<std::string>("KernelsToTest")); + std::vector<std::string> kernels; + for (int i = 0; i < kernelList.size(); i++) + kernels.push_back(kernelList.at(i)); + + return kernels; + } +} + std::shared_ptr<L2NormTestBetweenKernelsParameterStruct> -ConfigFileReader::makeL2NormTestBetweenKernelsParameter(std::shared_ptr<vf::basics::ConfigurationFile> input) +makeL2NormTestBetweenKernelsParameter(ConfigFilePtr input) { std::shared_ptr<BasicTestParameterStruct> basicTestParameter = std::shared_ptr<BasicTestParameterStruct>(new BasicTestParameterStruct); @@ -289,7 +271,7 @@ ConfigFileReader::makeL2NormTestBetweenKernelsParameter(std::shared_ptr<vf::basi } std::vector<std::shared_ptr<GridInformationStruct>> -ConfigFileReader::makeGridInformation(std::shared_ptr<vf::basics::ConfigurationFile> input, std::string simName) +makeGridInformation(const std::string pathNumericalTests, ConfigFilePtr input, std::string simName) { int number = 32; std::vector<std::string> valueNames; @@ -333,8 +315,19 @@ ConfigFileReader::makeGridInformation(std::shared_ptr<vf::basics::ConfigurationF return gridInformation; } +unsigned int calcStartStepForToVectorWriter(ConfigFilePtr input) +{ + std::vector<unsigned int> startStepsTests; + startStepsTests.push_back(StringUtil::toInt(input->getValue<std::string>("BasicTimeStep_L2"))); + startStepsTests.push_back(StringUtil::toInt(input->getValue<std::string>("StartTimeStepCalculation_Ny"))); + startStepsTests.push_back(StringUtil::toInt(input->getValue<std::string>("StartTimeStepCalculation_Phi"))); + std::sort(startStepsTests.begin(), startStepsTests.end()); + + return startStepsTests.at(0); +} + std::shared_ptr<VectorWriterInformationStruct> -ConfigFileReader::makeVectorWriterInformationStruct(std::shared_ptr<vf::basics::ConfigurationFile> input) +makeVectorWriterInformationStruct(ConfigFilePtr input) { std::shared_ptr<VectorWriterInformationStruct> vectorWriter = std::shared_ptr<VectorWriterInformationStruct>(new VectorWriterInformationStruct); @@ -345,7 +338,7 @@ ConfigFileReader::makeVectorWriterInformationStruct(std::shared_ptr<vf::basics:: return vectorWriter; } -std::shared_ptr<LogFileParameterStruct> ConfigFileReader::makeLogFilePara(std::shared_ptr<vf::basics::ConfigurationFile> input) +std::shared_ptr<LogFileParameterStruct> makeLogFilePara(ConfigFilePtr input) { std::shared_ptr<LogFileParameterStruct> logFilePara = std::shared_ptr<LogFileParameterStruct>(new LogFileParameterStruct); @@ -356,52 +349,25 @@ std::shared_ptr<LogFileParameterStruct> ConfigFileReader::makeLogFilePara(std::s return logFilePara; } -std::vector<std::string> ConfigFileReader::readKernelList(std::shared_ptr<vf::basics::ConfigurationFile> input) +int calcNumberOfSimulationGroup(ConfigFilePtr input, std::string simName) { - if (StringUtil::toBool(input->getValue<std::string>("L2NormBetweenKernelsTest"))) { - std::vector<std::string> kernelList = StringUtil::toStringVector(input->getValue<std::string>("KernelsToTest")); - std::string beginKernel = input->getValue<std::string>("BasicKernel_L2NormBetweenKernels"); - bool basicKernelInKernelList = false; - for (int i = 0; i < kernelList.size(); i++) { - if (kernelList.at(i) == beginKernel) - basicKernelInKernelList = true; - } - if (!basicKernelInKernelList) - kernelList.push_back(beginKernel); - - std::vector<std::string> kernelNames = kernelList; - - while (kernelNames.at(0) != beginKernel) { - kernelNames.push_back(kernelNames.at(0)); - std::vector<std::string>::iterator it = kernelNames.begin(); - kernelNames.erase(it); - } - std::vector<std::string> kernels; - for (int i = 0; i < kernelNames.size(); i++) - kernels.push_back(kernelNames.at(i)); - return kernels; - } else { - std::vector<std::string> kernelList = StringUtil::toStringVector(input->getValue<std::string>("KernelsToTest")); - std::vector<std::string> kernels; - for (int i = 0; i < kernelList.size(); i++) - kernels.push_back(kernelList.at(i)); - - return kernels; + int counter = 0; + int number = 32; + std::vector<std::string> valueNames; + for (int i = 1; i <= 5; i++) { + std::string aValueName = simName; + aValueName += std::to_string(number); + valueNames.push_back(aValueName); + number *= 2; } + for (int i = 0; i < valueNames.size(); i++) { + if (StringUtil::toBool(input->getValue<std::string>(valueNames.at(i)))) + counter++; + } + return counter; } -unsigned int ConfigFileReader::calcStartStepForToVectorWriter(std::shared_ptr<vf::basics::ConfigurationFile> input) -{ - std::vector<unsigned int> startStepsTests; - startStepsTests.push_back(StringUtil::toInt(input->getValue<std::string>("BasicTimeStep_L2"))); - startStepsTests.push_back(StringUtil::toInt(input->getValue<std::string>("StartTimeStepCalculation_Ny"))); - startStepsTests.push_back(StringUtil::toInt(input->getValue<std::string>("StartTimeStepCalculation_Phi"))); - std::sort(startStepsTests.begin(), startStepsTests.end()); - - return startStepsTests.at(0); -} - -int ConfigFileReader::calcNumberOfSimulations(std::shared_ptr<vf::basics::ConfigurationFile> input) +int calcNumberOfSimulations(ConfigFilePtr input, ConfigDataPtr configData) { int counter = 0; @@ -425,20 +391,51 @@ int ConfigFileReader::calcNumberOfSimulations(std::shared_ptr<vf::basics::Config return counter; } -int ConfigFileReader::calcNumberOfSimulationGroup(std::shared_ptr<vf::basics::ConfigurationFile> input, std::string simName) +ConfigDataPtr vf::gpu::tests::readConfigFile(const std::string aFilePath) { - int counter = 0; - int number = 32; - std::vector<std::string> valueNames; - for (int i = 1; i <= 5; i++) { - std::string aValueName = simName; - aValueName += std::to_string(number); - valueNames.push_back(aValueName); - number *= 2; - } - for (int i = 0; i < valueNames.size(); i++) { - if (StringUtil::toBool(input->getValue<std::string>(valueNames.at(i)))) - counter++; - } - return counter; + // If PATH_NUMERICAL_TESTS is not defined, the grid definitions for the tests needs to be placed in the project root + // directories. +#ifdef PATH_NUMERICAL_TESTS + auto pathNumericalTests = TOSTRING(PATH_NUMERICAL_TESTS) + std::string("/"); +#else + auto pathNumericalTests = TOSTRING(SOURCE_ROOT) + std::string("/"); +#endif + std::cout << pathNumericalTests << "\n"; + + auto configData = std::make_shared<ConfigDataStruct>(); + auto input = std::make_shared<vf::basics::ConfigurationFile>(); + input->load(aFilePath); + + if (!checkConfigFile(input)) + exit(1); + + configData->viscosity = StringUtil::toDoubleVector(input->getValue<std::string>("Viscosity")); + configData->kernelsToTest = readKernelList(input); + configData->writeAnalyticalToVTK = StringUtil::toBool(input->getValue<std::string>("WriteAnalyResultsToVTK")); + configData->ySliceForCalculation = StringUtil::toInt(input->getValue<std::string>("ySliceForCalculation")); + + configData->logFilePath = pathNumericalTests + input->getValue<std::string>("FolderLogFile"); + configData->numberOfSimulations = calcNumberOfSimulations(input, configData); + + auto basicSimPara = makeBasicSimulationParameter(input); + + configData->taylorGreenVortexUxParameter = makeTaylorGreenVortexUxParameter(pathNumericalTests, input, basicSimPara); + configData->taylorGreenVortexUxGridInformation = makeGridInformation(pathNumericalTests, input, "TaylorGreenVortexUx"); + + configData->taylorGreenVortexUzParameter = makeTaylorGreenVortexUzParameter(pathNumericalTests, input, basicSimPara); + configData->taylorGreenVortexUzGridInformation = makeGridInformation(pathNumericalTests, input, "TaylorGreenVortexUz"); + + configData->shearWaveParameter = makeShearWaveParameter(pathNumericalTests, input, basicSimPara); + configData->shearWaveGridInformation = makeGridInformation(pathNumericalTests, input, "ShearWave"); + + configData->phiTestParameter = makePhiTestParameter(input); + configData->nyTestParameter = makeNyTestParameter(input); + configData->l2NormTestParameter = makeL2NormTestParameter(input); + configData->l2NormTestBetweenKernelsParameter = makeL2NormTestBetweenKernelsParameter(input); + + configData->vectorWriterInfo = makeVectorWriterInformationStruct(input); + + configData->logFilePara = makeLogFilePara(input); + + return configData; } \ No newline at end of file diff --git a/apps/gpu/tests/NumericalTests/Utilities/ConfigFileReaderNT/ConfigFileReaderNT.h b/apps/gpu/tests/NumericalTests/Utilities/ConfigFileReaderNT/ConfigFileReaderNT.h index d9446388fdbc2721f95120212ddd9b4dfbf52b1b..662d0e7039cac8837dfbd0cd4e2fcd7a4462b3f1 100644 --- a/apps/gpu/tests/NumericalTests/Utilities/ConfigFileReaderNT/ConfigFileReaderNT.h +++ b/apps/gpu/tests/NumericalTests/Utilities/ConfigFileReaderNT/ConfigFileReaderNT.h @@ -12,53 +12,46 @@ namespace vf::basics class ConfigurationFile; } -class ConfigFileReader +namespace vf::gpu::tests { -public: - static std::shared_ptr<ConfigFileReader> getNewInstance(const std::string aFilePath); - std::shared_ptr<ConfigDataStruct> getConfigData(); - void readConfigFile(); - -private: - ConfigFileReader(){}; - ConfigFileReader(const std::string aFilePath); - - std::ifstream openConfigFile(const std::string aFilePath); - bool checkConfigFile(std::shared_ptr<vf::basics::ConfigurationFile> input); - std::vector<std::string> readKernelList(std::shared_ptr<vf::basics::ConfigurationFile> input); - - int calcNumberOfSimulations(std::shared_ptr<vf::basics::ConfigurationFile> input); - int calcNumberOfSimulationGroup(std::shared_ptr<vf::basics::ConfigurationFile> input, std::string simName); - unsigned int calcStartStepForToVectorWriter(std::shared_ptr<vf::basics::ConfigurationFile> input); - - std::vector<std::shared_ptr<TaylorGreenVortexUxParameterStruct>> - makeTaylorGreenVortexUxParameter(std::shared_ptr<vf::basics::ConfigurationFile> input, - std::shared_ptr<BasicSimulationParameterStruct> basicSimParameter); - std::vector<std::shared_ptr<TaylorGreenVortexUzParameterStruct>> - makeTaylorGreenVortexUzParameter(std::shared_ptr<vf::basics::ConfigurationFile> input, - std::shared_ptr<BasicSimulationParameterStruct> basicSimParameter); - std::vector<std::shared_ptr<ShearWaveParameterStruct>> - makeShearWaveParameter(std::shared_ptr<vf::basics::ConfigurationFile> input, - std::shared_ptr<BasicSimulationParameterStruct> basicSimParameter); - - std::shared_ptr<NyTestParameterStruct> makeNyTestParameter(std::shared_ptr<vf::basics::ConfigurationFile> input); - std::shared_ptr<PhiTestParameterStruct> makePhiTestParameter(std::shared_ptr<vf::basics::ConfigurationFile> input); - std::shared_ptr<L2NormTestParameterStruct> makeL2NormTestParameter(std::shared_ptr<vf::basics::ConfigurationFile> input); - std::shared_ptr<L2NormTestBetweenKernelsParameterStruct> - makeL2NormTestBetweenKernelsParameter(std::shared_ptr<vf::basics::ConfigurationFile> input); - - std::shared_ptr<BasicSimulationParameterStruct> makeBasicSimulationParameter(std::shared_ptr<vf::basics::ConfigurationFile> input); - std::vector<std::shared_ptr<GridInformationStruct>> makeGridInformation(std::shared_ptr<vf::basics::ConfigurationFile> input, - std::string simName); - - std::shared_ptr<VectorWriterInformationStruct> - makeVectorWriterInformationStruct(std::shared_ptr<vf::basics::ConfigurationFile> input); - std::shared_ptr<LogFileParameterStruct> makeLogFilePara(std::shared_ptr<vf::basics::ConfigurationFile> input); - - std::string pathNumericalTests; + std::shared_ptr<ConfigDataStruct> readConfigFile(const std::string aFilePath); +} - const std::string myFilePath; - std::shared_ptr<ConfigDataStruct> configData; - //std::shared_ptr<KernelMapper> myKernelMapper; -}; +// private: +// std::ifstream openConfigFile(const std::string aFilePath); +// bool checkConfigFile(std::shared_ptr<vf::basics::ConfigurationFile> input); +// std::vector<std::string> readKernelList(std::shared_ptr<vf::basics::ConfigurationFile> input); + +// int calcNumberOfSimulations(std::shared_ptr<vf::basics::ConfigurationFile> input); +// int calcNumberOfSimulationGroup(std::shared_ptr<vf::basics::ConfigurationFile> input, std::string simName); +// unsigned int calcStartStepForToVectorWriter(std::shared_ptr<vf::basics::ConfigurationFile> input); + +// std::vector<std::shared_ptr<TaylorGreenVortexUxParameterStruct>> +// makeTaylorGreenVortexUxParameter(std::shared_ptr<vf::basics::ConfigurationFile> input, +// std::shared_ptr<BasicSimulationParameterStruct> basicSimParameter); +// std::vector<std::shared_ptr<TaylorGreenVortexUzParameterStruct>> +// makeTaylorGreenVortexUzParameter(std::shared_ptr<vf::basics::ConfigurationFile> input, +// std::shared_ptr<BasicSimulationParameterStruct> basicSimParameter); +// std::vector<std::shared_ptr<ShearWaveParameterStruct>> +// makeShearWaveParameter(std::shared_ptr<vf::basics::ConfigurationFile> input, +// std::shared_ptr<BasicSimulationParameterStruct> basicSimParameter); + +// std::shared_ptr<NyTestParameterStruct> makeNyTestParameter(std::shared_ptr<vf::basics::ConfigurationFile> input); +// std::shared_ptr<PhiTestParameterStruct> makePhiTestParameter(std::shared_ptr<vf::basics::ConfigurationFile> input); +// std::shared_ptr<L2NormTestParameterStruct> makeL2NormTestParameter(std::shared_ptr<vf::basics::ConfigurationFile> input); +// std::shared_ptr<L2NormTestBetweenKernelsParameterStruct> +// makeL2NormTestBetweenKernelsParameter(std::shared_ptr<vf::basics::ConfigurationFile> input); + +// std::shared_ptr<BasicSimulationParameterStruct> makeBasicSimulationParameter(std::shared_ptr<vf::basics::ConfigurationFile> input); +// std::vector<std::shared_ptr<GridInformationStruct>> makeGridInformation(std::shared_ptr<vf::basics::ConfigurationFile> input, +// std::string simName); + +// std::shared_ptr<VectorWriterInformationStruct> +// makeVectorWriterInformationStruct(std::shared_ptr<vf::basics::ConfigurationFile> input); +// std::shared_ptr<LogFileParameterStruct> makeLogFilePara(std::shared_ptr<vf::basics::ConfigurationFile> input); + +// std::string pathNumericalTests; + +// const std::string myFilePath; +// std::shared_ptr<ConfigDataStruct> configData; #endif \ No newline at end of file diff --git a/apps/gpu/tests/NumericalTests/Utilities/VirtualFluidSimulation/VirtualFluidSimulationImp.cpp b/apps/gpu/tests/NumericalTests/Utilities/VirtualFluidSimulation/VirtualFluidSimulation.cpp similarity index 51% rename from apps/gpu/tests/NumericalTests/Utilities/VirtualFluidSimulation/VirtualFluidSimulationImp.cpp rename to apps/gpu/tests/NumericalTests/Utilities/VirtualFluidSimulation/VirtualFluidSimulation.cpp index 53bb1d75007a47572742a69907012e7f0d71efbd..0754824f18c65363f7dba4d4c628a8e7cffdc137 100644 --- a/apps/gpu/tests/NumericalTests/Utilities/VirtualFluidSimulation/VirtualFluidSimulationImp.cpp +++ b/apps/gpu/tests/NumericalTests/Utilities/VirtualFluidSimulation/VirtualFluidSimulation.cpp @@ -1,4 +1,4 @@ -#include "VirtualFluidSimulationImp.h" +#include "VirtualFluidSimulation.h" #include "Utilities/NumericalTestSuite/NumericalTestSuite.h" #include "Utilities/Time/TimeTracking.h" @@ -10,7 +10,7 @@ #include <sstream> -void VirtualFluidSimulationImp::run() +void VirtualFluidSimulation::run() { numericalTestSuite->makeSimulationHeadOutput(); BoundaryConditionFactory bc_factory; @@ -24,47 +24,42 @@ void VirtualFluidSimulationImp::run() numericalTestSuite->startPostProcessing(); } -void VirtualFluidSimulationImp::setParameter(std::shared_ptr<Parameter> para) +void VirtualFluidSimulation::setParameter(std::shared_ptr<Parameter> para) { this->para = para; } -void VirtualFluidSimulationImp::setCudaMemoryManager(std::shared_ptr<CudaMemoryManager> cudaManager) +void VirtualFluidSimulation::setCudaMemoryManager(std::shared_ptr<CudaMemoryManager> cudaManager) { this->cudaManager = cudaManager; } -void VirtualFluidSimulationImp::setGridProvider(std::shared_ptr<GridProvider> grid) +void VirtualFluidSimulation::setGridProvider(std::shared_ptr<GridProvider> grid) { this->grid = grid; } -std::shared_ptr<VirtualFluidSimulationImp> VirtualFluidSimulationImp::getNewInstance() -{ - return std::shared_ptr<VirtualFluidSimulationImp>(new VirtualFluidSimulationImp()); -} - -void VirtualFluidSimulationImp::setDataWriter(std::shared_ptr<DataWriter> dataWriter) +void VirtualFluidSimulation::setDataWriter(std::shared_ptr<DataWriter> dataWriter) { this->dataWriter = dataWriter; } -void VirtualFluidSimulationImp::setNumericalTestSuite(std::shared_ptr<NumericalTestSuite> numericalTestSuite) +void VirtualFluidSimulation::setNumericalTestSuite(std::shared_ptr<NumericalTestSuite> numericalTestSuite) { this->numericalTestSuite = numericalTestSuite; } -void VirtualFluidSimulationImp::setTimeTracking(std::shared_ptr<TimeTracking> timeTracking) +void VirtualFluidSimulation::setTimeTracking(std::shared_ptr<TimeTracking> timeTracking) { this->timeTracking = timeTracking; } -void VirtualFluidSimulationImp::setKernelFactory(std::shared_ptr<KernelFactory> kernelFactory) +void VirtualFluidSimulation::setKernelFactory(std::shared_ptr<KernelFactory> kernelFactory) { this->kernelFactory = kernelFactory; } -void VirtualFluidSimulationImp::setPreProcessorFactory(std::shared_ptr<PreProcessorFactory> preProcessorFactory) +void VirtualFluidSimulation::setPreProcessorFactory(std::shared_ptr<PreProcessorFactory> preProcessorFactory) { this->preProcessorFactory = preProcessorFactory; } diff --git a/apps/gpu/tests/NumericalTests/Utilities/VirtualFluidSimulation/VirtualFluidSimulation.h b/apps/gpu/tests/NumericalTests/Utilities/VirtualFluidSimulation/VirtualFluidSimulation.h index 36e1eabd9af51a0e415da876faca8d38c691cbad..04253837f4bd3de43d67b279bd3adf1b08d02597 100644 --- a/apps/gpu/tests/NumericalTests/Utilities/VirtualFluidSimulation/VirtualFluidSimulation.h +++ b/apps/gpu/tests/NumericalTests/Utilities/VirtualFluidSimulation/VirtualFluidSimulation.h @@ -1,13 +1,46 @@ -#ifndef VIRTUAL_FLUID_SIMULATION_H -#define VIRTUAL_FLUID_SIMULATION_H +#ifndef VIRTUAL_FLUID_SIMULATION_IMP_H +#define VIRTUAL_FLUID_SIMULATION_IMP_H -#include "VirtualFluids_GPU/LBM/LB.h" +#include <memory> +#include <string> + +class CudaMemoryManager; +class InitialCondition; +class DataWriter; +class Parameter; +class GridProvider; +class KernelConfiguration; +class TestSimulation; +class TimeTracking; +class NumericalTestSuite; +class KernelFactory; +class PreProcessorFactory; class VirtualFluidSimulation { public: - virtual void run() = 0; + void run(); + + void setParameter(std::shared_ptr<Parameter> para); + void setCudaMemoryManager(std::shared_ptr<CudaMemoryManager> cudaManager); + void setGridProvider(std::shared_ptr<GridProvider> grid); + void setDataWriter(std::shared_ptr<DataWriter> dataWriter); + void setNumericalTestSuite(std::shared_ptr<NumericalTestSuite> numericalTestSuite); + void setTimeTracking(std::shared_ptr<TimeTracking> timeTracking); + + void setKernelFactory(std::shared_ptr<KernelFactory> kernelFactory); + void setPreProcessorFactory(std::shared_ptr<PreProcessorFactory> preProcessorFactory); + private: + std::shared_ptr<Parameter> para; + std::shared_ptr<CudaMemoryManager> cudaManager; + std::shared_ptr<InitialCondition> initialCondition; + std::shared_ptr<GridProvider> grid; + std::shared_ptr<DataWriter> dataWriter; + std::shared_ptr<NumericalTestSuite> numericalTestSuite; + std::shared_ptr<TimeTracking> timeTracking; + std::shared_ptr<KernelFactory> kernelFactory; + std::shared_ptr<PreProcessorFactory> preProcessorFactory; }; #endif \ No newline at end of file diff --git a/apps/gpu/tests/NumericalTests/Utilities/VirtualFluidSimulation/VirtualFluidSimulationImp.h b/apps/gpu/tests/NumericalTests/Utilities/VirtualFluidSimulation/VirtualFluidSimulationImp.h deleted file mode 100644 index 492459052e56c36345e5650415b2691b4c1b1ed8..0000000000000000000000000000000000000000 --- a/apps/gpu/tests/NumericalTests/Utilities/VirtualFluidSimulation/VirtualFluidSimulationImp.h +++ /dev/null @@ -1,53 +0,0 @@ -#ifndef VIRTUAL_FLUID_SIMULATION_IMP_H -#define VIRTUAL_FLUID_SIMULATION_IMP_H - -#include "VirtualFluidSimulation.h" - -#include <string> -#include <memory> - -class CudaMemoryManager; -class InitialCondition; -class DataWriter; -class Parameter; -class GridProvider; -class KernelConfiguration; -class TestSimulation; -class TimeTracking; -class NumericalTestSuite; -class KernelFactory; -class PreProcessorFactory; - -class VirtualFluidSimulationImp : public VirtualFluidSimulation -{ -public: - void run(); - - static std::shared_ptr<VirtualFluidSimulationImp> getNewInstance(); - - void setParameter(std::shared_ptr<Parameter> para); - void setCudaMemoryManager(std::shared_ptr<CudaMemoryManager> cudaManager); - void setGridProvider(std::shared_ptr<GridProvider> grid); - void setDataWriter(std::shared_ptr<DataWriter> dataWriter); - void setNumericalTestSuite(std::shared_ptr<NumericalTestSuite> numericalTestSuite); - void setTimeTracking(std::shared_ptr<TimeTracking> timeTracking); - - void setKernelFactory(std::shared_ptr<KernelFactory> kernelFactory); - void setPreProcessorFactory(std::shared_ptr<PreProcessorFactory> preProcessorFactory); - -protected: - VirtualFluidSimulationImp() {}; - -private: - std::shared_ptr<Parameter> para; - std::shared_ptr<CudaMemoryManager> cudaManager; - std::shared_ptr<InitialCondition> initialCondition; - std::shared_ptr<GridProvider> grid; - std::shared_ptr<DataWriter> dataWriter; - std::shared_ptr<NumericalTestSuite> numericalTestSuite; - std::shared_ptr<TimeTracking> timeTracking; - - std::shared_ptr<KernelFactory> kernelFactory; - std::shared_ptr<PreProcessorFactory> preProcessorFactory; -}; -#endif \ No newline at end of file diff --git a/apps/gpu/tests/NumericalTests/Utilities/VirtualFluidSimulationFactory/VirtualFluidSimulationFactory.cpp b/apps/gpu/tests/NumericalTests/Utilities/VirtualFluidSimulationFactory/VirtualFluidSimulationFactory.cpp new file mode 100644 index 0000000000000000000000000000000000000000..1714a1125a256255f084d3464f16095392a540ab --- /dev/null +++ b/apps/gpu/tests/NumericalTests/Utilities/VirtualFluidSimulationFactory/VirtualFluidSimulationFactory.cpp @@ -0,0 +1,146 @@ +#include "VirtualFluidSimulationFactory.h" + +#include "Utilities/InitialCondition/InitialCondition.h" +#include "Utilities/KernelConfiguration/KernelConfiguration.h" +#include "Utilities/NumericalTestGridReader/NumericalTestGridReader.h" +#include "Utilities/SimulationParameter/SimulationParameter.h" +#include "Utilities/TestSimulation/TestSimulation.h" +#include "Utilities/VirtualFluidSimulation/VirtualFluidSimulation.h" + +#include "VirtualFluids_GPU/GPU/CudaMemoryManager.h" +#include "VirtualFluids_GPU/Kernel/Utilities/KernelFactory/KernelFactoryImp.h" +#include "VirtualFluids_GPU/Parameter/Parameter.h" +#include "VirtualFluids_GPU/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.h" + +std::shared_ptr<Parameter> makeParameter(std::shared_ptr<SimulationParameter> simPara) +{ + auto para = std::make_shared<Parameter>(1, 0); + + para->setQuadricLimiters(0.01, 0.01, 0.01); + + para->setMaxDev(simPara->getDevices().size()); + para->setDevices(simPara->getDevices()); + + std::string _prefix = "cells"; + std::string gridPath = simPara->getGridPath() + "/"; + para->setFName(simPara->getFilePath() + "/" + _prefix); + para->setPrintFiles(true); + + para->setD3Qxx(27); + para->setMaxLevel(simPara->getNumberOfGridLevels()); + + para->setTimestepEnd(simPara->getEndTime()); + para->setTimestepOut(simPara->getTimeStepLength()); + para->setTStartOut(1); + + para->setViscosityLB(simPara->getViscosity()); + para->setVelocityLB(simPara->getMaxVelocity()); + para->setViscosityRatio(1.0); + para->setVelocityRatio(1.0); + para->setDensityRatio(1.0); + para->setFactorPressBC(100000.0); + + para->setgeoVec(gridPath + "geoVec.dat"); + para->setcoordX(gridPath + "coordX.dat"); + para->setcoordY(gridPath + "coordY.dat"); + para->setcoordZ(gridPath + "coordZ.dat"); + para->setneighborX(gridPath + "neighborX.dat"); + para->setneighborY(gridPath + "neighborY.dat"); + para->setneighborZ(gridPath + "neighborZ.dat"); + para->setneighborWSB(gridPath + "neighborWSB.dat"); + para->setgeomBoundaryBcQs(gridPath + "geomBoundaryQs.dat"); + para->setgeomBoundaryBcValues(gridPath + "geomBoundaryValues.dat"); + para->setinletBcQs(gridPath + "inletBoundaryQs.dat"); + para->setinletBcValues(gridPath + "inletBoundaryValues.dat"); + para->setoutletBcQs(gridPath + "outletBoundaryQs.dat"); + para->setoutletBcValues(gridPath + "outletBoundaryValues.dat"); + para->settopBcQs(gridPath + "topBoundaryQs.dat"); + para->settopBcValues(gridPath + "topBoundaryValues.dat"); + para->setbottomBcQs(gridPath + "bottomBoundaryQs.dat"); + para->setbottomBcValues(gridPath + "bottomBoundaryValues.dat"); + para->setfrontBcQs(gridPath + "frontBoundaryQs.dat"); + para->setfrontBcValues(gridPath + "frontBoundaryValues.dat"); + para->setbackBcQs(gridPath + "backBoundaryQs.dat"); + para->setbackBcValues(gridPath + "backBoundaryValues.dat"); + para->setnumberNodes(gridPath + "numberNodes.dat"); + para->setLBMvsSI(gridPath + "LBMvsSI.dat"); + para->setscaleCFC(gridPath + "scaleCFC.dat"); + para->setscaleCFF(gridPath + "scaleCFF.dat"); + para->setscaleFCC(gridPath + "scaleFCC.dat"); + para->setscaleFCF(gridPath + "scaleFCF.dat"); + para->setscaleOffsetCF(gridPath + "offsetVecCF.dat"); + para->setscaleOffsetFC(gridPath + "offsetVecFC.dat"); + para->setCalcParticles(false); + para->setDiffOn(false); + para->setDoCheckPoint(false); + para->setDoRestart(false); + para->setUseGeometryValues(false); + para->setCalc2ndOrderMoments(false); + para->setCalc3rdOrderMoments(false); + para->setCalcHighOrderMoments(false); + para->setReadGeo(false); + para->setCalcMedian(false); + para->setConcFile(false); + para->setUseMeasurePoints(false); + para->setUseWale(false); + para->setSimulatePorousMedia(false); + para->setForcing(0.0, 0.0, 0.0); + + std::vector<int> dist; + dist.resize(1); + dist[0] = 0; + para->setDistX(dist); + para->setDistY(dist); + para->setDistZ(dist); + + // TODO: Find out if we still need this + // para->setNeedInterface(std::vector<bool>{true, true, true, true, true, true}); + + para->setMainKernel(simPara->getKernelConfiguration()->getMainKernel()); + para->setMultiKernelOn(simPara->getKernelConfiguration()->getMultiKernelOn()); + para->setMultiKernelLevel(simPara->getKernelConfiguration()->getMultiKernelLevel()); + para->setMultiKernel(simPara->getKernelConfiguration()->getMultiKernel()); + + return para; +} + +std::shared_ptr<NumericalTestGridReader> makeGridReader(std::shared_ptr<InitialCondition> initialCondition, + std::shared_ptr<Parameter> para, + std::shared_ptr<CudaMemoryManager> cudaManager) +{ + return NumericalTestGridReader::getNewInstance(para, initialCondition, cudaManager); +} + +void initInitialConditions(std::shared_ptr<InitialCondition> initialCondition, std::shared_ptr<Parameter> para) +{ + initialCondition->setParameter(para); +} + +std::vector<std::shared_ptr<VirtualFluidSimulation>> +vf::gpu::tests::makeVirtualFluidSimulations(std::vector<std::shared_ptr<TestSimulation>> testSim) +{ + std::vector<std::shared_ptr<VirtualFluidSimulation>> vfSimulations; + + for (const auto currentSim : testSim) { + auto vfSim = std::make_shared<VirtualFluidSimulation>(); + auto simPara = currentSim->getSimulationParameter(); + auto para = makeParameter(simPara); + vfSim->setParameter(para); + currentSim->setParameter(para); + + auto cudaManager = std::make_shared<CudaMemoryManager>(para); + vfSim->setCudaMemoryManager(cudaManager); + + initInitialConditions(currentSim->getInitialCondition(), para); + auto grid = makeGridReader(currentSim->getInitialCondition(), para, cudaManager); + + vfSim->setGridProvider(grid); + vfSim->setDataWriter(currentSim->getDataWriter()); + vfSim->setNumericalTestSuite(currentSim); + vfSim->setTimeTracking(currentSim->getTimeTracking()); + + vfSimulations.push_back(vfSim); + } + + return vfSimulations; +} diff --git a/apps/gpu/tests/NumericalTests/Utilities/VirtualFluidSimulationFactory/VirtualFluidSimulationFactory.h b/apps/gpu/tests/NumericalTests/Utilities/VirtualFluidSimulationFactory/VirtualFluidSimulationFactory.h index 1abda69dc2770d060d3551781df4f0b677fa61b4..caeff55ae522a115ae83d03df3b91168d18cd443 100644 --- a/apps/gpu/tests/NumericalTests/Utilities/VirtualFluidSimulationFactory/VirtualFluidSimulationFactory.h +++ b/apps/gpu/tests/NumericalTests/Utilities/VirtualFluidSimulationFactory/VirtualFluidSimulationFactory.h @@ -1,15 +1,14 @@ -#ifndef VIRTUAL_FLUID_SIMULATION_FACTORY_H -#define VIRTUAL_FLUID_SIMULATION_FACTORY_H +#ifndef VIRTUAL_FLUID_SIMULATION_FACTORY_IMP_H +#define VIRTUAL_FLUID_SIMULATION_FACTORY_IMP_H -#include <memory> #include <vector> +#include <memory> +#include "Utilities/VirtualFluidSimulation/VirtualFluidSimulation.h" +#include "Utilities/TestSimulation/TestSimulation.h" -class VirtualFluidSimulation; -class TestSimulation; - -class VirtualFluidSimulationFactory +namespace vf::gpu::tests { -public: - virtual std::vector<std::shared_ptr<VirtualFluidSimulation> > makeVirtualFluidSimulations(std::vector<std::shared_ptr<TestSimulation> > testSim) = 0; -}; -#endif +std::vector<std::shared_ptr<VirtualFluidSimulation>> makeVirtualFluidSimulations(std::vector<std::shared_ptr<TestSimulation>> testSim); +} + +#endif \ No newline at end of file diff --git a/apps/gpu/tests/NumericalTests/Utilities/VirtualFluidSimulationFactory/VirtualFluidSimulationFactoryImp.cpp b/apps/gpu/tests/NumericalTests/Utilities/VirtualFluidSimulationFactory/VirtualFluidSimulationFactoryImp.cpp deleted file mode 100644 index 437849ab24898a014acc030b1ccc134b59dd50d6..0000000000000000000000000000000000000000 --- a/apps/gpu/tests/NumericalTests/Utilities/VirtualFluidSimulationFactory/VirtualFluidSimulationFactoryImp.cpp +++ /dev/null @@ -1,166 +0,0 @@ -#include "VirtualFluidSimulationFactoryImp.h" - -#include "Utilities/NumericalTestGridReader/NumericalTestGridReader.h" -#include "Utilities/InitialCondition/InitialCondition.h" -#include "Utilities/KernelConfiguration/KernelConfiguration.h" -#include "Utilities/TestSimulation/TestSimulation.h" -#include "Utilities/SimulationParameter/SimulationParameter.h" -#include "Utilities/VirtualFluidSimulation/VirtualFluidSimulationImp.h" - -#include "VirtualFluids_GPU/GPU/CudaMemoryManager.h" -#include "VirtualFluids_GPU/Parameter/Parameter.h" -#include "VirtualFluids_GPU/Kernel/Utilities/KernelFactory/KernelFactoryImp.h" -#include "VirtualFluids_GPU/PreProcessor/PreProcessorFactory/PreProcessorFactoryImp.h" - -std::shared_ptr<VirtualFluidSimulationFactory> VirtualFluidSimulationFactoryImp::getNewInstance() -{ - return std::shared_ptr<VirtualFluidSimulationFactory>(new VirtualFluidSimulationFactoryImp()); -} - -VirtualFluidSimulationFactoryImp::VirtualFluidSimulationFactoryImp() -{ - -} - -std::shared_ptr<Parameter> VirtualFluidSimulationFactoryImp::makeParameter(std::shared_ptr<SimulationParameter> simPara) -{ - auto para = std::make_shared<Parameter>(1, 0); - - para->setMaxDev(simPara->getDevices().size()); - para->setDevices(simPara->getDevices()); - - std::string _prefix = "cells"; - std::string gridPath = simPara->getGridPath() + "/"; - para->setPathAndFilename(simPara->getFilePath() + "/" + _prefix); - para->setPrintFiles(true); - - para->setD3Qxx(27); - para->setMaxLevel(simPara->getNumberOfGridLevels()); - - para->setTimestepEnd(simPara->getEndTime()); - para->setTimestepOut(simPara->getTimeStepLength()); -<<<<<<< HEAD - para->setTimestepStartOut(1); -======= - para->setTStartOut(1); ->>>>>>> Clean up unnecessary comments - - para->setViscosityLB(simPara->getViscosity()); - para->setVelocityLB(simPara->getMaxVelocity()); - para->setViscosityRatio(1.0); - para->setVelocityRatio(1.0); - para->setDensityRatio(1.0); - para->setFactorPressBC(100000.0); - - para->setgeoVec(gridPath + "geoVec.dat"); - para->setcoordX(gridPath + "coordX.dat"); - para->setcoordY(gridPath + "coordY.dat"); - para->setcoordZ(gridPath + "coordZ.dat"); - para->setneighborX(gridPath + "neighborX.dat"); - para->setneighborY(gridPath + "neighborY.dat"); - para->setneighborZ(gridPath + "neighborZ.dat"); - para->setneighborWSB(gridPath + "neighborWSB.dat"); - para->setgeomBoundaryBcQs(gridPath + "geomBoundaryQs.dat"); - para->setgeomBoundaryBcValues(gridPath + "geomBoundaryValues.dat"); - para->setinletBcQs(gridPath + "inletBoundaryQs.dat"); - para->setinletBcValues(gridPath + "inletBoundaryValues.dat"); - para->setoutletBcQs(gridPath + "outletBoundaryQs.dat"); - para->setoutletBcValues(gridPath + "outletBoundaryValues.dat"); - para->settopBcQs(gridPath + "topBoundaryQs.dat"); - para->settopBcValues(gridPath + "topBoundaryValues.dat"); - para->setbottomBcQs(gridPath + "bottomBoundaryQs.dat"); - para->setbottomBcValues(gridPath + "bottomBoundaryValues.dat"); - para->setfrontBcQs(gridPath + "frontBoundaryQs.dat"); - para->setfrontBcValues(gridPath + "frontBoundaryValues.dat"); - para->setbackBcQs(gridPath + "backBoundaryQs.dat"); - para->setbackBcValues(gridPath + "backBoundaryValues.dat"); - para->setnumberNodes(gridPath + "numberNodes.dat"); - para->setLBMvsSI(gridPath + "LBMvsSI.dat"); - para->setscaleCFC(gridPath + "scaleCFC.dat"); - para->setscaleCFF(gridPath + "scaleCFF.dat"); - para->setscaleFCC(gridPath + "scaleFCC.dat"); - para->setscaleFCF(gridPath + "scaleFCF.dat"); - para->setscaleOffsetCF(gridPath + "offsetVecCF.dat"); - para->setscaleOffsetFC(gridPath + "offsetVecFC.dat"); - para->setCalcParticles(false); - para->setDiffOn(false); - para->setDoCheckPoint(false); - para->setDoRestart(false); - para->setUseGeometryValues(false); - para->setCalc2ndOrderMoments(false); - para->setCalc3rdOrderMoments(false); - para->setCalcHighOrderMoments(false); - para->setReadGeo(false); - para->setCalcMedian(false); - para->setConcFile(false); - para->setUseMeasurePoints(false); - para->setUseWale(false); - para->setSimulatePorousMedia(false); - para->setForcing(0.0, 0.0, 0.0); - - std::vector<int> dist; - dist.resize(1); - dist[0] = 0; - para->setDistX(dist); - para->setDistY(dist); - para->setDistZ(dist); - - // TODO: Find out if we still need this - // para->setNeedInterface(std::vector<bool>{true, true, true, true, true, true}); - - para->setMainKernel(simPara->getKernelConfiguration()->getMainKernel()); - para->setMultiKernelOn(simPara->getKernelConfiguration()->getMultiKernelOn()); - para->setMultiKernelLevel(simPara->getKernelConfiguration()->getMultiKernelLevel()); - para->setMultiKernel(simPara->getKernelConfiguration()->getMultiKernel()); - - return para; -} - -std::shared_ptr<NumericalTestGridReader> VirtualFluidSimulationFactoryImp::makeGridReader(std::shared_ptr<InitialCondition> initialCondition, std::shared_ptr<Parameter> para, std::shared_ptr<CudaMemoryManager> cudaManager) -{ - return NumericalTestGridReader::getNewInstance(para, initialCondition, cudaManager); -} - -std::shared_ptr<CudaMemoryManager> VirtualFluidSimulationFactoryImp::makeCudaMemoryManager(std::shared_ptr<Parameter> para) -{ - return std::make_shared<CudaMemoryManager>(para); -} - -void VirtualFluidSimulationFactoryImp::initInitialConditions(std::shared_ptr<InitialCondition> initialCondition, std::shared_ptr<Parameter> para) -{ - initialCondition->setParameter(para); -} - -std::vector<std::shared_ptr<VirtualFluidSimulation> > VirtualFluidSimulationFactoryImp::makeVirtualFluidSimulations(std::vector<std::shared_ptr<TestSimulation> > testSim) -{ - std::vector<std::shared_ptr<VirtualFluidSimulation> > vfSimulations; - - auto kernelFactory = std::make_shared<KernelFactoryImp>(); - auto preProcessorFactory = std::make_shared<PreProcessorFactoryImp>(); - - for (size_t i = 0; i < testSim.size(); i++) { - std::shared_ptr<VirtualFluidSimulationImp> vfSim = VirtualFluidSimulationImp::getNewInstance(); - - std::shared_ptr<Parameter> para = makeParameter(testSim.at(i)->getSimulationParameter()); - vfSim->setParameter(para); - testSim.at(i)->setParameter(para); - - std::shared_ptr<CudaMemoryManager> cudaManager = makeCudaMemoryManager(para); - vfSim->setCudaMemoryManager(cudaManager); - - initInitialConditions(testSim.at(i)->getInitialCondition(), para); - std::shared_ptr<NumericalTestGridReader> grid = makeGridReader(testSim.at(i)->getInitialCondition(), para, cudaManager); - - vfSim->setGridProvider(grid); - vfSim->setDataWriter(testSim.at(i)->getDataWriter()); - vfSim->setNumericalTestSuite(testSim.at(i)); - vfSim->setTimeTracking(testSim.at(i)->getTimeTracking()); - - vfSim->setKernelFactory(kernelFactory); - vfSim->setPreProcessorFactory(preProcessorFactory); - - vfSimulations.push_back(vfSim); - } - - return vfSimulations; -} diff --git a/apps/gpu/tests/NumericalTests/Utilities/VirtualFluidSimulationFactory/VirtualFluidSimulationFactoryImp.h b/apps/gpu/tests/NumericalTests/Utilities/VirtualFluidSimulationFactory/VirtualFluidSimulationFactoryImp.h deleted file mode 100644 index 07e6b6ebb924a6b4ff940befd7ba8e266e9b160a..0000000000000000000000000000000000000000 --- a/apps/gpu/tests/NumericalTests/Utilities/VirtualFluidSimulationFactory/VirtualFluidSimulationFactoryImp.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef VIRTUAL_FLUID_SIMULATION_FACTORY_IMP_H -#define VIRTUAL_FLUID_SIMULATION_FACTORY_IMP_H - -#include "VirtualFluidSimulationFactory.h" - -class CudaMemoryManager; -class NumericalTestGridReader; -class InitialCondition; -class Parameter; -class SimulationParameter; - -class VirtualFluidSimulationFactoryImp: public VirtualFluidSimulationFactory -{ -public: - static std::shared_ptr<VirtualFluidSimulationFactory> getNewInstance(); - std::vector<std::shared_ptr<VirtualFluidSimulation> > makeVirtualFluidSimulations(std::vector<std::shared_ptr<TestSimulation> > testSim); - -protected: - VirtualFluidSimulationFactoryImp(); - - std::shared_ptr<Parameter> makeParameter(std::shared_ptr<SimulationParameter> simPara); - std::shared_ptr<NumericalTestGridReader> makeGridReader(std::shared_ptr<InitialCondition> initialCondition, std::shared_ptr<Parameter> para, std::shared_ptr<CudaMemoryManager> cudaManager); - std::shared_ptr<CudaMemoryManager> makeCudaMemoryManager(std::shared_ptr<Parameter> para); - void initInitialConditions(std::shared_ptr<InitialCondition> initialCondition, std::shared_ptr<Parameter> para); - -private: - -}; -#endif \ No newline at end of file diff --git a/apps/gpu/tests/NumericalTests/main.cpp b/apps/gpu/tests/NumericalTests/main.cpp index 703e8961497f3f1c93cb460fb9937f391e4ea0e9..81ced12e096131186d68184108f06b4bcaa92b5e 100644 --- a/apps/gpu/tests/NumericalTests/main.cpp +++ b/apps/gpu/tests/NumericalTests/main.cpp @@ -1,143 +1,144 @@ -#include <mpi.h> #include <gmock/gmock.h> +#include <mpi.h> #include "Utilities/ConfigFileReaderNT/ConfigFileReaderNT.h" #include "Utilities/LogFileQueue/LogFileQueue.h" #include "Utilities/NumericalTestFactory/NumericalTestFactoryImp.h" #include "Utilities/TestQueue/TestQueue.h" #include "Utilities/VirtualFluidSimulation/VirtualFluidSimulation.h" -#include "Utilities/VirtualFluidSimulationFactory/VirtualFluidSimulationFactoryImp.h" +#include "Utilities/VirtualFluidSimulationFactory/VirtualFluidSimulationFactory.h" -//validation +// validation +#include "Utilities/Calculator/FFTCalculator/FFTCalculator.h" #include <fstream> #include <iostream> -#include "Utilities/Calculator/FFTCalculator/FFTCalculator.h" static void validateTestSuite() { - const int timeSteps = 10; - const int begin = 11; - const int end = 20; - const int l0 = 32; - const double viscosity = 0.001; - std::string kernelName = "Cum"; - - std::vector<int> xLength{32,64,128,256,512}; - std::vector<int> zLength(xLength.size()); - std::vector<int> timeStepLength(xLength.size()); - for (int i = 0; i < xLength.size(); i++) { - zLength.at(i) = xLength.at(i) * 3 / 2; - timeStepLength.at(i) = (int)1000 * xLength.at(i)*xLength.at(i) / l0 / l0; - } - - std::vector<std::vector<std::ostringstream>> filePaths; - filePaths.resize(xLength.size()); - - for (int j = 0; j < xLength.size(); j++) { - filePaths.at(j).resize(timeSteps); - for (int i = begin; i <= end; i++) - filePaths.at(j).at(i - begin) << "C:/Users/Timon/Desktop/Auswertung_TGV_10hm3_X_CumD3Q27F3/Auswertung_TGV_10hm3_X_CumD3Q27F3/" << kernelName << "_" << xLength.at(j) << "_3_" << zLength.at(j) << "_AD_X_" << i*timeStepLength.at(j) << ".dat"; - - } - std::vector<std::vector<std::vector<double>>> dataForOneSimulationGroup; - - for (int j = 0; j < filePaths.size(); j++) { - std::vector<std::vector<double>> dataForOneSimulation; - dataForOneSimulation.resize(timeSteps); - for (int i = 0; i < filePaths.at(j).size(); i++) { - std::ifstream file; - file.open(filePaths.at(j).at(i).str()); - - if (file.is_open()) { - double data = 0.0; - while (file >> data) - dataForOneSimulation.at(i).push_back(data); - - file.close(); - } - else - int stop = 1; - } - dataForOneSimulationGroup.push_back(dataForOneSimulation); - } - - std::shared_ptr<FFTCalculator> calulator = FFTCalculator::getInstance(); - - std::vector<double> phiDifForOneSimGroup; - std::vector<double> nyDifForOneSimGroup; - for (int i = 0; i < dataForOneSimulationGroup.size(); i++) { - int timeStepLength = 1000 * xLength.at(i)*xLength.at(i) / l0 / l0; - - double phiDiff = calulator->calcPhiDiff(dataForOneSimulationGroup.at(i), false, xLength.at(i), zLength.at(i), timeStepLength); - double ny = calulator->calcNy(dataForOneSimulationGroup.at(i), false, xLength.at(i), zLength.at(i), timeStepLength); - double nyDiff = abs(ny - viscosity) / viscosity; - phiDifForOneSimGroup.push_back(phiDiff); - nyDifForOneSimGroup.push_back(nyDiff); - } - - - - std::fstream dataOutPhi; - std::string dataOutFilePathPhi = "C:/Users/Timon/Desktop/Auswertung_TGV_10hm3_X_CumD3Q27F3/NumericalTestAuswertung/" + kernelName + "_PhiDiff.dat"; - dataOutPhi.open(dataOutFilePathPhi, std::ios::out); - - std::fstream dataOutNy; - std::string dataOutFilePathNy = "C:/Users/Timon/Desktop/Auswertung_TGV_10hm3_X_CumD3Q27F3/NumericalTestAuswertung/" + kernelName + "_NyDiff.dat"; - dataOutNy.open(dataOutFilePathNy, std::ios::out); - - for (int i = 0; i < phiDifForOneSimGroup.size(); i++) { - dataOutPhi << std::fixed << std::setprecision(std::numeric_limits<double>::digits10 + 1); - dataOutPhi << phiDifForOneSimGroup.at(i); - dataOutNy << std::fixed << std::setprecision(std::numeric_limits<double>::digits10 + 1); - dataOutNy << nyDifForOneSimGroup.at(i); - - if (i < phiDifForOneSimGroup.size() - 1) { - dataOutPhi << std::endl; - dataOutNy << std::endl; - } - } - - dataOutPhi.close(); + const int timeSteps = 10; + const int begin = 11; + const int end = 20; + const int l0 = 32; + const double viscosity = 0.001; + std::string kernelName = "Cum"; + + std::vector<int> xLength{ 32, 64, 128, 256, 512 }; + std::vector<int> zLength(xLength.size()); + std::vector<int> timeStepLength(xLength.size()); + for (int i = 0; i < xLength.size(); i++) { + zLength.at(i) = xLength.at(i) * 3 / 2; + timeStepLength.at(i) = (int)1000 * xLength.at(i) * xLength.at(i) / l0 / l0; + } + + std::vector<std::vector<std::ostringstream>> filePaths; + filePaths.resize(xLength.size()); + + for (int j = 0; j < xLength.size(); j++) { + filePaths.at(j).resize(timeSteps); + for (int i = begin; i <= end; i++) + filePaths.at(j).at(i - begin) + << "C:/Users/Timon/Desktop/Auswertung_TGV_10hm3_X_CumD3Q27F3/Auswertung_TGV_10hm3_X_CumD3Q27F3/" + << kernelName << "_" << xLength.at(j) << "_3_" << zLength.at(j) << "_AD_X_" << i * timeStepLength.at(j) + << ".dat"; + } + std::vector<std::vector<std::vector<double>>> dataForOneSimulationGroup; + + for (int j = 0; j < filePaths.size(); j++) { + std::vector<std::vector<double>> dataForOneSimulation; + dataForOneSimulation.resize(timeSteps); + for (int i = 0; i < filePaths.at(j).size(); i++) { + std::ifstream file; + file.open(filePaths.at(j).at(i).str()); + + if (file.is_open()) { + double data = 0.0; + while (file >> data) + dataForOneSimulation.at(i).push_back(data); + + file.close(); + } else + int stop = 1; + } + dataForOneSimulationGroup.push_back(dataForOneSimulation); + } + + std::shared_ptr<FFTCalculator> calulator = FFTCalculator::getInstance(); + + std::vector<double> phiDifForOneSimGroup; + std::vector<double> nyDifForOneSimGroup; + for (int i = 0; i < dataForOneSimulationGroup.size(); i++) { + int timeStepLength = 1000 * xLength.at(i) * xLength.at(i) / l0 / l0; + + double phiDiff = calulator->calcPhiDiff(dataForOneSimulationGroup.at(i), false, xLength.at(i), zLength.at(i), + timeStepLength); + double ny = + calulator->calcNy(dataForOneSimulationGroup.at(i), false, xLength.at(i), zLength.at(i), timeStepLength); + double nyDiff = abs(ny - viscosity) / viscosity; + phiDifForOneSimGroup.push_back(phiDiff); + nyDifForOneSimGroup.push_back(nyDiff); + } + + std::fstream dataOutPhi; + std::string dataOutFilePathPhi = + "C:/Users/Timon/Desktop/Auswertung_TGV_10hm3_X_CumD3Q27F3/NumericalTestAuswertung/" + kernelName + + "_PhiDiff.dat"; + dataOutPhi.open(dataOutFilePathPhi, std::ios::out); + + std::fstream dataOutNy; + std::string dataOutFilePathNy = + "C:/Users/Timon/Desktop/Auswertung_TGV_10hm3_X_CumD3Q27F3/NumericalTestAuswertung/" + kernelName + + "_NyDiff.dat"; + dataOutNy.open(dataOutFilePathNy, std::ios::out); + + for (int i = 0; i < phiDifForOneSimGroup.size(); i++) { + dataOutPhi << std::fixed << std::setprecision(std::numeric_limits<double>::digits10 + 1); + dataOutPhi << phiDifForOneSimGroup.at(i); + dataOutNy << std::fixed << std::setprecision(std::numeric_limits<double>::digits10 + 1); + dataOutNy << nyDifForOneSimGroup.at(i); + + if (i < phiDifForOneSimGroup.size() - 1) { + dataOutPhi << std::endl; + dataOutNy << std::endl; + } + } + + dataOutPhi.close(); } - static bool startNumericalTests(const std::string &configFile) { - std::shared_ptr<ConfigFileReader> configReader = ConfigFileReader::getNewInstance(configFile); - configReader->readConfigFile(); - - std::shared_ptr<NumericalTestFactoryImp> numericalTestFactory = NumericalTestFactoryImp::getNewInstance(configReader->getConfigData()); + auto configData = vf::gpu::tests::readConfigFile(configFile); - std::vector<std::shared_ptr<TestSimulation> > testSim = numericalTestFactory->getTestSimulations(); - std::shared_ptr<TestQueue> testQueue = numericalTestFactory->getTestQueue(); - std::shared_ptr<LogFileQueue> logFileQueue = numericalTestFactory->getLogFileQueue(); + std::shared_ptr<NumericalTestFactoryImp> numericalTestFactory = NumericalTestFactoryImp::getNewInstance(configData); - std::shared_ptr<VirtualFluidSimulationFactory> factory = VirtualFluidSimulationFactoryImp::getNewInstance(); - std::vector<std::shared_ptr<VirtualFluidSimulation> > vfSimulations = factory->makeVirtualFluidSimulations(testSim); + std::vector<std::shared_ptr<TestSimulation>> testSim = numericalTestFactory->getTestSimulations(); + std::shared_ptr<TestQueue> testQueue = numericalTestFactory->getTestQueue(); + std::shared_ptr<LogFileQueue> logFileQueue = numericalTestFactory->getLogFileQueue(); - for (int i = 0; i < vfSimulations.size(); i++) - vfSimulations.at(i)->run(); + auto vfSimulations = vf::gpu::tests::makeVirtualFluidSimulations(testSim); + for (const auto sim : vfSimulations) + sim->run(); - testQueue->makeFinalOutput(); - logFileQueue->writeLogFiles(); + testQueue->makeFinalOutput(); + logFileQueue->writeLogFiles(); - return testQueue->getNumberOfFailedTests() > 0; + return testQueue->getNumberOfFailedTests() > 0; } int main(int argc, char **argv) { - MPI_Init(&argc, &argv); + MPI_Init(&argc, &argv); - //validateTestSuite(); + // validateTestSuite(); - bool tests_passed{false}; + bool tests_passed{ false }; - if (argc > 1) + if (argc > 1) tests_passed = startNumericalTests(argv[1]); - else - std::cout << "Configuration file must be set!: lbmgm <config file>" << std::endl << std::flush; + else + std::cout << "Configuration file must be set!: lbmgm <config file>" << std::endl << std::flush; MPI_Finalize(); - return tests_passed; + return tests_passed; }