Skip to content

liblaf.apple.warp.sim.energy.elastic.phace.func ¤

Classes:

Functions:

Params ¤

Attributes:

activation instance-attribute ¤

activation: array(dtype=vec6)

active_fraction instance-attribute ¤

active_fraction: array(dtype=float_)

lambda_ instance-attribute ¤

lambda_: array(dtype=float_)

mu instance-attribute ¤

mu: array(dtype=float_)

ParamsElem ¤

Attributes:

activation instance-attribute ¤

activation: vec6

active_fraction instance-attribute ¤

active_fraction: float_

lambda_ instance-attribute ¤

lambda_: float_

mu instance-attribute ¤

mu: float_

energy_density ¤

energy_density(F: mat33, params: ParamsElem)
Source code in src/liblaf/apple/warp/sim/energy/elastic/phace/func.py
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
@wp.func
@no_type_check
def energy_density(F: mat33, params: ParamsElem):  # -> float:
    _1 = type(F[0, 0])(1.0)
    _2 = type(F[0, 0])(2.0)
    J = _f.I3(F)  # float
    Psi_ARAP_active = arap_active.energy_density(
        F, arap_active.ParamsElem(activation=params.activation, mu=params.mu)
    )  # float
    Psi_ARAP_passive = arap.energy_density(F, arap.ParamsElem(mu=params.mu))  # float
    Psi_ARAP = (
        params.active_fraction * Psi_ARAP_active
        + (_1 - params.active_fraction) * Psi_ARAP_passive
    )  # float
    Psi_VP = params.lambda_ * math.square(J - _1)  # float
    Psi = _2 * Psi_ARAP + Psi_VP  # float
    return Psi

energy_density_hess_diag ¤

energy_density_hess_diag(
    F: mat33, dhdX: mat43, params: ParamsElem
)
Source code in src/liblaf/apple/warp/sim/energy/elastic/phace/func.py
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
@wp.func
@no_type_check
def energy_density_hess_diag(F: mat33, dhdX: mat43, params: ParamsElem):  # -> mat43:
    _1 = type(F[0, 0])(1.0)
    _2 = type(F[0, 0])(2.0)
    J = _f.I3(F)  # float
    g3 = _f.g3(F)  # mat33
    diag_arap_active = arap_active.energy_density_hess_diag(
        F, dhdX, arap_active.ParamsElem(activation=params.activation, mu=params.mu)
    )  # mat43
    diag_arap_passive = arap.energy_density_hess_diag(
        F, dhdX, arap.ParamsElem(mu=params.mu)
    )  # mat43
    diag_arap = (
        params.active_fraction * diag_arap_active
        + (_1 - params.active_fraction) * diag_arap_passive
    )  # mat43
    d2Psi_dI32 = _2 * params.lambda_  # float
    dPsi_dI3 = _2 * params.lambda_ * (J - _1)  # float
    h3_diag = _f.h3_diag(dhdX, g3)  # mat43
    h6_diag = _f.h6_diag(dhdX, F)  # mat43
    diag_vp = d2Psi_dI32 * h3_diag + dPsi_dI3 * h6_diag  # mat43
    diag = _2 * diag_arap + diag_vp  # mat43
    return diag

energy_density_hess_prod ¤

energy_density_hess_prod(
    F: mat33, p: mat43, dhdX: mat43, params: ParamsElem
)
Source code in src/liblaf/apple/warp/sim/energy/elastic/phace/func.py
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
@wp.func
@no_type_check
def energy_density_hess_prod(
    F: mat33, p: mat43, dhdX: mat43, params: ParamsElem
):  # -> mat43:
    _1 = type(F[0, 0])(1.0)
    _2 = type(F[0, 0])(2.0)
    J = _f.I3(F)  # float
    g3 = _f.g3(F)  # mat33
    prod_arap_active = arap_active.energy_density_hess_prod(
        F, p, dhdX, arap_active.ParamsElem(activation=params.activation, mu=params.mu)
    )  # mat43
    prod_arap_passive = arap.energy_density_hess_prod(
        F, p, dhdX, arap.ParamsElem(mu=params.mu)
    )  # mat43
    prod_arap = (
        params.active_fraction * prod_arap_active
        + (_1 - params.active_fraction) * prod_arap_passive
    )  # mat43
    d2Psi_dI32 = _2 * params.lambda_  # float
    dPsi_dI3 = _2 * params.lambda_ * (J - _1)  # float
    h3_prod = _f.h3_prod(p, dhdX, g3)  # mat43
    h6_prod = _f.h6_prod(p, dhdX, F)  # mat43
    prod_vp = d2Psi_dI32 * h3_prod + dPsi_dI3 * h6_prod  # mat43
    prod = _2 * prod_arap + prod_vp  # mat43
    return prod

energy_density_hess_quad ¤

energy_density_hess_quad(
    F: mat33, p: mat43, dhdX: mat43, params: ParamsElem
)
Source code in src/liblaf/apple/warp/sim/energy/elastic/phace/func.py
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
@wp.func
@no_type_check
def energy_density_hess_quad(
    F: mat33, p: mat43, dhdX: mat43, params: ParamsElem
):  # -> float:
    _1 = type(F[0, 0])(1.0)
    _2 = type(F[0, 0])(2.0)
    J = _f.I3(F)  # float
    g3 = _f.g3(F)  # mat33
    quad_arap_active = arap_active.energy_density_hess_quad(
        F, p, dhdX, arap_active.ParamsElem(activation=params.activation, mu=params.mu)
    )
    quad_arap_passive = arap.energy_density_hess_quad(
        F, p, dhdX, arap.ParamsElem(mu=params.mu)
    )
    quad_arap = (
        params.active_fraction * quad_arap_active
        + (_1 - params.active_fraction) * quad_arap_passive
    )
    d2Psi_dI32 = _2 * params.lambda_  # float
    dPsi_dI3 = _2 * params.lambda_ * (J - _1)  # float
    h3_quad = _f.h3_quad(p, dhdX, g3)  # float
    h6_quad = _f.h6_quad(p, dhdX, F)  # float
    quad_vp = d2Psi_dI32 * h3_quad + dPsi_dI3 * h6_quad  # float
    # if quad_vp < 0.0:
    #     wp.printf(
    #         "h3_quad = %f, h6_quad = %f, quad_vp = %f\n", h3_quad, h6_quad, quad_vp
    #     )
    quad = _2 * quad_arap + quad_vp  # float
    return quad

first_piola_kirchhoff_stress_tensor ¤

first_piola_kirchhoff_stress_tensor(
    F: mat33, params: ParamsElem
)
Source code in src/liblaf/apple/warp/sim/energy/elastic/phace/func.py
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
@wp.func
@no_type_check
def first_piola_kirchhoff_stress_tensor(F: mat33, params: ParamsElem):  # -> mat33:
    _1 = type(F[0, 0])(1.0)
    _2 = type(F[0, 0])(2.0)
    J = _f.I3(F)  # float
    g3 = _f.g3(F)  # mat33
    PK1_ARAP_active = arap_active.first_piola_kirchhoff_stress_tensor(
        F, arap_active.ParamsElem(activation=params.activation, mu=params.mu)
    )  # mat33
    PK1_ARAP_passive = arap.first_piola_kirchhoff_stress_tensor(
        F, arap.ParamsElem(mu=params.mu)
    )  # mat33
    PK1_ARAP = (
        params.active_fraction * PK1_ARAP_active
        + (_1 - params.active_fraction) * PK1_ARAP_passive
    )  # mat33
    PK1_VP = _2 * params.lambda_ * (J - _1) * g3  # mat33
    PK1 = _2 * PK1_ARAP + PK1_VP  # mat33
    return PK1

get_cell_params ¤

get_cell_params(params: Params, cid: int) -> ParamsElem
Source code in src/liblaf/apple/warp/sim/energy/elastic/phace/func.py
155
156
157
158
159
160
161
162
163
164
@wp.func
@no_type_check
def get_cell_params(params: Params, cid: int) -> ParamsElem:
    cell_params = ParamsElem(
        activation=params.activation[cid],
        active_fraction=params.active_fraction[cid],
        lambda_=params.lambda_[cid],
        mu=params.mu[cid],
    )
    return cell_params