aivika-4.5: A multi-method simulation library

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

Simulation.Aivika.Var.Unboxed

Description

Tested with: GHC 8.0.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

data Var 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.

varChanged :: Var a -> Signal a Source #

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

varChanged_ :: Var a -> Signal () Source #

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

newVar :: Unboxed a => a -> Simulation (Var a) Source #

Create a new variable.

readVar :: Unboxed a => Var a -> Event a Source #

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

This computation is destined for using within discrete event simulation.

varMemo :: Unboxed a => Var a -> Dynamics 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.

writeVar :: Unboxed a => Var a -> a -> Event () Source #

Write a new value into the variable.

modifyVar :: Unboxed a => Var a -> (a -> a) -> Event () Source #

Mutate the contents of the variable.

freezeVar :: Unboxed a => Var a -> Event (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.