我正在尝试实现2维n体仿真的OpenMP版本.
但是存在一个问题:我假设每个粒子的初始速度和加速度都为零.当颗粒首先聚集在一起时,它们会高速分散,不再聚集.
这似乎与牛顿法不一致,对吧?
有人可以解释为什么会发生这种情况以及如何解决错误?
这是我的代码的一部分:
/* update one frame */
void update() {
int i, j;
omp_set_num_threads(8);
# pragma omp parallel private(j)
{
# pragma omp for schedule(static)
for ( i = 0; i < g_N; ++i ) {
g_pv[i].a_x = 0.0;
g_pv[i].a_y = 0.0;
for ( j = 0; j < g_N; ++j ) {
if (i == j)
continue;
double r_2 = pow((g_pv[i].pos_x - g_pv[j].pos_x),2) + pow((g_pv[i].pos_y - g_pv[j].pos_y),2);
g_pv[i].a_x += (-1) * G * g_pv[j].m …Run Code Online (Sandbox Code Playgroud)