Skip to content

Release v2.6.0

Choose a tag to compare

@github-actions github-actions released this 10 Jun 21:00
· 6 commits to main since this release
  • new feature: NAMD runs under SLURM can now span multiple nodes, controlled by a new namd.cpu-parallel-launcher option (auto | numactl | srun | mpirun | charmrun, default auto). Previously the SLURM CPU launch path always used numactl --interleave=all namd3 +p N, which runs a single node-local process and cannot use more than one node; on a multi-node allocation with an MPI NAMD build this failed immediately with the Charm++ "to use multiple processors ... charmrun +pN namd3 / build the mpi-linux-x86_64-smp version" error. auto keeps the single-node numactl launch for one-node allocations and switches to srun namd3 when SLURM_NNODES > 1; mpirun launches via the MPI runtime's own process manager (mpirun -np N namd3, e.g. Intel MPI Hydra); charmrun uses charmrun's ++mpiexec launcher for Charm++ net-layer builds. A companion namd.srun-mpi-type option emits srun --mpi=<plugin> (e.g. pmi2 / pmix) for MPI runtimes — notably Intel MPI — whose ranks would otherwise each initialize as an independent 1-PE job and collide on the output DCD with Couldn't open DCD file ...: File exists
  • bugfix: multi-node NAMD launches no longer stage parameter files to node-local scratch. _stage_params_to_local_scratch copied the parameter files to $TMPDIR and rewrote the NAMD config's parameters line to that absolute path, which is only valid when every PE runs on one node; under a multi-node srun/mpirun launch the files existed only on the launch node, so ranks on the other nodes died with UNABLE TO OPEN CHARMM PARAMETER FILE. Staging is now gated on a single-node launch, and multi-node runs read the parameter files from the shared filesystem (as they already do for structure/coordinates)
  • bugfix: the NAMD log parser no longer aborts the whole build on a single malformed line. Live NAMD stdout from a multi-rank run (e.g. srun/mpirun across nodes) can interleave output from different PEs, producing a garbled ENERGY: record with a token like 0LINE; process_energy_line then raised ValueError on float() and killed the run even though the simulation itself was fine. process_line now catches ValueError/IndexError/KeyError from a single line processor, logs it at debug level, and continues without appending a partial record
  • bugfix: subcontroller tasks now inherit the parent run's NAMD settings. Config.taskless_subconfig built the subcontroller configuration from schema defaults only, so MD runs launched inside make_membrane_system (which uses a subcontroller for the membrane-relaxation stages) ignored user overrides such as namd.cpu-parallel-launcher and reverted to the default — reintroducing the multi-node launch failure for the relaxation stages even when the top-level tasks were correctly configured. The subconfig now inherits the progenitor's user settings (NAMD launcher, paths, force field, psfgen options) and resets only the task list
  • bugfix: terminate/package builds that run no MD step (e.g. continuationpsfgenterminate) produced a consolidated minimal .prm with an empty NONBONDED section (nonbonded=0) and only partial bonded terms, so the packaged production run failed with DIDN'T FIND vdW PARAMETER FOR ATOM TYPE ... (the first such type encountered, e.g. NH3). The standard CHARMM .prm parameter files are staged by NAMD/MD tasks, so a build with no MD step had registered only topology .str stream files for consolidation; generate_minimal_params now always stages and includes the standard parameter set (via the NAMD scripter's fetch_standard_charmm_parameters) before consolidating, and warns loudly if a consolidated file still has no nonbonded parameters
  • bugfix: corrected a Tcl variable-dereference typo (set $box_min_z / set $box_max_z instead of set box_min_z / set box_max_z) in the bilayer-embed water-gap padding, which created a garbage-named variable and left the box bound unchanged when the water gap above or below the protein was under 3 Å
  • dependency: dropped the gputil runtime dependency (and the setuptools shim it required to provide distutils on Python 3.12+). Local NVIDIA GPU enumeration now queries nvidia-smi --query-gpu=index directly via a small helper, with the same behavior as before (enumerates physical GPUs, returns an empty list when nvidia-smi is absent or fails)