source: project/release/4/signal-diagram/trunk/examples/Morris-Lecar81.scm @ 30940

Last change on this file since 30940 was 30940, checked in by Ivan Raikov, 6 years ago

signal-diagram: support for variable timestep integration

File size: 2.7 KB
Line 
1
2;; (bib
3;;     (author   "Morris, C" "Lecar, H")
4;;     (title    "Voltage oscillations in the barnacle giant muscle fiber")
5;;     (journal  "Biophys J")
6;;     (year     "1981")
7;;     (volume   "35")
8;;     (pages    "193-213")
9;;     (bibtype  "article"))
10
11
12(use signal-diagram signal-diagram-dynamics mathh)
13
14(define (Morris-Lecar81:construct gl gk gca vl vk vca v1 v2 v3 v4 phi c Isyn)
15 
16
17  `((f . ,(DAE h t
18               (minf (v) (* 0.5 (+ 1 (tanh (/ (- v v1) v2)))))
19               (winf (v) (* 0.5 (+ 1 (tanh (/ (- v v3) v4)))))
20               (lamw (v) (* phi (cosh (/ (- v v3) (* 2 v4)))))
21               (ica  (v) (* gca (* (minf v) (- vca v))))
22               (ik   (v) (* gk  (* w (- vk v ))))
23               (v    (/ (+ Isyn (* gl (- vl v)) (ica v) (ik v)) c))
24               (w    (* (lamw v) (- (winf v) w)))))
25
26
27    (initial . 
28             ((t       0.0)
29              (h       1.0)
30              (v       -60.899) 
31              (w       0.0149)
32              (Isyn    ,Isyn)
33              (vk      ,vk)   
34              (vl      ,vl)
35              (vca     ,vca)
36              (gk      ,gk)
37              (gl      ,gl)
38              (gca     ,gca)
39              (c       ,c)
40              (v1      ,v1)
41              (v2      ,v2)
42              (v3      ,v3)
43              (v4      ,v4)
44              (phi     ,phi))))
45
46  )
47
48
49(define (dataflow model)
50  (let* ((f         (alist-ref 'f model)) 
51         (initial   (alist-ref 'initial model))
52         (input     (map car initial)))
53    (print "input = " input)
54    (print "dataflow f: "  (dataflow (construct f) input))
55    ))
56
57
58(define (codegen name model #!key (language 'scheme) (solver 'rk3))
59  (let* ((f         (alist-ref 'f model)) 
60         (initial   (alist-ref 'initial model))
61         (input     (map car initial)))
62    (let ((codegen (case language
63                     ((octave Octave) codegen/Octave)
64                     ((scheme Scheme) codegen/scheme)
65                     ((ML) codegen/ML))))
66      (codegen name (construct f adaptive-integral-method: 
67                               (case solver 
68                                     ((rkhe rkbs rkf45 rkck rkdp rkf78 rkv65) #t)
69                                     (else #f)))
70               initial: initial solver: solver ))
71    ))
72
73
74;; gl gk gca vl vk vca v1 v2 v3 v4 phi c Isyn
75(define Morris-Lecar81 (Morris-Lecar81:construct 2.0 8.0 4.0 -50.0 -70.0 100.0 -1.0 15.0 10.0 14.5 0.0667 20.0 50.0))
76
77;(with-output-to-file "Morris-Lecar81_solver.m"
78;  (lambda () (codegen 'Morris_Lecar81 Morris-Lecar81  language: 'octave solver: #f)))
79
80;(with-output-to-file "Morris-Lecar81_solver.scm"
81;  (lambda () (codegen 'Morris_Lecar81 Morris-Lecar81  language: 'scheme)))
82
83(with-output-to-file "Morris-Lecar81_solver.sml"
84  (lambda () (codegen 'Morris-Lecar81 Morris-Lecar81 language: 'ML solver: 'rkdp)))
85
86
Note: See TracBrowser for help on using the repository browser.