file:/local_home/local_home/hugo/neurospaces_project/heccer/source/c/snapshots/0/tests/code/pool1-contributors2.c        (Mon Jun 16 00:03:52 2008 )        HOME


   1: //
   2: // Heccer : a compartmental solver that implements efficient Crank-Nicolson
   3: // integration for neuronal models.
   4: //
   5: 
   6: //////////////////////////////////////////////////////////////////////////////
   7: //'
   8: //' Heccer : testbed C implementation
   9: //'
  10: //' Copyright (C) 2006-2008 Hugo Cornelis
  11: //'
  12: //' functional ideas .. Hugo Cornelis, hugo.cornelis@gmail.com
  13: //'
  14: //' coding ............ Hugo Cornelis, hugo.cornelis@gmail.com
  15: //'
  16: //////////////////////////////////////////////////////////////////////////////
  17: 
  18: 
  19: #include <stdlib.h>
  20: 
  21: #include "../../heccer/compartment.h"
  22: #include "../../heccer/heccer.h"
  23: #include "../../heccer/mathcomponent.h"
  24: 
  25: 
  26: #define HECCER_TEST_REPORTING_GRANULARITY 100
  27: #define HECCER_TEST_STEPS 1000
  28: #define HECCER_TEST_TESTED_THINGS ( HECCER_DUMP_VM_COMPARTMENT_MATRIX \
  29:                                     | HECCER_DUMP_VM_COMPARTMENT_DATA \
  30:                                     | HECCER_DUMP_VM_COMPARTMENT_OPERATIONS \
  31:                                     | HECCER_DUMP_VM_CHANNEL_POOL_FLUXES \
  32:                                     | HECCER_DUMP_VM_MECHANISM_DATA \
  33:                                     | HECCER_DUMP_VM_MECHANISM_OPERATIONS \
  34:                                     | HECCER_DUMP_VM_SUMMARY \
  35:         )
  36: #define HECCER_TEST_TIME_STEP (1e-6)
  37: 
  38: 
  39: struct Compartment comp =
  40: {
  41:     //m administrative overhead
  42: 
  43:     {
  44:         //m type of structure
  45: 
  46:         MATH_TYPE_Compartment,
  47:     },
  48: 
  49:     //m index of parent compartment, -1 for none
  50: 
  51:     -1,
  52: 
  53: /*      //m first mechanism */
  54: 
  55: /*      NULL, */
  56: 
  57: /*      //m number of mechanisms */
  58: 
  59: /*      0, */
  60: 
  61:     //m descriptive values, alphabetical order
  62: 
  63: /*     double dCm; */
  64: 
  65:     5.755329373e-12, // unscaled 0.0164,
  66: 
  67: /*     double dEm; */
  68: 
  69:     -0.08,
  70: 
  71: /*     double dInitVm; */
  72: 
  73:     -0.068,
  74: 
  75: /*     double dInject;           */
  76: 
  77:     0,
  78: 
  79: /*     double dRa; */
  80: 
  81:     772813.4375, // unscaled 2.5,
  82: 
  83: /*     double dRm; */
  84: 
  85:     8.548598272e9, // unscaled 3
  86: };
  87: 
  88: 
  89: //v first calcium channel
  90: 
  91: struct ChannelActInact caiCaP =
  92: {
  93:     //m administrative overhead
  94: 
  95:     {
  96:         //m type of structure
  97: 
  98:         MATH_TYPE_ChannelActInact,
  99:     },
 100: 
 101:     //m first set of descriptive values, alphabetical order
 102: 
 103:     //m initial reversal potential
 104: 
 105:     0.1470214874,
 106: 
 107:     //m get reversal potential from this intermediary, -1 for none
 108: 
 109:     -1,
 110: 
 111:     //m maximal conductance when all channels are permissive
 112: 
 113:     1.57921e-08,
 114: 
 115:     //m contributes to this concentration pool, -1 for none, boolean indicator only.
 116: 
 117:     1,
 118: 
 119:     //m activation description
 120: 
 121:     {
 122:         //m power, for a standard heccer, something between 1 and 4 or so.
 123: 
 124:         1,
 125: 
 126:         //m gate definition
 127: 
 128:         {
 129:             //m initial value, commonly forward over backward steady states
 130: 
 131:             0.001391094927,
 132: 
 133:             //m corresponding index in tables, set to -1 for initialization.
 134: 
 135:             -1,
 136: 
 137:             {
 138:                 //m forward kinetiks, commonly denoted with alpha or non-perm to perm rate
 139: 
 140:                 {
 141:                     //m multiplier
 142: 
 143:                     8.50e3,
 144: 
 145:                     //m multiplier membrane dependence, 0.0 for no dependence
 146: 
 147:                     0.0,
 148: 
 149:                     //m 2b: multiplier membrane dependence offset, 0.0 for no dependence
 150: 
 151:                     0.0,
 152: 
 153:                     //m choose between nominator or denominator, 1 means nominator, -1
 154:                     //m means denominator
 155: 
 156:                     -1.0,
 157: 
 158:                     //m nominator or denominator offset
 159: 
 160:                     1.0,
 161: 
 162:                     //m membrane offset
 163: 
 164:                     -0.0080,
 165: 
 166:                     //m denormalized time constant
 167: 
 168:                     -12.5e-3,
 169:                 },
 170: 
 171:                 //m backward kinetiks, commonly denoted with beta or perm to non-perm rate
 172: 
 173:                 {
 174:                     //m multiplier
 175: 
 176:                     35.0e3,
 177: 
 178:                     //m multiplier membrane dependence, 0.0 for no dependence
 179: 
 180:                     0.0,
 181: 
 182:                     //m 2b: multiplier membrane dependence offset, 0.0 for no dependence
 183: 
 184:                     0.0,
 185: 
 186:                     //m choose between nominator or denominator, 1 means nominator, -1
 187:                     //m means denominator
 188: 
 189:                     -1.0,
 190: 
 191:                     //m nominator or denominator offset
 192: 
 193:                     1.0,
 194: 
 195:                     //m membrane offset
 196: 
 197:                     0.074,
 198: 
 199:                     //m denormalized time constant
 200: 
 201:                     14.5e-3,
 202:                 },
 203:             },
 204:         },
 205:     },
 206: 
 207:     //m inactivation description
 208: 
 209:     {
 210:         //m power, for a standard heccer, something between 1 and 4 or so.
 211: 
 212:         1,
 213: 
 214:         //m gate definition
 215: 
 216:         {
 217:             //m initial value, commonly forward over backward steady states
 218: 
 219:             0.9868968318,
 220: 
 221:             //m corresponding index in tables, set to -1 for initialization.
 222: 
 223:             -1,
 224: 
 225:             {
 226:                 //m forward kinetiks, commonly denoted with alpha or non-perm to perm rate
 227: 
 228:                 {
 229:                     //m multiplier
 230: 
 231:                     0.0015e3,
 232: 
 233:                     //m multiplier membrane dependence, 0.0 for no dependence
 234: 
 235:                     0.0,
 236: 
 237:                     //m 2b: multiplier membrane dependence offset, 0.0 for no dependence
 238: 
 239:                     0.0,
 240: 
 241:                     //m choose between nominator or denominator, 1 means nominator, -1
 242:                     //m means denominator
 243: 
 244:                     -1.0,
 245: 
 246:                     //m nominator or denominator offset
 247: 
 248:                     1.0,
 249: 
 250:                     //m membrane offset
 251: 
 252:                     0.029,
 253: 
 254:                     //m denormalized time constant
 255: 
 256:                     8.0e-3,
 257:                 },
 258: 
 259:                 //m backward kinetiks, commonly denoted with beta or perm to non-perm rate
 260: 
 261:                 {
 262:                     //m multiplier
 263: 
 264:                     0.0055e3,
 265: 
 266:                     //m multiplier membrane dependence, 0.0 for no dependence
 267: 
 268:                     0.0,
 269: 
 270:                     //m 2b: multiplier membrane dependence offset, 0.0 for no dependence
 271: 
 272:                     0.0,
 273: 
 274:                     //m choose between nominator or denominator, 1 means nominator, -1
 275:                     //m means denominator
 276: 
 277:                     -1.0,
 278: 
 279:                     //m nominator or denominator offset
 280: 
 281:                     1.0,
 282: 
 283:                     //m membrane offset
 284: 
 285:                     0.023,
 286: 
 287:                     //m denormalized time constant
 288: 
 289:                     -8.0e-3,
 290:                 },
 291:             },
 292:         },
 293:     },
 294: };
 295: 
 296: 
 297: struct ChannelActInact caiCaT =
 298: {
 299:     //m administrative overhead
 300: 
 301:     {
 302:         //m type of structure
 303: 
 304:         MATH_TYPE_ChannelActInact,
 305:     },
 306: 
 307:     //m first set of descriptive values, alphabetical order
 308: 
 309:     //m initial reversal potential
 310: 
 311:     0.1470214874,
 312: 
 313:     //m get reversal potential from this intermediary, -1 for none
 314: 
 315:     -1,
 316: 
 317:     //m maximal conductance when all channels are permissive
 318: 
 319:     1.754672296e-09,
 320: 
 321:     //m contributes to this concentration pool, -1 for none, boolean indicator only.
 322: 
 323:     1,
 324: 
 325:     //m activation description
 326: 
 327:     {
 328:         //m power, for a standard heccer, something between 1 and 4 or so.
 329: 
 330:         1,
 331: 
 332:         //m gate definition
 333: 
 334:         {
 335:             //m initial value, commonly forward over backward steady states
 336: 
 337:             0.038918706451336625,
 338: 
 339:             //m corresponding index in tables, set to -1 for initialization.
 340: 
 341:             -1,
 342: 
 343:             {
 344:                 //m forward kinetiks, commonly denoted with alpha or non-perm to perm rate
 345: 
 346:                 {
 347:                     //m multiplier
 348: 
 349:                     2.6e3,
 350: 
 351:                     //m multiplier membrane dependence, 0.0 for no dependence
 352: 
 353:                     0.0,
 354: 
 355:                     //m 2b: multiplier membrane dependence offset, 0.0 for no dependence
 356: 
 357:                     0.0,
 358: 
 359:                     //m choose between nominator or denominator, 1 means nominator, -1
 360:                     //m means denominator
 361: 
 362:                     -1.0,
 363: 
 364:                     //m nominator or denominator offset
 365: 
 366:                     1.0,
 367: 
 368:                     //m membrane offset
 369: 
 370:                     0.021,
 371: 
 372:                     //m denormalized time constant
 373: 
 374:                     -8e-3,
 375:                 },
 376: 
 377:                 //m backward kinetiks, commonly denoted with beta or perm to non-perm rate
 378: 
 379:                 {
 380:                     //m multiplier
 381: 
 382:                     0.18e3,
 383: 
 384:                     //m multiplier membrane dependence, 0.0 for no dependence
 385: 
 386:                     0.0,
 387: 
 388:                     //m 2b: multiplier membrane dependence offset, 0.0 for no dependence
 389: 
 390:                     0.0,
 391: 
 392:                     //m choose between nominator or denominator, 1 means nominator, -1
 393:                     //m means denominator
 394: 
 395:                     -1.0,
 396: 
 397:                     //m nominator or denominator offset
 398: 
 399:                     1.0,
 400: 
 401:                     //m membrane offset
 402: 
 403:                     0.04,
 404: 
 405:                     //m denormalized time constant
 406: 
 407:                     4e-3,
 408:                 },
 409:             },
 410:         },
 411:     },
 412: 
 413:     //m inactivation description
 414: 
 415:     {
 416:         //m power, for a standard heccer, something between 1 and 4 or so.
 417: 
 418:         1,
 419: 
 420:         //m gate definition
 421: 
 422:         {
 423:             //m initial value, commonly forward over backward steady states
 424: 
 425:             0.082602128127539254,
 426: 
 427:             //m corresponding index in tables, set to -1 for initialization.
 428: 
 429:             -1,
 430: 
 431:             {
 432:                 //m forward kinetiks, commonly denoted with alpha or non-perm to perm rate
 433: 
 434:                 {
 435:                     //m multiplier
 436: 
 437:                     0.0025e3,
 438: 
 439:                     //m multiplier membrane dependence, 0.0 for no dependence
 440: 
 441:                     0.0,
 442: 
 443:                     //m 2b: multiplier membrane dependence offset, 0.0 for no dependence
 444: 
 445:                     0.0,
 446: 
 447:                     //m choose between nominator or denominator, 1 means nominator, -1
 448:                     //m means denominator
 449: 
 450:                     -1.0,
 451: 
 452:                     //m nominator or denominator offset
 453: 
 454:                     1.0,
 455: 
 456:                     //m membrane offset
 457: 
 458:                     0.04,
 459: 
 460:                     //m denormalized time constant
 461: 
 462:                     8e-3,
 463:                 },
 464: 
 465:                 //m backward kinetiks, commonly denoted with beta or perm to non-perm rate
 466: 
 467:                 {
 468:                     //m multiplier
 469: 
 470:                     0.19e3,
 471: 
 472:                     //m multiplier membrane dependence, 0.0 for no dependence
 473: 
 474:                     0.0,
 475: 
 476:                     //m 2b: multiplier membrane dependence offset, 0.0 for no dependence
 477: 
 478:                     0.0,
 479: 
 480:                     //m choose between nominator or denominator, 1 means nominator, -1
 481:                     //m means denominator
 482: 
 483:                     -1.0,
 484: 
 485:                     //m nominator or denominator offset
 486: 
 487:                     1.0,
 488: 
 489:                     //m membrane offset
 490: 
 491:                     0.05,
 492: 
 493:                     //m denormalized time constant
 494: 
 495:                     -10.0e-3,
 496:                 },
 497:             },
 498:         },
 499:     },
 500: };
 501: 
 502: 
 503: struct ExponentialDecay exdecCa =
 504: {
 505:     //m administrative overhead
 506: 
 507:     {
 508:         //m type of structure
 509: 
 510:         MATH_TYPE_ExponentialDecay,
 511:     },
 512: 
 513:     //m initial value
 514: 
 515:     4e-5,
 516: 
 517:     //m beta
 518: 
 519:     7.57903e+10,
 520: 
 521:     //m steady state
 522: 
 523:     4e-05,
 524: 
 525:     //m tau
 526: 
 527:     0.00010,
 528: 
 529:     //m external contribution delivered by these intermediaries
 530: 
 531:     {
 532:         0,
 533:         1,
 534:         -1,
 535:         -1,
 536:     },
 537: };
 538: 
 539: 
 540: int piC2m[] =
 541: {
 542:     3,
 543:     -1,
 544: };
 545: 
 546: 
 547: struct MathComponentArray mca =
 548: {
 549:     //m number of math components
 550: 
 551:     3,
 552: 
 553:     //m math component data
 554: 
 555:     NULL,
 556: 
 557:     //m math component index, initialize to NULL
 558: 
 559:     NULL,
 560: 
 561: };
 562: 
 563: 
 564: struct Intermediary inter =
 565: {
 566:     //m compartment array
 567: 
 568:     1,
 569: 
 570:     &comp,
 571: 
 572:     //m all other mathematical components
 573: 
 574:     &mca,
 575: 
 576:     //m compartment 2 first mechanism number
 577: 
 578:     piC2m,
 579: };
 580: 
 581: 
 582: int main(int argc, char *argv[])
 583: {
 584:     //- determine intermediary size, and allocate
 585: 
 586:     struct MathComponentInfo *pmciCaP = MathComponentInfoLookup(caiCaP.mc.iType);
 587: 
 588:     struct MathComponentInfo *pmciCaT = MathComponentInfoLookup(caiCaT.mc.iType);
 589: 
 590:     struct MathComponentInfo *pmciCa = MathComponentInfoLookup(exdecCa.mc.iType);
 591: 
 592:     int iChars = pmciCaP->iChars + pmciCaT->iChars + pmciCa->iChars;
 593: 
 594:     void *pmc = calloc(sizeof(char), iChars);
 595: 
 596:     //- prepare the mechanism intermediary
 597: 
 598:     struct ChannelActInact *pcaiCaT = (struct ChannelActInact *)pmc;
 599: 
 600:     *pcaiCaT = caiCaT;
 601: 
 602:     struct ChannelActInact *pcaiCaP = (struct ChannelActInact *)&((char *)pcaiCaT)[pmciCaT->iChars];
 603: 
 604:     *pcaiCaP = caiCaP;
 605: 
 606:     struct ExponentialDecay *pexdec = (struct ExponentialDecay *)&((char *)pcaiCaP)[pmciCaP->iChars];
 607: 
 608:     *pexdec = exdecCa;
 609: 
 610:     //- link the intermediary
 611: 
 612:     mca.pmc = pmc;
 613: 
 614:     //- do the simulation
 615: 
 616:     simulate(argc,argv);
 617: }
 618: 
 619: 
 620: #define main(argc,argv) simulate(argc,argv)
 621: 
 622: //t this prototype can give warning and perhaps errors.
 623: 
 624: int main(int argc, char *argv[]);
 625: 
 626: 
 627: #include "main.c"
 628: 
 629: 
 630: 








































Generated by Xrefactory version 2.0.14 on Thu Jul 24 22:41:20 2008