Changeset 29940 in project


Ignore:
Timestamp:
10/22/13 09:42:01 (8 years ago)
Author:
Ivan Raikov
Message:

nemo: adding option --nest-ss-method to allow the selection of steady state solving method

Location:
release/4/nemo/trunk
Files:
2 edited

Legend:

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

    r29934 r29940  
    510510)
    511511
    512 (define (fsolve-prelude method)
    513   (case method
    514     ((cvode ida)
     512(define (fsolve-prelude ss-method)
     513  (case ss-method
     514    ((kinsol)
    515515#<<EOF
    516516
     
    665665
    666666(define (output-header
    667          sysname method state-index-map steady-state-index-map
     667         sysname method ss-method state-index-map steady-state-index-map
    668668         defaults external-eq-defs const-defs asgn-eq-defs init-eq-defs rate-eq-defs
    669669         reaction-eq-defs i-eqs pool-ions perm-ions
     
    694694           ("#include <cvode/cvode.h>             /* prototypes for CVODE fcts., consts. */")
    695695           ("#include <cvode/cvode_diag.h>        /* prototype for CVDiag */")
    696            ("#include <kinsol/kinsol.h>           /* prototypes for KINSOL fcts. */")
    697            ("#include <kinsol/kinsol_dense.h>     /* prototype for KINDense*/")
    698696           ("#define Ith(v,i)    NV_Ith_S(v,i)    /* Ith component in a vector */")
    699697           ))
     
    704702           ("#include <ida/ida.h>                 /* prototypes for IDA fcts., consts. */")
    705703           ("#include <ida/ida_dense.h>")
    706            ("#include <kinsol/kinsol.h>           /* prototypes for KINSOL fcts. */")
    707            ("#include <kinsol/kinsol_dense.h>     /* prototype for KINDense */")
    708704           ("#define Ith(v,i)    NV_Ith_S(v,i)    /* Ith component in a vector */")
    709705           ))
     
    714710           ("#include <gsl/gsl_sf_exp.h>")
    715711           ("#include <gsl/gsl_odeiv2.h>")
    716            ("#include <gsl/gsl_vector.h>")
    717            ("#include <gsl/gsl_multiroots.h>")
    718712           ("#define Ith(v,i)    (v[i])")
    719713           ))
    720714      )
    721715
     716    (pp indent ,nl)
     717
     718    (case ss-method
     719      ((kinsol)
     720       (pp indent
     721           ("#include <sundials/sundials_types.h> /* definition of type realtype */")
     722           ("#include <nvector/nvector_serial.h>  /* serial N_Vector types, fcts., macros */")
     723           ("#include <kinsol/kinsol.h>           /* prototypes for KINSOL fcts. */")
     724           ("#include <kinsol/kinsol_dense.h>     /* prototype for KINDense */")))
     725      (else
     726       (pp indent
     727           ("#include <gsl/gsl_vector.h>")
     728           ("#include <gsl/gsl_multiroots.h>")))
     729           
     730      )
     731       
    722732    (pp indent ,nl)
    723733
     
    766776
    767777    (if (not (null? steady-state-index-map))
    768         (case method
    769           ((cvode ida)
     778        (case ss-method
     779          ((kinsol)
    770780           (pp indent (extern "\"C\""
    771781                              int ,(sprintf "~A_steadystate" sysname)
     
    860870 
    861871  (if (not (null? steady-state-index-map))
    862       (case method
    863         ((cvode ida)
     872      (case ss-method
     873        ((kinsol)
    864874         (pp indent (friend  int ,(sprintf "~A_steadystate" sysname)
    865875                            "(N_Vector, N_Vector, void*)" #\;) ,nl))
     
    17761786EOF
    17771787  ))
     1788
     1789
     1790#|
     1791      CVodeGetNumRhsEvals(B_.sys_, &nfevals);
     1792      CVodeGetNumSteps(B_.sys_, &nsteps);
     1793      CVodeGetNumLinSolvSetups(B_.sys_, &nlinsetups);
     1794      CVodeGetNumErrTestFails(B_.sys_, &netfails);
     1795      CVodeGetCurrentOrder(B_.sys_, &qcur);
     1796      CVodeGetNumStabLimOrderReds(B_.sys_, &nlsred);
     1797
     1798      printf ("CVODE: %d function evaluations, %d steps, %d linear solves\n",
     1799              nfevals, nsteps, nlinsetups);
     1800      printf ("CVODE: %d error test failures, %d order reductions\n",
     1801              netfails, nlsred);
     1802      printf ("CVODE: current order is %d\n",
     1803              qcur);
     1804|#
    17781805
    17791806  (pp indent (,#<#EOF
     
    24362463
    24372464
    2438 (define (output-init sysname method state-index-map steady-state-index-map
     2465(define (output-init sysname method ss-method state-index-map steady-state-index-map
    24392466                     imports external-eq-defs const-defs asgn-eq-defs init-eq-defs rate-eq-defs
    24402467                     reaction-eq-defs i-eqs pool-ions perm-ions defaults constraints
     
    25622589    (if (not (null? steady-state-index-map))
    25632590
    2564         (case method
    2565 
    2566           ((cvode ida)
     2591        (case ss-method
     2592
     2593          ((kinsol)
    25672594
    25682595           (let ((N (length steady-state-index-map))
     
    29903017
    29913018
    2992 (define (output-steadystate sysname method state-index-map steady-state-index-map
    2993                              imports external-eq-defs const-defs asgn-eq-defs init-eq-defs rate-eq-defs
    2994                              reaction-eq-defs i-eqs pool-ions perm-ions defaults constraints
    2995                              indent indent+)
     3019(define (output-steadystate sysname method ss-method state-index-map steady-state-index-map
     3020                            imports external-eq-defs const-defs asgn-eq-defs init-eq-defs rate-eq-defs
     3021                            reaction-eq-defs i-eqs pool-ions perm-ions defaults constraints
     3022                            indent indent+)
    29963023
    29973024 
     
    30513078         )
    30523079
    3053     (case method
    3054       ((ida cvode)
     3080    (case ss-method
     3081      ((kinsol)
    30553082       (pp indent ,nl
    30563083           (,(sprintf "extern \"C\" int ~A_steadystate" sysname) "(N_Vector u, N_Vector f, void* pnode)" ,nl)
     
    30973124     const-defs)
    30983125
    3099     (case method
    3100       ((ida cvode)
     3126    (case ss-method
     3127      ((kinsol)
    31013128       (for-each
    31023129        (lambda (def)
     
    31293156              init-order)
    31303157
    3131     (case method
    3132       ((ida cvode)
     3158    (case ss-method
     3159      ((kinsol)
    31333160       (for-each
    31343161        (lambda (def)
     
    31773204  (define (cn x)   (first x))
    31783205
    3179   (let-optionals rest ((dirname ".")  (method #f) (abstol #f) (reltol #f) (maxstep #f))
     3206  (let-optionals rest ((dirname ".")  (method #f) (ss-method #f) (abstol #f) (reltol #f) (maxstep #f))
    31803207
    31813208    (let ((method (or method 'gsl)))
     
    33673394              (with-output-to-port cpp-output
    33683395                (lambda ()
    3369                   (pp indent ,(fsolve-prelude method)))
     3396                  (pp indent ,(fsolve-prelude ss-method)))
    33703397                ))
    33713398
     
    34123439              ))
    34133440
    3414           ;; steady state function (used by CVODE and IDA)
    3415           (with-output-to-port cpp-output
    3416             (lambda ()
    3417               (output-steadystate sysname method state-index-map steady-state-index-map
    3418                                   imports-sans-v external-eq-defs const-defs asgn-eq-defs init-eq-defs rate-eq-defs
    3419                                   reaction-eq-defs i-eqs pool-ions perm-ions defaults constraints indent indent+)
    3420               (pp indent ,nl)
    3421               ))
     3441          ;; steady state function
     3442          (if (not (null? steady-state-index-map))
     3443              (with-output-to-port cpp-output
     3444                (lambda ()
     3445                  (output-steadystate sysname method ss-method state-index-map steady-state-index-map
     3446                                      imports-sans-v external-eq-defs const-defs asgn-eq-defs init-eq-defs rate-eq-defs
     3447                                      reaction-eq-defs i-eqs pool-ions perm-ions defaults constraints indent indent+)
     3448                  (pp indent ,nl)
     3449                  )))
    34223450
    34233451          ;; Jacobian function
     
    34473475          (with-output-to-port cpp-output
    34483476            (lambda ()
    3449               (output-init sysname method state-index-map steady-state-index-map
     3477              (output-init sysname method ss-method state-index-map steady-state-index-map
    34503478                           imports-sans-v external-eq-defs const-defs asgn-eq-defs init-eq-defs rate-eq-defs
    34513479                           reaction-eq-defs i-eqs pool-ions perm-ions defaults constraints indent indent+)
     
    35673595                 (pp indent ,nl ("/* " This file was generated by ,(nemo:version-string) on ,(seconds->string (current-seconds)) " */" ,nl))
    35683596                 (output-header
    3569                   sysname method state-index-map steady-state-index-map defaults
     3597                  sysname method ss-method state-index-map steady-state-index-map defaults
    35703598                  external-eq-defs const-defs asgn-eq-defs init-eq-defs rate-eq-defs
    35713599                  reaction-eq-defs i-eqs pool-ions perm-ions
  • release/4/nemo/trunk/nemo.scm

    r29930 r29940  
    179179                    (transformer ,string->symbol)))
    180180
     181            (nest-ss-method
     182             "specify NEST steady state solving method (gsl, kinsol)"
     183             (value (required METHOD)
     184                    (transformer ,string->symbol)))
     185
    181186            (nest-abstol
    182187             "specify NEST absolute tolerance (default is 1e-7)"
     
    410415                              (lookup-def 'dirname options)
    411416                              (lookup-def 'method options)
     417                              (lookup-def 'ss-method options)
    412418                              (lookup-def 'abstol options)
    413419                              (lookup-def 'reltol options)
     
    24572463                      (else (error "unknown NEST method " method))))))
    24582464                       
     2465            (nest-ss-method
     2466             (and nemo-nest?
     2467                  (let ((method  ($ (opt 'nest-ss-method) )))
     2468                    (case method
     2469                      ((gsl kinsol #f) method)
     2470                      (else (error "unknown NEST steady state solving method " method))))))
     2471                       
    24592472            (nest-abstol
    24602473             (and nemo-nest?
     
    25422555           (model->nest `((dirname . ,(or (and (string? nest) nest) dirname))
    25432556                          (method    . ,nest-method)
     2557                          (ss-method . ,nest-ss-method)
    25442558                          (abstol    . ,nest-abstol)
    25452559                          (reltol    . ,nest-reltol)
Note: See TracChangeset for help on using the changeset viewer.