VirtualFluids 0.2.0
Parallel CFD LBM Solver
Loading...
Searching...
No Matches
Calc2ndMoments.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 "Calc2ndMoments.h"
35
36#include <cuda_runtime.h>
37#include <helper_cuda.h>
38
39#include "Calc2ndMoments27.cuh"
40
42#include "Parameter/Parameter.h"
43
44namespace vf::gpu {
45
46void alloc2ndMoments(Parameter* para, CudaMemoryManager* cudaMemoryManager)
47{
48 for (int lev=para->getCoarse(); lev <= para->getFine(); lev++)
49 {
51 //allocation (device-memory + host-memory)
52 cudaMemoryManager->cudaAlloc2ndMoments(lev, para->getParH(lev)->numberOfNodes);
54 }
55}
56
57
58
60{
61 for (int lev = para->getCoarse(); lev <= para->getFine(); lev++)
62 {
64 //init host arrays
65 for (size_t pos = 0; pos < para->getParH(lev)->numberOfNodes; pos++)
66 {
67 para->getParH(lev)->kxyFromfcNEQ[pos] = 0.0;
68 para->getParH(lev)->kyzFromfcNEQ[pos] = 0.0;
69 para->getParH(lev)->kxzFromfcNEQ[pos] = 0.0;
70 para->getParH(lev)->kxxMyyFromfcNEQ[pos] = 0.0;
71 para->getParH(lev)->kxxMzzFromfcNEQ[pos] = 0.0;
72 }
74 }
75}
76
77
78
79void calc2ndMoments(Parameter* para, CudaMemoryManager* cudaMemoryManager)
80{
81 for (int lev=para->getCoarse(); lev <= para->getFine(); lev++)
82 {
84 //calc 2nd Moments on device
85 Calc2ndMomentsCompSP27( para->getParD(lev)->kxyFromfcNEQ,
86 para->getParD(lev)->kyzFromfcNEQ,
87 para->getParD(lev)->kxzFromfcNEQ,
88 para->getParD(lev)->kxxMyyFromfcNEQ,
89 para->getParD(lev)->kxxMzzFromfcNEQ,
90 para->getParD(lev)->typeOfGridNode,
91 para->getParD(lev)->neighborX,
92 para->getParD(lev)->neighborY,
93 para->getParD(lev)->neighborZ,
94 para->getParD(lev)->numberOfNodes,
95 para->getParD(lev)->numberofthreads,
96 para->getParD(lev)->distributions.f[0],
97 para->getParD(lev)->isEvenTimestep);
99 //copy results to host
100 cudaMemoryManager->cudaCopy2ndMoments(lev, para->getParH(lev)->numberOfNodes);
102 }
103}
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141void alloc3rdMoments(Parameter* para, CudaMemoryManager* cudaMemoryManager)
142{
143 for (int lev=para->getCoarse(); lev <= para->getFine(); lev++)
144 {
146 //allocation (device-memory + host-memory)
147 cudaMemoryManager->cudaAlloc3rdMoments(lev, para->getParH(lev)->numberOfNodes);
149 }
150}
151
152
153
155{
156 for (int lev=para->getCoarse(); lev <= para->getFine(); lev++)
157 {
159 //init host arrays
160 for (size_t pos = 0; pos < para->getParH(lev)->numberOfNodes; pos++)
161 {
162 para->getParH(lev)->CUMbbb[pos] = 0.0;
163 para->getParH(lev)->CUMabc[pos] = 0.0;
164 para->getParH(lev)->CUMbac[pos] = 0.0;
165 para->getParH(lev)->CUMbca[pos] = 0.0;
166 para->getParH(lev)->CUMcba[pos] = 0.0;
167 para->getParH(lev)->CUMacb[pos] = 0.0;
168 para->getParH(lev)->CUMcab[pos] = 0.0;
169 }
171 }
172}
173
174
175
176void calc3rdMoments(Parameter* para, CudaMemoryManager* cudaMemoryManager)
177{
178 for (int lev=para->getCoarse(); lev <= para->getFine(); lev++)
179 {
181 //calc 2nd Moments on device
182 Calc3rdMomentsCompSP27( para->getParD(lev)->CUMbbb,
183 para->getParD(lev)->CUMabc,
184 para->getParD(lev)->CUMbac,
185 para->getParD(lev)->CUMbca,
186 para->getParD(lev)->CUMcba,
187 para->getParD(lev)->CUMacb,
188 para->getParD(lev)->CUMcab,
189 para->getParD(lev)->typeOfGridNode,
190 para->getParD(lev)->neighborX,
191 para->getParD(lev)->neighborY,
192 para->getParD(lev)->neighborZ,
193 para->getParD(lev)->numberOfNodes,
194 para->getParD(lev)->numberofthreads,
195 para->getParD(lev)->distributions.f[0],
196 para->getParD(lev)->isEvenTimestep);
198 //copy results to host
199 cudaMemoryManager->cudaCopy3rdMoments(lev, para->getParH(lev)->numberOfNodes);
201 }
202}
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
241{
242 for (int lev = para->getCoarse(); lev <= para->getFine(); lev++)
243 {
245 //allocation (device-memory + host-memory)
246 cudaMemoryManager->cudaAllocHigherMoments(lev, para->getParH(lev)->numberOfNodes);
248 }
249}
250
251
252
254{
255 for (int lev = para->getCoarse(); lev <= para->getFine(); lev++)
256 {
258 //init host arrays
259 for (size_t pos = 0; pos < para->getParH(lev)->numberOfNodes; pos++)
260 {
261 para->getParH(lev)->CUMcbb[pos] = 0.0;
262 para->getParH(lev)->CUMbcb[pos] = 0.0;
263 para->getParH(lev)->CUMbbc[pos] = 0.0;
264 para->getParH(lev)->CUMcca[pos] = 0.0;
265 para->getParH(lev)->CUMcac[pos] = 0.0;
266 para->getParH(lev)->CUMacc[pos] = 0.0;
267 para->getParH(lev)->CUMbcc[pos] = 0.0;
268 para->getParH(lev)->CUMcbc[pos] = 0.0;
269 para->getParH(lev)->CUMccb[pos] = 0.0;
270 para->getParH(lev)->CUMccc[pos] = 0.0;
271 }
273 }
274}
275
276
277
279{
280 for (int lev=para->getCoarse(); lev <= para->getFine(); lev++)
281 {
283 //calc 2nd Moments on device
284 CalcHigherMomentsCompSP27( para->getParD(lev)->CUMcbb,
285 para->getParD(lev)->CUMbcb,
286 para->getParD(lev)->CUMbbc,
287 para->getParD(lev)->CUMcca,
288 para->getParD(lev)->CUMcac,
289 para->getParD(lev)->CUMacc,
290 para->getParD(lev)->CUMbcc,
291 para->getParD(lev)->CUMcbc,
292 para->getParD(lev)->CUMccb,
293 para->getParD(lev)->CUMccc,
294 para->getParD(lev)->typeOfGridNode,
295 para->getParD(lev)->neighborX,
296 para->getParD(lev)->neighborY,
297 para->getParD(lev)->neighborZ,
298 para->getParD(lev)->numberOfNodes,
299 para->getParD(lev)->numberofthreads,
300 para->getParD(lev)->distributions.f[0],
301 para->getParD(lev)->isEvenTimestep);
303 //copy results to host
304 cudaMemoryManager->cudaCopyHigherMoments(lev, para->getParH(lev)->numberOfNodes);
306 }
307}
308
309}
310
void cudaAlloc3rdMoments(int lev, int numofelem)
void cudaCopyHigherMoments(int lev, int numofelem)
void cudaAlloc2ndMoments(int lev, int numofelem)
void cudaCopy3rdMoments(int lev, int numofelem)
void cudaCopy2ndMoments(int lev, int numofelem)
void cudaAllocHigherMoments(int lev, int numofelem)
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
void calc3rdMoments(Parameter *para, CudaMemoryManager *cudaMemoryManager)
void initHigherOrderMoments(Parameter *para)
void allocHigherOrderMoments(Parameter *para, CudaMemoryManager *cudaMemoryManager)
void alloc2ndMoments(Parameter *para, CudaMemoryManager *cudaMemoryManager)
void init3rdMoments(Parameter *para)
void alloc3rdMoments(Parameter *para, CudaMemoryManager *cudaMemoryManager)
void calc2ndMoments(Parameter *para, CudaMemoryManager *cudaMemoryManager)
void calcHigherOrderMoments(Parameter *para, CudaMemoryManager *cudaMemoryManager)
void init2ndMoments(Parameter *para)