milupHPC documentation
  • src
  • sph
viscosity.cu
Go to the documentation of this file.
1#include "../../include/sph/viscosity.cuh"
2#include "../include/cuda_utils/cuda_launcher.cuh"
3
4#if NAVIER_STOKES
5__global__ void SPH::Kernel::calculate_shear_stress_tensor(::SPH::SPH_kernel kernel, Material *materials, Particles *particles, int *interactions, int numRealParticles) {
6 int i, inc;
7 inc = blockDim.x * gridDim.x;
8 //Particle Loop
9 for (i = threadIdx.x + blockIdx.x * blockDim.x; i < numRealParticles; i += inc) {
10//#if SHAKURA_SUNYAEV_ALPHA
11// double R = cuda::math::sqrt(p.x[i]*p.x[i] + p.y[i]*p.y[i]);
12// p_rhs.eta[i] = matalpha_shakura[p_rhs.materialId[i]] * p.cs[i] * p.rho[i] * scale_height * R ;
13//#elif CONSTANT_KINEMATIC_VISCOSITY
14 // TODO: matnu
15 //particles->eta[i] = matnu[particles->materialId[i]] * particles->rho[i];
16//#else
17 cudaTerminate("not implemented yet!\n")
18//#endif
19 }
20}
21#endif // NAVIER_STOKES
22
23#if NAVIER_STOKES
24__global__ void SPH::Kernel::calculate_kinematic_viscosity(::SPH::SPH_kernel kernel, Material *materials, Particles *particles, int *interactions, int numRealParticles) {
25
26 int i, inc;
27 int e, f, g;
28 int j, k;
29
30 inc = blockDim.x * gridDim.x;
31 for (i = threadIdx.x + blockIdx.x * blockDim.x; i < numRealParticles; i += inc) {
32
33 real dv[DIM];
34 real dr[DIM];
35 real r;
36 real sml;
37 real dWdr, dWdrj, W, Wj;
38 real dWdx[DIM], dWdxj[DIM];
39
40 for (k = 0; k < DIM * DIM; k++) {
41 particles->Tshear[i*DIM*DIM+k] = 0.0;
42 }
43
44 for (k = 0; k < particles->noi[i]; k++) {
45
46 j = interactions[i * MAX_NUM_INTERACTIONS + k];
47
48 dv[0] = particles->vx[i] - particles->vx[j];
49#if DIM > 1
50 dv[1] = particles->vy[i] - particles->vy[j];
51#if DIM == 3
52 dv[2] = particles->vz[i] - particles->vz[j];
53#endif
54#endif
55
56 dr[0] = particles->x[i] - particles->x[j];
57#if DIM > 1
58 dr[1] = particles->y[i] - particles->y[j];
59#if DIM > 2
60 dr[2] = particles->z[i] - particles->z[j];
61#endif
62#endif
63
64 r = 0;
65 for (e = 0; e < DIM; e++) {
66 r += dr[e] * dr[e];
67 dWdx[e] = 0.0;
68 }
69 W = 0.0;
70 dWdr = 0.0;
71 r = cuda::math::sqrt(r);
72
73 sml = particles->sml[i];
74
75#if (VARIABLE_SML || INTEGRATE_SML) // || DEAL_WITH_TOO_MANY_INTERACTIONS)
76 sml = 0.5*(particles->sml[i] + particles->sml[j]);
77#endif
78
79 kernel(&W, dWdx, &dWdr, dr, sml);
80
81
82 double trace = 0;
83 for (e = 0; e < DIM; e++) {
84# if (SPH_EQU_VERSION == 1)
85 trace += particles->mass[j]/particles->rho[i] * (-dv[e])*dWdx[e] ;
86# elif (SPH_EQU_VERSION == 2)
87 trace += particles->mass[j]/particles->rho[j] * (-dv[e])*dWdx[e] ;
88#endif
89 }
90
91 for (e = 0; e < DIM; e++) {
92 for (f = 0; f < DIM; f++) {
93# if (SPH_EQU_VERSION == 1)
94 particles->Tshear[i*DIM*DIM+e*DIM+f] += particles->mass[j]/particles->rho[i] * (-dv[e]*dWdx[f] - dv[f]*dWdx[e]);
95# elif (SPH_EQU_VERSION == 2)
96 particles->Tshear[i*DIM*DIM+e*DIM+f] += particles->mass[j]/particles->rho[j] * (-dv[e]*dWdx[f] - dv[f]*dWdx[e]);
97#endif
98 // traceless
99 if (e == f) {
100# if (SPH_EQU_VERSION == 1)
101 particles->Tshear[i*DIM*DIM+e*DIM+f] -= 2./3 * trace;
102# elif (SPH_EQU_VERSION == 2)
103 particles->Tshear[i*DIM*DIM+e*DIM+f] -= 2./3 * trace;
104#endif
105 }
106 }
107 }
108 }
109 }
110}
111#endif // NAVIER STOKES
112
Material
Material parameters.
Definition: material.cuh:88
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
Particles::vz
real * vz
(pointer to) z velocity (array)
Definition: particles.cuh:80
Particles::vx
real * vx
(pointer to) x velocity (array)
Definition: particles.cuh:64
Particles::vy
real * vy
(pointer to) y velocity (array)
Definition: particles.cuh:72
cudaTerminate
#define cudaTerminate(...)
Definition: cuda_utilities.cuh:70
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::math::sqrt
__device__ real sqrt(real a)
Square root of a floating point value.
Definition: cuda_utilities.cu:456
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/viscosity.cu Source File
Generated on Wed Aug 31 2022 12:16:53 by Doxygen 1.9.3