多体模拟中的能量异常

计算科学 模拟 保护
2021-12-15 03:49:31

我正在尝试模拟许多物体之间的引力相互作用。我正在使用直接 PP 力计算和具有可变步长的四阶辛积分器。

模拟的能量由这个函数计算:

real energy(body* system,int n){
  int i,k,j;
  real energy_var=0;
  for(i=0;i<n;i++){
    energy_var += 0.5*system[i].mass*pow(mag(system[i].vel),2);
    for(j=i+1;j<n;j++){
      if(i==j){continue;}
      real position_vect[3]={0,0,0};

      for(k=0;k<3;k++){
    position_vect[k] = system[i].pos[k] - system[j].pos[k];}

      real distance = mag(position_vect);

      energy_var += -Gravitational_constant*system[i].mass*system[j].mass/distance;
    }
  }
  return energy_var;}

在 100 个物体的测试运行中,除了一个异常之外,能量(每 100000 次计算)似乎是恒定的。

Energy = -3.23197e+41
Energy = -3.23197e+41
Energy = -3.23197e+41
Energy = -4.24807e+41
Energy = -3.23197e+41
Energy = -3.23197e+41
Energy = -3.23197e+41
Energy = -3.23197e+41
Energy = -3.23197e+41
Energy = -3.23197e+41

如果这是一个数字或编码错误,即时间步长太高,那么我不希望能量返回到相同的常数值。是否存在可能导致此类错误的已知现象?

0个回答
没有发现任何回复~