All Projects → aboria → Aboria

aboria / Aboria

Licence: other
Enables computations over a set of particles in N-dimensional space

Programming Languages

C++
36643 projects - #6 most used programming language
python
139335 projects - #7 most used programming language
XSLT
1337 projects
CMake
9771 projects
c
50402 projects - #5 most used programming language
shell
77523 projects

Projects that are alternatives of or similar to Aboria

splashsurf
Surface reconstruction library and CLI for particle data from SPH simulations, written in Rust.
Stars: ✭ 18 (-78.31%)
Mutual labels:  particles, smoothed-particle-hydrodynamics
sph vulkan
SPH simulation in Vulkan compute shader.
Stars: ✭ 29 (-65.06%)
Mutual labels:  smoothed-particle-hydrodynamics
teilchen
a simple physics library based on particles, forces, constraints and behaviors
Stars: ✭ 22 (-73.49%)
Mutual labels:  particles
pylj
Teaching Utility for Classical Atomistic Simulation.
Stars: ✭ 23 (-72.29%)
Mutual labels:  molecular-dynamics
SCEMa
HMM implementation featuring Deal.II (FE) and LAMMPS (MD)
Stars: ✭ 14 (-83.13%)
Mutual labels:  molecular-dynamics
Raymarched-GPU-Particles-with-Screenspace-Physics
Using Grab Passes for VRChat
Stars: ✭ 44 (-46.99%)
Mutual labels:  particles
MDBenchmark
Quickly generate, start and analyze benchmarks for molecular dynamics simulations.
Stars: ✭ 64 (-22.89%)
Mutual labels:  molecular-dynamics
MDToolbox.jl
MDToolbox.jl: A Julia package for molecular dynamics trajectories analysis and modeling of biomolecules
Stars: ✭ 15 (-81.93%)
Mutual labels:  molecular-dynamics
covid
MolSSI SARS-CoV-2 Biomolecular Simulation Data and Algorithm Store
Stars: ✭ 24 (-71.08%)
Mutual labels:  molecular-dynamics
libra-code
quantum-dynamics-hub.github.io/libra/index.html
Stars: ✭ 33 (-60.24%)
Mutual labels:  molecular-dynamics
Cabana
Performance-portable library for particle-based simulations
Stars: ✭ 115 (+38.55%)
Mutual labels:  particles
react-snowfetti
Generates random particles using html5 canvas API.
Stars: ✭ 17 (-79.52%)
Mutual labels:  particles
phantom-config
Parse, convert, modify, and generate Phantom config files.
Stars: ✭ 12 (-85.54%)
Mutual labels:  smoothed-particle-hydrodynamics
SwiftUI-DesignCode
 SwiftUI-DesignCode is some examples in the process of learning swiftUI 2.0
Stars: ✭ 185 (+122.89%)
Mutual labels:  particles
phantom
Phantom Smoothed Particle Hydrodynamics and Magnetohydrodynamics code
Stars: ✭ 52 (-37.35%)
Mutual labels:  particles
jquery-particles-burst
Lightweight particles generator
Stars: ✭ 21 (-74.7%)
Mutual labels:  particles
mddatasetbuilder
A script to build reference datasets for training neural network potentials from given LAMMPS trajectories.
Stars: ✭ 23 (-72.29%)
Mutual labels:  molecular-dynamics
kosm
Kosm for Android source code
Stars: ✭ 33 (-60.24%)
Mutual labels:  particles
sph opengl
SPH simulation in OpenGL compute shader.
Stars: ✭ 57 (-31.33%)
Mutual labels:  smoothed-particle-hydrodynamics
NovaShader
Multi-functional shader for the Particle System that supports Universal Render Pipeline (URP) of Unity.
Stars: ✭ 448 (+439.76%)
Mutual labels:  particles

TravisCI Coverage Join the chat at https://gitter.im/Aboria/Lobby

Aboria is a C++ library that enables computations over a set of particles or points in N-dimensional space, with the aim of providing a useful library for implementing particle-based numerical algorithms, for example Molecular Dynamics, Smoothed Particle Hydrodynamics or Radial Basis Functions.

A standards-compliant particle container

The library gives you a STL compatible container class to store a particle set containing a position and unique id for each particle, as well as any number of user-defined variables with arbitrary types.

ABORIA_VARIABLE(scalar, double, "an example scalar variable")
const int DIM = 2;
using Particles_t = Particles<std::tuple<scalar>,DIM>;
using position = Particles_t::position;
Particles_t particles(100);

std::normal_distribution<double> normal(0.5, 0.2);
std::default_random_engine gen;
for (auto i: particles) {
  get<position>(i) = vdouble2(normal(gen), normal(gen));
  get<scalar>(i) = normal(gen);
}

Spatial data structures and queries

Aboria gives you the ability to embed each particle set within a hypercube domain with arbitrary periodicity. The underlying data structure can be a cell list, kd-tree or hyper oct-tree.

      

These data structures provide flexible neighbourhood queries that return iterators, and can use any integer p-norm distance measure for p > 0.

for (auto i = euclidean_search(particles.get_query(),
                               vdouble2::Constant(0), radius);
         i != false; ++i) {
  std::cout << "Found a particle with dx = " << i.dx()
            << " and id = " << get<id>(*i) << "\n";
}

An API for forming linear kernel operators

Aboria gives you an API for forming linear kernel operators from C++ lambda functions, This can be used, for example, to implement Radial Basis Function kernels. These can be wrapped as Eigen matrices in order to solve linear systems.

auto K = create_sparse_operator(
    particles, particles, radius,
    [epsilon](const vdouble2 &dx, auto i, auto j) {
      return (get<scalar>(i) * get<scalar>(j)) / (dx.norm() + epsilon);
    });

// matrix-vector multiply (matrix-free)
const int N = particles.size();
Eigen::VectorXd b = Eigen::VectorXd::LinSpaced(N, 0, 1.0);
Eigen::VectorXd c = K * b;

// matrix-vector multiply (assemble to a matrix first)
Eigen::MatrixXd K_eigen(N, N);
K.assemble(K_eigen);
c = K_eigen * b;

License and Contact

Aboria is distributed under a BSD 3-Clause License, see LICENCE for more details. For documentation see the Aboria website. If you are interested in contributing to Aboria, having trouble getting it working or just have a question, send me an email at [email protected] or create a GitHub issue or pull request.

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].