23 lines
No EOL
658 B
Haskell
23 lines
No EOL
658 B
Haskell
module RWD (dynamics, fieldprint) where
|
|
|
|
import Control.Monad.State
|
|
import qualified Types
|
|
|
|
omega :: Double
|
|
omega = 1.0
|
|
|
|
k :: Double
|
|
k = 0.1
|
|
|
|
dt :: Double
|
|
dt = 0.01
|
|
|
|
dynamics :: [Types.Intellecton] -> Double -> ([Double], Double)
|
|
dynamics intellectons phase = (intellectonDots, phase')
|
|
where
|
|
values = map Types.value intellectons
|
|
intellectonDots = map (\x -> omega * x + sum [k * sin (y - x) | y <- values]) values
|
|
phase' = phase + dt * sum (map sin values)
|
|
|
|
fieldprint :: [Types.Intellecton] -> StateT Types.WitnessState IO Double
|
|
fieldprint intellectons = pure $ sum (map (abs . Types.value) intellectons) / fromIntegral (length intellectons) |