cellular_raza_core/backend/mod.rs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
//! Numerically solve a given simulation setup.
//!
//! In the future, we plan on expanding the list of available backends.
//! We hope to provide specialized solvers for highly efficient GPU usage via the OpenCL standard.
//!
//! ## Supported Simulation Aspects
//! Not every backend does support all simulation aspects.
//! We aim to provide one general-purpose backend able to solve any given simulation that adheres
//! to the [cellular_raza_concepts] with the πΆοΈ [chili] backend.
//!
//! | Aspect | π§ [cpu_os_threads] | πΆοΈ [chili] | π― [cara] | πΊ [elli] |
//! | --- |:---:|:---:|:---:|:---:|
//! | [Cycle](cellular_raza_concepts::Cycle) | β
ΒΉ | β
|β |β |
//! | [Mechanics](cellular_raza_concepts::Mechanics) | β
ΒΉ | β
|β |β |
//! | [Interaction](cellular_raza_concepts::Interaction) | β
| β
|β |β |
//! | [Reactions](cellular_raza_concepts::Reactions) | β | β
|β |β |
//! | [ReactionsContact](cellular_raza_concepts::ReactionsContact) | β | β
|β |β |
//! | [ReactionsExtra](cellular_raza_concepts::ReactionsExtra) | β | β
|β |β |
//! | [Domain](cellular_raza_concepts::Domain) | β | β
|β |β |
//! | [DomainForce](cellular_raza_concepts::SubDomainForce) | β | β
|β |β |
//! | [Controller](cellular_raza_concepts::domain_old::Controller) | β
| β |β |β |
//! | Old Aspects |
//! | [ReactionsOld](cellular_raza_concepts::reactions_old::CellularReactions) | β
| β |β |β |
//! | [DomainOld](cellular_raza_concepts::domain_old::Domain) | β
| β |β |β |
//! | [Plotting](cellular_raza_concepts::PlotSelf) | β
| β |β |β |
//!
//! ΒΉOnly supports `Float=f64`.
/// π§ Use multiple os-threads and cpu-only resources
///
/// Parallelization is achieved by splitting the simulation domain into as many chunks as
/// threads are desired. Communication between threads is handled by
/// [crossbeam_channel](https://docs.rs/crossbeam-channel/latest/crossbeam_channel/)
/// and synchronization by [hurdles::Barrier](https://docs.rs/hurdles/latest/hurdles/).
///
/// The user can manage the simulation flow by means of individual functions or by creating a
/// [SimulationSupervisor](cpu_os_threads::SimulationSupervisor).
// TODO deprecate this!
// #[deprecated]
// #[allow(deprecated)]
#[cfg(feature = "cpu_os_threads")]
#[cfg_attr(docsrs, doc(cfg(feature = "cpu_os_threads")))]
pub mod cpu_os_threads;
#[cfg(feature = "chili")]
#[cfg_attr(docsrs, doc(cfg(feature = "chili")))]
pub mod chili;
#[cfg(feature = "cara")]
#[cfg_attr(docsrs, doc(cfg(feature = "cara")))]
pub mod cara;
#[cfg(feature = "elli")]
#[cfg_attr(docsrs, doc(cfg(feature = "elli")))]
pub mod elli;