Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- one step of integration
- stepEuler :: (Floating a) => a -> [a] -> [a]
- stepEuler mu u@(x:xs) = (applyBC . (diffused mu)) $! u -- strict evaluation of u
- where
- diffused mu (left:x:[]) = [] -- ignore outer points
- diffused mu (left:x:right:xs) = -- integrate inner points
- (x+mu*(left+right-2*x)) : diffused mu (x:right:xs)
- applyBC inner = inner `seq` u' `seq` l `seq` r `seq` -- strict evaluation
- (l ++ inner ++ r) -- boundary conditions
- where u' = [head u] ++ inner ++ [last u]
- l = lbc u'
- r = rbc u'
- lbc = zeroflux mu -- left boundary
- rbc = (zeroflux mu) . reverse -- right boundary
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement