VirtualFluids 0.2.0
Parallel CFD LBM Solver
Loading...
Searching...
No Matches
BoundaryConditionFactory.h
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#ifndef BC_FACTORY
35#define BC_FACTORY
36
37#include <functional>
38#include <map>
39#include <string>
40#include <variant>
41
43
45#include "Parameter/Parameter.h"
46
47namespace vf::gpu {
48
49struct LBMSimulationParameter;
50class Parameter;
51
57
63
65{
66public:
67 virtual ~BoundaryConditionFactory() = default;
82
94
106
120
132
133 // enum class OutflowBoundaryCondition {}; // TODO:
134 // https://git.rz.tu-bs.de/m.schoenherr/VirtualFluids_dev/-/issues/16
135
145
153
155 // Works well at high velocities.
162
175
188
205
221 void setGeometryBoundaryCondition(std::variant<VelocityBC, NoSlipBC, SlipBC> boundaryConditionType);
228 // void setOutflowBoundaryCondition(...); // TODO:
229 // https://git.rz.tu-bs.de/m.schoenherr/VirtualFluids_dev/-/issues/16
230
235 [[nodiscard]] virtual std::variant<BoundaryConditionKernel, DirectionalBoundaryConditionKernel> getPressureBoundaryConditionPre() const;
244 [[nodiscard]] virtual bool hasDirectionalPressureBoundaryCondition() const;
245
246private:
247 VelocityBC velocityBoundaryCondition = VelocityBC::NotSpecified;
248 NoSlipBC noSlipBoundaryCondition = NoSlipBC::NoSlipDelayBounceBack;
249 SlipBC slipBoundaryCondition = SlipBC::NotSpecified;
250 PressureBC pressureBoundaryCondition = PressureBC::NotSpecified;
251 std::variant<VelocityBC, NoSlipBC, SlipBC> geometryBoundaryCondition = NoSlipBC::NoSlipDelayBounceBack;
252 StressBC stressBoundaryCondition = StressBC::NotSpecified;
253 PrecursorBC precursorBoundaryCondition = PrecursorBC::NotSpecified;
255 AdvectionDiffusionFluxBC advectionDiffusionFluxBoundaryCondition = AdvectionDiffusionFluxBC::NotSpecified;
256 AdvectionDiffusionDirichletBC advectionDiffusionDirichletBoundaryCondition = AdvectionDiffusionDirichletBC::NotSpecified;
257 AdvectionDiffusionNeumannBC advectionDiffusionNeumannBoundaryCondition = AdvectionDiffusionNeumannBC::NotSpecified;
258 AdvectionDiffusionDirectionalBC advectionDiffusionDirectionalBoundaryCondition = AdvectionDiffusionDirectionalBC::NotSpecified;
259 std::pair<StressBC, SurfaceLayerBC> surfaceLayerBoundaryCondition = {StressBC::NotSpecified, SurfaceLayerBC::NotSpecified};
260
261 // OutflowBoundaryConditon outflowBC // TODO: https://git.rz.tu-bs.de/m.schoenherr/VirtualFluids_dev/-/issues/16
262};
263
264}
265
266#endif
267
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
NoSlipBC
An enumeration for selecting a no-slip boundary condition.
void setPrecursorBoundaryCondition(BoundaryConditionFactory::PrecursorBC boundaryConditionType)
virtual ~BoundaryConditionFactory()=default
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)
PressureBC
An enumeration for selecting a pressure boundary condition.
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)
SlipBC
An enumeration for selecting a slip boundary condition.
@ 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)
VelocityBC
An enumeration for selecting a velocity boundary condition.
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
Class for LBM-parameter management.
Definition Parameter.h:359
std::shared_ptr< T > SPtr
float real
Definition DataTypes.h:42
std::function< void(LBMSimulationParameter *, AdvectionDiffusionNoFluxBoundaryConditions)> AdvectionDiffusionNoFluxBoundaryConditionKernel
std::function< void(LBMSimulationParameter *, AdvectionDiffusionDirichletBoundaryConditions)> AdvectionDiffusionDirichletBoundaryConditionKernel
std::function< void(LBMSimulationParameter *, AdvectionDiffusionFluxBoundaryConditions)> AdvectionDiffusionFluxBoundaryConditionKernel
std::function< void(LBMSimulationParameter *, QforPrecursorBoundaryConditions *, real timeRatio, real velocityRatio)> PrecursorBoundaryConditionKernel
std::function< void(LBMSimulationParameter *, AdvectionDiffusionNeumannBoundaryConditions)> AdvectionDiffusionNeumannBoundaryConditionKernel
std::function< void(LBMSimulationParameter *, QforDirectionalBoundaryCondition *)> DirectionalBoundaryConditionKernel
std::function< void(LBMSimulationParameter *, QforDirectionalADBoundaryCondition *)> DirectionalADBoundaryConditionKernel
std::function< void(LBMSimulationParameter *, QforBoundaryConditions *)> BoundaryConditionKernel
std::function< void(Parameter *, QforBoundaryConditions *, const int level)> BoundaryConditionWithParameterKernel
struct holds and manages the LB-parameter of the simulation
Definition Parameter.h:74