While in theory one can build perfect code for all models from scratch, in practice many scientists and engineers need or want some help! The SciML modeling tools provide a higher level interface over the equation solvers which helps the translation from good models to good simulations in a way that abstracts away the mathematical and computational details without giving up performance.
Acausal modeling is an extension of causal modeling that is more composable and allows for more code reuse. Build a model of an electric engine, then build a model of a battery, and now declare connections by stating "the voltage at the engine equals the voltage at the connector of the battery", and generate the composed model. The tool for this is ModelingToolkit.jl. ModelingToolkit.jl is a sophisticated symbolic modeling library which allows for specifying these types of large-scale differential equation models in a simple way, abstracting away the computational details. However, its symbolic analysis allows for generating much more performant code for differential-algebraic equations than most users could ever write by hand, with its
structural_simplify automatically correcting the model to improve parallelism, numerical stability, and automatically remove variables which it can show are redundant.
ModelingToolkit.jl is the base of the SciML symbolic modeling ecosystem, defining the
AbstractSystem types, such as
PDESystem, and more, which are then used by all of the other modeling tools. As such, when using other modeling tools like Catalyst.jl, the reference for all of the things that can be done with the symbolic representation is simply ModelingToolkit.jl.
Given the composable nature of acausal modeling systems, it's helpful to not have to define every component from scratch and instead build off a common base of standard components. ModelingToolkitStandardLibrary.jl is that library. It provides components for standard models to start building everything from circuits and engines to robots.
Catalyst.jl: Chemical Reaction Networks (CRN), Systems Biology, and Quantiative Systems Pharmacology (QSP) Modeling
Catalyst.jl is a modeling interface for efficient simulation of chemical master equation representations chemical reaction networks and other systems models. It uses a highly intuitive chemical reaction syntax interface which generates all of the extra functionality necessary for the fastest use with DiffEqJump.jl and DifferentialEquations.jl. Its
ReactionSystem type is a programmable extension of the ModelingToolkit
AbstractSystem interface, meaning that complex reaction systems can be generated through code.
For an overview of the library, see Modeling Biochemical Systems with Catalyst.jl - Samuel Isaacson
NBodySimulator.jl: A differentiable simulator for N-body problems, including astrophysical and molecular dynamics
NBodySimulator.jl is differentiable simulator for N-body problems, including astrophysical and molecular dynamics. It uses the DifferentialEquations.jl solvers, allowing for one to choose between a large variety of symplectic integration schemes. It implements many of the thermostats required for doing standard molecular dynamics approximations.
This image that went viral is actually runnable code from ParameterizedFunctions.jl. Define equations and models using a very simple high level syntax and let the code generation tools build symbolic fast Jacobian, gradient, etc. functions for you.
SBMLToolkit.jl is a library for reading SBML files into the standard formats for Catalyst.jl and ModelingToolkit.jl. There are more than one thousand biological models available in the the BioModels Repository.
ReactionMechanismSimulator.jl is a tool for simulating and analyzing large chemical reaction mechanisms. It interfaces with the ReactionMechanismGenerator suite for automatically constructing reaction pathways from chemical components to quickly build realistic models of chemical systems.
MomentClosure.jl is a library for generating the moment closure equations for a given chemical master equation or stochastic differential equation. Thus instead of solving a stochastic model thousands of times to find the mean and variance, this library can generate the deterministic equations for how the mean and variance evolve in order to be solved in a single run. MomentClosure.jl uses Catalyst
ReactionSystem and ModelingToolkit
SDESystem types as the input for its symbolic generation processes.
FiniteStateProjection.jl is a library for finite state projection direct solving of the chemical master equation. It automatically converts the Catayst
ReactionSystem definitions into ModelingToolkit
ODESystem representations for the evolution of probability distributions to allow for directly solving the weak form of the stochastic model.
AlgebraicPetri.jl is a library for automating the intuitive generation of dynamical models using a Category theory based approach.
If one wants to do agent-based modeling in Julia, Agents.jl is the go-to library. It's fast and flexible, making it a solid foundation for any agent-based model.