.. _FDME_SOLVER_Namelist: .. toctree:: :maxdepth: 1 FDME_SOLVER Namelist =========================== This namelist specifies the parameters that pertain to the frequency-domain solver for the time-harmonic Maxwell's equations. In this form of the equations the electric field is represented as :math:`\mathcal{E}(x,t) = \operatorname{Re}\{E(x)e^{-i\omega t}\}` where :math:`\omega` is the angular frequency and :math:`E(x)` is a complex-valued phasor that satisfies the equation .. math:: \nabla\times\mu^{-1}\nabla\times E-\omega^2\epsilon E-i\omega\sigma E = 0. The equation is solved on the tetrahedral mesh specified by the :ref:`EM_MESH` namelist, which is generally different than the mesh used for heat transfer. Boundary conditions are defined using :ref:`ELECTROMAGNETIC_BC` namelists. This solver, which is not currently a standalone physics model, is used by the induction heating and microwave heating physics models; see the :ref:`INDUCTION_HEATING` and :ref:`MICROWAVE_HEATING` namelists. .. caution:: The electromagnetic models assume SI units by default. If you want to use a different system of units, you must assign appropriate values to the PHYSICAL_CONSTANTS namelist variables :ref:`vacuum_permittivity` (:math:`\epsilon_0`) and :ref:`vacuum_permeability` (:math:`\mu_0`). Namelist Variables ------------------ .. contents:: :local: solver_type ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The type of linear solver used to solve the discrete system. The options are: .. list-table:: :widths: 5 50 :header-rows: 1 :class: tight-table * - Value - Description * - **"minres"** - Iterative CS-MINRES\ :footcite:`choi2014` solver for complex symmetric linear systems. This is the default. * - **"mumps"** - MUMPS\ :footcite:`MUMPS` direct linear solver graphics_output ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ A flag that enables the output of the solution for graphics visualization. :Type: logical :Default: ``.false.`` :Notes: When enabled, the solver generates its own graphics data file in VTKHDF format, which is compatible with the ParaView visualization software. The solver produces a separate sequentially-numbered file for each use, identifiable by the ``.vtkhdf`` suffix. This setting does not affect the standard graphics output generated by Truchas, which is configured elsewhere. Since these files are simply HDF5 files structured to the VTKHDF specification, they can also be used with generic HDF5 tools. print_level ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Controls the verbosity of the solver. :Type: integer :Default: 1 :Valid Values: :math:`\ge0` :Notes: At level 1 or higher the final residual error is output. When using the CS-MINRES iterative solver, the final number of iterations is also written at level 1, and level 2 adds periodic convergence information during the iteration. use_mixed_form (experimental) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Change the solver from the default formulation to the mixed formulation. The mixed formulation enforces :math:`\nabla\cdot D = 0` using Lagrange multipliers, expanding the system size. This ensures the system remains well posed as the frequency becomes small :footcite:`greif_preconditioners_2007` :footcite:`li_parallel_2012`. :Type: logical :Default: ``.false.`` .. tip:: This should be disabled for microwave problems, but enabled when using the FDME solver for induction heating problems, since those use low frequencies where the frequency-domain Maxwell equations are no longer coercive. MINRES Parameters ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ rel_tol +++++++ The convergence tolerance :math:`\eta`. The CS-MINRES iteration is considered converged when the residual :math:`r` satisfies :math:`\lVert{r}\rVert<\eta\lVert{r_0}\rVert`, where :math:`r_0` is the initial residual. :Type: real :Default: :math:`10^{-8}` :Valid Values: :math:`(0, 0.1)` :Notes: The residual is the residual of the *preconditioned* linear system. max_iter ++++++++ The maximum number of CS-MINRES iterations allowed. It is a fatal error if convergence is not attained within this number of iterations. :Type: integer :Default: 100,000 :Valid Values: > 0 MINRES Preconditioner Parameters ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The preconditioner is based on the real part of the complex symmetric system matrix. It has the form :math:`A-B` where :math:`A` comes from the curl-curl term and is positive semi-definite, and :math:`B` comes from the :math:`\omega^2\epsilon` term and is positive definite. The indefiniteness of this matrix poses a challenge to constructing positive definite preconditioners required by CS-MINRES. precon_type +++++++++++ Selects the type of preconditioner to use. The options are: .. list-table:: :widths: 5 50 :header-rows: 1 :class: tight-table * - Value - Description * - **"ssor"** - Parallel block SSOR. This is the default. * - **"boomer"** - Hypre BoomerAMG parallel algebraic multigrid solver. More costly than SSOR. * - **"none"** - No preconditioning. Only useful for testing/debugging. pc_damping (experimental) +++++++++++++++++++++++++ If a value :math:`\alpha` is specified for this optional parameter, the preconditioner will be based on the damped matrix :math:`A-(1-\alpha)B` rather than the standard :math:`A-B`. The intent is to shift the matrix to something less indefinite, or even positive definite. The use of SSOR with under-relaxation is much more effective; use it instead. ssor_num_cycles +++++++++++++++ The number of SSOR cycles to use. :Type: integer :Default: 1 :Valid values: :math:`\ge1` :Notes: Each cycle consists of a forward and backward sweep. Each additional cycle will generally improve the preconditioner, resulting in faster convergence and fewer required iterations, but with increased computational cost per iteration. The optimal number giving the fastest time to solution will depend on the characteristics and size of the problem, and must be determined empirically. ssor_omega ++++++++++ The SSOR relaxation factor :math:`\omega`. :Type: real :Default: 1.0 :Valid values: :math:`>0.0` :Notes: While SSOR is usually associated with over-relaxation, :math:`\omega>1`, the characteristics of this matrix will likely require under-relaxation, :math:`0<\omega<1`. Start with the default :math:`\omega=1`. If CS-MINRES fails with the message "preconditioner is not positive definite", using a small enough :math:`\omega<1` should yield a positive definite preconditioner. But note that the smaller the value, the less effective the preconditioner will be. boomer_num_cycles +++++++++++++++++ The number of BoomerAMG cycles to use. :Type: integer :Default: 1 Additional BoomerAMG parameters +++++++++++++++++++++++++++++++ Hypre BoomerAMG supports a great many configuration options, some which may be set using this namelist. The default configuration is generally suitable, but may be modified using the following variables. Refer to the HYPRE documentation\ :footcite:`hypre-manual` on BoomerAMG for details. * boomer_strong_threshold (real, default 0.5) * boomer_coarsen_type (integer, default 10) * boomer_interp_type (integer, default 6) * boomer_relax_down_type (integer, default 13) * boomer_relax_up_type (integer, default 14) * boomer_print_level, boomer_debug_level, boomer_logging_level ---- .. footbibliography::