Skip to content

liblaf.apple.sim.field ¤

Modules:

Classes:

Field ¤

Bases: PyTreeMixin

Parameters:

  • region (Region, default: None ) –
  • values (Float[Array, points * dim], default: None ) –

Methods:

Attributes:

cells property ¤

cells: Integer[
    Array, "{self.n_cells} {self.element.n_points}"
]

dV property ¤

dV: Float[Array, 'c q']

dXdr property ¤

dXdr: Float[Array, 'c q J J']

dhdX property ¤

dhdX: Float[Array, 'c q a J']

dhdr property ¤

dhdr: Float[Array, 'q a J']

dim property ¤

dim: Sequence[int]

drdX property ¤

drdX: Float[Array, 'c q J J']

element property ¤

element: Element

geometry property ¤

geometry: Geometry

h property ¤

h: Float[Array, 'q a']

n_cells property ¤

n_cells: int

n_dofs property ¤

n_dofs: int

n_points property ¤

n_points: int

points property ¤

points: Integer[Array, '{self.n_points} {self.region.dim}']

quadrature property ¤

quadrature: Scheme

region class-attribute instance-attribute ¤

region: Region = data(default=None)

values class-attribute instance-attribute ¤

values: Float[Array, points * dim] = array(default=None)

__pdoc__ ¤

__pdoc__(**kwargs) -> AbstractDoc

...

References
  1. wadler_lindig._definitions._pformat_dataclass()
Source code in src/liblaf/apple/sim/field/field.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
class Field(struct.PyTreeMixin):
    region: Region = struct.data(default=None)
    values: Float[jax.Array, "points *dim"] = struct.array(default=None)

    @classmethod
    def from_region(cls, region: Region, values: ArrayLike) -> Self:
        values = jnp.asarray(values)
        values = jnp.broadcast_to(values, (region.n_points, *values.shape[1:]))
        chex.assert_shape(values, (region.n_points, ...))
        return cls(region=region, values=values)

    # region ArrayMixin

    def from_values(self, values: ArrayLike, /) -> Self:
        return self.evolve(values=values)

    # endregion ArrayMixin

    # region Structure

    @property
    def element(self) -> Element:
        return self.region.element

    @property

__repr__ ¤

__repr__() -> str
Source code in src/liblaf/apple/sim/field/field.py
43
return self.region.geometry

deformation_gradient ¤

deformation_gradient() -> Float[
    Array,
    "{self.n_cells} {self.quadrature.n_points} {self.region.dim} {self.region.dim}",
]
Source code in src/liblaf/apple/sim/field/field.py
115
116
117
118
119
120
121
122
@utils.jit_method(inline=True)
def deformation_gradient(
    self,
) -> Float[
    jax.Array,
    "{self.n_cells} {self.quadrature.n_points} {self.region.dim} {self.region.dim}",
]:
    return self.region.deformation_gradient(self.values)

evolve ¤

evolve(**changes) -> Self
Source code in src/liblaf/apple/sim/field/field.py
46
47
def quadrature(self) -> Scheme:
    return self.region.quadrature

from_region classmethod ¤

from_region(region: Region, values: ArrayLike) -> Self
Source code in src/liblaf/apple/sim/field/field.py
21
22
23
24
25
26
@classmethod
def from_region(cls, region: Region, values: ArrayLike) -> Self:
    values = jnp.asarray(values)
    values = jnp.broadcast_to(values, (region.n_points, *values.shape[1:]))
    chex.assert_shape(values, (region.n_points, ...))
    return cls(region=region, values=values)

from_values ¤

from_values(values: ArrayLike) -> Self
Source code in src/liblaf/apple/sim/field/field.py
30
31
def from_values(self, values: ArrayLike, /) -> Self:
    return self.evolve(values=values)

grad ¤

grad() -> Float[
    Array,
    "{self.n_cells} {self.quadrature.n_points} *dim {self.region.dim}",
]
Source code in src/liblaf/apple/sim/field/field.py
124
125
126
127
128
129
130
@utils.jit_method(inline=True)
def grad(
    self,
) -> Float[
    jax.Array, "{self.n_cells} {self.quadrature.n_points} *dim {self.region.dim}"
]:
    return self.region.gradient(self.values)

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/field/field.py
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# endregion Structure

# region Numbers

@property
def dim(self) -> Sequence[int]:
    return self.values.shape[1:]

@property
def n_cells(self) -> int:
    return self.region.n_cells

@property
def n_dofs(self) -> int:
    return self.values.size