Dynamic3D
---------

.. xml:tag:: <thermal solver="Dynamic3D"> [Dynamic3D]

   Corresponding Python class: :py:class:`thermal.dynamic.Dynamic3D`.

   :attr required name: Solver name.

   .. xml:contents::

      .. xml:tag:: <geometry> [in thermal.Dynamic3D]

         Geometry for use by this solver.

         :attr required ref: Name of a Cartesian3D geometry defined in the :xml:tag:`<geometry>` section.

      .. xml:tag:: <mesh> [in thermal.Dynamic3D]

         Rectangular3D mesh used by this solver.

         :attr required ref: Name of a Rectangular3D mesh defined in the :xml:tag:`<grids>` section.

      .. xml:tag:: <temperature> [in thermal.Dynamic3D]

         Temperature boundary conditions. See subsection :ref:`sec-xpl-Boundary-conditions`.

      .. xml:tag:: <loop> [in thermal.Dynamic3D]

         Configuration of the time-evolution loop.

         :attr inittemp: Initial temperature used for the first computation. (float (K), default 300 K)
         :attr timestep: Single-iteration time step. (float (ns), default 0.1 ns)
         :attr rebuildfreq: Number of iterations until the whole matrix is rebuilt. The larger this number is, the more efficient computations are, however it may be less accurate is material parameters strongly depend on temperature. If this parameter is set to zero, matrix is never rebuilt. (int, default 0)
         :attr logfreq: Number of iterations until the computations progress is reported. (int, default 500)

      .. xml:tag:: <matrix> [in thermal.Dynamic3D]

         Matrix solver configuration.

         :attr algorithm: Algorithm used for solving set of linear positive-definite equations. (\ ``cholesky``\ , \ ``gauss``\ , or \ ``iterative``\ , default is \ ``iterative``\ )
         :attr methodparam: Mid-step parameter for implicit finite-difference time discretization. Defaults to ½, which results in the Crank-Nicholson method. 0 makes the method explicit, while 1 results in backward Euler method. (float, default 0.5)
         :attr lumping: This attribute determines whether the mass matrix is lumped or non-lumped (consistent). (bool, default is \ ``yes``\ )

         .. xml:tag:: <iterative> [in thermal.Dynamic3D]

            Parameters for iterative matrix solver. PLaSK uses `NSPCG`_ package for performing iterations. Please refer to its documentation for explanation of most of the settings.

            .. _NSPCG: https://web.ma.utexas.edu/CNA/NSPCG/

            :attr maxit: Maximum number of iterations. (int, default 1000)
            :attr maxerr: Maximum iteration error. (float, default 1e-6)
            :attr noconv: Desired behavior if the iterative solver does not converge. (\ ``error``\ , \ ``warning``\ , or \ ``continue``\ , default is \ ``warning``\ )
            :attr accelerator: Accelerator used for iterative matrix solver. (\ ``cg``\ , \ ``si``\ , \ ``sor``\ , \ ``srcg``\ , \ ``srsi``\ , \ ``basic``\ , \ ``me``\ , \ ``cgnr``\ , \ ``lsqr``\ , \ ``odir``\ , \ ``omin``\ , \ ``ores``\ , \ ``iom``\ , \ ``gmres``\ , \ ``usymlq``\ , \ ``usymqr``\ , \ ``landir``\ , \ ``lanmin``\ , \ ``lanres``\ , \ ``cgcr``\ , or \ ``bcgs``\ , default is \ ``cg``\ )
            :attr preconditioner: Preconditioner used for iterative matrix solver. (\ ``rich``\ , \ ``jac``\ , \ ``ljac``\ , \ ``ljacx``\ , \ ``sor``\ , \ ``ssor``\ , \ ``ic``\ , \ ``mic``\ , \ ``lsp``\ , \ ``neu``\ , \ ``lsor``\ , \ ``lssor``\ , \ ``llsp``\ , \ ``lneu``\ , \ ``bic``\ , \ ``bicx``\ , \ ``mbic``\ , or \ ``mbicx``\ , default is \ ``ic``\ )
            :attr nfact: This number initializes the frequency of partial factorizations. It specifies the number of linear system evaluations between factorizations. The default value is 1, which means that a factorization is performed at every iteration. (int, default 10)
            :attr ndeg: Degree of the polynomial to be used for the polynomial preconditioners. (int, default 1)
            :attr lvfill: Level of fill-in for incomplete Cholesky preconditioners. Increasing this value will result in more accurate factorizations at the expense of increased memory usage and factorization time. (int, default 0)
            :attr ltrunc: Truncation bandwidth to be used when approximating the inverses of matrices with dense banded matrices. An increase in this value means a more accurate factorization at the expense of increased storage. (int, default 0)
            :attr omega: Relaxation parameter. (float, default 1.0)
            :attr nsave: The number of old vectors to be saved for the truncated acceleration methods. (int, default 5)
            :attr nrestart: The number of iterations between restarts for the restarted acceleration methods. (int, default 100000)

            .. list-table:: Preconditioner choices:

             * - ``rich``

               - Richardson's method

             * - ``jac``

               - Jacobi method

             * - ``ljac``

               - Line Jacobi method

             * - ``ljacx``

               - Line Jacobi method (approx. inverse)

             * - ``sor``

               - Successive Overrelaxation

             * - ``ssor``

               - Symmetric SOR (can be used only with SOR accelerator)

             * - ``ic``

               - Incomplete Cholesky (default)

             * - ``mic``

               - Modified Incomplete Cholesky

             * - ``lsp``

               - Least Squares Polynomial

             * - ``neu``

               - Neumann Polynomial

             * - ``lsor``

               - Line SOR

             * - ``lssor``

               - Line SSOR

             * - ``llsp``

               - Line Least Squares Polynomial

             * - ``lneu``

               - Line Neumann Polynomial

             * - ``bic``

               - Block Incomplete Cholesky (ver. 1)

             * - ``bicx``

               - Block Incomplete Cholesky (ver. 2)

             * - ``mbic``

               - Modified Block Incomplete Cholesky (ver. 1)

             * - ``mbicx``

               - Modified Block Incomplete Cholesky (ver. 2)

            

            .. list-table:: Accelerator choices:

             * - ``cg``

               - Conjugate Gradient acceleration (default)

             * - ``si``

               - Chebyshev acceleration or Semi-Iteration

             * - ``sor``

               - Successive Overrelaxation (can use only SOR preconditioner)

             * - ``srcg``

               - Symmetric Successive Overrelaxation Conjugate Gradient Algorithm (can use only SSOR preconditioner)

             * - ``srsi``

               - Symmetric Successive Overrelaxation Semi-Iteration Algorithm (can use only SSOR preconditioner)

             * - ``basic``

               - Basic Iterative Method

             * - ``me``

               - Minimal Error Algorithm

             * - ``cgnr``

               - Conjugate Gradient applied to the Normal Equations

             * - ``lsqr``

               - Least Squares Algorithm

             * - ``odir``

               - ORTHODIR, a truncated/restarted method useful for nonsymmetric systems of equations

             * - ``omin``

               - ORTHOMIN, a common truncated/restarted method used for nonsymmetric systems

             * - ``ores``

               - ORTHORES, another truncated/restarted method for nonsymmetric systems

             * - ``iom``

               - Incomplete Orthogonalization Method

             * - ``gmres``

               - Generalized Minimal Residual Method

             * - ``usymlq``

               - Unsymmetric LQ

             * - ``usymqr``

               - Unsymmetric QR

             * - ``landir``

               - Lanczos/ORTHODIR

             * - ``lanmin``

               - Lanczos/ORTHOMIN or Biconjugate Gradient Method

             * - ``lanres``

               - Lanczos/ORTHORES or “two-sided” Lanczos Method

             * - ``cgcr``

               - Constrained Generalized Conjugate Residual Method

             * - ``bcgs``

               - Biconjugate Gradient Squared Method
