aivika-experiment-chart 2.1 → 3.0
raw patch · 37 files changed
+287/−88 lines, 37 filesdep ~aivikadep ~aivika-experimentPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: aivika, aivika-experiment
API changes (from Hackage documentation)
- Simulation.Aivika.Experiment.Chart.DeviationChartView: instance WebPageCharting r => ExperimentView DeviationChartView r WebPageWriter
- Simulation.Aivika.Experiment.Chart.FinalHistogramView: instance WebPageCharting r => ExperimentView FinalHistogramView r WebPageWriter
- Simulation.Aivika.Experiment.Chart.FinalXYChartView: instance WebPageCharting r => ExperimentView FinalXYChartView r WebPageWriter
- Simulation.Aivika.Experiment.Chart.HistogramView: instance WebPageCharting r => ExperimentView HistogramView r WebPageWriter
- Simulation.Aivika.Experiment.Chart.TimeSeriesView: instance WebPageCharting r => ExperimentView TimeSeriesView r WebPageWriter
- Simulation.Aivika.Experiment.Chart.Types: class WebPageRendering r => WebPageCharting r
- Simulation.Aivika.Experiment.Chart.XYChartView: instance WebPageCharting r => ExperimentView XYChartView r WebPageWriter
+ Simulation.Aivika.Experiment.Chart.DeviationChartView: instance ChartRendering r => ExperimentView DeviationChartView (FileRenderer r)
+ Simulation.Aivika.Experiment.Chart.DeviationChartView: instance ChartRendering r => ExperimentView DeviationChartView (WebPageRenderer r)
+ Simulation.Aivika.Experiment.Chart.FinalHistogramView: instance ChartRendering r => ExperimentView FinalHistogramView (FileRenderer r)
+ Simulation.Aivika.Experiment.Chart.FinalHistogramView: instance ChartRendering r => ExperimentView FinalHistogramView (WebPageRenderer r)
+ Simulation.Aivika.Experiment.Chart.FinalXYChartView: instance ChartRendering r => ExperimentView FinalXYChartView (FileRenderer r)
+ Simulation.Aivika.Experiment.Chart.FinalXYChartView: instance ChartRendering r => ExperimentView FinalXYChartView (WebPageRenderer r)
+ Simulation.Aivika.Experiment.Chart.HistogramView: instance ChartRendering r => ExperimentView HistogramView (FileRenderer r)
+ Simulation.Aivika.Experiment.Chart.HistogramView: instance ChartRendering r => ExperimentView HistogramView (WebPageRenderer r)
+ Simulation.Aivika.Experiment.Chart.TimeSeriesView: instance ChartRendering r => ExperimentView TimeSeriesView (FileRenderer r)
+ Simulation.Aivika.Experiment.Chart.TimeSeriesView: instance ChartRendering r => ExperimentView TimeSeriesView (WebPageRenderer r)
+ Simulation.Aivika.Experiment.Chart.Types: class ChartRendering r
+ Simulation.Aivika.Experiment.Chart.XYChartView: instance ChartRendering r => ExperimentView XYChartView (FileRenderer r)
+ Simulation.Aivika.Experiment.Chart.XYChartView: instance ChartRendering r => ExperimentView XYChartView (WebPageRenderer r)
- Simulation.Aivika.Experiment.Chart.Types: renderChart :: WebPageCharting r => r -> (Int, Int) -> FilePath -> Renderable c -> IO (PickFn c)
+ Simulation.Aivika.Experiment.Chart.Types: renderChart :: ChartRendering r => r -> (Int, Int) -> FilePath -> Renderable c -> IO (PickFn c)
- Simulation.Aivika.Experiment.Chart.Types: renderableChartExtension :: WebPageCharting r => r -> String
+ Simulation.Aivika.Experiment.Chart.Types: renderableChartExtension :: ChartRendering r => r -> String
Files
- Simulation/Aivika/Experiment/Chart/DeviationChartView.hs +18/−6
- Simulation/Aivika/Experiment/Chart/FinalHistogramView.hs +18/−6
- Simulation/Aivika/Experiment/Chart/FinalXYChartView.hs +18/−6
- Simulation/Aivika/Experiment/Chart/HistogramView.hs +19/−7
- Simulation/Aivika/Experiment/Chart/TimeSeriesView.hs +19/−7
- Simulation/Aivika/Experiment/Chart/Types.hs +2/−2
- Simulation/Aivika/Experiment/Chart/XYChartView.hs +19/−7
- aivika-experiment-chart.cabal +9/−5
- examples/BassDiffusion/Experiment.hs +1/−1
- examples/BassDiffusion/MainUsingCairo.hs +1/−1
- examples/BassDiffusion/MainUsingDiagrams.hs +1/−1
- examples/BouncingBall/Experiment.hs +42/−0
- examples/BouncingBall/MainUsingCairo.hs +12/−0
- examples/BouncingBall/MainUsingDiagrams.hs +14/−0
- examples/BouncingBall/Model.hs +50/−0
- examples/BouncingBall/README +5/−0
- examples/ChemicalReaction/Experiment.hs +1/−1
- examples/ChemicalReaction/MainUsingCairo.hs +1/−1
- examples/ChemicalReaction/MainUsingDiagrams.hs +1/−1
- examples/DifferenceEquations/Experiment.hs +1/−1
- examples/DifferenceEquations/MainUsingCairo.hs +1/−1
- examples/DifferenceEquations/MainUsingDiagrams.hs +1/−1
- examples/Financial/Experiment.hs +2/−2
- examples/Financial/MainUsingCairo.hs +2/−2
- examples/Financial/MainUsingDiagrams.hs +2/−2
- examples/Furnace/Experiment.hs +8/−8
- examples/Furnace/MainUsingCairo.hs +1/−1
- examples/Furnace/MainUsingDiagrams.hs +1/−1
- examples/InspectionAdjustmentStations/Experiment.hs +9/−9
- examples/InspectionAdjustmentStations/MainUsingCairo.hs +1/−1
- examples/InspectionAdjustmentStations/MainUsingDiagrams.hs +1/−1
- examples/LinearArray/Experiment.hs +1/−1
- examples/LinearArray/MainUsingCairo.hs +1/−1
- examples/LinearArray/MainUsingDiagrams.hs +1/−1
- examples/MachRep3/Experiment.hs +1/−1
- examples/MachRep3/MainUsingCairo.hs +1/−1
- examples/MachRep3/MainUsingDiagrams.hs +1/−1
Simulation/Aivika/Experiment/Chart/DeviationChartView.hs view
@@ -1,5 +1,5 @@ -{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses #-}+{-# LANGUAGE MultiParamTypeClasses #-} -- | -- Module : Simulation.Aivika.Experiment.Chart.DeviationChartView@@ -120,20 +120,32 @@ deviationChartBottomAxis = id, deviationChartLayout = id } -instance WebPageCharting r => ExperimentView DeviationChartView r WebPageWriter where+instance ChartRendering r => ExperimentView DeviationChartView (WebPageRenderer r) where outputView v = - let reporter exp renderer dir =+ let reporter exp (WebPageRenderer renderer) dir = do st <- newDeviationChart v exp renderer dir- let writer =+ let context =+ WebPageContext $ WebPageWriter { reporterWriteTOCHtml = deviationChartTOCHtml st, reporterWriteHtml = deviationChartHtml st } return ExperimentReporter { reporterInitialise = return (), reporterFinalise = finaliseDeviationChart st, reporterSimulate = simulateDeviationChart st,- reporterRequest = writer }+ reporterContext = context } in ExperimentGenerator { generateReporter = reporter }++instance ChartRendering r => ExperimentView DeviationChartView (FileRenderer r) where + outputView v = + let reporter exp (FileRenderer renderer) dir =+ do st <- newDeviationChart v exp renderer dir+ return ExperimentReporter { reporterInitialise = return (),+ reporterFinalise = finaliseDeviationChart st,+ reporterSimulate = simulateDeviationChart st,+ reporterContext = FileContext }+ in ExperimentGenerator { generateReporter = reporter }+ -- | The state of the view. data DeviationChartViewState r = DeviationChartViewState { deviationChartView :: DeviationChartView,@@ -218,7 +230,7 @@ y' `seq` writeArray stats i y' -- | Plot the deviation chart after the simulation is complete.-finaliseDeviationChart :: WebPageCharting r => DeviationChartViewState r -> ExperimentWriter ()+finaliseDeviationChart :: ChartRendering r => DeviationChartViewState r -> ExperimentWriter () finaliseDeviationChart st = do let view = deviationChartView st title = deviationChartTitle view
Simulation/Aivika/Experiment/Chart/FinalHistogramView.hs view
@@ -1,5 +1,5 @@ -{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses #-}+{-# LANGUAGE MultiParamTypeClasses #-} -- | -- Module : Simulation.Aivika.Experiment.Chart.FinalHistogramView@@ -112,20 +112,32 @@ finalHistogramPlotBars = colourisePlotBars, finalHistogramLayout = id } -instance WebPageCharting r => ExperimentView FinalHistogramView r WebPageWriter where+instance ChartRendering r => ExperimentView FinalHistogramView (WebPageRenderer r) where outputView v = - let reporter exp renderer dir =+ let reporter exp (WebPageRenderer renderer) dir = do st <- newFinalHistogram v exp renderer dir- let writer =+ let context =+ WebPageContext $ WebPageWriter { reporterWriteTOCHtml = finalHistogramTOCHtml st, reporterWriteHtml = finalHistogramHtml st } return ExperimentReporter { reporterInitialise = return (), reporterFinalise = finaliseFinalHistogram st, reporterSimulate = simulateFinalHistogram st,- reporterRequest = writer }+ reporterContext = context } in ExperimentGenerator { generateReporter = reporter }++instance ChartRendering r => ExperimentView FinalHistogramView (FileRenderer r) where + outputView v = + let reporter exp (FileRenderer renderer) dir =+ do st <- newFinalHistogram v exp renderer dir+ return ExperimentReporter { reporterInitialise = return (),+ reporterFinalise = finaliseFinalHistogram st,+ reporterSimulate = simulateFinalHistogram st,+ reporterContext = FileContext }+ in ExperimentGenerator { generateReporter = reporter }+ -- | The state of the view. data FinalHistogramViewState r = FinalHistogramViewState { finalHistogramView :: FinalHistogramView,@@ -191,7 +203,7 @@ modifyMRef_ values $ return . (++) x -- | Plot the histogram after the simulation is complete.-finaliseFinalHistogram :: WebPageCharting r => FinalHistogramViewState r -> ExperimentWriter ()+finaliseFinalHistogram :: ChartRendering r => FinalHistogramViewState r -> ExperimentWriter () finaliseFinalHistogram st = do let view = finalHistogramView st title = finalHistogramTitle view
Simulation/Aivika/Experiment/Chart/FinalXYChartView.hs view
@@ -1,5 +1,5 @@ -{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses #-}+{-# LANGUAGE MultiParamTypeClasses #-} -- | -- Module : Simulation.Aivika.Experiment.Chart.FinalXYChartView@@ -129,20 +129,32 @@ finalXYChartBottomAxis = id, finalXYChartLayout = id } -instance WebPageCharting r => ExperimentView FinalXYChartView r WebPageWriter where+instance ChartRendering r => ExperimentView FinalXYChartView (WebPageRenderer r) where outputView v = - let reporter exp renderer dir =+ let reporter exp (WebPageRenderer renderer) dir = do st <- newFinalXYChart v exp renderer dir- let writer =+ let context =+ WebPageContext $ WebPageWriter { reporterWriteTOCHtml = finalXYChartTOCHtml st, reporterWriteHtml = finalXYChartHtml st } return ExperimentReporter { reporterInitialise = return (), reporterFinalise = finaliseFinalXYChart st, reporterSimulate = simulateFinalXYChart st,- reporterRequest = writer }+ reporterContext = context } in ExperimentGenerator { generateReporter = reporter }++instance ChartRendering r => ExperimentView FinalXYChartView (FileRenderer r) where + outputView v = + let reporter exp (FileRenderer renderer) dir =+ do st <- newFinalXYChart v exp renderer dir+ return ExperimentReporter { reporterInitialise = return (),+ reporterFinalise = finaliseFinalXYChart st,+ reporterSimulate = simulateFinalXYChart st,+ reporterContext = FileContext }+ in ExperimentGenerator { generateReporter = reporter }+ -- | The state of the view. data FinalXYChartViewState r = FinalXYChartViewState { finalXYChartView :: FinalXYChartView,@@ -235,7 +247,7 @@ x `seq` y `seq` writeArray xy i $ Just (x, y) -- | Plot the XY chart after the simulation is complete.-finaliseFinalXYChart :: WebPageCharting r => FinalXYChartViewState r -> ExperimentWriter ()+finaliseFinalXYChart :: ChartRendering r => FinalXYChartViewState r -> ExperimentWriter () finaliseFinalXYChart st = do let view = finalXYChartView st title = finalXYChartTitle view
Simulation/Aivika/Experiment/Chart/HistogramView.hs view
@@ -1,5 +1,5 @@ -{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses #-}+{-# LANGUAGE MultiParamTypeClasses #-} -- | -- Module : Simulation.Aivika.Experiment.Chart.HistogramView@@ -122,20 +122,32 @@ histogramPlotBars = colourisePlotBars, histogramLayout = id } -instance WebPageCharting r => ExperimentView HistogramView r WebPageWriter where+instance ChartRendering r => ExperimentView HistogramView (WebPageRenderer r) where outputView v = - let reporter exp renderer dir =+ let reporter exp (WebPageRenderer renderer) dir = do st <- newHistogram v exp renderer dir- let writer =+ let context =+ WebPageContext $ WebPageWriter { reporterWriteTOCHtml = histogramTOCHtml st, reporterWriteHtml = histogramHtml st } return ExperimentReporter { reporterInitialise = return (), reporterFinalise = return (), reporterSimulate = simulateHistogram st,- reporterRequest = writer }+ reporterContext = context } in ExperimentGenerator { generateReporter = reporter }++instance ChartRendering r => ExperimentView HistogramView (FileRenderer r) where + outputView v = + let reporter exp (FileRenderer renderer) dir =+ do st <- newHistogram v exp renderer dir+ return ExperimentReporter { reporterInitialise = return (),+ reporterFinalise = return (),+ reporterSimulate = simulateHistogram st,+ reporterContext = FileContext }+ in ExperimentGenerator { generateReporter = reporter }+ -- | The state of the view. data HistogramViewState r = HistogramViewState { histogramView :: HistogramView,@@ -145,7 +157,7 @@ histogramMap :: M.Map Int FilePath } -- | Create a new state of the view.-newHistogram :: WebPageCharting r => HistogramView -> Experiment -> r -> FilePath -> ExperimentWriter (HistogramViewState r)+newHistogram :: ChartRendering r => HistogramView -> Experiment -> r -> FilePath -> ExperimentWriter (HistogramViewState r) newHistogram view exp renderer dir = do let n = experimentRunCount exp fs <- forM [0..(n - 1)] $ \i ->@@ -164,7 +176,7 @@ histogramMap = m } -- | Plot the histogram during the simulation.-simulateHistogram :: WebPageCharting r => HistogramViewState r -> ExperimentData -> Event DisposableEvent+simulateHistogram :: ChartRendering r => HistogramViewState r -> ExperimentData -> Event DisposableEvent simulateHistogram st expdata = do let view = histogramView st rs = histogramSeries view $
Simulation/Aivika/Experiment/Chart/TimeSeriesView.hs view
@@ -1,5 +1,5 @@ -{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses #-}+{-# LANGUAGE MultiParamTypeClasses #-} -- | -- Module : Simulation.Aivika.Experiment.Chart.TimeSeriesView@@ -127,20 +127,32 @@ timeSeriesBottomAxis = id, timeSeriesLayout = id } -instance WebPageCharting r => ExperimentView TimeSeriesView r WebPageWriter where+instance ChartRendering r => ExperimentView TimeSeriesView (WebPageRenderer r) where outputView v = - let reporter exp renderer dir =+ let reporter exp (WebPageRenderer renderer) dir = do st <- newTimeSeries v exp renderer dir- let writer =+ let context =+ WebPageContext $ WebPageWriter { reporterWriteTOCHtml = timeSeriesTOCHtml st, reporterWriteHtml = timeSeriesHtml st } return ExperimentReporter { reporterInitialise = return (), reporterFinalise = return (), reporterSimulate = simulateTimeSeries st,- reporterRequest = writer }+ reporterContext = context } in ExperimentGenerator { generateReporter = reporter }++instance ChartRendering r => ExperimentView TimeSeriesView (FileRenderer r) where + outputView v = + let reporter exp (FileRenderer renderer) dir =+ do st <- newTimeSeries v exp renderer dir+ return ExperimentReporter { reporterInitialise = return (),+ reporterFinalise = return (),+ reporterSimulate = simulateTimeSeries st,+ reporterContext = FileContext }+ in ExperimentGenerator { generateReporter = reporter }+ -- | The state of the view. data TimeSeriesViewState r = TimeSeriesViewState { timeSeriesView :: TimeSeriesView,@@ -150,7 +162,7 @@ timeSeriesMap :: M.Map Int FilePath } -- | Create a new state of the view.-newTimeSeries :: WebPageCharting r => TimeSeriesView -> Experiment -> r -> FilePath -> ExperimentWriter (TimeSeriesViewState r)+newTimeSeries :: ChartRendering r => TimeSeriesView -> Experiment -> r -> FilePath -> ExperimentWriter (TimeSeriesViewState r) newTimeSeries view exp renderer dir = do let n = experimentRunCount exp fs <- forM [0..(n - 1)] $ \i ->@@ -169,7 +181,7 @@ timeSeriesMap = m } -- | Plot the time series chart within simulation.-simulateTimeSeries :: WebPageCharting r => TimeSeriesViewState r -> ExperimentData -> Event DisposableEvent+simulateTimeSeries :: ChartRendering r => TimeSeriesViewState r -> ExperimentData -> Event DisposableEvent simulateTimeSeries st expdata = do let view = timeSeriesView st rs1 = timeSeriesLeftYSeries view $
Simulation/Aivika/Experiment/Chart/Types.hs view
@@ -11,14 +11,14 @@ -- module Simulation.Aivika.Experiment.Chart.Types- (WebPageCharting(..)) where+ (ChartRendering(..)) where import Graphics.Rendering.Chart import Simulation.Aivika.Experiment -- | A type class of chart renderers.-class WebPageRendering r => WebPageCharting r where+class ChartRendering r where -- | The file extension used when rendering. renderableChartExtension :: r -> String
Simulation/Aivika/Experiment/Chart/XYChartView.hs view
@@ -1,5 +1,5 @@ -{-# LANGUAGE FlexibleInstances, MultiParamTypeClasses #-}+{-# LANGUAGE MultiParamTypeClasses #-} -- | -- Module : Simulation.Aivika.Experiment.Chart.XYChartView@@ -136,20 +136,32 @@ xyChartBottomAxis = id, xyChartLayout = id } -instance WebPageCharting r => ExperimentView XYChartView r WebPageWriter where+instance ChartRendering r => ExperimentView XYChartView (WebPageRenderer r) where outputView v = - let reporter exp renderer dir =+ let reporter exp (WebPageRenderer renderer) dir = do st <- newXYChart v exp renderer dir- let writer =+ let context =+ WebPageContext $ WebPageWriter { reporterWriteTOCHtml = xyChartTOCHtml st, reporterWriteHtml = xyChartHtml st } return ExperimentReporter { reporterInitialise = return (), reporterFinalise = return (), reporterSimulate = simulateXYChart st,- reporterRequest = writer }+ reporterContext = context } in ExperimentGenerator { generateReporter = reporter }++instance ChartRendering r => ExperimentView XYChartView (FileRenderer r) where + outputView v = + let reporter exp (FileRenderer renderer) dir =+ do st <- newXYChart v exp renderer dir+ return ExperimentReporter { reporterInitialise = return (),+ reporterFinalise = return (),+ reporterSimulate = simulateXYChart st,+ reporterContext = FileContext }+ in ExperimentGenerator { generateReporter = reporter }+ -- | The state of the view. data XYChartViewState r = XYChartViewState { xyChartView :: XYChartView,@@ -159,7 +171,7 @@ xyChartMap :: M.Map Int FilePath } -- | Create a new state of the view.-newXYChart :: WebPageCharting r => XYChartView -> Experiment -> r -> FilePath -> ExperimentWriter (XYChartViewState r)+newXYChart :: ChartRendering r => XYChartView -> Experiment -> r -> FilePath -> ExperimentWriter (XYChartViewState r) newXYChart view exp renderer dir = do let n = experimentRunCount exp fs <- forM [0..(n - 1)] $ \i ->@@ -178,7 +190,7 @@ xyChartMap = m } -- | Plot the XY chart during the simulation.-simulateXYChart :: WebPageCharting r => XYChartViewState r -> ExperimentData -> Event DisposableEvent+simulateXYChart :: ChartRendering r => XYChartViewState r -> ExperimentData -> Event DisposableEvent simulateXYChart st expdata = do let view = xyChartView st rs0 = xyChartXSeries view $
aivika-experiment-chart.cabal view
@@ -1,5 +1,5 @@ name: aivika-experiment-chart-version: 2.1+version: 3.0 synopsis: Simulation experiments with charting for the Aivika library description: This package complements the Aivika and Aivika Experiment packages with@@ -28,6 +28,11 @@ examples/BassDiffusion/MainUsingCairo.hs examples/BassDiffusion/MainUsingDiagrams.hs examples/BassDiffusion/README+ examples/BouncingBall/Model.hs+ examples/BouncingBall/Experiment.hs+ examples/BouncingBall/MainUsingCairo.hs+ examples/BouncingBall/MainUsingDiagrams.hs+ examples/BouncingBall/README examples/ChemicalReaction/Model.hs examples/ChemicalReaction/Experiment.hs examples/ChemicalReaction/MainUsingCairo.hs@@ -86,11 +91,10 @@ lens >= 3.9, data-default-class < 0.1, colour >= 2.3.3,- aivika >= 2.1,- aivika-experiment >= 2.1+ aivika >= 3.0,+ aivika-experiment >= 3.0 - extensions: FlexibleInstances,- MultiParamTypeClasses+ extensions: MultiParamTypeClasses ghc-options: -O2
examples/BassDiffusion/Experiment.hs view
@@ -20,7 +20,7 @@ experimentRunCount = 20, experimentDescription = "This is the famous Bass Diffusion model solved with help of the agent-based modelling." } -generators :: WebPageCharting r => [WebPageGenerator r]+generators :: ChartRendering r => [WebPageGenerator r] generators = [outputView defaultExperimentSpecsView, outputView $ defaultDeviationChartView {
examples/BassDiffusion/MainUsingCairo.hs view
@@ -9,4 +9,4 @@ import Model import Experiment -main = runExperiment experiment generators (CairoRenderer PNG) model+main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model
examples/BassDiffusion/MainUsingDiagrams.hs view
@@ -11,4 +11,4 @@ import Model import Experiment -main = runExperiment experiment generators (DiagramsRenderer SVG M.empty) model+main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG M.empty) model
+ examples/BouncingBall/Experiment.hs view
@@ -0,0 +1,42 @@++module Experiment (experiment, generators) where++import Data.Monoid++import Simulation.Aivika+import Simulation.Aivika.Experiment+import Simulation.Aivika.Experiment.Chart++specs = Specs { spcStartTime = 0, + spcStopTime = 25, + spcDT = 0.01,+ spcMethod = RungeKutta4,+ spcGeneratorType = SimpleGenerator }++experiment :: Experiment+experiment =+ defaultExperiment {+ experimentSpecs = specs,+ experimentRunCount = 1,+ experimentTitle = "Bouncing Ball",+ experimentDescription = "Simulation of a Bouncing Ball as described in " +++ "the corresponded MATLAB & Simulink example" }++generators :: ChartRendering r => [WebPageGenerator r]+generators =+ [outputView defaultExperimentSpecsView,+ outputView $ defaultTableView {+ tableSeries =+ resultByName "t" <>+ resultByName "x" <>+ resultByName "v" },+ outputView $ defaultTimeSeriesView {+ timeSeriesDescription = "The chart shows the position of the ball",+ timeSeriesTitle = "Position",+ timeSeriesLeftYSeries =+ resultByName "x" },+ outputView $ defaultTimeSeriesView {+ timeSeriesDescription = "The chart shows the velocity of the ball",+ timeSeriesTitle = "Velocity",+ timeSeriesLeftYSeries =+ resultByName "v" } ]
+ examples/BouncingBall/MainUsingCairo.hs view
@@ -0,0 +1,12 @@++-- To run, package aivika-experiment-cairo must be installed.++import Simulation.Aivika.Experiment+import Simulation.Aivika.Experiment.Chart.Backend.Cairo++import Graphics.Rendering.Chart.Backend.Cairo++import Model+import Experiment++main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model
+ examples/BouncingBall/MainUsingDiagrams.hs view
@@ -0,0 +1,14 @@++-- To run, package aivika-experiment-diagrams must be installed.++import Simulation.Aivika.Experiment+import Simulation.Aivika.Experiment.Chart.Backend.Diagrams++import Graphics.Rendering.Chart.Backend.Diagrams++import qualified Data.Map as M++import Model+import Experiment++main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG M.empty) model
+ examples/BouncingBall/Model.hs view
@@ -0,0 +1,50 @@++{-# LANGUAGE RecursiveDo #-}++-- Example: Simulation of a Bouncing Ball.+--+-- It is described in MATLAB & Simulink example available by the following link:+--+-- http://www.mathworks.com/help/simulink/examples/simulation-of-a-bouncing-ball.html++module Model (model) where++import Control.Monad+import Control.Monad.Trans++import Simulation.Aivika+import Simulation.Aivika.SystemDynamics++-- the acceleration due to gravity+g = 9.81++-- the initial velocity+v0 = 15++-- the initial position+x0 = 10++-- the coefficient of restitution of the ball+k = 0.8++model :: Simulation Results+model = mdo+ v <- integEither dv v0+ x <- integEither dx x0+ let dv = do+ x' <- x+ v' <- v+ if x' < 0+ then return $ Left (- k * v')+ else return $ Right (- g)+ dx = do+ x' <- x+ v' <- v+ if x' < 0+ then return $ Left 0+ else return $ Right v'+ return $+ results+ [resultSource "t" "time" time,+ resultSource "x" "position" x,+ resultSource "v" "velocity" v]
+ examples/BouncingBall/README view
@@ -0,0 +1,5 @@+Example: Simulation of a Bouncing Ball.++It is described in MATLAB & Simulink example available by the following link:++http://www.mathworks.com/help/simulink/examples/simulation-of-a-bouncing-ball.html
examples/ChemicalReaction/Experiment.hs view
@@ -22,7 +22,7 @@ experimentDescription = "Chemical Reaction as described in " ++ "the 5-minute tutorial of Berkeley-Madonna" } -generators :: WebPageCharting r => [WebPageGenerator r]+generators :: ChartRendering r => [WebPageGenerator r] generators = [outputView defaultExperimentSpecsView, outputView $ defaultLastValueView {
examples/ChemicalReaction/MainUsingCairo.hs view
@@ -9,4 +9,4 @@ import Model import Experiment -main = runExperiment experiment generators (CairoRenderer PNG) model+main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model
examples/ChemicalReaction/MainUsingDiagrams.hs view
@@ -11,4 +11,4 @@ import Model import Experiment -main = runExperiment experiment generators (DiagramsRenderer SVG M.empty) model+main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG M.empty) model
examples/DifferenceEquations/Experiment.hs view
@@ -23,7 +23,7 @@ "the corresponded tutorial of Berkeley-Madonna " ++ "with small modification for calculating std." } -generators :: WebPageCharting r => [WebPageGenerator r]+generators :: ChartRendering r => [WebPageGenerator r] generators = [outputView defaultExperimentSpecsView, outputView $ defaultTableView {
examples/DifferenceEquations/MainUsingCairo.hs view
@@ -9,4 +9,4 @@ import Model import Experiment -main = runExperiment experiment generators (CairoRenderer PNG) model+main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model
examples/DifferenceEquations/MainUsingDiagrams.hs view
@@ -11,4 +11,4 @@ import Model import Experiment -main = runExperiment experiment generators (DiagramsRenderer SVG M.empty) model+main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG M.empty) model
examples/Financial/Experiment.hs view
@@ -25,7 +25,7 @@ experimentDescription = "Financial Model (the Monte-Carlo simulation) as described in " ++ "Vensim 5 Modeling Guide, Chapter Financial Modeling and Risk." } -monteCarloGenerators :: WebPageCharting r => [WebPageGenerator r]+monteCarloGenerators :: ChartRendering r => [WebPageGenerator r] monteCarloGenerators = [outputView defaultExperimentSpecsView, outputView $ defaultDeviationChartView {@@ -72,7 +72,7 @@ experimentDescription = "Financial Model as described in " ++ "Vensim 5 Modeling Guide, Chapter Financial Modeling and Risk." } -singleGenerators :: WebPageCharting r => [WebPageGenerator r]+singleGenerators :: ChartRendering r => [WebPageGenerator r] singleGenerators = [outputView defaultExperimentSpecsView, outputView $ defaultTimeSeriesView {
examples/Financial/MainUsingCairo.hs view
@@ -15,11 +15,11 @@ putStrLn "*** The simulation with default parameters..." runExperiment singleExperiment singleGenerators- (CairoRenderer PNG) (model defaultParams)+ (WebPageRenderer $ CairoRenderer PNG) (model defaultParams) putStrLn "" -- run the Monte-Carlo simulation putStrLn "*** The Monte-Carlo simulation..." randomParams >>= runExperimentParallel monteCarloExperiment monteCarloGenerators- (CairoRenderer PNG) . model+ (WebPageRenderer $ CairoRenderer PNG) . model
examples/Financial/MainUsingDiagrams.hs view
@@ -17,11 +17,11 @@ putStrLn "*** The simulation with default parameters..." runExperiment singleExperiment singleGenerators- (DiagramsRenderer SVG M.empty) (model defaultParams)+ (WebPageRenderer $ DiagramsRenderer SVG M.empty) (model defaultParams) putStrLn "" -- run the Monte-Carlo simulation putStrLn "*** The Monte-Carlo simulation..." randomParams >>= runExperimentParallel monteCarloExperiment monteCarloGenerators- (DiagramsRenderer SVG M.empty) . model+ (WebPageRenderer $ DiagramsRenderer SVG M.empty) . model
examples/Furnace/Experiment.hs view
@@ -27,7 +27,7 @@ experimentRunCount = 100, experimentTitle = "The Furnace model (the Monte-Carlo simulation)" } -generators :: WebPageCharting r => [WebPageGenerator r]+generators :: ChartRendering r => [WebPageGenerator r] generators = [outputView defaultExperimentSpecsView, outputView $ defaultDeviationChartView {@@ -72,39 +72,39 @@ deviationChartTitle = "Deviation Chart - 3", deviationChartPlotTitle = "The queue size", deviationChartRightYSeries =- resultByName furnaceQueueName >>> resultByProperty "queueCount" },+ resultByName furnaceQueueName >>> resultById QueueCountId }, outputView $ defaultFinalHistogramView { finalHistogramTitle = "Final Histogram - 3", finalHistogramPlotTitle = "The queue size in the final time point.", finalHistogramSeries =- resultByName furnaceQueueName >>> resultByProperty "queueCount" },+ resultByName furnaceQueueName >>> resultById QueueCountId }, outputView $ defaultFinalStatsView { finalStatsTitle = "Final Statistics - 3", finalStatsDescription = "The summary of the queue size in the final time point.", finalStatsSeries =- resultByName furnaceQueueName >>> resultByProperty "queueCount" },+ resultByName furnaceQueueName >>> resultById QueueCountId }, outputView $ defaultDeviationChartView { deviationChartTitle = "Deviation Chart - 4", deviationChartPlotTitle = "The mean wait time", deviationChartRightYSeries =- resultByName furnaceQueueName >>> resultByProperty "queueWaitTime" },+ resultByName furnaceQueueName >>> resultById QueueWaitTimeId }, outputView $ defaultFinalStatsView { finalStatsTitle = "Final Statistics - 4", finalStatsDescription = "The summary of the mean wait time in " ++ "the final time point.", finalStatsSeries =- resultByName furnaceQueueName >>> resultByProperty "queueWaitTime" },+ resultByName furnaceQueueName >>> resultById QueueWaitTimeId }, outputView $ defaultDeviationChartView { deviationChartTitle = "Deviation Chart - 5", deviationChartPlotTitle = "The queue rate", deviationChartRightYSeries =- resultByName furnaceQueueName >>> resultByProperty "queueRate" },+ resultByName furnaceQueueName >>> resultById QueueRateId }, outputView $ defaultFinalStatsView { finalStatsTitle = "Final Statistics - 5", finalStatsDescription = "The summary of the queue rate in " ++ "the final time point.", finalStatsSeries =- resultByName furnaceQueueName >>> resultByProperty "queueRate" },+ resultByName furnaceQueueName >>> resultById QueueRateId }, outputView $ defaultDeviationChartView { deviationChartTitle = "Deviation Chart - 6", deviationChartPlotTitle = "The mean heating time",
examples/Furnace/MainUsingCairo.hs view
@@ -9,4 +9,4 @@ import Model import Experiment -main = runExperiment experiment generators (CairoRenderer PNG) model+main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model
examples/Furnace/MainUsingDiagrams.hs view
@@ -11,4 +11,4 @@ import Model import Experiment -main = runExperiment experiment generators (DiagramsRenderer SVG M.empty) model+main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG M.empty) model
examples/InspectionAdjustmentStations/Experiment.hs view
@@ -28,36 +28,36 @@ resultProcessingTime :: ResultTransform resultProcessingTime = (resultByName "inputArrivalTimer" >>>- resultByProperty "processingTime")+ resultById ArrivalProcessingTimeId) <> (resultByName "outputArrivalTimer" >>>- resultByProperty "processingTime")+ resultById ArrivalProcessingTimeId) resultProcessingFactor :: ResultTransform resultProcessingFactor = (resultByName "inspectionStations" >>>- resultByProperty "processingFactor")+ resultById ServerProcessingFactorId) <> (resultByName "adjustmentStations" >>>- resultByProperty "processingFactor")+ resultById ServerProcessingFactorId) resultQueueSize :: ResultTransform resultQueueSize = (resultByName "inspectionQueue" >>>- resultByProperty "queueCount")+ resultById QueueCountId) <> (resultByName "adjustmentQueue" >>>- resultByProperty "queueCount")+ resultById QueueCountId) resultWaitTime :: ResultTransform resultWaitTime = (resultByName "inspectionQueue" >>>- resultByProperty "queueWaitTime")+ resultById QueueWaitTimeId) <> (resultByName "adjustmentQueue" >>>- resultByProperty "queueWaitTime")+ resultById QueueWaitTimeId) -generators :: WebPageCharting r => [WebPageGenerator r]+generators :: ChartRendering r => [WebPageGenerator r] generators = [outputView defaultExperimentSpecsView, outputView $ defaultFinalStatsView {
examples/InspectionAdjustmentStations/MainUsingCairo.hs view
@@ -9,4 +9,4 @@ import Model import Experiment -main = runExperiment experiment generators (CairoRenderer PNG) model+main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model
examples/InspectionAdjustmentStations/MainUsingDiagrams.hs view
@@ -11,4 +11,4 @@ import Model import Experiment -main = runExperiment experiment generators (DiagramsRenderer SVG M.empty) model+main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG M.empty) model
examples/LinearArray/Experiment.hs view
@@ -22,7 +22,7 @@ experimentDescription = "Model Linear Array as described in " ++ "the examples included in Berkeley-Madonna." } -generators :: WebPageCharting r => [WebPageGenerator r]+generators :: ChartRendering r => [WebPageGenerator r] generators = [outputView defaultExperimentSpecsView, outputView $ defaultTableView {
examples/LinearArray/MainUsingCairo.hs view
@@ -9,4 +9,4 @@ import Model import Experiment -main = runExperiment experiment generators (CairoRenderer PNG) (model 51)+main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) (model 51)
examples/LinearArray/MainUsingDiagrams.hs view
@@ -11,4 +11,4 @@ import Model import Experiment -main = runExperiment experiment generators (DiagramsRenderer SVG M.empty) (model 51)+main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG M.empty) (model 51)
examples/MachRep3/Experiment.hs view
@@ -24,7 +24,7 @@ t = resultByName "totalUpTime" n = resultByName "runIndex" -generators :: WebPageCharting r => [WebPageGenerator r]+generators :: ChartRendering r => [WebPageGenerator r] generators = [outputView defaultExperimentSpecsView, outputView $ defaultDeviationChartView {
examples/MachRep3/MainUsingCairo.hs view
@@ -9,4 +9,4 @@ import Model import Experiment -main = runExperiment experiment generators (CairoRenderer PNG) model+main = runExperiment experiment generators (WebPageRenderer $ CairoRenderer PNG) model
examples/MachRep3/MainUsingDiagrams.hs view
@@ -11,4 +11,4 @@ import Model import Experiment -main = runExperiment experiment generators (DiagramsRenderer SVG M.empty) model+main = runExperiment experiment generators (WebPageRenderer $ DiagramsRenderer SVG M.empty) model