scimba_torch.plots.plots_nd

Plotting functions (generic in geometric dimension) for approximation spaces.

Functions

plot_abstract_approx_space(space, spatial_domain)

Plot an AbstractApproxSpace on its domain.

plot_abstract_approx_spaces(spaces, ...[, ...])

Plot a sequence of AbstractApproxSpaces on their domains.

plot_abstract_approx_space(space, spatial_domain, parameters_domain=[], time_domain=[], velocity_domain=None, **kwargs)[source]

Plot an AbstractApproxSpace on its domain.

Parameters:
  • space (AbstractApproxSpace) – the space to be plot

  • spatial_domain (VolumetricDomain | Cuboid) – the geometric domain on which space is defined

  • parameters_domain (Sequence[Sequence[float]]) – the domain of parameters of space, [] meaning no parameters,

  • time_domain (Sequence[float]) – the time domain of space, [] meaning space is time-independent,

  • velocity_domain (SurfacicDomain | VolumetricDomain | None) – the velocity domain of space, None meaning space has no velocity arguments,

  • **kwargs – arbitrary keyword arguments

Keyword Arguments:
  • parameters_values – a (list of) point(s) in the parameters domain, or “mean” or “random”, defaults to “mean”,

  • time_values – a (list of) time(s) in the time domain, or “initial” or “final”, defaults to “final”,

  • velocity_values – a (list of) point(s) in the velocity domain,

  • components – the list of components of the space to be plot, defaults to the list of all the components,

  • loss – a GenericLosses object to be plot,

  • residual – an AbstractPDE object with a residual attribute,

  • derivatives – a list of strings representing the derivatives to be plot, for instance “uxx”; defaults to [],

  • solution – a callable depending on the same args as space to be plot,

  • error – plot the absolute error with respect to the given solution,

  • cuts – for 2D geometric dim, a list of affine spaces of dimension 1, each given as a tuple of 1 point and a basis

  • title – a str

  • ... – see examples

Implemented only for 1 and 2 dimensional spaces.

Raises:
  • ValueError – some input arguments are not correctly formated

  • KeyError – bad key in **kwargs

  • NotImplementedError – some option combinations are not implemented yet

Examples

>>> import matplotlib.pyplot as plt
>>> from scimba_torch.plots.plots_nd import plot_AbstractApproxSpace
>>> ...
>>> def exact_sol(x: LabelTensor, mu: LabelTensor):
        x1, x2 = x.get_components()
        mu1 = mu.get_components()
        return mu1 * torch.sin(2.0 * torch.pi * x1) *
                     torch.sin(2.0 * torch.pi * x2)
>>> plot_AbstractApproxSpace(
        pinns.space,                   #the approximation space
        domain_x,                      #the geometric domain
        [[1.0, 2.0]],                  #the parameters domain
        loss=pinns.losses,             #the loss
        residual=pde,                  #the residual
        solution=exact_sol,            #the reference solution
        error=exact_sol,               #the ref. sol. to plot absolute error
        derivatives=["ux", "uy"],      #a list of string for derivatives
        cuts=[                         #a list of 2 1D cuts
            ([0.0, 0.0], [-0.5, 0.5]),
            ([0.0, 0.2], [0.0, 1.0]),
        ],
        draw_contours=True,            #whether to draw level lines
        n_drawn_contours=20,           #number of level lines
        title="Learned solution to 2D Laplacian in strong
        form with weak boundary conditions",
    )
>>> plt.show()
plot_abstract_approx_spaces(spaces, spatial_domains, parameters_domains=([],), time_domains=([],), velocity_domains=None, **kwargs)[source]

Plot a sequence of AbstractApproxSpaces on their domains.

Parameters:
  • spaces (AbstractApproxSpace | Sequence[AbstractApproxSpace]) – the (sequence of) space(s) to be plot

  • spatial_domains (VolumetricDomain | Cuboid | Sequence[VolumetricDomain | Cuboid]) – the (sequence of) geometric domain(s) on which spaces are defined

  • parameters_domains (Sequence[Sequence[float]] | Sequence[Sequence[Sequence[float]]]) – the (sequence of) domain(s) of parameters of space(s), ([],) meaning no parameters,

  • time_domains (Sequence[float] | Sequence[Sequence[float]]) – the (sequence of) time domain(s) of space(s), ([],) meaning spaces is time-independent,

  • velocity_domains (SurfacicDomain | None | Sequence[SurfacicDomain | None]) – the the (sequence of) velocity domain(s) of space(s), None meaning space has no velocity arguments,

  • **kwargs – arbitrary keyword arguments

Keyword Arguments:
  • title – the main title of the figure

  • titles – a sequence of titles (1 for each approximation space)

  • ... – same keyword arguments as in plot_AbstractApproxSpace, are to be given as sequences of n values, where n is the number of spaces; sequences of n same values can be shortcut by the value

Return type:

None

Implemented only for 1 and 2 dimensional spaces

Raises:
  • ValueError – some input arguments are not correctly formated

  • KeyError – bad key in **kwargs

  • NotImplementedError – some option combinations are not implemented yet

Examples

>>> import matplotlib.pyplot as plt
>>> from scimba_torch.plots.plots_nd import plot_AbstractApproxSpaces
>>> ...
>>> def exact_sol(x: LabelTensor, mu: LabelTensor):
        x1, x2 = x.get_components()
        mu1 = mu.get_components()
        return mu1 * torch.sin(2.0 * torch.pi * x1) *
                     torch.sin(2.0 * torch.pi * x2)
>>> plot_AbstractApproxSpaces(
        (pinns.space, pinns2.space, pinns3.space,),# a sequence of AbstractSpace
        domain_x,               # shortcut for (domain_x,domain_x,domain_x,)
        ((1.0, 1.0 + 1e-5),),   # the same parameters domain for the 3 spaces
        loss=( pinns.losses, pinns2.losses, pinns3.losses, ),
        residual=( pinns.pde, pinns2.pde, pinns3.pde, ),
        error=exact_sol,
        draw_contours=True,
        n_drawn_contours=20,
        parameters_values="random",
    )
>>> plt.show()