Changeset 12232 in project


Ignore:
Timestamp:
10/22/08 04:06:06 (12 years ago)
Author:
Ivan Raikov
Message:

Fixes related to kinetic equations.

Location:
release/3/nemo/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • release/3/nemo/trunk/expr-parser.scm

    r12218 r12232  
    138138         ((char-alphabetic? c)  (tok (ID  ,(read-id (list c)))))
    139139         (else
    140           (errorp ": illegal character: " c)
     140          (errorp "illegal character: " c)
    141141          (skip-spaces)
    142142          (loop (read-char port))))))))
     
    153153
    154154(define (make-sym-lexer lst errorp)
    155   (if (not (list? lst)) (errorp ": illegal list: " lst))
     155  (if (not (list? lst)) (errorp "illegal list: " lst))
    156156  (let ((is (make-stack)))
    157157    (stack-push! is lst)
     
    174174                                          ((? list?)    (begin (stack-push! is x)
    175175                                                               (tok (LPAREN))))
    176                                           (else (errorp ": invalid input: " x))))
     176                                          (else (errorp "invalid input: " x))))
    177177                            (if (not (stack-empty? is)) (tok (RPAREN)) '*eoi*))))
    178178            t)))))
     
    182182(define (nemo:parse-sym-expr lst)
    183183  (let ((ret (cond ((number? lst)  lst)
     184                   ((symbol? lst)  lst)
    184185                   ((and (list? lst) (null? lst) '()))
    185186                   (else (expr-parser  (make-sym-lexer lst parse-error) parse-error)))))
  • release/3/nemo/trunk/nemo-core.scm

    r12218 r12232  
    929929                                                      "initial equilibrium equations"))
    930930
    931                                       (if (and initial-eq
    932                                                (or (not (list? initial-eq)) (not (every lineq? initial-eq))))
    933                                           (nemo:error 'eval-nemo-system-decls
    934                                                       "initial equilibrium field in state complex declarations "
    935                                                       "must be a list of linear equations"))
    936 
    937                                       (let ((initialv (and initial (eval-const (parse-expr initial)))))
    938                                         (apply env-extend!
    939                                                (cons* id '(tscomp) (or initialv initial-eq) `(power ,power)
    940                                                       (alist-update! 'transitions transitions alst)))
    941                                         (cons id qs))))
     931                                      (let ((initial-eq
     932                                             (and initial-eq (map (lambda (eq)
     933                                                                    `(,(first eq) = ,(parse-expr (third eq))))
     934                                                                  initial-eq))))
     935
     936                                        (if (and initial-eq
     937                                                 (or (not (list? initial-eq)) (not (every lineq? initial-eq))))
     938                                            (nemo:error 'eval-nemo-system-decls
     939                                                        "initial equilibrium field in state complex declarations "
     940                                                        "must be a list of linear equations"))
     941                                       
     942                                        (let ((initialv (and initial (eval-const (parse-expr initial)))))
     943                                          (apply env-extend!
     944                                                 (cons* id '(tscomp) (or initialv initial-eq) `(power ,power)
     945                                                        (alist-update! 'transitions transitions alst)))
     946                                          (cons id qs)))))
    942947
    943948                                   (else (nemo:error 'eval-nemo-system-decls
  • release/3/nemo/trunk/nemo-nmodl.scm

    r12176 r12232  
    728728             (sysname     (nmodl-name ((dis 'sysname) sys)))
    729729             (deps*       ((dis 'depgraph*) sys))
    730              (consts      ((dis 'consts) sys))
    731              (asgns       ((dis 'asgns) sys))
    732              (states      ((dis 'states) sys))
     730             (consts      ((dis 'consts)  sys))
     731             (asgns       ((dis 'asgns)   sys))
     732             (states      ((dis 'states)  sys))
    733733             (stcomps     ((dis 'stcomps) sys))
    734              (defuns      ((dis 'defuns) sys))
     734             (defuns      ((dis 'defuns)  sys))
    735735             (components  ((dis 'components) sys))
    736736             (ionchs      (filter-map (match-lambda ((name 'ion-channel id) (list name id)) (else #f)) components))
     
    773773                                    `(,(nmodl-name ion) ,(nmodl-name (s+ 'i ion)) ,(nmodl-name (s+ ion 'i)))))
    774774                                epools)))
    775                )
     775               (has-ode?    (or (not (null? (filter (lambda (x) (not (member (car x) kinetic))) states)))
     776                              (not (null? pool-ions))))
     777               (has-kinetic? (or (not (null? (filter (lambda (x) (member (car x) kinetic)) states))))))
    776778
    777779           (for-each
     
    985987             (if (not (null? locals))    (pp indent+ (LOCAL ,(sl\ ", " locals))))
    986988             (if (not (null? asgns))     (pp indent+ (rates ())))
    987              (if (not method) (pp indent+ (SOLVE states))
    988                  (pp indent+ (SOLVE states METHOD ,method)))
    989              (if (not (null? kinetic))
    990                 (pp indent+  (SOLVE kstates METHOD sparse)))
    991              (if (not (null? stcomps))  (pp indent+ (stcomps ())))
     989             (if has-ode?
     990                 (if (not method) (pp indent+ (SOLVE states))
     991                     (pp indent+ (SOLVE states METHOD ,method))))
     992             (if has-kinetic?  (pp indent+  (SOLVE kstates METHOD sparse)))
     993             (if (not (null? stcomps))   (pp indent+ (stcomps ())))
    992994             (if (not (null? pool-ions)) (pp indent+ (pools ())))
    993995             (for-each (lambda (p) (pp indent+ ,(expr->string/NMODL (second p) (first p)))) i-eqs)
    994996             (pp indent "}"))
    995997           
    996            (if (or (not (null? states)) (not (null? pool-ions)))
     998           (if has-ode?
    997999               (begin
    9981000                 (pp indent ,nl (DERIVATIVE states "{"))
     
    10221024                 (pp indent "}")))
    10231025           
    1024            (if (not (null? kinetic))
     1026           (if has-kinetic?
    10251027                 (begin
    10261028                   (pp indent ,nl (KINETIC kstates "{"))
Note: See TracChangeset for help on using the changeset viewer.