1 #include <../../nmodlconf.h> 217 #include "parse1.hpp" 220 #define P(arg) fputs(arg, fcout) 241 static List *vectorize_replacements;
242 extern char* cray_pragma();
245 #if __TURBOC__ || SYSV || VMS 266 Fprintf(
fcout,
"/* Created by Language version: %s of %s */\n",
269 P(
"/* NOT VECTORIZED */\n");
274 P(
"#include <stdio.h>\n#include <math.h>\n#include \"mathlib.h\"\n");
275 P(
"#include \"common.h\"\n#include \"softbus.h\"\n");
276 P(
"#include \"sbtypes.h\"\n#include \"Solver.h\"\n");
278 P(
"#include <stdio.h>\n#include <math.h>\n#include \"scoplib.h\"\n");
287 P(
"static int _reset;\n");
298 P(
"static int error;\n");
302 P(
"int _ninits = 0;\n");
303 P(
"static int _match_recurse=1;\n");
307 P(
"_modl_cleanup(){ _match_recurse=1;}\n");
316 #if SIMSYS || HMODL || NMODL 318 P(
"static double *_p;\n\n");
332 P(
"\nstatic initmodel() {\n int _i; double _save;");
335 P(
"\ninitmodel() {\n int _i; double _save;");
337 #if (!(SIMSYS || HMODL || NMODL)) 338 P(
"\ninitmodel(_pp) double _pp[]; {\n int _i; double _save; _p = _pp;");
341 P(
"_initlists();\n");
349 P(
"\n_init_match(_save);");
357 P(
"\nstatic nrn_init(_pp, _ppd, _v) double *_pp, _v; Datum* _ppd; {\n");
358 P(
" _p = _pp; _ppvar = _ppd;\n");
360 P(
"\nstatic nrn_init(_prop, _v) Prop *_prop; double _v; {\n");
361 P(
" _p = _prop->param; _ppvar = _prop->dparam;\n");
365 P(
" initmodel();\n");
370 P(
"\nstatic double _nrn_current(_v) double _v;{double _current=0.;v=_v;{");
371 if (currents->
next != currents) {
378 P(
"\n} return _current;\n}\n");
383 P(
"\nstatic double nrn_cur(_pp, _ppd, _pdiag, _v) double *_pp, *_pdiag, _v; Datum* _ppd; {\n");
385 P(
"\nstatic double nrn_cur(_prop, _pdiag, _v) Prop *_prop; double *_pdiag, _v;{\n");
387 if (currents->
next != currents) {
388 P(
" double _g, _rhs;\n");
390 P(
" _p = _pp; _ppvar = _ppd;\n");
392 P(
" _p = _prop->param; _ppvar = _prop->dparam;\n");
395 P(
" _g = _nrn_current(_v + .001);\n");
397 P(
" _rhs = _nrn_current(_v);\n");
399 P(
" _g = (_g - _rhs)/.001;\n");
403 P(
" *_pdiag += _g * 1.e2/(_nd_area);\n return (_rhs - _g*_v) * 1.e2/(_nd_area);\n}\n");
405 P(
" *_pdiag += _g;\n return _rhs - _g*_v;\n}\n");
408 P(
" return 0.;\n}\n");
414 P(
"\nstatic nrn_state(_pp, _ppd, _v) double *_pp, _v; Datum* _ppd; {\n");
416 P(
"\nstatic nrn_state(_prop, _v) Prop *_prop; double _v; {\n");
418 if (nrnstate || currents->
next == currents) {
419 P(
" double _break, _save;\n");
421 P(
" _p = _pp; _ppvar = _ppd;\n");
423 P(
" _p = _prop->param; _ppvar = _prop->dparam;\n");
425 P(
" _break = t + .5*dt; _save = t; delta_t = dt;\n");
431 if (currents->
next == currents) {
442 P(
"double _break, _save;\n{\n");
444 P(
"\nmodel(_pp, _indepindex) double _pp[]; int _indepindex; {\n");
445 P(
"double _break, _save;");
458 P(
"\nstatic terminal(){}\n");
465 P(
"\nterminal(_pp) double _pp[];{");
474 #if NMODL || SIMSYS || HMODL 475 P(
"\nstatic _initlists() {\n");
477 P(
"\n_initlists() {\n");
479 P(
" int _i; static int _first = 1;\n");
480 P(
" if (!_first) return;\n");
482 P(
"_first = 0;\n}\n");
506 " for (_i=0; _i<%d; _i++) %s[_i] = %s0;\n",
552 }
else if (q->
itemtype == VERBATIM) {
577 #if GLOBFUNCT && NMODL 594 Fprintf(
fcout,
"/* Created by Language version: %s of %s */\n",
598 P(
"/* VECTORIZED */\n");
599 P(
"#include <stdio.h>\n#include <math.h>\n#include \"scoplib.h\"\n");
607 P(
"static int _reset;\n");
615 P(
"static int error;\n");
616 P(
"static int _ninits = 0;\n");
617 P(
"static int _match_recurse=1;\n");
618 P(
"static _modl_cleanup(){ _match_recurse=1;}\n");
632 P(
"\nstatic initmodel(_ix) int _ix; {\n int _i; double _save;");
635 P(
"_initlists(_ix);\n");
644 P(
"\n_init_match(_save);");
650 P(
"\nstatic nrn_init(_count, _nodes, _data, _pdata)\n");
651 P(
" int _count; Node** _nodes; double** _data; Datum** _pdata;\n");
653 P(
" _p = _data; _ppvar = _pdata;\n");
656 P(
" for (_ix = 0; _ix < _count; ++_ix) {\n");
657 P(
" v = _nodes[_ix]->_v;\n");
659 P(
" initmodel(_ix);\n");
665 P(
"\nstatic double _nrn_current(_ix, _v) int _ix; double _v;{\n double _current=0.;v=_v;\n {");
666 if (currents->
next != currents) {
673 P(
"\n} return _current;\n}\n");
678 P(
"\nstatic double nrn_cur(_count, _nodes, _data, _pdata)\n");
679 P(
" int _count; Node** _nodes; double** _data; Datum** _pdata;\n");
681 if (currents->
next != currents) {
683 P(
" _p = _data; _ppvar = _pdata;\n");
686 P(
"\n#if METHOD3\n if (_method3) {\n");
689 P(
" for (_ix = 0; _ix < _count; ++_ix) {\n");
690 P(
" double _g, _rhs, _v;\n");
691 P(
" _v = _nodes[_ix]->_v;\n");
693 P(
" _g = _nrn_current(_ix, _v + .001);\n");
695 P(
"\n _rhs = _nrn_current(_ix, _v);\n");
697 P(
" _g = (_g - _rhs)/.001;\n");
701 P(
" _nodes[_ix]->_d += _g * 1.e2/(_nd_area);\n");
702 P(
" _nodes[_ix]->_rhs += (_g*_v - _rhs) * 1.e2/(_nd_area);\n");
704 P(
" _nodes[_ix]->_thisnode._GC += _g;\n");
705 P(
" _nodes[_ix]->_thisnode._EC += (_g*_v - _rhs);\n");
709 P(
"\n }else\n#endif\n {\n");
713 P(
" for (_ix = 0; _ix < _count; ++_ix) {\n");
714 P(
" double _g, _rhs, _v;\n");
715 P(
" _v = _nodes[_ix]->_v;\n");
717 P(
" _g = _nrn_current(_ix, _v + .001);\n");
719 P(
"\n _rhs = _nrn_current(_ix, _v);\n");
721 P(
" _g = (_g - _rhs)/.001;\n");
725 P(
" _nodes[_ix]->_d += _g * 1.e2/(_nd_area);\n");
726 P(
" _nodes[_ix]->_rhs += (_g*_v - _rhs) * 1.e2/(_nd_area);\n");
728 P(
" _nodes[_ix]->_d += _g;\n");
729 P(
" _nodes[_ix]->_rhs += (_g*_v - _rhs);\n");
737 P(
" return 0.;\n}\n");
742 P(
"\nstatic nrn_state(_count, _nodes, _data, _pdata)\n");
743 P(
" int _count; Node** _nodes; double** _data; Datum** _pdata;\n");
745 if (nrnstate || currents->
next == currents) {
747 P(
" double _break, _save;\n");
748 P(
" _p = _data; _ppvar = _pdata;\n");
750 P(
" _break = t + .5*dt; _save = t; delta_t = dt;\n");
753 P(
" for (_ix = 0; _ix < _count; ++_ix) {\n");
754 P(
" v = _nodes[_ix]->_v;\n");
764 P(
" for (_ix = 0; _ix < _count; ++_ix) {\n");
765 if (currents->
next == currents) {
774 P(
"\nstatic terminal(){}\n");
782 P(
"\nstatic _initlists(){\n");
783 P(
" int _i; static int _first = 1;\n");
784 P(
" if (!_first) return;\n");
786 P(
"_first = 0;\n}\n");
791 if (!vectorize_replacements) {
792 vectorize_replacements =
newlist();
800 if (vectorize_replacements) {
801 ITERATE(q, vectorize_replacements) {
809 char* cray_pragma() {
810 static char buf[] =
"\ 812 \n#pragma _CRI ivdep\
List * get_ion_variables(int)
void c_out_vectorize(const char *)
void vectorize_do_substitute()
#define ITERATE(itm, lst)
List * set_ion_variables(int)
Item * lappendstr(List *list, char *str)
void vectorize_substitute(Item *q, char *str)
NMODL parser global flags / functions.
Item * lappenditem(List *list, Item *item)
void replacstr(Item *q, char *s)
List * end_dion_stmt(char *strdel)