module Config ( Config (..) , configWindowSize) where import Model import Data.Array.Repa as R data Config = Config { -- | 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 -- | Whether to dump all frames to .bmp files. , configFramesMode :: Maybe FilePath -- | Number of cells in model. , configModelSize :: (Int, Int) -- | Window scale. , configScale :: (Int, Int) -- | Use the unstable linear solver. , configUnstable :: !Bool -- | Number of iterations to use in the linear solver , configIters :: !Int -- | Time delta per step. , configDelta :: !Delta -- | Diffusion rate. , configDiff :: !Float -- | Apply diffusion after this step number. , configDiffAfter :: !Int -- | Fluid viscosity. , configVisc :: !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)) } configWindowSize :: Config -> (Int, Int) configWindowSize config = let (modelX, modelY) = configModelSize config (scaleX, scaleY) = configScale config in (modelX * scaleX, modelY * scaleY)