VirtualFluids 0.2.0
Parallel CFD LBM Solver
Loading...
Searching...
No Matches
BoundaryConditionFactory.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//=======================================================================================
35
36#include <variant>
37
39
49#include "Parameter/Parameter.h"
50
51namespace vf::gpu {
52
57
62
67
72
74{
75 this->geometryBoundaryCondition = boundaryConditionType;
76}
77
82
87
113{
114 const VelocityBC& boundaryCondition =
115 isGeometryBC ? std::get<VelocityBC>(this->geometryBoundaryCondition) : this->velocityBoundaryCondition;
116
117 // for descriptions of the boundary conditions refer to the header
118 switch (boundaryCondition) {
120 return VelocityBounceBack;
121 break;
124 break;
127 break;
130 break;
131 default:
132 return nullptr;
133 }
134}
135
137{
138 const NoSlipBC& boundaryCondition =
139 isGeometryBC ? std::get<NoSlipBC>(this->geometryBoundaryCondition) : this->noSlipBoundaryCondition;
140
141 // for descriptions of the boundary conditions refer to the header
142 switch (boundaryCondition) {
145 break;
147 return NoSlipBounceBack;
148 break;
151 break;
154 break;
155 default:
156 return nullptr;
157 }
158}
159
161{
162 const SlipBC& boundaryCondition =
163 isGeometryBC ? std::get<SlipBC>(this->geometryBoundaryCondition) : this->slipBoundaryCondition;
164
165 // for descriptions of the boundary conditions refer to the header
166 switch (boundaryCondition) {
168 return SlipBounceBack;
169 break;
171 return SlipCompressible;
172 break;
175 break;
176 default:
177 return nullptr;
178 }
179}
180
181std::variant<BoundaryConditionKernel, DirectionalBoundaryConditionKernel>
201
203{
204 return std::holds_alternative<DirectionalBoundaryConditionKernel>(getPressureBoundaryConditionPre());
205}
206
208{
209 switch (this->precursorBoundaryCondition) {
212 break;
215 break;
218 break;
219 default:
220 return nullptr;
221 }
222}
223
225{
226 switch (this->stressBoundaryCondition) {
229 break;
232 break;
235 break;
236 default:
237 return nullptr;
238 }
239}
240
242{
243 if (std::holds_alternative<VelocityBC>(this->geometryBoundaryCondition))
244 return this->getVelocityBoundaryConditionPost(true);
245 if (std::holds_alternative<NoSlipBC>(this->geometryBoundaryCondition))
246 return this->getNoSlipBoundaryConditionPost(true);
247 if (std::holds_alternative<SlipBC>(this->geometryBoundaryCondition))
248 return this->getSlipBoundaryConditionPost(true);
249 return nullptr;
250}
251
260
271
288
305
315
332
333}
334
A class provides an interface for no-slip boundary condition in grid generator.
Definition NoSlipBC.h:42
A class provides an interface for velocity boundary condition in grid generator.
Definition VelocityBC.h:84
virtual std::variant< BoundaryConditionKernel, DirectionalBoundaryConditionKernel > getPressureBoundaryConditionPre() const
void setPrecursorBoundaryCondition(BoundaryConditionFactory::PrecursorBC boundaryConditionType)
virtual BoundaryConditionKernel getVelocityBoundaryConditionPost(bool isGeometryBC=false) const
AdvectionDiffusionNeumannBC
Sets gradient at boundary via anti bounce back rule. Only works well at low velocities.
AdvectionDiffusionFluxBC
Can set flux, best used in combination with Slip or velocity.
BoundaryConditionKernel getStressBoundaryConditionPost() const
SurfaceLayerBC
Enum to differentiate between setting heatlfux or surfaceTemperature in SurfaceLayer BC.
void setAdvectionDiffusionDirichletBoundaryCondition(AdvectionDiffusionDirichletBC boundaryConditionType)
void setAdvectionDiffusionFluxBoundaryCondition(AdvectionDiffusionFluxBC boundaryConditionType)
BoundaryConditionKernel getNoSlipBoundaryConditionPost(bool isGeometryBC=false) const
BoundaryConditionKernel getSlipBoundaryConditionPost(bool isGeometryBC=false) const
void setStressBoundaryCondition(BoundaryConditionFactory::StressBC boundaryConditionType)
BoundaryConditionKernel getSurfaceLayerBoundaryConditionPost() const
void setAdvectionDiffusionNoFluxBoundaryCondition(AdvectionDiffusionNoFluxBC boundaryConditionType)
@ SlipBounceBack
SlipBounceBack = slip boundary condition based on bounce back.
@ SlipTurbulentViscosityCompressible
With turbulent viscosity -> para->setUseTurbulentViscosity(true) has to be set to true.
BoundaryConditionKernel getGeometryBoundaryConditionPost() const
void setAdvectionDiffusionNeumannBoundaryCondition(AdvectionDiffusionNeumannBC boundaryConditionType)
virtual bool hasDirectionalPressureBoundaryCondition() const
AdvectionDiffusionNoFluxBC
Equivalent to an adiabatic boundary condition, best used in combination with NoSlip.
@ NoFluxBounceBack
NoFluxBounceBack = simple bounce back.
@ NoFluxDelayedBounceBack
NoFluxBounceBackDelayed = implicit bounce back.
AdvectionDiffusionDirichletBoundaryConditionKernel getAdvectionDiffusionDirichletBoundaryConditionPost() const
void setPressureBoundaryCondition(BoundaryConditionFactory::PressureBC boundaryConditionType)
void setNoSlipBoundaryCondition(BoundaryConditionFactory::NoSlipBC boundaryConditionType)
void setSurfaceLayerBoundaryCondition(StressBC momentumBoundaryConditionType, SurfaceLayerBC surfaceLayerBoundaryConditionType)
AdvectionDiffusionNeumannBoundaryConditionKernel getAdvectionDiffusionNeumannBoundaryConditionPost() const
DirectionalADBoundaryConditionKernel getAdvectionDiffusionDirectionalBoundaryConditionPost() const
void setSlipBoundaryCondition(BoundaryConditionFactory::SlipBC boundaryConditionType)
AdvectionDiffusionFluxBoundaryConditionKernel getAdvectionDiffusionFluxBoundaryConditionPost() const
StressBC
An enumeration for selecting a stress boundary condition.
void setGeometryBoundaryCondition(std::variant< VelocityBC, NoSlipBC, SlipBC > boundaryConditionType)
set a boundary condition for the geometry param boundaryConditionType: a velocity,...
AdvectionDiffusionDirichletBC
Sets constant value at boundary via Anti bounce back rule.
void setAdvectionDiffusionDirectionalBoundaryCondition(AdvectionDiffusionDirectionalBC boundaryConditionType)
AdvectionDiffusionNoFluxBoundaryConditionKernel getAdvectionDiffusionNoFluxBoundaryConditionPost() const
void setVelocityBoundaryCondition(BoundaryConditionFactory::VelocityBC boundaryConditionType)
AdvectionDiffusionDirectionalBC
Directional non-reflecting outflow for the advection-diffusion (temperature) field.
PrecursorBoundaryConditionKernel getPrecursorBoundaryConditionPost() const
std::shared_ptr< T > SPtr
void SurfaceLayerBounceBackWithPressureCompressibleSurfaceTemperature(LBMSimulationParameter *parameterDevice, QforBoundaryConditions *surfaceLayerBoundaryCondition)
void AdvectionDiffusionDirichletInterpolatedSlip(LBMSimulationParameter *parameterDevice, AdvectionDiffusionDirichletBoundaryConditions bcParameters)
void SurfaceLayerBounceBackWithPressureCompressibleHeatFlux(LBMSimulationParameter *parameterDevice, QforBoundaryConditions *surfaceLayerBoundaryCondition)
void AdvectionDiffusionNeumannAntiBounceBackSlip(LBMSimulationParameter *parameterDevice, AdvectionDiffusionNeumannBoundaryConditions bcParameters)
void AdvectionDiffusionFluxTurbulentViscosityCompressible(LBMSimulationParameter *parameterDevice, AdvectionDiffusionFluxBoundaryConditions bcParameters)
std::function< void(LBMSimulationParameter *, AdvectionDiffusionNoFluxBoundaryConditions)> AdvectionDiffusionNoFluxBoundaryConditionKernel
void OutflowNonReflectingPressureCorrection(LBMSimulationParameter *parameterDevice, QforDirectionalBoundaryCondition *boundaryCondition)
void AdvectionDiffusionNeumannAntiBounceBackNoSlip(LBMSimulationParameter *parameterDevice, AdvectionDiffusionNeumannBoundaryConditions bcParameters)
void SurfaceLayerInterpolatedCompressibleSurfaceTemperature(LBMSimulationParameter *parameterDevice, QforBoundaryConditions *surfaceLayerBoundaryCondition)
std::function< void(LBMSimulationParameter *, AdvectionDiffusionDirichletBoundaryConditions)> AdvectionDiffusionDirichletBoundaryConditionKernel
void AdvectionDiffusionNeumannInterpolatedSlip(LBMSimulationParameter *parameterDevice, AdvectionDiffusionNeumannBoundaryConditions bcParameters)
std::function< void(LBMSimulationParameter *, AdvectionDiffusionFluxBoundaryConditions)> AdvectionDiffusionFluxBoundaryConditionKernel
void SurfaceLayerBounceBackCompressibleSurfaceTemperature(LBMSimulationParameter *parameterDevice, QforBoundaryConditions *surfaceLayerBoundaryCondition)
void AdvectionDiffusionNeumannInterpolatedNoSlip(LBMSimulationParameter *parameterDevice, AdvectionDiffusionNeumannBoundaryConditions bcParameters)
std::function< void(LBMSimulationParameter *, QforPrecursorBoundaryConditions *, real timeRatio, real velocityRatio)> PrecursorBoundaryConditionKernel
void AdvectionDiffusionFluxBounceBack(LBMSimulationParameter *parameterDevice, AdvectionDiffusionFluxBoundaryConditions bcParameters)
void SurfaceLayerInterpolatedCompressibleHeatFlux(LBMSimulationParameter *parameterDevice, QforBoundaryConditions *surfaceLayerBoundaryCondition)
void AdvectionDiffusionNoFluxBounceBack(LBMSimulationParameter *parameterDevice, AdvectionDiffusionNoFluxBoundaryConditions bcParameters)
void PrecursorTemperatureDistributions(LBMSimulationParameter *parameterDevice, QforPrecursorBoundaryConditions *boundaryCondition, real tRatio, real velocityRatio)
std::function< void(LBMSimulationParameter *, AdvectionDiffusionNeumannBoundaryConditions)> AdvectionDiffusionNeumannBoundaryConditionKernel
void AdvectionDiffusionDirectionalOutflowNonReflecting(LBMSimulationParameter *parameterDevice, QforDirectionalADBoundaryCondition *boundaryCondition)
void AdvectionDiffusionDirichletInterpolatedNoSlip(LBMSimulationParameter *parameterDevice, AdvectionDiffusionDirichletBoundaryConditions bcParameters)
std::function< void(LBMSimulationParameter *, QforDirectionalBoundaryCondition *)> DirectionalBoundaryConditionKernel
std::function< void(LBMSimulationParameter *, QforDirectionalADBoundaryCondition *)> DirectionalADBoundaryConditionKernel
void AdvectionDiffusionFluxCompressible(LBMSimulationParameter *parameterDevice, AdvectionDiffusionFluxBoundaryConditions bcParameters)
void AdvectionDiffusionDirichletAntiBounceBackSlip(LBMSimulationParameter *parameterDevice, AdvectionDiffusionDirichletBoundaryConditions bcParameters)
void SurfaceLayerBounceBackCompressibleHeatFlux(LBMSimulationParameter *parameterDevice, QforBoundaryConditions *surfaceLayerBoundaryCondition)
std::function< void(LBMSimulationParameter *, QforBoundaryConditions *)> BoundaryConditionKernel
void AdvectionDiffusionDirichletAntiBounceBackNoSlip(LBMSimulationParameter *parameterDevice, AdvectionDiffusionDirichletBoundaryConditions bcParameters)
struct holds and manages the LB-parameter of the simulation
Definition Parameter.h:74