aboutsummaryrefslogtreecommitdiff
path: root/template/particles.mako
blob: cee3f4b39fd229fd8dea1b67bbe50e8e10d34d19 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
__kernel void update_particles(__global __read_only  float4* moments,
                               __global __read_only  int*    material,
                               __global __write_only float4* particles,
                               __global __read_only  float4* init_particles,
                               float aging)
{
  const unsigned int pid = get_global_id(0);

  float4 particle = particles[pid];

% if descriptor.d == 2:
  const unsigned int gid = floor(particle.y)*${memory.size_x} + floor(particle.x);
% elif descriptor.d == 3:
  const unsigned int gid = floor(particle.z)*${memory.size_x*memory.size_y} + floor(particle.y)*${memory.size_x} + floor(particle.x);
% endif

  const float4 moment = moments[gid];

  if (material[gid] == 1 && particle.w < 1.0) {
    particle.x += moment.y;
    particle.y += moment.z;
% if descriptor.d == 3:
    particle.z += moment.w;
% endif
    particle.w += min(particle.x, particle.y) * aging;
  } else {
    particle.xyz = init_particles[pid].xyz;
    particle.w   = particle.w-1.0;
  }

  particles[pid] = particle;
}