Colvars atomsOfGroup and targetEquilSteps

in my real application, im trying to calculate the PMF using umbrella sampling along rmsd of the alpha-carbons between two conformations of an enzyme solvated in various calcium concentrations.

since the systems generated by charmmgui are too large to attach, i made a minimal (non-working) example using similar rhodo benchmark (protein, charmm, pppm, npt).

# colvars-rhodo.in
shell cd ../lammps-alphataubio/bench
include in.rhodo
shell cd ../../colvars-rhodo
fix 3 all colvars colvars-rhodo.colvars output colvars-rhodo seed 12345 tstat 2
run 100
# colvars-rhodo.colvars

atoms {
  name foo
  atomNumbersRange 1-3
}

colvar {
  name quux
  rmsd {
#    atoms { atomsOfGroup foo }
    atoms { atomNumbersRange 1-3 }
    refPositions { (-6.80572,-9.10264,-32.2296) (-6.81746,-9.4978,-33.1915) (-5.86092,-9.04028,-31.7994) }
  }
}

harmonic {
  colvars quux
  centers 0
  targetCenters 10
  targetNumStages 9
  targetNumSteps 10
  targetEquilSteps 9
  outputFreq 1
  outputCenters on
  outputEnergy on
  writeTIPMF on
}

“Description: This parameter defines a unique name for this atom group, which can be referred to in the definition of other atom groups (including in other colvars) by invoking atomsOfGroup as a selection keyword.”

First, i cant figure out how to use atomsOfGroup to define a group of atoms and refer to it later. there’s no example in colvars manual, or lammps examples directory. Nothing in previous matsci posts either.

colvars: # atomsOfGroup = “foo”
colvars: Error: cannot find atom group with name foo.
ERROR on proc 0: Fatal error in the collective variables module.
(src/COLVARS/colvarproxy_lammps.cpp:294)
Last command: run 100

"Keyword targetEquilSteps⟨⟨Number of steps discarded from TI estimate⟩⟩
Context: harmonic
Acceptable values: positive integer
Description: Defines the number of steps within each stage that are considered equilibration and discarded from the restraint free energy derivative estimate reported reported in the output."

Second by “tugging” on a protein in an unphysical manner at each stage of steered MD, i want to do ~90% of equilibration steps per window to let the protein settle into realistic intermediate structures along the way before collecting PMF measurements. However i get “Error: keyword “targetequilsteps” is not supported, or not recognized in this context.” but im using targetequilsteps in the harmonic context as described in colvars manual.

colvars: Initializing a new “harmonic” instance.
colvars: # name = “harmonic1” [default]
colvars: # colvars = { quux }
colvars: # stepZeroData = off [default]
colvars: # outputEnergy = on
colvars: # outputFreq = 1
colvars: # timeStepFactor = 1 [default]
colvars: # writeTISamples = off [default]
colvars: # writeTIPMF = on
colvars: # centers = { 0 }
colvars: # targetCenters = { 10 }
colvars: # targetNumSteps = 10
colvars: # targetNumStages = 9
colvars: # outputAccumulatedWork = off [default]
colvars: # outputCenters = on
colvars: # forceConstant = 1 [default]
colvars: # decoupling = off [default]
colvars: # targetForceConstant = -1 [default]
colvars: The force constant for colvar “quux” will be rescaled to 1 according to the specified width (1).
colvars: Error: keyword “targetequilsteps” is not supported, or not recognized in this context.
ERROR on proc 0: Fatal error in the collective variables module.
(src/COLVARS/colvarproxy_lammps.cpp:294)
Last command: run 100

$ lmp_beluga -h

Large-scale Atomic/Molecular Massively Parallel Simulator - 7 Feb 2024 - Development
Git info (develop / patch_7Feb2024_update1-366-g069919ddcd)

OS: Linux "Rocky Linux 8.9 (Green Obsidian)" 4.18.0-513.24.1.el8_9.x86_64 x86_64

Compiler: GNU C++ 11.3.0 with OpenMP 4.5
C++ standard: C++17
MPI v3.1: Open MPI v4.1.4, package: Open MPI [email protected] Distribution, ident: 4.1.4, repo rev: v4.1.4, May 26, 2022

Accelerator configuration:

KOKKOS package API: CUDA OpenMP Serial
KOKKOS package precision: double
Kokkos library version: 4.3.0

FFT information:

FFT precision  = double
FFT engine  = mpiFFT
FFT library = KISS
KOKKOS FFT engine  = mpiFFT
KOKKOS FFT library = cuFFT

Installed packages:

ASPHERE CG-DNA CG-SPICA COLVARS EXTRA-DUMP KOKKOS KSPACE MC MOLECULE RIGID 

Hi @alphataubio!

  1. Groups must currently be defined in the context of a colvar, so unless you have more than one colvar using the same group there is no point in using atomsOfGroup.
  2. targetEquilSteps is a keyword that only works when you change the force constant, but currently not when you change the restraint centers. To get a PMF from a steered-MD simulation, you either use the accumulated work (typically very crude on MD timescales), or extract snapshots from the SMD trajectory to initialize umbrella sampling windows.

Giacomo

for my applications in medicinal chemistry, i tried TI, ABF, steered-MD, umbrella sampling, and metadynamics.

the only one that works is metadynamics, all the other ones are a blooper reel of unphysical behaviors with the protein ripping itself apart when looking at the lammps trajectories.

due to very small and infrequent communication overhead between walkers, multiple-walkers metadynamics makes a lot of sense when scaling because each walkers can have it’s own node with lammps domain decomposition of ~80 cores, instead of decomposing a single metadynamics walker into a domain of 1600 cores with a lot of communication overhead for atoms and forces.