packages feed

gloss-examples-1.7.3.1: raster/Fluid/Config.hs

module Config 
        ( Config (..)
        , configScale)
where
import Model
import Data.Array.Repa

data Config
        = Config
        { -- | Size of window in pixels
          configWindowSize      :: (Int, Int)

          -- | Simulation rate (frames per second)
        , configRate            :: Int

          -- | Maximum number of steps in simulation
        , configMaxSteps        :: Int

          -- | Whether to run in batch-mode, non-interactively.
        , configBatchMode       :: Bool

          -- | Number of cells in model.
        , configModelSize       :: (Int, Int)

          -- | Time delta per step.
        , configDelta           :: !Delta

          -- | Diffusion rate.
        , configDiffusion       :: !Float

          -- | Fluid viscosity.
        , configViscosity       :: !Float

          -- | Magnitude of density to add with user interface.
        , configDensity         :: !Float

          -- | Magnitude of velocity to add with user interface.
        , configVelocity        :: !(Float, Float) 

          -- | Initial density array
        , configInitialDensity  :: !(Array U DIM2 Float)

          -- | BMP file to use as the initial velocity
        , configInitialVelocity :: !(Array U DIM2 (Float, Float))
        } 


configScale :: Config -> (Float, Float)
configScale config
 = let  (windowWidth, windowHeight)     = configWindowSize config
        (modelWidth,  modelHeight)      = configModelSize  config
   in   ( fromIntegral windowWidth  / fromIntegral modelWidth
        , fromIntegral windowHeight / fromIntegral modelHeight)