Skip to content

Time-Harmonic Magnetic Solver

The TimeHarmonicMagneticSolver controls how the Time-Harmonic Magnetic Model is solved. The complex-valued linear system can be solved either iteratively (the default) or with a direct solver, and an under-relaxation factor handles the outer iteration when materials are nonlinear. For the underlying method, see Linear Solvers and Newton Form.

The solver is not created directly; every TimeHarmonicMagneticModel owns one. Access it with get_solver():

solver = time_harmonic_magnetic_model.get_solver()

Linear solver controls

set_direct_solver

solver.set_direct_solver(use_direct_solver: bool)

Select the linear solver. When False (default) an iterative solver is used; when True a direct solver is used instead. A direct solver is robust for smaller problems, while the iterative solver scales better to large meshes.

set_relative_tolerance

solver.set_relative_tolerance(relative_tolerance: float)

Relative convergence tolerance of the iterative solver: the iteration stops once the residual norm has dropped by this factor relative to the initial residual. Default 1e-6.

set_absolute_tolerance

solver.set_absolute_tolerance(absolute_tolerance: float)

Absolute residual floor of the iterative solver. Default 0.0.

set_iteration_number

solver.set_iteration_number(iteration_number: int)

Maximum number of iterations of the iterative solver. Default 50.

Nonlinear iteration controls

set_under_relaxation_factor

solver.set_under_relaxation_factor(under_relaxation_factor: float)

Damping applied to the outer update when materials are nonlinear. A value in \((0, 1]\); values below 1 add damping and can stabilise strongly nonlinear cases at the cost of more iterations. Default 1.0 (no damping).

set_frozen

solver.set_frozen(is_frozen: bool)

Freeze the model state. When True, the solve returns immediately without reassembling or updating — the magnetic field is held fixed. This is useful in co-simulations where the magnetic solution should stay constant while another physics advances. Default False.

set_verbose

solver.set_verbose(verbose: bool)

Enable detailed per-iteration output from the solver. Default False.

Diagnostics

get_residual_history

residuals = solver.get_residual_history()

Return the residual norm recorded at each iteration of the most recent solve, useful for inspecting convergence behaviour.

Examples

Direct solver

For a robust solve on a moderate mesh:

solver = time_harmonic_magnetic_model.get_solver()
solver.set_direct_solver(True)
solver.set_verbose(True)

Tighter iterative tolerance

solver = time_harmonic_magnetic_model.get_solver()
solver.set_iteration_number(250)
solver.set_relative_tolerance(1.0e-10)

Inspecting convergence

residuals = time_harmonic_magnetic_model.get_solver().get_residual_history()