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
56
//! 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) | β
| β
|β |β |
//! | [NeighborSensing](cellular_raza_concepts::NeighborSensing) | β | β
|β |β |
//! | [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)]