From ed6a0c5bc1082a9d40c317e2313ed9b5046989f6 Mon Sep 17 00:00:00 2001 From: Dimitri Lozeve Date: Thu, 9 Nov 2017 19:47:34 +0000 Subject: [PATCH] Add the updateAll function add the Barnes-Hut threshold parameter --- app/Main.hs | 8 +++++--- src/Lib.hs | 13 +++++++++++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/app/Main.hs b/app/Main.hs index 83454f3..53f68e0 100644 --- a/app/Main.hs +++ b/app/Main.hs @@ -64,22 +64,24 @@ csvFromBodies dt bs = concat $ map (csvFromBody dt) bs -- | Compute all the steps of the simulation steps :: Double -- ^ The time step + -> Double -- ^ The Barnes-Hut threshold theta -> [Body] -- ^ The initial state (list of bodies) -> [(Double, [Body])] -- ^ List of successive states with the -- corresponding time -steps dt b = zip (iterate (dt +) 0) (iterate (updateAll dt) b) +steps dt theta b = zip (iterate (dt +) 0) (iterate (updateAll dt theta) b) -- | Show all the steps as CSV csvFromInit :: Int -- ^ The number of time steps to keep -> Double -- ^ The time step + -> Double -- ^ The Barnes-Hut threshold theta -> [Body] -- ^ The initial state (list of bodies) -> String -- ^ CSV data -csvFromInit n dt b = concat . take n $ map (uncurry csvFromBodies) (steps dt b) +csvFromInit n dt theta b = concat . take n $ map (uncurry csvFromBodies) (steps dt theta b) main :: IO () main = do bodies <- replicateM 100 randomBody - putStrLn $ csvFromInit 100000 60 bodies + putStrLn $ csvFromInit 100000 60 0.5 bodies {- -------------------------------------------------------------------------------- diff --git a/src/Lib.hs b/src/Lib.hs index 27290b3..0df5dee 100644 --- a/src/Lib.hs +++ b/src/Lib.hs @@ -28,6 +28,7 @@ module Lib ( acceleration, -- * Simulation update, + updateAll, -- * Examples au, sun, earth, moon, mercury, venus, mars ) where @@ -246,6 +247,18 @@ update dt theta tree (Body name r m pos speed) = newpos = pos + dt *^ P newspeed +-- | Update all Bodies with a time step dt and a Barnes-Hut threshold +-- theta +updateAll :: Double -- ^ The time step + -> Double -- ^ The Barnes-Hut threshold theta + -> [Body] -- ^ A list of Bodies + -> [Body] -- ^ The updated list of Bodies +updateAll dt theta bs = + map (update dt theta tree) bs + where tree = buildTree bs + + + -------------------------------------------------------------------------------- -- EXAMPLES --------------------------------------------------------------------------------