aivika-transformers-4.3.5: Transformers for the Aivika simulation library

CopyrightCopyright (c) 2009-2015, David Sorokin <david.sorokin@gmail.com>
LicenseBSD3
MaintainerDavid Sorokin <david.sorokin@gmail.com>
Stabilityexperimental
Safe HaskellNone
LanguageHaskell2010

Simulation.Aivika.Trans.Var.Unboxed

Description

Tested with: GHC 7.10.1

This module defines an unboxed variable that is bound up with the event queue and that keeps the history of changes storing the values in unboxed arrays, which allows using the variable in differential and difference equations of System Dynamics within hybrid discrete-continuous simulation.

Synopsis

Documentation

class MonadDES m => MonadVar m a where Source

A type class of monads within which we can create mutable unboxed variables.

Associated Types

data Var m a Source

Like the Ref reference but keeps the history of changes in different time points. The Var variable is safe to be used in the hybrid discrete-continuous simulation.

For example, the memoised values of a variable can be used in the differential or difference equations of System Dynamics, while the variable iself can be updated wihin the discrete event simulation.

Only this variable is much slower than the reference.

Methods

newVar :: a -> Simulation m (Var m a) Source

Create a new variable.

varMemo :: Var m a -> Dynamics m a Source

Read the first actual, i.e. memoised, value of a variable for the requested time actuating the current events from the queue if needed.

This computation can be used in the ordinary differential and difference equations of System Dynamics.

readVar :: Var m a -> Event m a Source

Read the recent actual value of a variable for the requested time.

This computation is destined for using within discrete event simulation.

writeVar :: Var m a -> a -> Event m () Source

Write a new value into the variable.

modifyVar :: Var m a -> (a -> a) -> Event m () Source

Mutate the contents of the variable.

freezeVar :: Var m a -> Event m (Array Int Double, Array Int a, Array Int a) Source

Freeze the variable and return in arrays the time points and corresponded first and last values when the variable had changed or had been memoised in different time points: (1) the time points are sorted in ascending order; (2) the first and last actual values per each time point are provided.

If you need to get all changes including those ones that correspond to the same simulation time points then you can use the newSignalHistory function passing in the varChanged signal to it and then call function readSignalHistory.

varChanged :: Var m a -> Signal m a Source

Return a signal that notifies about every change of the variable state.

varChanged_ :: MonadDES m => Var m a -> Signal m () Source

Return a signal that notifies about every change of the variable state.