VirtualFluids 0.2.0
Parallel CFD LBM Solver
Loading...
Searching...
No Matches
TurbulenceModelFactory.cpp
Go to the documentation of this file.
1//=======================================================================================
2// ____ ____ __ ______ __________ __ __ __ __
3// \ \ | | | | | _ \ |___ ___| | | | | / \ | |
4// \ \ | | | | | |_) | | | | | | | / \ | |
5// \ \ | | | | | _ / | | | | | | / /\ \ | |
6// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____
7// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______|
8// \ \ | | ________________________________________________________________
9// \ \ | | | ______________________________________________________________|
10// \ \| | | | __ __ __ __ ______ _______
11// \ | | |_____ | | | | | | | | | _ \ / _____)
12// \ | | _____| | | | | | | | | | | \ \ \_______
13// \ | | | | |_____ | \_/ | | | | |_/ / _____ |
14// \ _____| |__| |________| \_______/ |__| |______/ (_______/
15//
16// This file is part of VirtualFluids. VirtualFluids is free software: you can
17// redistribute it and/or modify it under the terms of the GNU General Public
18// License as published by the Free Software Foundation, either version 3 of
19// the License, or (at your option) any later version.
20//
21// VirtualFluids is distributed in the hope that it will be useful, but WITHOUT
22// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
23// FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
24// for more details.
25//
26// SPDX-License-Identifier: GPL-3.0-or-later
27// SPDX-FileCopyrightText: Copyright © VirtualFluids Project contributors, see AUTHORS.md in root folder
28//
33//=======================================================================================
34
36
39
40#include <logger/Logger.h>
41
42#include "Parameter/Parameter.h"
45
47using namespace vf::basics::constant;
48
49namespace vf::gpu {
50
51void TurbulenceModelFactory::setTurbulenceModel(std::string turbulenceModel)
52{
53 if (turbulenceModel == "None")
55 else if (turbulenceModel == "Smagorinsky")
57 else if (turbulenceModel == "QR")
59 else if (turbulenceModel == "AMD")
61 else if (turbulenceModel == "AMDStratified")
63 else
64 throw std::runtime_error("TurbulenceModelFactory: Invalid turbulence model! Model name found: " + turbulenceModel);
65
66 VF_LOG_INFO("Turbulence model: {}", turbulenceModel);
67}
69{
70 if (turbulenceModel == "None")
71 this->setAdvectionDiffusionTurbulenceModel(ADTurbulenceModel::None);
72 else if (turbulenceModel == "Default") {
73 this->setAdvectionDiffusionTurbulenceModel(ADTurbulenceModel::Default);
74 VF_LOG_INFO("Turbulent Prandtl Number: {}", para->getTurbulentPrandtlNumber());
75 } else if (turbulenceModel == "Moeng")
76 this->setAdvectionDiffusionTurbulenceModel(ADTurbulenceModel::Moeng);
77 else if (turbulenceModel == "AMDStratified")
78 this->setAdvectionDiffusionTurbulenceModel(ADTurbulenceModel::AMDStratified);
79 else
80 throw std::runtime_error("TurbulenceModelFactory: Invalid advection diffusion turbulence model! Model name found: " + turbulenceModel);
81
82 VF_LOG_INFO("Turbulence Model Advection Diffusion {}", turbulenceModel);
83}
84
86{
87 para->setTurbulenceModel(turbulenceModel);
88
89 if (turbulenceModel != vf::lbm::TurbulenceModel::None && para->getSGSConstant() == vf::basics::constant::c0o1)
90 throw std::runtime_error("Turbulence Model requires SGS constant!");
91
92 if (turbulenceModel != vf::lbm::TurbulenceModel::None)
93 para->setUseTurbulentViscosity(true);
94
95 if (turbulenceModel == vf::lbm::TurbulenceModel::AMD)
96 this->turbulenceModelKernel = calculateTurbulentViscosityAMD;
97
98 if (turbulenceModel == vf::lbm::TurbulenceModel::AMDStratified)
100}
101
106
108{
109 using namespace ::vf::basics::constant;
110
111 if (!para->getUseTurbulentViscosity() && turbulenceModel != ADTurbulenceModel::None)
112 throw std::runtime_error("TurbulenceModelFactory: Turbulent viscosity must be enabled to use an advection diffusion turbulence model!");
113
114 if (turbulenceModel == ADTurbulenceModel::Default && para->getTurbulentPrandtlNumber() == c0o1)
115 throw std::runtime_error("TurbulenceModelFactory: Prandtl number must be set to use the default advection diffusion turbulence model!");
116
117 if ((turbulenceModel == ADTurbulenceModel::AMDStratified) == (para->getTurbulenceModel() != vf::lbm::TurbulenceModel::AMDStratified))
118 throw std::runtime_error("TurbulenceModelFactory: Can only use AMDstratified for turbulent viscosity and diffusivity together!");
119
120 if (turbulenceModel != ADTurbulenceModel::None && turbulenceModel != ADTurbulenceModel::Default && para->getTurbulentPrandtlNumber() != c0o1)
121 VF_LOG_INFO("Turbulent Prandtl Number is set but AD Turbulence Model does not use turbulent Prandtl Number");
122
123 para->setAdvectionDiffusionTurbulenceModel(turbulenceModel);
124 if (turbulenceModel != ADTurbulenceModel::None)
125 para->setUseTurbulentDiffusivity(true);
126 if (turbulenceModel == ADTurbulenceModel::Moeng)
127 this->turbulenceModelADKernel = calculateTurbulentDiffusivityMoeng;
128}
129
131{
132 const std::string SGSkey = "SGSconstant";
133 const std::string turbulenceModelKey = "TurbulenceModel";
134 const std::string ADTurbulenceModelKey = "TurbulenceModelAdvectionDiffusion";
135 if (configData.contains(SGSkey)) {
136 para->setSGSConstant(configData.getValue<real>(SGSkey));
137 VF_LOG_INFO("SGS constant: {}", para->getSGSConstant());
138 }
139
140 if (configData.contains(turbulenceModelKey)) {
141 const std::string config = configData.getValue<std::string>(turbulenceModelKey);
142 setTurbulenceModel(config);
143 }
144
145 if (configData.contains(ADTurbulenceModelKey)) {
146 const std::string config = configData.getValue<std::string>(ADTurbulenceModelKey);
148 }
149}
150
151}
152
#define VF_LOG_INFO(...)
Definition Logger.h:50
void readConfigFile(const vf::basics::ConfigurationFile &configData)
void setAdvectionDiffusionTurbulenceModel(std::string turbulenceModel)
void setTurbulenceModel(std::string turbulenceModel)
std::shared_ptr< T > SPtr
float real
Definition DataTypes.h:42
void calculateTurbulentViscosityAndDiffusivityAMDStratified(Parameter *para, int level)
void calculateTurbulentDiffusivityMoeng(Parameter *para, int level)
void calculateTurbulentViscosityAMD(Parameter *para, int level)
TurbulenceModel
An enumeration for selecting a template of the advection-diffusion turbulence model.
TurbulenceModel
An enumeration for selecting a turbulence model.