multigrid#
- emg3d.solver.multigrid(model, sfield, efield, var, **kwargs)[source]#
Multigrid solver for three-dimensional electromagnetic diffusion.
Multigrid solver as presented in [Muld06], including semicoarsening and line relaxation as presented in [Muld07].
The electric field is stored in-place in
efield
.The number of multigrid cycles is stored in
var.it
.The current error (l2-norm) is stored in
var.l2
.The reference error (l2-norm of
sfield
) is stored invar.l2_refe
.
This function is the “heart” of the multigrid method, cycling through different grids, restricting and prolonging accordingly the grids, models, and fields.
This function is called by
emg3d.solver.solve
.- Parameters:
- modelVolumeModel
Input model; a
emg3d.models.Model
instance.- sfieldField
The source field; a
emg3d.fields.Field
instance.- efieldField
The electric field; a
emg3d.fields.Field
instance.- varMGParameters
A multigrid parameter instance used within
emg3d.solver.multigrid
.- level, new_cycmaxint, default: 0
Parameters internally used for recursion (do not use):
level
: current coarsening level;new_cycmax
: new maximum of multigrid cycles, takes care of V/W/F-cycling.