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 72a1476 commit 82048e1
Show file tree
Hide file tree
Showing 2 changed files with 34 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 @@
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 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.

1 change: 1 addition & 0 deletions docs/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ About NMODL
contents/pointers
contents/cable_equations
contents/globals
contents/longitudinal_diffusion

.. toctree::
:maxdepth: 3
Expand Down

0 comments on commit 82048e1

Please sign in to comment.