1 #include <../../nrnconf.h> 101 #if METHOD3 && VECTORIZE 113 int spatial_method() {
118 if (_method3 == 0 && new_method) {
120 }
else if (_method3 && new_method == 0) {
123 if (_method3 != new_method) {
124 _method3 = new_method;
128 _method3 = new_method;
138 extern int v_node_count;
139 extern Node** v_node;
140 extern Node** v_parent;
145 method3_setup_tree_matrix()
154 for (i = 0; i < v_node_count; ++
i) {
158 nd->thisnode.GC = 0.;
159 nd->thisnode.EC = 0.;
175 for (j = 0; j < count; ++
j) {
181 for (j = 0; j < count; ++
j) {
184 &nd->thisnode.GC,nd->v);
190 hoc_warning(
"errno set during calculation of currents", (
char*)0);
197 for (i=rootnodecount; i < v_node_count; ++
i) {
201 double dg, de, dgp, dep, fac;
204 if (i == rootnodecount) {
205 printf(
"v0 %g vn %g jstim %g jleft %g jright %g\n",
206 nd->v, pnd->v, nd->fromparent.current, nd->toparent.current,
207 nd[1].fromparent.current);
212 if ((nd2 = nd->toparent.nd2) != (
Node*)0) {
213 dgp = -(3*(pnd->thisnode.GC - pnd->thisnode.Cdt)
214 - 4*(nd->thisnode.GC - nd->thisnode.Cdt)
215 +(nd2->thisnode.GC - nd2->thisnode.Cdt))/2
217 dep = -(3*(pnd->thisnode.EC - pnd->thisnode.Cdt * pnd->v)
218 - 4*(nd->thisnode.EC - nd->thisnode.Cdt * nd->v)
219 +(nd2->thisnode.EC - nd2->thisnode.Cdt * nd2->v))/2
226 if ((nd2 = pnd->fromparent.nd2) != (
Node*)0) {
227 dg = -(3*(nd->thisnode.GC - nd->thisnode.Cdt)
228 - 4*(pnd->thisnode.GC - pnd->thisnode.Cdt)
229 +(nd2->thisnode.GC - nd2->thisnode.Cdt))/2
231 de = -(3*(nd->thisnode.EC - nd->thisnode.Cdt * nd->v)
232 - 4*(pnd->thisnode.EC - pnd->thisnode.Cdt * pnd->v)
233 +(nd2->thisnode.EC - nd2->thisnode.Cdt * nd2->v))/2
240 fac = 1. + nd->toparent.coefjdot * nd->thisnode.GC;
241 nd->toparent.djdv0 = (
243 + nd->toparent.coef0 * nd->thisnode.GC
244 + nd->toparent.coefdg * dg
246 NODED(nd) += nd->toparent.djdv0;
247 nd->toparent.current = (
248 - nd->toparent.coef0 * nd->thisnode.EC
249 - nd->toparent.coefn * pnd->thisnode.EC
250 + nd->toparent.coefjdot *
251 nd->thisnode.Cdt * nd->toparent.current
252 - nd->toparent.coefdg * de
254 NODERHS(nd) -= nd->toparent.current;
257 + nd->toparent.coefn * pnd->thisnode.GC
261 fac = 1. + nd->fromparent.coefjdot * pnd->thisnode.GC;
262 nd->fromparent.djdv0 = (
264 + nd->fromparent.coef0 * pnd->thisnode.GC
265 + nd->fromparent.coefdg * dgp
267 pNODED(nd) += nd->fromparent.djdv0;
268 nd->fromparent.current = (
269 - nd->fromparent.coef0 * pnd->thisnode.EC
270 - nd->fromparent.coefn * nd->thisnode.EC
271 + nd->fromparent.coefjdot *
272 nd->thisnode.Cdt * nd->fromparent.current
273 - nd->fromparent.coefdg * dep
275 pNODERHS(nd) -= nd->fromparent.current;
277 - nd->fromparent.coefj
278 + nd->fromparent.coefn * nd->thisnode.GC
286 method3_axial_current() {
291 for (i=rootnodecount; i < v_node_count; ++
i) {
292 Node* nd = v_node[
i];
293 Node* pnd = v_parent[
i];
294 nd->toparent.current +=
295 nd->toparent.djdv0 * nd->v
296 +
NODEB(nd) * pnd->v;
298 nd->fromparent.current +=
299 nd->fromparent.djdv0 * pnd->v
304 printf(
"cur0 %g curleft %g curright %g\n",
305 v_node[rootnodecount]->fromparent.current,
306 v_node[rootnodecount]->toparent.current,
307 v_node[rootnodecount+1]->fromparent.current
318 #define PI 3.14159265358979323846 320 method3_connection_coef()
323 double dx, diam, ra, coef;
358 for (j = 0; j < sec->
nnode; ++
j) {
364 ra =
nrn_ra(sec)*4.e-2/(
PI * diam*diam);
366 coef =
PI *1
e-2* diam;
371 nd->toparent.coef0 = coef*r*dx/12.;
372 nd->fromparent.coef0 = coef*r*dx/12.;
373 nd->toparent.coefn = coef*s*dx/12.;
374 nd->fromparent.coefn = coef*s*dx/12.;
375 nd->toparent.coefjdot = t*ra*coef*dx*dx/12.;
376 nd->fromparent.coefjdot = t*ra*coef*dx*dx/12.;
377 nd->toparent.coefdg = t*coef*dx/12.;
378 nd->fromparent.coefdg = t*coef*dx/12.;
379 nd->toparent.coefj = 1./(ra*dx);
380 nd->fromparent.coefj = 1./(ra*dx);
381 nd->toparent.nd2 = 0;
382 nd->fromparent.nd2 = 0;
384 if (sec->
nnode > 1) {
386 if (sec->
nnode > 2) {
struct Section * parentsec
void hoc_warning(const char *, const char *)
void hoc_execerror(const char *, const char *)
#define ForAllSections(sec)
double nrn_ra(Section *sec)
Prop * nrn_mechanism(int type, Node *nd)
double section_length(Section *sec)
double chkarg(int, double low, double high)