t_vector waves(t_vector n, t_vector normal_perturb, t_vector p) { t_vector tmp; tmp = new_vector(n.x, n.y, n.z); if (!double_are_same(normal_perturb.x, 0.0)) tmp.x = calc_wave(n, n.x, normal_perturb.x, p.x); if (!double_are_same(normal_perturb.y, 0.0)) tmp.y = calc_wave(n, n.y, normal_perturb.y, p.y); if (!double_are_same(normal_perturb.z, 0.0)) tmp.z = calc_wave(n, n.z, normal_perturb.z, p.z); if (!double_are_same(n.x, tmp.x)) n.x = tmp.x; if (!double_are_same(n.y, tmp.y)) n.y = tmp.y; if (!double_are_same(n.z, tmp.z)) n.z = tmp.z; return (n); }
/* * Executes the entire simulation. * * i_max: how many data points are on a single wave * t_max: how many iterations the simulation should run * num_threads: how many threads to use * old_array: array of size i_max filled with data for t-1 * current_array: array of size i_max filled with data for t * next_array: array of size i_max. You should fill this with t+1 */ double *simulate(const int i_max, const int t_max, const int num_threads, double *old_array, double *current_array, double *next_array) { old = old_array; cur = current_array; next = next_array; g_i_max = i_max; g_t_max = t_max; g_num_threads = num_threads; calc_wave(); return current_array; }