(* Morris-Lecar with synapse *) component MorrisLecar81 = struct binding construct t V W gl gk gca vl vk vca v1 v2 v3 v4 phi c Isyn h = return [ [ minf (V) = 0.5 * (1 + (tanh ((V - v1) / v2))) ] [ winf (V) = 0.5 * (1 + (tanh ((V - v3) / v4))) ] [ lamw (V) = phi * (cosh ((V - v3) / (2 * v4))) ] [ ica (V) = gca * (minf (V) * ( vca - V)) ] [ ik (V) = gk * (W * (vk - V)) ] [ D (V t h) = (Isyn + (gl * (vl - V)) + ica(V) + ik(V)) / c ] [ D (W t h) = lamw(V) *((winf(V) - W)) ] ] end component AlphaSyn = struct binding construct t V S vt vs alpha beta Isyn h = return [ [ k (V) = 1 / (1 + exp(-((V - vt) / vs))) ] [ D (S t h) = alpha * k(V) * (1 - S) - (beta * S) ] ] end component MorrisLecar81Syn = struct binding construct t V W S gl gk gca vl vk vca v1 v2 v3 v4 phi c vt vs alpha beta Isyn h = Diagram.SEQUENCE (MorrisLecar81.construct t V W gl gk gca vl vk vca v1 v2 v3 v4 phi c Isyn h) (AlphaSyn.construct t V S vt vs alpha beta Isyn h) end component TestMorrisLecar81Syn = struct binding t = Signal.realsig `t (Signal.realconst 0.0) binding V = Signal.realsig `V (Signal.realconst -24.22) binding W = Signal.realsig `W (Signal.realconst 0.305) binding S = Signal.realsig `S (Signal.realconst 0.056) binding Isyn = Signal.realsig `Isyn (Signal.realconst 50.0) binding gl = Signal.realsig `gl (Signal.realconst 2.0) binding gk = Signal.realsig `gk (Signal.realconst 8.0) binding gca = Signal.realsig `gca (Signal.realconst 4.0) binding vl = Signal.realsig `vl (Signal.realconst -60.0) binding vk = Signal.realsig `vk (Signal.realconst -84.0) binding vca = Signal.realsig `vca (Signal.realconst 120.0) binding v1 = Signal.realsig `v1 (Signal.realconst -1.2) binding v2 = Signal.realsig `v2 (Signal.realconst 18.0) binding v3 = Signal.realsig `v3 (Signal.realconst 12.0) binding v4 = Signal.realsig `v4 (Signal.realconst 17.0) binding phi = Signal.realsig `phi (Signal.realconst 0.0667) binding c = Signal.realsig `c (Signal.realconst 20.0) binding alpha = Signal.realsig `alpha (Signal.realconst 1.0) binding beta = Signal.realsig `beta (Signal.realconst 0.25) binding vt = Signal.realsig `vt (Signal.realconst 20.0) binding vs = Signal.realsig `vs (Signal.realconst 2.0) binding h = Signal.realsig `h (Signal.realconst 0.001) binding type1 = MorrisLecar81Syn.construct t V W S gl gk gca vl vk vca v1 v2 v3 v4 phi c vt vs alpha beta Isyn h binding type1_ivp = IVP.construct type1 `t `h 0.0 500.0 end