Skip to content

Commit

Permalink
Add developer documentation.
Browse files Browse the repository at this point in the history
  • Loading branch information
1uc committed Oct 8, 2024
1 parent b57b9e4 commit b643cec
Showing 1 changed file with 33 additions and 0 deletions.
33 changes: 33 additions & 0 deletions docs/contents/longitudinal_diffusion.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
Keyword: 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

.. code-block::
KINETIC state {
COMPARTMENT vol {X}
LONGITUDINAL_DIFFUSION mu {X}
~ X << (ica)
}
Will undergo two transformations. The first is to create a system of ODE 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.

0 comments on commit b643cec

Please sign in to comment.