Longitudinal Diffusion

The idea behind LONGITUDINAL_DIFFUSION is to allow a STATE variable to diffuse along a section, i.e. from one segment into a neighbouring segment.

This problem is solved by registering callbacks. In particular, NEURON needs to be informed of the volume and diffusion rate. Additionally, the implicit time-stepping requires information about certain derivatives.

Implementation in NMODL

The following KINETIC block

KINETIC state {
    COMPARTMENT vol {X}
    LONGITUDINAL_DIFFUSION mu {X}

    ~ X << (ica)
}

Will undergo two transformations. The first is to create a system of ODEs that can be solved. This consumed the AST node. However, to print the code for longitudinal diffusion we require information from the COMPARTMENT and LONGITUDINAL_DIFFUSION statements. This is why there’s a second transformation, that runs before the other transformation, to extract the required information and store it a AST node called LONGITUDINAL_DIFFUSION_BLOCK. This block can then be converted into an “info” object, which is then used to print the callbacks.