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:
2026-06-12 05:53:27 +08:00
parent 52505e9aff
commit c158c74609
4 changed files with 15 additions and 11 deletions
+9 -7
View File
@@ -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);