next up previous contents
Next: Bibliography Up: Hsolve as a Virtual Previous: Solution of The Cable   Contents

Solution of Conductance Equations.

The solution of conductance equations is done by looping over the byte-code in an array called ops. The number of entries in this array can be found by inspecting the field nops:

    genesis > showfield solve nops
    [ /Purkinje/solve ]
    nops                 = 127132

The byte-code in the ops array walks over the conductance equations for all compartments. For the purposes of efficiency, the conductance equations are grouped per compartment and these groups are put in the same order as the compartments in the funcs array. Every time a new group is encountered, the next membrane potential is fetched from the vm array. The groups are separated with COMPT_OP operations (and sometimes other operations with a resembling name). Disassembling the opcodes gives something like the following output:

    genesis > printops solve 0 25
    00000 :: 101                        FCOMPT_OP
    00001 :: 3001                       CHAN_EK_OP
    00002 :: 4101    0   -1   1   0     SYN3_OP    0   -1   1   0
    00007 :: 100                        COMPT_OP
    00008 :: 100                        COMPT_OP
    00009 :: 5100                       NEWVOLT_OP
    00010 :: 3001                       CHAN_EK_OP
    00011 :: 4001    4    1             IPOL1V_OP    4    1
    00014 :: 3200                       ADD_CURR_OP
    00015 :: 1000    0                  CONC_VAL_OP    0
    00017 :: 5110                       NEWCONC1_OP
    00018 :: 3000                       CHAN_OP
    00019 :: 4001    6    1             IPOL1V_OP    6    1
    00022 :: 4002    0    2             IPOL1C_OP    0    2
    00025 :: 3200                       ADD_CURR_OP

The first opcode FCOMPT_OP simply loads the first membrane potential from the vm array. Then we encounter a compartment that contains a single synaptic channel (SYN3_OP opcode). Then we encounter two consecutive COMPT_OP opcodes, indicating the presence of a passive compartment : if you inspect the Purkinje cell tutorial, you see that there are lots of spines consisting of a spine head that contains a synaptic channel and a spine neck that is a passive compartment. The way hines numbering is implemented in hsolve forces the computations for the dendritic tips to be done first. In the Purkinje cell tutorial all dendritic tips are spines which explains why we encounter a compartment with a single synaptic channel followed by a passive compartment.

Next we encounter a NEWVOLT_OP. This operation loads a pointer to a table that contains an entry for each tabulated channel type in the model and that corresponds to the membrane potential of the current compartment. The CHAN_EK_OP loads the maximal conductance and the reversal potential (that come from the current entries in the chip array). Then the IPOL1V_OP computes a gate factor from a one-dimensional table (the table type is $ 4$, the exponent is $ 1$). The next operation, ADD_CURR_OP, computes the current contribution for the channel. After this we see opcodes encoding an analog scenario for a concentration dependent conductance.

The emulation of this byte-code is done in the source file hines_chip.c.

NOTE: The printfuncs and printops commands are not available in release 2.2 of Genesis.

next up previous contents
Next: Bibliography Up: Hsolve as a Virtual Previous: Solution of The Cable   Contents