diff options
Diffstat (limited to 'packages/sundials/src/Main.hs')
-rw-r--r-- | packages/sundials/src/Main.hs | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/packages/sundials/src/Main.hs b/packages/sundials/src/Main.hs index 729d35a..3904b09 100644 --- a/packages/sundials/src/Main.hs +++ b/packages/sundials/src/Main.hs | |||
@@ -1,6 +1,7 @@ | |||
1 | {-# OPTIONS_GHC -Wall #-} | 1 | {-# OPTIONS_GHC -Wall #-} |
2 | 2 | ||
3 | import Numeric.Sundials.ARKode.ODE | 3 | import qualified Numeric.Sundials.ARKode.ODE as ARK |
4 | import qualified Numeric.Sundials.CVode.ODE as CV | ||
4 | import Numeric.LinearAlgebra | 5 | import Numeric.LinearAlgebra |
5 | 6 | ||
6 | import Plots as P | 7 | import Plots as P |
@@ -97,24 +98,24 @@ kSaxis xs = P.r2Axis &~ do | |||
97 | main :: IO () | 98 | main :: IO () |
98 | main = do | 99 | main = do |
99 | 100 | ||
100 | let res1 = odeSolve brusselator [1.2, 3.1, 3.0] (fromList [0.0, 0.1 .. 10.0]) | 101 | let res1 = ARK.odeSolve brusselator [1.2, 3.1, 3.0] (fromList [0.0, 0.1 .. 10.0]) |
101 | renderRasterific "diagrams/brusselator.png" | 102 | renderRasterific "diagrams/brusselator.png" |
102 | (D.dims2D 500.0 500.0) | 103 | (D.dims2D 500.0 500.0) |
103 | (renderAxis $ lSaxis $ [0.0, 0.1 .. 10.0]:(toLists $ tr res1)) | 104 | (renderAxis $ lSaxis $ [0.0, 0.1 .. 10.0]:(toLists $ tr res1)) |
104 | 105 | ||
105 | let res1a = odeSolve brusselator [1.2, 3.1, 3.0] (fromList [0.0, 0.1 .. 10.0]) | 106 | let res1a = ARK.odeSolve brusselator [1.2, 3.1, 3.0] (fromList [0.0, 0.1 .. 10.0]) |
106 | renderRasterific "diagrams/brusselatorA.png" | 107 | renderRasterific "diagrams/brusselatorA.png" |
107 | (D.dims2D 500.0 500.0) | 108 | (D.dims2D 500.0 500.0) |
108 | (renderAxis $ lSaxis $ [0.0, 0.1 .. 10.0]:(toLists $ tr res1a)) | 109 | (renderAxis $ lSaxis $ [0.0, 0.1 .. 10.0]:(toLists $ tr res1a)) |
109 | 110 | ||
110 | let res2 = odeSolve stiffish [0.0] (fromList [0.0, 0.1 .. 10.0]) | 111 | let res2 = ARK.odeSolve stiffish [0.0] (fromList [0.0, 0.1 .. 10.0]) |
111 | renderRasterific "diagrams/stiffish.png" | 112 | renderRasterific "diagrams/stiffish.png" |
112 | (D.dims2D 500.0 500.0) | 113 | (D.dims2D 500.0 500.0) |
113 | (renderAxis $ kSaxis $ zip [0.0, 0.1 .. 10.0] (concat $ toLists res2)) | 114 | (renderAxis $ kSaxis $ zip [0.0, 0.1 .. 10.0] (concat $ toLists res2)) |
114 | 115 | ||
115 | let res2a = odeSolveV (SDIRK_5_3_4') Nothing 1e-6 1e-10 stiffishV (fromList [0.0]) (fromList [0.0, 0.1 .. 10.0]) | 116 | let res2a = ARK.odeSolveV (ARK.SDIRK_5_3_4') Nothing 1e-6 1e-10 stiffishV (fromList [0.0]) (fromList [0.0, 0.1 .. 10.0]) |
116 | 117 | ||
117 | let res2b = odeSolveV (TRBDF2_3_3_2') Nothing 1e-6 1e-10 stiffishV (fromList [0.0]) (fromList [0.0, 0.1 .. 10.0]) | 118 | let res2b = ARK.odeSolveV (ARK.TRBDF2_3_3_2') Nothing 1e-6 1e-10 stiffishV (fromList [0.0]) (fromList [0.0, 0.1 .. 10.0]) |
118 | 119 | ||
119 | let maxDiff = maximum $ map abs $ | 120 | let maxDiff = maximum $ map abs $ |
120 | zipWith (-) ((toLists $ tr res2a)!!0) ((toLists $ tr res2b)!!0) | 121 | zipWith (-) ((toLists $ tr res2a)!!0) ((toLists $ tr res2b)!!0) |
@@ -123,7 +124,10 @@ main = do | |||
123 | it "for two different RK methods" $ | 124 | it "for two different RK methods" $ |
124 | maxDiff < 1.0e-6 | 125 | maxDiff < 1.0e-6 |
125 | 126 | ||
126 | let res3 = odeSolve lorenz [-5.0, -5.0, 1.0] (fromList [0.0, 0.01 .. 10.0]) | 127 | let res2c = CV.odeSolveV (CV.BDF) Nothing 1e-6 1e-10 stiffishV (fromList [0.0]) (fromList [0.0, 0.1 .. 10.0]) |
128 | putStrLn $ show res2c | ||
129 | |||
130 | let res3 = ARK.odeSolve lorenz [-5.0, -5.0, 1.0] (fromList [0.0, 0.01 .. 10.0]) | ||
127 | 131 | ||
128 | renderRasterific "diagrams/lorenz.png" | 132 | renderRasterific "diagrams/lorenz.png" |
129 | (D.dims2D 500.0 500.0) | 133 | (D.dims2D 500.0 500.0) |