file:/local_home/local_home/hugo/neurospaces_project/heccer/source/c/snapshots/0/tests/code/perfectclamp-passive10-2.c        (Mon Jun 16 00:04:08 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/addressing.h"
  22: #include "../../heccer/heccer.h"
  23: #include "../../heccer/perfectclamp.h"
  24: 
  25: 
  26: #include "main.h"
  27: 
  28: 
  29: #define HECCER_TEST_REPORTING_GRANULARITY 100
  30: #define HECCER_TEST_STEPS 1000
  31: #define HECCER_TEST_TESTED_THINGS ( HECCER_DUMP_VM_COMPARTMENT_MATRIX \
  32:                                     | HECCER_DUMP_VM_MECHANISM_OPERATIONS \
  33:         )
  34: #define HECCER_TEST_TIME_STEP (3e-6)
  35: 
  36: 
  37: struct Compartment comp[] =
  38: {
  39:     {
  40:         //m administrative overhead
  41: 
  42:         {
  43:             //m type of structure
  44: 
  45:             MATH_TYPE_Compartment,
  46:         },
  47: 
  48:         //m index of parent compartment, -1 for none
  49: 
  50:         -1,
  51: 
  52: /*      //m first mechanism */
  53: 
  54: /*      NULL, */
  55: 
  56: /*      //m number of mechanisms */
  57: 
  58: /*      0, */
  59: 
  60:         //m descriptive values, alphabetical order
  61: 
  62: /*     double dCm; */
  63: 
  64:         4.575370291e-11, // unscaled 0.0164,
  65: 
  66: /*     double dEm; */
  67: 
  68:         -0.08,
  69: 
  70: /*     double dInitVm; */
  71: 
  72:         -0.068,
  73: 
  74: /*     double dInject;           */
  75: 
  76:         1e-8,
  77: 
  78: /*     double dRa; */
  79: 
  80:         36050196.88, // unscaled 2.5,
  81: 
  82: /*     double dRm; */
  83: 
  84:         3584409.28, // unscaled 3
  85:     },
  86: /* [ /Purkinje/soma ]  */
  87: /* activation           = 0  */
  88: /* Vm                   = -0.0680000037  */
  89: /* previous_state       = 0  */
  90: /* Im                   = 0.00378972129  */
  91: /* Em                   = -0.07999999821  */
  92: /* Rm                   = 358440928  */
  93: /* Cm                   = 4.575370291e-11  */
  94: /* Ra                   = 360501.9688  */
  95: /* inject               = 0  */
  96: /* dia                  = 2.979999954e-05  */
  97: /* len                  = 0  */
  98: /* initVm               = -0.0680000037  */
  99: /* somatopetal          = none  */
 100: /* somatopetaltag       = 1  */
 101: /* somatofugal          =  /Purkinje/main  */
 102: /* somatofugaltag       = 0  */
 103: 
 104:     {
 105:         //m administrative overhead
 106: 
 107:         {
 108:             //m type of structure
 109: 
 110:             MATH_TYPE_Compartment,
 111:         },
 112: 
 113:         //m index of parent compartment, -1 for none
 114: 
 115:         0,
 116: 
 117: /*      //m first mechanism */
 118: 
 119: /*      NULL, */
 120: 
 121: /*      //m number of mechanisms */
 122: 
 123: /*      0, */
 124: 
 125:         //m descriptive values, alphabetical order
 126: 
 127: /*     double dCm; */
 128: 
 129:         5.755329373e-12, // unscaled 0.0164,
 130: 
 131: /*     double dEm; */
 132: 
 133:         -0.08,
 134: 
 135: /*     double dInitVm; */
 136: 
 137:         -0.068,
 138: 
 139: /*     double dInject;           */
 140: 
 141:         0,
 142: 
 143: /*     double dRa; */
 144: 
 145:         77281343.75, // unscaled 2.5,
 146: 
 147: /*     double dRm; */
 148: 
 149:         85485982.720, // unscaled 3
 150:     },
 151: /* [ /Purkinje/main ]  */
 152: /* activation           = 0  */
 153: /* Vm                   = -0.0680000037  */
 154: /* previous_state       = 0  */
 155: /* Im                   = 0.03594784066  */
 156: /* Em                   = -0.07999999821  */
 157: /* Rm                   = 8548598272  */
 158: /* Cm                   = 5.755329373e-12  */
 159: /* Ra                   = 772813.4375  */
 160: /* inject               = 0  */
 161: /* dia                  = 7.720000212e-06  */
 162: /* len                  = 1.446968781e-05  */
 163: /* initVm               = -0.0680000037  */
 164: /* somatopetal          = /Purkinje/soma  */
 165: /* somatopetaltag       = 0  */
 166: /* somatofugal          =  /Purkinje/main[1]  */
 167: /* somatofugaltag       = 0  */
 168: 
 169:     {
 170:         //m administrative overhead
 171: 
 172:         {
 173:             //m type of structure
 174: 
 175:             MATH_TYPE_Compartment,
 176:         },
 177: 
 178:         //m index of parent compartment, -1 for none
 179: 
 180:         1,
 181: 
 182: /*      //m first mechanism */
 183: 
 184: /*      NULL, */
 185: 
 186: /*      //m number of mechanisms */
 187: 
 188: /*      0, */
 189: 
 190:         //m descriptive values, alphabetical order
 191: 
 192: /*     double dCm; */
 193: 
 194:         9.952665428e-12, // unscaled 0.0164,
 195: 
 196: /*     double dEm; */
 197: 
 198:         -0.08,
 199: 
 200: /*     double dInitVm; */
 201: 
 202:         -0.068,
 203: 
 204: /*     double dInject;           */
 205: 
 206:         0,
 207: 
 208: /*     double dRa; */
 209: 
 210:         110708325, // unscaled 2.5,
 211: 
 212: /*     double dRm; */
 213: 
 214:         49433994.240, // unscaled 3
 215:     },
 216: /* [ /Purkinje/main[1] ]  */
 217: /* activation           = 0  */
 218: /* Vm                   = -0.0680000037  */
 219: /* previous_state       = 0  */
 220: /* Im                   = 0.03594784066  */
 221: /* Em                   = -0.07999999821  */
 222: /* Rm                   = 4943399424  */
 223: /* Cm                   = 9.952665428e-12  */
 224: /* Ra                   = 1107083.25  */
 225: /* inject               = 0  */
 226: /* dia                  = 8.220000382e-06  */
 227: /* len                  = 2.350032264e-05  */
 228: /* initVm               = -0.0680000037  */
 229: /* somatopetal          = /Purkinje/main  */
 230: /* somatopetaltag       = 0  */
 231: /* somatofugal          =  /Purkinje/main[2] /Purkinje/b0s01  */
 232: /* somatofugaltag       = 0  */
 233: 
 234:     {
 235:         //m administrative overhead
 236: 
 237:         {
 238:             //m type of structure
 239: 
 240:             MATH_TYPE_Compartment,
 241:         },
 242: 
 243:         //m index of parent compartment, -1 for none
 244: 
 245:         2,
 246: 
 247: /*      //m first mechanism */
 248: 
 249: /*      NULL, */
 250: 
 251: /*      //m number of mechanisms */
 252: 
 253: /*      0, */
 254: 
 255:         //m descriptive values, alphabetical order
 256: 
 257: /*     double dCm; */
 258: 
 259:         3.048169139e-12, // unscaled 0.0164,
 260: 
 261: /*     double dEm; */
 262: 
 263:         -0.08,
 264: 
 265: /*     double dInitVm; */
 266: 
 267:         -0.068,
 268: 
 269: /*     double dInject;           */
 270: 
 271:         0,
 272: 
 273: /*     double dRa; */
 274: 
 275:         30664696.88, // unscaled 2.5,
 276: 
 277: /*     double dRm; */
 278: 
 279:         1.614083584e+8, // unscaled 3
 280:     },
 281: /* [ /Purkinje/main[2] ]  */
 282: /* activation           = 0  */
 283: /* Vm                   = -0.0680000037  */
 284: /* previous_state       = 0  */
 285: /* Im                   = 0.03594784439  */
 286: /* Em                   = -0.07999999821  */
 287: /* Rm                   = 1.614083584e+10  */
 288: /* Cm                   = 3.048169139e-12  */
 289: /* Ra                   = 306646.9688  */
 290: /* inject               = 0  */
 291: /* dia                  = 8.500000149e-06  */
 292: /* len                  = 6.960275186e-06  */
 293: /* initVm               = -0.0680000037  */
 294: /* somatopetal          = /Purkinje/main[1]  */
 295: /* somatopetaltag       = 0  */
 296: /* somatofugal          =  /Purkinje/main[3] /Purkinje/b0s02  */
 297: /* somatofugaltag       = 0  */
 298: 
 299:     {
 300:         //m administrative overhead
 301: 
 302:         {
 303:             //m type of structure
 304: 
 305:             MATH_TYPE_Compartment,
 306:         },
 307: 
 308:         //m index of parent compartment, -1 for none
 309: 
 310:         3,
 311: 
 312: /*      //m first mechanism */
 313: 
 314: /*      NULL, */
 315: 
 316: /*      //m number of mechanisms */
 317: 
 318: /*      0, */
 319: 
 320:         //m descriptive values, alphabetical order
 321: 
 322: /*     double dCm; */
 323: 
 324:         1.866796431e-12, // unscaled 0.0164,
 325: 
 326: /*     double dEm; */
 327: 
 328:         -0.08,
 329: 
 330: /*     double dInitVm; */
 331: 
 332:         -0.068,
 333: 
 334: /*     double dInject;           */
 335: 
 336:         0,
 337: 
 338: /*     double dRa; */
 339: 
 340:         14715007.81, // unscaled 2.5,
 341: 
 342: /*     double dRm; */
 343: 
 344:         2.635531059e+8, // unscaled 3
 345:     },
 346: /* [ /Purkinje/main[3] ]  */
 347: /* activation           = 0  */
 348: /* Vm                   = -0.0680000037  */
 349: /* previous_state       = 0  */
 350: /* Im                   = 0.03594784439  */
 351: /* Em                   = -0.07999999821  */
 352: /* Rm                   = 2.635531059e+10  */
 353: /* Cm                   = 1.866796431e-12  */
 354: /* Ra                   = 147150.0781  */
 355: /* inject               = 0  */
 356: /* dia                  = 9.22000072e-06  */
 357: /* len                  = 3.929816558e-06  */
 358: /* initVm               = -0.0680000037  */
 359: /* somatopetal          = /Purkinje/main[2]  */
 360: /* somatopetaltag       = 0  */
 361: /* somatofugal          =  /Purkinje/main[4]  */
 362: /* somatofugaltag       = 0  */
 363: 
 364:     {
 365:         //m administrative overhead
 366: 
 367:         {
 368:             //m type of structure
 369: 
 370:             MATH_TYPE_Compartment,
 371:         },
 372: 
 373:         //m index of parent compartment, -1 for none
 374: 
 375:         4,
 376: 
 377: /*      //m first mechanism */
 378: 
 379: /*      NULL, */
 380: 
 381: /*      //m number of mechanisms */
 382: 
 383: /*      0, */
 384: 
 385:         //m descriptive values, alphabetical order
 386: 
 387: /*     double dCm; */
 388: 
 389:         3.81543408e-12, // unscaled 0.0164,
 390: 
 391: /*     double dEm; */
 392: 
 393:         -0.08,
 394: 
 395: /*     double dInitVm; */
 396: 
 397:         -0.068,
 398: 
 399: /*     double dInject;           */
 400: 
 401:         0,
 402: 
 403: /*     double dRa; */
 404: 
 405:         33550193.75, // unscaled 2.5,
 406: 
 407: /*     double dRm; */
 408: 
 409:         1.289499341e+8, // unscaled 3
 410:     },
 411: /* [ /Purkinje/main[4] ]  */
 412: /* activation           = 0  */
 413: /* Vm                   = -0.0680000037  */
 414: /* previous_state       = 0  */
 415: /* Im                   = 0.03594784439  */
 416: /* Em                   = -0.07999999821  */
 417: /* Rm                   = 1.289499341e+10  */
 418: /* Cm                   = 3.81543408e-12  */
 419: /* Ra                   = 335501.9375  */
 420: /* inject               = 0  */
 421: /* dia                  = 8.890000572e-06  */
 422: /* len                  = 8.330066521e-06  */
 423: /* initVm               = -0.0680000037  */
 424: /* somatopetal          = /Purkinje/main[3]  */
 425: /* somatopetaltag       = 0  */
 426: /* somatofugal          =  /Purkinje/main[5]  */
 427: /* somatofugaltag       = 0  */
 428: 
 429:     {
 430:         //m administrative overhead
 431: 
 432:         {
 433:             //m type of structure
 434: 
 435:             MATH_TYPE_Compartment,
 436:         },
 437: 
 438:         //m index of parent compartment, -1 for none
 439: 
 440:         5,
 441: 
 442: /*      //m first mechanism */
 443: 
 444: /*      NULL, */
 445: 
 446: /*      //m number of mechanisms */
 447: 
 448: /*      0, */
 449: 
 450:         //m descriptive values, alphabetical order
 451: 
 452: /*     double dCm; */
 453: 
 454:         2.239454065e-12, // unscaled 0.0164,
 455: 
 456: /*     double dEm; */
 457: 
 458:         -0.08,
 459: 
 460: /*     double dInitVm; */
 461: 
 462:         -0.068,
 463: 
 464: /*     double dInject;           */
 465: 
 466:         0,
 467: 
 468: /*     double dRa; */
 469: 
 470:         23012895.31, // unscaled 2.5,
 471: 
 472: /*     double dRm; */
 473: 
 474:         2.196964147e+8, // unscaled 3
 475:     },
 476: /* [ /Purkinje/main[5] ]  */
 477: /* activation           = 0  */
 478: /* Vm                   = -0.0680000037  */
 479: /* previous_state       = 0  */
 480: /* Im                   = 0.03594784439  */
 481: /* Em                   = -0.07999999821  */
 482: /* Rm                   = 2.196964147e+10  */
 483: /* Cm                   = 2.239454065e-12  */
 484: /* Ra                   = 230128.9531  */
 485: /* inject               = 0  */
 486: /* dia                  = 8.439999874e-06  */
 487: /* len                  = 5.149985554e-06  */
 488: /* initVm               = -0.0680000037  */
 489: /* somatopetal          = /Purkinje/main[4]  */
 490: /* somatopetaltag       = 0  */
 491: /* somatofugal          =  /Purkinje/main[6] /Purkinje/b0s03  */
 492: /* somatofugaltag       = 0  */
 493: 
 494:     {
 495:         //m administrative overhead
 496: 
 497:         {
 498:             //m type of structure
 499: 
 500:             MATH_TYPE_Compartment,
 501:         },
 502: 
 503:         //m index of parent compartment, -1 for none
 504: 
 505:         6,
 506: 
 507: /*      //m first mechanism */
 508: 
 509: /*      NULL, */
 510: 
 511: /*      //m number of mechanisms */
 512: 
 513: /*      0, */
 514: 
 515:         //m descriptive values, alphabetical order
 516: 
 517: /*     double dCm; */
 518: 
 519:         1.754059463e-12, // unscaled 0.0164,
 520: 
 521: /*     double dEm; */
 522: 
 523:         -0.08,
 524: 
 525: /*     double dInitVm; */
 526: 
 527:         -0.068,
 528: 
 529: /*     double dInject;           */
 530: 
 531:         0,
 532: 
 533: /*     double dRa; */
 534: 
 535:         16978185.94, // unscaled 2.5,
 536: 
 537: /*     double dRm; */
 538: 
 539:         2.804921958e+8, // unscaled 3
 540:     },
 541: /* [ /Purkinje/main[6] ]  */
 542: /* activation           = 0  */
 543: /* Vm                   = -0.0680000037  */
 544: /* previous_state       = 0  */
 545: /* Im                   = 0.03594784439  */
 546: /* Em                   = -0.07999999821  */
 547: /* Rm                   = 2.804921958e+10  */
 548: /* Cm                   = 1.754059463e-12  */
 549: /* Ra                   = 169781.8594  */
 550: /* inject               = 0  */
 551: /* dia                  = 8.609999895e-06  */
 552: /* len                  = 3.954098247e-06  */
 553: /* initVm               = -0.0680000037  */
 554: /* somatopetal          = /Purkinje/main[5]  */
 555: /* somatopetaltag       = 0  */
 556: /* somatofugal          =  /Purkinje/main[7] /Purkinje/b0s04  */
 557: /* somatofugaltag       = 0  */
 558: 
 559:     {
 560:         //m administrative overhead
 561: 
 562:         {
 563:             //m type of structure
 564: 
 565:             MATH_TYPE_Compartment,
 566:         },
 567: 
 568:         //m index of parent compartment, -1 for none
 569: 
 570:         7,
 571: 
 572: /*      //m first mechanism */
 573: 
 574: /*      NULL, */
 575: 
 576: /*      //m number of mechanisms */
 577: 
 578: /*      0, */
 579: 
 580:         //m descriptive values, alphabetical order
 581: 
 582: /*     double dCm; */
 583: 
 584:         3.37096605e-12, // unscaled 0.0164,
 585: 
 586: /*     double dEm; */
 587: 
 588:         -0.08,
 589: 
 590: /*     double dInitVm; */
 591: 
 592:         -0.068,
 593: 
 594: /*     double dInject;           */
 595: 
 596:         0,
 597: 
 598: /*     double dRa; */
 599: 
 600:         44225412.5, // unscaled 2.5,
 601: 
 602: /*     double dRm; */
 603: 
 604:         1.459522355e+8, // unscaled 3
 605:     },
 606: /* [ /Purkinje/main[7] ]  */
 607: /* activation           = 0  */
 608: /* Vm                   = -0.0680000037  */
 609: /* previous_state       = 0  */
 610: /* Im                   = 0.03594784811  */
 611: /* Em                   = -0.07999999821  */
 612: /* Rm                   = 1.459522355e+10  */
 613: /* Cm                   = 3.37096605e-12  */
 614: /* Ra                   = 442254.125  */
 615: /* inject               = 0  */
 616: /* dia                  = 7.780000487e-06  */
 617: /* len                  = 8.409710063e-06  */
 618: /* initVm               = -0.0680000037  */
 619: /* somatopetal          = /Purkinje/main[6]  */
 620: /* somatopetaltag       = 0  */
 621: /* somatofugal          =  /Purkinje/main[8]  */
 622: /* somatofugaltag       = 0  */
 623: 
 624:     {
 625:         //m administrative overhead
 626: 
 627:         {
 628:             //m type of structure
 629: 
 630:             MATH_TYPE_Compartment,
 631:         },
 632: 
 633:         //m index of parent compartment, -1 for none
 634: 
 635:         8,
 636: 
 637: /*      //m first mechanism */
 638: 
 639: /*      NULL, */
 640: 
 641: /*      //m number of mechanisms */
 642: 
 643: /*      0, */
 644: 
 645:         //m descriptive values, alphabetical order
 646: 
 647: /*     double dCm; */
 648: 
 649:         5.048512389e-12, // unscaled 0.0164,
 650: 
 651: /*     double dEm; */
 652: 
 653:         -0.08,
 654: 
 655: /*     double dInitVm; */
 656: 
 657:         -0.068,
 658: 
 659: /*     double dInject;           */
 660: 
 661:         0,
 662: 
 663: /*     double dRa; */
 664: 
 665:         51879109.38, // unscaled 2.5,
 666: 
 667: /*     double dRm; */
 668: 
 669:         97454448.640, // unscaled 3
 670:     },
 671: /* [ /Purkinje/main[8] ]  */
 672: /* activation           = 0  */
 673: /* Vm                   = -0.0680000037  */
 674: /* previous_state       = 0  */
 675: /* Im                   = 0.03594784066  */
 676: /* Em                   = -0.07999999821  */
 677: /* Rm                   = 9745444864  */
 678: /* Cm                   = 5.048512389e-12  */
 679: /* Ra                   = 518791.0938  */
 680: /* inject               = 0  */
 681: /* dia                  = 8.439999874e-06  */
 682: /* len                  = 1.160986722e-05  */
 683: /* initVm               = -0.0680000037  */
 684: /* somatopetal          = /Purkinje/main[7]  */
 685: /* somatopetaltag       = 0  */
 686: /* somatofugal          =  /Purkinje/br1 /Purkinje/br2  */
 687: /* somatofugaltag       = 0  */
 688: 
 689: };
 690: 
 691: 
 692: int piC2m[] =
 693: {
 694:     0,
 695:     0,
 696:     0,
 697:     0,
 698:     0,
 699:     0,
 700:     0,
 701:     0,
 702:     0,
 703:     0,
 704:     -1,
 705: };
 706: 
 707: 
 708: struct Intermediary inter =
 709: {
 710:     //m compartment array
 711: 
 712:     10,
 713: 
 714:     comp,
 715: 
 716:     //m all other mathematical components
 717: 
 718:     NULL,
 719: 
 720:     //m compartment 2 first mechanism number
 721: 
 722:     piC2m,
 723: };
 724: 
 725: 
 726: int main(int argc, char *argv[])
 727: {
 728:     //- allocate a voltage clamp object
 729: 
 730:     ppc = PerfectClampNew("pc object");
 731: 
 732:     //- set fields
 733: 
 734:     double dCommand = 0.1;
 735: 
 736:     PerfectClampSetFields(ppc, dCommand, NULL);
 737: 
 738: //d connect the voltage clamp object with the compartment of interest
 739: 
 740: #define HECCER_TEST_INITIATE \
 741:     double *pdVm = HeccerAddressCompartmentVariable(pheccer, 0, "Vm");  \
 742:     PerfectClampAddVariable(ppc, pdVm)
 743: 
 744: //d schedule the voltage clamper
 745: 
 746: #define HECCER_TEST_SCHEDULE PerfectClampSingleStep(ppc, dSimulationTime)
 747: 
 748:     //- do the simulation
 749: 
 750:     simulate(argc, argv);
 751: }
 752: 
 753: 
 754: #define main(argc,argv) simulate(argc,argv)
 755: 
 756: //t this prototype can give warning and perhaps errors.
 757: 
 758: int main(int argc, char *argv[]);
 759: 
 760: 
 761: #include "main.c"
 762: 
 763: 
 764: 








































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