milupHPC documentation
  • src
  • sph
soundspeed.cu
Go to the documentation of this file.
1#include "../../include/sph/soundspeed.cuh"
2#include "../../include/cuda_utils/cuda_launcher.cuh"
3
4__global__ void SPH::Kernel::initializeSoundSpeed(Particles *particles, Material *materials, int numParticles) {
5
6 register int i, inc, matId;
7 inc = blockDim.x * gridDim.x;
8
9 for (i = threadIdx.x + blockIdx.x * blockDim.x; i < numParticles; i += inc) {
10 matId = particles->materialId[i];
11
12 switch (materials[matId].eos.type) {
13 case EquationOfStates::EOS_TYPE_POLYTROPIC_GAS: {
14 particles->cs[i] = 0.0; // for gas this will be calculated each step by kernel calculateSoundSpeed
15 } break;
16 case EquationOfStates::EOS_TYPE_ISOTHERMAL_GAS: {
17 particles->cs[i] = 203.0; // this is pure molecular hydrogen at 10 K
18 //if (i % 1000 == 0) {
19 // printf("cs[%i]: %e\n", i, particles->cs[i]);
20 //}
21#if !SI_UNITS
22 particles->cs[i] /= 2.998e8; // speed of light
23#endif
24 } break;
25 case EquationOfStates::EOS_TYPE_LOCALLY_ISOTHERMAL_GAS: {
26 //TODO: initial sound speed for EOS_TYPE_LOCALLY_ISOTHERMAL_GAS?
27 } break;
28 //default:
29 // printf("not implemented!\n");
30 }
31 }
32
33}
34
35__global__ void SPH::Kernel::calculateSoundSpeed(Particles *particles, Material *materials, int numParticles) {
36
37 register int i, inc, matId;
38 int d;
39 int j;
40 double m_com;
41 register double cs, rho, pressure, eta, omega0, z, cs_sq, cs_c_sq, cs_e_sq, Gamma_e, mu, y; //Gamma_c;
42 int i_rho, i_e;
43
44 inc = blockDim.x * gridDim.x;
45
46 for (i = threadIdx.x + blockIdx.x * blockDim.x; i < numParticles; i += inc) {
47
48 matId = particles->materialId[i];
49
50 switch (materials[matId].eos.type) {
51 case EquationOfStates::EOS_TYPE_POLYTROPIC_GAS: {
52 particles->cs[i] = cuda::math::sqrt(materials[matId].eos.polytropic_K *
53 pow(particles->rho[i], materials[matId].eos.polytropic_gamma-1.0));
54 } break;
55 //case EquationOfStates::EOS_TYPE_ISOTHERMAL_GAS: {
56 // // do nothing since constant
57 //} break;
58 case EquationOfStates::EOS_TYPE_IDEAL_GAS: {
59 particles->cs[i] = cuda::math::sqrt(materials[matId].eos.polytropic_gamma * particles->p[i] /
60 particles->rho[i]);
61 if (std::isnan(particles->cs[i])) {
62 printf("particles->cs[%i] = %e, gamma = %e, p = %e, rho = %e\n", i, particles->cs[i],
63 materials[matId].eos.polytropic_gamma, particles->p[i], particles->rho[i]);
64 assert(0);
65 }
66 } break;
67 case EquationOfStates::EOS_TYPE_LOCALLY_ISOTHERMAL_GAS: {
68 real distance = 0.0;
69 distance = particles->x[i] * particles->x[i];
70#if DIM > 1
71 distance += particles->y[i] * particles->y[i];
72#if DIM == 3
73 distance += particles->z[i] * particles->z[i];
74#endif
75#endif
76 distance = cuda::math::sqrt(distance);
77 m_com = 0;
78 //TODO: how to calculate cs for EOS_TYPE_ISOTHERMAL_GAS
79 //for (j = 0; j < numPointmasses; j++) {
80 // m_com += pointmass.m[j];
81 //}
82 //double vkep = cuda::math::sqrt(gravConst * m_com/distance);
83 //p.cs[i] = vkep * scale_height;
84 particles->cs[i] = 0;
85 } break;
86 //default:
87 //printf("not implemented!\n");
88 }
89 }
90
91}
92
93real SPH::Kernel::Launch::initializeSoundSpeed(Particles *particles, Material *materials, int numParticles) {
94 ExecutionPolicy executionPolicy;
95 return cuda::launch(true, executionPolicy, ::SPH::Kernel::initializeSoundSpeed, particles, materials, numParticles);
96}
97
98real SPH::Kernel::Launch::calculateSoundSpeed(Particles *particles, Material *materials, int numParticles) {
99 ExecutionPolicy executionPolicy;
100 return cuda::launch(true, executionPolicy, ::SPH::Kernel::calculateSoundSpeed, particles, materials, numParticles);
101}
102
ExecutionPolicy
Execution policy/instruction for CUDA kernel execution.
Definition: cuda_launcher.cuh:33
Material
Material parameters.
Definition: material.cuh:88
Material::eos
EqOfSt eos
Definition: material.cuh:115
Particles
Particle(s) class based on SoA (Structur of Arrays).
Definition: particles.cuh:50
Particles::materialId
integer * materialId
(pointer to) material identifier (array)
Definition: particles.cuh:111
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::p
real * p
(pointer to) pressure (array)
Definition: particles.cuh:135
Particles::cs
real * cs
(pointer to) sound of speed (array)
Definition: particles.cuh:129
Particles::y
real * y
(pointer to) y position (array)
Definition: particles.cuh:70
Particles::z
real * z
(pointer to) z position (array)
Definition: particles.cuh:78
ProfilerIds::Time::SPH::pressure
const char *const pressure
Definition: h5profiler.h:105
ProfilerIds::numParticles
const char *const numParticles
Definition: h5profiler.h:29
SPH::Kernel::Launch::calculateSoundSpeed
real calculateSoundSpeed(Particles *particles, Material *materials, int numParticles)
Wrapper for SPH::Kernel::calculateSoundSpeed().
Definition: soundspeed.cu:98
SPH::Kernel::Launch::initializeSoundSpeed
real initializeSoundSpeed(Particles *particles, Material *materials, int numParticles)
Wrapper for SPH::Kernel::initializeSoundSpeed().
Definition: soundspeed.cu:93
SPH::Kernel::initializeSoundSpeed
__global__ void initializeSoundSpeed(Particles *particles, Material *materials, int numParticles)
Initialize the speed of sound .
Definition: soundspeed.cu:4
SPH::Kernel::calculateSoundSpeed
__global__ void calculateSoundSpeed(Particles *particles, Material *materials, int numParticles)
Calculate the speed of sound .
Definition: soundspeed.cu:35
cuda::math::sqrt
__device__ real sqrt(real a)
Square root of a floating point value.
Definition: cuda_utilities.cu:456
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
EOS_TYPE_LOCALLY_ISOTHERMAL_GAS
@ EOS_TYPE_LOCALLY_ISOTHERMAL_GAS
ideal gas equation, set polytropic_gamma in material.cfg
Definition: parameter.h:248
EOS_TYPE_IDEAL_GAS
@ EOS_TYPE_IDEAL_GAS
this is pure molecular hydrogen at 10 K
Definition: parameter.h:245
EOS_TYPE_ISOTHERMAL_GAS
@ EOS_TYPE_ISOTHERMAL_GAS
polytropic EOS for gas, needs polytropic_K and polytropic_gamma in material.cfg file
Definition: parameter.h:239
EOS_TYPE_POLYTROPIC_GAS
@ EOS_TYPE_POLYTROPIC_GAS
Definition: parameter.h:236
EqOfSt::polytropic_gamma
real polytropic_gamma
Definition: material.cuh:78

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