DiffusionSolverFE
-----------------
DiffusionSolverFE is the main PDE solver in CompuCell3D. It eliminates several limitations
and inconveniences of its predecessor, ``FlexibleDiffusionSolverFE``. and provides new
features such as GPU implementation or cell type dependent
diffusion/decay coefficients. In addition it also eliminates the need
to rescale diffusion/decay/secretion constants. It checks stability
condition of the PDE and then rescales appropriately all coefficients
and computes how many extra times per MCS the solver has to be called. It
makes those extra calls automatically.
.. warning::
One of the key differences between ``FlexibleDiffusionSolverFE`` and
``DiffusionSolverFE`` is the way in which secretion is treated. In
``FlexibleDiffusionSolverFE`` all secretion amount is done once followed by
possibly multiple diffusion calls to diffusion (to avoid numerical
instabilities). In ``DiffusionSolverFE`` the default mode of operation is
such that multiple secretion and diffusion calls are interleaved.
This means that instead of secreting full amount for a given MCS and
diffusing it, the ``DiffusionSolverFE`` secretes substance gradually so that
there is equal amount of secretion before each call of the diffusion.
One can change this behavior by adding ```` to
definition of the diffusion solver e.g.
.. code-block::
…
With such definition the ``DiffusionSolverFE`` will behave like
``FlexibleDiffusionSolverFE`` as far as computation.
.. note::
``DiffusionSolverFE`` autoscales diffusion discretization
depending on the lattice so that ```` we used in
``FlexibleDiffusionSolverFE`` is unnecessary.
This may result in slow performance so users have to be aware that those
extra calls to the solver may be the cause.
Typical syntax for the ``DiffusionSolverFE`` may look like example below:
.. code-block:: xml
ATTR
0.1
5e-05
0.0
100
The syntax resembles the syntax for ``FlexibleDiffusionSolverFE``. We
specify global diffusion constant by using ````
tag. This specifies diffusion coefficient which applies to entire region
of the simulation. We can override this specification for regions
occupied by certain cell types by using the following syntax:
.. code-block:: xml
0.0
Similar principles apply to decay constant and we use
```` tag to specify global decay coefficient and
.. code-block:: xml
0.0
to override global definition for regions occupied by Red cells.
We do not support ````, ```` or ```` tags.
.. note::
``DiffusionSolverFE`` autoscales diffusion discretization
depending on the lattice so that ```` we used in
``FlexibleDiffusionSolverFE`` is unnecessary.
Running DiffusionSolver on GPU
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
To run ``DiffusionSolverFE`` on GPU all we have to do (besides having OpenCL
compatible GPU and correct drives installed) to replace first line of
solver specification:
.. code-block:: xml
with
.. code-block:: xml
.. note::
Depending on your computer hardware you may or may not be able to take advantage of
GPU capabilities.