module Drasil.PDController.ODEs where import Language.Drasil (LiteralC(exactDbl), ExprC(sy)) import Language.Drasil.Code (odeInfo', odeOptions, quantvar, ODEInfo, ODEMethod(RK45), ODEOptions) import Theory.Drasil (InitialValueProblem, makeAIVP) import Drasil.PDController.Unitals (dqdSetPointTD, dqdPropGain, dqdDerivGain, dqdSimTime, dqdStepTime, odeRelTolConst, odeAbsTolConst) import Drasil.PDController.IModel(imPDRC) pidODEOptions :: ODEOptions pidODEOptions :: ODEOptions pidODEOptions = ODEMethod -> CodeExpr -> CodeExpr -> CodeExpr -> ODEOptions odeOptions ODEMethod RK45 (ConstQDef -> CodeExpr forall c. (HasUID c, HasSymbol c) => c -> CodeExpr forall r c. (ExprC r, HasUID c, HasSymbol c) => c -> r sy ConstQDef odeAbsTolConst) (ConstQDef -> CodeExpr forall c. (HasUID c, HasSymbol c) => c -> CodeExpr forall r c. (ExprC r, HasUID c, HasSymbol c) => c -> r sy ConstQDef odeRelTolConst) (DefinedQuantityDict -> CodeExpr forall c. (HasUID c, HasSymbol c) => c -> CodeExpr forall r c. (ExprC r, HasUID c, HasSymbol c) => c -> r sy DefinedQuantityDict dqdStepTime) pdIVP :: InitialValueProblem pdIVP :: InitialValueProblem pdIVP = Expr -> Expr -> [Expr] -> InitialValueProblem makeAIVP (Integer -> Expr forall r. LiteralC r => Integer -> r exactDbl Integer 0) (DefinedQuantityDict -> Expr forall c. (HasUID c, HasSymbol c) => c -> Expr forall r c. (ExprC r, HasUID c, HasSymbol c) => c -> r sy DefinedQuantityDict dqdSimTime) [Integer -> Expr forall r. LiteralC r => Integer -> r exactDbl Integer 0, Integer -> Expr forall r. LiteralC r => Integer -> r exactDbl Integer 0] pidODEInfo :: ODEInfo pidODEInfo :: ODEInfo pidODEInfo = [CodeVarChunk] -> ODEOptions -> DifferentialModel -> InitialValueProblem -> ODEInfo odeInfo' [DefinedQuantityDict -> CodeVarChunk forall c. (Quantity c, MayHaveUnit c, Concept c) => c -> CodeVarChunk quantvar DefinedQuantityDict dqdPropGain, DefinedQuantityDict -> CodeVarChunk forall c. (Quantity c, MayHaveUnit c, Concept c) => c -> CodeVarChunk quantvar DefinedQuantityDict dqdDerivGain, DefinedQuantityDict -> CodeVarChunk forall c. (Quantity c, MayHaveUnit c, Concept c) => c -> CodeVarChunk quantvar DefinedQuantityDict dqdSetPointTD] ODEOptions pidODEOptions DifferentialModel imPDRC InitialValueProblem pdIVP