diff --git a/src/gpu/VirtualFluids_GPU/LBM/LB.h b/src/gpu/VirtualFluids_GPU/LBM/LB.h index 52f932c7b751b0d31e9bf733a4f3b5c439a6755f..1a2a06d299d28a27a4a373c6d6357efe1cfc0f7e 100644 --- a/src/gpu/VirtualFluids_GPU/LBM/LB.h +++ b/src/gpu/VirtualFluids_GPU/LBM/LB.h @@ -44,31 +44,42 @@ #define INTERFACE_T 4 #define INTERFACE_B 5 -////////////////////////////////////////////////////////////////////////// -// precision (change between double and float) -// + #include "Core/DataTypes.h" -////////////////////////////////////////////////////////////////////////// #include <string> #include <vector> -// Initial condition -typedef struct InitCond{ + +struct InitCondition +{ real Re; - real factorPressBC; - real Diffusivity, Temp, TempBC; - real RealX, RealY; - int numprocs, myid, maxdev; - unsigned int tend, tout, tStartOut, tCalcMedStart, tCalcMedEnd, tDoCheckPoint, tDoRestart; - unsigned int PressInID, PressOutID; - unsigned int PressInZ, PressOutZ; - std::vector<uint> devices; + real factorPressBC {1.0}; + real Diffusivity {0.001}; + real Temp {0.0}; + real TempBC {1.0}; + real RealX {1.0}; + real RealY {1.0}; + int numprocs, myid; + int maxdev {1}; + uint tDoCheckPoint {0}; + uint tDoRestart {0}; + uint tCalcMedStart {0}; + uint tCalcMedEnd {10}; + uint tend {10}; + uint tout {1}; + uint tStartOut {0}; + uint PressInID {0}; + uint PressOutID {0}; + uint PressInZ {1}; + uint PressOutZ {2}; + std::vector<uint> devices {1, 0}; // one device with ID = 0 std::vector<int> GridX, GridY, GridZ, DistX, DistY, DistZ; std::vector<real> scaleLBMtoSI, translateLBMtoSI; std::vector<real> minCoordX, minCoordY, minCoordZ, maxCoordX, maxCoordY, maxCoordZ; std::vector<bool> NeedInterface; - std::string fname, oPath, oPrefix; + std::string fname, oPath; + std::string oPrefix {"MyFile"}; std::string geometryFileC, geometryFileM, geometryFileF; std::string kFull, geoFull, geoVec, coordX, coordY, coordZ, neighborX, neighborY, neighborZ, neighborWSB, scaleCFC, scaleCFF, scaleFCC, scaleFCF, scaleOffsetCF, scaleOffsetFC; std::string noSlipBcPos, noSlipBcQs, noSlipBcValue; @@ -89,16 +100,31 @@ typedef struct InitCond{ std::string cpTop, cpBottom, cpBottom2; std::string concentration, streetVelocity; std::string geomNormalX, geomNormalY, geomNormalZ, inflowNormalX, inflowNormalY, inflowNormalZ, outflowNormalX, outflowNormalY, outflowNormalZ; - unsigned int timeStepForMP; - real clockCycleForMP; - real vis, vis_ratio; - real u0, u0_ratio; - real delta_rho, delta_press; - bool printFiles, readGeo, doRestart, doCheckPoint, isGeo, isProp, isCp, calcMedian, GeometryValues, isConc, is2ndOrderMoments, is3rdOrderMoments, isHighOrderMoments, isWale, isMeasurePoints, isInitNeq; + uint timeStepForMP {10}; + real clockCycleForMP {1.0}; + real vis {0.001}; + real vis_ratio {1.0}; + real u0 {0.01}; + real u0_ratio {1.0}; + real delta_rho {0.0}; + real delta_press {1.0}; + bool printFiles {false}; + bool doRestart {false}; + bool doCheckPoint {false}; + bool readGeo, isGeo, isProp, isCp; + bool GeometryValues {false}; + bool is2ndOrderMoments {false}; + bool is3rdOrderMoments {false}; + bool isHighOrderMoments {false}; + bool calcMedian {false}; + bool isConc {false}; + bool isWale {false}; + bool isMeasurePoints {false}; + bool isInitNeq {false}; bool isGeoNormal, isInflowNormal, isOutflowNormal; - bool simulatePorousMedia; - bool streetVelocityFile; -} InitCondition; + bool simulatePorousMedia {false}; + bool streetVelocityFile {false}; +}; //Interface Cells typedef struct ICellCF{ diff --git a/src/gpu/VirtualFluids_GPU/Parameter/Parameter.cpp b/src/gpu/VirtualFluids_GPU/Parameter/Parameter.cpp index 7f95a01edbf982e2b0fd0ab49ce8d5e634f5517f..919204ff73762b400b3b90c067cd6a5eae3d9d8e 100644 --- a/src/gpu/VirtualFluids_GPU/Parameter/Parameter.cpp +++ b/src/gpu/VirtualFluids_GPU/Parameter/Parameter.cpp @@ -45,13 +45,9 @@ Parameter::Parameter(const vf::basics::ConfigurationFile& configData, { if (configData.contains("NumberOfDevices")) this->setMaxDev(configData.getValue<int>("NumberOfDevices")); - else - this->setMaxDev(1); ////////////////////////////////////////////////////////////////////////// if (configData.contains("Devices")) this->setDevices(configData.getVector<uint>("Devices")); - else - this->setDevices(std::vector<uint>{(uint)0}); ////////////////////////////////////////////////////////////////////////// if (configData.contains("Path")) this->setOutputPath(configData.getValue<std::string>("Path")); @@ -60,515 +56,381 @@ Parameter::Parameter(const vf::basics::ConfigurationFile& configData, ////////////////////////////////////////////////////////////////////////// if (configData.contains("Prefix")) this->setOutputPrefix(configData.getValue<std::string>("Prefix")); - else - this->setOutputPrefix("MyFile"); ////////////////////////////////////////////////////////////////////////// if (configData.contains("WriteGrid")) this->setPrintFiles(configData.getValue<bool>("WriteGrid")); - else - this->setPrintFiles(false); ////////////////////////////////////////////////////////////////////////// - // if (configData->isGeometryValuesInConfigFile()) - // this->setGeometryValues(configData->getGeometryValues()); - // else - // this->setGeometryValues(false); - // ////////////////////////////////////////////////////////////////////////// - // if (configData->isCalc2ndOrderMomentsInConfigFile()) - // this->setCalc2ndOrderMoments(configData->getCalc2ndOrderMoments()); - // else - // this->setCalc2ndOrderMoments(false); - // ////////////////////////////////////////////////////////////////////////// - // if (configData->isCalc3rdOrderMomentsInConfigFile()) - // this->setCalc3rdOrderMoments(configData->getCalc3rdOrderMoments()); - // else - // this->setCalc3rdOrderMoments(false); - // ////////////////////////////////////////////////////////////////////////// - // if (configData->isCalcHighOrderMomentsInConfigFile()) - // this->setCalcHighOrderMoments(configData->getCalcHighOrderMoments()); - // else - // this->setCalcHighOrderMoments(false); - // ////////////////////////////////////////////////////////////////////////// - // if (configData->isCalcMedianInConfigFile()) - // this->setCalcMedian(configData->getCalcMedian()); - // else - // this->setCalcMedian(false); - // ////////////////////////////////////////////////////////////////////////// - // if (configData->isCalcDragLiftInConfigFile()) - // this->setCalcDragLift(configData->getCalcDragLift()); - // else - // this->setCalcDragLift(false); - // ////////////////////////////////////////////////////////////////////////// - // if (configData->isCalcCpInConfigFile()) - // this->setCalcCp(configData->getCalcCp()); - // else - // this->setCalcCp(false); - // ////////////////////////////////////////////////////////////////////////// - // if (configData->isWriteVeloASCIIfilesInConfigFile()) - // this->setWriteVeloASCIIfiles(configData->getWriteVeloASCIIfiles()); - // else - // this->setWriteVeloASCIIfiles(false); - // ////////////////////////////////////////////////////////////////////////// - // if (configData->isCalcPlaneConcInConfigFile()) - // this->setCalcPlaneConc(configData->getCalcPlaneConc()); - // else - // this->setCalcPlaneConc(false); - // ////////////////////////////////////////////////////////////////////////// - // if (configData->isConcFileInConfigFile()) - // this->setConcFile(configData->getConcFile()); - // else - // this->setConcFile(false); - // ////////////////////////////////////////////////////////////////////////// - // if (configData->isStreetVelocityFileInConfigFile()) - // this->setStreetVelocityFile(configData->getStreetVelocityFile()); - // else - // this->setStreetVelocityFile(false); - // ////////////////////////////////////////////////////////////////////////// - // if (configData->isUseMeasurePointsInConfigFile()) - // this->setUseMeasurePoints(configData->getUseMeasurePoints()); - // else - // this->setUseMeasurePoints(false); - // ////////////////////////////////////////////////////////////////////////// - // if (configData->isUseWaleInConfigFile()) - // this->setUseWale(configData->getUseWale()); - // else - // this->setUseWale(false); - // ////////////////////////////////////////////////////////////////////////// - // if (configData->isUseInitNeqInConfigFile()) - // this->setUseInitNeq(configData->getUseInitNeq()); - // else - // this->setUseInitNeq(false); - // ////////////////////////////////////////////////////////////////////////// - // if (configData->isSimulatePorousMediaInConfigFile()) - // this->setSimulatePorousMedia(configData->getSimulatePorousMedia()); - // else - // this->setSimulatePorousMedia(false); - // ////////////////////////////////////////////////////////////////////////// - // if (configData->isD3QxxInConfigFile()) - // this->setD3Qxx(configData->getD3Qxx()); - // else - // this->setD3Qxx((int)27); - // ////////////////////////////////////////////////////////////////////////// - // if (configData->isTEndInConfigFile()) - // this->setTEnd(configData->getTEnd()); - // else - // this->setTEnd((uint)10); - // ////////////////////////////////////////////////////////////////////////// - // if (configData->isTOutInConfigFile()) - // this->setTOut(configData->getTOut()); - // else - // this->setTOut((uint)1); - // ////////////////////////////////////////////////////////////////////////// - // if (configData->isTStartOutInConfigFile()) - // this->setTStartOut(configData->getTStartOut()); - // else - // this->setTStartOut((uint)0); - // ////////////////////////////////////////////////////////////////////////// - // if (configData->isTimeCalcMedStartInConfigFile()) - // this->setTimeCalcMedStart(configData->getTimeCalcMedStart()); - // else - // this->setTimeCalcMedStart((int)0); - // ////////////////////////////////////////////////////////////////////////// - // if (configData->isTimeCalcMedEndInConfigFile()) - // this->setTimeCalcMedEnd(configData->getTimeCalcMedEnd()); - // else - // this->setTimeCalcMedEnd((int)10); - // ////////////////////////////////////////////////////////////////////////// - // if (configData->isPressInIDInConfigFile()) - // this->setPressInID(configData->getPressInID()); - // else - // this->setPressInID((uint)0); - // ////////////////////////////////////////////////////////////////////////// - // if (configData->isPressOutIDInConfigFile()) - // this->setPressOutID(configData->getPressOutID()); - // else - // this->setPressOutID((uint)0); - // ////////////////////////////////////////////////////////////////////////// - // if (configData->isPressInZInConfigFile()) - // this->setPressInZ(configData->getPressInZ()); - // else - // this->setPressInZ((uint)1); - // ////////////////////////////////////////////////////////////////////////// - // if (configData->isPressOutZInConfigFile()) - // this->setPressOutZ(configData->getPressOutZ()); - // else - // this->setPressOutZ((uint)2); + if (configData.contains("GeometryValues")) + this->setGeometryValues(configData.getValue<bool>("GeometryValues")); + ////////////////////////////////////////////////////////////////////////// + if (configData.contains("calc2ndOrderMoments")) + this->setCalc2ndOrderMoments(configData.getValue<bool>("calc2ndOrderMoments")); + ////////////////////////////////////////////////////////////////////////// + if (configData.contains("calc3rdOrderMoments")) + this->setCalc3rdOrderMoments(configData.getValue<bool>("calc3rdOrderMoments")); + ////////////////////////////////////////////////////////////////////////// + if (configData.contains("calcHigherOrderMoments")) + this->setCalcHighOrderMoments(configData.getValue<bool>("calcHigherOrderMoments")); + ////////////////////////////////////////////////////////////////////////// + if (configData.contains("calcMedian")) + this->setCalcMedian(configData.getValue<bool>("calcMedian")); + ////////////////////////////////////////////////////////////////////////// + if (configData.contains("calcCp")) + this->calcCp = configData.getValue<bool>("calcCp"); + ////////////////////////////////////////////////////////////////////////// + if (configData.contains("calcDrafLift")) + this->calcDragLift = configData.getValue<bool>("calcDrafLift"); + ////////////////////////////////////////////////////////////////////////// + if (configData.contains("writeVeloASCIIfiles")) + this->writeVeloASCII = configData.getValue<bool>("writeVeloASCIIfiles"); + ////////////////////////////////////////////////////////////////////////// + if (configData.contains("calcPlaneConc")) + this->calcPlaneConc = configData.getValue<bool>("calcPlaneConc"); + ////////////////////////////////////////////////////////////////////////// + if (configData.contains("UseConcFile")) + this->setConcFile(configData.getValue<bool>("UseConcFile")); + ////////////////////////////////////////////////////////////////////////// + if (configData.contains("UseStreetVelocityFile")) + this->setStreetVelocityFile(configData.getValue<bool>("UseStreetVelocityFile")); + ////////////////////////////////////////////////////////////////////////// + if (configData.contains("UseMeasurePoints")) + this->setUseMeasurePoints(configData.getValue<bool>("UseMeasurePoints")); + ////////////////////////////////////////////////////////////////////////// + if (configData.contains("UseWale")) + this->setUseWale(configData.getValue<bool>("UseWale")); + ////////////////////////////////////////////////////////////////////////// + if (configData.contains("UseInitNeq")) + this->setUseInitNeq(configData.getValue<bool>("UseInitNeq")); + ////////////////////////////////////////////////////////////////////////// + if (configData.contains("SimulatePorousMedia")) + this->setSimulatePorousMedia(configData.getValue<bool>("SimulatePorousMedia")); + ////////////////////////////////////////////////////////////////////////// + if (configData.contains("D3Qxx")) + this->setD3Qxx(configData.getValue<int>("D3Qxx")); + ////////////////////////////////////////////////////////////////////////// + if (configData.contains("TimeEnd")) + this->setTEnd(configData.getValue<int>("TimeEnd")); + ////////////////////////////////////////////////////////////////////////// + if (configData.contains("TimeOut")) + this->setTOut(configData.getValue<int>("TimeOut")); + ////////////////////////////////////////////////////////////////////////// + if (configData.contains("TimeStartOut")) + this->setTStartOut(configData.getValue<int>("TimeStartOut")); + ////////////////////////////////////////////////////////////////////////// + if (configData.contains("TimeStartCalcMedian")) + this->setTimeCalcMedStart(configData.getValue<int>("TimeStartCalcMedian")); + ////////////////////////////////////////////////////////////////////////// + if (configData.contains("TimeEndCalcMedian")) + this->setTimeCalcMedEnd(configData.getValue<int>("TimeEndCalcMedian")); + ////////////////////////////////////////////////////////////////////////// + if (configData.contains("PressInID")) + this->setTOut(configData.getValue<int>("PressInID")); + ////////////////////////////////////////////////////////////////////////// + if (configData.contains("PressOutID")) + this->setTStartOut(configData.getValue<int>("PressOutID")); + ////////////////////////////////////////////////////////////////////////// + if (configData.contains("PressInZ")) + this->setTimeCalcMedStart(configData.getValue<int>("PressInZ")); + ////////////////////////////////////////////////////////////////////////// + if (configData.contains("PressOutZ")) + this->setTimeCalcMedEnd(configData.getValue<int>("PressOutZ")); + // ////////////////////////////////////////////////////////////////////////// // //second component - // if (configData->isDiffOnInConfigFile()) - // this->setDiffOn(configData->getDiffOn()); - // else - // this->setDiffOn(false); - - // if (configData->isDiffModInConfigFile()) - // this->setDiffMod(configData->getDiffMod()); - // else - // this->setDiffMod((int)27); - - // if (configData->isDiffusivityInConfigFile()) - // this->setDiffusivity(configData->getDiffusivity()); - // else - // this->setDiffusivity((real)0.001); - - // if (configData->isTemperatureInitInConfigFile()) - // this->setTemperatureInit(configData->getTemperatureInit()); - // else - // this->setTemperatureInit((real)0.0); - - // if (configData->isTemperatureBCInConfigFile()) - // this->setTemperatureBC(configData->getTemperatureBC()); - // else - // this->setTemperatureBC((real)1.0); - // ////////////////////////////////////////////////////////////////////////// - // if (configData->isViscosityInConfigFile()) - // this->setViscosity(configData->getViscosity()); - // else - // this->setViscosity((real)0.001); - // ////////////////////////////////////////////////////////////////////////// - // if (configData->isVelocityInConfigFile()) - // this->setVelocity(configData->getVelocity()); - // else - // this->setVelocity((real)0.01); - // ////////////////////////////////////////////////////////////////////////// - // if (configData->isViscosityRatioInConfigFile()) - // this->setViscosityRatio(configData->getViscosityRatio()); - // else - // this->setViscosityRatio((real)1.0); - // ////////////////////////////////////////////////////////////////////////// - // if (configData->isVelocityRatioInConfigFile()) - // this->setVelocityRatio(configData->getVelocityRatio()); - // else - // this->setVelocityRatio((real)1.0); - // ////////////////////////////////////////////////////////////////////////// - // if (configData->isDensityRatioInConfigFile()) - // this->setDensityRatio(configData->getDensityRatio()); - // else - // this->setDensityRatio((real)1.0); - // ////////////////////////////////////////////////////////////////////////// - // if (configData->isPressRatioInConfigFile()) - // this->setPressRatio(configData->getPressRatio()); - // else - // this->setPressRatio((real)1.0); - // ////////////////////////////////////////////////////////////////////////// - // if (configData->isRealXInConfigFile()) - // this->setRealX(configData->getRealX()); - // else - // this->setRealX((real)1.0); - // ////////////////////////////////////////////////////////////////////////// - // if (configData->isRealYInConfigFile()) - // this->setRealY(configData->getRealY()); - // else - // this->setRealY((real)1.0); + + ////////////////////////////////////////////////////////////////////////// + if (configData.contains("DiffOn")) + this->setDiffOn(configData.getValue<bool>("DiffOn")); + ////////////////////////////////////////////////////////////////////////// + if (configData.contains("DiffMod")) + this->setDiffMod(configData.getValue<int>("DiffMod")); + ////////////////////////////////////////////////////////////////////////// + if (configData.contains("Diffusivity")) + this->setDiffusivity(configData.getValue<real>("Diffusivity")); + ////////////////////////////////////////////////////////////////////////// + if (configData.contains("Temp")) + this->setTemperatureInit(configData.getValue<real>("Temp")); + ////////////////////////////////////////////////////////////////////////// + if (configData.contains("TempBC")) + this->setTemperatureBC(configData.getValue<real>("TempBC")); + + + ////////////////////////////////////////////////////////////////////////// + if (configData.contains("Viscosity_LB")) + this->setViscosity(configData.getValue<real>("Viscosity_LB")); + ////////////////////////////////////////////////////////////////////////// + if (configData.contains("Velocity_LB")) + this->setVelocity(configData.getValue<real>("Velocity_LB")); + ////////////////////////////////////////////////////////////////////////// + if (configData.contains("Viscosity_Ratio_World_to_LB")) + this->setViscosityRatio(configData.getValue<real>("Viscosity_Ratio_World_to_LB")); + ////////////////////////////////////////////////////////////////////////// + if (configData.contains("Velocity_Ratio_World_to_LB")) + this->setVelocityRatio(configData.getValue<real>("Velocity_Ratio_World_to_LB")); // ////////////////////////////////////////////////////////////////////////// - // if (configData->isFactorPressBCInConfigFile()) - // this->setFactorPressBC(configData->getFactorPressBC()); - // else - // this->setFactorPressBC((real)1.0); + if (configData.contains("Density_Ratio_World_to_LB")) + this->setDensityRatio(configData.getValue<real>("Density_Ratio_World_to_LB")); + + if (configData.contains("Delta_Press")) + this->setPressRatio(configData.getValue<real>("Delta_Press")); + + ////////////////////////////////////////////////////////////////////////// + if (configData.contains("SliceRealX")) + this->setRealX(configData.getValue<real>("SliceRealX")); + ////////////////////////////////////////////////////////////////////////// + if (configData.contains("SliceRealY")) + this->setRealY(configData.getValue<real>("SliceRealY")); + ////////////////////////////////////////////////////////////////////////// + if (configData.contains("FactorPressBC")) + this->setFactorPressBC(configData.getValue<real>("FactorPressBC")); // ////////////////////////////////////////////////////////////////////////// // //read Geometry (STL) - // if (configData->isReadGeoInConfigFile()) - // this->setReadGeo(configData->getReadGeo()); - // else - // this->setReadGeo(false); - - // if (configData->isGeometryFileCInConfigFile()) - // this->setGeometryFileC(configData->getGeometryFileC()); - // else if (this->getReadGeo()) - // { - // std::cout << "GeometryFileC has to be defined!" << std::endl; - // exit(1); - // } - // else - // this->setGeometryFileC(""); - - // if (configData->isGeometryFileMInConfigFile()) - // this->setGeometryFileM(configData->getGeometryFileM()); - // else if (this->getReadGeo()) - // { - // std::cout << "GeometryFileM has to be defined!" << std::endl; - // exit(1); - // } - // else - // this->setGeometryFileM(""); - - // if (configData->isGeometryFileFInConfigFile()) - // this->setGeometryFileF(configData->getGeometryFileF()); - // else if (this->getReadGeo()) - // { - // std::cout << "GeometryFileF has to be defined!" << std::endl; - // exit(1); - // } - // else - // this->setGeometryFileF(""); - // ////////////////////////////////////////////////////////////////////////// - // if (configData->isClockCycleForMPInConfigFile()) - // this->setclockCycleForMP(configData->getClockCycleForMP()); - // else - // this->setclockCycleForMP((real)1.0); - - // if (configData->isTimestepForMPInConfigFile()) - // this->settimestepForMP(configData->getTimestepForMP()); - // else - // this->settimestepForMP((uint)10); - // ////////////////////////////////////////////////////////////////////////// - // std::string gridPath = ""; - // if (configData->isGridPathInConfigFile()) - // gridPath = configData->getGridPath(); - // else - // { - // std::cout << "GridPath has to be defined!" << std::endl; - // exit(1); - // } - - // if (this->getNumprocs() == 1) - // gridPath += "/"; - // else - // gridPath += "/" + StringUtil::toString(this->getMyID()) + "/"; - // ////////////////////////////////////////////////////////////////////////// - // this->setFName(this->getOutputPath() + "/" + this->getOutputPrefix()); - // ////////////////////////////////////////////////////////////////////////// - // this->setgeoVec( gridPath + "geoVec.dat"); - // this->setcoordX( gridPath + "coordX.dat"); - // this->setcoordY( gridPath + "coordY.dat"); - // this->setcoordZ( gridPath + "coordZ.dat"); - // this->setneighborX( gridPath + "neighborX.dat"); - // this->setneighborY( gridPath + "neighborY.dat"); - // this->setneighborZ( gridPath + "neighborZ.dat"); - // this->setneighborWSB( gridPath + "neighborWSB.dat"); - // this->setscaleCFC( gridPath + "scaleCFC.dat"); - // this->setscaleCFF( gridPath + "scaleCFF.dat"); - // this->setscaleFCC( gridPath + "scaleFCC.dat"); - // this->setscaleFCF( gridPath + "scaleFCF.dat"); - // this->setscaleOffsetCF( gridPath + "offsetVecCF.dat"); - // this->setscaleOffsetFC( gridPath + "offsetVecFC.dat"); - // this->setgeomBoundaryBcQs( gridPath + "geomBoundaryQs.dat"); - // this->setgeomBoundaryBcValues( gridPath + "geomBoundaryValues.dat"); - // this->setinletBcQs( gridPath + "inletBoundaryQs.dat"); - // this->setinletBcValues( gridPath + "inletBoundaryValues.dat"); - // this->setoutletBcQs( gridPath + "outletBoundaryQs.dat"); - // this->setoutletBcValues( gridPath + "outletBoundaryValues.dat"); - // this->settopBcQs( gridPath + "topBoundaryQs.dat"); - // this->settopBcValues( gridPath + "topBoundaryValues.dat"); - // this->setbottomBcQs( gridPath + "bottomBoundaryQs.dat"); - // this->setbottomBcValues( gridPath + "bottomBoundaryValues.dat"); - // this->setfrontBcQs( gridPath + "frontBoundaryQs.dat"); - // this->setfrontBcValues( gridPath + "frontBoundaryValues.dat"); - // this->setbackBcQs( gridPath + "backBoundaryQs.dat"); - // this->setbackBcValues( gridPath + "backBoundaryValues.dat"); - // this->setnumberNodes( gridPath + "numberNodes.dat"); - // this->setLBMvsSI( gridPath + "LBMvsSI.dat"); - // this->setmeasurePoints( gridPath + "measurePoints.dat"); - // this->setpropellerValues( gridPath + "propellerValues.dat"); - // this->setcpTop( gridPath + "cpTop.dat"); - // this->setcpBottom( gridPath + "cpBottom.dat"); - // this->setcpBottom2( gridPath + "cpBottom2.dat"); - // this->setConcentration( gridPath + "conc.dat"); - // this->setStreetVelocity( gridPath + "streetVector.dat"); - // ////////////////////////////////////////////////////////////////////////// - // //Normals - Geometry - // this->setgeomBoundaryNormalX(gridPath + "geomBoundaryNormalX.dat"); - // this->setgeomBoundaryNormalY(gridPath + "geomBoundaryNormalY.dat"); - // this->setgeomBoundaryNormalZ(gridPath + "geomBoundaryNormalZ.dat"); - // //Normals - Inlet - // this->setInflowBoundaryNormalX(gridPath + "inletBoundaryNormalX.dat"); - // this->setInflowBoundaryNormalY(gridPath + "inletBoundaryNormalY.dat"); - // this->setInflowBoundaryNormalZ(gridPath + "inletBoundaryNormalZ.dat"); - // //Normals - Outlet - // this->setOutflowBoundaryNormalX(gridPath + "outletBoundaryNormalX.dat"); - // this->setOutflowBoundaryNormalY(gridPath + "outletBoundaryNormalY.dat"); - // this->setOutflowBoundaryNormalZ(gridPath + "outletBoundaryNormalZ.dat"); + if (configData.contains("ReadGeometry")) + this->setReadGeo(configData.getValue<bool>("ReadGeometry")); + + + if (configData.contains("GeometryC")) + this->setGeometryFileC(configData.getValue<std::string>("GeometryC")); + else if (this->getReadGeo()) + throw std::runtime_error("readGeo is true, GeometryC has to be set as well!"); + + if (configData.contains("GeometryM")) + this->setGeometryFileM(configData.getValue<std::string>("GeometryM")); + else if (this->getReadGeo()) + throw std::runtime_error("readGeo is true, GeometryM has to be set as well!"); + + if (configData.contains("GeometryF")) + this->setGeometryFileF(configData.getValue<std::string>("GeometryF")); + else if (this->getReadGeo()) + throw std::runtime_error("readGeo is true, GeometryF has to be set as well!"); + + + ////////////////////////////////////////////////////////////////////////// + if (configData.contains("measureClockCycle")) + this->setclockCycleForMP(configData.getValue<real>("measureClockCycle")); + + if (configData.contains("measureTimestep")) + this->settimestepForMP(configData.getValue<uint>("measureTimestep")); + + ////////////////////////////////////////////////////////////////////////// + + std::string gridPath {""}; + if (configData.contains("GridPath")) + gridPath = configData.getValue<std::string>("GridPath"); + else + throw std::runtime_error("GridPath has to be defined in config file!"); + + if (this->getNumprocs() == 1) + gridPath += "/"; + else + gridPath += "/" + StringUtil::toString(this->getMyID()) + "/"; + // ////////////////////////////////////////////////////////////////////////// + this->setFName(this->getOutputPath() + "/" + this->getOutputPrefix()); + ////////////////////////////////////////////////////////////////////////// + this->setgeoVec( gridPath + "geoVec.dat"); + this->setcoordX( gridPath + "coordX.dat"); + this->setcoordY( gridPath + "coordY.dat"); + this->setcoordZ( gridPath + "coordZ.dat"); + this->setneighborX( gridPath + "neighborX.dat"); + this->setneighborY( gridPath + "neighborY.dat"); + this->setneighborZ( gridPath + "neighborZ.dat"); + this->setneighborWSB( gridPath + "neighborWSB.dat"); + this->setscaleCFC( gridPath + "scaleCFC.dat"); + this->setscaleCFF( gridPath + "scaleCFF.dat"); + this->setscaleFCC( gridPath + "scaleFCC.dat"); + this->setscaleFCF( gridPath + "scaleFCF.dat"); + this->setscaleOffsetCF( gridPath + "offsetVecCF.dat"); + this->setscaleOffsetFC( gridPath + "offsetVecFC.dat"); + this->setgeomBoundaryBcQs( gridPath + "geomBoundaryQs.dat"); + this->setgeomBoundaryBcValues( gridPath + "geomBoundaryValues.dat"); + this->setinletBcQs( gridPath + "inletBoundaryQs.dat"); + this->setinletBcValues( gridPath + "inletBoundaryValues.dat"); + this->setoutletBcQs( gridPath + "outletBoundaryQs.dat"); + this->setoutletBcValues( gridPath + "outletBoundaryValues.dat"); + this->settopBcQs( gridPath + "topBoundaryQs.dat"); + this->settopBcValues( gridPath + "topBoundaryValues.dat"); + this->setbottomBcQs( gridPath + "bottomBoundaryQs.dat"); + this->setbottomBcValues( gridPath + "bottomBoundaryValues.dat"); + this->setfrontBcQs( gridPath + "frontBoundaryQs.dat"); + this->setfrontBcValues( gridPath + "frontBoundaryValues.dat"); + this->setbackBcQs( gridPath + "backBoundaryQs.dat"); + this->setbackBcValues( gridPath + "backBoundaryValues.dat"); + this->setnumberNodes( gridPath + "numberNodes.dat"); + this->setLBMvsSI( gridPath + "LBMvsSI.dat"); + this->setmeasurePoints( gridPath + "measurePoints.dat"); + this->setpropellerValues( gridPath + "propellerValues.dat"); + this->setcpTop( gridPath + "cpTop.dat"); + this->setcpBottom( gridPath + "cpBottom.dat"); + this->setcpBottom2( gridPath + "cpBottom2.dat"); + this->setConcentration( gridPath + "conc.dat"); + this->setStreetVelocity( gridPath + "streetVector.dat"); + ////////////////////////////////////////////////////////////////////////// + //Normals - Geometry + this->setgeomBoundaryNormalX(gridPath + "geomBoundaryNormalX.dat"); + this->setgeomBoundaryNormalY(gridPath + "geomBoundaryNormalY.dat"); + this->setgeomBoundaryNormalZ(gridPath + "geomBoundaryNormalZ.dat"); + //Normals - Inlet + this->setInflowBoundaryNormalX(gridPath + "inletBoundaryNormalX.dat"); + this->setInflowBoundaryNormalY(gridPath + "inletBoundaryNormalY.dat"); + this->setInflowBoundaryNormalZ(gridPath + "inletBoundaryNormalZ.dat"); + //Normals - Outlet + this->setOutflowBoundaryNormalX(gridPath + "outletBoundaryNormalX.dat"); + this->setOutflowBoundaryNormalY(gridPath + "outletBoundaryNormalY.dat"); + this->setOutflowBoundaryNormalZ(gridPath + "outletBoundaryNormalZ.dat"); + ////////////////////////////////////////////////////////////////////////// // //Forcing - // real forcingX = 0.0; - // real forcingY = 0.0; - // real forcingZ = 0.0; - - // if (configData->isForcingXInConfigFile()) - // forcingX = configData->getForcingX(); - // if (configData->isForcingYInConfigFile()) - // forcingY = configData->getForcingY(); - // if (configData->isForcingZInConfigFile()) - // forcingZ = configData->getForcingZ(); - - // this->setForcing(forcingX, forcingY, forcingZ); - // ////////////////////////////////////////////////////////////////////////// - // //quadricLimiters - // real quadricLimiterP = (real)0.01; - // real quadricLimiterM = (real)0.01; - // real quadricLimiterD = (real)0.01; - - // if (configData->isQuadricLimiterPInConfigFile()) - // quadricLimiterP = configData->getQuadricLimiterP(); - // if (configData->isQuadricLimiterMInConfigFile()) - // quadricLimiterM = configData->getQuadricLimiterM(); - // if (configData->isQuadricLimiterDInConfigFile()) - // quadricLimiterD = configData->getQuadricLimiterD(); - - // this->setQuadricLimiters(quadricLimiterP, quadricLimiterM, quadricLimiterD); - // ////////////////////////////////////////////////////////////////////////// - // //Particles - // if (configData->isCalcParticlesInConfigFile()) - // this->setCalcParticles(configData->getCalcParticles()); - // else - // this->setCalcParticles(false); - - // if (configData->isParticleBasicLevelInConfigFile()) - // this->setParticleBasicLevel(configData->getParticleBasicLevel()); - // else - // this->setParticleBasicLevel((int)0); - - // if (configData->isParticleInitLevelInConfigFile()) - // this->setParticleInitLevel(configData->getParticleInitLevel()); - // else - // this->setParticleInitLevel((int)0); - - // if (configData->isNumberOfParticlesInConfigFile()) - // this->setNumberOfParticles(configData->getNumberOfParticles()); - // else - // this->setNumberOfParticles((int)0); - - // if (configData->isStartXHotWallInConfigFile()) - // this->setStartXHotWall(configData->getStartXHotWall()); - // else - // this->setStartXHotWall((real)0); - - // if (configData->isEndXHotWallInConfigFile()) - // this->setEndXHotWall(configData->getEndXHotWall()); - // else - // this->setEndXHotWall((real)0); - // ////////////////////////////////////////////////////////////////////////// - // //for Multi GPU - // if (this->getNumprocs() > 1) - // { - // ////////////////////////////////////////////////////////////////////////// - // //3D domain decomposition - // std::vector<std::string> sendProcNeighborsX, sendProcNeighborsY, sendProcNeighborsZ; - // std::vector<std::string> recvProcNeighborsX, recvProcNeighborsY, recvProcNeighborsZ; - // for (int i = 0; i < this->getNumprocs(); i++) - // { - // sendProcNeighborsX.push_back(gridPath + StringUtil::toString(i) + "Xs.dat"); - // sendProcNeighborsY.push_back(gridPath + StringUtil::toString(i) + "Ys.dat"); - // sendProcNeighborsZ.push_back(gridPath + StringUtil::toString(i) + "Zs.dat"); - // recvProcNeighborsX.push_back(gridPath + StringUtil::toString(i) + "Xr.dat"); - // recvProcNeighborsY.push_back(gridPath + StringUtil::toString(i) + "Yr.dat"); - // recvProcNeighborsZ.push_back(gridPath + StringUtil::toString(i) + "Zr.dat"); - // } - // this->setPossNeighborFilesX(sendProcNeighborsX, "send"); - // this->setPossNeighborFilesY(sendProcNeighborsY, "send"); - // this->setPossNeighborFilesZ(sendProcNeighborsZ, "send"); - // this->setPossNeighborFilesX(recvProcNeighborsX, "recv"); - // this->setPossNeighborFilesY(recvProcNeighborsY, "recv"); - // this->setPossNeighborFilesZ(recvProcNeighborsZ, "recv"); - // } - // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // //Restart - // if (configData->isTimeDoCheckPointInConfigFile()) - // this->setTimeDoCheckPoint(configData->getTimeDoCheckPoint()); - // else - // this->setTimeDoCheckPoint((uint)0); - - // if (configData->isTimeDoRestartInConfigFile()) - // this->setTimeDoRestart(configData->getTimeDoRestart()); - // else - // this->setTimeDoRestart((uint)0); - - // if (configData->isDoCheckPointInConfigFile()) - // this->setDoCheckPoint(configData->getDoCheckPoint()); - // else - // this->setDoCheckPoint(false); - - // if (configData->isDoRestartInConfigFile()) - // this->setDoRestart(configData->getDoRestart()); - // else - // this->setDoRestart(false); - // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // if (configData->isMaxLevelInConfigFile()) - // this->setMaxLevel(configData->getMaxLevel()); - // else - // this->setMaxLevel((int)1); - - // if (configData->isGridXInConfigFile()) - // this->setGridX(configData->getGridX()); - // else - // this->setGridX(std::vector<int>(this->getMaxLevel()+1, 32)); - - // if (configData->isGridYInConfigFile()) - // this->setGridY(configData->getGridY()); - // else - // this->setGridY(std::vector<int>(this->getMaxLevel()+1, 32)); - - // if (configData->isGridZInConfigFile()) - // this->setGridZ(configData->getGridZ()); - // else - // this->setGridZ(std::vector<int>(this->getMaxLevel()+1, 32)); - - // if (configData->isDistXInConfigFile()) - // this->setDistX(configData->getDistX()); - // else - // this->setDistX(std::vector<int>(this->getMaxLevel()+1, 32)); - - // if (configData->isDistYInConfigFile()) - // this->setDistY(configData->getDistY()); - // else - // this->setDistY(std::vector<int>(this->getMaxLevel()+1, 32)); - - // if (configData->isDistZInConfigFile()) - // this->setDistZ(configData->getDistZ()); - // else - // this->setDistZ(std::vector<int>(this->getMaxLevel()+1, 32)); - - // if (configData->isNeedInterfaceInConfigFile()) - // this->setNeedInterface(configData->getNeedInterface()); - // else - // this->setNeedInterface(std::vector<bool>(6, true)); + real forcingX = 0.0; + real forcingY = 0.0; + real forcingZ = 0.0; + if (configData.contains("ForcingX")) + forcingX = configData.getValue<real>("ForcingX"); + if (configData.contains("ForcingY")) + forcingY = configData.getValue<real>("ForcingY"); + if (configData.contains("ForcingZ")) + forcingZ = configData.getValue<real>("ForcingZ"); + + this->setForcing(forcingX, forcingY, forcingZ); + ////////////////////////////////////////////////////////////////////////// + //quadricLimiters + real quadricLimiterP = (real)0.01; + real quadricLimiterM = (real)0.01; + real quadricLimiterD = (real)0.01; + + if (configData.contains("QuadricLimiterP")) + quadricLimiterP = configData.getValue<real>("QuadricLimiterP"); + if (configData.contains("QuadricLimiterM")) + quadricLimiterM = configData.getValue<real>("QuadricLimiterM"); + if (configData.contains("QuadricLimiterD")) + quadricLimiterD = configData.getValue<real>("QuadricLimiterD"); + + this->setQuadricLimiters(quadricLimiterP, quadricLimiterM, quadricLimiterD); + ////////////////////////////////////////////////////////////////////////// + //Particles + if (configData.contains("calcParticles")) + this->setCalcParticles(configData.getValue<bool>("calcParticles")); + + if (configData.contains("baseLevel")) + this->setParticleBasicLevel(configData.getValue<int>("baseLevel")); + + if (configData.contains("initLevel")) + this->setParticleInitLevel(configData.getValue<int>("initLevel")); + + if (configData.contains("numberOfParticles")) + this->setNumberOfParticles(configData.getValue<int>("numberOfParticles")); + + if (configData.contains("startXHotWall")) + this->setEndXHotWall(configData.getValue<real>("startXHotWall")); + + if (configData.contains("endXHotWall")) + this->setCalcParticles(configData.getValue<real>("endXHotWall")); + ////////////////////////////////////////////////////////////////////////// + //for Multi GPU + if (this->getNumprocs() > 1) + { + ////////////////////////////////////////////////////////////////////////// + //3D domain decomposition + std::vector<std::string> sendProcNeighborsX, sendProcNeighborsY, sendProcNeighborsZ; + std::vector<std::string> recvProcNeighborsX, recvProcNeighborsY, recvProcNeighborsZ; + for (int i = 0; i < this->getNumprocs(); i++) + { + sendProcNeighborsX.push_back(gridPath + StringUtil::toString(i) + "Xs.dat"); + sendProcNeighborsY.push_back(gridPath + StringUtil::toString(i) + "Ys.dat"); + sendProcNeighborsZ.push_back(gridPath + StringUtil::toString(i) + "Zs.dat"); + recvProcNeighborsX.push_back(gridPath + StringUtil::toString(i) + "Xr.dat"); + recvProcNeighborsY.push_back(gridPath + StringUtil::toString(i) + "Yr.dat"); + recvProcNeighborsZ.push_back(gridPath + StringUtil::toString(i) + "Zr.dat"); + } + this->setPossNeighborFilesX(sendProcNeighborsX, "send"); + this->setPossNeighborFilesY(sendProcNeighborsY, "send"); + this->setPossNeighborFilesZ(sendProcNeighborsZ, "send"); + this->setPossNeighborFilesX(recvProcNeighborsX, "recv"); + this->setPossNeighborFilesY(recvProcNeighborsY, "recv"); + this->setPossNeighborFilesZ(recvProcNeighborsZ, "recv"); + } + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + //Restart + if (configData.contains("TimeDoCheckPoint")) + this->setTimeDoCheckPoint(configData.getValue<uint>("TimeDoCheckPoint")); + + if (configData.contains("TimeDoRestart")) + this->setTimeDoRestart(configData.getValue<uint>("TimeDoRestart")); + + if (configData.contains("DoCheckPoint")) + this->setDoCheckPoint(configData.getValue<bool>("DoCheckPoint")); + + if (configData.contains("DoRestart")) + this->setDoRestart(configData.getValue<bool>("DoRestart")); // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - // // Kernel - // if (configData->isMainKernelInConfigFile()) - // this->setMainKernel(configData->getMainKernel()); - // else - // this->setMainKernel("CumulantK15Comp"); - - // if (configData->isMultiKernelOnInConfigFile()) - // this->setMultiKernelOn(configData->getMultiKernelOn()); - // else - // this->setMultiKernelOn(false); - - // if (configData->isMultiKernelLevelInConfigFile()) - // this->setMultiKernelLevel(configData->getMultiKernelLevel()); - // else if (this->getMultiKernelOn()) - // { - // std::vector<int> tmp; - // for (int i = 0; i < this->getMaxLevel()+1; i++) - // { - // tmp.push_back(i); - // } - // this->setMultiKernelLevel(tmp); - // } - // else - // this->setMultiKernelLevel(std::vector<int>(0)); - - // if (configData->isMultiKernelNameInConfigFile()) { - // std::vector<std::string> kernels; - // for (std::size_t i = 0; i < configData->getMultiKernelName().size(); i++) { - // kernels.push_back(configData->getMultiKernelName().at(i)); - // } - // this->setMultiKernel(kernels); - // } - // else if (this->getMultiKernelOn()) - // { - // std::vector<std::string> tmp; - // for (int i = 0; i < this->getMaxLevel()+1; i++) - // { - // tmp.push_back("CumulantK15Comp"); - // } - // this->setMultiKernel(tmp); - // } - // else { - // std::vector<std::string> tmp; - // this->setMultiKernel(tmp); - // } - // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + if (configData.contains("NOGL")) + this->setMaxLevel(configData.getValue<int>("NOGL")); + + this->setGridX(std::vector<int>(this->getMaxLevel()+1, 32)); + this->setGridY(std::vector<int>(this->getMaxLevel()+1, 32)); + this->setGridZ(std::vector<int>(this->getMaxLevel()+1, 32)); + + this->setDistX(std::vector<int>(this->getMaxLevel()+1, 32)); + this->setDistY(std::vector<int>(this->getMaxLevel()+1, 32)); + this->setDistZ(std::vector<int>(this->getMaxLevel()+1, 32)); + this->setNeedInterface(std::vector<bool>(6, true)); + + if (configData.contains("GridX")) + this->setGridX(configData.getVector<int>("GridX")); + + if (configData.contains("GridY")) + this->setGridY(configData.getVector<int>("GridY")); + + if (configData.contains("GridZ")) + this->setGridZ(configData.getVector<int>("GridZ")); + + + if (configData.contains("DistX")) + this->setDistX(configData.getVector<int>("DistX")); + + if (configData.contains("DistY")) + this->setDistY(configData.getVector<int>("DistY")); + + if (configData.contains("DistZ")) + this->setDistZ(configData.getVector<int>("DistZ")); + + + if (configData.contains("NeedInterface")) + this->setNeedInterface(configData.getVector<bool>("NeedInterface")); + + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + // Kernel + if (configData.contains("MainKernelName")) + this->setMainKernel(configData.getValue<std::string>("MainKernelName")); + + if (configData.contains("MultiKernelOn")) + this->setMultiKernelOn(configData.getValue<bool>("MultiKernelOn")); + + if (configData.contains("MultiKernelLevel")) + this->setMultiKernelLevel(configData.getVector<int>("MultiKernelLevel")); + else if (this->getMultiKernelOn()) + { + std::vector<int> tmp; + for (int i = 0; i < this->getMaxLevel()+1; i++) + { + tmp.push_back(i); + } + this->setMultiKernelLevel(tmp); + } + + if (configData.contains("MultiKernelName")) + this->setMultiKernel(StringUtil::toStringVector(configData.getValue<std::string>("MultiKernelName"))); + else if (this->getMultiKernelOn()) + { + std::vector<std::string> tmp; + for (int i = 0; i < this->getMaxLevel()+1; i++) + { + tmp.push_back("CumulantK17Comp"); + } + this->setMultiKernel(tmp); + } } 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 e9aef2b1c14a172f6a8d28c489d6ad70c6439085..1626e41ae88a1b748f9ed48ea8db385871020dc6 100644 --- a/src/gpu/VirtualFluids_GPU/Parameter/Parameter.h +++ b/src/gpu/VirtualFluids_GPU/Parameter/Parameter.h @@ -743,16 +743,18 @@ public: protected: private: bool compOn; - bool diffOn; + bool diffOn {false}; bool isF3; - bool calcDragLift, calcCp; - bool writeVeloASCII; - bool calcPlaneConc; + bool calcDragLift {false}; + bool calcCp {false}; + bool writeVeloASCII {false}; + bool calcPlaneConc {false}; bool isBodyForce; - int diffMod; - int coarse, fine, maxlevel; + int diffMod {27}; + int maxlevel {0}; + int coarse, fine; int factor_gridNZ; - int D3Qxx; + int D3Qxx {27}; InitCondition ic; double memsizeGPU; unsigned int limitOfNodesForVTK; @@ -761,8 +763,8 @@ private: //Kernel - std::string mainKernel; - bool multiKernelOn; + std::string mainKernel {"CumulantK17Comp"}; + bool multiKernelOn {false}; std::vector<int> multiKernelLevel; std::vector<std::string> multiKernel; @@ -770,11 +772,13 @@ private: ////////////////////////////////////////////////////////////////////////// //particles - int particleBasicLevel, particleInitLevel; - int numberOfParticles; - bool calcParticles; - real stickToSolid; - real startXHotWall, endXHotWall; + int particleBasicLevel {0}; + int particleInitLevel {0}; + int numberOfParticles {0}; + bool calcParticles {false}; + real stickToSolid {(real) 0.0}; + real startXHotWall {(real) 0.0}; + real endXHotWall {(real) 0.0}; ////////////////////////////////////////////////////////////////////////// //CUDA random number generation curandState* devState;