Cuboid#

class pinnx.geometry.Cuboid(xmin, xmax)[source]#
Parameters:
  • xmin – Coordinate of bottom left corner.

  • xmax – Coordinate of top right corner.

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.

  • where (Optional[Literal['back', 'front', 'left', 'right', 'bottom', 'top']]) – A string to specify which part of the boundary to compute the distance. “back”: x[0] = xmin[0], “front”: x[0] = xmax[0], “left”: x[1] = xmin[1], “right”: x[1] = xmax[1], “bottom”: x[2] = xmin[2], “top”: x[2] = xmax[2]. If None, compute the distance to the whole boundary. Default is None.

  • 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.

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

Compute the random point locations on the boundary.

uniform_boundary_points(n)[source]#

Compute the equi-spaced point locations on the boundary.

Parameters:

n – The number of points.