Условие близкого столкновения для кода Nbody

Я написал простой N-body code, используя алгоритм leapfrog. Теперь то, что я пытаюсь сделать, это создать условие близкого столкновения. Я хочу, чтобы код сообщал мне, когда две частицы подходят ближе, чем на определенное расстояние. Это то, что я придумал, мне кажется, что это должно работать, но это не так. Это в C++: В коде: num - это число частиц, r[num][3] - это глобальный 2d-массив, который содержит 3d-позицию каждой частицы (координаты x,y,z). Я просто пишу функцию check_collisions, которая выполняется в основной функции под циклом времени, который развивает систему. Я пытался сохранить расстояния между любой парой частиц и сравнить их с некоторым расстоянием (в данном случае rad[i]+rad[j], где rad[num] - глобальный массив радиуса). каждой частицы). Если расстояние между двумя частицами меньше чем rad[i]+rad[j], то я хочу, чтобы переменная пустышка увеличилась. Затем я хочу кое-что сделать с этими частицами, оставив остальные нетронутыми. Проблема в том, что пустышка все равно 0, несмотря ни на что. Я независимо проверяю, что 2 частицы в одном из моих испытаний на самом деле близки друг к другу в течение нескольких временных шагов, но фиктивная переменная остается на нуле. Вот функция

int check_collisions(int num, double dt) 
{ double rji[3]; double r2, dis; int dummy = 0;
   double rad_sum[num][num];  double coll_dis[num][num];
   for (int l = 0; l < num; l++)
    { for (int m = 0; m < num; m++)  
      { coll_dis[l][m] = 10000; rad_sum[l][m] = 0;} }

  for (int i = 0; i < num; i++)
   { for (int j = i+1; j < num; j++)  
     {  
      for (int k = 0; k < 3; k++)
        { rji[k] = r[j][k] - r[i][k]; }  
      for (int k = 0; k < 3; k++) 
        { r2 += rji[k] * rji[k];      }
      dis = sqrt(r2);
      coll_dis[i][j] = dis;
      rad_sum[i][j] = rad[i]+rad[j];
      }//end for j
   }//end for i

  for (int i = 0; i < num; i++)
  { for (int j = i+1; j < num; j++)
    {      
      if ( coll_dis[i][j] <= rad_sum[i][j] )
      {   dummy++;
      }

      if (dummy != 0)
       {    do {  some stuff involving dt
             }  while (coll_dis[i][j] <= rad_sum[i][j]);
       }

    }
   }

}

0 ответов

Другие вопросы по тегам