packages feed

goal-simulation-0.1: Goal/Simulation/Physics/Models/Pendulum.hs

module Goal.Simulation.Physics.Models.Pendulum where


--- Imports ---


-- Goal --

import Goal.Geometry

import Goal.Simulation.Physics.Configuration


--- Penduli ---


data Pendulum = Pendulum Double Double deriving (Eq, Read, Show)


--- Instances ---

instance Manifold Pendulum where
    dimension _ = 1

instance Riemannian Generalized Pendulum where
    metric q =
        let (Pendulum m l) = manifold q
         in fromList (Tensor (Tangent q) (Tangent q)) [m*l^2]

instance Conservative Gravity Pendulum where
    potentialEnergy (Gravity g) q =
        let (Pendulum m l) = manifold q
            [tht] = listCoordinates q
         in m * g * l * (1 - cos tht)

instance ForceField Gravity Pendulum where
    force (Gravity g) qdq =
        let q = position qdq
            (Pendulum m l) = manifold q
            [tht] = listCoordinates q
         in fromList (Tangent $ velocity qdq) [-m*g*l*sin tht]