Anisotropic Elasticity for Inversion-Safety and Element Rehabilitation
THEODORE KIM, Pixar Animation Studios
FERNANDO DE GOES, Pixar Animation Studios
HAYLEY IBEN, Pixar Animation Studios

4 AN EIGENANALYSIS OF ${\proselabel{Anisotropic}{{I_5}}}$

4.1 The Eigensystem of ${\proselabel{Anisotropic}{{I_5}}}$

We will now show that the eigensystem of any energy expressed solely in terms of ${\proselabel{Anisotropic}{{I_5}}}$ can be written down in closed form. The ${\proselabel{Anisotropic}{{I_5}}}$ invariant can be written in several forms,

$$\DeclareMathOperator*{\argmax}{arg\,max} \DeclareMathOperator*{\argmin}{arg\,min} \begin{align*} \idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, '$I_5$', 'Anisotropic', 'def', false, '')", "id":"Anisotropic-$I_5$", "sym":"$I_5$", "func":"Anisotropic", "localFunc":"", "type":"def", "case":"equation"} }{ {I_5} } & = tr\left( \idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, 'C', 'Anisotropic', 'use', false, '')", "id":"Anisotropic-C", "sym":"C", "func":"Anisotropic", "localFunc":"", "type":"use", "case":"equation"} }{ {\mathit{C}} }\idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, 'A', 'Anisotropic', 'use', false, '')", "id":"Anisotropic-A", "sym":"A", "func":"Anisotropic", "localFunc":"", "type":"use", "case":"equation"} }{ {\mathit{A}} } \right)\\\eqlabel{ {"onclick":"event.stopPropagation(); onClickEq(this, 'Anisotropic', ['C', 'A', '$I_5$'], false, [], [], 'YCRJXzUkYCA9IHRyKENBKQ==');"} }{} \end{align*} \tag{5}\label{5}$$

where $\DeclareMathOperator*{\argmax}{arg\,max} \DeclareMathOperator*{\argmin}{arg\,min} \begin{align*} \idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, 'A', 'Anisotropic', 'def', false, '')", "id":"Anisotropic-A", "sym":"A", "func":"Anisotropic", "localFunc":"", "type":"def", "case":"equation"} }{ {\mathit{A}} } & = \idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, 'a', 'Anisotropic', 'use', false, '')", "id":"Anisotropic-a", "sym":"a", "func":"Anisotropic", "localFunc":"", "type":"use", "case":"equation"} }{ {\mathit{a}} }{\idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, 'a', 'Anisotropic', 'use', false, '')", "id":"Anisotropic-a", "sym":"a", "func":"Anisotropic", "localFunc":"", "type":"use", "case":"equation"} }{ {\mathit{a}} }}^T\\\eqlabel{ {"onclick":"event.stopPropagation(); onClickEq(this, 'Anisotropic', ['a', 'A'], false, [], [], 'QSA9IGEgYV5U');"} }{} \end{align*} $ and $\|\cdot\|_{2}^{2}$ denotes the squared Euclidean norm. The PK1 and Hessian in 3D are

$$\DeclareMathOperator*{\argmax}{arg\,max} \DeclareMathOperator*{\argmin}{arg\,min} \begin{align*} \idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, '$\\\\frac{∂I₅}{∂F}$', 'Anisotropic', 'def', false, '')", "id":"Anisotropic-$\\\\frac{∂I₅}{∂F}$", "sym":"$\\\\frac{∂I₅}{∂F}$", "func":"Anisotropic", "localFunc":"", "type":"def", "case":"equation"} }{ {\frac{∂I₅}{∂F}} } & = 2\idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, 'F', 'Anisotropic', 'use', false, '')", "id":"Anisotropic-F", "sym":"F", "func":"Anisotropic", "localFunc":"", "type":"use", "case":"equation"} }{ {\mathit{F}} }\idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, 'A', 'Anisotropic', 'use', false, '')", "id":"Anisotropic-A", "sym":"A", "func":"Anisotropic", "localFunc":"", "type":"use", "case":"equation"} }{ {\mathit{A}} }\\\eqlabel{ {"onclick":"event.stopPropagation(); onClickEq(this, 'Anisotropic', ['A', 'F', '$\\\\frac{∂I₅}{∂F}$'], false, [], [], 'YCRcZnJhY3viiIJJ4oKFfXviiIJGfSRgID0gMkZB');"} }{} \end{align*} \tag{6}\label{6}$$

$$\DeclareMathOperator*{\argmax}{arg\,max} \DeclareMathOperator*{\argmin}{arg\,min} \begin{align*} \idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, '$\\\\frac{∂²I₅}{∂f²}$', 'Anisotropic', 'def', false, '')", "id":"Anisotropic-$\\\\frac{∂²I₅}{∂f²}$", "sym":"$\\\\frac{∂²I₅}{∂f²}$", "func":"Anisotropic", "localFunc":"", "type":"def", "case":"equation"} }{ {\frac{∂²I₅}{∂f²}} } & = 2\begin{bmatrix} \idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, 'A', 'Anisotropic', 'use', false, '')", "id":"Anisotropic-A", "sym":"A", "func":"Anisotropic", "localFunc":"", "type":"use", "case":"equation"} }{ {\mathit{A}} }_{1, 1}I_{ 3 } & \idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, 'A', 'Anisotropic', 'use', false, '')", "id":"Anisotropic-A", "sym":"A", "func":"Anisotropic", "localFunc":"", "type":"use", "case":"equation"} }{ {\mathit{A}} }_{1, 2}I_{ 3 } & \idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, 'A', 'Anisotropic', 'use', false, '')", "id":"Anisotropic-A", "sym":"A", "func":"Anisotropic", "localFunc":"", "type":"use", "case":"equation"} }{ {\mathit{A}} }_{1, 3}I_{ 3 }\\ \idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, 'A', 'Anisotropic', 'use', false, '')", "id":"Anisotropic-A", "sym":"A", "func":"Anisotropic", "localFunc":"", "type":"use", "case":"equation"} }{ {\mathit{A}} }_{2, 1}I_{ 3 } & \idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, 'A', 'Anisotropic', 'use', false, '')", "id":"Anisotropic-A", "sym":"A", "func":"Anisotropic", "localFunc":"", "type":"use", "case":"equation"} }{ {\mathit{A}} }_{2, 2}I_{ 3 } & \idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, 'A', 'Anisotropic', 'use', false, '')", "id":"Anisotropic-A", "sym":"A", "func":"Anisotropic", "localFunc":"", "type":"use", "case":"equation"} }{ {\mathit{A}} }_{2, 3}I_{ 3 }\\ \idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, 'A', 'Anisotropic', 'use', false, '')", "id":"Anisotropic-A", "sym":"A", "func":"Anisotropic", "localFunc":"", "type":"use", "case":"equation"} }{ {\mathit{A}} }_{3, 1}I_{ 3 } & \idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, 'A', 'Anisotropic', 'use', false, '')", "id":"Anisotropic-A", "sym":"A", "func":"Anisotropic", "localFunc":"", "type":"use", "case":"equation"} }{ {\mathit{A}} }_{3, 2}I_{ 3 } & \idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, 'A', 'Anisotropic', 'use', false, '')", "id":"Anisotropic-A", "sym":"A", "func":"Anisotropic", "localFunc":"", "type":"use", "case":"equation"} }{ {\mathit{A}} }_{3, 3}I_{ 3 }\\ \end{bmatrix}\\\eqlabel{ {"onclick":"event.stopPropagation(); onClickEq(this, 'Anisotropic', ['A', '$\\\\frac{∂²I₅}{∂f²}$'], false, [], [], 'YCRcZnJhY3viiILCsknigoV9e-KIgmbCsn0kYCA9IDJbQeKCgSzigoFJ4oKDICBB4oKBLOKCgknigoMgIEHigoEs4oKDSeKCgwogICAgICAgICAgICAgICBB4oKCLOKCgUnigoMgIEHigoIs4oKCSeKCgyAgQeKCgizigoNJ4oKDCiAgICAgICAgICAgICAgIEHigoMs4oKBSeKCgyAgQeKCgyzigoJJ4oKDICBB4oKDLOKCg0nigoNd');"} }{} \end{align*} \tag{7}\label{7}$$

where $I _{3×3}$ is a 3×3 identity matrix,and ${\proselabel{Anisotropic}{{A}}} _{ij}$ is the $(i, j)$ scalar entry of ${\proselabel{Anisotropic}{{A}}}$. (Appendix A shows the matrix explicitly.) Since Eqn. 7 is constant in ${\proselabel{Anisotropic}{{a}}}$, it is straightforward to state its eigensystem in closed form. In 3D, it contains three identical non-zero eigenvalues , $\DeclareMathOperator*{\argmax}{arg\,max} \DeclareMathOperator*{\argmin}{arg\,min} \begin{align*} \idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, '$\\\\lambda_{0,1,2}$', 'Anisotropic', 'def', false, '')", "id":"Anisotropic-$\\\\lambda_{0,1,2}$", "sym":"$\\\\lambda_{0,1,2}$", "func":"Anisotropic", "localFunc":"", "type":"def", "case":"equation"} }{ {\lambda_{0,1,2}} } & = 2\left\|\idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, 'a', 'Anisotropic', 'use', false, '')", "id":"Anisotropic-a", "sym":"a", "func":"Anisotropic", "localFunc":"", "type":"use", "case":"equation"} }{ {\mathit{a}} }\right\|_2^{2}\\\eqlabel{ {"onclick":"event.stopPropagation(); onClickEq(this, 'Anisotropic', ['a', '$\\\\lambda_{0,1,2}$'], false, [], [], 'YCRcbGFtYmRhX3swLDEsMn0kYD0yfHxhfHxfMl4y');"} }{} \end{align*} $, and since fiber directions are usually normalized, this simplifies to ${\proselabel{Anisotropic}{{\lambda_{0,1,2}}}}=2$. The eigenvalue is repeated, so the eigenmatrices are arbitrary up to rotation, but one convenient phrasing is:
$$\DeclareMathOperator*{\argmax}{arg\,max} \DeclareMathOperator*{\argmin}{arg\,min} \begin{align*} \idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, '$\\\\mathbf{Q}_{0}$', 'Anisotropic', 'def', false, '')", "id":"Anisotropic-$\\\\mathbf{Q}_{0}$", "sym":"$\\\\mathbf{Q}_{0}$", "func":"Anisotropic", "localFunc":"", "type":"def", "case":"equation"} }{ {\mathbf{Q}_{0}} } & = \begin{bmatrix} {\idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, 'a', 'Anisotropic', 'use', false, '')", "id":"Anisotropic-a", "sym":"a", "func":"Anisotropic", "localFunc":"", "type":"use", "case":"equation"} }{ {\mathit{a}} }}^T\\ 0\\ 0\\ \end{bmatrix}\\\eqlabel{ {"onclick":"event.stopPropagation(); onClickEq(this, 'Anisotropic', ['a', '$\\\\mathbf{Q}_{0}$'], false, [], [], 'YCRcbWF0aGJme1F9X3swfSRgID0gW2FeVAogICAgICAgICAgICAgICAwCiAgICAgICAgICAgICAgIDBd');"} }{} \idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, '$\\\\mathbf{Q}_{1}$', 'Anisotropic', 'def', false, '')", "id":"Anisotropic-$\\\\mathbf{Q}_{1}$", "sym":"$\\\\mathbf{Q}_{1}$", "func":"Anisotropic", "localFunc":"", "type":"def", "case":"equation"} }{ {\mathbf{Q}_{1}} } & = \begin{bmatrix} 0\\ {\idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, 'a', 'Anisotropic', 'use', false, '')", "id":"Anisotropic-a", "sym":"a", "func":"Anisotropic", "localFunc":"", "type":"use", "case":"equation"} }{ {\mathit{a}} }}^T\\ 0\\ \end{bmatrix}\\\eqlabel{ {"onclick":"event.stopPropagation(); onClickEq(this, 'Anisotropic', ['a', '$\\\\mathbf{Q}_{1}$'], false, [], [], 'YCRcbWF0aGJme1F9X3sxfSRgID0gWzAKICAgICAgICAgICAgICAgICAgICBhXlQKICAgICAgICAgICAgICAgMF0=');"} }{} \idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, '$\\\\mathbf{Q}_{2}$', 'Anisotropic', 'def', false, '')", "id":"Anisotropic-$\\\\mathbf{Q}_{2}$", "sym":"$\\\\mathbf{Q}_{2}$", "func":"Anisotropic", "localFunc":"", "type":"def", "case":"equation"} }{ {\mathbf{Q}_{2}} } & = \begin{bmatrix} 0\\ 0\\ {\idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, 'a', 'Anisotropic', 'use', false, '')", "id":"Anisotropic-a", "sym":"a", "func":"Anisotropic", "localFunc":"", "type":"use", "case":"equation"} }{ {\mathit{a}} }}^T\\ \end{bmatrix}\\\eqlabel{ {"onclick":"event.stopPropagation(); onClickEq(this, 'Anisotropic', ['a', '$\\\\mathbf{Q}_{2}$'], false, [], [], 'YCRcbWF0aGJme1F9X3syfSRgID0gWyAwCiAgICAgICAgICAgICAgIDAKICAgICAgICAgICAgICAgYV5UXQ==');"} }{} \end{align*} \notag$$

This eigenstructure has a straightforward interpretation. ${\proselabel{Anisotropic}{{I_5}}}$ introduces scaling constraints along the anisotropy direction, so the three eigenvectors encode this rank-three phenomenon. The remaining eigenvalues are all zero, so the Hessian contains a rank-six null space. We have provided supplemental Matlab/Octave code that validate these expressions.

The 2D case follows similarly. The Hessian is

$$\DeclareMathOperator*{\argmax}{arg\,max} \DeclareMathOperator*{\argmin}{arg\,min} \begin{align*} \idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, '$\\\\frac{∂²I₅}{∂f²}$', 'Anisotropic2D', 'def', false, '')", "id":"Anisotropic2D-$\\\\frac{∂²I₅}{∂f²}$", "sym":"$\\\\frac{∂²I₅}{∂f²}$", "func":"Anisotropic2D", "localFunc":"", "type":"def", "case":"equation"} }{ {\frac{∂²I₅}{∂f²}} } & = 2\begin{bmatrix} \idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, 'A', 'Anisotropic2D', 'use', false, '')", "id":"Anisotropic2D-A", "sym":"A", "func":"Anisotropic2D", "localFunc":"", "type":"use", "case":"equation"} }{ {\mathit{A}} }_{1, 1}I_{ 2 } & \idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, 'A', 'Anisotropic2D', 'use', false, '')", "id":"Anisotropic2D-A", "sym":"A", "func":"Anisotropic2D", "localFunc":"", "type":"use", "case":"equation"} }{ {\mathit{A}} }_{1, 2}I_{ 2 }\\ \idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, 'A', 'Anisotropic2D', 'use', false, '')", "id":"Anisotropic2D-A", "sym":"A", "func":"Anisotropic2D", "localFunc":"", "type":"use", "case":"equation"} }{ {\mathit{A}} }_{2, 1}I_{ 2 } & \idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, 'A', 'Anisotropic2D', 'use', false, '')", "id":"Anisotropic2D-A", "sym":"A", "func":"Anisotropic2D", "localFunc":"", "type":"use", "case":"equation"} }{ {\mathit{A}} }_{2, 2}I_{ 2 }\\ \end{bmatrix}\\\eqlabel{ {"onclick":"event.stopPropagation(); onClickEq(this, 'Anisotropic2D', ['A', '$\\\\frac{∂²I₅}{∂f²}$'], false, [], [], 'YCRcZnJhY3viiILCsknigoV9e-KIgmbCsn0kYCA9IDJbQeKCgSzigoFJXzIgIEHigoEs4oKCSV8yCiAgICAgICAgICAgICAgIEHigoIs4oKBSV8yICBB4oKCLOKCgklfMl0=');"} }{} \end{align*} \tag{8}\label{8}$$

the eigenvalues are $\DeclareMathOperator*{\argmax}{arg\,max} \DeclareMathOperator*{\argmin}{arg\,min} \begin{align*} \idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, '$\\\\lambda_{0,1}$', 'Anisotropic2D', 'def', false, '')", "id":"Anisotropic2D-$\\\\lambda_{0,1}$", "sym":"$\\\\lambda_{0,1}$", "func":"Anisotropic2D", "localFunc":"", "type":"def", "case":"equation"} }{ {\lambda_{0,1}} } & = 2\left\|\idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, 'a', 'Anisotropic2D', 'use', false, '')", "id":"Anisotropic2D-a", "sym":"a", "func":"Anisotropic2D", "localFunc":"", "type":"use", "case":"equation"} }{ {\mathit{a}} }\right\|_2^{2}\\\eqlabel{ {"onclick":"event.stopPropagation(); onClickEq(this, 'Anisotropic2D', ['a', '$\\\\lambda_{0,1}$'], false, [], [], 'YCRcbGFtYmRhX3swLDF9JGA9Mnx8YXx8XzJeMg==');"} }{} \end{align*} $, and the eigenmatrices become

$$\DeclareMathOperator*{\argmax}{arg\,max} \DeclareMathOperator*{\argmin}{arg\,min} \begin{align*} \idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, '$\\\\mathbf{Q}_{0}$', 'Anisotropic2D', 'def', false, '')", "id":"Anisotropic2D-$\\\\mathbf{Q}_{0}$", "sym":"$\\\\mathbf{Q}_{0}$", "func":"Anisotropic2D", "localFunc":"", "type":"def", "case":"equation"} }{ {\mathbf{Q}_{0}} } & = \begin{bmatrix} {\idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, 'a', 'Anisotropic2D', 'use', false, '')", "id":"Anisotropic2D-a", "sym":"a", "func":"Anisotropic2D", "localFunc":"", "type":"use", "case":"equation"} }{ {\mathit{a}} }}^T\\ 0\\ \end{bmatrix}\\\eqlabel{ {"onclick":"event.stopPropagation(); onClickEq(this, 'Anisotropic2D', ['a', '$\\\\mathbf{Q}_{0}$'], false, [], [], 'YCRcbWF0aGJme1F9X3swfSRgID0gW2FeVAogICAgICAgICAgICAgICAwXQ==');"} }{} \idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, '$\\\\mathbf{Q}_{1}$', 'Anisotropic2D', 'def', false, '')", "id":"Anisotropic2D-$\\\\mathbf{Q}_{1}$", "sym":"$\\\\mathbf{Q}_{1}$", "func":"Anisotropic2D", "localFunc":"", "type":"def", "case":"equation"} }{ {\mathbf{Q}_{1}} } & = \begin{bmatrix} 0\\ {\idlabel{ {"onclick":"event.stopPropagation(); onClickSymbol(this, 'a', 'Anisotropic2D', 'use', false, '')", "id":"Anisotropic2D-a", "sym":"a", "func":"Anisotropic2D", "localFunc":"", "type":"use", "case":"equation"} }{ {\mathit{a}} }}^T\\ \end{bmatrix}\\\eqlabel{ {"onclick":"event.stopPropagation(); onClickEq(this, 'Anisotropic2D', ['a', '$\\\\mathbf{Q}_{1}$'], false, [], [], 'YCRcbWF0aGJme1F9X3sxfSRgID0gWzAKICAgICAgICAgICAgICAgICAgICBhXlRd');"} }{} \end{align*} \notag$$