diff --git a/compute.py b/compute.py index 6fbb319..b35bdcc 100644 --- a/compute.py +++ b/compute.py @@ -1460,7 +1460,8 @@ def run_simulation(save_trajectory=0): "gravity_strength": str(GRAVITY_STRENGTH), "driving_force": str(DRIVING_FORCE), "use_marker": str(use_marker), - "alpha": ",".join(str(a) for a in (alpha if isinstance(alpha, list) else [alpha]))} + "alpha": ",".join(str(a) for a in (alpha if isinstance(alpha, list) else [alpha])), + "atom_radii": ",".join(str(r) for r in ATOM_RADII)} ) print(f"[compute] display.txt 已保存至: {disp_path} ({n_frames_actual} 帧)") diff --git a/draw.py b/draw.py index 3c48389..e8656f5 100644 --- a/draw.py +++ b/draw.py @@ -67,7 +67,12 @@ DISP_T = DISP_STEP * DT # 原子信息 ATOM_IDS = disp_data["atom_ids"] -ATOM_RADII = np.full(N_ATOMS, float(h.get("ball_radius", 0.5))) +# 优先使用 per-atom 半径,否则用统一的 ball_radius +_raw_radii = h.get("atom_radii", "") +if _raw_radii.strip(): + ATOM_RADII = np.array([float(x) for x in _raw_radii.split(",")]) +else: + ATOM_RADII = np.full(N_ATOMS, float(h.get("ball_radius", 0.5))) PLOT_ATOM_ROW = 0 PLOT_ATOM_ID = int(ATOM_IDS[0]) BOND_PAIRS = [] # display 格式不含成键信息,从原始数据加载 diff --git a/dynamics.py b/dynamics.py index 68f5a36..1842a3f 100644 --- a/dynamics.py +++ b/dynamics.py @@ -253,7 +253,8 @@ def run_case(config_path, runtime_base, input_dir="input", output_dir="output", "gravity_strength": str(data.get("gravity_strength", 1.0)), "driving_force": str(data.get("driving_force", 0)), "use_marker": str(config.get("use_marker", 0)), - "alpha": _fmt_alpha(data.get("alpha", 0.2))} + "alpha": _fmt_alpha(data.get("alpha", 0.2)), + "atom_radii": _fmt_alpha(data.get("atom_radii", []))} n_frames = len(indices) compute.save_display_txt(