VirtualFluids 0.2.0
Parallel CFD LBM Solver
Loading...
Searching...
No Matches
CalcTurbulenceIntensity.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//
32//=======================================================================================
34
35#include <cuda_runtime.h>
36#include <helper_cuda.h>
37
39
41#include "Parameter/Parameter.h"
42
43namespace vf::gpu {
44
46{
47 for (int lev=para->getCoarse(); lev <= para->getFine(); lev++) {
48 cudaMemoryManager->cudaAllocTurbulenceIntensity(lev, para->getParH(lev)->numberOfNodes);
49 para->getParH(lev)->turbulenceIntensity.resize(para->getParH(lev)->numberOfNodes);
50 }
51 resetVelocityFluctuationsAndMeans(para, cudaMemoryManager);
52}
53
54
56{
57 for (int lev = para->getCoarse(); lev <= para->getFine(); lev++) {
58 cudaMemoryManager->cudaCopyTurbulenceIntensityDH(lev, para->getParH(lev)->numberOfNodes);
59
60 for (size_t pos = 0; pos < para->getParH(lev)->numberOfNodes; pos++) {
61 // mean velocity
62 para->getParH(lev)->vx_mean[pos] = para->getParH(lev)->vx_mean[pos] / (real)tdiff;
63 para->getParH(lev)->vy_mean[pos] = para->getParH(lev)->vy_mean[pos] / (real)tdiff;
64 para->getParH(lev)->vz_mean[pos] = para->getParH(lev)->vz_mean[pos] / (real)tdiff;
65
66 // fluctuations
67 para->getParH(lev)->vxx[pos] = para->getParH(lev)->vxx[pos] / (real)tdiff;
68 para->getParH(lev)->vyy[pos] = para->getParH(lev)->vyy[pos] / (real)tdiff;
69 para->getParH(lev)->vzz[pos] = para->getParH(lev)->vzz[pos] / (real)tdiff;
70 para->getParH(lev)->vxy[pos] = para->getParH(lev)->vxy[pos] / (real)tdiff;
71 para->getParH(lev)->vxz[pos] = para->getParH(lev)->vxz[pos] / (real)tdiff;
72 para->getParH(lev)->vyz[pos] = para->getParH(lev)->vyz[pos] / (real)tdiff;
73
74 para->getParH(lev)->vxx[pos] =
75 para->getParH(lev)->vxx[pos] - para->getParH(lev)->vx_mean[pos] * para->getParH(lev)->vx_mean[pos];
76 para->getParH(lev)->vyy[pos] =
77 para->getParH(lev)->vyy[pos] - para->getParH(lev)->vy_mean[pos] * para->getParH(lev)->vy_mean[pos];
78 para->getParH(lev)->vzz[pos] =
79 para->getParH(lev)->vzz[pos] - para->getParH(lev)->vz_mean[pos] * para->getParH(lev)->vz_mean[pos];
80 para->getParH(lev)->vxy[pos] =
81 para->getParH(lev)->vxy[pos] - para->getParH(lev)->vx_mean[pos] * para->getParH(lev)->vy_mean[pos];
82 para->getParH(lev)->vxz[pos] =
83 para->getParH(lev)->vxz[pos] - para->getParH(lev)->vx_mean[pos] * para->getParH(lev)->vz_mean[pos];
84 para->getParH(lev)->vyz[pos] =
85 para->getParH(lev)->vyz[pos] - para->getParH(lev)->vy_mean[pos] * para->getParH(lev)->vz_mean[pos];
86 }
87 }
88}
89
90
92
93
96
97 for (int lev = para->getCoarse(); lev <= para->getFine(); lev++) {
98 calcVelocityAndFluctuations(para, cudaMemoryManager, tdiff);
99
100 for (uint i = 0; i < para->getParH(lev)->numberOfNodes; i++) {
101 fluc_squared = (real)(
102 1.0 / 3.0 * (para->getParH(lev)->vxx[i] + para->getParH(lev)->vyy[i] + para->getParH(lev)->vzz[i]));
103 v_mean_squared = para->getParH(lev)->vx_mean[i] * para->getParH(lev)->vx_mean[i] +
104 para->getParH(lev)->vy_mean[i] * para->getParH(lev)->vy_mean[i] +
105 para->getParH(lev)->vz_mean[i] * para->getParH(lev)->vz_mean[i];
106 para->getParH(lev)->turbulenceIntensity[i] = (real)sqrt(fluc_squared / v_mean_squared);
107 }
108 }
109}
110
111
113{
114 for (int lev = para->getCoarse(); lev <= para->getFine(); lev++) {
115 for (unsigned int i = 0; i < para->getParH(lev)->numberOfNodes; i++) {
116 para->getParH(lev)->vxx[i] = (real)0.0;
117 para->getParH(lev)->vyy[i] = (real)0.0;
118 para->getParH(lev)->vzz[i] = (real)0.0;
119 para->getParH(lev)->vxy[i] = (real)0.0;
120 para->getParH(lev)->vxz[i] = (real)0.0;
121 para->getParH(lev)->vyz[i] = (real)0.0;
122 para->getParH(lev)->vx_mean[i] = (real)0.0;
123 para->getParH(lev)->vy_mean[i] = (real)0.0;
124 para->getParH(lev)->vz_mean[i] = (real)0.0;
125 }
126
127 cudaMemoryManager->cudaCopyTurbulenceIntensityHD(lev, para->getParH(lev)->numberOfNodes);
128 }
129}
130
132{
133 for (int lev = para->getCoarse(); lev <= para->getFine(); lev++) {
134 cudaMemoryManager->cudaFreeTurbulenceIntensity(lev);
135 }
136}
137
139{
140 for (int lev = para->getCoarse(); lev <= para->getFine(); lev++) {
141 std::vector<real *> data = { para->getParH(lev)->turbulenceIntensity.data() };
142 std::vector<std::string> datanames = { "ti" };
143 writeTiStuffToFile(para, timestep, para->getParH(lev)->numberOfNodes, data, datanames);
144 }
145}
146
148{
149 for (int lev = para->getCoarse(); lev <= para->getFine(); lev++) {
150 std::vector<real *> data = { para->getParH(lev)->vxx, para->getParH(lev)->vyy, para->getParH(lev)->vzz };
151 std::vector<std::string> datanames = { "vxx", "vyy", "vzz" };
152 writeTiStuffToFile(para, timestep, para->getParH(lev)->numberOfNodes, data, datanames);
153 }
154}
155
156void writeVeloMeansToFile(Parameter *para, uint timestep) {
157 for (int lev = para->getCoarse(); lev <= para->getFine(); lev++) {
158 std::vector<real *> data = { para->getParH(lev)->vx_mean,
159 para->getParH(lev)->vy_mean,
160 para->getParH(lev)->vz_mean };
161 std::vector<std::string> datanames = { "vx_mean", "vy_mean", "vz_mean" };
162 writeTiStuffToFile(para, timestep, para->getParH(lev)->numberOfNodes, data, datanames);
163 }
164}
165
167{
168 for (int lev = para->getCoarse(); lev <= para->getFine(); lev++) {
169 std::vector<real *> data = { para->getParH(lev)->vxx,
170 para->getParH(lev)->vyy,
171 para->getParH(lev)->vzz,
172 para->getParH(lev)->vx_mean,
173 para->getParH(lev)->vy_mean,
174 para->getParH(lev)->vz_mean,
175 para->getParH(lev)->turbulenceIntensity.data() };
176 std::vector<std::string> datanames = { "vxx", "vyy", "vzz", "vx_mean", "vy_mean", "vz_mean", "ti" };
177 writeTiStuffToFile(para, timestep, para->getParH(lev)->numberOfNodes, data, datanames);
178 }
179}
180
181void writeTiStuffToFile(Parameter *para, uint timestep, unsigned long long sizeOfTiArray, std::vector<real *> &data,
182 std::vector<std::string> &datanames)
183{
185 // set filename
186 std::string names;
187 std::for_each(datanames.begin(), datanames.end(), [&names](const std::string &s) { return names += "_" + s; });
188 std::string ffname = para->getFName() + StringUtil::toString<int>(para->getMyProcessID()) + "_" +
189 StringUtil::toString<int>(timestep) + names + "_ti.txt";
190 const char *fname = ffname.c_str();
192 // set ofstream
193 std::ofstream ostr;
195 // open file
196 ostr.open(fname);
198 // add header
199 ostr << "index_sp";
200 for (auto name : datanames) ostr << "\t" << name;
201 ostr << std::endl;
203 // fill file with data
204 for (size_t pos = 0; pos < sizeOfTiArray; pos++) {
205 ostr << pos;
206 for (auto dataset : data)
207 ostr << "\t" << dataset[pos];
208 ostr << std::endl;
209 }
211 // close file
212 ostr.close();
214}
215
216}
217
void cudaCopyTurbulenceIntensityHD(int lev, uint size)
void cudaCopyTurbulenceIntensityDH(int lev, uint size)
void cudaAllocTurbulenceIntensity(int lev, uint size)
Class for LBM-parameter management.
Definition Parameter.h:359
int getMyProcessID() const
std::shared_ptr< LBMSimulationParameter > getParH(int level) const
Pointer to instance of LBMSimulationParameter - stored on Host System.
int getCoarse() const
int getFine() const
std::string getFName() const
std::shared_ptr< T > SPtr
float real
Definition DataTypes.h:42
unsigned int uint
Definition DataTypes.h:47
void writeTurbulenceIntensityToFile(Parameter *para, uint timestep)
void writeTiStuffToFile(Parameter *para, uint timestep, unsigned long long sizeOfTiArray, std::vector< real * > &data, std::vector< std::string > &datanames)
void calcVelocityAndFluctuations(Parameter *para, CudaMemoryManager *cudaMemoryManager, uint tdiff)
void calcTurbulenceIntensity(Parameter *para, CudaMemoryManager *cudaMemoryManager, uint tdiff)
void writeVeloMeansToFile(Parameter *para, uint timestep)
void allocTurbulenceIntensity(Parameter *para, CudaMemoryManager *cudaMemoryManager)
void writeAllTiDatafToFile(Parameter *para, uint timestep)
void resetVelocityFluctuationsAndMeans(Parameter *para, CudaMemoryManager *cudaMemoryManager)
void writeVeloFluctuationToFile(Parameter *para, uint timestep)
void cudaFreeTurbulenceIntensityArrays(Parameter *para, CudaMemoryManager *cudaMemoryManager)