1//=======================================================================================
2// ____ ____ __ ______ __________ __ __ __ __
3// \ \ | | | | | _ \ |___ ___| | | | | / \ | |
4// \ \ | | | | | |_) | | | | | | | / \ | |
5// \ \ | | | | | _ / | | | | | | / /\ \ | |
6// \ \ | | | | | | \ \ | | | \__/ | / ____ \ | |____
7// \ \ | | |__| |__| \__\ |__| \________/ /__/ \__\ |_______|
8// \ \ | | ________________________________________________________________
9// \ \ | | | ______________________________________________________________|
10// \ \| | | | __ __ __ __ ______ _______
11// \ | | |_____ | | | | | | | | | _ \ / _____)
12// \ | | _____| | | | | | | | | | | \ \ \_______
13// \ | | | | |_____ | \_/ | | | | |_/ / _____ |
14// \ _____| |__| |________| \_______/ |__| |______/ (_______/
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.
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
26// SPDX-License-Identifier: GPL-3.0-or-later
27// SPDX-FileCopyrightText: Copyright © VirtualFluids Project contributors, see AUTHORS.md in root folder
30//=======================================================================================
31#include <cuda_helper/CudaGrid.h>
32#include <cuda_runtime.h>
33#include <helper_cuda.h>
34#include <helper_functions.h>
36#include <basics/DataTypes.h>
38#include "BoundaryConditions/BoundaryConditionFactory.h"
39#include "BoundaryConditions/Stress/SurfaceLayer.h"
40#include "BoundaryConditions/Stress/SurfaceLayer_Device.cuh"
41#include "Calculation/Calculation.h"
42#include "Parameter/Parameter.h"
47using StressBC = BoundaryConditionFactory::StressBC;
48using HeatFluxBC = BoundaryConditionFactory::SurfaceLayerBC;
50TemperatureParameters getTemperatureParameters(LBMSimulationParameter* parameterDevice)
53 parameterDevice->concentration, parameterDevice->diffusivity, parameterDevice->gravity,
54 parameterDevice->turbulentDiffusivity, parameterDevice->referenceTemperature, parameterDevice->distributionsAD.f[0]
58template <StressBC stressBCType, HeatFluxBC heatFluxBCType, bool delayed>
59void SurfaceLayer(LBMSimulationParameter* parameterDevice, QforBoundaryConditions* surfaceLayerBoundaryCondition)
61 const GridParameter gridParams = getStressBCGridParameter(parameterDevice);
62 const TemperatureParameters tempParams = getTemperatureParameters(parameterDevice);
64 const vf::cuda::CudaGrid grid(parameterDevice->numberofthreads, surfaceLayerBoundaryCondition->numberOfBCnodes);
66 SurfaceLayerDevice27<stressBCType, heatFluxBCType, delayed><<<grid.grid, grid.threads>>>(
67 gridParams, *surfaceLayerBoundaryCondition, parameterDevice->surfaceLayerWallModel.momentumParameters,
68 parameterDevice->surfaceLayerWallModel.temperatureParameters, tempParams);
70 getLastCudaError("SurfaceLayerDevice27 execution failed");
73void SurfaceLayerBounceBackCompressibleHeatFlux(LBMSimulationParameter* parameterDevice,
74 QforBoundaryConditions* surfaceLayerBoundaryCondition)
76 SurfaceLayer<StressBC::StressBounceBackCompressible, HeatFluxBC::SurfaceHeatFlux, false>(parameterDevice,
77 surfaceLayerBoundaryCondition);
80void SurfaceLayerBounceBackWithPressureCompressibleHeatFlux(LBMSimulationParameter* parameterDevice,
81 QforBoundaryConditions* surfaceLayerBoundaryCondition)
83 SurfaceLayer<StressBC::StressBounceBackWithPressureCompressible, HeatFluxBC::SurfaceHeatFlux, false>(
84 parameterDevice, surfaceLayerBoundaryCondition);
88void SurfaceLayerInterpolatedCompressibleHeatFlux(LBMSimulationParameter* parameterDevice,
89 QforBoundaryConditions* surfaceLayerBoundaryCondition)
91 SurfaceLayer<StressBC::StressInterpolatedCompressible, HeatFluxBC::SurfaceHeatFlux, false>(parameterDevice,
92 surfaceLayerBoundaryCondition);
95void SurfaceLayerBounceBackCompressibleSurfaceTemperature(LBMSimulationParameter* parameterDevice,
96 QforBoundaryConditions* surfaceLayerBoundaryCondition)
98 SurfaceLayer<StressBC::StressBounceBackCompressible, HeatFluxBC::SurfaceTemperature, false>(
99 parameterDevice, surfaceLayerBoundaryCondition);
102void SurfaceLayerBounceBackWithPressureCompressibleSurfaceTemperature(LBMSimulationParameter* parameterDevice,
103 QforBoundaryConditions* surfaceLayerBoundaryCondition)
105 SurfaceLayer<StressBC::StressBounceBackWithPressureCompressible, HeatFluxBC::SurfaceTemperature, false>(
106 parameterDevice, surfaceLayerBoundaryCondition);
109void SurfaceLayerInterpolatedCompressibleSurfaceTemperature(LBMSimulationParameter* parameterDevice,
110 QforBoundaryConditions* surfaceLayerBoundaryCondition)
112 SurfaceLayer<StressBC::StressInterpolatedCompressible, HeatFluxBC::SurfaceTemperature, false>(
113 parameterDevice, surfaceLayerBoundaryCondition);