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

import Language.Drasil (ExprC(sy),LiteralC(exactDbl), InitialValueProblem, makeAIVP)
import Language.Drasil.Code (odeInfo', odeOptions, quantvar, ODEInfo,
  ODEMethod(RK45), ODEOptions)
import Drasil.SWHS.Unitals (tauW, tempC, tempInit, timeFinal, timeStep, absTol, relTol)
import Drasil.SWHSNoPCM.IMods(eBalanceOnWtrRC)


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

noPCMIVP :: InitialValueProblem
noPCMIVP :: InitialValueProblem
noPCMIVP = Expr -> Expr -> [Expr] -> InitialValueProblem
makeAIVP (forall r. LiteralC r => Integer -> r
exactDbl Integer
0) (forall r c. (ExprC r, HasUID c, HasSymbol c) => c -> r
sy UncertQ
timeFinal) [forall r c. (ExprC r, HasUID c, HasSymbol c) => c -> r
sy UncertQ
tempInit]

noPCMODEInfo :: ODEInfo
noPCMODEInfo :: ODEInfo
noPCMODEInfo = [CodeVarChunk]
-> ODEOptions
-> DifferentialModel
-> InitialValueProblem
-> ODEInfo
odeInfo'
  [forall c. (Quantity c, MayHaveUnit c) => c -> CodeVarChunk
quantvar UnitalChunk
tauW, forall c. (Quantity c, MayHaveUnit c) => c -> CodeVarChunk
quantvar UncertQ
tempC]
  ODEOptions
noPCMODEOpts
  DifferentialModel
eBalanceOnWtrRC
  InitialValueProblem
noPCMIVP