You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
bugfix: large membrane-embedding builds aborted at the end of the make_membrane_system embed step with a VMD segmentation fault (signal 11), even though the embedded, solvated, and neutralized system had already been written correctly. The clash-removal steps in bilayer_embed.tcl built atomselect "index <list>" selections directly from the per-atom index lists returned by measure contacts; on a large solvated system those lists run to ~10^5 atoms, and VMD's atom-selection parse tree has one node per index whose destructor (atomparser_node::~atomparser_node) is recursive — so freeing such a selection recurses ~10^5 frames deep and overflows the stack during interpreter teardown at VMD exit (confirmed via core dump: VMDApp::~VMDApp → DeleteInterpProc → AtomSel::~AtomSel → ParseTree::~ParseTree → hundreds of thousands of nested ~atomparser_node frames). The crash was purely in at-exit teardown but returned signal 11 and aborted the whole build, and it reproduced on VMD 1.9.3, 2.0.0, and 2.0.1a1 (it is a long-standing VMD bug, not version-specific). The clashing atoms are now mapped to (segname, resid) by reading directly from the parent whole-molecule (all) selection's attribute lists, so no large index selection — and no large parse tree — is ever constructed
bugfix: the same clash-removal loops invoked delatom $seg $resid (which deletes an entire residue) once per contacting atom rather than once per residue, so a lipid or water with several atoms near the protein was deleted on the first call and then re-deleted on every subsequent atom — emitting tens of thousands of no residue ... of segment ... messages on a large embed. Each clashing residue is now deduplicated and deleted exactly once
enhancement: embed_protein no longer appends a spurious trailing regenerate angles dihedrals to the embed psfgen script. It called writescript(regenerate=True, writepsf=False, writepdb=False), which emitted a regenerate with no following writepsf/writepdb to consume it — pure wasted work regenerating angles and dihedrals for the ~2M-atom post-autoionize context. The bilayer_embed script already regenerates before each structure it writes, so embed_protein now uses regenerate=False (matching the sibling quilt call site)