nanover.imd.imd_force module
Provides a reference implementation of the IMD forces used by NanoVer.
For details, and if you find these functions helpful, please cite [1].
- class nanover.imd.imd_force.ForceCalculator(*args, **kwargs)
Bases:
Protocol
- nanover.imd.imd_force.apply_single_interaction_force(positions: ndarray[Any, dtype[_ScalarType_co]], masses: ndarray[Any, dtype[_ScalarType_co]], interaction, forces: ndarray[Any, dtype[_ScalarType_co]], periodic_box_lengths: ndarray[Any, dtype[_ScalarType_co]] | None = None) float
Calculates the energy and adds the forces to the particles of a single application of an interaction potential.
- Parameters:
positions – Collection of N particle position vectors, in nm.
masses – Collection on N particle masses, in a.m.u.
interaction – An interaction to be applied.
forces – Array of N force vectors to accumulate computed forces into (in kJ/(mol*nm)).
periodic_box_lengths – Orthorhombic periodic box lengths to use to apply minimum image convention.
- Returns:
energy in kJ/mol.
- nanover.imd.imd_force.calculate_constant_force(particle_position: ndarray[Any, dtype[_ScalarType_co]], interaction_position: ndarray[Any, dtype[_ScalarType_co]], periodic_box_lengths: ndarray[Any, dtype[_ScalarType_co]] | None = None) Tuple[float, ndarray[Any, dtype[_ScalarType_co]]]
Applies a constant force that is independent of the distance between the particle and the interaction site. Applies no force when the two overlap.
- Parameters:
particle_position – The position of the particle.
interaction_position – The position of the interaction.
periodic_box_lengths – Vector of periodic boundary lengths.
- Returns:
The energy of the interaction, and the force to be applied to the particle.
- nanover.imd.imd_force.calculate_gaussian_force(particle_position: ndarray[Any, dtype[_ScalarType_co]], interaction_position: ndarray[Any, dtype[_ScalarType_co]], periodic_box_lengths: ndarray[Any, dtype[_ScalarType_co]] | None = None) Tuple[float, ndarray[Any, dtype[_ScalarType_co]]]
Computes the interactive Gaussian force.
The force applied to the given particle position is determined by the position of a Gaussian centered on the interaction position.
- Parameters:
particle_position – The position of the particle.
interaction_position – The position of the interaction.
periodic_box_lengths – The periodic box vectors. If passed,
- Returns:
The energy of the interaction, and the force to be applied to the particle.
- nanover.imd.imd_force.calculate_imd_force(positions: ndarray[Any, dtype[_ScalarType_co]], masses: ndarray[Any, dtype[_ScalarType_co]], interactions: Iterable[ParticleInteraction], periodic_box_lengths: ndarray[Any, dtype[_ScalarType_co]] | None = None) Tuple[float, ndarray[Any, dtype[_ScalarType_co]]]
Reference implementation of the NanoVer IMD force.
Given a collection of interactions, particle positions and masses, computes the force to be applied to each particle for each interaction and accumulates them into an array.
- Parameters:
positions – Array of N particle positions, in nm, with shape (N,3).
masses – Array of N particle masses, in a.m.u, with shape (N,).
interactions – Collection of interactions to be applied.
periodic_box_lengths – Orthorhombic periodic box lengths. If given, the minimum image convention is applied to the calculation.
- Returns:
energy in kJ/mol, accumulated forces (in kJ/(mol*nm)) to be applied.
- nanover.imd.imd_force.calculate_spring_force(particle_position: ndarray[Any, dtype[_ScalarType_co]], interaction_position: ndarray[Any, dtype[_ScalarType_co]], periodic_box_lengths: ndarray[Any, dtype[_ScalarType_co]] | None = None) Tuple[float, ndarray[Any, dtype[_ScalarType_co]]]
Computes the interactive harmonic potential (or spring) force.
The force applied to the given particle position is determined by placing a spring between the particle position and the interaction, and pulling the particle towards the interaction site.
- Parameters:
particle_position – The position of the particle.
interaction_position – The position of the interaction.
k – The spring constant. A higher value results in a stronger force.
periodic_box_lengths – Vector of periodic boundary lengths.
- Returns:
The energy of the interaction, and the force to be applied to the particle.
- nanover.imd.imd_force.get_center_of_mass_subset(positions: ndarray, masses: ndarray, subset: Iterable[int], periodic_box_lengths: ndarray | None = None) ndarray
Gets the center of mass of [a subset of] positions. If orthorhombic periodic box lengths are given, the minimal image convention is applied, wrapping the subset into the periodic boundary before calculating the center of mass.
- Parameters:
positions – List of N vectors representing positions.
masses – List of N vectors representing masses.
subset – Indices [0,N) of positions to include. If None, all positions included.
periodic_box_lengths – Orthorhombic periodic box lengths to wrap positions into before calculating centre of mass.
- Returns:
The center of mass of the subset of positions.
- nanover.imd.imd_force.get_sparse_forces(user_forces: ndarray[Any, dtype[_ScalarType_co]]) Tuple[ndarray[Any, dtype[_ScalarType_co]], ndarray[Any, dtype[_ScalarType_co]]]
Takes in an array of user forces acting on the system containing N particles and outputs two arrays that describe these user forces in a sparse form:
The first contains the indices of the particles for which the user forces are non-zero
The second contains the non-zero user forces associated with each index
- Parameters:
user_forces – Array of user forces with dimensions (N, 3)
- Returns:
Array of particle indices, Array of corresponding user forces
- nanover.imd.imd_force.wrap_pbc(positions: ndarray, periodic_box_lengths: ndarray)
Wraps a list of positions into the given orthorhombic periodic box.
- Parameters:
positions – List of N vectors with shape (N,3).
periodic_box_lengths – Box lengths of a periodic box positioned at the origin.
- Returns:
Positions wrapped into the minimum image of the orthorhombic periodic box.