fun putStrLn str = (TextIO.output (TextIO.stdOut, str); TextIO.output (TextIO.stdOut, "\n")) fun putStr str = (TextIO.output (TextIO.stdOut, str)) fun showReal n = let open StringCvt open Real in (if n < 0.0 then "-" else "") ^ (fmt (FIX (SOME 12)) (abs n)) end fun printstate (input) = ( (showReal (#t(input))) ^ " " ^ (showReal (#V(input))) ^ " " ^ (showReal (#U(input))) ) fun run (tmax,f,m,input) = let val nstate = f input in putStrLn (printstate nstate); if (#t nstate) > tmax then (putStrLn "# All done!"; nstate) else (run (tmax,f,m,nstate)) end fun make_pulse (lodur,hidur,lo, hi) = (fn (nstate as {h,t,V,U,k1,k2,k3,theta,a,b,c,d,spike,tspike,Isyn}) => (let val t = #t(nstate) val Isyn = (if (Real.> (t,lodur)) then hi else (if (Real.> (t,Real.+(lodur,hidur))) then lo else lo)) in {h=h,t=t,V=V,U=U,k1=k1,k2=k1,k3=k3,theta=theta,a=a,b=b,c=c,d=d,spike=spike,tspike=tspike,Isyn=Isyn} end)) val _ = (printstate Model.RS_initial; run (240.0,Model.RS,make_pulse (40.0,200.0,0.0,10.0),Model.RS_initial)) val _ = (printstate Model.IB_initial; run (240.0,Model.IB,make_pulse (40.0,200.0,0.0,10.0),Model.IB_initial)) val _ = (printstate Model.CH_initial; run (240.0,Model.CH,make_pulse (40.0,200.0,0.0,10.0),Model.CH_initial)) val _ = (printstate Model.FS_initial; run (240.0,Model.FS,make_pulse (40.0,200.0,0.0,10.0),Model.FS_initial)) val _ = (printstate Model.LTS_initial; run (240.0,Model.LTS,make_pulse (40.0,200.0,0.0,10.0),Model.LTS_initial))