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" }

t = resultByName "t"
x = resultByName "x"
v = resultByName "v"

generators :: ChartRendering r => [WebPageGenerator r]
generators =
  [outputView defaultExperimentSpecsView,
   outputView defaultInfoView,
   outputView $ defaultTableView {
     tableSeries = t <> x <> v },
   outputView $ defaultTimeSeriesView {
     timeSeriesDescription = "The chart shows the position of the ball",
     timeSeriesTitle = "Position",
     timeSeriesLeftYSeries = x },
   outputView $ defaultTimeSeriesView {
     timeSeriesDescription = "The chart shows the velocity of the ball",
     timeSeriesTitle = "Velocity",
     timeSeriesLeftYSeries = v } ]