Recent Releases of Molly
Molly - v0.22.2
New features
write_structureis added to allow a system to be written to a file.TrajectoryWriternow writes out better PDB files.StructureWriteris now an alias forTrajectoryWriterwith the PDB format and will be removed in a future breaking release. It is recommended to replace instances ofStructureWriterwithTrajectoryWriter.- The
excluded_resandwrite_boundarykeyword arguments can now be given toTrajectoryWriter. Theatom_indskeyword argument can now be given toStructureWriter. AtomDatacan now storechain_idandhetero_atom, allowing better file writing.- The Urey-Bradley potential is added as
UreyBradley. - The mixing functions
waldman_hagler_σ_mixing,waldman_hagler_ϵ_mixingandfender_halsey_ϵ_mixingare added. - Additional keyword arguments can now be provided to the
Systemconstructor taking in an AtomsBase system.
Bug fixes
- A bug when initialising forces in
LangevinSplittingis fixed. - A bug when converting from an AtomsBase system without velocities is fixed.
- A bug when setting up a system with infinite boundaries from a file is fixed.
- Julia
Published by jgreener64 11 months ago
Molly - v0.22.1
New features
- Writing out trajectory files in formats supported by Chemfiles.jl, including DCD and XTC, is added via the
TrajectoryWriterlogger. MolecularTopologycan now optionally contain a list of indices of bonded atom pairs.- The
weight_specialoption is added toMie. - Functions required to calculate gradients for
MorseBondare added.
Performance improvements
- Simulation with
ASECalculatoris made faster.
Bug fixes
- A memory issue when simulating with
ASECalculatoris fixed. - A bug in nested multithreading for
DistanceNeighborFinderandTreeNeighborFinderis fixed.
- Julia
Published by jgreener64 about 1 year ago
Molly - v0.22.0
The package is rewritten to use Enzyme.jl rather than Zygote.jl for differentiable simulations. This allows mutating code to be used, leading to better performance on CPU and GPU. In addition, faster CUDA kernels are added and support for other GPU backends is added via KernelAbstractions.jl.
Breaking changes
CoordinateLogger,VelocityLoggerandForceLoggerare renamed toCoordinatesLogger,VelocitiesLoggerandForcesLoggerrespectively for consistency.- During system setup the
gpukeyword argument is replaced byarray_type, withCuArraygiving the same behaviour as before. Use of other array types such asROCArrayis supported. Theuse_cell_listkeyword argument is replaced withneighbor_finder_type, with the default depending on the backend. - The second type parameter to
Systemis changed from aBoolindicating whether the system is on the GPU to the array type of the system. - Giving the
force_unitsandenergy_unitsis no longer required when constructing pairwise interactions such asLennardJones. In addition, mixing functions and shortcut functions can now be given to determine how to combine atomic parameters and when to skip the interaction respectively. - The arguments to
forceandpotential_energyfor pairwise and specific interactions are changed to allow more flexible interaction definitions, depending for example on the velocities or step number. - Differentiable simulations are no longer compatible with Zygote.jl, but can now be carried out using Enzyme.jl. This is faster and more memory-efficient.
- The
solutefield toAtomis removed and theatom_typefield is added.weight_solute_solventis no longer an option forLennardJones, though similar functionality is available withatom_typeand mixing functions. box_volumeis renamed tovolume.run_loggers!is renamed toapply_loggers!to avoid confusion with therun_loggersfunction argument.- The abstract types
PairwiseInteractionandSpecificInteractionare removed. Custom interactions no longer need to sub-type anything. - Extensions are added for code requiring Enzyme.jl, CUDA.jl and KernelDensity.jl, so relevant imports are now required before using those features.
Non-breaking changes
- Support for Julia versions before 1.10 is dropped.
New features
- Backends supported by KernelAbstractions.jl can be used to run simulations by using the appropriate array type or the
array_typekeyword argument during system setup. - The Berendsen pressure coupling method is added as
BerendsenBarostat. - The
densityanddipole_momentfunctions are added. - The
AshbaughHatchandYukawapotentials are added. VolumeLoggerandDensityLoggerare added.- The
rngkeyword argument is added toplace_atoms,place_diatomicsandrandom_coord, allowing reproducible coordinate generation. - The
array_typefunction is added, giving the array type of a system or array. - The step number can be given as a third argument with a default of
0toforces,potential_energyandvirialacting on a system. This allows time-dependent forces, with the caveat that the step number resets to 1 every timesimulate!is called and can also be 0 to calculate forces before the first step. - A method is added to
random_velocities!which takes in and modifies the velocities as the first argument.
Performance improvements
- Better CUDA force and potential energy kernels significantly improve performance on CUDA compatible devices. The
GPUNeighborFinderis added for this path but does not calculate neighbors, which are calculated each step in the kernels. - Simulations are faster on both CPU and GPU due to mutating code leading to fewer memory allocations.
- System setup from a file is made much faster.
- The package is faster to load as a number of dependencies have been removed.
- The performance of implicit solvent on CPU is improved.
Bug fixes
- A bug when using more than two interactions on the GPU is fixed.
- A type conversion bug in
CellListMapNeighborFinderconstruction is fixed.
- Julia
Published by jgreener64 over 1 year ago
Molly - v0.21.0
Breaking changes
- Observable functions for
GeneralObservableLoggernow need to accept arbitrary keyword arguments, for example by addingkwargs...to the function call. This allows the logging changes described below.
Non-breaking changes
- Support for Julia versions before 1.9 is dropped. A package extension, rather than Requires.jl, is used to provide
visualizewhen GLMakie.jl is imported.
New features
ASECalculatoris added, allowing Python ASE calculators to be used in Molly. The code is in a package extension available when PythonCall.jl is imported. It is the user's responsibility to have the required Python packages installed. Examples of using MACE and psi4 are given.current_forcesandcurrent_potential_energycan be used in logging functions to reuse properties calculated in the simulation step. They default tonothingwhen the properties are not available.- Interaction types are allowed to be different for each replica in a
ReplicaSystem.
Performance improvements
PotentialEnergyLogger,TotalEnergyLoggerandForceLoggeravoid recomputation when the relevant properties are calculated in the simulation step.
Bug fixes
MollyCalculatornow works in two dimensions and for other floating point types.
- Julia
Published by jgreener64 about 2 years ago
Molly - v0.20.0
Breaking changes
apply_constraints!andSHAKEare removed as part of the changes to constraints.- The
Systemconstructor for AtomsBase.jl systems is changed to takeforce_unitsandenergy_unitsas keyword arguments rather than positional arguments. The defaults are consistent with the rest of Molly. velocity_autocorris removed sinceAutoCorrelationLoggerprovides a more general version of this functionality.
New features
- Support for constraints is improved and documented with
SHAKE_RATTLEallowing the SHAKE and RATTLE algorithms to be applied as appropriate to most simulators.DistanceConstraint,disable_constrained_interactions!,apply_position_constraints!,apply_velocity_constraints!,check_position_constraintsandcheck_velocity_constraintsare all added. Constraints are not currently compatible with GPU simulation. - Gradients with respect to the boundary can now be calculated in some contexts.
Community
- A logo is added to the project.
Bug fixes
- A bug in
FENEBondpotential energy calculation is fixed.
- Julia
Published by jgreener64 about 2 years ago
Molly - v0.19.0
Breaking changes
- General interactions are changed to use the AtomsCalculators.jl interface, allowing simulations to be run with calculators from other packages. A tuple of interactions compatible with the AtomsCalculators.jl interface should be given to
general_interswhen constructing aSystem.ImplicitSolventOBC,ImplicitSolventGBN2andMullerBrownare changed to be calculators. - The type parameters of
SystemandReplicaSystemare changed.
New features
forces,accelerations,potential_energy,total_energy,virialandpressurenow calculate the neighbors by default when called without neighbors. If they are being reused, neighbors should be pre-computed as before for performance.SystemandReplicaSystemnow have adatafield, set with thedatakeyword argument to the constructors, that can be used to store arbitrary data. This data can be accessed inside simulators.LennardJonesSoftCore,CoulombSoftCoreand custom atom types are now compatible with gradients.
- Julia
Published by jgreener64 over 2 years ago
Molly - v0.18.3
New features
- Compatibility with AtomsCalculators.jl is added via
MollyCalculator. - The documentation on setting up systems from structure files is improved.
- A list of relevant publications is added to the documentation.
Community
- The Contributor Covenant Code of Conduct is added to the project.
Bug fixes
- A bug in the
NoseHooversimulator when not using units is fixed.
- Julia
Published by jgreener64 over 2 years ago
Molly - v0.18.1
New features
- Simulation of overdamped Langevin dynamics is added as
OverdampedLangevin.
Performance improvements
- The performance of force calculation without a neighbor list on the GPU is significantly improved.
Bug fixes
- A bug in compatibility with SimpleCrystals.jl is fixed.
- Julia
Published by jgreener64 over 2 years ago
Molly - v0.18.0
Breaking changes
- Molar units are made more consistent throughout the package. If force and energy units are molar then the atomic masses should have a molar dimension, e.g.
u"g/mol"rather thanu"u". The default Boltzmann constantkis chosen based on theenergy_unitsgiven to aSystem.
New features
- A constructor for
Systemis added to convert from an AtomsBase.jlAbstractSystem. - During
Systemsetup, checks are made for a consistent unit system and appropriate errors are thrown. - Calculation of the hydrodynamic radius is added as
hydrodynamic_radius. - The
chargesfunction is added to give the partial charges of the atoms in a system.
Bug fixes
- Issues with AtomsBase.jl integration are fixed.
- Julia
Published by jgreener64 almost 3 years ago
Molly - v0.17.0
Breaking changes
run_loggersis no longer available as a keyword argument toSteepestDescentMinimizerandlog_statesis no longer available as a keyword argument when callingsimulate!withMetropolisMonteCarlo. Insteadrun_loggerscan be given as a keyword argument tosimulate!as described below.
New features
- The Monte Carlo anisotropic barostat is added as
MonteCarloAnisotropicBarostat, allowing separate pressure coupling in each dimension. - The Monte Carlo membrane barostat is added as
MonteCarloMembraneBarostat, allowing pressure coupling for systems involving a membrane. - A
Systemconstructor is added to create systems from a SimpleCrystals.jlCrystalstruct. - A convenience constructor is added for
Systemallowing an existingSystemto be copied with given properties changed. run_loggerscan be given as a keyword argument tosimulate!to determine whether the loggers are run. The options aretrue,falseor:skipzero, in which case the loggers are not run before the first step.run_loggersistrueby default except forSteepestDescentMinimizer, where it isfalse.run_loggers!now has a fourth argument which determines whether the loggers are run, defaulttrue.- The scale factor given to
scale_coords!can now be aSVectorcorresponding to the scaling factor for each axis in addition to a single number. - General interactions can now implement a method for
virial.
Bug fixes
- A bug in force calculation with more than two interactions on the GPU is fixed.
- A bug allowing multiple 1-4 scaling values to be read from an OpenMM force field XML file is fixed.
- Julia
Published by jgreener64 almost 3 years ago
Molly - v0.16.0
Breaking changes
apply_coupling!now returns whether the coupling has invalidated the currently stored forces, for example by changing the coordinates.find_neighborsnow takes another optional argument which determines whether the neighbor list should be forced to recompute, regardless of the step number.- The type parameters of
System,ReplicaSystem,AtomTypeandLangevinare changed.
New features
- The Monte Carlo barostat is added as
MonteCarloBarostat, allowing pressure coupling during simulations. - The virial and pressure can be calculated for systems where only the pairwise interactions contribute to the virial using
virialandpressure. Corresponding loggers are added asVirialLoggerandPressureLogger. - The
scale_boundary,scale_coords!andmolecule_centersfunctions are added. - The
topologykeyword argument forSystemcan provide information about which atoms are in the same molecule, with this information stored as aMolecularTopologywhen reading aSystemfrom a file. The corresponding keyword argumentstopologyandreplica_topologyare added toReplicaSystem. - Multiple couplers can be given to the
couplingargument of compatible simulators as aTupleor aNamedTuple.Langevinis now compatible with couplers. - Warnings are given for skipped incompatible fields when reading OpenMM XML force field files. Using atom charges from residue templates is no longer required.
- The
use_cell_listkeyword argument is added to theSystemconstructor from files. Unitful.ustripis now defined forCubicBoundaryandRectangularBoundary.
- Julia
Published by jgreener64 about 3 years ago
Molly - v0.15.0
The core of the package is rewritten to use CUDA.jl kernels on the GPU path for increased performance and GPU memory usage. Enzyme.jl is used along with Zygote.jl to differentiate through simulations on CPU and GPU for increased performance.
Breaking changes
- The
nl_onlyfield of pairwise interactions is replaced with ause_neighborsfunction, which accesses ause_neighborsfield of the struct for built-in interactions. Custom pairwise interactions can define a method for this function, which returnsfalseby default. - The
weight_14field of pairwise interactions has been renamed toweight_specialand theweight_14argument toforcehas been renamed tospecial. Thenb_matrixandmatrix_14fields of neighbor finders have been renamed toeligibleandspecialrespectively. OpenMMForceField,OpenMMResidueTypeandOpenMMAtomTypeare renamed toMolecularForceField,ResidueTypeandAtomTyperespectively.- The penultimate argument to
InteractionList1Atomsetc., the interaction type names, is now an optional final argument that defaults to a vector of empty strings. The type parameters are also changed. velocityis renamed torandom_velocityandrand_coordis renamed torandom_coord.DistanceVecNeighborFinderandNeighborListVecare removed sinceDistanceNeighborFinderandNeighborListnow work on the GPU and with automatic differentiation.- The
gpu_diff_safeargument is no longer available when setting up aSystemsince the CPU path is now differentiable.is_gpu_diff_safeis removed. - The type parameters of
System,ReplicaSystem,DistanceNeighborFinderandNeighborListare changed. - The
@fastmathmacro is no longer used in the package.
Non-breaking changes
DistanceNeighborFinderandTreeNeighborFindernow return lists of neighboring pairs in ascending order of index.
New features
- The Nosé-Hoover simulator is added as
NoseHoover. potential_energyandtotal_energyare now compatible with automatic differentiation on CPU and GPU. They can also now be run in parallel using then_threadskeyword argument, with this being the default behaviour.CubicBoundaryandRectangularBoundarycan take a single value as an argument, indicating the same size in all dimensions. They must take positive side lengths.- The
remove_CM_motionargument to simulators can be set to an integer, in which case the center of mass motion is removed every given number of steps. The default remains to remove the center of mass motion every step. - The
kappaandrename_terminal_reskeyword arguments are available as arguments when constructing aSystemfrom a file and a force field. - Differentiable simulation now works with any combination of built-in or custom interactions.
- Differentiable simulation now works with multithreading on the CPU.
- The number of GPU threads used for the CUDA.jl kernels can be tuned with the environmental variables
MOLLY_GPUNTHREADS_PAIRWISE,MOLLY_GPUNTHREADS_SPECIFIC,MOLLY_GPUNTHREADS_DISTANCENFandMOLLY_GPUNTHREADS_IMPLICIT. - A section on development is added to the documentation and other areas of the documentation are expanded.
Performance improvements
- Force calculation, energy calculation, simulation and implicit solvent force/energy calculation are all made faster on CPU and GPU.
- GPU memory usage is reduced significantly, allowing the simulation of larger systems.
- Differentiable simulation is made faster on CPU and GPU.
Bug fixes
- Bugs in boundary and system indexing are fixed.
- A bug in implicit solvent automatic differentiation is fixed.
- A bug allowing incorrect units to be used in general interactions is fixed.
- Julia
Published by jgreener64 about 3 years ago
Molly - v0.14.1
New features
- The Buckingham potential is added as
Buckingham. - Polymer melt and density functional theory examples are added to the documentation.
Bug fixes
- A bug introduced by a new version of AtomsBase.jl is fixed. In addition, atoms in systems without
atoms_datadefined now return:unknownfromAtomsBase.atomic_symbol. - A bug in the export of
OpenMMResidueTypeis fixed.
- Julia
Published by jgreener64 over 3 years ago
Molly - v0.14.0
Breaking changes
- The type parameters and fields of
System,ReplicaSystem,ImplicitSolventOBCandImplicitSolventGBN2are changed. - The type parameters of
TemperatureREMDare changed.
Non-breaking changes
- The
massfunction falls back to accessing themassfield, making it easier to define custom atom types.
New features
- A Monte Carlo simulator that uses the Metropolis algorithm is added as
MetropolisMonteCarlo.MonteCarloLoggeris added to record acceptance information.random_uniform_translation!andrandom_normal_translation!are added to generate trial moves. HamiltonianREMDis added to allow REMD with different interactions for each replica.remd_exchange!andsimulate_remd!are added to allow custom REMD simulators to be defined by giving the exchange function.replica_pairwise_inters,replica_specific_inter_listsandreplica_general_interscan now be given when constructing aReplicaSystemto allow different interactions for each replica.- Soft core versions of the Lennard-Jones and Coulomb interactions are added as
LennardJonesSoftCoreandCoulombSoftCore. - Preliminary support for bonded constraints using the SHAKE algorithm is added via
SHAKEandapply_constraints!.constraintscan be used to define the constraints when constructing aSystem, with corresponding arguments for aReplicaSystem. This feature is still under development and is not fully documented yet. - Additional keyword arguments can now be used in
log_property!, making the logging of properties in custom simulators easier. - A section on related software is added to the documentation.
Performance improvements
- Implicit solvent force and energy calculation are made faster and more memory efficient.
Bug fixes
- A bug when constructing the
Miepotential with certain parameters is fixed.
- Julia
Published by jgreener64 over 3 years ago
Molly - v0.13.0
Breaking changes
- The minimum distance argument to
place_atomsandplace_diatomicsis now the keyword argumentmin_distwith a default value of no distance.place_diatomicsnow places the molecules facing random directions, with the old behaviour available by settingaligned=true.place_diatomicsnow checks for sensible inputs and terminates after a certain number of failed attempts likeplace_atoms. - The argument order in
apply_coupling!is switched fromapply_coupling!(system, simulator, coupling)toapply_coupling!(system, coupling, simulator). - The default mass of an
Atomis changed from0.0u"u"to1.0u"u". - The
AbstractNeighborFinderabstract type is removed. - The
centre_coordskeyword argument when constructing aSystemfrom files is renamed tocenter_coords. - Center of mass motion is now removed before loggers are run at step zero of a simulation, matching the behaviour during the simulation steps.
Non-breaking changes
visualizeshows the boundary as lines by default and has theshow_boundary,boundary_linewidthandboundary_colorkeyword arguments added.
New features
- Temperature replica exchange MD (REMD) can now be run in parallel. The
ReplicaSystemstruct is added to act as a container for multipleSystems. TheTemperatureREMDsimulator andReplicaExchangeLoggerare added to set up and run replica exchange simulations. TriclinicBoundaryis added and can be used to simulate periodic boundary conditions in a triclinic box. ATriclinicBoundarycan be constructed from either 3 basis vectors or 3 basis vector lengths and angles α/β/γ. Thebox_centerfunction is added.
Bug fixes
- Coordinates are now moved back inside the boundary before the first step of the simulation.
- Julia
Published by jgreener64 almost 4 years ago
Molly - v0.12.0
- The
parallelkeyword argument is renamed ton_threadsthroughout, allowing an exact number of threads to be specified with the default remainingThreads.nthreads(). - Arguments for bonded interactions are made more consistent:
HarmonicBondhaskbrenamed tokandb0tor0,HarmonicAnglehascthrenamed tokandth0toθ0, andMorseBondhasαrenamed toa. - An additional type parameter is added to
Systemthat records whether it is on the GPU. Theis_on_gpufunction is added to access this property. - The
Interactionabstract type is removed. - The
HarmonicPositionRestraintinteraction for restraining atomic positions, commonly used during equilibration of biomolecular systems, is added.InteractionList1AtomsandSpecificForce1Atomsare added to allow the definition of interactions that apply a force to one atom. Theadd_position_restraintsfunction is added to apply position restraints to aSystem, along with the atom selector functionsis_any_atomandis_heavy_atom. - The
CosineAngleinteraction for the cosine bond angle between three atoms is added. - The
FENEBondinteraction for the finitely extensible non-linear elastic (FENE) bond between two atoms is added. - The
massesfunction to access the mass of each atom in aSystemis added. AndersenThermostatis made differentiable.DistanceNeighborFinderandTreeNeighborFindernow use FLoops.jl and show improved performance on multiple threads.- Inconsistent
Systemsetup now throws an error. - Equations are added to some docstrings.
- Julia
Published by jgreener64 almost 4 years ago
Molly - v0.11.0
box_sizeis renamed toboundarythroughout. Boundaries of the formSVector(1.0, 2.0, 3.0)should be replaced byCubicBoundary(1.0, 2.0, 3.0), allowing non-cubic boundaries to be added in future. Setting one or more values toInfgives no boundary in that dimension.RectangularBoundaryshould be used for 2D simulations.float_type,box_volumeandAtomsBase.n_dimensionsare defined for boundaries.- The recorded values in loggers are now accessed with
Base.values. Loggers are now given to theSystemas a named tuple rather than as aDictfor performance reasons. wrap_coords_vecis renamed towrap_coords,wrap_coordsis renamed towrap_coord_1D,vector1Dis renamed tovector_1D, thecutoffargument to the implicit solvent models is renamed todist_cutoff, and thenl_distargument toSystemis renamed todist_neighbors.- The general
LangevinSplittingsimulator is added to allow a variety of integrators to be defined such as velocity Verlet (splitting"BAB"), the Langevin implementation inLangevin("BAOA"), and symplectic Euler integrators ("AB"and"BA"). GeneralObservableLoggeris added to periodically record a given observable throughout the simulation. Most existing loggers are changed to be cases ofGeneralObservableLogger.AverageObservableLoggeris also added and records a running average rather than storing observations.TimeCorrelationLoggeris added to calculate correlations between observables.AutoCorrelationLoggercorresponds to the case when the two observables are the same.- The keyword argument
ktoSystem,velocityandmaxwell_boltzmannallows a custom Boltzmann constant to be used. - More of the package is made differentiable due to the use of UnitfulChainRules.jl.
- Julia
Published by jgreener64 almost 4 years ago
Molly - v0.10.0
- Loggers now also run before the first simulation step, i.e. at step 0, allowing the starting state to be recorded.
inject_gradientsnow returns general interactions in addition to atoms, pairwise interactions and specific interaction lists.- Steepest descent energy minimization is added via
SteepestDescentMinimizer. - GPU support is added for
potential_energy. - The
radius_gyrationfunction is added. - A kappa value for ionic screening may be given to
ImplicitSolventOBCandImplicitSolventGBN2. - Improvements are made to simulation setup such as allowing multiple macromolecular chains.
- A random number generator can now be passed to
Langevin, allowing reproducible simulations. - Gradients through the GB-Neck2 interaction are made to work on the GPU.
- Bugs in
StormerVerletare fixed. - The possibility of a NaN value for the
HarmonicAngleforce when the angle is π is fixed. - A bug causing
random_velocitiesto run slowly is fixed.
- Julia
Published by jgreener64 about 4 years ago
Molly - v0.9.0
- The arguments to
forcesandaccelerationsare made consistent across implementations. - Centre of mass motion is removed by default during simulation using
remove_CM_motion!. - Coordinates are centred in the simulation box by default during setup.
- The
Langevinintegrator andVerletintegrator are added. - The
MorseBondpotential is added. - The GB-Neck2 implicit solvent model is added via
ImplicitSolventGBN2. - The
CubicSplineCutoffis added. - The
rmsdfunction is added. - The AtomsBase.jl interface is made more complete.
- The progress bar is removed from simulations.
- The out-of-place neighbor list type
NeighborListVecis changed.
- Julia
Published by jgreener64 about 4 years ago
Molly - v0.8.0
- General interactions are renamed to pairwise interactions throughout to better reflect their nature. The abstract type is now
PairwiseInteractionand the keyword argument toSystemis nowpairwise_inters. General interaction now refers to a new type of interaction that takes in the whole system and returns forces for all atoms, allowing interactions such as neural network potentials acting on the whole system. This is available via the keyword argumentgeneral_interstoSystem. - Implicit solvent models are added via the
ImplicitSolventOBCgeneral interaction type and theimplicit_solventkeyword argument when setting up aSystemfrom a file. The Onufriev-Bashford-Case GBSA model with parameter sets I and II is provided. chargeis added to access the partial charge of anAtom.- The
box_sizekeyword argument may be given when setting up aSystemfrom a file. - A bug in
KineticEnergyLoggeris fixed.
- Julia
Published by jgreener64 over 4 years ago
Molly - v0.7.0
- The
forceandpotential_energyfunctions for general interactions now take the vector between atom i and atom j as an argument in order to save on computation. - Differentiable simulations are made faster and more memory-efficient.
- The AtomsBase.jl interface is updated to v0.2 of AtomsBase.jl.
extract_parametersandinject_gradientsare added to assist in taking gradients through simulations.bond_angleandtorsion_angleare added.random_velocitiesis added.- A
solutefield is added toAtomallowing solute-solvent weighting in interactions. This is added to theLennardJonesinteraction. - A
properfield is added toPeriodicTorsion. - The float type is added as a type parameter to
System.float_typeandis_gpu_diff_safeare added to access the type parameters of aSystem. - A
typesfield is added to types such asInteractionList2Atomsto record interaction types. find_neighborscan now be given just the system as an argument.- Visualisation is updated to use GLMakie.jl v0.5.
- Bugs in velocity generation and temperature calculation with no units are fixed.
- Julia
Published by jgreener64 over 4 years ago
Molly - v0.6.0
- Differentiable simulation works with Zygote reverse and forward mode AD on both CPU and GPU. General and specific interactions are supported along with neighbor lists. It does not currently work with units, user-defined types and some components of the package.
- Significant API changes are made including a number of functions being renamed, thermostats being renamed to couplers and the removal of some types.
Simulationis renamed toSystemand the time step and coupling are passed to the simulator, which is passed to thesimulate!function.Systemis a sub-type ofAbstractSystemfrom AtomsBase.jl and the relevant interface is implemented, allowing interoperability with the wider ecosystem.- Specific interactions are changed to store indices and parameters as part of types such as
InteractionList2Atoms. Specific interaction force functions now return types such asSpecificForce4Atoms. Specific interactions can now run on the GPU. - Some abstract types are removed.
NeighborFinderis renamed toAbstractNeighborFinder. - The
potential_energyfunction arguments match theforcefunction arguments. - File reader setup functions are called using
Systemand return aSystemdirectly. find_neighbors!is renamed tofind_neighborsand returns the neighbors, which are no longer stored as part of the simulation.VelocityFreeVerletis renamed toStormerVerlet.RescaleThermostatandBerendsenThermostatare added.random_velocities!andvelocity_autocorrare added.VelocityLogger,KineticEnergyLoggerandPotentialEnergyLoggerare added.DistanceVecNeighborFinderis added for use on the GPU.- Atomic charges are now dimensionless, i.e 1.0 is an atomic charge of +1.
HarmonicAnglenow works in 2D.- Support for Julia versions before 1.7 is dropped.
- Julia
Published by jgreener64 over 4 years ago
Molly - v0.5.0
- Readers are added for OpenMM XML force field files and coordinate files supported by Chemfiles.jl. Forces, energies and the results of a short simulation exactly match the OpenMM reference implementation for a standard protein in the a99SB-ILDN force field.
- A cell neighbor list is added using CellListMap.jl.
CoulombReactionFieldis added to calculate long-range electrostatic interactions.- The
PeriodicTorsioninteraction is added and the previous Ryckaert-BellemansTorsionis renamed toRBTorsion. - Support for weighting non-bonded interactions between atoms in a 1-4 interaction is added.
- The box size is changed from one value to three, allowing a larger variety of periodic box shapes.
- Support for different mixing rules is added for the Lennard-Jones interaction, with the default being Lorentz-Bertelot mixing.
- A simple
DistanceCutoffis added. - Excluded residue names can now be defined for a
StructureWriter. - The
placediatomicsandustripvecfunctions are added. - The
AtomMintype is removed, withAtomnow being a bits type andAtomDataused to store atom data. - Visualisation now uses GLMakie.jl.
adjust_boundsis renamed towrapcoords.
- Julia
Published by jgreener64 over 4 years ago
Molly - v0.4.0
- Unitful.jl support is added and recommended for use, meaning numbers have physical meaning and many errors are caught. More type parameters have been added to various types to allow this. It is still possible to run simulations without units by specifying the
force_unitandenergy_unitarguments toSimulation. - Interaction constructors with keyword arguments are added or improved.
- The maximum force for non-bonded interactions is removed.
- Julia
Published by jgreener64 over 4 years ago
Molly - v0.3.0
- The spelling of "neighbour" is changed to "neighbor" throughout the package. This affects
NoNeighborFinder,DistanceNeighborFinder,TreeNeighborFinder,find_neighbors!and theneighbor_finderargument toSimulation. - Torsion angle force calculation is improved.
- A bug in force calculation for specific interactions is fixed.
- Support for Julia versions before 1.6 is dropped.
- Julia
Published by jgreener64 about 5 years ago
Molly - v0.2.0
- Shifted potential and shifted force cutoff approaches for non-bonded interactions are introduced.
- An
EnergyLoggeris added and the potential energy for existing interactions defined. - Simulations can now be run with the
CuArraytype from CUDA.jl, allowing GPU acceleration. - The in-place
force!functions are changed to out-of-placeforcefunctions with different arguments. - The i-i self-interaction is no longer computed for
forcefunctions. - The Mie potential is added.
- The list of neighbours is now stored in the
Simulationtype. - Documentation is added for experimental differentiable molecular simulation.
- Optimisations are implemented throughout the package.
- Support for Julia versions before 1.3 is dropped.
- Julia
Published by jgreener64 over 5 years ago
Molly - v0.1.0
Initial release of Molly.jl, a Julia package for molecular simulation.
Features: - Interface to allow definition of new forces, simulators, thermostats, neighbour finders, loggers etc. - Read in pre-computed Gromacs topology and coordinate files with the OPLS-AA forcefield and run MD on proteins with given parameters. In theory it can do this for any regular protein, but in practice this is untested. - Non-bonded interactions - Lennard-Jones Van der Waals/repulsion force, electrostatic Coulomb potential, gravitational potential, soft sphere potential. - Bonded interactions - covalent bonds, bond angles, torsion angles. - Andersen thermostat. - Velocity Verlet and velocity-free Verlet integration. - Explicit solvent. - Periodic boundary conditions in a cubic box. - Neighbour list to speed up calculation of non-bonded forces. - Automatic multithreading. - Some analysis functions, e.g. RDF. - Run with Float64 or Float32. - Physical agent-based modelling. - Visualise simulations as animations.
- Julia
Published by jgreener64 almost 6 years ago