Every flow
==========

Overview
--------

Field            Value
---------------  -------------------
Name             Every flow
Version          1.0
Kind             aggregate
Engine           DifferenceEquations
Engine settings  defaults
Dynamics         difference equation
Step unit        step

Entities and state variables
----------------------------

Bins
~~~~
Bin  Name     Unit
---  -------  ----
A    State A
B    State B
C    State C

Stratifications
~~~~~~~~~~~~~~~
Stratification  Categories  Splits
--------------  ----------  -----------------
group           g1, g2      every compartment

Compartments
~~~~~~~~~~~~
Compartment  Bin  Categories
-----------  ---  ----------
A_g1         A    group=g1
A_g2         A    group=g2
B_g1         B    group=g1
B_g2         B    group=g2
C_g1         C    group=g1
C_g2         C    group=g2

Dynamics
--------

Compact form
~~~~~~~~~~~~
Bin Transitions:
pair (A, B -> C):
  A_g1 -> C_g1: k1 * A * B
  B_g1 -> C_g1: k1 * A * B
  A_g2 -> C_g2: k1 * A * B
  B_g2 -> C_g2: k1 * A * B

spread (A, B -> B):
  A_g1 -> B_g1: k1 * A * B / total
  B_g1 -> B_g1: k1 * A * B / total
  A_g2 -> B_g2: k1 * A * B / total
  B_g2 -> B_g2: k1 * A * B / total

split (A -> B, C):
  A_g1 -> B_g1: 0.05 * A_g1
  none -> C_g1: 0.05 * A_g1
  A_g2 -> B_g2: 0.05 * A_g2
  none -> C_g2: 0.05 * A_g2

loop (B -> B):
  B_g1 -> B_g1: 0.1 * B_g1
  B_g2 -> B_g2: 0.1 * B_g2

inflow (none -> A):
  none -> A_g1: b
  none -> A_g2: b

dose (A -> B, impulse at 1, 3):
  A_g1 -> B_g1: 0.1 * A_g1
  A_g2 -> B_g2: 0.1 * A_g2

outflow (C -> none):
  C_g1 -> none: 0.01 * C_g1
  C_g2 -> none: 0.01 * C_g2

pending (A -> C):
  (none)

boost (B -> C, impulse every 7 from 0):
  B_g1 -> C_g1: 0.5 * B_g1
  B_g2 -> C_g2: 0.5 * B_g2

Group Stratification Transitions:
move (g1 -> g2):
  A_g1 -> A_g2: 0.02 * A_g1
  B_g1 -> B_g2: 0.02 * B_g1
  C_g1 -> C_g2: 0.02 * C_g1

Total System: 6 coupled equations (3 bins × 2 group)

Expanded form
~~~~~~~~~~~~~
[A_g1(t+Dt) - A_g1(t)] / Dt = - (k1 * A * B) - (k1 * A * B / total) - (0.05 * A_g1) + (b) - (0.02 * A_g1)
[A_g2(t+Dt) - A_g2(t)] / Dt = - (k1 * A * B) - (k1 * A * B / total) - (0.05 * A_g2) + (b) + (0.02 * A_g1)
[B_g1(t+Dt) - B_g1(t)] / Dt = - (k1 * A * B) + (k1 * A * B / total) + (0.05 * A_g1) - (0.02 * B_g1)
[B_g2(t+Dt) - B_g2(t)] / Dt = - (k1 * A * B) + (k1 * A * B / total) + (0.05 * A_g2) + (0.02 * B_g1)
[C_g1(t+Dt) - C_g1(t)] / Dt = (2 * k1 * A * B) + (0.05 * A_g1) - (0.01 * C_g1) - (0.02 * C_g1)
[C_g2(t+Dt) - C_g2(t)] / Dt = (2 * k1 * A * B) + (0.05 * A_g2) - (0.01 * C_g2) + (0.02 * C_g1)

Impulses
~~~~~~~~
dose, impulse at 1, 3:
  A_g1 -> B_g1: 0.1 * A_g1
  A_g2 -> B_g2: 0.1 * A_g2

boost, impulse every 7 from 0:
  B_g1 -> C_g1: 0.5 * B_g1
  B_g2 -> C_g2: 0.5 * B_g2

Schedule
--------

Each step applies every flow once, computed from the state at the start of the step: X(n + 1) = X(n) + sum of the flows. The impulses of a step act first, and its flows run from the new state.

Initialization
--------------

Bin fractions
~~~~~~~~~~~~~
Bin  Fraction  Amount
---  --------  ------
A    0.5       500
B    0.5       500
C    0         0

Stratification fractions
~~~~~~~~~~~~~~~~~~~~~~~~
Stratification  Category  Fraction  Of
--------------  --------  --------  -----
group           g1        0.5       total
group           g2        0.5       total

Initial state (total 1000)
~~~~~~~~~~~~~~~~~~~~~~~~~~
Compartment  Amount
-----------  ------
A_g1         250
A_g2         250
B_g1         250
B_g2         250
C_g1         0
C_g2         0

Parameters
----------

Parameter  Value  Unit  Set by calibration  Description
---------  -----  ----  ------------------  -----------
k1         0.001        no
b          1            no

Outputs
-------

Source  Outputs
------  ----------
A       A_g1, A_g2
B       B_g1, B_g2
C       C_g1, C_g2
