VirtualFluids 0.2.0
Parallel CFD LBM Solver
Loading...
Searching...
No Matches
CalcMean.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#include "CalcMean.h"
35
36#include <cuda_runtime.h>
37#include <helper_cuda.h>
38
40#include "Parameter/Parameter.h"
42
43namespace vf::gpu {
44
45void allocMean(Parameter* para, CudaMemoryManager* cudaMemoryManager)
46{
47 for (int lev = para->getCoarse(); lev <= para->getFine(); lev++) {
48 cudaMemoryManager->cudaAllocMeanOut(lev);
49 for (size_t pos = 0; pos < para->getParH(lev)->numberOfNodes; pos++) {
50 para->getParH(lev)->meanVelocityInXdirectionOut[pos] = (real)0.0;
51 para->getParH(lev)->meanVelocityInYdirectionOut[pos] = (real)0.0;
52 para->getParH(lev)->meanVelocityInZdirectionOut[pos] = (real)0.0;
53 para->getParH(lev)->meanDensityOut[pos] = (real)0.0;
54 para->getParH(lev)->meanPressureOut[pos] = (real)0.0;
55 }
56 }
57}
58
60{
61 for (int lev = para->getCoarse(); lev <= para->getFine(); lev++) {
62 for (size_t pos = 0; pos < para->getParH(lev)->numberOfNodes; pos++) {
63 para->getParH(lev)->meanVelocityInXdirectionOut[pos] = para->getParH(lev)->meanVelocityInXdirection[pos] / (real)tdiff;
64 para->getParH(lev)->meanVelocityInYdirectionOut[pos] = para->getParH(lev)->meanVelocityInYdirection[pos] / (real)tdiff;
65 para->getParH(lev)->meanVelocityInZdirectionOut[pos] = para->getParH(lev)->meanVelocityInZdirection[pos] / (real)tdiff;
66 para->getParH(lev)->meanDensityOut[pos] = para->getParH(lev)->meanDensity[pos] / (real)tdiff;
67 para->getParH(lev)->meanPressureOut[pos] = para->getParH(lev)->meanPressure[pos] / (real)tdiff;
68 }
69 }
70}
71
73{
74 for (int lev = para->getCoarse(); lev <= para->getFine(); lev++) {
75 ResetMeanValuesSP27(para->getParD(lev)->meanVelocityInXdirection, para->getParD(lev)->meanVelocityInYdirection, para->getParD(lev)->meanVelocityInZdirection,
76 para->getParD(lev)->meanDensity, para->getParD(lev)->meanPressure,
77 para->getParD(lev)->numberOfNodes, para->getParD(lev)->numberofthreads,
78 para->getParD(lev)->isEvenTimestep);
79 getLastCudaError("ResetMeanValuesSP27 execution failed");
80 }
81}
82
83// Advection-Diffusion
84void allocMeanAD(Parameter* para, CudaMemoryManager* cudaMemoryManager)
85{
86 for (int lev = para->getCoarse(); lev <= para->getFine(); lev++) {
87 cudaMemoryManager->cudaAllocMeanOutAD(lev);
88 for (size_t pos = 0; pos < para->getParH(lev)->numberOfNodes; pos++) {
89 para->getParH(lev)->meanVelocityInXdirectionOut[pos] = (real)0.0;
90 para->getParH(lev)->meanVelocityInYdirectionOut[pos] = (real)0.0;
91 para->getParH(lev)->meanVelocityInZdirectionOut[pos] = (real)0.0;
92 para->getParH(lev)->meanDensityOut[pos] = (real)0.0;
93 para->getParH(lev)->meanPressureOut[pos] = (real)0.0;
94 para->getParH(lev)->meanConcentrationOut[pos] = (real)0.0;
95 }
96 }
97}
98
100{
101 for (int lev = para->getCoarse(); lev <= para->getFine(); lev++) {
102 for (size_t pos = 0; pos < para->getParH(lev)->numberOfNodes; pos++) {
103 para->getParH(lev)->meanVelocityInXdirectionOut[pos] = para->getParH(lev)->meanVelocityInXdirection[pos] / (real)tdiff;
104 para->getParH(lev)->meanVelocityInYdirectionOut[pos] = para->getParH(lev)->meanVelocityInYdirection[pos] / (real)tdiff;
105 para->getParH(lev)->meanVelocityInZdirectionOut[pos] = para->getParH(lev)->meanVelocityInZdirection[pos] / (real)tdiff;
106 para->getParH(lev)->meanDensityOut[pos] = para->getParH(lev)->meanDensity[pos] / (real)tdiff;
107 para->getParH(lev)->meanPressureOut[pos] = para->getParH(lev)->meanPressure[pos] / (real)tdiff;
108 para->getParH(lev)->meanConcentrationOut[pos] = para->getParH(lev)->meanConcentration[pos] / (real)tdiff;
109 }
110 }
111}
112
114{
115 for (int lev = para->getCoarse(); lev <= para->getFine(); lev++) {
116 ResetMeanValuesAD27(para->getParD(lev)->meanVelocityInXdirection, para->getParD(lev)->meanVelocityInYdirection, para->getParD(lev)->meanVelocityInZdirection,
117 para->getParD(lev)->meanDensity, para->getParD(lev)->meanPressure, para->getParD(lev)->meanConcentration,
118 para->getParD(lev)->numberOfNodes, para->getParD(lev)->numberofthreads,
119 para->getParD(lev)->isEvenTimestep);
120 getLastCudaError("ResetMeanValuesAD27 execution failed");
121 }
122}
123
124}
125
Class for LBM-parameter management.
Definition Parameter.h:359
std::shared_ptr< LBMSimulationParameter > getParH(int level) const
Pointer to instance of LBMSimulationParameter - stored on Host System.
int getCoarse() const
std::shared_ptr< LBMSimulationParameter > getParD(int level)
Pointer to instance of LBMSimulationParameter - stored on Device (GPU)
int getFine() const
std::shared_ptr< T > SPtr
float real
Definition DataTypes.h:42
unsigned int uint
Definition DataTypes.h:47
void calcMeanAD(Parameter *para, uint tdiff)
Definition CalcMean.cpp:99
void resetMean(Parameter *para)
Definition CalcMean.cpp:72
void allocMeanAD(Parameter *para, CudaMemoryManager *cudaMemoryManager)
Definition CalcMean.cpp:84
void allocMean(Parameter *para, CudaMemoryManager *cudaMemoryManager)
Definition CalcMean.cpp:45
void resetMeanAD(Parameter *para)
Definition CalcMean.cpp:113
void calcMean(Parameter *para, uint tdiff)
Definition CalcMean.cpp:59