Stable Neo-Hookean Flesh Simulation
BREANNAN SMITH, Pixar Animation Studios
FERNANDO DE GOES, Pixar Animation Studios
THEODORE KIM, Pixar Animation Studios

4 ENERGY EIGENANALYSIS

4.2 First Piola-Kirchhoff Stress (PK1)

We sart from the PK1 for Eqn. 14,

$$\DeclareMathOperator*{\argmax}{arg\,max} \DeclareMathOperator*{\argmin}{arg\,min} \begin{align*} \idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, '$P(F)$', 'Stable', 'def', false, '')", "id":"Stable-$P(F)$", "sym":"$P(F)$", "func":"Stable", "localFunc":"", "type":"def", "case":"equation"} }{ {P(F)} } & = \idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, 'μ', 'Stable', 'use', false, '')", "id":"Stable-μ", "sym":"μ", "func":"Stable", "localFunc":"", "type":"use", "case":"equation"} }{ {\mathit{μ}} }\left( 1 - \frac{1}{\idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, '$I_C$', 'Stable', 'use', false, '')", "id":"Stable-$I_C$", "sym":"$I_C$", "func":"Stable", "localFunc":"", "type":"use", "case":"equation"} }{ {I_C} } + 1} \right)\idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, 'F', 'Stable', 'use', false, '')", "id":"Stable-F", "sym":"F", "func":"Stable", "localFunc":"", "type":"use", "case":"equation"} }{ {\mathit{F}} } + \idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, 'λ', 'Stable', 'use', false, '')", "id":"Stable-λ", "sym":"λ", "func":"Stable", "localFunc":"", "type":"use", "case":"equation"} }{ {\mathit{λ}} }\left( \idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, 'J', 'Stable', 'use', false, '')", "id":"Stable-J", "sym":"J", "func":"Stable", "localFunc":"", "type":"use", "case":"equation"} }{ {\mathit{J}} } - \idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, 'α', 'Stable', 'use', false, '')", "id":"Stable-α", "sym":"α", "func":"Stable", "localFunc":"", "type":"use", "case":"equation"} }{ {\mathit{α}} } \right)\idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, '$\\\\frac{\\\\partial J}{\\\\partial F}$', 'Stable', 'use', false, '')", "id":"Stable-$\\\\frac{\\\\partial J}{\\\\partial F}$", "sym":"$\\\\frac{\\\\partial J}{\\\\partial F}$", "func":"Stable", "localFunc":"", "type":"use", "case":"equation"} }{ {\frac{\partial J}{\partial F}} }\\\eqlabel{ {"onclick":"event.stopPropagation(); onClickEq(this, 'Stable', ['$\\\\frac{\\\\partial J}{\\\\partial F}$', 'α', 'J', 'μ', 'F', '$I_C$', 'λ', '$P(F)$'], false, [], [], 'YCRQKEYpJGAgPSDOvCgxLTEvKGAkSV9DJGArMSkpRiArIM67KEotIM6xKWAkXGZyYWN7XHBhcnRpYWwgSn17XHBhcnRpYWwgRn0kYA==');"} }{} \end{align*} \tag{18}\label{18}$$

where $\DeclareMathOperator*{\argmax}{arg\,max} \DeclareMathOperator*{\argmin}{arg\,min} \begin{align*} \idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, 'α', 'Stable', 'def', false, '')", "id":"Stable-α", "sym":"α", "func":"Stable", "localFunc":"", "type":"def", "case":"equation"} }{ {\mathit{α}} } & = 1 + \frac{\idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, 'μ', 'Stable', 'use', false, '')", "id":"Stable-μ", "sym":"μ", "func":"Stable", "localFunc":"", "type":"use", "case":"equation"} }{ {\mathit{μ}} }}{\idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, 'λ', 'Stable', 'use', false, '')", "id":"Stable-λ", "sym":"λ", "func":"Stable", "localFunc":"", "type":"use", "case":"equation"} }{ {\mathit{λ}} }} - \frac{\idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, 'μ', 'Stable', 'use', false, '')", "id":"Stable-μ", "sym":"μ", "func":"Stable", "localFunc":"", "type":"use", "case":"equation"} }{ {\mathit{μ}} }}{4\idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, 'λ', 'Stable', 'use', false, '')", "id":"Stable-λ", "sym":"λ", "func":"Stable", "localFunc":"", "type":"use", "case":"equation"} }{ {\mathit{λ}} }}\\\eqlabel{ {"onclick":"event.stopPropagation(); onClickEq(this, 'Stable', ['μ', 'λ', 'α'], false, [], [], 'zrEgPSAxICsgzrwvzrsgLSDOvC8oNM67KQ==');"} }{} \end{align*} $. We omit the subscript, as we only consider one model in this section. Using the column-wise notation for ${\proselabel{Stable}{{F}}}$ (Eqn.1) and the identity $\DeclareMathOperator*{\argmax}{arg\,max} \DeclareMathOperator*{\argmin}{arg\,min} \begin{align*} \idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, 'J', 'Stable', 'def', false, '')", "id":"Stable-J", "sym":"J", "func":"Stable", "localFunc":"", "type":"def", "case":"equation"} }{ {\mathit{J}} } & = \idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, '$f_0$', 'Stable', 'use', false, '')", "id":"Stable-$f_0$", "sym":"$f_0$", "func":"Stable", "localFunc":"", "type":"use", "case":"equation"} }{ {f_0} } \cdot \left( \idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, '$f_1$', 'Stable', 'use', false, '')", "id":"Stable-$f_1$", "sym":"$f_1$", "func":"Stable", "localFunc":"", "type":"use", "case":"equation"} }{ {f_1} } × \idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, '$f_2$', 'Stable', 'use', false, '')", "id":"Stable-$f_2$", "sym":"$f_2$", "func":"Stable", "localFunc":"", "type":"use", "case":"equation"} }{ {f_2} } \right)\\\eqlabel{ {"onclick":"event.stopPropagation(); onClickEq(this, 'Stable', ['$f_2$', '$f_1$', '$f_0$', 'J'], false, [], [], 'SiA9YCRmXzAkYOKLhShgJGZfMSRgw5dgJGZfMiRgKQ==');"} }{} \end{align*} $, we write ${\prosedeflabel{Stable}{{\frac{\partial J}{\partial {\proselabel{Stable}{{F}}}}}}}$ (a.k.a. the cofactor matrix) as cross products:

$$\DeclareMathOperator*{\argmax}{arg\,max} \DeclareMathOperator*{\argmin}{arg\,min} \begin{align*} \idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, '$\\\\frac{\\\\partial J}{\\\\partial F}$', 'Stable', 'def', false, '')", "id":"Stable-$\\\\frac{\\\\partial J}{\\\\partial F}$", "sym":"$\\\\frac{\\\\partial J}{\\\\partial F}$", "func":"Stable", "localFunc":"", "type":"def", "case":"equation"} }{ {\frac{\partial J}{\partial F}} } & = \begin{bmatrix} \idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, '$f_1$', 'Stable', 'use', false, '')", "id":"Stable-$f_1$", "sym":"$f_1$", "func":"Stable", "localFunc":"", "type":"use", "case":"equation"} }{ {f_1} } × \idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, '$f_2$', 'Stable', 'use', false, '')", "id":"Stable-$f_2$", "sym":"$f_2$", "func":"Stable", "localFunc":"", "type":"use", "case":"equation"} }{ {f_2} } & \idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, '$f_2$', 'Stable', 'use', false, '')", "id":"Stable-$f_2$", "sym":"$f_2$", "func":"Stable", "localFunc":"", "type":"use", "case":"equation"} }{ {f_2} } × \idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, '$f_0$', 'Stable', 'use', false, '')", "id":"Stable-$f_0$", "sym":"$f_0$", "func":"Stable", "localFunc":"", "type":"use", "case":"equation"} }{ {f_0} } & \idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, '$f_0$', 'Stable', 'use', false, '')", "id":"Stable-$f_0$", "sym":"$f_0$", "func":"Stable", "localFunc":"", "type":"use", "case":"equation"} }{ {f_0} } × \idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, '$f_1$', 'Stable', 'use', false, '')", "id":"Stable-$f_1$", "sym":"$f_1$", "func":"Stable", "localFunc":"", "type":"use", "case":"equation"} }{ {f_1} }\\ \end{bmatrix}\\\eqlabel{ {"onclick":"event.stopPropagation(); onClickEq(this, 'Stable', ['$f_2$', '$f_1$', '$f_0$', '$\\\\frac{\\\\partial J}{\\\\partial F}$'], false, [], [], 'YCRcZnJhY3tccGFydGlhbCBKfXtccGFydGlhbCBGfSRgID0gW2AkZl8xJGDDl2AkZl8yJGAgYCRmXzIkYMOXYCRmXzAkYCBgJGZfMCRgw5dgJGZfMSRgXQ==');"} }{} \end{align*} \tag{19}\label{19}$$

This is a convenient shorthand for computing ${\proselabel{Stable}{{\frac{\partial J}{\partial {\proselabel{Stable}{{F}}}}}}}$, and will be useful when analyzing $\frac{\partial^2 {\proselabel{Stable}{{J}}}}{\partial {\proselabel{Stable}{{F}}}^2}$.