Hypercube#

class pinnx.geometry.Hypercube(xmin, xmax)[source]#
boundary_constraint_factor(x, smoothness='C0', where=None, inside=True)[source]#

Compute the hard constraint factor at x for the boundary.

This function is used for the hard-constraint methods in Physics-Informed Neural Networks (PINNs). The hard constraint factor satisfies the following properties:

  • The function is zero on the boundary and positive elsewhere.

  • The function is at least continuous.

In the ansatz boundary_constraint_factor(x) * NN(x) + boundary_condition(x), when x is on the boundary, boundary_constraint_factor(x) will be zero, making the ansatz be the boundary condition, which in turn makes the boundary condition a “hard constraint”.

Parameters:
  • x – A 2D array of shape (n, dim), where n is the number of points and dim is the dimension of the geometry. Note that x should be a tensor type of backend (e.g., tf.Tensor or torch.Tensor), not a numpy array.

  • smoothness (Literal['C0', 'C0+', 'Cinf']) –

    A string to specify the smoothness of the distance function, e.g., “C0”, “C0+”, “Cinf”. “C0” is the least smooth, “Cinf” is the most smooth. Default is “C0”.

    • C0

    The distance function is continuous but may not be non-differentiable. But the set of non-differentiable points should have measure zero, which makes the probability of the collocation point falling in this set be zero.

    • C0+

    The distance function is continuous and differentiable almost everywhere. The non-differentiable points can only appear on boundaries. If the points in x are all inside or outside the geometry, the distance function is smooth.

    • Cinf

    The distance function is continuous and differentiable at any order on any points. This option may result in a polynomial of HIGH order.

    • WARNING

    In current implementation, numerical underflow may happen for high dimensionalities when smoothness=”C0+” or smoothness=”Cinf”.

  • where (None) – This option is currently not supported for Hypercube.

  • inside (bool) – The x is either inside or outside the geometry. The cases where there are both points inside and points outside the geometry are NOT allowed. NOTE: currently only support inside=True.

Returns:

A tensor of a type determined by the backend, which will have a shape of (n, 1). Each element in the tensor corresponds to the computed distance value for the respective point in x.

boundary_normal(x)[source]#

Compute the unit normal at x for Neumann or Robin boundary conditions.

Parameters:

x – A 2D array of shape (n, dim), where n is the number of points and dim is the dimension of the geometry.

inside(x)[source]#

Check if x is inside the geometry (including the boundary).

Parameters:

x – A 2D array of shape (n, dim), where n is the number of points and dim is the dimension of the geometry.

Returns:

A boolean array of shape (n,) where each element is True if the point is inside the geometry.

on_boundary(x)[source]#

Check if x is on the geometry boundary.

Parameters:

x – A 2D array of shape (n, dim), where n is the number of points and dim is the dimension of the geometry.

Returns:

A boolean array of shape (n,) where each element is True if the point is on the boundary.

periodic_point(x, component)[source]#

Compute the periodic image of x for periodic boundary condition.

Parameters:
  • x – A 2D array of shape (n, dim), where n is the number of points and dim is the dimension of the geometry.

  • component – The component of the periodic direction.

random_boundary_points(n, random='pseudo')[source]#

Compute the random point locations on the boundary.

random_points(n, random='pseudo')[source]#

Compute the random point locations in the geometry.

Parameters:
  • n – The number of points.

  • random – The random distribution. One of the following: “pseudo” (pseudorandom), “LHS” (Latin hypercube sampling), “Halton” (Halton sequence), “Hammersley” (Hammersley sequence), or “Sobol” (Sobol sequence

uniform_boundary_points(n)[source]#

Compute the equi-spaced point locations on the boundary.

Parameters:

n – The number of points.

uniform_points(n, boundary=True)[source]#

Compute the equi-spaced point locations in the geometry.

Parameters:
  • n – The number of points.

  • boundary – If True, include the boundary points.