VirtualFluids 0.2.0
Parallel CFD LBM Solver
Loading...
Searching...
No Matches
BoundaryConditionKernelManager.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 BoundaryConditionKernelManager_H
35#define BoundaryConditionKernelManager_H
36
37#include <functional>
38#include <memory>
39#include <stdexcept>
40#include <string>
41
43
45
46namespace vf::gpu {
47
48class CudaMemoryManager;
49class BoundaryConditionFactory;
50class Parameter;
51struct LBMSimulationParameter;
52
53using BoundaryConditionKernel = std::function<void(LBMSimulationParameter*, QforBoundaryConditions*)>;
54using DirectionalBoundaryConditionKernel = std::function<void(LBMSimulationParameter*, QforDirectionalBoundaryCondition*)>;
55using BoundaryConditionWithParameterKernel = std::function<void(Parameter*, QforBoundaryConditions*, const int level)>;
57 std::function<void(LBMSimulationParameter*, QforPrecursorBoundaryConditions*, real tRatio, real velocityRatio)>;
67{
68public:
73
75 void runVelocityBCKernelPost(int level) const;
76
78 void runVelocityBCKernelPre(int level) const;
79
81 void runGeoBCKernelPost(int level) const;
82
84 void runGeoBCKernelPre(int level, unsigned int t, CudaMemoryManager* cudaMemoryManager) const;
85
87 void runSlipBCKernelPost(int level) const;
88
90 void runNoSlipBCKernelPost(int level) const;
91
93 void runPressureBCKernelPre(int level) const;
94
96 void runPrecursorBCKernelPost(int level, uint t, CudaMemoryManager* cudaMemoryManager);
97
99 void runStressWallModelKernelPost(int level) const;
100
101 void runADNoFluxBCKernel(int level) const ;
102 void runADFluxBCKernel(int level) const ;
103 void runADDirichletBCKernel(int level) const ;
104 void runADNeumannBCKernel(int level) const ;
106 void runADDirectionalBCKernel(int level) const ;
108 void runSurfaceLayerBCKernelPost(int level) const;
109private:
115 template <typename bcFunction>
116 void checkBoundaryCondition(const bcFunction& boundaryCondition,
117 const std::vector<QforDirectionalBoundaryCondition>& bcVector, const std::string& bcName)
118 {
119 if (!boundaryCondition && !bcVector.empty())
120 throw std::runtime_error("The boundary condition " + bcName + " was not set!");
121 }
122
128 template <typename bcFunction>
129 void checkBoundaryCondition(const bcFunction& boundaryCondition,
130 const std::vector<QforDirectionalADBoundaryCondition>& bcVector, const std::string& bcName)
131 {
132 if (!boundaryCondition && !bcVector.empty())
133 throw std::runtime_error("The boundary condition " + bcName + " was not set!");
134 }
135
141 template <typename bcFunction, typename QforBC>
142 void checkBoundaryCondition(const bcFunction& boundaryCondition, const QforBC& bcStruct, const std::string& bcName)
143 {
144 if (!boundaryCondition && bcStruct.numberOfBCnodes > 0)
145 throw std::runtime_error("The boundary condition " + bcName + " was not set!");
146 }
147
148 void runDistributionPrecursorBCKernelPost(int level, uint t, CudaMemoryManager* cudaMemoryManager);
149 void runVelocityPrecursorBCKernelPost(int level, uint t, CudaMemoryManager* cudaMemoryManager);
150
151 SPtr<Parameter> para;
152
153 BoundaryConditionKernel velocityBoundaryConditionPost = nullptr;
154 BoundaryConditionKernel noSlipBoundaryConditionPost = nullptr;
155 BoundaryConditionKernel slipBoundaryConditionPost = nullptr;
156 BoundaryConditionKernel geometryBoundaryConditionPost = nullptr;
157 BoundaryConditionKernel stressBoundaryConditionPost = nullptr;
158 PrecursorBoundaryConditionKernel precursorBoundaryConditionPost = nullptr;
159 BoundaryConditionKernel pressureBoundaryConditionPre = nullptr;
160 DirectionalBoundaryConditionKernel directionalPressureBoundaryConditionPre = nullptr;
161 ADNoFluxBoundaryConditionKernel ADNoFluxBoundaryConditionPost = nullptr;
162 ADFluxBoundaryConditionKernel ADFluxBoundaryConditionPost = nullptr;
163 ADDirichletBoundaryConditionKernel ADDirichletBoundaryConditionPost = nullptr;
164 ADNeumannBoundaryConditionKernel ADNeumannBoundaryConditionPost = nullptr;
165 DirectionalADBoundaryConditionKernel ADDirectionalBoundaryConditionPost = nullptr;
166 BoundaryConditionKernel surfaceLayerBoundaryConditionPost = nullptr;
167
168};
169
170}
171
172#endif
173
void runADDirectionalBCKernel(int level) const
calls the device function of the directional advection-diffusion (temperature) outflow BC (post-colli...
void runSurfaceLayerBCKernelPost(int level) const
calls the device function of the surface layer boundary condition (post-collision)
void runVelocityBCKernelPost(int level) const
calls the device function of the velocity boundary condition (post-collision)
void runVelocityBCKernelPre(int level) const
calls the device function of the velocity boundary condition (pre-collision)
void runNoSlipBCKernelPost(int level) const
calls the device function of the no-slip boundary condition (post-collision)
void runGeoBCKernelPost(int level) const
calls the device function of the geometry boundary condition (post-collision)
void runStressWallModelKernelPost(int level) const
calls the device function of the stress wall model (post-collision)
void runPressureBCKernelPre(int level) const
calls the device function of the pressure boundary condition (pre-collision)
void runPrecursorBCKernelPost(int level, uint t, CudaMemoryManager *cudaMemoryManager)
calls the device function of the precursor boundary condition
void runGeoBCKernelPre(int level, unsigned int t, CudaMemoryManager *cudaMemoryManager) const
calls the device function of the geometry boundary condition (pre-collision)
void runSlipBCKernelPost(int level) const
calls the device function of the slip boundary condition (post-collision)
std::shared_ptr< T > SPtr
float real
Definition DataTypes.h:42
unsigned int uint
Definition DataTypes.h:47
void(*)(LBMSimulationParameter *, QforBoundaryConditions *) bcFunction
std::function< void(LBMSimulationParameter *, AdvectionDiffusionFluxBoundaryConditions bcParams)> ADFluxBoundaryConditionKernel
std::function< void(LBMSimulationParameter *, AdvectionDiffusionDirichletBoundaryConditions bcParams)> ADDirichletBoundaryConditionKernel
std::function< void(LBMSimulationParameter *, AdvectionDiffusionNeumannBoundaryConditions bcParams)> ADNeumannBoundaryConditionKernel
std::function< void(LBMSimulationParameter *, QforPrecursorBoundaryConditions *, real timeRatio, real velocityRatio)> PrecursorBoundaryConditionKernel
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
std::function< void(LBMSimulationParameter *, AdvectionDiffusionNoFluxBoundaryConditions bcParams)> ADNoFluxBoundaryConditionKernel
struct holds and manages the LB-parameter of the simulation
Definition Parameter.h:74