packages feed

aivika-experiment-chart-0.1: examples/ChemicalReaction.hs

import Simulation.Aivika.Dynamics
import Simulation.Aivika.Dynamics.Simulation
import Simulation.Aivika.Dynamics.SystemDynamics
import Simulation.Aivika.Dynamics.EventQueue
import Simulation.Aivika.Dynamics.Base

import Simulation.Aivika.Experiment
import Simulation.Aivika.Experiment.LastValueView
import Simulation.Aivika.Experiment.TableView
import Simulation.Aivika.Experiment.TimeSeriesView

specs = Specs { spcStartTime = 0, 
                spcStopTime = 13, 
                spcDT = 0.01,
                spcMethod = RungeKutta4 }

experiment :: Experiment
experiment =
  defaultExperiment {
    experimentSpecs = specs,
    experimentDescription = "Experiment Description",
    experimentGenerators =
      [outputView $ defaultLastValueView {
          lastValueDescription = "Last Value description",
          lastValueSeries = ["t", "a", "b", "c"] },
       outputView $ defaultTableView {
         tableDescription = "Table description",
         tableSeries = ["t", "a", "b", "c"] }, 
       outputView $ defaultTimeSeriesView {
         timeSeries = [Left "a", Left "b", Left "c"] } ] }

model :: Simulation ExperimentData
model =
  do queue  <- newQueue
     integA <- newInteg 100
     integB <- newInteg 0
     integC <- newInteg 0
     let a = integValue integA
         b = integValue integB
         c = integValue integC
     let ka = 1
         kb = 1
     integDiff integA (- ka * a)
     integDiff integB (ka * a - kb * b)
     integDiff integC (kb * b)
     experimentDataInStartTime queue $
       [("t", seriesEntity "time" time),
        ("a", seriesEntity "a" a),
        ("b", seriesEntity "b" b),
        ("c", seriesEntity "c" c)]

main = runExperiment experiment model