diff --git a/src/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.cpp b/src/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.cpp index 19a71dface346a40a0af0d993904db8d568f2dea..57c6412175c8bbdd9f97583cfc8a0a364e49c30f 100644 --- a/src/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.cpp +++ b/src/VirtualFluids_GPU/DataStructureInitializer/GridReaderGenerator/GridGenerator.cpp @@ -60,6 +60,9 @@ void GridGenerator::allocArrays_CoordNeighborGeo() para->cudaAllocF3SP(level); cudaMemoryManager->cudaAllocNeighborWSB(level); + if(para->getUseWale()) + cudaMemoryManager->cudaAllocTurbulentViscosity(level); + builder->getNodeValues( para->getParH(level)->coordX_SP, para->getParH(level)->coordY_SP, diff --git a/src/VirtualFluids_GPU/LBM/Simulation.cpp b/src/VirtualFluids_GPU/LBM/Simulation.cpp index 8bae869bfb23b3f395fa938d7d9ceac6fe3f8de6..c5528a14bcc66175d41b2e0290a75ab9306fbd8a 100644 --- a/src/VirtualFluids_GPU/LBM/Simulation.cpp +++ b/src/VirtualFluids_GPU/LBM/Simulation.cpp @@ -16,6 +16,7 @@ #include "Output/MeasurePointWriter.hpp" #include "Output/AnalysisData.hpp" #include "Output/InterfaceDebugWriter.hpp" +#include "Output/VeloASCIIWriter.hpp" ////////////////////////////////////////////////////////////////////////// #include "Utilities/Buffer2D.hpp" #include "Utilities/StringUtil.hpp" @@ -75,6 +76,16 @@ void Simulation::setFactories(std::shared_ptr<KernelFactory> kernelFactory, std: this->preProcessorFactory = preProcessorFactory; } +void Simulation::addKineticEnergyAnalyzer(uint tAnalyse) +{ + this->kineticEnergyAnalyzer = make_shared<KineticEnergyAnalyzer>(this->para, tAnalyse); +} + +void Simulation::addEnstrophyAnalyzer(uint tAnalyse) +{ + this->enstrophyAnalyzer = make_shared<EnstrophyAnalyzer>(this->para, tAnalyse); +} + void Simulation::init(SPtr<Parameter> para, SPtr<GridProvider> gridProvider, std::shared_ptr<DataWriter> dataWriter, std::shared_ptr<CudaMemoryManager> cudaManager) { @@ -186,10 +197,6 @@ void Simulation::init(SPtr<Parameter> para, SPtr<GridProvider> gridProvider, std } //////////////////////////////////////////////////////////////////////////// - - - - ////////////////////////////////////////////////////////////////////////// //Allocate Memory for Drag Lift Calculation ////////////////////////////////////////////////////////////////////////// @@ -430,12 +437,29 @@ void Simulation::run() { getLastCudaError("before starting a kernel we get an execution failed"); if (para->getMaxLevel()>=1) - { + { updateGrid27(para.get(), comm, cudaManager.get(), pm, 1, para->getMaxLevel(), t, kernels); - } - //////////////////////////////////////////////////////////////////////////////// - // Collision and Propagation - //////////////////////////////////////////////////////////////////////////////// + } + + //////////////////////////////////////////////////////////////////////////////// + // Collision and Propagation + //////////////////////////////////////////////////////////////////////////////// + + ////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////// + + kernels.at(0)->run(); + + ////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////// + ////////////////////////////////////////////////////////////////////////// + + + + //if (t>para->getStartTurn()){ // ////////////////////////////////////////////////////////////////////////// // QVelDevice1h27( para->getParD(0)->numberofthreads, para->getParD(0)->nx, para->getParD(0)->ny, @@ -468,20 +492,6 @@ void Simulation::run() ////////////////////////////////////////////////////////////////////////// //comp - - ////////////////////////////////////////////////////////////////////////// - - ////////////////////////////////////////////////////////////////////////// - //Wale - if (para->getUseWale()) - { - - } - else - { - kernels.at(0)->run(); - - } //CumulantOneChimCompSP27( @@ -1172,6 +1182,9 @@ void Simulation::run() getLastCudaError("CalcMacSP27 execution failed"); } + + + ////////////////////////////////////////////////////////////////////////////////// ////calculate the new forcing //if (((t%10) == 0) && (t >= 10)/*((t%para->getTStartOut()) == 0) && (t >= para->getTStartOut())*/) @@ -1709,6 +1722,16 @@ void Simulation::run() + ////////////////////////////////////////////////////////////////////////// + // run Analyzers for kinetic energy and enstrophy for TGV in 3D + //////////////////////////////////////////////////////////////////////////////// + if( this->kineticEnergyAnalyzer ) this->kineticEnergyAnalyzer->run(t); + if( this->enstrophyAnalyzer ) this->enstrophyAnalyzer->run(t); + //////////////////////////////////////////////////////////////////////////////// + + + + //////////////////////////////////////////////////////////////////////////////// //Calc Median //////////////////////////////////////////////////////////////////////////////// @@ -2068,6 +2091,18 @@ void Simulation::run() cudaManager->cudaCopyMedianPrint(lev); } + ////////////////////////////////////////////////////////////////////////// + VeloASCIIWriter::writeVelocitiesAsTXT(para.get(), lev, t); + ////////////////////////////////////////////////////////////////////////// + if( this->kineticEnergyAnalyzer || this->enstrophyAnalyzer ) + { + std::string fname = para->getFName() + StringUtil::toString<int>(t) + "_t_"; + + if (this->kineticEnergyAnalyzer) this->kineticEnergyAnalyzer->writeToFile(fname); + if (this->enstrophyAnalyzer) this->enstrophyAnalyzer->writeToFile(fname); + } + ////////////////////////////////////////////////////////////////////////// + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// if (para->getDiffOn()==true) diff --git a/src/VirtualFluids_GPU/LBM/Simulation.h b/src/VirtualFluids_GPU/LBM/Simulation.h index 34996ced2b8d77e93a3f0f0072d401311fcdac65..8de2cfae45b8cf183cb5f527334b4d726a8d281a 100644 --- a/src/VirtualFluids_GPU/LBM/Simulation.h +++ b/src/VirtualFluids_GPU/LBM/Simulation.h @@ -8,6 +8,8 @@ #include <VirtualFluidsDefinitions.h> #include "Output/LogWriter.hpp" +#include "GPU/KineticEnergyAnalyzer.h" +#include "GPU/EnstrophyAnalyzer.h" #include "Utilities/Buffer2D.hpp" #include "LBM/LB.h" @@ -41,6 +43,9 @@ public: void setFactories(std::shared_ptr<KernelFactory> kernelFactory, std::shared_ptr<PreProcessorFactory> preProcessorFactory); + void addKineticEnergyAnalyzer( uint tAnalyse ); + void addEnstrophyAnalyzer ( uint tAnalyse ); + protected: std::shared_ptr<KernelFactory> kernelFactory; std::shared_ptr<PreProcessorFactory> preProcessorFactory; @@ -94,5 +99,13 @@ protected: real *VxED, *VyED, *VzED, *deltaVED; real *VxWH, *VyWH, *VzWH, *deltaVWH; real *VxWD, *VyWD, *VzWD, *deltaVWD; + + + //////////////////////////////////////////////////////////////////////////// + SPtr<KineticEnergyAnalyzer> kineticEnergyAnalyzer; + //////////////////////////////////////////////////////////////////////////// + SPtr<EnstrophyAnalyzer> enstrophyAnalyzer; + //////////////////////////////////////////////////////////////////////////// + }; #endif diff --git a/targets/apps/LBM/TGV_3D/TGV_3D.cpp b/targets/apps/LBM/TGV_3D/TGV_3D.cpp index 5e87c49589d4e59f7bcc13cde9f2d378502ef1ad..fac2cc777af457092bca0a795684b98e448911e1 100644 --- a/targets/apps/LBM/TGV_3D/TGV_3D.cpp +++ b/targets/apps/LBM/TGV_3D/TGV_3D.cpp @@ -91,6 +91,7 @@ uint nx = 64; uint gpuIndex = 0; bool useLimiter = false; +bool useWale = false; std::string kernel( "CumulantK17Comp" ); @@ -241,6 +242,9 @@ void multipleLevel(const std::string& configPath) if( !useLimiter ) para->setQuadricLimiters( 1000000.0, 1000000.0, 1000000.0 ); + if( useWale ) + para->setUseWale( true ); + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -256,6 +260,9 @@ void multipleLevel(const std::string& configPath) sim.setFactories(kernelFactory, preProcessorFactory); sim.init(para, gridGenerator, fileWriter, cudaMemoryManager); + sim.addKineticEnergyAnalyzer( 10 ); + sim.addEnstrophyAnalyzer( 10 ); + sim.run(); sim.free(); } @@ -272,13 +279,7 @@ int main( int argc, char* argv[]) try { ////////////////////////////////////////////////////////////////////////// - - //if( argc > 1 ) gpuIndex = atoi( argv[1] ); - - //if( argc > 2 ) nx = atoi( argv[2] ); - std::string targetPath; - - targetPath = __FILE__; + std::string targetPath( __FILE__ ); #ifdef _WIN32 targetPath = targetPath.substr(0, targetPath.find_last_of('\\') + 1); @@ -286,6 +287,8 @@ int main( int argc, char* argv[]) targetPath = targetPath.substr(0, targetPath.find_last_of('/') + 1); #endif + ////////////////////////////////////////////////////////////////////////// + if( cmdOptionExists( argv, argv+argc, "--Re" ) ) Re = atof( getCmdOption( argv, argv+argc, "--Re" ) ); @@ -304,6 +307,9 @@ int main( int argc, char* argv[]) if( cmdOptionExists( argv, argv+argc, "--useLimiter" ) ) useLimiter = true; + if( cmdOptionExists( argv, argv+argc, "--useWale" ) ) + useWale = true; + multipleLevel(targetPath + "config.txt"); //////////////////////////////////////////////////////////////////////////