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 in var.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.