milupHPC documentation
  • src
  • sph
density.cu
Go to the documentation of this file.
1#include "../../include/sph/density.cuh"
2#include "../include/cuda_utils/cuda_launcher.cuh"
3
4namespace SPH {
5
6 namespace Kernel {
7
8 __global__ void calculateDensity(::SPH::SPH_kernel kernel, Tree *tree, Particles *particles, int *interactions, int numParticles) {
9
10 int i, j, inc, ip, d, noi;
11 real W, Wj, dx[DIM], dWdx[DIM], dWdr;
12 real rho, sml;
13 real x;
14#if DIM > 1
15 real y;
16#if DIM == 3
17 real z;
18#endif
19#endif
20
21 inc = blockDim.x * gridDim.x;
22 for (i = threadIdx.x + blockIdx.x * blockDim.x; i < numParticles; i += inc) {
23
24 x = particles->x[i];
25#if DIM > 1
26 y = particles->y[i];
27#if DIM == 3
28 z = particles->z[i];
29#endif
30#endif
31
32 sml = particles->sml[i];
33
34 #pragma unroll
35 for (d = 0; d < DIM; d++) {
36 dx[d] = 0;
37 }
38
39 kernel(&W, dWdx, &dWdr, dx, sml);
40 // "self-density"
41 rho = particles->mass[i] * W;
42
43 noi = particles->noi[i];
44
45 // sph sum for particle i
46 for (j = 0; j < noi; j++) {
47
48 ip = interactions[i * MAX_NUM_INTERACTIONS + j];
49
50#if (VARIABLE_SML || INTEGRATE_SML)
51 sml = 0.5 * (particles->sml[i] + particles->sml[ip]);
52#endif
53
54 dx[0] = x - particles->x[ip];
55#if DIM > 1
56 dx[1] = y - particles->y[ip];
57#if DIM > 2
58 dx[2] = z - particles->z[ip];
59#endif
60#endif
61
62 kernel(&W, dWdx, &dWdr, dx, sml);
63 rho += particles->mass[ip] * W;
64 }
65
66 particles->rho[i] = rho;
67
68 if (particles->rho[i] <= 0.) {
69 cudaTerminate("negative or zero rho! rho[%i] = %e\n", i, particles->rho[i]);
70 }
71 }
72 }
73
74 real Launch::calculateDensity(::SPH::SPH_kernel kernel, Tree *tree, Particles *particles, int *interactions, int numParticles) {
75 //ExecutionPolicy executionPolicy(numParticles, ::SPH::Kernel::calculateDensity, kernel, tree, particles,
76 // interactions, numParticles);
77 ExecutionPolicy executionPolicy;
78 return cuda::launch(true, executionPolicy, ::SPH::Kernel::calculateDensity, kernel, tree, particles, interactions, numParticles);
79 }
80
81 }
82}
ExecutionPolicy
Execution policy/instruction for CUDA kernel execution.
Definition: cuda_launcher.cuh:33
Particles
Particle(s) class based on SoA (Structur of Arrays).
Definition: particles.cuh:50
Particles::noi
integer * noi
(pointer to) number of interactions (array)
Definition: particles.cuh:118
Particles::x
real * x
(pointer to) x position (array)
Definition: particles.cuh:62
Particles::rho
real * rho
(pointer to) density (array)
Definition: particles.cuh:133
Particles::y
real * y
(pointer to) y position (array)
Definition: particles.cuh:70
Particles::sml
real * sml
(pointer to) smoothing length (array)
Definition: particles.cuh:113
Particles::mass
real * mass
(pointer to) mass (array)
Definition: particles.cuh:60
Particles::z
real * z
(pointer to) z position (array)
Definition: particles.cuh:78
Tree
Tree class.
Definition: tree.cuh:140
cudaTerminate
#define cudaTerminate(...)
Definition: cuda_utilities.cuh:70
Kernel
Definition: device_rhs.cuh:7
ProfilerIds::Time::tree
const char *const tree
Definition: h5profiler.h:57
ProfilerIds::numParticles
const char *const numParticles
Definition: h5profiler.h:29
SPH::Kernel::Launch::calculateDensity
real calculateDensity(::SPH::SPH_kernel kernel, Tree *tree, Particles *particles, int *interactions, int numParticles)
Wrapper for SPH::Kernel::calculateDensity().
Definition: density.cu:74
SPH::Kernel::calculateDensity
__global__ void calculateDensity(::SPH::SPH_kernel kernel, Tree *tree, Particles *particles, int *interactions, int numParticles)
Calculate the density .
Definition: density.cu:8
SPH
SPH related functions and kernels.
Definition: density.cuh:23
SPH::SPH_kernel
void(* SPH_kernel)(real *W, real dWdx[DIM], real *dWdr, real dx[DIM], real h)
Function pointer to generic SPH kernel function.
Definition: kernel.cuh:26
cuda::launch
real launch(bool timeKernel, const ExecutionPolicy &policy, void(*f)(Arguments...), Arguments... args)
CUDA execution wrapper function.
Definition: cuda_launcher.cuh:114
real
double real
Definition: parameter.h:15
MAX_NUM_INTERACTIONS
#define MAX_NUM_INTERACTIONS
Definition: parameter.h:106
DIM
#define DIM
Dimension of the problem.
Definition: parameter.h:38

milupHPC - src/sph/density.cu Source File
Generated on Wed Aug 31 2022 12:16:53 by Doxygen 1.9.3