.. _linear_system:

#############
Linear System
#############

To :ref:`treat the diffusive terms implicitly <implicit_treatment>`, we need to solve a linear system:

.. math::

    \left\{
        1
        -
        C
        \frac{1}{J}
        \dif{}{\gcs{i}}
        \left(
            \frac{J}{\sfact{i}}
            \frac{1}{\sfact{i}}
            \dif{}{\gcs{i}}
        \right)
    \right\}
    p
    =
    q,

where :math:`C` is a coefficient (e.g., coming from the diffusivity and time-step sizes).

*****************
Laplace Operators
*****************

Note that linear systems involve discrete Laplace operators:

.. math::

    \frac{1}{J}
    \dif{}{\gcs{i}}
    \left(
        \frac{J}{\sfact{i}}
        \frac{1}{\sfact{i}}
        \dif{}{\gcs{i}}
    \right),

which are pre-computed as follows.

Wall-normal velocity:

.. myliteralinclude:: /../../src/fluid/predict/ux.c
    :language: c
    :tag: vector laplacian in x

.. myliteralinclude:: /../../src/fluid/predict/ux.c
    :language: c
    :tag: vector laplacian in y

.. myliteralinclude:: /../../src/fluid/predict/ux.c
    :language: c
    :tag: vector laplacian in z

Stream-wise velocity:

.. myliteralinclude:: /../../src/fluid/predict/uy.c
    :language: c
    :tag: vector laplacian in x

.. myliteralinclude:: /../../src/fluid/predict/uy.c
    :language: c
    :tag: vector laplacian in y

.. myliteralinclude:: /../../src/fluid/predict/uy.c
    :language: c
    :tag: vector laplacian in z

Span-wise velocity:

.. myliteralinclude:: /../../src/fluid/predict/uz.c
    :language: c
    :tag: vector laplacian in x

.. myliteralinclude:: /../../src/fluid/predict/uz.c
    :language: c
    :tag: vector laplacian in y

.. myliteralinclude:: /../../src/fluid/predict/uz.c
    :language: c
    :tag: vector laplacian in z

Temperature:

.. myliteralinclude:: /../../src/fluid/predict/t.c
    :language: c
    :tag: scalar laplacian in x

.. myliteralinclude:: /../../src/fluid/predict/t.c
    :language: c
    :tag: scalar laplacian in y

.. myliteralinclude:: /../../src/fluid/predict/t.c
    :language: c
    :tag: scalar laplacian in z

**********************
Solving Linear Systems
**********************

Wall-normal velocity:

.. myliteralinclude:: /../../src/fluid/predict/ux.c
    :language: c
    :tag: solve linear systems in x

.. myliteralinclude:: /../../src/fluid/predict/ux.c
    :language: c
    :tag: solve linear systems in y

.. myliteralinclude:: /../../src/fluid/predict/ux.c
    :language: c
    :tag: solve linear systems in z

Stream-wise velocity:

.. myliteralinclude:: /../../src/fluid/predict/uy.c
    :language: c
    :tag: solve linear systems in x

.. myliteralinclude:: /../../src/fluid/predict/uy.c
    :language: c
    :tag: solve linear systems in y

.. myliteralinclude:: /../../src/fluid/predict/uy.c
    :language: c
    :tag: solve linear systems in z

Span-wise velocity:

.. myliteralinclude:: /../../src/fluid/predict/uz.c
    :language: c
    :tag: solve linear systems in x

.. myliteralinclude:: /../../src/fluid/predict/uz.c
    :language: c
    :tag: solve linear systems in y

.. myliteralinclude:: /../../src/fluid/predict/uz.c
    :language: c
    :tag: solve linear systems in z

Temperature:

.. myliteralinclude:: /../../src/fluid/predict/t.c
    :language: c
    :tag: solve linear systems in x

.. myliteralinclude:: /../../src/fluid/predict/t.c
    :language: c
    :tag: solve linear systems in y

.. myliteralinclude:: /../../src/fluid/predict/t.c
    :language: c
    :tag: solve linear systems in z

We need to solve :ref:`tri-diagonal matrix <tdm>`.