module Drasil.SWHS.Concepts where --all of this file is exported

import Control.Lens ((^.))

import Language.Drasil
import Language.Drasil.Chunk.Concept.NamedCombinators

import Data.Drasil.Concepts.Documentation (assumption, goalStmt,
  likelyChg, physSyst, requirement, srs, typUnc, unlikelyChg)
import Data.Drasil.Concepts.Math (ode, parameter, rightSide)
import Data.Drasil.Domains (materialEng)
import Data.Drasil.TheoryConcepts (dataDefn, genDefn, inModel, thModel)

con :: [ConceptChunk]
con :: [ConceptChunk]
con = [ConceptChunk
charging, ConceptChunk
coil, ConceptChunk
discharging, ConceptChunk
gaussDiv,
  ConceptChunk
perfectInsul, ConceptChunk
phaseChangeMaterial, ConceptChunk
tank,
  ConceptChunk
tankPCM, ConceptChunk
transient, ConceptChunk
water, ConceptChunk
sWHT, ConceptChunk
tankParam]

---Acronyms---
acronyms :: [CI]
acronyms :: [CI]
acronyms = [CI
assumption, CI
dataDefn, CI
genDefn, CI
goalStmt, CI
inModel, CI
likelyChg, CI
ode,
  CI
progName, CI
physSyst, CI
requirement, CI
srs, CI
thModel, CI
typUnc, CI
unlikelyChg]

acronymsFull :: [CI]
acronymsFull :: [CI]
acronymsFull = [CI]
acronyms [CI] -> [CI] -> [CI]
forall a. [a] -> [a] -> [a]
++ [CI
phsChgMtrl, CI
rightSide]

phsChgMtrl, progName :: CI

phsChgMtrl :: CI
phsChgMtrl  = String -> NP -> String -> [IdeaDict] -> CI
commonIdeaWithDict "phsChgMtrl" (String -> String -> NP
nounPhrase "phase change material"
  "phase change materials") "PCM" [IdeaDict
materialEng]

progName :: CI
progName    = String -> NP -> String -> [IdeaDict] -> CI
commonIdeaWithDict "swhsName"   (String -> String -> NP
nounPhrase "solar water heating system"
  "solar water heating systems") "SWHS" [IdeaDict
materialEng]

full :: NamedChunk
full :: NamedChunk
full = String -> NP -> NamedChunk
nc "full" (CI
progName CI -> CI -> NP
forall c d. (NamedIdea c, NamedIdea d) => c -> d -> NP
`with` CI
phsChgMtrl)
-- I want to include SI as an acronym, but I can't find a way for the
-- description to have accents when using dcc.

---ConceptChunks---

charging, coil, discharging, gaussDiv,
  perfectInsul, phaseChangeMaterial, tank,
  tankPCM, transient, water, sWHT, tankParam :: ConceptChunk

charging :: ConceptChunk
charging = String -> NP -> String -> ConceptChunk
dcc "charging" (String -> NP
nounPhraseSP "charging") "charging of the tank"

coil :: ConceptChunk
coil = String -> NP -> String -> ConceptChunk
dcc "coil" (String -> NP
cn' "heating coil")
  "coil in tank that heats by absorbing solar energy"

discharging :: ConceptChunk
discharging = String -> NP -> String -> ConceptChunk
dcc "discharging" (String -> NP
nounPhraseSP "discharging")
  "discharging of the tank"

transient :: ConceptChunk
transient = String -> NP -> String -> ConceptChunk
dcc "transient" (String -> NP
nounPhraseSP "transient") "changing with time"

gaussDiv :: ConceptChunk
gaussDiv = String -> NP -> String -> ConceptChunk
dcc "gaussDiv" (String -> NP
nounPhraseSP "gauss's divergence theorem")
  ("a result that relates the flow of a vector field through a surface" String -> String -> String
forall a. [a] -> [a] -> [a]
++
  "to the behavior of the vector field inside the surface")
--TODO: Physical property.

perfectInsul :: ConceptChunk
perfectInsul = String -> NP -> String -> ConceptChunk
dcc "perfectInsul" (String -> NP
nounPhraseSP "perfectly insulated")
  ("describes the property of a material not allowing" String -> String -> String
forall a. [a] -> [a] -> [a]
++
  "heat transfer through its boundaries")

phaseChangeMaterial :: ConceptChunk
phaseChangeMaterial = String -> NP -> String -> ConceptChunk
dcc "pcm" (CI
phsChgMtrl CI -> Getting NP CI NP -> NP
forall s a. s -> Getting a s a -> a
^. Getting NP CI NP
forall c. NamedIdea c => Lens' c NP
term)
  ("a substance that uses phase changes (such as melting) to absorb or " String -> String -> String
forall a. [a] -> [a] -> [a]
++
  "release large amounts of heat at a constant temperature")
  
tankParam :: ConceptChunk
tankParam = String -> NP -> String -> ConceptChunk
dcc "tankParam" (NP -> NP -> NP
compoundPhrase' (ConceptChunk
tank ConceptChunk -> Getting NP ConceptChunk NP -> NP
forall s a. s -> Getting a s a -> a
^. Getting NP ConceptChunk NP
forall c. NamedIdea c => Lens' c NP
term)
  (ConceptChunk
parameter ConceptChunk -> Getting NP ConceptChunk NP -> NP
forall s a. s -> Getting a s a -> a
^. Getting NP ConceptChunk NP
forall c. NamedIdea c => Lens' c NP
term))
  "values associated with the tank"

tank :: ConceptChunk
tank  = String -> NP -> String -> ConceptChunk
dcc "tank"  (String -> NP
cn' "tank") "enclosure containing some kind of substance"
sWHT :: ConceptChunk
sWHT  = String -> NP -> String -> ConceptChunk
dcc "sWHT"  (String -> NP
cn' "solar water heating tank") "solar water heating tank"
water :: ConceptChunk
water = String -> NP -> String -> ConceptChunk
dcc "water" (String -> NP
cn' "water") "the liquid with which the tank is filled"

tankPCM :: ConceptChunk
tankPCM = String -> NP -> String -> ConceptChunk
dcc "tankPCM" (Sentence
-> Sentence -> CapitalizationRule -> CapitalizationRule -> NP
nounPhrase''
  (ConceptChunk -> Sentence
forall n. (HasUID n, NamedIdea n) => n -> Sentence
phrase ConceptChunk
sWHT Sentence -> Sentence -> Sentence
+:+ String -> Sentence
S "incorporating" Sentence -> Sentence -> Sentence
+:+ CI -> Sentence
forall c. (Idea c, HasUID c) => c -> Sentence
short CI
phsChgMtrl)
  (ConceptChunk -> Sentence
forall n. (HasUID n, NamedIdea n) => n -> Sentence
phrase ConceptChunk
sWHT Sentence -> Sentence -> Sentence
+:+ String -> Sentence
S "incorporating" Sentence -> Sentence -> Sentence
+:+ CI -> Sentence
forall c. (Idea c, HasUID c) => c -> Sentence
short CI
phsChgMtrl)
  CapitalizationRule
CapFirst CapitalizationRule
CapWords)
  "solar water heating tank incorporating phase change material"

swhsPCM :: CommonConcept
-- Nounphrase'' hack to get nounPhraseSP words to accept
-- nounPhrases instead of strings
-- Another capitalization hack.
swhsPCM :: CommonConcept
swhsPCM = String -> NP -> String -> String -> CommonConcept
dcc' "swhsPCM" (Sentence
-> Sentence -> CapitalizationRule -> CapitalizationRule -> NP
nounPhrase''
  (String -> Sentence
S "solar water heating systems" Sentence -> Sentence -> Sentence
+:+ String -> Sentence
S "incorporating" Sentence -> Sentence -> Sentence
+:+ CI -> Sentence
forall c. (Idea c, HasUID c) => c -> Sentence
short CI
phsChgMtrl)
  (String -> Sentence
S "solar water heating systems" Sentence -> Sentence -> Sentence
+:+ String -> Sentence
S "incorporating" Sentence -> Sentence -> Sentence
+:+ CI -> Sentence
forall c. (Idea c, HasUID c) => c -> Sentence
short CI
phsChgMtrl)
  CapitalizationRule
CapFirst CapitalizationRule
CapWords)
  "solar water heating systems incorporating phase change material"
  "SWHS"