Skip to content
Snippets Groups Projects
Commit 7fac3a2b authored by Henrik Asmuth's avatar Henrik Asmuth
Browse files

convert TurbulentViscosityCumulantK17CompChim to template class

parent 323694ab
No related branches found
No related tags found
1 merge request!143Experimental merge
#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>;
......@@ -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:
......
......@@ -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.");
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment