All Projects → JuliaMolSim → Molly.jl

JuliaMolSim / Molly.jl

Licence: other
Molecular simulation in Julia

Programming Languages

julia
2034 projects

Projects that are alternatives of or similar to Molly.jl

Mcmd
Monte Carlo and Molecular Dynamics Simulation Package
Stars: ✭ 52 (-47.47%)
Mutual labels:  physics-simulation, molecular-dynamics
mdgrad
Pytorch differentiable molecular dynamics
Stars: ✭ 127 (+28.28%)
Mutual labels:  molecular-dynamics, physics-simulation
Pnerf
Stars: ✭ 28 (-71.72%)
Mutual labels:  molecular-dynamics
Alchemlyb
the simple alchemistry library
Stars: ✭ 52 (-47.47%)
Mutual labels:  molecular-dynamics
Uammd
A CUDA project for Molecular Dynamics, Brownian Dynamics, Hydrodynamics... intended to simulate a very generic system constructing a simulation with modules.
Stars: ✭ 11 (-88.89%)
Mutual labels:  molecular-dynamics
Dgfem Acoustic
Discontinuous Galerkin finite element method (DGFEM) for Acoustic Wave Propagation
Stars: ✭ 31 (-68.69%)
Mutual labels:  physics-simulation
Coronavirus
[email protected] COVID-19 efforts
Stars: ✭ 1,118 (+1029.29%)
Mutual labels:  molecular-dynamics
Physics Visual
Visualization/Simulation of 2D physics concepts
Stars: ✭ 75 (-24.24%)
Mutual labels:  physics-simulation
Delphes
A framework for fast simulation of a generic collider experiment
Stars: ✭ 70 (-29.29%)
Mutual labels:  physics-simulation
Lammps
Public development project of the LAMMPS MD software package
Stars: ✭ 1,019 (+929.29%)
Mutual labels:  molecular-dynamics
Pytim
a python package for the interfacial analysis of molecular simulations
Stars: ✭ 38 (-61.62%)
Mutual labels:  molecular-dynamics
Qball
Qball (also known as [email protected]) is a first-principles molecular dynamics code that is used to compute the electronic structure of atoms, molecules, solids, and liquids within the Density Functional Theory (DFT) formalism. It is a fork of the Qbox code by Francois Gygi.
Stars: ✭ 33 (-66.67%)
Mutual labels:  molecular-dynamics
Loos
LOOS: a lightweight object-oriented structure analysis library
Stars: ✭ 63 (-36.36%)
Mutual labels:  molecular-dynamics
Nasoq
NASOQ:Numerically Accurate Sparsity Oriented QP Solver
Stars: ✭ 30 (-69.7%)
Mutual labels:  physics-simulation
Qrack
Comprehensive, GPU accelerated framework for developing universal virtual quantum processors
Stars: ✭ 79 (-20.2%)
Mutual labels:  physics-simulation
Chimera
Fourier-Bessel Particle-In-Cell code
Stars: ✭ 20 (-79.8%)
Mutual labels:  physics-simulation
Gdynet
Unsupervised learning of atomic scale dynamics from molecular dynamics.
Stars: ✭ 37 (-62.63%)
Mutual labels:  molecular-dynamics
Delfem2
Research prototyping framework for physics simulation written in C++
Stars: ✭ 92 (-7.07%)
Mutual labels:  physics-simulation
Bouncing Balls
Bouncing balls simulation using plain JavaScript
Stars: ✭ 96 (-3.03%)
Mutual labels:  physics-simulation
2d Deformable Body In Unity
A 2D Deformable body simulation in Unity using FEM
Stars: ✭ 85 (-14.14%)
Mutual labels:  physics-simulation

Molly.jl

Build status Coverage status Latest release License Documentation stable Documentation dev

Much of science can be explained by the movement and interaction of molecules. Molecular dynamics (MD) is a computational technique used to explore these phenomena, from noble gases to biological macromolecules. Molly.jl is a pure Julia package for MD, and for the simulation of physical systems more broadly.

At the minute the package is a proof of concept for MD in Julia. It is not production ready. It can simulate a system of atoms with arbitrary interactions as defined by the user. Implemented features include:

  • 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, Mie 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.
  • GPU acceleration on CUDA-enabled devices.
  • Run with Float64 or Float32.
  • Some analysis functions, e.g. RDF.
  • Physical agent-based modelling.
  • Visualise simulations as animations.
  • Differentiable molecular simulation on an experimental branch - see the relevant docs.

Features not yet implemented include:

  • Protein force fields other than OPLS-AA.
  • Water models.
  • Energy minimisation.
  • Other temperature or pressure coupling methods.
  • Cell-based neighbour list.
  • Protein preparation - solvent box, add hydrogens etc.
  • Trajectory/topology file format readers/writers.
  • Quantum mechanical modelling.
  • High test coverage.

Installation

Julia is required, with Julia v1.5 or later required to get the latest version of Molly. Install Molly from the Julia REPL. Enter the package mode by pressing ] and run add Molly.

Usage

Some examples are given here, see the documentation for more on how to use the package.

Simulation of a Lennard-Jones gas:

using Molly

n_atoms = 100
box_size = 2.0 # nm
temp = 298 # K
mass = 10.0 # Relative atomic mass

atoms = [Atom(mass=mass, σ=0.3, ϵ=0.2) for i in 1:n_atoms]
coords = [box_size .* rand(SVector{3}) for i in 1:n_atoms]
velocities = [velocity(mass, temp) for i in 1:n_atoms]
general_inters = (LennardJones(),)

s = Simulation(
    simulator=VelocityVerlet(),
    atoms=atoms,
    general_inters=general_inters,
    coords=coords,
    velocities=velocities,
    temperature=temp,
    box_size=box_size,
    thermostat=AndersenThermostat(1.0),
    loggers=Dict("temp" => TemperatureLogger(100)),
    timestep=0.002, # ps
    n_steps=10_000
)

simulate!(s)

Simulation of a protein:

using Molly

timestep = 0.0002 # ps
temp = 298 # K
n_steps = 5_000

atoms, specific_inter_lists, general_inters, nb_matrix, coords, box_size = readinputs(
            joinpath(dirname(pathof(Molly)), "..", "data", "5XER", "gmx_top_ff.top"),
            joinpath(dirname(pathof(Molly)), "..", "data", "5XER", "gmx_coords.gro"))

s = Simulation(
    simulator=VelocityVerlet(),
    atoms=atoms,
    specific_inter_lists=specific_inter_lists,
    general_inters=general_inters,
    coords=coords,
    velocities=[velocity(a.mass, temp) for a in atoms],
    temperature=temp,
    box_size=box_size,
    neighbour_finder=DistanceNeighbourFinder(nb_matrix, 10),
    thermostat=AndersenThermostat(1.0),
    loggers=Dict("temp" => TemperatureLogger(10),
                    "writer" => StructureWriter(10, "traj_5XER_1ps.pdb")),
    timestep=timestep,
    n_steps=n_steps
)

simulate!(s)

The above 1 ps simulation looks something like this when you view it in VMD: MD simulation

Contributing

Contributions are very welcome - see the roadmap issue for more.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].