Skip to content

liblaf.apple.sim.dirichlet ¤

Modules:

Classes:

Dirichlet ¤

Bases: PyTreeMixin

Parameters:

  • dofs (DOFs, default: None ) –
  • values (Shaped[Array, dirichlet], default: None ) –

Methods:

Attributes:

dofs class-attribute instance-attribute ¤

dofs: DOFs = data(default=None)

size property ¤

size: int

values class-attribute instance-attribute ¤

values: Shaped[Array, ' dirichlet'] = array(default=None)

__pdoc__ ¤

__pdoc__(**kwargs) -> AbstractDoc

...

References
  1. wadler_lindig._definitions._pformat_dataclass()
Source code in src/liblaf/apple/sim/dirichlet/dirichlet.py
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
def from_mask(cls, mask: ArrayLike, values: ArrayLike) -> Self:
    mask = jnp.asarray(mask)
    if not mask.any():
        return cls()
    values = jnp.asarray(values)
    values = jnp.broadcast_to(values, mask.shape)
    mask = mask.ravel()
    values = values.ravel()
    dofs: DOFs = DOFs.from_mask(mask)
    values = values[mask]
    return cls(dofs=dofs, values=values)

@classmethod
@deprecated("Manually create Dirichlet conditions instead.")
def union(cls, *dirichlet: Self) -> Self:
    """...

    Note:
        Dirichlet conditions can only be merged if they are defined on the same DOFs. To avoid unexpected behavior, we do not implement this method.
    """
    dirichlet: list[Self] = [d for d in dirichlet if d.dofs is not None]
    if not dirichlet:
        return cls()
    dofs: DOFs = DOFs.union(*(d.dofs for d in dirichlet))
    values: Shaped[Array, " dirichlet"] = jnp.concat(

__repr__ ¤

__repr__() -> str
Source code in src/liblaf/apple/sim/dirichlet/dirichlet.py
43
44
)
return cls(dofs=dofs, values=values)

apply ¤

apply(x: ArrayLike) -> Array
Source code in src/liblaf/apple/sim/dirichlet/dirichlet.py
52
53
54
55
def apply(self, x: ArrayLike, /) -> Array:
    if self.dofs is None:
        return jnp.asarray(x)
    return self.dofs.set(x, self.values)

evolve ¤

evolve(**changes) -> Self
Source code in src/liblaf/apple/sim/dirichlet/dirichlet.py
46
47
@property
def size(self) -> int:

from_mask classmethod ¤

from_mask(mask: ArrayLike, values: ArrayLike) -> Self
Source code in src/liblaf/apple/sim/dirichlet/dirichlet.py
16
17
18
19
20
21
22
23
24
25
26
27
@classmethod
def from_mask(cls, mask: ArrayLike, values: ArrayLike) -> Self:
    mask = jnp.asarray(mask)
    if not mask.any():
        return cls()
    values = jnp.asarray(values)
    values = jnp.broadcast_to(values, mask.shape)
    mask = mask.ravel()
    values = values.ravel()
    dofs: DOFs = DOFs.from_mask(mask)
    values = values[mask]
    return cls(dofs=dofs, values=values)

mask ¤

mask(x: ArrayLike) -> Bool[Array, ' DOF']
Source code in src/liblaf/apple/sim/dirichlet/dirichlet.py
57
58
59
60
def mask(self, x: ArrayLike, /) -> Bool[Array, " DOF"]:
    if self.dofs is None:
        return jnp.asarray(x)
    return self.dofs.set(x, True)  # noqa: FBT003

tree_at ¤

tree_at(
    where: Callable[[Self], Node | Sequence[Node]],
    replace: Any | Sequence[Any] = ...,
    replace_fn: Callable[[Node], Any] = ...,
    is_leaf: Callable[[Any], bool] | None = None,
) -> Self
Source code in src/liblaf/apple/sim/dirichlet/dirichlet.py
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
        return 0
    return self.dofs.size

def apply(self, x: ArrayLike, /) -> Array:
    if self.dofs is None:
        return jnp.asarray(x)
    return self.dofs.set(x, self.values)

def mask(self, x: ArrayLike, /) -> Bool[Array, " DOF"]:
    if self.dofs is None:
        return jnp.asarray(x)
    return self.dofs.set(x, True)  # noqa: FBT003

def zero(self, x: ArrayLike, /) -> Array:
    if self.dofs is None:

union classmethod deprecated ¤

union(*dirichlet: Self) -> Self
Deprecated

Manually create Dirichlet conditions instead.

...

Note

Dirichlet conditions can only be merged if they are defined on the same DOFs. To avoid unexpected behavior, we do not implement this method.

Source code in src/liblaf/apple/sim/dirichlet/dirichlet.py
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
@classmethod
@deprecated("Manually create Dirichlet conditions instead.")
def union(cls, *dirichlet: Self) -> Self:
    """...

    Note:
        Dirichlet conditions can only be merged if they are defined on the same DOFs. To avoid unexpected behavior, we do not implement this method.
    """
    dirichlet: list[Self] = [d for d in dirichlet if d.dofs is not None]
    if not dirichlet:
        return cls()
    dofs: DOFs = DOFs.union(*(d.dofs for d in dirichlet))
    values: Shaped[Array, " dirichlet"] = jnp.concat(
        [jnp.asarray(d.values).ravel() for d in dirichlet]
    )
    return cls(dofs=dofs, values=values)

zero ¤

zero(x: ArrayLike) -> Array
Source code in src/liblaf/apple/sim/dirichlet/dirichlet.py
62
63
64
65
def zero(self, x: ArrayLike, /) -> Array:
    if self.dofs is None:
        return jnp.asarray(x)
    return self.dofs.set(x, 0.0)