Changeset 12353 in project


Ignore:
Timestamp:
11/04/08 09:21:07 (13 years ago)
Author:
Ivan Raikov
Message:

Added skeleton for matlab code generator.

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

Legend:

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

    r12283 r12353  
    3434(require-extension datatype)
    3535
     36(define-extension nemo-nmodl)
     37
     38(declare
     39 (lambda-lift)
     40 (export  nemo:nmodl-translator))
     41
     42(register-feature! 'nemo-nmodl)
     43
    3644(define (lookup-def k lst . rest)
    3745  (let-optionals rest ((default #f))
     
    113121
    114122(define ifthen/NMODL  (doc:ifthen 0 (doc:text "if") (doc:text "") (doc:text "else")))
    115 (define letblk/NMODL  (doc:letblk 2 (doc:empty) (doc:break) (doc:empty)))
     123(define letblk/NMODL  (doc:letblk 2 (doc:break) (doc:break) (doc:empty)))
    116124(define group/NMODL   (doc:block 2 (doc:text "(") (doc:text ")")))
    117125(define block/NMODL   (doc:block 2 (doc:text "{") (doc:text "}")))
  • release/3/nemo/trunk/nemo.scm

    r12239 r12353  
    2424(require-extension args)
    2525(require-extension nemo-macros)
    26 (require-extension nemo-nmodl)
    2726(require-extension nemo-hh)
    2827
     28(define nemo-nmodl? (extension-information 'nemo-nmodl)) 
     29(define nemo-matlab? (extension-information 'nemo-matlab))
     30
     31(if nemo-nmodl? (use nemo-nmodl))
     32(if nemo-matlab? (use nemo-matlab))
    2933
    3034(define (lookup-def k lst . rest)
     
    5559
    5660(define ssax:warn warn)
    57 
    5861
    5962(define opts
     
    6669    ,(args:make-option (sxml)       (optional: "FILE")   
    6770                       (s+ "write SXML output to file (default: <model-name>.sxml)"))
    68     ,(args:make-option (nmodl)      (optional: "FILE")   
    69                        (s+ "write NMODL output to file (default: <model-name>.mod)"))
    70     ,(args:make-option (nmodl-kinetic)       (optional: "STATES")
    71                        (s+ "use NMODL kinetic equations for the given state complexes (or for all state complexes)"))
    72     ,(args:make-option (nmodl-method)       (required: "METHOD")
    73                        (s+ "specify NMODL integration method (cnexp, derivimplicit)")
    74                        (string->symbol arg))
     71    ,@(if nemo-matlab?
     72          (list (args:make-option (matlab)      (optional: "FILE")   
     73                                  (s+ "write MATLAB output to file (default: <model-name>.m)")))
     74          `())
     75    ,@(if nemo-nmodl?
     76          (list
     77           (args:make-option (nmodl)      (optional: "FILE")   
     78                             (s+ "write NMODL output to file (default: <model-name>.mod)"))
     79           (args:make-option (nmodl-kinetic)       (optional: "STATES")
     80                             (s+ "use NMODL kinetic equations for the given state complexes "
     81                                 "(or for all state complexes)"))
     82           (args:make-option (nmodl-method)       (required: "METHOD")
     83                             (s+ "specify NMODL integration method (cnexp, derivimplicit)")
     84                             (string->symbol arg)))
     85          `())
    7586    ,(args:make-option (t)       #:none
    7687                       (s+ "use interpolation tables in generated code, if possible")
     
    173184         (else (error 'sexp->model "unknown model format"))))
    174185
    175 
    176 (define (model->nmodl options model)
    177   (nemo:nmodl-translator model (lookup-def 'method options) (lookup-def 'table options)
    178                          -150 150 1 #f
    179                          (lookup-def 'kinetic options) ))
     186(define model->nmodl
     187  (if nemo-nmodl?
     188      (lambda (options model)
     189        (nemo:nmodl-translator model (lookup-def 'method options) (lookup-def 'table options)
     190                               -150 150 1 #f
     191                               (lookup-def 'kinetic options) ))
     192      (lambda (options model)
     193        (void))))
     194
     195(define model->matlab
     196  (if nemo-matlab?
     197      (lambda (options model)
     198        (nemo:matlab-translator model (lookup-def 'method options) (lookup-def 'table options)
     199                                -150 150 1 #f
     200                                (lookup-def 'kinetic options) ))
     201      (lambda (options model)
     202        (void))))
    180203
    181204
     
    601624                                                    (s+  (pathname-strip-extension operand) ".mod"))))
    602625                             (assoc 'nmodl options)))
     626                (mat-fname  ((lambda (x) (and x (if (and (cdr x) (string? (cdr x)))
     627                                                    (s+ (pathname-strip-extension (cdr x)) ".m")
     628                                                    (s+  (pathname-strip-extension operand) ".m"))))
     629                             (assoc 'matlab options)))
    603630                                 
    604631                (nmodl-method
     
    625652                                                             'all)))))
    626653                                              model))))
     654           (if mat-fname
     655               (with-output-to-file
     656                   mat-fname  (lambda ()
     657                                (model->matlab `(;(method  . ,matlab-method)
     658                                                 (table   . ,(assoc 't options))
     659                                                 (kinetic
     660                                                  ,(let ((opt (assoc 'matlab-kinetic options)))
     661                                                     (and opt
     662                                                          (if (string? (cdr opt))
     663                                                              (map string->symbol (string-split (cdr opt) ","))
     664                                                              'all)))))
     665                                              model))))
    627666           ))
    628667       operands)))
  • release/3/nemo/trunk/nemo.setup

    r12276 r12353  
    5252  `((version 1.11)
    5353    ,@(if has-exports? `((exports "nemo-nmodl.exports")) (list)) ))
     54
     55(if (file-exists? "nemo-matlab.scm")
     56    (compile -O -d2 -s -extension -o ,(dynld-name "nemo-matlab")
     57             ,@(if has-exports? '(-check-imports -emit-exports nemo-matlab.exports) '())
     58             nemo-matlab.scm))
     59
     60(if (file-exists? "nemo-matlab.scm")
     61    (install-extension
     62     
     63     ;; Name of your extension:
     64     'nemo-matlab
     65     
     66     ;; Files to install for your extension:
     67     `(,(dynld-name "nemo-matlab") 
     68       ,@(if has-exports? '("nemo-matlab.exports") (list)) )
     69     
     70     ;; Assoc list with properties for your extension:
     71     `((version 1.11)
     72       ,@(if has-exports? `((exports "nemo-matlab.exports")) (list)) )))
    5473
    5574
Note: See TracChangeset for help on using the changeset viewer.