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 | Haskell98 |
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 runEvent
function using modes IncludingCurrentEventsOrFromPast
and
IncludingEarlierEventsOrFromPast
, 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
.