Ticket #3960: TestMat.hs

File TestMat.hs, 1.0 KB (added by jwlato, 3 years ago)
Line 
1{-# LANGUAGE PArr, ParallelListComp #-}
2{-# OPTIONS -fvectorise #-}
3
4module TestMat where
5
6import qualified Prelude as P
7import Data.Array.Parallel
8import Data.Array.Parallel.Prelude
9import Data.Array.Parallel.Prelude.Double as D
10import Data.Array.Parallel.Prelude.Int as I
11
12snd (_, b) = b
13
14fst (a, _) = a
15
16type Vector = [:Double:]
17type SparseMatrix = [:[:(Int, Double):]:]
18type DenseMatrix = [:[:Double:]:]
19
20dotp :: Vector -> Vector -> Double
21dotp v1 v2 = D.sumP (zipWithP (D.*) v1 v2)
22
23mvMult :: SparseMatrix -> Vector -> Vector 
24mvMult mat vec = [: D.sumP [: v D.* (vec !: n)  | (n, v) <- v1 :] | v1 <- mat:]
25
26vp :: Vector -> Vector -> Vector 
27vp a b = zipWithP (D.+) a b
28
29vt :: Vector -> Vector -> Vector 
30vt a b = zipWithP (D.*) a b
31
32middle ib u1 ic u2 = vp (mvMult ib u1) (mvMult ic u2)
33firstfn mv eta1 ib u1 ic u2 = vt (vp mv eta1) (middle ib u1 ic u2)
34lastfn nv eta1 eta2 = vt (vp nv eta1) eta2
35
36tmpfn mv eta1 ib u1 ic u2 nv eta2 = vp (firstfn mv eta1 ib u1 ic u2) (lastfn nv eta1 eta2)