perf: 降低 JSON 输出精度 15→8 位 + 添加 I/O 阶段提示
- C/C++/Fortran 引擎:%.15g/setprecision(15)/g0 → %.8g/g0.8 - 添加 "正在写入轨迹数据…" 提示,说明 100% 后的等待原因 - trajectory.txt 文件从 419MB → 407MB(仍有优化空间)
This commit is contained in:
+9
-7
@@ -790,12 +790,14 @@ static void write_trajectory_json(const char *path, const Trajectory *traj,
|
||||
const char *names[] = {"traj_x","traj_y","traj_z","traj_vx","traj_vy","traj_vz"};
|
||||
double *arrs[] = {traj->x, traj->y, traj->z, traj->vx, traj->vy, traj->vz};
|
||||
|
||||
printf("[C-engine] 正在写入轨迹数据…\n");
|
||||
fflush(stdout);
|
||||
for (int a = 0; a < 6; a++) {
|
||||
fprintf(f, " \"%s\": [\n", names[a]);
|
||||
for (int t = 0; t < traj->n_steps; t++) {
|
||||
fprintf(f, " [");
|
||||
for (int i = 0; i < traj->n_atoms; i++) {
|
||||
fprintf(f, "%.15g", arrs[a][t * traj->n_atoms + i]);
|
||||
fprintf(f, "%.8g", arrs[a][t * traj->n_atoms + i]);
|
||||
if (i < traj->n_atoms - 1) fputc(',', f);
|
||||
}
|
||||
fprintf(f, "]");
|
||||
@@ -809,12 +811,12 @@ static void write_trajectory_json(const char *path, const Trajectory *traj,
|
||||
|
||||
/* 标量参数 */
|
||||
fprintf(f, " \"NT\": %d,\n", params->NT);
|
||||
fprintf(f, " \"DT\": %.15g,\n", params->DT);
|
||||
fprintf(f, " \"DT\": %.8g,\n", params->DT);
|
||||
fprintf(f, " \"NSTEP\": %d,\n", params->NSTEP);
|
||||
fprintf(f, " \"method\": \"%s\",\n", params->method);
|
||||
fprintf(f, " \"warmup_steps\": %d,\n", params->warmup_steps);
|
||||
fprintf(f, " \"G\": [%.15g, %.15g, %.15g],\n", params->G[0], params->G[1], params->G[2]);
|
||||
fprintf(f, " \"B\": [%.15g, %.15g, %.15g],\n", params->B[0], params->B[1], params->B[2]);
|
||||
fprintf(f, " \"G\": [%.8g, %.8g, %.8g],\n", params->G[0], params->G[1], params->G[2]);
|
||||
fprintf(f, " \"B\": [%.8g, %.8g, %.8g],\n", params->B[0], params->B[1], params->B[2]);
|
||||
|
||||
fprintf(f, " \"atom_ids\": [");
|
||||
for (int i = 0; i < atoms->n_atoms; i++) {
|
||||
@@ -826,7 +828,7 @@ static void write_trajectory_json(const char *path, const Trajectory *traj,
|
||||
fprintf(f, " \"atom_masses\": [");
|
||||
for (int i = 0; i < atoms->n_atoms; i++) {
|
||||
if (i > 0) fputc(',', f);
|
||||
fprintf(f, "%.15g", atoms->masses[i]);
|
||||
fprintf(f, "%.8g", atoms->masses[i]);
|
||||
}
|
||||
fprintf(f, "],\n");
|
||||
|
||||
@@ -840,14 +842,14 @@ static void write_trajectory_json(const char *path, const Trajectory *traj,
|
||||
fprintf(f, " \"bond_stiffness\": [");
|
||||
for (int b = 0; b < bonds->n_bonds; b++) {
|
||||
if (b > 0) fputc(',', f);
|
||||
fprintf(f, "%.15g", bonds->stiffness[b]);
|
||||
fprintf(f, "%.8g", bonds->stiffness[b]);
|
||||
}
|
||||
fprintf(f, "],\n");
|
||||
|
||||
fprintf(f, " \"bond_rest_lengths\": [");
|
||||
for (int b = 0; b < bonds->n_bonds; b++) {
|
||||
if (b > 0) fputc(',', f);
|
||||
fprintf(f, "%.15g", bonds->rest_lengths[b]);
|
||||
fprintf(f, "%.8g", bonds->rest_lengths[b]);
|
||||
}
|
||||
fprintf(f, "],\n");
|
||||
fprintf(f, " \"driving_force\": %d\n", params->driving_force);
|
||||
|
||||
Reference in New Issue
Block a user