VirtualFluids 0.2.0
Parallel CFD LBM Solver
Loading...
Searching...
No Matches
CudaMemoryManager.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 CudamemoryManager_H
35#define CudamemoryManager_H
36
37#include <memory>
38#include <string>
39#include <vector>
40
42
43namespace vf::gpu {
44
45class Parameter;
46class ActuatorFarm;
47class Forest;
48class Probe;
49class PlanarAverageProbe;
50class VelocitySetter;
51class PrecursorWriter;
52class BuoyancyProviderPlanarAverage;
53class DampingLayer;
55{
56public:
57 CudaMemoryManager(std::shared_ptr<Parameter> parameter);
58 virtual ~CudaMemoryManager() = default;
59
60 void setMemsizeGPU(double admem, bool reset);
61 double getMemsizeGPU();
62
63 void cudaCopyPrint(int lev);
64 void cudaCopyMeanPrint(int lev);
65
66 void cudaAllocCoord(int lev);
67 void cudaCopyCoord(int lev);
68 void cudaFreeCoord(int lev);
69
70 void cudaAllocBodyForce(int lev);
71 void cudaCopyBodyForce(int lev);
72 void cudaFreeBodyForce(int lev);
73
74 void cudaCopyDataToHost(int lev);
75
76 void cudaAllocSP(int lev);
77 void cudaCopySP(int lev);
78 void cudaFreeSP(int lev);
79
80 void cudaAllocNeighborWSB(int lev);
81 void cudaCopyNeighborWSB(int lev);
82 void cudaFreeNeighborWSB(int lev);
83
84 void cudaAllocVeloBC(int lev);
85 void cudaCopyVeloBC(int lev);
86 void cudaFreeVeloBC(int lev);
87
88 void cudaAllocOutflowBC(int lev);
89 void cudaCopyOutflowBC(int lev);
90 void cudaFreeOutflowBC(int lev);
91
92 void cudaAllocNoSlipBC(int lev);
93 void cudaCopyNoSlipBC(int lev);
94 void cudaFreeNoSlipBC(int lev);
95
96 void cudaAllocGeomBC(int lev);
97 void cudaCopyGeomBC(int lev);
98 void cudaFreeGeomBC(int lev);
99
100 void cudaAllocPress(int lev);
101 void cudaCopyPress(int lev);
102 void cudaFreePress(int lev);
103
107
108
112
113 void cudaAllocForcing();
116 void cudaFreeForcing();
117
118 void cudaAllocLevelForcing(int level);
119 void cudaCopyLevelForcingToDevice(int level);
120 void cudaFreeLevelForcing(int level);
121
125
127 // 3D domain decomposition
130 const ProcessNeighbor27& neighborDevice) const;
132
135
137
142
143 void cudaAllocTurbulenceIntensity(int lev, uint size);
144 void cudaCopyTurbulenceIntensityHD(int lev, uint size);
145 void cudaCopyTurbulenceIntensityDH(int lev, uint size);
147
148 void cudaAllocMeanSP(int lev);
149 void cudaCopyMeanSP(int lev);
150 void cudaFreeMeanSP(int lev);
151
152 void cudaAllocMeanOut(int lev);
153 void cudaFreeMeanOut(int lev);
154
155 void cudaAllocMeanOutAD(int lev);
156 void cudaFreeMeanOutAD(int lev);
157
158 void cudaAllocInterfaceCF(int lev);
159 void cudaCopyInterfaceCF(int lev);
160 void cudaFreeInterfaceCF(int lev);
161
162 void cudaAllocInterfaceFC(int lev);
163 void cudaCopyInterfaceFC(int lev);
165 void cudaFreeInterfaceFC(int lev);
166
168 void cudaCopyInterfaceOffCF(int lev);
169 void cudaFreeInterfaceOffCF(int lev);
170
172 void cudaCopyInterfaceOffFC(int lev);
173 void cudaFreeInterfaceOffFC(int lev);
174
175 void cudaAllocSlipBC(int lev);
176 void cudaCopySlipBC(int lev);
177 void cudaFreeSlipBC(int lev);
178
179 void cudaAllocStressBC(int lev);
180 void cudaCopyStressBC(int lev);
181 void cudaFreeStressBC(int lev);
182
184 void cudaCopySurfaceLayerBC(int lev);
185 void cudaFreeSurfaceLayerBC(int lev);
186
187 void cudaAllocPrecursorBC(int lev);
188 void cudaAllocPrecursorData(int lev);
189 void cudaCopyPrecursorBC(int lev);
190 void cudaCopyPrecursorData(int lev);
191 void cudaFreePrecursorBC(int lev);
192 void cudaFreePrecursorData(int lev);
193
197
201
202 void cudaAllocGeomValuesBC(int lev);
203 void cudaCopyGeomValuesBC(int lev);
204 void cudaFreeGeomValuesBC(int lev);
205
206 void cudaAllocCpTop(int lev);
207 void cudaCopyCpTopInit(int lev);
208 void cudaCopyCpTop(int lev);
209 void cudaFreeCpTop(int lev);
210
211 void cudaAllocCpBottom(int lev);
212 void cudaCopyCpBottomInit(int lev);
213 void cudaCopyCpBottom(int lev);
214 void cudaFreeCpBottom(int lev);
215
216 void cudaAllocCpBottom2(int lev);
217 void cudaCopyCpBottom2Init(int lev);
218 void cudaCopyCpBottom2(int lev);
219 void cudaFreeCpBottom2(int lev);
220
224
229
233 void cudaCopyFsForRestart(int lev) const;
235 void cudaCopyFsForCheckPoint(int lev) const;
236 void cudaCopyFsForAllLevelsToHost() const;
238
239 void cudaAllocDragLift(int lev, int numofelem);
240 void cudaCopyDragLift(int lev, int numofelem);
241 void cudaFreeDragLift(int lev);
242
243 void cudaAlloc2ndMoments(int lev, int numofelem);
244 void cudaCopy2ndMoments(int lev, int numofelem);
245 void cudaFree2ndMoments(int lev);
246
247 void cudaAlloc3rdMoments(int lev, int numofelem);
248 void cudaCopy3rdMoments(int lev, int numofelem);
249 void cudaFree3rdMoments(int lev);
250
251 void cudaAllocHigherMoments(int lev, int numofelem);
252 void cudaCopyHigherMoments(int lev, int numofelem);
253 void cudaFreeHigherMoments(int lev);
254
255 void cudaAllocConcentration(int lev);
258 void cudaFreeConcentration(int lev);
259
265
269
273
277
281
286
290
291 // ActuatorFarm
296
301
306
310
315
320
324
325 // Forest
326
330
332 void cudaCopyForestVelocitiesHtoD(Forest* forest, std::vector<real>& velocitiesX,
333 std::vector<real>& velocitiesY,
334 std::vector<real>& velocitiesZ);
336
340
341 // BuoyancyProvider
348
353
357
358 // Probes
359 void cudaAllocProbeData(Probe* probe, int level);
360 void cudaCopyProbeDataHtoD(Probe* probe, int level);
361 void cudaCopyProbeDataDtoH(Probe* probe, int level);
362 void cudaFreeProbeData(Probe* probe, int level);
363
368
369 // Precursor Writer
370 void cudaAllocPrecursorWriter(PrecursorWriter* writer, int level);
373 void cudaFreePrecursorWriter(PrecursorWriter* writer, int level);
374
375private:
376 std::shared_ptr<Parameter> parameter;
377 double memsizeGPU = 0.0;
378};
379
380}
381
382#endif
383
void cudaCopyDirectionalBoundaryCondition(QforDirectionalBoundaryCondition &boundaryConditionHost, QforDirectionalBoundaryCondition &boundaryConditionDevice)
void cudaFreeIndices(ActuatorFarm *actuatorFarm)
void cudaCopyProcessNeighborFsHtoD(const ProcessNeighbor27 &neighborHost, const ProcessNeighbor27 &neighborDevice) const
void cudaCopyVelocitiesDtoH(ActuatorFarm *actuatorFarm)
void cudaFreeVelocities(ActuatorFarm *actuatorFarm)
void cudaFreeDirectionalBoundaryCondition(int level)
void cudaFreeTaggedFluidNodeIndices(CollisionTemplate tag, int lev)
void cudaAllocPlanarAverageProbeIndices(PlanarAverageProbe *planarAverageProbe, int level)
void cudaAlloc3rdMoments(int lev, int numofelem)
void cudaCopyBuoyancyProviderProfileParametersHtoD(BuoyancyProviderPlanarAverage *buoyancyProvider, int level)
void cudaCopyFsForCheckPoint(int lev) const
copy distributions from device to host
void cudaCopyIndicesHtoD(ActuatorFarm *actuatorFarm)
void cudaCopyTurbulentDiffusivityHostToDevice(int lev)
void cudaFreeLeafAreaDensity(Forest *forest)
void cudaAllocTaggedFluidNodeIndices(CollisionTemplate tag, int lev)
void cudaCopyBoundingVolumeIndicesHtoD(ActuatorFarm *actuatorFarm)
void cudaCopyConcentrationDirichletBCHostToDevice(int lev)
void cudaFreeFsForCheckPointAndRestart(int lev) const
void cudaFreeCoords(ActuatorFarm *actuatorFarm)
void cudaCopyLeafAreaDensityHtoD(Forest *forest)
void cudaCopyHigherMoments(int lev, int numofelem)
void cudaFreeBuoyancyProviderReductionParameters(BuoyancyProviderPlanarAverage *buoyancyProvider, int level)
void cudaAllocForces(ActuatorFarm *actuatorFarm)
void cudaCopyWallModel(WallModelParameters &wallModelHost, WallModelParameters &wallModelDevice, uint numberOfNodes)
void cudaCopyLocalReferenceTemperatureHostToDevice(int lev)
void cudaFreePlanarAverageProbeIndices(PlanarAverageProbe *planarAverageProbe, int level)
void cudaAllocConcFile(int lev)
void cudaAlloc2ndMoments(int lev, int numofelem)
void cudaCopyForcesHtoD(ActuatorFarm *actuatorFarm)
void cudaFreeDirectionalADBoundaryCondition(int level)
void cudaAllocLocalReferenceTemperature(int lev)
void cudaAllocDragLift(int lev, int numofelem)
void cudaCopyTaggedFluidNodeIndices(CollisionTemplate tag, int lev)
void cudaCopy3rdMoments(int lev, int numofelem)
void cudaCopyForcesDtoH(ActuatorFarm *actuatorFarm)
virtual void cudaCopyProcessNeighborIndex(const ProcessNeighbor27 &neighborHost, const ProcessNeighbor27 &neighborDevice) const
void cudaFreeForces(ActuatorFarm *actuatorFarm)
void cudaAllocBuoyancyProviderProfileParameters(BuoyancyProviderPlanarAverage *buoyancyProvider, int level)
void cudaAllocConcentrationDirichletBC(int lev)
void cudaCopyProbeDataDtoH(Probe *probe, int level)
void cudaAllocBladeOrientations(ActuatorFarm *actuatorFarm)
void cudaFreeProbeData(Probe *probe, int level)
void cudaCopyLevelForcingToDevice(int level)
void cudaAllocLeafAreaDensity(Forest *forest)
void cudaAllocIndices(ActuatorFarm *actuatorFarm)
void cudaCopyBuoyancyProviderReductionParametersDtoH(BuoyancyProviderPlanarAverage *buoyancyProvider, int level)
void cudaAllocWallModel(WallModelParameters &wallModelHost, WallModelParameters &wallModelDevice, uint numberOfNodes)
void cudaCopyBuoyancyProviderReferenceTemperaturesDtoHAsync(BuoyancyProviderPlanarAverage *buoyancyProvider, int level)
void cudaCopyTemperatureWallModel(TemperatureWallModelParameters &wallModelHost, TemperatureWallModelParameters &wallModelDevice, uint numberOfNodes)
void cudaCopyBladeOrientationsHtoD(ActuatorFarm *actuatorFarm)
void cudaFreeBuoyancyProviderProfileParameters(BuoyancyProviderPlanarAverage *buoyancyProvider, int level)
void cudaAllocPrecursorWriter(PrecursorWriter *writer, int level)
void cudaCopyVelocitiesHtoD(ActuatorFarm *actuatorFarm)
void cudaFreeForestIndices(Forest *forest)
void cudaFreePrecursorWriter(PrecursorWriter *writer, int level)
void cudaAllocPlanarAverageProbeSubgridScaleFluxes(PlanarAverageProbe *planarAverageProbe, int level)
void cudaFreeDampingLayerData(DampingLayer *dampingLayer, int level)
void cudaAllocVelocities(ActuatorFarm *actuatorFarm)
void cudaFreeProcessNeighbor(const ProcessNeighbor27 &neighborHost, const ProcessNeighbor27 &neighborDevice) const
void cudaFreeLocalReferenceTemperature(int lev)
void cudaCopyConcFile(int lev)
void cudaFreeBoundingVolumeIndices(ActuatorFarm *actuatorFarm)
void cudaFreeTemperatureWallModel(TemperatureWallModelParameters &wallModelHost, TemperatureWallModelParameters &wallModelDevice)
void cudaCopyTurbulenceIntensityHD(int lev, uint size)
void cudaCopyConcentrationHostToDevice(int lev)
void cudaCopyBuoyancyProviderReferenceTemperaturesHtoDAsync(BuoyancyProviderPlanarAverage *buoyancyProvider, int level)
void cudaCopyBladeOrientationsDtoH(ActuatorFarm *actuatorFarm)
void cudaAllocCoords(ActuatorFarm *actuatorFarm)
void cudaCopyCoordsHtoD(ActuatorFarm *actuatorFarm)
void cudaAllocBladeGeometries(ActuatorFarm *actuatorFarm)
void setMemsizeGPU(double admem, bool reset)
void cudaCopy2ndMoments(int lev, int numofelem)
void cudaAllocDirectionalADBoundaryCondition(QforDirectionalADBoundaryCondition &boundaryConditionHost, QforDirectionalADBoundaryCondition &boundaryConditionDevice)
void cudaCopyPrecursorWriterIndicesHtoD(PrecursorWriter *writer, int level)
void cudaAllocBoundingVolumeIndices(ActuatorFarm *actuatorFarm)
void cudaFreeConcFile(int lev)
void cudaAllocDampingLayerData(DampingLayer *dampingLayer, int level)
void cudaCopyFsForRestart(int lev) const
copy distributions from host to device
void cudaCopyPrecursorWriterOutputVariablesDtoH(PrecursorWriter *writer, int level)
void cudaCopyBuoyancyProviderProfileParametersDtoH(BuoyancyProviderPlanarAverage *buoyancyProvider, int level)
void cudaCopyConcentrationNoFluxBCHostToDevice(int lev)
void cudaAllocTemperatureWallModel(TemperatureWallModelParameters &wallModelHost, TemperatureWallModelParameters &wallModelDevice, uint numberOfNodes)
void cudaFreeBladeGeometries(ActuatorFarm *actuatorFarm)
void cudaCopyDampingLayerDataHtoD(DampingLayer *dampingLayer, int level)
void cudaCopyForestIndicesHtoD(Forest *forest)
void cudaCopyDirectionalADBoundaryCondition(QforDirectionalADBoundaryCondition &boundaryConditionHost, QforDirectionalADBoundaryCondition &boundaryConditionDevice)
void cudaAllocProbeData(Probe *probe, int level)
void cudaCopyProbeDataHtoD(Probe *probe, int level)
void cudaAllocForestIndices(Forest *forest)
void cudaFreeWallModel(WallModelParameters &wallModelHost, WallModelParameters &wallModelDevice)
void cudaCopyConcentrationDeviceToHost(int lev)
void cudaCopyBladeGeometriesDtoH(ActuatorFarm *actuatorFarm)
void cudaCopyTurbulenceIntensityDH(int lev, uint size)
void cudaAllocHigherMoments(int lev, int numofelem)
void cudaCopyProcessNeighborFsDtoH(const ProcessNeighbor27 &neighborHost, const ProcessNeighbor27 &neighborDevice) const
virtual ~CudaMemoryManager()=default
void cudaCopyCoordsDtoH(ActuatorFarm *actuatorFarm)
void cudaCopyLocalReferenceTemperatureDeviceToHost(int lev)
void cudaCopyDragLift(int lev, int numofelem)
void cudaCopyBuoyancyProviderReductionParametersHtoD(BuoyancyProviderPlanarAverage *buoyancyProvider, int level)
virtual void cudaAllocProcessNeighbor(const ProcessNeighbor27 &neighborHost, const ProcessNeighbor27 &neighborDevice)
void cudaFreeForestVelocities(Forest *forest)
void cudaAllocFsForCheckPointAndRestart(int lev) const
void cudaAllocForestVelocities(Forest *forest)
void cudaAllocDirectionalBoundaryCondition(QforDirectionalBoundaryCondition &boundaryConditionHost, QforDirectionalBoundaryCondition &boundaryConditionDevice)
void cudaCopyBladeGeometriesHtoD(ActuatorFarm *actuatorFarm)
void cudaAllocBuoyancyProviderReductionParameters(BuoyancyProviderPlanarAverage *buoyancyProvider, int level)
void cudaCopyForestVelocitiesHtoD(Forest *forest, std::vector< real > &velocitiesX, std::vector< real > &velocitiesY, std::vector< real > &velocitiesZ)
void cudaCopyConcentrationFluxBCHostToDevice(int lev)
void cudaFreePlanarAverageProbeSubgridScaleFluxes(PlanarAverageProbe *planarAverageProbe, int level)
void cudaAllocTurbulenceIntensity(int lev, uint size)
void cudaFreeBladeOrientations(ActuatorFarm *actuatorFarm)
void cudaCopyTurbulentDiffusivityDeviceToHost(int lev)
void cudaCopyConcentrationNeumannBCHostToDevice(int lev)
Computes spatial statistics across x, y or z-normal planes defined by planeNormal....
Probe writing planes of data to be used as inflow data in successor simulation using PrecursorBC The ...
Computes statistics of pointwise data. Data can be written to vtk-file or timeseries file....
Definition Probe.h:58
std::shared_ptr< T > SPtr
unsigned int uint
Definition DataTypes.h:47
CollisionTemplate
An enumeration for selecting a template of the collision kernel (CumulantK17)
Definition Calculation.h:57