14 #ifdef KERNEL_INTEGRATE_TRAJECTORY 41 __global
const bool *mask_array,
42 __global ushort *traj_nsteps_array,
43 __global
float *traj_length_array,
44 __global char2 *trajectory_vec,
47 const float2 current_seed_point_vec )
50 __private uint idx, prev_idx, n_steps=0u;
51 __private
float l_trajectory=0.0f, dl=0.0f, dt=
DT_MAX;
52 __private float2 uv1_vec, uv2_vec, dxy1_vec, dxy2_vec,
53 vec=current_seed_point_vec, prev_vec=vec, next_vec;
61 vec, &next_vec, &idx);
62 if (!mask_array[idx]) {
64 &vec, &prev_vec, &next_vec, &n_steps, &idx, &prev_idx, trajectory_vec))
68 &vec, prev_vec, &n_steps, trajectory_vec);
74 traj_nsteps_array, traj_length_array);
80 #ifdef KERNEL_INTEGRATE_TRAJECTORY 108 __global
const bool *mask_array,
109 __global uint *slc_array,
110 __global uint *slt_array,
111 const uint global_id,
113 const float2 current_seed_point_vec,
114 const uint initial_rng_state )
117 __private uint idx, prev_idx, n_steps=0u, rng_state=initial_rng_state;
118 __private
float l_trajectory=0.0f, dl=0.0f, dt=
DT_MAX;
119 __private float2 uv1_vec, uv2_vec, dxy1_vec, dxy2_vec,
120 vec=current_seed_point_vec, prev_vec, next_vec;
124 if (mask_array[idx])
return;
130 &uv1_vec, &uv2_vec, vec, &next_vec, &idx);
131 if (!mask_array[idx]) {
133 &dxy1_vec, &dxy2_vec,
134 &vec, &prev_vec, next_vec,
135 &n_steps, &idx, &prev_idx,
136 mask_array, slt_array, slc_array))
140 &vec, prev_vec, &n_steps, &idx, &prev_idx,
141 mask_array, slt_array, slc_array);
static void euler_step_record(float *dt, float *dl, float *l_trajectory, const float2 uv_vec, float2 *vec, const float2 prev_vec, uint *n_steps, __global char2 *trajectory_vec)
Compute a single Euler integration step of of a streamline.
static void atomic_write_sl_data(__global uint *slt, __global uint *slc, const float l_trajectory)
Add the current streamline length (l_trajectory) to the current pixel of the slt accumulation array...
static void trajectory_jittered(__global const float2 *uv_array, __global const bool *mask_array, __global uint *slc_array, __global uint *slt_array, const uint global_id, const uint seed_idx, const float2 current_seed_point_vec, const uint initial_rng_state)
Integrate a jittered flow path downstream or upstream.
static bool runge_kutta_step_record(float *dt, float *dl, float *l_trajectory, float2 *dxy1_vec, float2 *dxy2_vec, float2 *vec, float2 *prev_vec, float2 *next_vec, uint *n_steps, uint *idx, uint *prev_idx, __global char2 *trajectory_vec)
Compute a single step of 2nd-order Runge-Kutta numerical integration of a streamline given precompute...
static bool runge_kutta_step_write_sl_data(float *dt, float *dl, float *l_trajectory, float2 *dxy1_vec, float2 *dxy2_vec, float2 *vec, float2 *prev_vec, const float2 next_vec, uint *n_steps, uint *idx, uint *prev_idx, __global const bool *mask_array, __global uint *slt_array, __global uint *slc_array)
Compute a single step of 2nd-order Runge-Kutta numerical integration of a streamline given precompute...
static void compute_step_vec(const float dt, const __global float2 *uv_array, float2 *dxy1_vec, float2 *dxy2_vec, float2 *uv1_vec, float2 *uv2_vec, const float2 vec, float2 *next_vec, uint *idx)
Compute a 2nd-order Runge-Kutta integration step along a streamline.
static void finalize_trajectory(const uint global_id, uint n_steps, float l_trajectory, __global ushort *traj_nsteps_array, __global float *traj_length_array)
Record the (final) trajectory length and count of integration steps to global arrays traj_length_arra...
static uint get_array_idx(float2 vec)
Compute the array index of the padded grid pixel pointed to by a float2 grid position vector (choice ...
static void euler_step_write_sl_data(float *dt, float *dl, float *l_trajectory, const float2 uv_vec, float2 *vec, const float2 prev_vec, uint *n_steps, uint *idx, uint *prev_idx, __global const bool *mask_array, __global uint *slt_array, __global uint *slc_array)
Compute a single Euler integration step of of a streamline.
static void compute_step_vec_jittered(const float dt, const __global float2 *uv_array, uint *rng_state, float2 *dxy1_vec, float2 *dxy2_vec, float2 *uv1_vec, float2 *uv2_vec, const float2 vec, float2 *next_vec, uint *idx)
Compute a jittered 2nd-order Runge-Kutta integration step along a streamline.
static void trajectory_record(__global const float2 *uv_array, __global const bool *mask_array, __global ushort *traj_nsteps_array, __global float *traj_length_array, __global char2 *trajectory_vec, const uint global_id, const uint seed_idx, const float2 current_seed_point_vec)
Integrate a streamline downstream or upstream; record the trajectory.