| Copyright | Copyright (c) 2009-2013, David Sorokin <david.sorokin@gmail.com> | 
|---|---|
| License | BSD3 | 
| Maintainer | David Sorokin <david.sorokin@gmail.com> | 
| Stability | experimental | 
| Safe Haskell | Safe-Inferred | 
| Language | Haskell2010 | 
Simulation.Aivika.Var.Unboxed
Description
Tested with: GHC 7.6.3
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 an unboxed array, which allows using the variable in differential and difference equations under some conditions.
- data Var a
- varChanged :: Var a -> Signal a
- varChanged_ :: Var a -> Signal ()
- newVar :: Unboxed a => a -> Simulation (Var a)
- readVar :: Unboxed a => Var a -> Event a
- writeVar :: Unboxed a => Var a -> a -> Event ()
- modifyVar :: Unboxed a => Var a -> (a -> a) -> Event ()
- freezeVar :: Unboxed a => Var a -> Event (Array Int Double, Array Int a)
Documentation
Like the Ref reference but keeps the history of changes in 
 different time points. The Var variable is usually safe in the hybrid 
 simulation, for example, when it can be used in the differential or
 difference equations unless you update the variable twice in the
 same integration time point. 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 value of a variable.
It is safe to run the resulting computation with help of the runEventWith
 function using modes CurrentEventsOrFromPast and EarlierEventsOrFromPast, 
 which is necessary if you are going to use the variable in the differential 
 or difference equations. Only it is preferrable if the variable is not updated twice
 in the same integration time point; otherwise, different values can be returned
 for the same point.
freezeVar :: Unboxed a => Var a -> Event (Array Int Double, Array Int a) Source
Freeze the variable and return in arrays the time points and corresponded values when the variable had changed in different time points: (1) the last actual value per each time point is provided and (2) the time points are sorted in ascending order.
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.