Add the updateAll function add the Barnes-Hut threshold parameter

This commit is contained in:
Dimitri Lozeve 2017-11-09 19:47:34 +00:00
parent 4354d167ed
commit ed6a0c5bc1
2 changed files with 18 additions and 3 deletions

View file

@ -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
{-
--------------------------------------------------------------------------------

View file

@ -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
--------------------------------------------------------------------------------