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 start (initial,tmax,f,m) = let fun run (input) = let val nstate = f input val nstate1 = {spike=(#spike(nstate)),d=(#d(initial)),U=(#U(nstate)),V=(#V(nstate)),b=(#b(initial)),c=(#c(initial)),tspike=(#tspike(nstate)),t=(#t(nstate)),theta=(#theta(initial)),a=(#a(initial)),Isyn=(#Isyn(initial)),k3=(#k3(initial)),k2=(#k2(initial)),k1=(#k1(initial)),h=(#h(initial))} in putStrLn (printstate nstate1); if (#t nstate) > tmax then (putStrLn "# All done!"; nstate) else (run nstate1) end in printstate initial; run initial 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 _ = (start (Model.RS_initial,240.0,Model.RS,make_pulse (40.0,200.0,0.0,10.0))) val _ = (start (Model.IB_initial,240.0,Model.IB,make_pulse (40.0,200.0,0.0,10.0))) val _ = (start (Model.CH_initial,240.0,Model.CH,make_pulse (40.0,200.0,0.0,10.0))) val _ = (start (Model.FS_initial,240.0,Model.FS,make_pulse (40.0,200.0,0.0,10.0))) val _ = (start (Model.LTS_initial,240.0,Model.LTS,make_pulse (40.0,200.0,0.0,10.0)))