Changeset 29930 in project


Ignore:
Timestamp:
10/16/13 03:47:17 (8 years ago)
Author:
Ivan Raikov
Message:

nemo release 8.45

Location:
release/4/nemo
Files:
2 added
10 edited
1 copied

Legend:

Unmodified
Added
Removed
  • release/4/nemo/tags/8.45/nemo-nest.scm

    r29888 r29930  
    13991399
    14001400
    1401 (define (spike-handle method defaults vi)
     1401(define (spike-handle method defaults vi abstol)
    14021402  (case method
    14031403    ((cvode ida) 
    1404 #<<EOF
     1404#<#EOF
    14051405              {
    14061406                set_spiketime(Time::ms(tt));
     
    14111411                }
    14121412                network()->send(*this, se, lag);
    1413                 adjust_zero_crossings(B_.y, 1e-7);
     1413                adjust_zero_crossings(B_.y, #{(or abstol 1e-7)});
    14141414                continue;
    14151415              }
     
    14441444         i-eqs pool-ions perm-ions synapse-info
    14451445         event-external-eq-defs defaults imports
     1446         abstol reltol
    14461447         indent indent+)
    14471448
     
    14701471      ((leapfrog)
    14711472       (begin
    1472          (pp indent+ (,(leapfrog-solve vi (spike-handle method defaults vi))))
     1473         (pp indent+ (,(leapfrog-solve vi (spike-handle method defaults vi abstol))))
    14731474         ))
    14741475
    14751476      ((cvode)
    14761477       (begin
    1477          (pp indent+ (,(cvode-solve (spike-handle method defaults vi) )) ,nl)
     1478         (pp indent+ (,(cvode-solve (spike-handle method defaults vi abstol) )) ,nl)
    14781479         (output-solver-events method transient-event-defs event-external-eq-defs synapse-info imports (+ 6 indent+) )
    14791480         ))
     
    14811482      ((ida)
    14821483       (begin
    1483          (pp indent+ (,(ida-solve (spike-handle method defaults vi) )) ,nl)
     1484         (pp indent+ (,(ida-solve (spike-handle method defaults vi abstol) )) ,nl)
    14841485         (output-solver-events method transient-event-defs event-external-eq-defs synapse-info imports (+ 6 indent+) )
    14851486         ))
     
    14871488      ((gsl)
    14881489       (begin
    1489          (pp indent+ (,(gsl-solve vi (spike-handle method defaults vi))) ,nl)
     1490         (pp indent+ (,(gsl-solve vi (spike-handle method defaults vi abstol))) ,nl)
    14901491         (output-solver-events method transient-event-defs event-external-eq-defs synapse-info imports (+ 6 indent+) )
    14911492         ))
     
    15061507         const-defs asgn-eq-defs init-eq-defs rate-eq-defs
    15071508         reaction-eq-defs i-eqs pool-ions perm-ions
    1508          synapse-info defaults
     1509         synapse-info defaults abstol reltol maxstep
    15091510         indent indent+)
    15101511
     
    15721573         const-defs asgn-eq-defs init-eq-defs rate-eq-defs
    15731574         reaction-eq-defs i-eqs pool-ions perm-ions
    1574          synapse-info defaults
     1575         synapse-info defaults abstol reltol maxstep
    15751576         indent indent+)
    15761577
     
    17051706     '())
    17061707
    1707      (
    1708 #<<EOF
     1708     (,#<#EOF
    17091709    /* Sets the relative and absolute error tolerances of CVode  */
    1710     status = CVodeSStolerances (B_.sys_, 1e-7, 1e-7);
     1710    status = CVodeSStolerances (B_.sys_, #{(or abstol 1e-7)}, #{(or reltol 1e-7)});
    17111711    if (check_flag(&status, "CVodeSStolerances", 1)) throw CVodeSolverFailure (get_name(), status);
    17121712
     
    17201720
    17211721    /* Sets maximum step size. */
    1722     status = CVodeSetMaxStep (B_.sys_,10.0 * B_.step_);
     1722    status = CVodeSetMaxStep (B_.sys_,#{(or maxstep "B_.step_")});
    17231723    if (check_flag(&status, "CVodeSetMaxStep", 1)) throw CVodeSolverFailure (get_name(), status);
    17241724
     
    17521752         const-defs asgn-eq-defs init-eq-defs rate-eq-defs
    17531753         reaction-eq-defs i-eqs pool-ions perm-ions
    1754          synapse-info defaults
     1754         synapse-info defaults abstol reltol maxstep
    17551755         indent indent+)
    17561756
     
    18891889     '())
    18901890
    1891      (
    1892 #<<EOF
     1891     (,#<#EOF
    18931892    /* Sets the relative and absolute error tolerances of IDA  */
    1894     status = IDASStolerances (B_.sys_, 1e-7, 1e-7);
     1893    status = IDASStolerances (B_.sys_, #{(or abstol 1e-7)}, #{(or reltol 1e-7)});
    18951894    if (check_flag(&status, "IDASStolerances", 1)) throw IDASolverFailure (get_name(), status);
    18961895
     
    19001899
    19011900    /* Sets maximum step size. */
    1902     status = IDASetMaxStep (B_.sys_,10.0 * B_.step_);
     1901    status = IDASetMaxStep (B_.sys_,#{(or maxstep "B_.step_")});
    19031902    if (check_flag(&status, "IDASetMaxStep", 1)) throw IDASolverFailure (get_name(), status);
    19041903
     
    19361935         const-defs asgn-eq-defs init-eq-defs rate-eq-defs
    19371936         reaction-eq-defs i-eqs pool-ions perm-ions
    1938          synapse-info defaults
     1937         synapse-info defaults abstol reltol maxstep
    19391938         indent indent+)
    19401939
     
    20222021))
    20232022
    2024     (pp indent+ (
    2025 ,#<#EOF
     2023    (pp indent+ (,#<#EOF
    20262024    static const gsl_odeiv2_step_type* T1 = gsl_odeiv2_step_rk2;
    20272025    B_.N = #{N};
     
    20332031   
    20342032    if ( B_.c_ == 0 ) 
    2035       B_.c_ = gsl_odeiv2_control_standard_new (1e-7, 1e-7, 1.0, 0.0);
     2033      B_.c_ = gsl_odeiv2_control_standard_new (#{(or abstol 1e-7)}, #{(or reltol 1e-7)}, 1.0, 0.0);
    20362034    else
    2037       gsl_odeiv2_control_init(B_.c_, 1e-7, 1e-7, 1.0, 0.0);
     2035      gsl_odeiv2_control_init(B_.c_, #{(or abstol 1e-7)}, #{(or reltol 1e-7)}, 1.0, 0.0);
    20382036   
    20392037    if ( B_.e_ == 0 ) 
     
    27692767  (define (cn x)   (first x))
    27702768
    2771   (let-optionals rest ((dirname ".") (method #f))
     2769  (let-optionals rest ((dirname ".")  (method #f) (abstol #f) (reltol #f) (maxstep #f))
    27722770
    27732771    (let ((method (or method 'gsl)))
     
    30703068               const-defs asgn-eq-defs init-eq-defs rate-eq-defs
    30713069               reaction-eq-defs i-eqs pool-ions perm-ions
    3072                synapse-info defaults
     3070               synapse-info defaults abstol reltol maxstep
    30733071               indent indent+)
    30743072              (pp indent ,nl)
     
    31183116               pool-ions perm-ions synapse-info
    31193117               event-external-eq-defs
    3120                defaults imports indent indent+)
     3118               defaults imports abstol reltol
     3119               indent indent+)
    31213120              (pp indent ,nl)
    31223121              ))
  • release/4/nemo/tags/8.45/nemo-version.scm

    r29888 r29930  
    11
    2 (define nemo-version "8.44")
     2(define nemo-version "8.45")
  • release/4/nemo/tags/8.45/nemo.meta

    r29139 r29930  
    66
    77 (files "nemo.meta" "extensions" "expr.grm" "nemo.setup"
    8         "nemo-core.scm" "nemo-gate-complex.scm" "nemo-currents.scm" "nemo-synapse.scm" "nemo-constraints.scm" "nemo-utils.scm" "nemo-units.scm"
     8        "nemo-core.scm" "nemo-gate-complex.scm" "nemo-currents.scm" "nemo-synapse.scm" "nemo-constraints.scm" "nemo-utils.scm" "nemo-units.scm" "nemo-fetch.scm"
    99        "nemo-macros.scm" "nemo.scm"
    1010        "stx-engine.scm" "SXML.scm" "SXML-to-XML.scm" "expr-parser.scm"
     
    2525        datatype vector-lib digraph graph-bfs graph-cycles
    2626        unitconv mathh strictly-pretty (varsubst 1.3) (lalr 2.4.2)
    27         ersatz getopt-long)
     27        ersatz uri-generic getopt-long)
    2828
    2929 (author "Ivan Raikov")
  • release/4/nemo/tags/8.45/nemo.scm

    r29807 r29930  
    2323
    2424(require-extension nemo-core nemo-macros nemo-hh nemo-vclamp nemo-iclamp
    25                    nemo-utils nemo-units)
     25                   nemo-utils nemo-units nemo-fetch)
    2626(require-library iexpr ersatz-lib)
    2727(require-extension datatype matchable lalr-driver
     
    178178             (value (required METHOD)
    179179                    (transformer ,string->symbol)))
     180
     181            (nest-abstol
     182             "specify NEST absolute tolerance (default is 1e-7)"
     183             (value (required NUMBER)
     184                    (transformer ,string->number)))
     185
     186            (nest-reltol
     187             "specify NEST relative tolerance (default is 1e-7)"
     188             (value (required NUMBER)
     189                    (transformer ,string->number)))
     190
     191            (nest-maxstep
     192             "specify NEST maximum step size (default is provided by the NEST interpreter)"
     193             (value (required NUMBER)
     194                    (transformer ,string->number)))
    180195            )
    181196          `())
     
    392407  (if nemo-nest?
    393408      (lambda (options model)
    394         (nemo:nest-translator model (lookup-def 'dirname options) (lookup-def 'method options)))
     409        (nemo:nest-translator model
     410                              (lookup-def 'dirname options)
     411                              (lookup-def 'method options)
     412                              (lookup-def 'abstol options)
     413                              (lookup-def 'reltol options)
     414                              (lookup-def 'maxstep options) ))
    395415      (lambda (options model)
    396416        (void))))
     
    14251445
    14261446   (sxml:match 'nmlb:Component
     1447
    14271448               (lambda (node bindings root env)
     1449
     1450                 (define (read-xml-string s)
     1451                          (call-with-input-string s
     1452                            (lambda (port)
     1453                              (ssax:xml->sxml port
     1454                                              '((nmlb . "http://www.nineml.org/Biophysics")))
     1455                              )))
     1456
    14281457                 (let ((name       (sxml:attr node 'name))
    14291458                       (type       (sxml:attr node 'type))
    14301459                       (definition (sxml:attr node 'definition))
     1460                       (definition-uri (let ((link (or (sxml:kidn 'nmlb:link node)
     1461                                                       (sxml:kidn 'nmlb:url node))))
     1462                                         (and link (uri-reference link))))
    14311463                       (decls      (sxml:kids node))
    14321464                       (properties (map cdr (sxml:kidsn 'nmlb:properties node)))
    14331465                       )
    1434                    (let ((parameters (stx:apply-templates
     1466
     1467                   (let (
     1468                         (parameters (stx:apply-templates
    14351469                                      (concatenate properties)
    14361470                                      nineml-ss
    1437                                       root env)))
    1438 
    1439                      (if definition
    1440                          `(ncml:component (@ (name ,name) (functor-name ,definition) )
    1441                                           . ,parameters)
    1442                          (let ((decls1 (stx:apply-templates decls nineml-ss root env)))
    1443                            (cond ((and name type)
    1444                                   `(ncml:component (@ (name ,name) (type ,type) )
    1445                                                    . ,(append parameters decls1)))
    1446                                  (type
    1447                                   `(ncml:component (@ (type ,type) )
    1448                                                    . ,(append parameters decls1)))
    1449                                  (else
    1450                                   `(ncml:component . ,(append parameters decls1)))))
    1451                          ))
    1452                    ))
    1453                )
     1471                                      root env))
     1472                         )
     1473
     1474                     (cond (definition-uri
     1475                             (let* (
     1476                                    (definition-str (nemo:fetch definition-uri))
     1477                                    (definition-sxml (read-xml-string definition-str))
     1478                                    (definition (stx:apply-templates definition-sxml nineml-ss root env))
     1479                                    )
     1480                               (case (car definition)
     1481                                 ((ncml:functor)
     1482                                  (let* (
     1483                                         (definition-attrs (alist-ref '@ definition))
     1484                                         (definition-name (alist-ref 'name definition-attrs))
     1485                                         )
     1486                                    (env (cons `(,definition-name . ,definition) (env)))
     1487                                    `(ncml:component (@ (name ,name) (functor-name ,definition-name) )
     1488                                                     . ,parameters))
     1489                                  )
     1490                                 (else (error 'nineml->model-decls
     1491                                              "unable to find component class in definition uri "
     1492                                              definition-uri))
     1493                                 ))
     1494                             )
     1495                            (definition
     1496                              `(ncml:component (@ (name ,name) (functor-name ,definition) )
     1497                                               . ,parameters))
     1498                            (else
     1499                             (let ((decls1 (stx:apply-templates decls nineml-ss root env)))
     1500                               (cond ((and name type)
     1501                                      `(ncml:component (@ (name ,name) (type ,type) )
     1502                                                       . ,(append parameters decls1)))
     1503                                     (type
     1504                                      `(ncml:component (@ (type ,type) )
     1505                                                       . ,(append parameters decls1)))
     1506                                     (else
     1507                                      `(ncml:component . ,(append parameters decls1)))))
     1508                             ))
     1509                     ))
     1510                 ))
    14541511               
    14551512
     
    16481705                          (sxml:kids nmlb:model)))
    16491706
    1650          (ncml-decls     (stx:apply-templates (sxml:kids nmlb:model) nineml-ss nmlb-decls (list)))
    1651          (model-decls    (ncml->declarations ncml-decls parse-expr))
     1707         (ncml-env       (make-parameter '()))
     1708         (ncml-decls     (stx:apply-templates (sxml:kids nmlb:model) nineml-ss nmlb-decls ncml-env))
     1709         (model-decls    (ncml->declarations
     1710                          (append (delete-duplicates (ncml-env) (lambda (x y) (equal? (car x) (car y)))) ncml-decls)
     1711                          parse-expr))
    16521712         )
    16531713    (list model-name model-decls '())))
     
    23742434            (iclamp-hoc     (opt 'iclamp-hoc))
    23752435            (iclamp-nest    (opt 'iclamp-nest))
    2376                  
     2436
    23772437            (nmodl-method
    23782438             (let ((method  (or ($ (opt 'nmodl-method) ) (defopt 'nmodl-method))))
     
    23962456                      ((cvode ida gsl leapfrog #f) method)
    23972457                      (else (error "unknown NEST method " method))))))
    2398                                    
     2458                       
     2459            (nest-abstol
     2460             (and nemo-nest?
     2461                  (opt 'nest-abstol)))
     2462           
     2463            (nest-reltol
     2464             (and nemo-nest?
     2465                  (opt 'nest-reltol)))
     2466           
     2467            (nest-maxstep
     2468             (and nemo-nest?
     2469                  (opt 'nest-maxstep)))
     2470           
    23992471            (parse-expr  (case in-format
    24002472                           ((sxml xml nineml)    identity)
     
    24692541       (if (and nemo-nest? nest)
    24702542           (model->nest `((dirname . ,(or (and (string? nest) nest) dirname))
    2471                           (method    . ,nest-method))
     2543                          (method    . ,nest-method)
     2544                          (abstol    . ,nest-abstol)
     2545                          (reltol    . ,nest-reltol)
     2546                          (maxstep   . ,nest-maxstep)
     2547                          )
    24722548                        sys))
    24732549       
     
    26282704                    (printf "~A: ~A~%" (nemo:quantity-name (car x)) (cdr x)))
    26292705                  (nemo:default-units))))
     2706
     2707  (if (opt 'debug)
     2708      (nemo:fetch-verbose #t))
    26302709     
    26312710  (if (null? operands)
  • release/4/nemo/tags/8.45/nemo.setup

    r29139 r29930  
    77
    88(use make)
     9
     10
     11(make (
     12       ((dynld-name "nemo-fetch") ("nemo-fetch.scm")
     13        (compile -O -d2 -S -s nemo-fetch.scm -j nemo-fetch))
     14
     15       ((dynld-name "nemo-fetch.import") ("nemo-fetch.import.scm")
     16        (compile -O2 -s nemo-fetch.import.scm))
     17       )
     18  (list (dynld-name "nemo-fetch")
     19        (dynld-name "nemo-fetch.import"))
     20  )
     21
     22
     23(install-extension
     24
     25  ; Name of your extension:
     26  'nemo-fetch
     27
     28  ; Files to install for your extension:
     29  `(,(dynld-name "nemo-fetch") ,(dynld-name "nemo-fetch.import"))
     30
     31  ; Assoc list with properties for your extension:
     32  `((version ,nemo-version)))
    933
    1034
  • release/4/nemo/trunk/nemo-nest.scm

    r29888 r29930  
    13991399
    14001400
    1401 (define (spike-handle method defaults vi)
     1401(define (spike-handle method defaults vi abstol)
    14021402  (case method
    14031403    ((cvode ida) 
    1404 #<<EOF
     1404#<#EOF
    14051405              {
    14061406                set_spiketime(Time::ms(tt));
     
    14111411                }
    14121412                network()->send(*this, se, lag);
    1413                 adjust_zero_crossings(B_.y, 1e-7);
     1413                adjust_zero_crossings(B_.y, #{(or abstol 1e-7)});
    14141414                continue;
    14151415              }
     
    14441444         i-eqs pool-ions perm-ions synapse-info
    14451445         event-external-eq-defs defaults imports
     1446         abstol reltol
    14461447         indent indent+)
    14471448
     
    14701471      ((leapfrog)
    14711472       (begin
    1472          (pp indent+ (,(leapfrog-solve vi (spike-handle method defaults vi))))
     1473         (pp indent+ (,(leapfrog-solve vi (spike-handle method defaults vi abstol))))
    14731474         ))
    14741475
    14751476      ((cvode)
    14761477       (begin
    1477          (pp indent+ (,(cvode-solve (spike-handle method defaults vi) )) ,nl)
     1478         (pp indent+ (,(cvode-solve (spike-handle method defaults vi abstol) )) ,nl)
    14781479         (output-solver-events method transient-event-defs event-external-eq-defs synapse-info imports (+ 6 indent+) )
    14791480         ))
     
    14811482      ((ida)
    14821483       (begin
    1483          (pp indent+ (,(ida-solve (spike-handle method defaults vi) )) ,nl)
     1484         (pp indent+ (,(ida-solve (spike-handle method defaults vi abstol) )) ,nl)
    14841485         (output-solver-events method transient-event-defs event-external-eq-defs synapse-info imports (+ 6 indent+) )
    14851486         ))
     
    14871488      ((gsl)
    14881489       (begin
    1489          (pp indent+ (,(gsl-solve vi (spike-handle method defaults vi))) ,nl)
     1490         (pp indent+ (,(gsl-solve vi (spike-handle method defaults vi abstol))) ,nl)
    14901491         (output-solver-events method transient-event-defs event-external-eq-defs synapse-info imports (+ 6 indent+) )
    14911492         ))
     
    15061507         const-defs asgn-eq-defs init-eq-defs rate-eq-defs
    15071508         reaction-eq-defs i-eqs pool-ions perm-ions
    1508          synapse-info defaults
     1509         synapse-info defaults abstol reltol maxstep
    15091510         indent indent+)
    15101511
     
    15721573         const-defs asgn-eq-defs init-eq-defs rate-eq-defs
    15731574         reaction-eq-defs i-eqs pool-ions perm-ions
    1574          synapse-info defaults
     1575         synapse-info defaults abstol reltol maxstep
    15751576         indent indent+)
    15761577
     
    17051706     '())
    17061707
    1707      (
    1708 #<<EOF
     1708     (,#<#EOF
    17091709    /* Sets the relative and absolute error tolerances of CVode  */
    1710     status = CVodeSStolerances (B_.sys_, 1e-7, 1e-7);
     1710    status = CVodeSStolerances (B_.sys_, #{(or abstol 1e-7)}, #{(or reltol 1e-7)});
    17111711    if (check_flag(&status, "CVodeSStolerances", 1)) throw CVodeSolverFailure (get_name(), status);
    17121712
     
    17201720
    17211721    /* Sets maximum step size. */
    1722     status = CVodeSetMaxStep (B_.sys_,10.0 * B_.step_);
     1722    status = CVodeSetMaxStep (B_.sys_,#{(or maxstep "B_.step_")});
    17231723    if (check_flag(&status, "CVodeSetMaxStep", 1)) throw CVodeSolverFailure (get_name(), status);
    17241724
     
    17521752         const-defs asgn-eq-defs init-eq-defs rate-eq-defs
    17531753         reaction-eq-defs i-eqs pool-ions perm-ions
    1754          synapse-info defaults
     1754         synapse-info defaults abstol reltol maxstep
    17551755         indent indent+)
    17561756
     
    18891889     '())
    18901890
    1891      (
    1892 #<<EOF
     1891     (,#<#EOF
    18931892    /* Sets the relative and absolute error tolerances of IDA  */
    1894     status = IDASStolerances (B_.sys_, 1e-7, 1e-7);
     1893    status = IDASStolerances (B_.sys_, #{(or abstol 1e-7)}, #{(or reltol 1e-7)});
    18951894    if (check_flag(&status, "IDASStolerances", 1)) throw IDASolverFailure (get_name(), status);
    18961895
     
    19001899
    19011900    /* Sets maximum step size. */
    1902     status = IDASetMaxStep (B_.sys_,10.0 * B_.step_);
     1901    status = IDASetMaxStep (B_.sys_,#{(or maxstep "B_.step_")});
    19031902    if (check_flag(&status, "IDASetMaxStep", 1)) throw IDASolverFailure (get_name(), status);
    19041903
     
    19361935         const-defs asgn-eq-defs init-eq-defs rate-eq-defs
    19371936         reaction-eq-defs i-eqs pool-ions perm-ions
    1938          synapse-info defaults
     1937         synapse-info defaults abstol reltol maxstep
    19391938         indent indent+)
    19401939
     
    20222021))
    20232022
    2024     (pp indent+ (
    2025 ,#<#EOF
     2023    (pp indent+ (,#<#EOF
    20262024    static const gsl_odeiv2_step_type* T1 = gsl_odeiv2_step_rk2;
    20272025    B_.N = #{N};
     
    20332031   
    20342032    if ( B_.c_ == 0 ) 
    2035       B_.c_ = gsl_odeiv2_control_standard_new (1e-7, 1e-7, 1.0, 0.0);
     2033      B_.c_ = gsl_odeiv2_control_standard_new (#{(or abstol 1e-7)}, #{(or reltol 1e-7)}, 1.0, 0.0);
    20362034    else
    2037       gsl_odeiv2_control_init(B_.c_, 1e-7, 1e-7, 1.0, 0.0);
     2035      gsl_odeiv2_control_init(B_.c_, #{(or abstol 1e-7)}, #{(or reltol 1e-7)}, 1.0, 0.0);
    20382036   
    20392037    if ( B_.e_ == 0 ) 
     
    27692767  (define (cn x)   (first x))
    27702768
    2771   (let-optionals rest ((dirname ".") (method #f))
     2769  (let-optionals rest ((dirname ".")  (method #f) (abstol #f) (reltol #f) (maxstep #f))
    27722770
    27732771    (let ((method (or method 'gsl)))
     
    30703068               const-defs asgn-eq-defs init-eq-defs rate-eq-defs
    30713069               reaction-eq-defs i-eqs pool-ions perm-ions
    3072                synapse-info defaults
     3070               synapse-info defaults abstol reltol maxstep
    30733071               indent indent+)
    30743072              (pp indent ,nl)
     
    31183116               pool-ions perm-ions synapse-info
    31193117               event-external-eq-defs
    3120                defaults imports indent indent+)
     3118               defaults imports abstol reltol
     3119               indent indent+)
    31213120              (pp indent ,nl)
    31223121              ))
  • release/4/nemo/trunk/nemo-version.scm

    r29888 r29930  
    11
    2 (define nemo-version "8.44")
     2(define nemo-version "8.45")
  • release/4/nemo/trunk/nemo.meta

    r29139 r29930  
    66
    77 (files "nemo.meta" "extensions" "expr.grm" "nemo.setup"
    8         "nemo-core.scm" "nemo-gate-complex.scm" "nemo-currents.scm" "nemo-synapse.scm" "nemo-constraints.scm" "nemo-utils.scm" "nemo-units.scm"
     8        "nemo-core.scm" "nemo-gate-complex.scm" "nemo-currents.scm" "nemo-synapse.scm" "nemo-constraints.scm" "nemo-utils.scm" "nemo-units.scm" "nemo-fetch.scm"
    99        "nemo-macros.scm" "nemo.scm"
    1010        "stx-engine.scm" "SXML.scm" "SXML-to-XML.scm" "expr-parser.scm"
     
    2525        datatype vector-lib digraph graph-bfs graph-cycles
    2626        unitconv mathh strictly-pretty (varsubst 1.3) (lalr 2.4.2)
    27         ersatz getopt-long)
     27        ersatz uri-generic getopt-long)
    2828
    2929 (author "Ivan Raikov")
  • release/4/nemo/trunk/nemo.scm

    r29807 r29930  
    2323
    2424(require-extension nemo-core nemo-macros nemo-hh nemo-vclamp nemo-iclamp
    25                    nemo-utils nemo-units)
     25                   nemo-utils nemo-units nemo-fetch)
    2626(require-library iexpr ersatz-lib)
    2727(require-extension datatype matchable lalr-driver
     
    178178             (value (required METHOD)
    179179                    (transformer ,string->symbol)))
     180
     181            (nest-abstol
     182             "specify NEST absolute tolerance (default is 1e-7)"
     183             (value (required NUMBER)
     184                    (transformer ,string->number)))
     185
     186            (nest-reltol
     187             "specify NEST relative tolerance (default is 1e-7)"
     188             (value (required NUMBER)
     189                    (transformer ,string->number)))
     190
     191            (nest-maxstep
     192             "specify NEST maximum step size (default is provided by the NEST interpreter)"
     193             (value (required NUMBER)
     194                    (transformer ,string->number)))
    180195            )
    181196          `())
     
    392407  (if nemo-nest?
    393408      (lambda (options model)
    394         (nemo:nest-translator model (lookup-def 'dirname options) (lookup-def 'method options)))
     409        (nemo:nest-translator model
     410                              (lookup-def 'dirname options)
     411                              (lookup-def 'method options)
     412                              (lookup-def 'abstol options)
     413                              (lookup-def 'reltol options)
     414                              (lookup-def 'maxstep options) ))
    395415      (lambda (options model)
    396416        (void))))
     
    14251445
    14261446   (sxml:match 'nmlb:Component
     1447
    14271448               (lambda (node bindings root env)
     1449
     1450                 (define (read-xml-string s)
     1451                          (call-with-input-string s
     1452                            (lambda (port)
     1453                              (ssax:xml->sxml port
     1454                                              '((nmlb . "http://www.nineml.org/Biophysics")))
     1455                              )))
     1456
    14281457                 (let ((name       (sxml:attr node 'name))
    14291458                       (type       (sxml:attr node 'type))
    14301459                       (definition (sxml:attr node 'definition))
     1460                       (definition-uri (let ((link (or (sxml:kidn 'nmlb:link node)
     1461                                                       (sxml:kidn 'nmlb:url node))))
     1462                                         (and link (uri-reference link))))
    14311463                       (decls      (sxml:kids node))
    14321464                       (properties (map cdr (sxml:kidsn 'nmlb:properties node)))
    14331465                       )
    1434                    (let ((parameters (stx:apply-templates
     1466
     1467                   (let (
     1468                         (parameters (stx:apply-templates
    14351469                                      (concatenate properties)
    14361470                                      nineml-ss
    1437                                       root env)))
    1438 
    1439                      (if definition
    1440                          `(ncml:component (@ (name ,name) (functor-name ,definition) )
    1441                                           . ,parameters)
    1442                          (let ((decls1 (stx:apply-templates decls nineml-ss root env)))
    1443                            (cond ((and name type)
    1444                                   `(ncml:component (@ (name ,name) (type ,type) )
    1445                                                    . ,(append parameters decls1)))
    1446                                  (type
    1447                                   `(ncml:component (@ (type ,type) )
    1448                                                    . ,(append parameters decls1)))
    1449                                  (else
    1450                                   `(ncml:component . ,(append parameters decls1)))))
    1451                          ))
    1452                    ))
    1453                )
     1471                                      root env))
     1472                         )
     1473
     1474                     (cond (definition-uri
     1475                             (let* (
     1476                                    (definition-str (nemo:fetch definition-uri))
     1477                                    (definition-sxml (read-xml-string definition-str))
     1478                                    (definition (stx:apply-templates definition-sxml nineml-ss root env))
     1479                                    )
     1480                               (case (car definition)
     1481                                 ((ncml:functor)
     1482                                  (let* (
     1483                                         (definition-attrs (alist-ref '@ definition))
     1484                                         (definition-name (alist-ref 'name definition-attrs))
     1485                                         )
     1486                                    (env (cons `(,definition-name . ,definition) (env)))
     1487                                    `(ncml:component (@ (name ,name) (functor-name ,definition-name) )
     1488                                                     . ,parameters))
     1489                                  )
     1490                                 (else (error 'nineml->model-decls
     1491                                              "unable to find component class in definition uri "
     1492                                              definition-uri))
     1493                                 ))
     1494                             )
     1495                            (definition
     1496                              `(ncml:component (@ (name ,name) (functor-name ,definition) )
     1497                                               . ,parameters))
     1498                            (else
     1499                             (let ((decls1 (stx:apply-templates decls nineml-ss root env)))
     1500                               (cond ((and name type)
     1501                                      `(ncml:component (@ (name ,name) (type ,type) )
     1502                                                       . ,(append parameters decls1)))
     1503                                     (type
     1504                                      `(ncml:component (@ (type ,type) )
     1505                                                       . ,(append parameters decls1)))
     1506                                     (else
     1507                                      `(ncml:component . ,(append parameters decls1)))))
     1508                             ))
     1509                     ))
     1510                 ))
    14541511               
    14551512
     
    16481705                          (sxml:kids nmlb:model)))
    16491706
    1650          (ncml-decls     (stx:apply-templates (sxml:kids nmlb:model) nineml-ss nmlb-decls (list)))
    1651          (model-decls    (ncml->declarations ncml-decls parse-expr))
     1707         (ncml-env       (make-parameter '()))
     1708         (ncml-decls     (stx:apply-templates (sxml:kids nmlb:model) nineml-ss nmlb-decls ncml-env))
     1709         (model-decls    (ncml->declarations
     1710                          (append (delete-duplicates (ncml-env) (lambda (x y) (equal? (car x) (car y)))) ncml-decls)
     1711                          parse-expr))
    16521712         )
    16531713    (list model-name model-decls '())))
     
    23742434            (iclamp-hoc     (opt 'iclamp-hoc))
    23752435            (iclamp-nest    (opt 'iclamp-nest))
    2376                  
     2436
    23772437            (nmodl-method
    23782438             (let ((method  (or ($ (opt 'nmodl-method) ) (defopt 'nmodl-method))))
     
    23962456                      ((cvode ida gsl leapfrog #f) method)
    23972457                      (else (error "unknown NEST method " method))))))
    2398                                    
     2458                       
     2459            (nest-abstol
     2460             (and nemo-nest?
     2461                  (opt 'nest-abstol)))
     2462           
     2463            (nest-reltol
     2464             (and nemo-nest?
     2465                  (opt 'nest-reltol)))
     2466           
     2467            (nest-maxstep
     2468             (and nemo-nest?
     2469                  (opt 'nest-maxstep)))
     2470           
    23992471            (parse-expr  (case in-format
    24002472                           ((sxml xml nineml)    identity)
     
    24692541       (if (and nemo-nest? nest)
    24702542           (model->nest `((dirname . ,(or (and (string? nest) nest) dirname))
    2471                           (method    . ,nest-method))
     2543                          (method    . ,nest-method)
     2544                          (abstol    . ,nest-abstol)
     2545                          (reltol    . ,nest-reltol)
     2546                          (maxstep   . ,nest-maxstep)
     2547                          )
    24722548                        sys))
    24732549       
     
    26282704                    (printf "~A: ~A~%" (nemo:quantity-name (car x)) (cdr x)))
    26292705                  (nemo:default-units))))
     2706
     2707  (if (opt 'debug)
     2708      (nemo:fetch-verbose #t))
    26302709     
    26312710  (if (null? operands)
  • release/4/nemo/trunk/nemo.setup

    r29139 r29930  
    77
    88(use make)
     9
     10
     11(make (
     12       ((dynld-name "nemo-fetch") ("nemo-fetch.scm")
     13        (compile -O -d2 -S -s nemo-fetch.scm -j nemo-fetch))
     14
     15       ((dynld-name "nemo-fetch.import") ("nemo-fetch.import.scm")
     16        (compile -O2 -s nemo-fetch.import.scm))
     17       )
     18  (list (dynld-name "nemo-fetch")
     19        (dynld-name "nemo-fetch.import"))
     20  )
     21
     22
     23(install-extension
     24
     25  ; Name of your extension:
     26  'nemo-fetch
     27
     28  ; Files to install for your extension:
     29  `(,(dynld-name "nemo-fetch") ,(dynld-name "nemo-fetch.import"))
     30
     31  ; Assoc list with properties for your extension:
     32  `((version ,nemo-version)))
    933
    1034
Note: See TracChangeset for help on using the changeset viewer.