module Drasil.NoPCM.ODEs (noPCMODEOpts, noPCMODEInfo) where

import Language.Drasil (recip_, ExprC(mulRe, idx, sy, ($-)), LiteralC(int, exactDbl))
import Language.Drasil.Code (odeInfo, odeOptions, quantvar, ODEInfo,
  ODEMethod(RK45), ODEOptions)

import Data.Drasil.Quantities.Physics (time)

import Drasil.SWHS.Unitals (tauW, tempC, tempInit, tempW, timeFinal, timeStep,
  absTol, relTol)


noPCMODEOpts :: ODEOptions
noPCMODEOpts :: ODEOptions
noPCMODEOpts = ODEMethod
-> CodeExpr -> CodeExpr -> CodeExpr -> CodeExpr -> ODEOptions
odeOptions ODEMethod
RK45 (UncertainChunk -> CodeExpr
forall r c. (ExprC r, HasUID c, HasSymbol c) => c -> r
sy UncertainChunk
absTol) (UncertainChunk -> CodeExpr
forall r c. (ExprC r, HasUID c, HasSymbol c) => c -> r
sy UncertainChunk
relTol) (UncertQ -> CodeExpr
forall r c. (ExprC r, HasUID c, HasSymbol c) => c -> r
sy UncertQ
timeStep) (Integer -> CodeExpr
forall r. LiteralC r => Integer -> r
exactDbl 0)

noPCMODEInfo :: ODEInfo
noPCMODEInfo :: ODEInfo
noPCMODEInfo = CodeVarChunk
-> CodeVarChunk
-> [CodeVarChunk]
-> CodeExpr
-> CodeExpr
-> CodeExpr
-> [CodeExpr]
-> ODEOptions
-> ODEInfo
odeInfo (UnitalChunk -> CodeVarChunk
forall c. (Quantity c, MayHaveUnit c) => c -> CodeVarChunk
quantvar UnitalChunk
time) (ConstrConcept -> CodeVarChunk
forall c. (Quantity c, MayHaveUnit c) => c -> CodeVarChunk
quantvar ConstrConcept
tempW)
  [UnitalChunk -> CodeVarChunk
forall c. (Quantity c, MayHaveUnit c) => c -> CodeVarChunk
quantvar UnitalChunk
tauW, UncertQ -> CodeVarChunk
forall c. (Quantity c, MayHaveUnit c) => c -> CodeVarChunk
quantvar UncertQ
tempC] (Integer -> CodeExpr
forall r. LiteralC r => Integer -> r
exactDbl 0) (UncertQ -> CodeExpr
forall r c. (ExprC r, HasUID c, HasSymbol c) => c -> r
sy UncertQ
timeFinal) (UncertQ -> CodeExpr
forall r c. (ExprC r, HasUID c, HasSymbol c) => c -> r
sy UncertQ
tempInit)
  [CodeExpr -> CodeExpr
forall r. (ExprC r, LiteralC r) => r -> r
recip_ (UnitalChunk -> CodeExpr
forall r c. (ExprC r, HasUID c, HasSymbol c) => c -> r
sy UnitalChunk
tauW) CodeExpr -> CodeExpr -> CodeExpr
forall r. ExprC r => r -> r -> r
`mulRe` (UncertQ -> CodeExpr
forall r c. (ExprC r, HasUID c, HasSymbol c) => c -> r
sy UncertQ
tempC CodeExpr -> CodeExpr -> CodeExpr
forall r. ExprC r => r -> r -> r
$- CodeExpr -> CodeExpr -> CodeExpr
forall r. ExprC r => r -> r -> r
idx (ConstrConcept -> CodeExpr
forall r c. (ExprC r, HasUID c, HasSymbol c) => c -> r
sy ConstrConcept
tempW) (Integer -> CodeExpr
forall r. LiteralC r => Integer -> r
int 0))] ODEOptions
noPCMODEOpts