Changeset 12561 in project


Ignore:
Timestamp:
11/20/08 08:39:21 (11 years ago)
Author:
Ivan Raikov
Message:

Place the main function at the beginning of the file.

File:
1 edited

Legend:

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

    r12558 r12561  
    458458
    459459        (match-let (((state-list asgn-list g) deps*))
    460          (let* ((poset            (vector->list ((dis 'depgraph->bfs-dist-poset) g)))
     460         (let* ((const-defs (filter-map
     461                               (lambda (nv)
     462                                 (and (not (member (first nv) matlab-builtin-consts))
     463                                      (let ((v1 (canonicalize-expr/MATLAB (second nv))))
     464                                        (list (first nv) v1))))
     465                               consts))
     466                (poset            (vector->list ((dis 'depgraph->bfs-dist-poset) g)))
    461467                (asgn-eq-defs     (poset->asgn-eq-defs poset sys))
    462468                (perm-ions (fold (lambda (ionch ax)
     
    488494                                    `(,(matlab-name ion) ,(matlab-name (s+ 'i ion)) ,(matlab-name (s+ ion 'i)))))
    489495                               epools)))
    490 
     496           
    491497           (for-each
    492498            (lambda (a)
     
    505511            pool-ions)
    506512
    507            (let* ((with      (inexact->exact (round (/ (abs (- max-v min-v)) step))))
    508                   (define-fn (make-define-fn table? min-v max-v with)))
    509              (for-each (lambda (fndef)
    510                          (if (not (member (car fndef) builtin-fns))
    511                              (apply define-fn (cons indent fndef))))
    512                        defuns))
    513 
    514            (pp indent ,nl)
    515 
    516            (let* ((const-defs (filter-map
    517                                (lambda (nv)
    518                                  (and (not (member (first nv) matlab-builtin-consts))
    519                                       (let ((v1 (canonicalize-expr/MATLAB (second nv))))
    520                                         (list (first nv) v1))))
    521                                    consts)))
    522 
    523              (for-each (lambda (def)
    524                          (let ((n (first def)) (b (second def)))
    525                            (pp indent ,(expr->string/MATLAB b n)))) const-defs)
    526 
    527              (for-each (lambda (ep)
    528                          (let* ((ep-name     (first ep))
    529                                 (ep-props    (second ep))
    530                                 (init-expr   (lookup-def 'initial ep-props))
    531                                 (temp-expr   (lookup-def 'temp-adj ep-props))
    532                                 (beta-expr   (lookup-def 'beta ep-props))
    533                                 (depth-expr  (lookup-def 'depth ep-props))
    534                                 (init-name   (matlab-name (s+ ep-name '-init)))
    535                                 (temp-name   (matlab-name (s+ ep-name '-temp-adj)))
    536                                 (beta-name   (matlab-name (s+ ep-name '-beta)))
    537                                 (depth-name  (matlab-name (s+ ep-name '-depth))))
    538                            (if (or (not beta-expr) (not depth-expr) (not init-expr))
    539                                (nemo:error 'nemo:matlab-translator
    540                                            ": ion pool " ep-name " requires initial value, depth and beta parameters"))
    541                            (let ((temp-val  (and temp-expr (eval-const sys temp-expr)))
    542                                  (init-val  (eval-const sys init-expr))
    543                                  (beta-val  (eval-const sys beta-expr))
    544                                  (depth-val (eval-const sys depth-expr)))
    545                              (pp indent
    546                                  ,(expr->string/MATLAB init-val init-name)
    547                                  ,(expr->string/MATLAB temp-val temp-name)
    548                                  ,(expr->string/MATLAB beta-val beta-name)
    549                                  ,(expr->string/MATLAB depth-val depth-name)))))
    550                        epools))
    551 
    552              (pp indent ,nl (function dy = ,sysname (,(sl\ ", " `(dy t)))))
    553 
    554              (if (not (null? exports)) (pp indent+ (global ,(sl\ ", " exports))))
    555 
    556              (if (not (null? asgns))
    557                  (for-each (lambda (def)
    558                              (let ((n (matlab-name (first def)) )
    559                                    (b (second def)))
    560                                (pp indent+ ,(expr->string/MATLAB b n)))) asgn-eq-defs))
    561 
     513
     514           (for-each (lambda (ep)
     515                       (let* ((ep-name     (first ep))
     516                              (ep-props    (second ep))
     517                              (init-expr   (lookup-def 'initial ep-props))
     518                              (temp-expr   (lookup-def 'temp-adj ep-props))
     519                              (beta-expr   (lookup-def 'beta ep-props))
     520                              (depth-expr  (lookup-def 'depth ep-props))
     521                              (init-name   (matlab-name (s+ ep-name '-init)))
     522                              (temp-name   (matlab-name (s+ ep-name '-temp-adj)))
     523                              (beta-name   (matlab-name (s+ ep-name '-beta)))
     524                              (depth-name  (matlab-name (s+ ep-name '-depth))))
     525                         (if (or (not beta-expr) (not depth-expr) (not init-expr))
     526                             (nemo:error 'nemo:matlab-translator
     527                                         ": ion pool " ep-name " requires initial value, depth and beta parameters"))
     528                         (let ((temp-val  (and temp-expr (eval-const sys temp-expr)))
     529                               (init-val  (eval-const sys init-expr))
     530                               (beta-val  (eval-const sys beta-expr))
     531                               (depth-val (eval-const sys depth-expr)))
     532                           (pp indent
     533                               ,(expr->string/MATLAB init-val init-name)
     534                               ,(expr->string/MATLAB temp-val temp-name)
     535                               ,(expr->string/MATLAB beta-val beta-name)
     536                               ,(expr->string/MATLAB depth-val depth-name)))))
     537                     epools)
     538         
     539           (pp indent ,nl (function dy = ,sysname (,(sl\ ", " `(dy t)))))
     540           
     541           (if (not (null? exports)) (pp indent+ (global ,(sl\ ", " exports))))
     542           
     543           (if (not (null? asgns))
     544               (for-each (lambda (def)
     545                           (let ((n (matlab-name (first def)) )
     546                                 (b (second def)))
     547                             (pp indent+ ,(expr->string/MATLAB b n)))) asgn-eq-defs))
     548         
    562549           (let* ((i-eqs (filter-map
    563550                          (lambda (ionch)
    564 
     551                           
    565552                            (let* ((label     (first ionch))
    566553                                   (n         (second ionch))
     
    572559                                   (gate      (lookup-def 'gate subcomps))
    573560                                   (sts       (and gate ((dis 'component-exports) sys (cid gate)))))
    574 
     561                             
    575562                              (cond ((and perm pore gate)
    576563                                     (case (cn perm)
     
    591578                                               (gion  `(* ,gmax ,@sptms)))
    592579                                          (list i e gion)))))
    593 
     580                                   
    594581                                    ((and perm pore)
    595582                                     (case (cn perm)
     
    597584                                        (let* ((i     (matlab-name 'i))
    598585                                               (e     (car permqs))
    599                                                (gmax  (car ((dis 'component-exports) sys (cid pore)))))
     586                                             (gmax  (car ((dis 'component-exports) sys (cid pore)))))
    600587                                          (list i e gmax)))
    601588                                       (else
    602589                                        (nemo:error 'nemo:matlab-translator ": invalid ion channel definition " label))))
    603 
    604                                       ((and acc pore gate)
    605                                        (let* ((i     (matlab-name (s+ 'i (cn acc))))
    606                                               (gmax  (car ((dis 'component-exports) sys (cid pore))))
    607                                               (pwrs  (map (lambda (n) (state-power sys n)) sts))
    608                                               (sptms (map (lambda (st pwr) `(pow ,st ,pwr)) sts pwrs))
    609                                               (gion  `(* ,gmax ,@sptms)))
    610                                         (list i #f gion)))
    611                                       (else (nemo:error 'nemo:matlab-translator ": invalid ion channel definition " label))
    612                                       )))
     590                                   
     591                                    ((and acc pore gate)
     592                                     (let* ((i     (matlab-name (s+ 'i (cn acc))))
     593                                            (gmax  (car ((dis 'component-exports) sys (cid pore))))
     594                                            (pwrs  (map (lambda (n) (state-power sys n)) sts))
     595                                            (sptms (map (lambda (st pwr) `(pow ,st ,pwr)) sts pwrs))
     596                                            (gion  `(* ,gmax ,@sptms)))
     597                                      (list i #f gion)))
     598                                    (else (nemo:error 'nemo:matlab-translator ": invalid ion channel definition " label))
     599                                    )))
    613600                          ionchs))
    614 
     601               
    615602                  (i-bkts (bucket-partition (lambda (x y) (eq? (car x) (car y))) i-eqs))
    616 
     603                 
    617604                  (i-eqs  (fold (lambda (b ax)
    618605                                  (match b
     
    624611                                                 (sum1  (canonicalize-expr/MATLAB sum0)))
    625612                                            (cons (list i sum1) ax)))
    626                                           
     613                                         
    627614                                         ((i e gion)
    628615                                          (let* ((expr0  (rhsexpr/MATLAB (if e `(* ,gion (- v ,e)) gion)))
    629616                                                 (expr1  (canonicalize-expr/MATLAB expr0)))
    630                                               (cons (list i expr1) ax)))
     617                                            (cons (list i expr1) ax)))
    631618                                         
    632                                         (else ax)))
     619                                      (else ax)))
    633620                                (list) i-bkts))
    634621
    635622                  (state-eq-defs    (reverse (poset->state-eq-defs poset sys)))
    636 
     623                 
    637624                  (stcomp-eq-defs   (poset->stcomp-eq-defs poset sys))
    638 
     625                 
    639626                  (pool-eq-defs
    640627                   (map (lambda (ep)
     
    652639                            `(,(s+ ep-name)  ,rhs)))
    653640                        epools))
    654 
     641                 
    655642                  (rate-eq-defs (append pool-eq-defs state-eq-defs))
    656643                 
     
    660647                                                               (cons `(,st-name ,(first ax)) (second ax)))))
    661648                                                     (list 0 (list)) rate-eq-defs)))
    662                                     (second acc)))
     649                                      (second acc)))
    663650                  )
    664651
     
    690677
    691678             (if (not (null? exports)) (pp indent+ (global ,(sl\ ", " exports))))
     679             (if (not (null? exports)) (pp indent+ (global ,(sl\ ", " (map first const-defs)))))
    692680
    693681             (let* ((init-defs         (poset->state-init-defs poset sys)))
    694682;;                  (init-eq-defs      (poset->state-init-eq-defs poset sys)))
     683               
     684               (for-each (lambda (def)
     685                           (let ((n (first def)) (b (second def)))
     686                             (pp indent+ ,(expr->string/MATLAB b n)))) const-defs)
    695687
    696688               (for-each (lambda (def)
     
    721713             (pp indent ,nl (endfunction))
    722714             
     715             (pp indent ,nl)
     716
     717             (let* ((with      (inexact->exact (round (/ (abs (- max-v min-v)) step))))
     718                    (define-fn (make-define-fn table? min-v max-v with)))
     719               (for-each (lambda (fndef)
     720                           (if (not (member (car fndef) builtin-fns))
     721                               (apply define-fn (cons indent fndef))))
     722                         defuns))
     723             
    723724             
    724725             ))))))))
     726
Note: See TracChangeset for help on using the changeset viewer.