-- | -- Module : Simulation.Aivika.Experiment.ExperimentSpecsWriter -- Copyright : Copyright (c) 2012-2014, David Sorokin -- License : BSD3 -- Maintainer : David Sorokin -- Stability : experimental -- Tested with: GHC 7.6.3 -- -- The module defines 'ExperimentSpecsWriter' that knows how to write -- in HTML the experiment specs which include the simulation specs and -- the number of simulation runs. -- module Simulation.Aivika.Experiment.ExperimentSpecsWriter (ExperimentSpecsWriter(..), defaultExperimentSpecsWriter) where import Simulation.Aivika import Simulation.Aivika.Experiment.Types import Simulation.Aivika.Experiment.HtmlWriter -- | Defines a writer that knows how to represent the -- experiment specs as the HTML table. data ExperimentSpecsWriter = ExperimentSpecsWriter { experimentSpecsWidth :: Int, -- ^ The width of the HTML table. experimentSpecsNameText :: String, -- ^ Translated text \"Experiment Specs\". experimentSpecsStartTimeText :: String, -- ^ Translated text \"start time\". experimentSpecsStopTimeText :: String, -- ^ Translated text \"stop time\". experimentSpecsDTText :: String, -- ^ Translated text \"time step\". experimentSpecsRunCountText :: String, -- ^ Translated text \"run count\". experimentSpecsIntegMethodText :: String, -- ^ Translated text \"integration method\". experimentSpecsEulerText :: String, -- ^ Translated text \"Euler's\". experimentSpecsRungeKutta2Text :: String, -- ^ Translated text \"the 2-nd order Runge-Kutta\". experimentSpecsRungeKutta4Text :: String, -- ^ Translated text \"the 4-th order Runge-Kutta\". experimentSpecsFormatter :: ShowS, -- ^ The formatter of numbers. experimentSpecsWrite :: ExperimentSpecsWriter -> Experiment -> HtmlWriter () -- ^ This function creates HTML. } -- | The default writer. defaultExperimentSpecsWriter :: ExperimentSpecsWriter defaultExperimentSpecsWriter = ExperimentSpecsWriter { experimentSpecsWidth = 400, experimentSpecsNameText = "Experiment Specs", experimentSpecsStartTimeText = "start time", experimentSpecsStopTimeText = "stop time", experimentSpecsDTText = "time step", experimentSpecsRunCountText = "run count", experimentSpecsIntegMethodText = "integration method", experimentSpecsEulerText = "Euler's", experimentSpecsRungeKutta2Text = "the 2-nd order Runge-Kutta", experimentSpecsRungeKutta4Text = "the 4-th order Runge-Kutta", experimentSpecsFormatter = id, experimentSpecsWrite = \writer exp -> do let format x = experimentSpecsFormatter writer (show x) writeHtml "

" writeHtml "" writeHtml "" writeHtml "" writeHtml "" writeHtml "" writeHtml "" writeHtml "" writeHtml "" writeHtml "" writeHtml "" writeHtml "" writeHtml "" writeHtml "" writeHtml "" writeHtml "" writeHtml "" writeHtml "" writeHtml "" writeHtml "" writeHtml "" writeHtml "" writeHtml "" writeHtml "" writeHtml "" writeHtml "
" writeHtml "

" writeHtmlText $ experimentSpecsNameText writer writeHtml "" writeHtml "

" writeHtmlText $ experimentSpecsStartTimeText writer writeHtml "" writeHtmlText $ format $ spcStartTime $ experimentSpecs exp writeHtml "
" writeHtmlText $ experimentSpecsStopTimeText writer writeHtml "" writeHtmlText $ format $ spcStopTime $ experimentSpecs exp writeHtml "
" writeHtmlText $ experimentSpecsDTText writer writeHtml "" writeHtmlText $ format $ spcDT $ experimentSpecs exp writeHtml "
" writeHtmlText $ experimentSpecsRunCountText writer writeHtml "" writeHtmlText $ format $ experimentRunCount exp writeHtml "
" writeHtmlText $ experimentSpecsIntegMethodText writer writeHtml "" let method = spcMethod $ experimentSpecs exp writeHtml $ methodName method writer writeHtml "
" writeHtml "

" } -- | Return the method name. methodName :: Method -> ExperimentSpecsWriter -> String methodName Euler = experimentSpecsEulerText methodName RungeKutta2 = experimentSpecsRungeKutta2Text methodName RungeKutta4 = experimentSpecsRungeKutta4Text