diff --git a/src/Core/Input/ConfigData/ConfigData.h b/src/Core/Input/ConfigData/ConfigData.h index 3ea009cb578a84515875e46a8d36db6fd59ab5c6..89f65b0cdad473df7362bec2e31e4451b9539636 100644 --- a/src/Core/Input/ConfigData/ConfigData.h +++ b/src/Core/Input/ConfigData/ConfigData.h @@ -22,6 +22,8 @@ public: virtual bool getCalcHighOrderMoments() = 0; virtual bool getReadGeo() = 0; virtual bool getCalcMedian() = 0; + virtual bool getCalcDragLift() = 0; + virtual bool getCalcCp() = 0; virtual bool getConcFile() = 0; virtual bool getStreetVelocityFile() = 0; virtual bool getUseMeasurePoints() = 0; @@ -104,6 +106,8 @@ public: virtual bool isCalcHighOrderMomentsInConfigFile() = 0; virtual bool isReadGeoInConfigFile() = 0; virtual bool isCalcMedianInConfigFile() = 0; + virtual bool isCalcDragLiftInConfigFile() = 0; + virtual bool isCalcCpInConfigFile() = 0; virtual bool isConcFileInConfigFile() = 0; virtual bool isStreetVelocityFileInConfigFile() = 0; virtual bool isUseMeasurePointsInConfigFile() = 0; diff --git a/src/Core/Input/ConfigData/ConfigDataImp.cpp b/src/Core/Input/ConfigData/ConfigDataImp.cpp index 0b6b88e91dd12d2acba1027744cc3b2314c36e00..2c512510664af095b93a51bc76b1e9c136aed047 100644 --- a/src/Core/Input/ConfigData/ConfigDataImp.cpp +++ b/src/Core/Input/ConfigData/ConfigDataImp.cpp @@ -21,6 +21,8 @@ ConfigDataImp::ConfigDataImp() this->isCalcHighOrderMoments=false; this->isReadGeo=false; this->isCalcMedian=false; + this->isCalcDragLift = false; + this->isCalcCp = false; this->isConcFile=false; this->isUseMeasurePoints=false; this->isUseWale=false; @@ -154,6 +156,16 @@ bool ConfigDataImp::getCalcMedian() return this->calcMedian; } +bool ConfigDataImp::getCalcDragLift() +{ + return this->calcDragLift; +} + +bool ConfigDataImp::getCalcCp() +{ + return this->calcCp; +} + bool ConfigDataImp::getConcFile() { return this->concFile; @@ -557,6 +569,18 @@ void ConfigDataImp::setCalcMedian(bool calcMedian) this->isCalcMedian = true; } +void ConfigDataImp::setCalcDragLift(bool calcDragLift) +{ + this->calcDragLift = calcDragLift; + this->isCalcDragLift = true; +} + +void ConfigDataImp::setCalcCp(bool calcCp) +{ + this->calcCp = calcCp; + this->isCalcCp = true; +} + void ConfigDataImp::setConcFile(bool concFile) { this->concFile = concFile; @@ -978,6 +1002,16 @@ bool ConfigDataImp::isCalcMedianInConfigFile() return this->isCalcMedian; } +bool ConfigDataImp::isCalcDragLiftInConfigFile() +{ + return this->isCalcDragLift; +} + +bool ConfigDataImp::isCalcCpInConfigFile() +{ + return this->isCalcCp; +} + bool ConfigDataImp::isConcFileInConfigFile() { return this->isConcFile; diff --git a/src/Core/Input/ConfigData/ConfigDataImp.h b/src/Core/Input/ConfigData/ConfigDataImp.h index 99f62fc9b6e5dc2479b7bcfbad6f1fe632799445..f3545e61b41b0df4453f05d679ade4b4b8282c8c 100644 --- a/src/Core/Input/ConfigData/ConfigDataImp.h +++ b/src/Core/Input/ConfigData/ConfigDataImp.h @@ -25,6 +25,8 @@ public: bool getCalcHighOrderMoments(); bool getReadGeo(); bool getCalcMedian(); + bool getCalcDragLift(); + bool getCalcCp(); bool getConcFile(); bool getStreetVelocityFile(); bool getUseMeasurePoints(); @@ -107,6 +109,8 @@ public: void setCalcHighOrderMoments(bool calcHighOrderMoment); void setReadGeo(bool readGeo); void setCalcMedian(bool calcMedian); + void setCalcDragLift(bool calcDragLift); + void setCalcCp(bool calcCp); void setConcFile(bool concFile); void setStreetVelocityFile(bool streetVelocityFile); void setUseMeasurePoints(bool useMeasurePoints); @@ -190,6 +194,8 @@ public: bool isCalcHighOrderMomentsInConfigFile(); bool isReadGeoInConfigFile(); bool isCalcMedianInConfigFile(); + bool isCalcDragLiftInConfigFile(); + bool isCalcCpInConfigFile(); bool isConcFileInConfigFile(); bool isStreetVelocityFileInConfigFile(); bool isUseMeasurePointsInConfigFile(); @@ -275,6 +281,8 @@ private: bool calcHighOrderMoments; bool readGeo; bool calcMedian; + bool calcDragLift; + bool calcCp; bool concFile; bool streetVelocityFile; bool useMeasurePoints; @@ -358,6 +366,8 @@ private: bool isCalcHighOrderMoments; bool isReadGeo; bool isCalcMedian; + bool isCalcDragLift; + bool isCalcCp; bool isConcFile; bool isStreetVelocityFile; bool isUseMeasurePoints; diff --git a/src/VirtualFluids_GPU/Calculation/UpdateGrid27.cpp b/src/VirtualFluids_GPU/Calculation/UpdateGrid27.cpp index 67c9120cff74b6d7b6e7e2526a5d03f13ec20c4d..440576fe6a309c569b4809cb4eb18f85e5c228a6 100644 --- a/src/VirtualFluids_GPU/Calculation/UpdateGrid27.cpp +++ b/src/VirtualFluids_GPU/Calculation/UpdateGrid27.cpp @@ -47,7 +47,7 @@ void updateGrid27(Parameter* para, ////////////////////////////////////////////////////////////////////////// - preCollisionBC(para, level); + preCollisionBC(para, cudaManager, level, t); ////////////////////////////////////////////////////////////////////////// @@ -225,6 +225,7 @@ void postCollisionBC(Parameter* para, int level, unsigned int t) // para->getParD(level)->coordX_SP, para->getParD(level)->coordY_SP, para->getParD(level)->coordZ_SP, // para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); //getLastCudaError("QVelDev27 execution failed"); + } ////////////////////////////////////////////////////////////////////////// @@ -286,7 +287,26 @@ void postCollisionBC(Parameter* para, int level, unsigned int t) ////////////////////////////////////////////////////////////////////////// if (para->getParD(level)->QGeom.kQ > 0) - { + { + if (para->getCalcDragLift()) + { + //Drag and Lift Part I + DragLiftPostD27(para->getParD(level)->d0SP.f[0], + para->getParD(level)->QGeom.k, + para->getParD(level)->QGeom.q27[0], + para->getParD(level)->QGeom.kQ, + para->getParD(level)->DragPostX, + para->getParD(level)->DragPostY, + para->getParD(level)->DragPostZ, + para->getParD(level)->neighborX_SP, + para->getParD(level)->neighborY_SP, + para->getParD(level)->neighborZ_SP, + para->getParD(level)->size_Mat_SP, + para->getParD(level)->evenOrOdd, + para->getParD(level)->numberofthreads); + getLastCudaError("DragLift27 execution failed"); + } + //BBDev27( para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, // para->getParD(level)->d0SP.f[0], para->getParD(level)->QGeom.k, para->getParD(level)->QGeom.q27[0], // para->getParD(level)->QGeom.kQ, para->getParD(level)->QGeom.kQ, para->getParD(level)->omega, @@ -380,12 +400,12 @@ void postCollisionBC(Parameter* para, int level, unsigned int t) if (para->getParD(level)->kPressQ > 0) { - QPressDev27_IntBB( para->getParD(level)->numberofthreads, para->getParD(level)->QPress.RhoBC, - para->getParD(level)->d0SP.f[0], para->getParD(level)->QPress.k, para->getParD(level)->QPress.q27[0], - para->getParD(level)->QPress.kQ, para->getParD(level)->QPress.kQ, para->getParD(level)->omega, - para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, - para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); - getLastCudaError("QPressDev27_IntBB fine execution failed"); + //QPressDev27_IntBB( para->getParD(level)->numberofthreads, para->getParD(level)->QPress.RhoBC, + // para->getParD(level)->d0SP.f[0], para->getParD(level)->QPress.k, para->getParD(level)->QPress.q27[0], + // para->getParD(level)->QPress.kQ, para->getParD(level)->QPress.kQ, para->getParD(level)->omega, + // para->getParD(level)->neighborX_SP, para->getParD(level)->neighborY_SP, para->getParD(level)->neighborZ_SP, + // para->getParD(level)->size_Mat_SP, para->getParD(level)->evenOrOdd); + //getLastCudaError("QPressDev27_IntBB fine execution failed"); } ////////////////////////////////////////////////////////////////////////// @@ -641,7 +661,7 @@ void calcMacroscopicQuantities(Parameter* para, int level) getLastCudaError("CalcMacSP27 execution failed"); } -void preCollisionBC(Parameter* para, int level) +void preCollisionBC(Parameter* para, CudaMemoryManager* cudaManager, int level, unsigned int t) { ////////////////////////////////////////////////////////////////////////// // I N F L O W @@ -686,6 +706,77 @@ void preCollisionBC(Parameter* para, int level) if (para->getParD(level)->QGeom.kQ > 0) { + if (para->getCalcDragLift()) + { + //Drag and Lift Part II + DragLiftPreD27(para->getParD(level)->d0SP.f[0], + para->getParD(level)->QGeom.k, + para->getParD(level)->QGeom.q27[0], + para->getParD(level)->QGeom.kQ, + para->getParD(level)->DragPreX, + para->getParD(level)->DragPreY, + para->getParD(level)->DragPreZ, + para->getParD(level)->neighborX_SP, + para->getParD(level)->neighborY_SP, + para->getParD(level)->neighborZ_SP, + para->getParD(level)->size_Mat_SP, + para->getParD(level)->evenOrOdd, + para->getParD(level)->numberofthreads); + getLastCudaError("DragLift27 execution failed"); + //////////////////////////////////////////////////////////////////////////////// + //Calculation of Drag and Lift + //////////////////////////////////////////////////////////////////////////////// + calcDragLift(para, cudaManager, level); + //////////////////////////////////////////////////////////////////////////////// + } + + if (para->getCalcCp()) + { + //////////////////////////////////////////////////////////////////////////////// + //Calculation of cp + //////////////////////////////////////////////////////////////////////////////// + + if(t > para->getTStartOut()) + { + //////////////////////////////////////////////////////////////////////////////// + CalcCPtop27(para->getParD(level)->d0SP.f[0], + para->getParD(level)->cpTopIndex, + para->getParD(level)->numberOfPointsCpTop, + para->getParD(level)->cpPressTop, + para->getParD(level)->neighborX_SP, + para->getParD(level)->neighborY_SP, + para->getParD(level)->neighborZ_SP, + para->getParD(level)->size_Mat_SP, + para->getParD(level)->evenOrOdd, + para->getParD(level)->numberofthreads); + ////////////////////////////////////////////////////////////////////////////////// + CalcCPbottom27(para->getParD(level)->d0SP.f[0], + para->getParD(level)->cpBottomIndex, + para->getParD(level)->numberOfPointsCpBottom, + para->getParD(level)->cpPressBottom, + para->getParD(level)->neighborX_SP, + para->getParD(level)->neighborY_SP, + para->getParD(level)->neighborZ_SP, + para->getParD(level)->size_Mat_SP, + para->getParD(level)->evenOrOdd, + para->getParD(level)->numberofthreads); + ////////////////////////////////////////////////////////////////////////////////// + CalcCPbottom27(para->getParD(level)->d0SP.f[0], + para->getParD(level)->cpBottom2Index, + para->getParD(level)->numberOfPointsCpBottom2, + para->getParD(level)->cpPressBottom2, + para->getParD(level)->neighborX_SP, + para->getParD(level)->neighborY_SP, + para->getParD(level)->neighborZ_SP, + para->getParD(level)->size_Mat_SP, + para->getParD(level)->evenOrOdd, + para->getParD(level)->numberofthreads); + ////////////////////////////////////////////////////////////////////////////////// + calcCp(para, cudaManager, level); + } + } + + //////////////////////////////////////////////////////////////////////////////// // high viscosity incompressible //QDevIncompHighNu27( para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, @@ -1835,7 +1926,7 @@ void updateGrid27(Parameter* para, Communicator* comm, CudaMemoryManager* cudaMa // para->getParD(level)->size_Mat_SP, // para->getParD(level)->evenOrOdd, // para->getParD(level)->numberofthreads); - //getLastCudaError("DragLift27 execution failed"); + //getLastCudaError("DragLift27 execution failed"); // //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // BBDev27( para->getParD(level)->numberofthreads, para->getParD(level)->nx, para->getParD(level)->ny, // para->getParD(level)->d0SP.f[0], para->getParD(level)->QGeom.k, para->getParD(level)->QGeom.q27[0], @@ -1959,6 +2050,7 @@ void updateGrid27(Parameter* para, Communicator* comm, CudaMemoryManager* cudaMa // getLastCudaError("QDevComp27 (Geom) execution failed"); //} ////////////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////////////// ////Calculation of cp diff --git a/src/VirtualFluids_GPU/Parameter/Parameter.cpp b/src/VirtualFluids_GPU/Parameter/Parameter.cpp index 3d3c0108bc5092ed798ac449a484167709464bb1..c3d63e85cda96c8e732b5a94b71c0f1b7c88ec1c 100644 --- a/src/VirtualFluids_GPU/Parameter/Parameter.cpp +++ b/src/VirtualFluids_GPU/Parameter/Parameter.cpp @@ -96,6 +96,16 @@ Parameter::Parameter(SPtr<ConfigData> configData, Communicator* comm) 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->isConcFileInConfigFile()) this->setConcFile(configData->getConcFile()); else @@ -3452,6 +3462,14 @@ void Parameter::setCalcMedian(bool calcMedian) { ic.calcMedian = calcMedian; } +void Parameter::setCalcDragLift(bool calcDragLift) +{ + this->calcDragLift = calcDragLift; +} +void Parameter::setCalcCp(bool calcCp) +{ + this->calcCp = calcCp; +} void Parameter::setTimeCalcMedStart(int CalcMedStart) { ic.tCalcMedStart = CalcMedStart; @@ -4433,6 +4451,14 @@ bool Parameter::getCalcMedian() { return ic.calcMedian; } +bool Parameter::getCalcDragLift() +{ + return this->calcDragLift; +} +bool Parameter::getCalcCp() +{ + return this->calcCp; +} bool Parameter::getCalcParticle() { return this->calcParticles; diff --git a/src/VirtualFluids_GPU/Parameter/Parameter.h b/src/VirtualFluids_GPU/Parameter/Parameter.h index 45c45268a586ad7c10bc3cc8def89527fc683191..0cf62b35d24fe3797f84ec703202d5f7c6e5545f 100644 --- a/src/VirtualFluids_GPU/Parameter/Parameter.h +++ b/src/VirtualFluids_GPU/Parameter/Parameter.h @@ -619,6 +619,8 @@ public: void setTStartOut(unsigned int tStartOut); void setTimestepOfCoarseLevel(unsigned int timestep); void setCalcMedian(bool calcMedian); + void setCalcDragLift(bool calcDragLift); + void setCalcCp(bool calcCp); void setTimeCalcMedStart(int CalcMedStart); void setTimeCalcMedEnd(int CalcMedEnd); void setMaxDev(int maxdev); @@ -812,6 +814,8 @@ public: bool getPrintFiles(); bool getReadGeo(); bool getCalcMedian(); + bool getCalcDragLift(); + bool getCalcCp(); bool getCalcParticle(); int getFine(); int getCoarse(); @@ -1023,6 +1027,7 @@ private: bool compOn; bool diffOn; bool isF3; + bool calcDragLift, calcCp; int diffMod; int coarse, fine, maxlevel; int factor_gridNZ;