C ++で多数の(〜1e5)粒子のポテンシャルエネルギーを計算しています。これを行うために、ペアごとの距離を計算する二重ループを実行し、それらの距離からシステムの総ポテンシャル エネルギーを計算します。以下はコードの関連部分です (データを定義する必要があり、いくつかのことが文脈から外れているため、コピー/貼り付けの準備ができていません。メソッドはまだ有効であり、これが私がここで示そうとしているものです) :
int colstart = 2;
int colend = 4;
double PE = 0;
double p_mass = 8.721e9 * 1.989e30; // mass of sim particle in kg
double mpc_to_m = 3.08567758e22; // meters per mpc
double G = 6.67384e-11; // grav. constant in mks units
// Calculating PE
for(int i = 0; i < data.size()-1; i++) // -1 is for empty line at the end of every file
{
//cout << i << " " << data[i].size() << endl;
for(int j = 0; j < i; j++)
{
double x_i = (double)atof(data[i][2].c_str());
double y_i = (double)atof(data[i][3].c_str());
double z_i = (double)atof(data[i][4].c_str());
double x_j = (double)atof(data[j][2].c_str());
double y_j = (double)atof(data[j][3].c_str());
double z_j = (double)atof(data[j][4].c_str());
double dist_betw = sqrt(pow((x_i-x_j),2) + pow(y_i-y_j,2) + pow(z_i-z_j,2)) * mpc_to_m;
PE += (-1 * G * pow(p_mass,2)) / (dist_betw);
}
}
このタイプの計算を行うためのより迅速な方法はありますか? 概算を含む提案も受け付けています。つまり、総ポテンシャル エネルギーが約 1% 程度まで返される場合です。
ありがとう!