From 7fac3a2bbc9f57bed10a0474386923053472daa4 Mon Sep 17 00:00:00 2001 From: HenrikAsmuth <henrik.asmuth@geo.uu.se> Date: Fri, 9 Sep 2022 09:02:15 +0200 Subject: [PATCH] convert TurbulentViscosityCumulantK17CompChim to template class --- .../TurbulentViscosityCumulantK17CompChim.cu | 69 ++++++++++--------- .../TurbulentViscosityCumulantK17CompChim.h | 4 +- .../KernelFactory/KernelFactoryImp.cpp | 31 +++++++-- 3 files changed, 65 insertions(+), 39 deletions(-) diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/TurbulentViscosityKernels/FluidFlow/Compressible/CumulantK17chim/TurbulentViscosityCumulantK17CompChim.cu b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/TurbulentViscosityKernels/FluidFlow/Compressible/CumulantK17chim/TurbulentViscosityCumulantK17CompChim.cu index 0980050dc..a9d518d14 100644 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/TurbulentViscosityKernels/FluidFlow/Compressible/CumulantK17chim/TurbulentViscosityCumulantK17CompChim.cu +++ b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/TurbulentViscosityKernels/FluidFlow/Compressible/CumulantK17chim/TurbulentViscosityCumulantK17CompChim.cu @@ -1,49 +1,46 @@ #include "TurbulentViscosityCumulantK17CompChim.h" #include "cuda/CudaGrid.h" +#include <logger/Logger.h> #include "Parameter/Parameter.h" #include "TurbulentViscosityCumulantK17CompChim_Device.cuh" -std::shared_ptr<TurbulentViscosityCumulantK17CompChim> TurbulentViscosityCumulantK17CompChim::getNewInstance(std::shared_ptr<Parameter> para, int level) +template<TurbulenceModel turbulenceModel> +std::shared_ptr< TurbulentViscosityCumulantK17CompChim<turbulenceModel> > TurbulentViscosityCumulantK17CompChim<turbulenceModel>::getNewInstance(std::shared_ptr<Parameter> para, int level) { - return std::shared_ptr<TurbulentViscosityCumulantK17CompChim>(new TurbulentViscosityCumulantK17CompChim(para,level)); + return std::shared_ptr<TurbulentViscosityCumulantK17CompChim<turbulenceModel> >(new TurbulentViscosityCumulantK17CompChim<turbulenceModel>(para,level)); } -void TurbulentViscosityCumulantK17CompChim::run() +template<TurbulenceModel turbulenceModel> +void TurbulentViscosityCumulantK17CompChim<turbulenceModel>::run() { vf::cuda::CudaGrid grid = vf::cuda::CudaGrid(para->getParH(level)->numberofthreads, para->getParH(level)->numberOfNodes); - TurbulenceModel turbulenceModel = para->getTurbulenceModel(); - switch(para->getTurbulenceModel()) - { - case TurbulenceModel::AMD: - LB_Kernel_TurbulentViscosityCumulantK17CompChim < TurbulenceModel::AMD > <<< grid.grid, grid.threads >>>( para->getParD(level)->omega, para->getParD(level)->typeOfGridNode, para->getParD(level)->neighborX, para->getParD(level)->neighborY, para->getParD(level)->neighborZ, para->getParD(level)->distributions.f[0], - para->getParD(level)->rho, para->getParD(level)->velocityX, para->getParD(level)->velocityY, para->getParD(level)->velocityZ, para->getParD(level)->turbViscosity,para->getSGSConstant(), - (unsigned long)para->getParD(level)->numberOfNodes, level, para->getIsBodyForce(), para->getForcesDev(), para->getParD(level)->forceX_SP, para->getParD(level)->forceY_SP, - para->getParD(level)->forceZ_SP,para->getQuadricLimitersDev(), para->getParD(level)->isEvenTimestep); - break; - case TurbulenceModel::Smagorinsky: - LB_Kernel_TurbulentViscosityCumulantK17CompChim < TurbulenceModel::AMD > <<< grid.grid, grid.threads >>>( para->getParD(level)->omega, para->getParD(level)->typeOfGridNode, para->getParD(level)->neighborX, para->getParD(level)->neighborY, para->getParD(level)->neighborZ, para->getParD(level)->distributions.f[0], - para->getParD(level)->rho, para->getParD(level)->velocityX, para->getParD(level)->velocityY, para->getParD(level)->velocityZ, para->getParD(level)->turbViscosity,para->getSGSConstant(), - (unsigned long)para->getParD(level)->numberOfNodes, level, para->getIsBodyForce(), para->getForcesDev(), para->getParD(level)->forceX_SP, para->getParD(level)->forceY_SP, - para->getParD(level)->forceZ_SP,para->getQuadricLimitersDev(), para->getParD(level)->isEvenTimestep); - break; - case TurbulenceModel::QR: - LB_Kernel_TurbulentViscosityCumulantK17CompChim < TurbulenceModel::QR > <<< grid.grid, grid.threads >>>( para->getParD(level)->omega, para->getParD(level)->typeOfGridNode, para->getParD(level)->neighborX, para->getParD(level)->neighborY, para->getParD(level)->neighborZ, para->getParD(level)->distributions.f[0], - para->getParD(level)->rho, para->getParD(level)->velocityX, para->getParD(level)->velocityY, para->getParD(level)->velocityZ, para->getParD(level)->turbViscosity,para->getSGSConstant(), - (unsigned long)para->getParD(level)->numberOfNodes, level, para->getIsBodyForce(), para->getForcesDev(), para->getParD(level)->forceX_SP, para->getParD(level)->forceY_SP, - para->getParD(level)->forceZ_SP,para->getQuadricLimitersDev(), para->getParD(level)->isEvenTimestep); - break; - case TurbulenceModel::None: - throw std::runtime_error("TurbulentViscosityCumulantK17CompChim cannot be use without turbulence Model (TurbulenceModel::None)!"); - break; - default: - throw std::runtime_error("TurbulentViscosityCumulantK17CompChim: Invalid turbulence model!"); - break; - } + LB_Kernel_TurbulentViscosityCumulantK17CompChim < turbulenceModel > <<< grid.grid, grid.threads >>>( para->getParD(level)->omega, + para->getParD(level)->typeOfGridNode, para->getParD(level)->neighborX, + para->getParD(level)->neighborY, + para->getParD(level)->neighborZ, + para->getParD(level)->distributions.f[0], + para->getParD(level)->rho, + para->getParD(level)->velocityX, + para->getParD(level)->velocityY, + para->getParD(level)->velocityZ, + para->getParD(level)->turbViscosity, + para->getSGSConstant(), + (unsigned long)para->getParD(level)->numberOfNodes, + level, + para->getIsBodyForce(), + para->getForcesDev(), + para->getParD(level)->forceX_SP, + para->getParD(level)->forceY_SP, + para->getParD(level)->forceZ_SP, + para->getQuadricLimitersDev(), + para->getParD(level)->isEvenTimestep); + getLastCudaError("LB_Kernel_TurbulentViscosityCumulantK17CompChim execution failed"); } -TurbulentViscosityCumulantK17CompChim::TurbulentViscosityCumulantK17CompChim(std::shared_ptr<Parameter> para, int level) +template<TurbulenceModel turbulenceModel> +TurbulentViscosityCumulantK17CompChim<turbulenceModel>::TurbulentViscosityCumulantK17CompChim(std::shared_ptr<Parameter> para, int level) { this->para = para; this->level = level; @@ -51,4 +48,10 @@ TurbulentViscosityCumulantK17CompChim::TurbulentViscosityCumulantK17CompChim(std myPreProcessorTypes.push_back(InitCompSP27); myKernelGroup = BasicKernel; -} \ No newline at end of file + + VF_LOG_INFO("Using turbulence model: {}", turbulenceModel); +} + +template class TurbulentViscosityCumulantK17CompChim<TurbulenceModel::AMD>; +template class TurbulentViscosityCumulantK17CompChim<TurbulenceModel::Smagorinsky>; +template class TurbulentViscosityCumulantK17CompChim<TurbulenceModel::QR>; diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/TurbulentViscosityKernels/FluidFlow/Compressible/CumulantK17chim/TurbulentViscosityCumulantK17CompChim.h b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/TurbulentViscosityKernels/FluidFlow/Compressible/CumulantK17chim/TurbulentViscosityCumulantK17CompChim.h index d107700e5..0d35b68c9 100644 --- a/src/gpu/VirtualFluids_GPU/Kernel/Kernels/TurbulentViscosityKernels/FluidFlow/Compressible/CumulantK17chim/TurbulentViscosityCumulantK17CompChim.h +++ b/src/gpu/VirtualFluids_GPU/Kernel/Kernels/TurbulentViscosityKernels/FluidFlow/Compressible/CumulantK17chim/TurbulentViscosityCumulantK17CompChim.h @@ -2,11 +2,13 @@ #define TurbulentViscosityCUMULANT_K17_COMP_CHIM_H #include "Kernel/KernelImp.h" +#include "Parameter/Parameter.h" +template<TurbulenceModel turbulenceModel> class TurbulentViscosityCumulantK17CompChim : public KernelImp { public: - static std::shared_ptr<TurbulentViscosityCumulantK17CompChim> getNewInstance(std::shared_ptr< Parameter> para, int level); + static std::shared_ptr< TurbulentViscosityCumulantK17CompChim<turbulenceModel> > getNewInstance(std::shared_ptr< Parameter> para, int level); void run(); private: diff --git a/src/gpu/VirtualFluids_GPU/Kernel/Utilities/KernelFactory/KernelFactoryImp.cpp b/src/gpu/VirtualFluids_GPU/Kernel/Utilities/KernelFactory/KernelFactoryImp.cpp index 808bd005e..53ec240f0 100644 --- a/src/gpu/VirtualFluids_GPU/Kernel/Utilities/KernelFactory/KernelFactoryImp.cpp +++ b/src/gpu/VirtualFluids_GPU/Kernel/Utilities/KernelFactory/KernelFactoryImp.cpp @@ -195,11 +195,32 @@ std::shared_ptr<Kernel> KernelFactoryImp::makeKernel(std::shared_ptr<Parameter> checkStrategy = WaleFluidFlowCompStrategy::getInstance(); } else if (kernel == "WaleBySoniMalavCumulantK15Comp") { // /\ // newKernel = WaleBySoniMalavCumulantK15Comp::getNewInstance(para, level);// || - checkStrategy = WaleFluidFlowCompStrategy::getInstance(); // wale model - } //=============== - else if (kernel == "TurbulentViscosityCumulantK17CompChim"){ // AMD model - newKernel = TurbulentViscosityCumulantK17CompChim::getNewInstance(para, level); // || - checkStrategy = TurbulentViscosityFluidFlowCompStrategy::getInstance(); // \/ + checkStrategy = WaleFluidFlowCompStrategy::getInstance(); // wale model + } //=============== + else if (kernel == "TurbulentViscosityCumulantK17CompChim"){ // compressible with turbulent viscosity + switch(para->getTurbulenceModel()) // || + { // \/ // + case TurbulenceModel::AMD: + newKernel = TurbulentViscosityCumulantK17CompChim<TurbulenceModel::AMD>::getNewInstance(para, level); + break; + case TurbulenceModel::Smagorinsky: + newKernel = TurbulentViscosityCumulantK17CompChim<TurbulenceModel::Smagorinsky>::getNewInstance(para, level); + break; + case TurbulenceModel::QR: + newKernel = TurbulentViscosityCumulantK17CompChim<TurbulenceModel::QR>::getNewInstance(para, level); + break; + case TurbulenceModel::None: + throw std::runtime_error("TurbulentViscosityCumulantK17CompChim currently not implemented for TurbulenceModel::None!"); + break; + default: + throw std::runtime_error("Unknown turbulence model!"); + break; + } + checkStrategy = TurbulentViscosityFluidFlowCompStrategy::getInstance(); + // /\ // + // || + // compressible with turbulent viscosity + //=============== } else { throw std::runtime_error("KernelFactory does not know the KernelType."); -- GitLab