diff options
author | Jaron Kent-Dobias <jaron@kent-dobias.com> | 2019-09-04 17:40:46 -0400 |
---|---|---|
committer | Jaron Kent-Dobias <jaron@kent-dobias.com> | 2019-09-04 17:40:46 -0400 |
commit | 5acb4f346b91a9315b2c3ae3cb854bd0aecc3bd9 (patch) | |
tree | 3d9da0f5560bbc38172c51eb13ceb05f5b0d73f9 | |
download | haskell-5acb4f346b91a9315b2c3ae3cb854bd0aecc3bd9.tar.gz haskell-5acb4f346b91a9315b2c3ae3cb854bd0aecc3bd9.tar.bz2 haskell-5acb4f346b91a9315b2c3ae3cb854bd0aecc3bd9.zip |
initial commit
-rw-r--r-- | wolff.hs | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/wolff.hs b/wolff.hs new file mode 100644 index 0000000..73687b5 --- /dev/null +++ b/wolff.hs @@ -0,0 +1,46 @@ + +{-# LANGUAGE MultiParamTypeClasses #-} + +import Data.Sequence +import Data.Monoid +import Data.Monoid.Action +import Data.Group +import Data.Char +import Data.Graph +import Control.Monad.Mersenne.Random + +data Z2 = E0 | E1 deriving (Eq, Show) +data Ising = Up | Down deriving (Eq, Show) + +instance Semigroup Z2 where + -- Z2 is a semigroup + E0 <> a = a + E1 <> a | a == E0 = E1 + | otherwise = E0 + +instance Monoid Z2 where + -- Z2 is a monoid + mempty = E0 + mappend a b = a <> b + +instance Group Z2 where + -- Z2 is a group + invert = id + +instance Action Z2 Ising where + -- Z2 has an action on Ising spins + act E0 a = a + act E1 a | a == Up = Down + | otherwise = Up + +squareLatticeEdges d l = [(i, (l^j) * quot i (l^j) + mod (l^j + i + s * l^(j-1)) (l^j)) | j <- [1..d], i <- [0..(l^d)-1], s <- [-1, 1]] +ghostEdges n = [(n, i) | i <- [0..n-1]] ++ [(i, n) | i <- [0..n-1]] +squareLattice d l = buildG (0, l^d) ((squareLatticeEdges d l) ++ ghostEdges (l^d)) + +data State r x = State { ghost :: r, spins :: Seq x } + +j :: Ising -> Ising -> Integer +j a b | a == b = 1 + | otherwise = -1 + + |