DiffusionSolverFE
DiffusionSolverFE is new solver in 3.6.2 and is intended to fully
replace FlexibleDiffusionSolverFE. It eliminates several limitations
and inconveniences of 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 <DoNotScaleSecretion/> to
definition of the diffusion solver e.g.
<Steppable Type="DiffusionSolverFE">
<DoNotScaleSecretion/>
<DiffusionField Name="ATTR">
<DiffusionData>
…
With such definition the DiffusionSolverFE will behave like
FlexibleDiffusionSolverFE as far as computation.
Note
DiffusionSolverFE autoscales diffusion discretization
depending on the lattice so that <AutoscaleDiffusion/> 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:
<Steppable Type="DiffusionSolverFE">
<DiffusionField Name="ATTR">
<DiffusionData>
<FieldName>ATTR</FieldName>
<GlobalDiffusionConstant>0.1</GlobalDiffusionConstant>
<GlobalDecayConstant>5e-05</GlobalDecayConstant>
<DiffusionCoefficient CellType="Red">0.0</DiffusionCoefficient>
</DiffusionData>
<SecretionData>
<Secretion Type="Bacterium">100</Secretion>
</SecretionData>
<BoundaryConditions>
<Plane Axis="X">
<Periodic/>
</Plane>
<Plane Axis="Y">
<Periodic/>
</Plane>
</BoundaryConditions>
</DiffusionField>
</Steppable>
The syntax resembles the syntax for FlexibleDiffusionSolverFE. We
specify global diffusion constant by using <GlobalDiffusionConstant>
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:
<DiffusionCoefficient CellType="Red">0.0</DiffusionCoefficient>
Similar principles apply to decay constant and we use
<GlobalDecayConstant> tag to specify global decay coefficient and
<DecayCoefficient CellType="Red">0.0</DecayCoefficient>
to override global definition for regions occupied by Red cells.
We do not support <DeltaX>, <DeltaT> or <ExtraTimesPerMCS> tags.
Note
DiffusionSolverFE autoscales diffusion discretization
depending on the lattice so that <AutoscaleDiffusion/> 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:
<Steppable Type="DiffusionSolverFE">
with
<Steppable Type="DiffusionSolverFE_OpenCL">
Note
Depending on your computer hardware you may or may not be able to take advantage of GPU capabilities.