16 stable releases (6 major)
9.0.0 | Sep 14, 2023 |
---|---|
8.0.1 | Sep 12, 2023 |
7.1.2 | Aug 27, 2023 |
7.1.1 | Jul 25, 2023 |
3.0.1 | Sep 20, 2022 |
#61 in Science
568 downloads per month
Used in 15 crates
(10 directly)
2MB
2.5K
SLoC
gmt_dos-actors
gmt_dos-actors is an implementation of the actor model applied to integrated modeling for the Giant Magellan Telescope.
Features
lib.rs
:
GMT Dynamic Optics Simulation Actors
The GMT DOS [Actor]s are the building blocks of the GMT DOS integrated model. Each [Actor] has 3 properties:
- input objects
- output objects
- client
Input/Outputs
input objects are a collection of inputs and output objects are a collection of outputs. An actor must have at least either 1 input or 1 output. A pair of input/output is linked with a channel where the input is the receiver and the output is the sender. The same output may be linked to several inputs. channels are used to synchronize the [Actor]s.
Each [Actor] performs the same task, within an infinite loop, consisting of 3 operations:
- receiving the inputs if any
- updating the client state
- sending the outputs if any
The loop exits when one of the following error happens: ActorError::NoData, ActorError::DropSend, ActorError::DropRecv.
Sampling rates
All the inputs of an [Actor] are collected are the same rate NI
, and all the outputs are distributed at the same rate NO
, however both inputs and outputs rates may be different.
The inputs rate NI
is inherited from the rate NO
of outputs that the data is collected from i.e. (next actor)::NI=(current actor)::NO
.
The rates NI
or NO
are defined as the ratio between the simulation sampling frequency [Hz]
and the actor inputs or outputs sampling frequency [Hz]
, it must be an integer ≥ 1.
If NI>NO
, outputs are upsampled with a simple sample-and-hold for NI/NO
samples.
If NO>NI
, outputs are decimated by a factor NO/NI
For a 1000Hz simulation sampling frequency, the following table gives some examples of inputs/outputs sampling frequencies and rate:
Inputs [Hz] |
Ouputs [Hz] |
NI | NO | Upsampling | Decimation |
---|---|---|---|---|---|
1000 | 1000 | 1 | 1 | - | 1 |
1000 | 100 | 1 | 10 | - | 10 |
100 | 1000 | 10 | 1 | 10 | - |
500 | 100 | 2 | 10 | - | 5 |
100 | 500 | 10 | 2 | 5 | - |
Client
A client must be assigned to an [Actor] and the client must implement some of the following traits:
- write if the actor has some outputs,
- read if the actor has some inputs,
- update, this trait must always be implemented (but the default empty implementation is acceptable)
Model
An integrated model is build as follows:
- select and instanciate the [clients]
- assign [clients] to [actor]s
- add outputs to the [Actor]s and connect them to inputs of other [Actor]s
- build a [mod@model]
- Check, run and wait for the Model completion
For more detailed explanations and examples, check the [actor] and [mod@model] modules.
Features
Dependencies
~5–17MB
~176K SLoC