-- | Assigns symbols and units (quantities) to physical concepts.
module Data.Drasil.Quantities.Physics where

import Language.Drasil
import Language.Drasil.Display
import Language.Drasil.ShortHands
import qualified Data.Drasil.Concepts.Physics as CP (acceleration, angAccel,
  angDisp, angVelo, chgInVelocity, constAccel, constAccelV, displacement,
  distance, energy, fSpeed, fVel, force, frequency, gravitationalAccel, gravitationalConst,
  gravitationalMagnitude, height, iPos, iSpeed, ixSpeed, iySpeed, iVel, impulseS, impulseV,
  ixPos, ixVel, iyPos, iyVel, kEnergy, linAccel, linDisp, linVelo, momentOfInertia, position,
  potEnergy, pressure, restitutionCoef, scalarAccel, scalarPos, speed, time, torque,
  velocity, weight, xAccel, xConstAccel, xDist, xPos, xVel, yAccel, yConstAccel, yDist,
  yPos, yVel, momentum, moment, moment2D, fOfGravity, positionVec, tension, angFreq, period,
  frequency, chgMomentum)

import Data.Drasil.SI_Units (joule, metre, newton, pascal, radian, second, hertz)
import Data.Drasil.Units.Physics (accelU, angAccelU, angVelU, gravConstU,
    impulseU, momtInertU, torqueU, velU)

restitutionCoef :: DefinedQuantityDict
restitutionCoef :: DefinedQuantityDict
restitutionCoef = ConceptChunk -> Symbol -> Space -> DefinedQuantityDict
dqdNoUnit ConceptChunk
CP.restitutionCoef (Symbol -> Symbol -> Symbol
sub Symbol
cC (String -> Symbol
label String
"R")) Space
Real

-- | Collects all physical quantities defined in this file for easy use in Drasil.
physicscon :: [DefinedQuantityDict]
physicscon :: [DefinedQuantityDict]
physicscon = [DefinedQuantityDict
acceleration, DefinedQuantityDict
angularAccel, DefinedQuantityDict
angularDisplacement, DefinedQuantityDict
angularVelocity,
  DefinedQuantityDict
chgInVelocity, DefinedQuantityDict
constAccel, DefinedQuantityDict
constAccelV, DefinedQuantityDict
displacement, DefinedQuantityDict
distance, DefinedQuantityDict
energy, DefinedQuantityDict
frequency,
  DefinedQuantityDict
fSpeed, DefinedQuantityDict
fVel, DefinedQuantityDict
force, DefinedQuantityDict
gravitationalAccel, DefinedQuantityDict
gravitationalConst, DefinedQuantityDict
gravitationalMagnitude,
  DefinedQuantityDict
height, DefinedQuantityDict
iPos, DefinedQuantityDict
iSpeed, DefinedQuantityDict
ixSpeed, DefinedQuantityDict
iySpeed, DefinedQuantityDict
iVel, DefinedQuantityDict
impulseS, DefinedQuantityDict
impulseV, DefinedQuantityDict
ixPos, DefinedQuantityDict
ixVel, DefinedQuantityDict
iyPos,
  DefinedQuantityDict
iyVel, DefinedQuantityDict
kEnergy, DefinedQuantityDict
linearAccel, DefinedQuantityDict
linearDisplacement, DefinedQuantityDict
linearVelocity, DefinedQuantityDict
momentOfInertia,
  DefinedQuantityDict
position, DefinedQuantityDict
potEnergy, DefinedQuantityDict
pressure, DefinedQuantityDict
scalarAccel, DefinedQuantityDict
scalarPos, DefinedQuantityDict
speed, DefinedQuantityDict
time, DefinedQuantityDict
torque, DefinedQuantityDict
velocity,
  DefinedQuantityDict
weight, DefinedQuantityDict
xAccel, DefinedQuantityDict
xConstAccel, DefinedQuantityDict
xDist, DefinedQuantityDict
xPos, DefinedQuantityDict
xVel, DefinedQuantityDict
yAccel, DefinedQuantityDict
yConstAccel, DefinedQuantityDict
yDist,
  DefinedQuantityDict
yPos, DefinedQuantityDict
yVel,DefinedQuantityDict
momentum, DefinedQuantityDict
moment, DefinedQuantityDict
moment2D, DefinedQuantityDict
fOfGravity, DefinedQuantityDict
positionVec, DefinedQuantityDict
tension,
  DefinedQuantityDict
angularFrequency, DefinedQuantityDict
period, DefinedQuantityDict
chgMomentum]

-- * Physical Quantities (With Units)

acceleration, angularAccel, angularDisplacement, angularVelocity, chgInVelocity,
  constAccel, constAccelV, displacement, distance, energy, fSpeed, fVel, force,
  gravitationalAccel, gravitationalConst, gravitationalMagnitude, height, iPos,
  iSpeed, ixSpeed, iySpeed, iVel, impulseS, impulseV, ixPos, ixVel, iyPos, iyVel,
  kEnergy, linearAccel, linearDisplacement, linearVelocity, momentOfInertia, position,
  potEnergy, pressure, scalarAccel, scalarPos, speed, time, torque, velocity, weight,
  xAccel, xConstAccel, xDist, xPos, xVel, yAccel, yConstAccel, yDist, yPos,
  yVel, momentum, moment, moment2D, fOfGravity, positionVec, tension, angularFrequency,
  period, frequency, chgMomentum :: DefinedQuantityDict

acceleration :: DefinedQuantityDict
acceleration           = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.acceleration           ([Symbol] -> Symbol
Concat [Symbol -> Symbol
vec Symbol
lA, String -> Symbol
label String
"(", Symbol
lT, String -> Symbol
label String
")"]) (Space -> Space
Vect Space
Real) UnitDefn
accelU
angularAccel :: DefinedQuantityDict
angularAccel           = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.angAccel               Symbol
lAlpha                                      Space
Real        UnitDefn
angAccelU
angularDisplacement :: DefinedQuantityDict
angularDisplacement    = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.angDisp                Symbol
lTheta                                      Space
Real        UnitDefn
radian
angularFrequency :: DefinedQuantityDict
angularFrequency       = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.angFreq                Symbol
cOmega                                      Space
Real        UnitDefn
second
angularVelocity :: DefinedQuantityDict
angularVelocity        = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.angVelo                Symbol
lOmega                                      Space
Real        UnitDefn
angVelU
chgInVelocity :: DefinedQuantityDict
chgInVelocity          = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.chgInVelocity          (Decoration -> Symbol -> Symbol
Atop Decoration
Delta (Symbol -> Symbol) -> Symbol -> Symbol
forall a b. (a -> b) -> a -> b
$ Symbol -> Symbol
vec Symbol
lV)                       Space
Real        UnitDefn
velU
constAccel :: DefinedQuantityDict
constAccel             = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.constAccel             (Symbol -> Symbol -> Symbol
sup Symbol
lA Symbol
lC)                                 Space
Real        UnitDefn
accelU
displacement :: DefinedQuantityDict
displacement           = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.displacement           (Symbol -> Symbol
vec Symbol
lU)                                    Space
Real        UnitDefn
metre
distance :: DefinedQuantityDict
distance               = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.distance               Symbol
lD                                          Space
Real        UnitDefn
metre
energy :: DefinedQuantityDict
energy                 = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.energy                 Symbol
cE                                          Space
Real        UnitDefn
joule
force :: DefinedQuantityDict
force                  = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.force                  (Symbol -> Symbol
vec Symbol
cF)                                    (Space -> Space
Vect Space
Real) UnitDefn
newton
frequency :: DefinedQuantityDict
frequency              = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.frequency              Symbol
lF                                          Space
Real        UnitDefn
hertz
gravitationalAccel :: DefinedQuantityDict
gravitationalAccel     = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.gravitationalAccel     (Symbol -> Symbol
vec Symbol
lG)                                    Space
Real        UnitDefn
accelU
gravitationalConst :: DefinedQuantityDict
gravitationalConst     = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.gravitationalConst     Symbol
cG                                          Space
Real        UnitDefn
gravConstU
gravitationalMagnitude :: DefinedQuantityDict
gravitationalMagnitude = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.gravitationalMagnitude Symbol
lG                                          Space
Real        UnitDefn
accelU
height :: DefinedQuantityDict
height                 = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.height                 Symbol
lH                                          Space
Real        UnitDefn
metre
impulseS :: DefinedQuantityDict
impulseS               = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.impulseS               Symbol
lJ                                          Space
Real        UnitDefn
impulseU
impulseV :: DefinedQuantityDict
impulseV               = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.impulseV               (Symbol -> Symbol
vec Symbol
cJ)                                    Space
Real        UnitDefn
impulseU
kEnergy :: DefinedQuantityDict
kEnergy                = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.kEnergy                ([Symbol] -> Symbol
Concat [Symbol
cK, Symbol
cE])                           Space
Real        UnitDefn
joule
linearAccel :: DefinedQuantityDict
linearAccel            = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.linAccel               ([Symbol] -> Symbol
Concat [Symbol
lA, String -> Symbol
label String
"(", Symbol
lT, String -> Symbol
label String
")"])     Space
Real        UnitDefn
accelU
linearDisplacement :: DefinedQuantityDict
linearDisplacement     = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.linDisp                ([Symbol] -> Symbol
Concat [Symbol
lU, String -> Symbol
label String
"(", Symbol
lT, String -> Symbol
label String
")"])     Space
Real        UnitDefn
metre
linearVelocity :: DefinedQuantityDict
linearVelocity         = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.linVelo                ([Symbol] -> Symbol
Concat [Symbol
lV, String -> Symbol
label String
"(", Symbol
lT, String -> Symbol
label String
")"])     Space
Real        UnitDefn
velU
momentOfInertia :: DefinedQuantityDict
momentOfInertia        = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.momentOfInertia        (Symbol -> Symbol
vec Symbol
cI)                                    Space
Real        UnitDefn
momtInertU
chgMomentum :: DefinedQuantityDict
chgMomentum            = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.chgMomentum            ([Symbol] -> Symbol
Concat [Symbol
cDelta,Symbol -> Symbol
vec Symbol
cP])                    Space
Real        UnitDefn
impulseU
momentum :: DefinedQuantityDict
momentum               = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.momentum               (Symbol -> Symbol
vec Symbol
cP)                                    Space
Real        UnitDefn
impulseU
moment :: DefinedQuantityDict
moment                 = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.moment                 (Symbol -> Symbol
vec Symbol
cM)                                    Space
Real        UnitDefn
torqueU
moment2D :: DefinedQuantityDict
moment2D               = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.moment2D               Symbol
cM                                          Space
Real        UnitDefn
torqueU
-- FIXME: moment2D should eventually be a specialization of moment, not separately defined
period :: DefinedQuantityDict
period                 = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.period                 Symbol
cT                                          Space
Real        UnitDefn
second
position :: DefinedQuantityDict
position               = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.position               ([Symbol] -> Symbol
Concat [Symbol -> Symbol
vec Symbol
lP, String -> Symbol
label String
"(", Symbol
lT, String -> Symbol
label String
")"]) Space
Real        UnitDefn
metre
positionVec :: DefinedQuantityDict
positionVec            = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.positionVec            (Symbol -> Symbol
vec Symbol
lR)                                    Space
Real        UnitDefn
metre
potEnergy :: DefinedQuantityDict
potEnergy              = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.potEnergy              ([Symbol] -> Symbol
Concat [Symbol
cP, Symbol
cE])                           Space
Real        UnitDefn
joule
pressure :: DefinedQuantityDict
pressure               = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.pressure               Symbol
lP                                          Space
Real        UnitDefn
pascal
speed :: DefinedQuantityDict
speed                  = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.speed                  Symbol
lV                                          Space
Real        UnitDefn
velU
scalarAccel :: DefinedQuantityDict
scalarAccel            = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.scalarAccel            Symbol
lA                                          Space
Real        UnitDefn
accelU
scalarPos :: DefinedQuantityDict
scalarPos              = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.scalarPos              Symbol
lP                                          Space
Real        UnitDefn
metre
tension :: DefinedQuantityDict
tension                = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.tension                (Symbol -> Symbol
vec Symbol
cT)                                    Space
Real        UnitDefn
newton
time :: DefinedQuantityDict
time                   = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.time                   Symbol
lT                                          Space
Real        UnitDefn
second
torque :: DefinedQuantityDict
torque                 = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.torque                 (Symbol -> Symbol
vec Symbol
lTau)                                  Space
Real        UnitDefn
torqueU
velocity :: DefinedQuantityDict
velocity               = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.velocity               ([Symbol] -> Symbol
Concat [Symbol -> Symbol
vec Symbol
lV, String -> Symbol
label String
"(", Symbol
lT, String -> Symbol
label String
")"]) (Space -> Space
Vect Space
Real) UnitDefn
velU
weight :: DefinedQuantityDict
weight                 = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.weight                 Symbol
cW                                          Space
Real        UnitDefn
newton
fOfGravity :: DefinedQuantityDict
fOfGravity             = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.fOfGravity             (Symbol -> Symbol -> Symbol
sub (Symbol -> Symbol
vec Symbol
cF) (Symbol -> Symbol
vec Symbol
lG))                     Space
Real        UnitDefn
newton

-- Variants of distance, speed, and scalar acceleration
-- FIXME: Add variants of vector forms?
-- FIXME: Pull out commonalities?

xDist :: DefinedQuantityDict
xDist = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.xDist (Symbol -> Symbol
subX Symbol
lR) Space
Real UnitDefn
metre
yDist :: DefinedQuantityDict
yDist = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.yDist (Symbol -> Symbol
subY Symbol
lR) Space
Real UnitDefn
metre

iPos :: DefinedQuantityDict
iPos = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.iPos (Symbol -> Symbol -> Symbol
sup Symbol
lP Symbol
initial) Space
Real UnitDefn
metre
xPos :: DefinedQuantityDict
xPos = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.xPos (Symbol -> Symbol
subX Symbol
lP)        Space
Real UnitDefn
metre
yPos :: DefinedQuantityDict
yPos = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.yPos (Symbol -> Symbol
subY Symbol
lP)        Space
Real UnitDefn
metre

ixPos :: DefinedQuantityDict
ixPos = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.ixPos (Symbol -> Symbol -> Symbol
sup (Symbol -> Symbol
subX Symbol
lP) Symbol
initial) Space
Real UnitDefn
metre
iyPos :: DefinedQuantityDict
iyPos = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.iyPos (Symbol -> Symbol -> Symbol
sup (Symbol -> Symbol
subY Symbol
lP) Symbol
initial) Space
Real UnitDefn
metre

fSpeed :: DefinedQuantityDict
fSpeed = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.fSpeed (Symbol -> Symbol -> Symbol
sup Symbol
lV Symbol
final)   Space
Real UnitDefn
velU
iSpeed :: DefinedQuantityDict
iSpeed = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.iSpeed (Symbol -> Symbol -> Symbol
sup Symbol
lV Symbol
initial) Space
Real UnitDefn
velU

ixSpeed :: DefinedQuantityDict
ixSpeed = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.ixSpeed (Symbol -> Symbol -> Symbol
sub Symbol
lU Symbol
initial) Space
Real UnitDefn
velU -- temporary use for avoiding having too many superscripts
iySpeed :: DefinedQuantityDict
iySpeed = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.iySpeed (Symbol -> Symbol -> Symbol
sub Symbol
lW Symbol
initial) Space
Real UnitDefn
velU -- temporary use for avoiding having too many superscripts

fVel :: DefinedQuantityDict
fVel = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.fVel (Symbol -> Symbol -> Symbol
sup (Symbol -> Symbol
vec Symbol
lV) Symbol
final)   Space
Real UnitDefn
velU
iVel :: DefinedQuantityDict
iVel = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.iVel (Symbol -> Symbol -> Symbol
sup (Symbol -> Symbol
vec Symbol
lV) Symbol
initial) Space
Real UnitDefn
velU
xVel :: DefinedQuantityDict
xVel = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.xVel (Symbol -> Symbol
subX Symbol
lV)              Space
Real UnitDefn
velU
yVel :: DefinedQuantityDict
yVel = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.yVel (Symbol -> Symbol
subY Symbol
lV)              Space
Real UnitDefn
velU

ixVel :: DefinedQuantityDict
ixVel = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.ixVel (Symbol -> Symbol -> Symbol
sup (Symbol -> Symbol
subX Symbol
lV) Symbol
initial) Space
Real UnitDefn
velU
iyVel :: DefinedQuantityDict
iyVel = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.iyVel (Symbol -> Symbol -> Symbol
sup (Symbol -> Symbol
subY Symbol
lV) Symbol
initial) Space
Real UnitDefn
velU

xAccel :: DefinedQuantityDict
xAccel = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.xAccel (Symbol -> Symbol
subX Symbol
lA) Space
Real UnitDefn
accelU
yAccel :: DefinedQuantityDict
yAccel = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.yAccel (Symbol -> Symbol
subY Symbol
lA) Space
Real UnitDefn
accelU

constAccelV :: DefinedQuantityDict
constAccelV = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.constAccelV (Symbol -> Symbol -> Symbol
sup (Symbol -> Symbol
vec  Symbol
lA) Symbol
constant) Space
Real UnitDefn
accelU
xConstAccel :: DefinedQuantityDict
xConstAccel = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.xConstAccel (Symbol -> Symbol -> Symbol
sup (Symbol -> Symbol
subX Symbol
lA) Symbol
constant) Space
Real UnitDefn
accelU
yConstAccel :: DefinedQuantityDict
yConstAccel = ConceptChunk -> Symbol -> Space -> UnitDefn -> DefinedQuantityDict
dqd ConceptChunk
CP.yConstAccel (Symbol -> Symbol -> Symbol
sup (Symbol -> Symbol
subY Symbol
lA) Symbol
constant) Space
Real UnitDefn
accelU

constant, final, initial :: Symbol
constant :: Symbol
constant = String -> Symbol
label String
"c"
final :: Symbol
final    = String -> Symbol
label String
"f"
initial :: Symbol
initial  = String -> Symbol
label String
"i"

-- * Helpers

-- Helpers for common modifiers
subMax, subMin, subX, subY, subZ, supMax, supMin :: Symbol -> Symbol
subMax :: Symbol -> Symbol
subMax Symbol
s = Symbol -> Symbol -> Symbol
sub Symbol
s (String -> Symbol
label String
"max")
subMin :: Symbol -> Symbol
subMin Symbol
s = Symbol -> Symbol -> Symbol
sub Symbol
s (String -> Symbol
label String
"min")
subX :: Symbol -> Symbol
subX   Symbol
s = Symbol -> Symbol -> Symbol
sub Symbol
s (String -> Symbol
label String
"x")
subY :: Symbol -> Symbol
subY   Symbol
s = Symbol -> Symbol -> Symbol
sub Symbol
s (String -> Symbol
label String
"y")
subZ :: Symbol -> Symbol
subZ   Symbol
s = Symbol -> Symbol -> Symbol
sub Symbol
s (String -> Symbol
label String
"z")
supMax :: Symbol -> Symbol
supMax Symbol
s = Symbol -> Symbol -> Symbol
sup Symbol
s (String -> Symbol
label String
"max")
supMin :: Symbol -> Symbol
supMin Symbol
s = Symbol -> Symbol -> Symbol
sup Symbol
s (String -> Symbol
label String
"min")

-- * Constants

gravitationalConstValue :: ConstQDef
gravitationalConstValue :: ConstQDef
gravitationalConstValue = DefinedQuantityDict -> Literal -> ConstQDef
forall c e.
(Quantity c, MayHaveUnit c, Concept c) =>
c -> e -> QDefinition e
mkQuantDef DefinedQuantityDict
gravitationalConst (Double -> Literal
forall r. LiteralC r => Double -> r
dbl Double
6.6743E-11)
--(dbl 6.673 * 10E-11)
--(dbl 0.00000000006673)
gravitationalAccelConst :: ConstQDef
gravitationalAccelConst :: ConstQDef
gravitationalAccelConst = DefinedQuantityDict -> Literal -> ConstQDef
forall c e.
(Quantity c, MayHaveUnit c, Concept c) =>
c -> e -> QDefinition e
mkQuantDef DefinedQuantityDict
gravitationalMagnitude (Double -> Literal
forall r. LiteralC r => Double -> r
dbl Double
9.8)