diff --git a/docs/notebooks/fourth-order.ipynb b/docs/notebooks/fourth-order.ipynb index 62f6f86..9d8fc06 100644 --- a/docs/notebooks/fourth-order.ipynb +++ b/docs/notebooks/fourth-order.ipynb @@ -1,5 +1,16 @@ { "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Fourth-order tensors\n", + "\n", + "In this notebook, we will show various representations of fourth-order tensors and conversion between them.\n", + "\n", + "Various representation of fourth-order tensors are implemented in the `tensorconvert.FourthOrderTensor` class." + ] + }, { "cell_type": "code", "execution_count": 1, @@ -16,19 +27,59 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Representation of fourth-order tensors\n", + "## Representations\n", + "\n", + "By default, `FourthOrderTensor` is initialized with a generic fourth-order array `ArraySymbol`.\n", + "\n", + "The spatial dimension is indicated by the `dim` parameter. By default, we have `dim = 3`.\n", + "\n", + "The symmetry of the array object can be prescribed through the `symmetry` parameter\n", + "\n", + "- No symmetry `symmetry=None`\n", + "- Minor symmetry `symmetry=\"minor\"`, which implies `a[i, j, k, l] = a[j, i, k, l] = a[i, j, l, k]`. In practice, the expressions containing `a[j, i, k, l]` and `a[i, j, l, k]` with `j > i` and `l > k` will be replaced by `a[i, j, l, k]`.\n", + "- (Default) Major symmetry `symmetry=\"major\"`, which additionally assumes that `a[i, j, k, l] = a[k, l, i, j]`. In practice, this implies that the matrix representation will be symmetric using the upper-diagonal part.\n", + "\n", + "Fourth-order tensors are regarded as a linear operator $T$ in the vector space $V$ of second-order tensors\n", + "\n", + "$$\n", + " T:V\\to V.\n", + "$$\n", + "\n", + "The dimension of the vector space $V$ is not to be confused with the spatial dimension. For 3-d symmetric second-order tensors, the dimension of $V$ is 6, since 6 basis vectors are required to represent them using for example Voigt or Mandel notation.\n", + "\n", + "After having chosen a basis for the input and the output spaces $V$ (which can be the same), the fourth-order tensor $\\mathbb{C}$ can be represented by a matrix\n", + "\n", + "$$\n", + "T(\\mathbf{v}_j)=\\sum_{i=1}^n T_{ij}\\mathbf{w}_i\\quad\\implies T=\\begin{bmatrix}\n", + "T_{11} & T_{12} & \\ldots & T_{1n} \\\\\n", + "T_{21} & T_{22} & \\ldots & T_{2n} \\\\\n", + "\\ldots & \\ldots & \\ldots & \\ldots \\\\\n", + "T_{n1} & T_{n2} & \\ldots & T_{nn} \\\\\n", + "\\end{bmatrix}.\n", + "$$\n", + "\n", + "Here, $(\\mathbf{v}_1,\\mathbf{v}_2,\\ldots,\\mathbf{v}_n)$ is the basis chosen to represent input second-order tensors, while $(\\mathbf{w}_1, \\mathbf{w}_2, \\ldots, \\mathbf{w}_n)$ is used to represent output second-order tensors." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Voigt notation\n", "\n", - "In this notebook, we will show various representations of fourth-order tensors and conversion between them." + "Voigt notation assumes that the input is a strain-like tensor while the output is stress-like. Hence\n", + "\n", + "- Input basis $\\mathbf{v}$ is `SecondOrderTensor().basis_voigt_strain()`.\n", + "- Output basis $\\mathbf{w}$ is `SecondOrderTensor().basis_voigt_stress()`." ] }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 2, "metadata": {}, "outputs": [ { "data": { - "image/png": "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", "text/latex": [ "$\\displaystyle \\left[\\begin{matrix}{{a}_{0, 0, 0, 0}} & {{a}_{0, 0, 1, 1}} & {{a}_{0, 0, 2, 2}} & {{a}_{0, 0, 0, 1}} & {{a}_{0, 0, 0, 2}} & {{a}_{0, 0, 1, 2}}\\\\{{a}_{0, 0, 1, 1}} & {{a}_{1, 1, 1, 1}} & {{a}_{1, 1, 2, 2}} & {{a}_{1, 1, 0, 1}} & {{a}_{1, 1, 0, 2}} & {{a}_{1, 1, 1, 2}}\\\\{{a}_{0, 0, 2, 2}} & {{a}_{1, 1, 2, 2}} & {{a}_{2, 2, 2, 2}} & {{a}_{2, 2, 0, 1}} & {{a}_{2, 2, 0, 2}} & {{a}_{2, 2, 1, 2}}\\\\{{a}_{0, 0, 0, 1}} & {{a}_{1, 1, 0, 1}} & {{a}_{2, 2, 0, 1}} & {{a}_{0, 1, 0, 1}} & {{a}_{0, 1, 0, 2}} & {{a}_{0, 1, 1, 2}}\\\\{{a}_{0, 0, 0, 2}} & {{a}_{1, 1, 0, 2}} & {{a}_{2, 2, 0, 2}} & {{a}_{0, 1, 0, 2}} & {{a}_{0, 2, 0, 2}} & {{a}_{0, 2, 1, 2}}\\\\{{a}_{0, 0, 1, 2}} & {{a}_{1, 1, 1, 2}} & {{a}_{2, 2, 1, 2}} & {{a}_{0, 1, 1, 2}} & {{a}_{0, 2, 1, 2}} & {{a}_{1, 2, 1, 2}}\\end{matrix}\\right]$" ], @@ -58,13 +109,72 @@ "1, 2, 1, 2]⎦" ] }, - "execution_count": 8, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "FourthOrderTensor().as_voigt()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The ordering of the shear (off-diagonal) components can also be specified by the `ordering` parameter. By default, we assume `FourthOrderTensor(ordering=\"121323\")` as for second-order tensors." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\left[\\begin{matrix}{{a}_{0, 0, 0, 0}} & {{a}_{0, 0, 1, 1}} & {{a}_{0, 0, 2, 2}} & {{a}_{0, 0, 0, 1}} & {{a}_{0, 0, 1, 2}} & {{a}_{0, 0, 0, 2}}\\\\{{a}_{0, 0, 1, 1}} & {{a}_{1, 1, 1, 1}} & {{a}_{1, 1, 2, 2}} & {{a}_{1, 1, 0, 1}} & {{a}_{1, 1, 1, 2}} & {{a}_{1, 1, 0, 2}}\\\\{{a}_{0, 0, 2, 2}} & {{a}_{1, 1, 2, 2}} & {{a}_{2, 2, 2, 2}} & {{a}_{2, 2, 0, 1}} & {{a}_{2, 2, 1, 2}} & {{a}_{2, 2, 0, 2}}\\\\{{a}_{0, 0, 0, 1}} & {{a}_{1, 1, 0, 1}} & {{a}_{2, 2, 0, 1}} & {{a}_{0, 1, 0, 1}} & {{a}_{0, 1, 1, 2}} & {{a}_{0, 1, 0, 2}}\\\\{{a}_{0, 0, 1, 2}} & {{a}_{1, 1, 1, 2}} & {{a}_{2, 2, 1, 2}} & {{a}_{0, 1, 1, 2}} & {{a}_{1, 2, 1, 2}} & {{a}_{1, 2, 0, 2}}\\\\{{a}_{0, 0, 0, 2}} & {{a}_{1, 1, 0, 2}} & {{a}_{2, 2, 0, 2}} & {{a}_{0, 1, 0, 2}} & {{a}_{1, 2, 0, 2}} & {{a}_{0, 2, 0, 2}}\\end{matrix}\\right]$" + ], + "text/plain": [ + "⎡a[0, 0, 0, 0] a[0, 0, 1, 1] a[0, 0, 2, 2] a[0, 0, 0, 1] a[0, 0, 1, 2] a[\n", + "⎢ \n", + "⎢a[0, 0, 1, 1] a[1, 1, 1, 1] a[1, 1, 2, 2] a[1, 1, 0, 1] a[1, 1, 1, 2] a[\n", + "⎢ \n", + "⎢a[0, 0, 2, 2] a[1, 1, 2, 2] a[2, 2, 2, 2] a[2, 2, 0, 1] a[2, 2, 1, 2] a[\n", + "⎢ \n", + "⎢a[0, 0, 0, 1] a[1, 1, 0, 1] a[2, 2, 0, 1] a[0, 1, 0, 1] a[0, 1, 1, 2] a[\n", + "⎢ \n", + "⎢a[0, 0, 1, 2] a[1, 1, 1, 2] a[2, 2, 1, 2] a[0, 1, 1, 2] a[1, 2, 1, 2] a[\n", + "⎢ \n", + "⎣a[0, 0, 0, 2] a[1, 1, 0, 2] a[2, 2, 0, 2] a[0, 1, 0, 2] a[1, 2, 0, 2] a[\n", + "\n", + "0, 0, 0, 2]⎤\n", + " ⎥\n", + "1, 1, 0, 2]⎥\n", + " ⎥\n", + "2, 2, 0, 2]⎥\n", + " ⎥\n", + "0, 1, 0, 2]⎥\n", + " ⎥\n", + "1, 2, 0, 2]⎥\n", + " ⎥\n", + "0, 2, 0, 2]⎦" + ] + }, + "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "FourthOrderTensor(symmetry=\"major\").as_voigt()" + "FourthOrderTensor(ordering=\"122313\").as_voigt()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "It can be observed that by default, the matrix representation is symmetric, due to major symmetry. With `symmetry = \"minor\"`, the output matrix is no longer symmetric." ] }, { @@ -113,6 +223,18 @@ "FourthOrderTensor(symmetry=\"minor\").as_voigt()" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Mandel notation\n", + "\n", + "Mandel notation uses the same basis vectors to represent the input and the output second-order tensors. Hence\n", + "\n", + "- Input basis $\\mathbf{v}$ is `SecondOrderTensor().basis_mandel()`.\n", + "- Output basis $\\mathbf{w}$ is `SecondOrderTensor().basis_mandel()`." + ] + }, { "cell_type": "code", "execution_count": 9, @@ -156,7 +278,53 @@ } ], "source": [ - "FourthOrderTensor(symmetry=\"major\").as_mandel()" + "FourthOrderTensor().as_mandel()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The spatial dimension can be specified by the `dim` parameter." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\left[\\begin{matrix}{{a}_{0, 0, 0, 0}} & {{a}_{0, 0, 1, 1}} & \\sqrt{2} {{a}_{0, 0, 0, 1}}\\\\{{a}_{1, 1, 0, 0}} & {{a}_{1, 1, 1, 1}} & \\sqrt{2} {{a}_{1, 1, 0, 1}}\\\\\\sqrt{2} {{a}_{0, 1, 0, 0}} & \\sqrt{2} {{a}_{0, 1, 1, 1}} & 2 {{a}_{0, 1, 0, 1}}\\end{matrix}\\right]$" + ], + "text/plain": [ + "⎡ a[0, 0, 0, 0] a[0, 0, 1, 1] √2⋅a[0, 0, 0, 1]⎤\n", + "⎢ ⎥\n", + "⎢ a[1, 1, 0, 0] a[1, 1, 1, 1] √2⋅a[1, 1, 0, 1]⎥\n", + "⎢ ⎥\n", + "⎣√2⋅a[0, 1, 0, 0] √2⋅a[0, 1, 1, 1] 2⋅a[0, 1, 0, 1] ⎦" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "FourthOrderTensor(dim=2, symmetry=\"minor\").as_mandel()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Unsymmetric notation\n", + "\n", + "For fourth-order tensors without any symmetry (which means the input and the output tensors are not symmetric), the unsymmetric notation can be used\n", + "\n", + "- Input basis $\\mathbf{v}$ is `SecondOrderTensor().basis_unsym()`.\n", + "- Output basis $\\mathbf{w}$ is `SecondOrderTensor().basis_unsym()`." ] }, { @@ -219,40 +387,11 @@ }, { "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/latex": [ - "$\\displaystyle \\left[\\begin{matrix}{{a}_{0, 0, 0, 0}} & {{a}_{0, 0, 1, 1}} & \\sqrt{2} {{a}_{0, 0, 0, 1}}\\\\{{a}_{0, 0, 1, 1}} & {{a}_{1, 1, 1, 1}} & \\sqrt{2} {{a}_{1, 1, 0, 1}}\\\\\\sqrt{2} {{a}_{0, 0, 0, 1}} & \\sqrt{2} {{a}_{1, 1, 0, 1}} & 2 {{a}_{0, 1, 0, 1}}\\end{matrix}\\right]$" - ], - "text/plain": [ - "⎡ a[0, 0, 0, 0] a[0, 0, 1, 1] √2⋅a[0, 0, 0, 1]⎤\n", - "⎢ ⎥\n", - "⎢ a[0, 0, 1, 1] a[1, 1, 1, 1] √2⋅a[1, 1, 0, 1]⎥\n", - "⎢ ⎥\n", - "⎣√2⋅a[0, 0, 0, 1] √2⋅a[1, 1, 0, 1] 2⋅a[0, 1, 0, 1] ⎦" - ] - }, - "execution_count": 3, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "FourthOrderTensor(dim=2, symmetry=\"major\").as_mandel()" - ] - }, - { - "cell_type": "code", - "execution_count": 4, + "execution_count": 6, "metadata": {}, "outputs": [ { "data": { - "image/png": "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", "text/latex": [ "$\\displaystyle \\left[\\begin{matrix}{{a}_{0, 0, 0, 0}} & {{a}_{0, 0, 1, 1}} & {{a}_{0, 0, 0, 1}} & {{a}_{0, 0, 1, 0}}\\\\{{a}_{1, 1, 0, 0}} & {{a}_{1, 1, 1, 1}} & {{a}_{1, 1, 0, 1}} & {{a}_{1, 1, 1, 0}}\\\\{{a}_{0, 1, 0, 0}} & {{a}_{0, 1, 1, 1}} & {{a}_{0, 1, 0, 1}} & {{a}_{0, 1, 1, 0}}\\\\{{a}_{1, 0, 0, 0}} & {{a}_{1, 0, 1, 1}} & {{a}_{1, 0, 0, 1}} & {{a}_{1, 0, 1, 0}}\\end{matrix}\\right]$" ], @@ -266,7 +405,7 @@ "⎣a[1, 0, 0, 0] a[1, 0, 1, 1] a[1, 0, 0, 1] a[1, 0, 1, 0]⎦" ] }, - "execution_count": 4, + "execution_count": 6, "metadata": {}, "output_type": "execute_result" } @@ -276,215 +415,218 @@ ] }, { - "cell_type": "code", - "execution_count": 4, + "cell_type": "markdown", "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAL8AAACWCAYAAACPSVn4AAAACXBIWXMAAA7EAAAOxAGVKw4bAAAOCElEQVR4Ae1dW47dNhLtDvo7SGJgFtAGsoDuZAVxdpDkY/4dL8HIl/2b7MAz/wGC9A4yO/BML2AAZwEBbBhZQJJzbqs6bF1eqe4VqSqRRUBNinrUqcMjXkqiqs9fvHhxdXZ29j8suXTz8uXLr3Mboi4Y8M4AtPsGGC9zOLHt/CLZ8APK3DlNv6YrUQ4GNsbA9xm8X6LuK9an4n+FqyHEnmErqrbJAPT8rzFy1LFqT/zj/bLrOJjDpJ+xXKP8PrtThUrYkqv4LU7/GMv3qFvlYrW0LVR6wEAsLeH4QMidyuHwR1h+xvIK+/0bS3YcNXWOJdtgl/ckr5E/x8Lh2XMsv6BcHYelbeHMAwZiaQ2HVvzv4fjXWJ6Bg5+kUdbIYfNb2OHFdyP2UOYvDtd5MVZLlrbFKQ8YiKVFHCrxS0MY5XzadJux/Rp1T9AoH2W2laqytC0+eMBALM3h2IL4n4D4d6KEJJfxPrfXSpa2xScPGIilORyuxa/s1T8RlZTMLW2LHx4wEEurOFyLH7yLsKeeKtUa9ljaFv17wEAsTeLwLn4RwVT+aGpj5W2WtsU1DxiIZXM4vIs/N9aXRpfeiM/9ayRL2+KPBwzE0iQO1+LHWFOGO7mhjdTJja8IpkhuaVsc8ICBWFrF4Vr8gwj+g/xyKKeZ9PzcXitZ2hafPGAgluZwbEH8nErxmSghya9Rvk16pWRTsaKlbXHCAwZiaQ7HKeKXGxvpeaWRquQQNycnvUO+m4xEIyhzyPMNlqdcr5UsbYtPHjAQS4s4LoTkuRzO88pn4ssOJs714Xibc2z2Zs/t9ij3h708J7J9jpw3uMy/wPot8trJ0rb45gEDsTSF4zz5mOXxIGYhPPJgoDkGoHHOFeP0/fNThj3NERIO9clAiL/Pdg+vwUCIP2TQLQMh/m6bPhwP8YcGumUgxN9t04fjIf7QQLcMhPi7bfpwPMQfGuiWgRB/t00fjqvn9pAqvBI2Cxw12L9CzjlG3QTMot9M1tzfoWgLh7rnB/kmgaNgt9uAWYngTLgX+5JbaUDsS14Kh0r8MGYZOKrLgFlJQ5txLxiYW2qgFg6V+GHcS8CilIc1yh789oCBXDeHQyt+LwGL1hB8asOD3x4wkJPmcMyKHz938qF4KopxeZWvusZGa6578NsDBnLcKo5Z8cN3Efb7CbFpLpCJw11u8uC3BwxsnCZxaMSvUeYjzU4N7uPBbw8Y2LSbw6ERv5eARWtfOx789oCBvDeJg+KnYz9i+QPLXsJ4T4Y7uaGN1FUJHLUHZsUKD357wEDKG8Pxf7hEve++5OJ47p9DmXW55CVgUQ5bzToPfnvAQI5bwfEpfKHe1Z8xeglYRMxrJg9+e8BAzpvDoRnz82ePcXlMAkeNlC43VfL0YbS57KoHvz1gIKst4rg4Qi7X2NckcBSIZ6/DxBctTL0EzLrztrFgUeLUgryIFiNo1YIWiEO3xwA6Us6ViqBV22u6QFySAdWYv6TBOFcw4IWBEL+XlggcqzMQ4l+d8jDohYEQv5eWCByrMxDiX53yMOiFAYr/wwGM5F6wBY5goAYD/5CTUvy/DyuSy7bIg4EWGfhNnIphjzAReXcMhPi7a/JwWBg4Zm4PJzeZBa2ytE2yYP8KGecYrRowi7aZrP2/Q9EWDnXPD/LNAidZ2YZd04BZieDMuBcMzK3aIcVQEodK/HCak4EohBsBgjK/8OL6K6mrkRvbNguYJVxa+i8YmLeIQyV++G4ZsMjSdtr+VmUv/jeHQyt+y4BFlratBJ/a9eJ/czhmxY+fO/lIPW2QcbnKl1WWtscOWqx78b9VHLPiR6OLsDnGP5Q0F8ihY6fqLW1P4Vprmxf/m8ShEb+moeXbWs2+pfextF3al1PO58X/zeGg+GVOj+TjBng3rkjWpUd4m9SVLFraLunHqefy4n9LOPRzezDek+FObmgjdVWCVlnaPlWtJY/z4n9jOI6e22MZsMjSdkktn3ouL/43h0M75rcMWGRp+1TBljzOi//N4VCJHz97ZkGrLG2PFCw3dHKfM9pcZ9WL/y3iuDiiya6xr0nQKtg1s41GZ4/HxJc8TGsGzLqzaOi/ABhys3aogSOCVo1YjdW2GUBnFkGr2m7i8E7DgGrMrzlR7BMMbI2BEP/WWizwFmMgxF+MyjjR1hgI8W+txQJvMQZC/MWojBNtjQE+5+e8nGdYpiYvbc2v5vDiER3nUX2D5RnKfN4e6TQGOE2Det/9T65L5PwOd9U3lzQeSccAxH6FPXffUSOXyYS6g2OvMQN8Wbn77vyYN7zjk8T6SgxA/LcwdYv8q5VMdmEmxvxdNHM4mWPgqJ4fPU+XQass/c41mmWdFy5K4FD3/DBmFjipV9uWIs/ZtmyHFE8pHCrxw1ivQavM/E4b20PZUgOp/yVxqMQP45YBi3q1nba5h7JlO6T+F8OhFT8fD+XeA8i3u9xeK/Vquxafp57Xsh1SzMVwXKRnzZXxM6N5rlzlHUGvtsftAB4uUccXM2z4S6zzwcNb5D8gr54s2yF1rjSOWfHDuAj7fQpkVNZcIKNDVKu92n5ADhqdv7DPH1Suu2LZDqmnRXFohz0pgFz5Ua5ypbpeba9Er9qMZTukINU42PN/OBwpeXoilnNjfdlHrsQWg1ZZ+i38nqHX//N+5UAB+5wf2FSq2gUXcKYEjvugVRT/7wNDkj8gDMQyRj3rckMbqZMb3wfHLl3p1XbK2wrCTs1ly5btkAIqhCOCVqWkTpS9BGqagLjaJi9cFMOhueEluwzfIVMbUravscIJV1M3w+n+p5R7tX3PFfjlL+x3QwWf/DA9rcz7nZW//1q2w98oCmpRdcMLkrsMWmXpd9raKDNe0vNh4Usejn053WS15IWLkji0PT9JZi/fXdAqY7/JO9O3aHQGy+JPPhN/hVl3heV2V7POH0sNpB4WwaEWP0jm0Gb3BUyKYo1yr7YTbsn7f5N1k6JlO6QOl8KhFn9qPMrrMoDG5rAzTbwYfkX9mr1+ar+JsmrM34SnjTgBwV/BFX7RxZ/+SAsYCPEvIG/tQyF8PunheN/kv8Cv7W9tezHsqc1wofMPwucTny95ymGdeZUXjIVguz5NiN9189yBG4TOiAMUP4c9TBz3W05224HY8p8Q/zZaj8/0+aLrwbN9XAgmT9+2Qdk8SoqfP5skcWrS0PyZYo9qDEDkH1c7+ZEnBhZehFsOnsV3JbtOgze8vImKoFUgIdI0A8OQa+vBs57AywhaNd3UsXXMAMTP9wrNBM+KR53jFo71bhg46oYXV77M7OTHK4+xcK7PKo/aerUtSrT0XzB4ykvwoe75YYxPGl4j5+M2fjjNx2y/oMx7hqqpV9tCqqX/gsFTXooPlfhhzCx4U6+2RWyW/gsGT3lJPlTih/PFAgWdQGSvtoUqS/8Fg6e8GB9a8fPxUO49gIz3ub1W6tW28Gnpv2DwlBfj42LOK/zM8KXGXPpkbodTtvdqW7iy9F8wpDnw8P6OL4gowM0Hz5oVP5wUYfNjlkNJc4EcOnaqvlfbwoml/4LhPof4+UtvOZ+oKB/aYc89AQcKjw7Ur1Hdq23h1tJ/weApV/Oh6flzY31xVq5EPvevkXq1LVxa+i8Ydjl6/eaCZ82KH05H0KoHMtityDBPbvj39yhQY8n9GD6w1I4KNza5t16aD+2wp1igoD2P5it6tS3MWPovGDzlxfiY7fkHry0DFvVqWwRn6b9g2OXoefmL10zwLFXPD6cjaNUgg0EAnM/+dKiqmllyn3GsqeBZ2p6fPFxjiaBVZ2efg4cvIMpbkrJSsuQ+dbGp4Flq8aOx+Zzf5LO5Xm2L6iz9FwxDzvZvJniWWvwjEmK1QwZwETYVPEs15u+wncPlGQZwIVxhl00HzwrxzzRybN5nAMK/RO3mg2fFsGe/baNmgoFB+E0EzwrxTzR0bHrIwCD8ZoJnhfgftm+sTTPAT1n5oov5fcJFYfIU8B7AiYUQ/4nE9XgYRN5U8KwQf48q3rjPuAj5pOnJ4IZMMjzaqxD/0ZTFAdYMQPx8u744eFY86rRuybBvxsBRPT+uuAhatXKwLlGGJfeCgbkXHCmmU8vqnh9OR9CqlYN1SaNaci8YmHvBkWJaUlaJH05H0KqBZXDBCX43WHaRfpeQrznWkvsUnxccKaalZZX4YaRYoKATAPdqW6iy9F8wMPeCI8W0qKwVPx8r5T6mlm9Y5bHTIjAHDu7VttBh6b9gYO4FR4ppUfli7mj83Gmeo0oUh7nTHbW9V9tCkqX/goG5FxyCCXguUV4cPGtW/DAiwuZY91DSXCCHjp2q79W2cGLpv2Bg7gXHDhPEXyR4lnbYkxKRK6sDBeUOXljXq22hzdJ/wcDcC44U02RZ0/PnxvpyUukRImiVMFI2t+Q+9cQLDg7BigXPmhU/jEXQqlQGd2UZ5skN//4eBWosuU/he8FBTMBSLHiWdthTLFBQSqqy3KttocfSf8HA3AuOFNOi8mzPP5zdMnBSr7alYS39FwzMveBg789f3sXBs1Q9P4xF0KpBBgPx3QWtstTAQH2aFQmepe35afgaSwSt6jtolaUGUvEXCZ6lFj+ufD7nN/lcrVfb0tqW/gsG5l5wAEqR4Flq8ackRDkYsGQAF2GR4FmqMb+lo2E7GJhiABfCFbafFDwrxD/FbGxzzQCEfwmAJwfPimGP6+YNcIcYGIS/KHhWiP8Qu1HvloFB+IuDZ6Xif4OTjh2+QR0/YogUDHhiQBU8C9p9A9AcGmUTxc/5KYceYVadu5JFFJXBwAwDELU2eJYEXMie8S/NHZQhBPfEkgAAAABJRU5ErkJggg==", - "text/latex": [ - "$\\displaystyle \\left[\\begin{matrix}1 & 0 & 0 & 0 & 0 & 0\\\\0 & 1 & 0 & 0 & 0 & 0\\\\0 & 0 & 1 & 0 & 0 & 0\\\\0 & 0 & 0 & \\frac{1}{2} & 0 & 0\\\\0 & 0 & 0 & 0 & \\frac{1}{2} & 0\\\\0 & 0 & 0 & 0 & 0 & \\frac{1}{2}\\end{matrix}\\right]$" - ], - "text/plain": [ - "⎡1 0 0 0 0 0 ⎤\n", - "⎢ ⎥\n", - "⎢0 1 0 0 0 0 ⎥\n", - "⎢ ⎥\n", - "⎢0 0 1 0 0 0 ⎥\n", - "⎢ ⎥\n", - "⎢0 0 0 1/2 0 0 ⎥\n", - "⎢ ⎥\n", - "⎢0 0 0 0 1/2 0 ⎥\n", - "⎢ ⎥\n", - "⎣0 0 0 0 0 1/2⎦" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ - "def identity(x):\n", - " return x\n", - "\n", + "### Array\n", "\n", - "FourthOrderTensor().from_operator(identity).as_voigt()" + "The underlying fourth-order array can also be shown via the `as_array` method." ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 7, "metadata": {}, "outputs": [ { "data": { - "image/png": "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", "text/latex": [ - "$\\displaystyle \\left[\\begin{matrix}1 & 0 & 0 & 0 & 0 & 0\\\\0 & 1 & 0 & 0 & 0 & 0\\\\0 & 0 & 1 & 0 & 0 & 0\\\\0 & 0 & 0 & 1 & 0 & 0\\\\0 & 0 & 0 & 0 & 1 & 0\\\\0 & 0 & 0 & 0 & 0 & 1\\end{matrix}\\right]$" + "$\\displaystyle a$" ], "text/plain": [ - "⎡1 0 0 0 0 0⎤\n", - "⎢ ⎥\n", - "⎢0 1 0 0 0 0⎥\n", - "⎢ ⎥\n", - "⎢0 0 1 0 0 0⎥\n", - "⎢ ⎥\n", - "⎢0 0 0 1 0 0⎥\n", - "⎢ ⎥\n", - "⎢0 0 0 0 1 0⎥\n", - "⎢ ⎥\n", - "⎣0 0 0 0 0 1⎦" + "a" ] }, - "execution_count": 5, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "FourthOrderTensor().from_operator(identity).as_mandel()" + "FourthOrderTensor(dim=2).as_array()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "By default, it is a `ArraySymbol` object. Its components can be shown via the `as_explicit` method." ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 8, "metadata": {}, "outputs": [ { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAFgAAABLCAYAAAD010ABAAAACXBIWXMAAA7EAAAOxAGVKw4bAAAEkklEQVR4Ae2d/00VQRDHwfi3IZpYAHYAWoHQgdiBWgb8Z7ADtQIDHWgHBjrAAkwkxAr8fuEGj3Xfu+Fm583dczY59vbn7Hxu3+zd7iRsHh4e7mxsbJzhqoXTo6Ojg1pB5t0QAJ8L3G3XeKBs82Gv4APuWbkffvQTeV8lcFzJ3UfeK+b3AX8E8QRaobUsC8w+leXIY9Y/gMt61TQa06Sc4NrF/VW1kkMmZMlM+YXun+E6Rt5KJoRFdn8GL8QCAVso/IzrEtdzXFWbg3yXAPlcI94jPqWAbjxniPdxuUJG/ybZDzREIOQK1wGud6j/RdOmVR3IfIu+thBfw2W/uOcvh+mPTHuFFrJVgL0UUPbLt5jzSt3vyNsDBP66vIJZ9hwA74EeTVMZxDSw3CuYZU8asHJ2Pvag20r2pAEDnMBb9rbiZSKayJ46YM3kfKKp5FRnUPbUAddsr7CSGcb3Yo/QRPakAcMOimmomQHJk8WuKeRWsicNuCP2DfF2hZ7MYJZ7BbPsOQDmZzm/Hsuwi4zz3kwry1ukzbLHABbDLjOohSIL+wBAbqZcIr7ePGFF3NM8vMb1hmmv0EK2ai+CCkAYnyaDvNifII/272s3kOtCpz+crdzceYGYixrjl0jXvvBQ1DSYZN8HMD8bQwJAcrHjPsjKg1X2GBOxciXnLDABOz+9BJyAnQk4d58zOAE7E3DuPmdwAnYm4Nx9zuAE7EzAuXv1pzLHgc/GMOePTv4OYu6JzMbpRQ0YcE0OGAQ0JkAud85m6/SissFQMtL5Y9ZOLyrAmEFmB4wxs3cCbcx6awFzD7h2CCjnYSxfx2DWexBwZwOH4K3kdGNoEC3LW+k9CBiDFnjc9F4UuBCtW2iitwawBpyc02nqrlOdQb01gGu2VyDJU/Zy/hA5EXETvQn4UTd6ie8oA1skpqFmBiRPFrs7beecMOr9VHQn4N9dQmIp68dmB4x+ZzO6H6v3T9FRYyJY1+yAIQJnFpv1VgHGzyXM+aN4ILKoiO0vitsmW+it3ovA0E0OGBbVoehsnV7UgDujH+X8MVunF5WJsMy+/71tAnaeAQk4ATsTcO4+Z3ACdibg3H3O4ATsTMC5+5zBCdiZgHP36k9ljgOfy2GOJ5GyO913EN/b6UUNGAqGOJ50yoXIhs48UDA5vahsMARFOp5EyjY7vagA4ymaHTA4E0eGSNkjh/y3mRbwHprUDgHlLI7lXiFStlmnQcCdHRoS5HLCECl7SGFt+SBgdCTw5HS51recLtfKLHmRsi3jvm2rAXxbecmNnJUtqeJWFCl7UCkN4JrtlY5lhnk5nkTKFh1N8SBg2EExDTUzIHmy2JkGUzaOlF2OZWx6EHDX8VgHjLHj6reLlN0fx6h7LWCzA8ao0d00ipRtGPZNUxVg/FTDHE8iZRd0ZTGVdacorifVexFoHuZ4EikbD9jk9KIG3C04UY4nXGijZJucXlQmoj75M1dDIAFrKBnqJGADPE3TBKyhZKiTgA3wNE37bxEXeFMo2+Q/KimJFGkwW/iPSliVgLmPsOgVyGWPgYLXKMhBcFWlP/gz38bXcncWAAAAAElFTkSuQmCC", "text/latex": [ - "$\\displaystyle \\left[\\begin{matrix}1 & 0 & 0\\\\0 & 1 & 0\\\\0 & 0 & 1\\end{matrix}\\right]$" + "$\\displaystyle \\left[\\begin{matrix}\\left[\\begin{matrix}{{a}_{0, 0, 0, 0}} & {{a}_{0, 0, 0, 1}}\\\\{{a}_{0, 0, 1, 0}} & {{a}_{0, 0, 1, 1}}\\end{matrix}\\right] & \\left[\\begin{matrix}{{a}_{0, 1, 0, 0}} & {{a}_{0, 1, 0, 1}}\\\\{{a}_{0, 1, 1, 0}} & {{a}_{0, 1, 1, 1}}\\end{matrix}\\right]\\\\\\left[\\begin{matrix}{{a}_{1, 0, 0, 0}} & {{a}_{1, 0, 0, 1}}\\\\{{a}_{1, 0, 1, 0}} & {{a}_{1, 0, 1, 1}}\\end{matrix}\\right] & \\left[\\begin{matrix}{{a}_{1, 1, 0, 0}} & {{a}_{1, 1, 0, 1}}\\\\{{a}_{1, 1, 1, 0}} & {{a}_{1, 1, 1, 1}}\\end{matrix}\\right]\\end{matrix}\\right]$" ], "text/plain": [ - "⎡1 0 0⎤\n", - "⎢ ⎥\n", - "⎢0 1 0⎥\n", - "⎢ ⎥\n", - "⎣0 0 1⎦" + "⎡⎡a[0, 0, 0, 0] a[0, 0, 0, 1]⎤ ⎡a[0, 1, 0, 0] a[0, 1, 0, 1]⎤⎤\n", + "⎢⎢ ⎥ ⎢ ⎥⎥\n", + "⎢⎣a[0, 0, 1, 0] a[0, 0, 1, 1]⎦ ⎣a[0, 1, 1, 0] a[0, 1, 1, 1]⎦⎥\n", + "⎢ ⎥\n", + "⎢⎡a[1, 0, 0, 0] a[1, 0, 0, 1]⎤ ⎡a[1, 1, 0, 0] a[1, 1, 0, 1]⎤⎥\n", + "⎢⎢ ⎥ ⎢ ⎥⎥\n", + "⎣⎣a[1, 0, 1, 0] a[1, 0, 1, 1]⎦ ⎣a[1, 1, 1, 0] a[1, 1, 1, 1]⎦⎦" ] }, - "execution_count": 5, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "FourthOrderTensor(dim=2).from_operator(identity).as_mandel()" + "FourthOrderTensor(dim=2).as_array().as_explicit()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Initialization by matrix representations\n", + "\n", + "The default constructor of `FourthOrderTensor` uses a generic tensor object. It can also be initialized from the previous matrix representations." ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 34, "metadata": {}, "outputs": [ { "data": { - "image/png": "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", "text/latex": [ - "$\\displaystyle \\left[\\begin{matrix}\\frac{2}{3} & - \\frac{1}{3} & - \\frac{1}{3} & 0 & 0 & 0\\\\- \\frac{1}{3} & \\frac{2}{3} & - \\frac{1}{3} & 0 & 0 & 0\\\\- \\frac{1}{3} & - \\frac{1}{3} & \\frac{2}{3} & 0 & 0 & 0\\\\0 & 0 & 0 & 1 & 0 & 0\\\\0 & 0 & 0 & 0 & 1 & 0\\\\0 & 0 & 0 & 0 & 0 & 1\\end{matrix}\\right]$" + "$\\displaystyle \\left[\\begin{matrix}170 & 121 & 50 & 99 & 150 & 102\\\\121 & 40 & 136 & 175 & 141 & 107\\\\50 & 136 & 148 & 118 & 114 & 123\\\\99 & 175 & 118 & 110 & 104 & 164\\\\150 & 141 & 114 & 104 & 122 & 136\\\\102 & 107 & 123 & 164 & 136 & 148\\end{matrix}\\right]$" ], "text/plain": [ - "⎡2/3 -1/3 -1/3 0 0 0⎤\n", - "⎢ ⎥\n", - "⎢-1/3 2/3 -1/3 0 0 0⎥\n", - "⎢ ⎥\n", - "⎢-1/3 -1/3 2/3 0 0 0⎥\n", - "⎢ ⎥\n", - "⎢ 0 0 0 1 0 0⎥\n", - "⎢ ⎥\n", - "⎢ 0 0 0 0 1 0⎥\n", - "⎢ ⎥\n", - "⎣ 0 0 0 0 0 1⎦" + "⎡170 121 50 99 150 102⎤\n", + "⎢ ⎥\n", + "⎢121 40 136 175 141 107⎥\n", + "⎢ ⎥\n", + "⎢50 136 148 118 114 123⎥\n", + "⎢ ⎥\n", + "⎢99 175 118 110 104 164⎥\n", + "⎢ ⎥\n", + "⎢150 141 114 104 122 136⎥\n", + "⎢ ⎥\n", + "⎣102 107 123 164 136 148⎦" ] }, - "execution_count": 6, + "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "def dev(eps):\n", - " dim = eps.shape[0]\n", - " tr = sympy.trace(eps)\n", - " return eps - tr / dim * sympy.eye(dim)\n", - "\n", - "\n", - "FourthOrderTensor().from_operator(dev).as_mandel()" + "dim = 3\n", + "n = 6 if dim == 3 else 3 # symmetric second-order tensors\n", + "a_mandel = sympy.randMatrix(n, n)\n", + "a_mandel += a_mandel.T\n", + "a_mandel # Mandel representation of the tensor" ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 35, + "metadata": {}, + "outputs": [], + "source": [ + "a = FourthOrderTensor(dim).from_mandel(a_mandel) # initialize from Mandel notation" + ] + }, + { + "cell_type": "code", + "execution_count": 37, "metadata": {}, "outputs": [ { "data": { - "image/png": "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", "text/latex": [ - "$\\displaystyle \\left[\\begin{matrix}\\frac{1}{2} & - \\frac{1}{2} & 0\\\\- \\frac{1}{2} & \\frac{1}{2} & 0\\\\0 & 0 & 1\\end{matrix}\\right]$" + "$\\displaystyle \\left[\\begin{matrix}170 & 121 & 50 & \\frac{99 \\sqrt{2}}{2} & 75 \\sqrt{2} & 51 \\sqrt{2}\\\\121 & 40 & 136 & \\frac{175 \\sqrt{2}}{2} & \\frac{141 \\sqrt{2}}{2} & \\frac{107 \\sqrt{2}}{2}\\\\50 & 136 & 148 & 59 \\sqrt{2} & 57 \\sqrt{2} & \\frac{123 \\sqrt{2}}{2}\\\\\\frac{99 \\sqrt{2}}{2} & \\frac{175 \\sqrt{2}}{2} & 59 \\sqrt{2} & 55 & 52 & 82\\\\75 \\sqrt{2} & \\frac{141 \\sqrt{2}}{2} & 57 \\sqrt{2} & 52 & 61 & 68\\\\51 \\sqrt{2} & \\frac{107 \\sqrt{2}}{2} & \\frac{123 \\sqrt{2}}{2} & 82 & 68 & 74\\end{matrix}\\right]$" ], "text/plain": [ - "⎡1/2 -1/2 0⎤\n", - "⎢ ⎥\n", - "⎢-1/2 1/2 0⎥\n", - "⎢ ⎥\n", - "⎣ 0 0 1⎦" + "⎡ 99⋅√2 ⎤\n", + "⎢ 170 121 50 ───── 75⋅√2 51⋅√2 ⎥\n", + "⎢ 2 ⎥\n", + "⎢ ⎥\n", + "⎢ 175⋅√2 141⋅√2 107⋅√2⎥\n", + "⎢ 121 40 136 ────── ────── ──────⎥\n", + "⎢ 2 2 2 ⎥\n", + "⎢ ⎥\n", + "⎢ 123⋅√2⎥\n", + "⎢ 50 136 148 59⋅√2 57⋅√2 ──────⎥\n", + "⎢ 2 ⎥\n", + "⎢ ⎥\n", + "⎢99⋅√2 175⋅√2 ⎥\n", + "⎢───── ────── 59⋅√2 55 52 82 ⎥\n", + "⎢ 2 2 ⎥\n", + "⎢ ⎥\n", + "⎢ 141⋅√2 ⎥\n", + "⎢75⋅√2 ────── 57⋅√2 52 61 68 ⎥\n", + "⎢ 2 ⎥\n", + "⎢ ⎥\n", + "⎢ 107⋅√2 123⋅√2 ⎥\n", + "⎢51⋅√2 ────── ────── 82 68 74 ⎥\n", + "⎣ 2 2 ⎦" ] }, - "execution_count": 10, + "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "FourthOrderTensor(dim=2).from_operator(dev).as_mandel()" + "a.as_voigt() # now, represent as Voigt notation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now, we initialize from this Voigt notation and then represent as Mandel notation. We should recover the initial matrix.\n", + "\n", + "Thanks to the [Fluent API](https://en.wikipedia.org/wiki/Fluent_interface#Python), `as_mandel` can be applied directly after `from_voigt`." ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 38, "metadata": {}, "outputs": [ { "data": { - "image/png": "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", "text/latex": [ - "$\\displaystyle \\left[\\begin{matrix}\\lambda + 2 \\mu & \\lambda & \\lambda & 0 & 0 & 0\\\\\\lambda & \\lambda + 2 \\mu & \\lambda & 0 & 0 & 0\\\\\\lambda & \\lambda & \\lambda + 2 \\mu & 0 & 0 & 0\\\\0 & 0 & 0 & 2 \\mu & 0 & 0\\\\0 & 0 & 0 & 0 & 2 \\mu & 0\\\\0 & 0 & 0 & 0 & 0 & 2 \\mu\\end{matrix}\\right]$" + "$\\displaystyle \\left[\\begin{matrix}170 & 121 & 50 & 99 & 150 & 102\\\\121 & 40 & 136 & 175 & 141 & 107\\\\50 & 136 & 148 & 118 & 114 & 123\\\\99 & 175 & 118 & 110 & 104 & 164\\\\150 & 141 & 114 & 104 & 122 & 136\\\\102 & 107 & 123 & 164 & 136 & 148\\end{matrix}\\right]$" ], "text/plain": [ - "⎡λ + 2⋅μ λ λ 0 0 0 ⎤\n", - "⎢ ⎥\n", - "⎢ λ λ + 2⋅μ λ 0 0 0 ⎥\n", - "⎢ ⎥\n", - "⎢ λ λ λ + 2⋅μ 0 0 0 ⎥\n", - "⎢ ⎥\n", - "⎢ 0 0 0 2⋅μ 0 0 ⎥\n", - "⎢ ⎥\n", - "⎢ 0 0 0 0 2⋅μ 0 ⎥\n", - "⎢ ⎥\n", - "⎣ 0 0 0 0 0 2⋅μ⎦" + "⎡170 121 50 99 150 102⎤\n", + "⎢ ⎥\n", + "⎢121 40 136 175 141 107⎥\n", + "⎢ ⎥\n", + "⎢50 136 148 118 114 123⎥\n", + "⎢ ⎥\n", + "⎢99 175 118 110 104 164⎥\n", + "⎢ ⎥\n", + "⎢150 141 114 104 122 136⎥\n", + "⎢ ⎥\n", + "⎣102 107 123 164 136 148⎦" ] }, - "execution_count": 2, + "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "def linear_elastic(eps, dim=3):\n", - " lmbda, mu = sympy.symbols(\"lambda, mu\", positive=True)\n", - " return lmbda * sympy.trace(eps) * sympy.eye(dim) + 2 * mu * eps\n", - "\n", - "\n", - "FourthOrderTensor().from_operator(linear_elastic).as_mandel()" + "FourthOrderTensor(dim).from_voigt(a.as_voigt()).as_mandel()" ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 39, "metadata": {}, "outputs": [ { @@ -493,94 +635,289 @@ "True" ] }, - "execution_count": 3, + "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "FourthOrderTensor().from_mandel(\n", - " FourthOrderTensor().from_operator(linear_elastic).as_mandel()\n", - ").as_voigt() == FourthOrderTensor().from_operator(linear_elastic).as_voigt()" + "FourthOrderTensor(dim).from_voigt(a.as_voigt()).as_mandel() == a_mandel" ] }, { - "cell_type": "code", - "execution_count": 4, + "cell_type": "markdown", "metadata": {}, - "outputs": [ + "source": [ + "## Initialization by an operator\n", + "\n", + "`FourthOrderTensor` can also be initialized from a linear operator $T:V\\to V$ defining the fourth-order tensor. A Python function operating on `sympy.Matrix` is required." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Identity\n", + "\n", + "The identity map just return the input tensor as the output." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "def identity(x):\n", + " return x" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Using Voigt notation, the matrix representation of the identity map is not identity!" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ { "data": { - "image/png": "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", "text/latex": [ - "$\\displaystyle \\left[\\begin{matrix}\\lambda + 2 \\mu & \\lambda & \\lambda & 0 & 0 & 0\\\\\\lambda & \\lambda + 2 \\mu & \\lambda & 0 & 0 & 0\\\\\\lambda & \\lambda & \\lambda + 2 \\mu & 0 & 0 & 0\\\\0 & 0 & 0 & \\mu & 0 & 0\\\\0 & 0 & 0 & 0 & \\mu & 0\\\\0 & 0 & 0 & 0 & 0 & \\mu\\end{matrix}\\right]$" + "$\\displaystyle \\left[\\begin{matrix}1 & 0 & 0 & 0 & 0 & 0\\\\0 & 1 & 0 & 0 & 0 & 0\\\\0 & 0 & 1 & 0 & 0 & 0\\\\0 & 0 & 0 & \\frac{1}{2} & 0 & 0\\\\0 & 0 & 0 & 0 & \\frac{1}{2} & 0\\\\0 & 0 & 0 & 0 & 0 & \\frac{1}{2}\\end{matrix}\\right]$" ], "text/plain": [ - "⎡λ + 2⋅μ λ λ 0 0 0⎤\n", - "⎢ ⎥\n", - "⎢ λ λ + 2⋅μ λ 0 0 0⎥\n", - "⎢ ⎥\n", - "⎢ λ λ λ + 2⋅μ 0 0 0⎥\n", - "⎢ ⎥\n", - "⎢ 0 0 0 μ 0 0⎥\n", - "⎢ ⎥\n", - "⎢ 0 0 0 0 μ 0⎥\n", - "⎢ ⎥\n", - "⎣ 0 0 0 0 0 μ⎦" + "⎡1 0 0 0 0 0 ⎤\n", + "⎢ ⎥\n", + "⎢0 1 0 0 0 0 ⎥\n", + "⎢ ⎥\n", + "⎢0 0 1 0 0 0 ⎥\n", + "⎢ ⎥\n", + "⎢0 0 0 1/2 0 0 ⎥\n", + "⎢ ⎥\n", + "⎢0 0 0 0 1/2 0 ⎥\n", + "⎢ ⎥\n", + "⎣0 0 0 0 0 1/2⎦" ] }, - "execution_count": 4, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "FourthOrderTensor().from_operator(linear_elastic).as_voigt()" + "FourthOrderTensor().from_operator(identity).as_voigt()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "By comparison, with Mandel notation the matrix identity is well obtained." ] }, { "cell_type": "code", - "execution_count": 5, + "execution_count": 10, "metadata": {}, "outputs": [ { "data": { - "image/png": "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", "text/latex": [ - "$\\displaystyle \\left[\\begin{matrix}\\left[\\begin{matrix}\\lambda + 2 \\mu & 0 & 0\\\\0 & \\lambda & 0\\\\0 & 0 & \\lambda\\end{matrix}\\right] & \\left[\\begin{matrix}0 & \\mu & 0\\\\\\mu & 0 & 0\\\\0 & 0 & 0\\end{matrix}\\right] & \\left[\\begin{matrix}0 & 0 & \\mu\\\\0 & 0 & 0\\\\\\mu & 0 & 0\\end{matrix}\\right]\\\\\\left[\\begin{matrix}0 & \\mu & 0\\\\\\mu & 0 & 0\\\\0 & 0 & 0\\end{matrix}\\right] & \\left[\\begin{matrix}\\lambda & 0 & 0\\\\0 & \\lambda + 2 \\mu & 0\\\\0 & 0 & \\lambda\\end{matrix}\\right] & \\left[\\begin{matrix}0 & 0 & 0\\\\0 & 0 & \\mu\\\\0 & \\mu & 0\\end{matrix}\\right]\\\\\\left[\\begin{matrix}0 & 0 & \\mu\\\\0 & 0 & 0\\\\\\mu & 0 & 0\\end{matrix}\\right] & \\left[\\begin{matrix}0 & 0 & 0\\\\0 & 0 & \\mu\\\\0 & \\mu & 0\\end{matrix}\\right] & \\left[\\begin{matrix}\\lambda & 0 & 0\\\\0 & \\lambda & 0\\\\0 & 0 & \\lambda + 2 \\mu\\end{matrix}\\right]\\end{matrix}\\right]$" + "$\\displaystyle \\left[\\begin{matrix}1 & 0 & 0\\\\0 & 1 & 0\\\\0 & 0 & 1\\end{matrix}\\right]$" ], "text/plain": [ - "⎡⎡λ + 2⋅μ 0 0⎤ ⎡0 μ 0⎤ ⎡0 0 μ⎤ ⎤\n", - "⎢⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎥\n", - "⎢⎢ 0 λ 0⎥ ⎢μ 0 0⎥ ⎢0 0 0⎥ ⎥\n", - "⎢⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎥\n", - "⎢⎣ 0 0 λ⎦ ⎣0 0 0⎦ ⎣μ 0 0⎦ ⎥\n", - "⎢ ⎥\n", - "⎢ ⎡0 μ 0⎤ ⎡λ 0 0⎤ ⎡0 0 0⎤ ⎥\n", - "⎢ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎥\n", - "⎢ ⎢μ 0 0⎥ ⎢0 λ + 2⋅μ 0⎥ ⎢0 0 μ⎥ ⎥\n", - "⎢ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥ ⎥\n", - "⎢ ⎣0 0 0⎦ ⎣0 0 λ⎦ ⎣0 μ 0⎦ ⎥\n", - "⎢ ⎥\n", - "⎢ ⎡0 0 μ⎤ ⎡0 0 0⎤ ⎡λ 0 0 ⎤⎥\n", - "⎢ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥⎥\n", - "⎢ ⎢0 0 0⎥ ⎢0 0 μ⎥ ⎢0 λ 0 ⎥⎥\n", - "⎢ ⎢ ⎥ ⎢ ⎥ ⎢ ⎥⎥\n", - "⎣ ⎣μ 0 0⎦ ⎣0 μ 0⎦ ⎣0 0 λ + 2⋅μ⎦⎦" + "⎡1 0 0⎤\n", + "⎢ ⎥\n", + "⎢0 1 0⎥\n", + "⎢ ⎥\n", + "⎣0 0 1⎦" ] }, - "execution_count": 5, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "FourthOrderTensor().from_operator(linear_elastic).as_array()" + "FourthOrderTensor(dim=2).from_operator(identity).as_mandel()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Deviatoric operator\n", + "\n", + "The deviatoric operator computes the trace-free part of a second-order tensor. The trace of the output is zero." ] }, { "cell_type": "code", - "execution_count": 6, + "execution_count": 13, + "metadata": {}, + "outputs": [], + "source": [ + "def dev(eps):\n", + " dim = eps.shape[0]\n", + " tr = sympy.trace(eps)\n", + " return eps - tr / dim * sympy.eye(dim)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\left[\\begin{matrix}\\frac{2}{3} & - \\frac{1}{3} & - \\frac{1}{3} & 0 & 0 & 0\\\\- \\frac{1}{3} & \\frac{2}{3} & - \\frac{1}{3} & 0 & 0 & 0\\\\- \\frac{1}{3} & - \\frac{1}{3} & \\frac{2}{3} & 0 & 0 & 0\\\\0 & 0 & 0 & 1 & 0 & 0\\\\0 & 0 & 0 & 0 & 1 & 0\\\\0 & 0 & 0 & 0 & 0 & 1\\end{matrix}\\right]$" + ], + "text/plain": [ + "⎡2/3 -1/3 -1/3 0 0 0⎤\n", + "⎢ ⎥\n", + "⎢-1/3 2/3 -1/3 0 0 0⎥\n", + "⎢ ⎥\n", + "⎢-1/3 -1/3 2/3 0 0 0⎥\n", + "⎢ ⎥\n", + "⎢ 0 0 0 1 0 0⎥\n", + "⎢ ⎥\n", + "⎢ 0 0 0 0 1 0⎥\n", + "⎢ ⎥\n", + "⎣ 0 0 0 0 0 1⎦" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "FourthOrderTensor().from_operator(dev).as_mandel()" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\left[\\begin{matrix}\\frac{1}{2} & - \\frac{1}{2} & 0\\\\- \\frac{1}{2} & \\frac{1}{2} & 0\\\\0 & 0 & \\frac{1}{2}\\end{matrix}\\right]$" + ], + "text/plain": [ + "⎡1/2 -1/2 0 ⎤\n", + "⎢ ⎥\n", + "⎢-1/2 1/2 0 ⎥\n", + "⎢ ⎥\n", + "⎣ 0 0 1/2⎦" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "FourthOrderTensor(dim=2).from_operator(dev).as_voigt()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Linear elasticity\n", + "\n", + "The fourth-order linear elastic stiffness tensor can be defined using two Lamé constants $\\lambda$ and $\\mu$." + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "def linear_elastic(eps):\n", + " dim = eps.shape[0]\n", + " lmbda, mu = sympy.symbols(\"lambda, mu\", positive=True)\n", + " return lmbda * sympy.trace(eps) * sympy.eye(dim) + 2 * mu * eps" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\left[\\begin{matrix}\\lambda + 2 \\mu & \\lambda & \\lambda & 0 & 0 & 0\\\\\\lambda & \\lambda + 2 \\mu & \\lambda & 0 & 0 & 0\\\\\\lambda & \\lambda & \\lambda + 2 \\mu & 0 & 0 & 0\\\\0 & 0 & 0 & 2 \\mu & 0 & 0\\\\0 & 0 & 0 & 0 & 2 \\mu & 0\\\\0 & 0 & 0 & 0 & 0 & 2 \\mu\\end{matrix}\\right]$" + ], + "text/plain": [ + "⎡λ + 2⋅μ λ λ 0 0 0 ⎤\n", + "⎢ ⎥\n", + "⎢ λ λ + 2⋅μ λ 0 0 0 ⎥\n", + "⎢ ⎥\n", + "⎢ λ λ λ + 2⋅μ 0 0 0 ⎥\n", + "⎢ ⎥\n", + "⎢ 0 0 0 2⋅μ 0 0 ⎥\n", + "⎢ ⎥\n", + "⎢ 0 0 0 0 2⋅μ 0 ⎥\n", + "⎢ ⎥\n", + "⎣ 0 0 0 0 0 2⋅μ⎦" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "FourthOrderTensor().from_operator(linear_elastic).as_mandel()" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\left[\\begin{matrix}\\lambda + 2 \\mu & \\lambda & 0\\\\\\lambda & \\lambda + 2 \\mu & 0\\\\0 & 0 & \\mu\\end{matrix}\\right]$" + ], + "text/plain": [ + "⎡λ + 2⋅μ λ 0⎤\n", + "⎢ ⎥\n", + "⎢ λ λ + 2⋅μ 0⎥\n", + "⎢ ⎥\n", + "⎣ 0 0 μ⎦" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "FourthOrderTensor(dim=2).from_operator(linear_elastic).as_voigt()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can verify that the tensor intialized from Mandel representation provided by `as_mandel` and then converted to Voigt notation is the same as that directly initialized from the operator. " + ] + }, + { + "cell_type": "code", + "execution_count": 40, "metadata": {}, "outputs": [ { @@ -589,20 +926,54 @@ "True" ] }, - "execution_count": 6, + "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "FourthOrderTensor().from_voigt(\n", - " FourthOrderTensor().from_operator(linear_elastic).as_voigt()\n", - ").as_mandel() == FourthOrderTensor().from_operator(linear_elastic).as_mandel()" + "C = FourthOrderTensor().from_operator(linear_elastic)\n", + "\n", + "FourthOrderTensor().from_mandel(C.as_mandel()).as_voigt() == C.as_voigt()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The same applies for Voigt notation." + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "FourthOrderTensor().from_voigt(C.as_voigt()).as_mandel() == C.as_mandel()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Conversion between array and the Voigt / Mandel / unsymmetric notations also works." ] }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 42, "metadata": {}, "outputs": [ { @@ -611,7 +982,7 @@ "True" ] }, - "execution_count": 18, + "execution_count": 42, "metadata": {}, "output_type": "execute_result" } @@ -624,70 +995,327 @@ ] }, { - "cell_type": "code", - "execution_count": 5, + "cell_type": "code", + "execution_count": 43, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 43, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a_mandel = sympy.randMatrix(6)\n", + "a_mandel = a_mandel + a_mandel.T\n", + "a = FourthOrderTensor().from_mandel(a_mandel).as_array()\n", + "FourthOrderTensor().from_array(a).as_mandel() == a_mandel" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "True" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a_unsym = sympy.randMatrix(9)\n", + "a = FourthOrderTensor(symmetry=None).from_unsym(a_unsym).as_array()\n", + "FourthOrderTensor(symmetry=None).from_array(a).as_unsym() == a_unsym" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Change of basis for second-order tensors\n", + "\n", + "A change of basis in $\\mathbb{R}^d$ ($d$ is the spatial dimension `dim`) can be represented by an unsymmetric matrix $\\mathbf{R}$ whose columns contain the components of the new basis vectors in the old ones. For a second-order tensor $\\sigma$ written as matrices, its representation in the new basis will be given by\n", + "\n", + "$$\n", + "\\sigma'=\\mathbf{R}^\\mathsf{T}\\sigma\\mathbf{R}.\n", + "$$\n", + "\n", + "The change of basis $\\sigma\\mapsto\\sigma'$ can be regarded as a fourth-order tensor operating on second-order ones." + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [], + "source": [ + "def rotation(x):\n", + " r = sympy.MatrixSymbol(\"R\", x.shape[0], x.shape[0]) # generic unsymmetric matrix\n", + " return r.T * x * r" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For symmetric second-order tensors, Mandel notation can be used." + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\left[\\begin{matrix}R_{0, 0}^{2} & R_{1, 0}^{2} & R_{2, 0}^{2} & \\sqrt{2} R_{0, 0} R_{1, 0} & \\sqrt{2} R_{0, 0} R_{2, 0} & \\sqrt{2} R_{1, 0} R_{2, 0}\\\\R_{0, 1}^{2} & R_{1, 1}^{2} & R_{2, 1}^{2} & \\sqrt{2} R_{0, 1} R_{1, 1} & \\sqrt{2} R_{0, 1} R_{2, 1} & \\sqrt{2} R_{1, 1} R_{2, 1}\\\\R_{0, 2}^{2} & R_{1, 2}^{2} & R_{2, 2}^{2} & \\sqrt{2} R_{0, 2} R_{1, 2} & \\sqrt{2} R_{0, 2} R_{2, 2} & \\sqrt{2} R_{1, 2} R_{2, 2}\\\\\\sqrt{2} R_{0, 0} R_{0, 1} & \\sqrt{2} R_{1, 0} R_{1, 1} & \\sqrt{2} R_{2, 0} R_{2, 1} & R_{0, 0} R_{1, 1} + R_{0, 1} R_{1, 0} & R_{0, 0} R_{2, 1} + R_{0, 1} R_{2, 0} & R_{1, 0} R_{2, 1} + R_{1, 1} R_{2, 0}\\\\\\sqrt{2} R_{0, 0} R_{0, 2} & \\sqrt{2} R_{1, 0} R_{1, 2} & \\sqrt{2} R_{2, 0} R_{2, 2} & R_{0, 0} R_{1, 2} + R_{0, 2} R_{1, 0} & R_{0, 0} R_{2, 2} + R_{0, 2} R_{2, 0} & R_{1, 0} R_{2, 2} + R_{1, 2} R_{2, 0}\\\\\\sqrt{2} R_{0, 1} R_{0, 2} & \\sqrt{2} R_{1, 1} R_{1, 2} & \\sqrt{2} R_{2, 1} R_{2, 2} & R_{0, 1} R_{1, 2} + R_{0, 2} R_{1, 1} & R_{0, 1} R_{2, 2} + R_{0, 2} R_{2, 1} & R_{1, 1} R_{2, 2} + R_{1, 2} R_{2, 1}\\end{matrix}\\right]$" + ], + "text/plain": [ + "⎡ 2 2 2 \n", + "⎢ R₀₀ R₁₀ R₂₀ √2⋅R₀₀⋅R₁₀ √2⋅R₀₀⋅R₂₀ \n", + "⎢ \n", + "⎢ 2 2 2 \n", + "⎢ R₀₁ R₁₁ R₂₁ √2⋅R₀₁⋅R₁₁ √2⋅R₀₁⋅R₂₁ \n", + "⎢ \n", + "⎢ 2 2 2 \n", + "⎢ R₀₂ R₁₂ R₂₂ √2⋅R₀₂⋅R₁₂ √2⋅R₀₂⋅R₂₂ \n", + "⎢ \n", + "⎢√2⋅R₀₀⋅R₀₁ √2⋅R₁₀⋅R₁₁ √2⋅R₂₀⋅R₂₁ R₀₀⋅R₁₁ + R₀₁⋅R₁₀ R₀₀⋅R₂₁ + R₀₁⋅R₂₀ R₁₀\n", + "⎢ \n", + "⎢√2⋅R₀₀⋅R₀₂ √2⋅R₁₀⋅R₁₂ √2⋅R₂₀⋅R₂₂ R₀₀⋅R₁₂ + R₀₂⋅R₁₀ R₀₀⋅R₂₂ + R₀₂⋅R₂₀ R₁₀\n", + "⎢ \n", + "⎣√2⋅R₀₁⋅R₀₂ √2⋅R₁₁⋅R₁₂ √2⋅R₂₁⋅R₂₂ R₀₁⋅R₁₂ + R₀₂⋅R₁₁ R₀₁⋅R₂₂ + R₀₂⋅R₂₁ R₁₁\n", + "\n", + " ⎤\n", + "√2⋅R₁₀⋅R₂₀ ⎥\n", + " ⎥\n", + " ⎥\n", + "√2⋅R₁₁⋅R₂₁ ⎥\n", + " ⎥\n", + " ⎥\n", + "√2⋅R₁₂⋅R₂₂ ⎥\n", + " ⎥\n", + "⋅R₂₁ + R₁₁⋅R₂₀⎥\n", + " ⎥\n", + "⋅R₂₂ + R₁₂⋅R₂₀⎥\n", + " ⎥\n", + "⋅R₂₂ + R₁₂⋅R₂₁⎦" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "FourthOrderTensor().from_operator(rotation).as_mandel()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For unsymmetric second-order tensors, the unsymmetric representation can be used." + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\left[\\begin{matrix}R_{0, 0}^{2} & R_{1, 0}^{2} & R_{2, 0}^{2} & R_{0, 0} R_{1, 0} & R_{0, 0} R_{1, 0} & R_{0, 0} R_{2, 0} & R_{0, 0} R_{2, 0} & R_{1, 0} R_{2, 0} & R_{1, 0} R_{2, 0}\\\\R_{0, 1}^{2} & R_{1, 1}^{2} & R_{2, 1}^{2} & R_{0, 1} R_{1, 1} & R_{0, 1} R_{1, 1} & R_{0, 1} R_{2, 1} & R_{0, 1} R_{2, 1} & R_{1, 1} R_{2, 1} & R_{1, 1} R_{2, 1}\\\\R_{0, 2}^{2} & R_{1, 2}^{2} & R_{2, 2}^{2} & R_{0, 2} R_{1, 2} & R_{0, 2} R_{1, 2} & R_{0, 2} R_{2, 2} & R_{0, 2} R_{2, 2} & R_{1, 2} R_{2, 2} & R_{1, 2} R_{2, 2}\\\\R_{0, 0} R_{0, 1} & R_{1, 0} R_{1, 1} & R_{2, 0} R_{2, 1} & R_{0, 0} R_{1, 1} & R_{0, 1} R_{1, 0} & R_{0, 0} R_{2, 1} & R_{0, 1} R_{2, 0} & R_{1, 0} R_{2, 1} & R_{1, 1} R_{2, 0}\\\\R_{0, 0} R_{0, 1} & R_{1, 0} R_{1, 1} & R_{2, 0} R_{2, 1} & R_{0, 1} R_{1, 0} & R_{0, 0} R_{1, 1} & R_{0, 1} R_{2, 0} & R_{0, 0} R_{2, 1} & R_{1, 1} R_{2, 0} & R_{1, 0} R_{2, 1}\\\\R_{0, 0} R_{0, 2} & R_{1, 0} R_{1, 2} & R_{2, 0} R_{2, 2} & R_{0, 0} R_{1, 2} & R_{0, 2} R_{1, 0} & R_{0, 0} R_{2, 2} & R_{0, 2} R_{2, 0} & R_{1, 0} R_{2, 2} & R_{1, 2} R_{2, 0}\\\\R_{0, 0} R_{0, 2} & R_{1, 0} R_{1, 2} & R_{2, 0} R_{2, 2} & R_{0, 2} R_{1, 0} & R_{0, 0} R_{1, 2} & R_{0, 2} R_{2, 0} & R_{0, 0} R_{2, 2} & R_{1, 2} R_{2, 0} & R_{1, 0} R_{2, 2}\\\\R_{0, 1} R_{0, 2} & R_{1, 1} R_{1, 2} & R_{2, 1} R_{2, 2} & R_{0, 1} R_{1, 2} & R_{0, 2} R_{1, 1} & R_{0, 1} R_{2, 2} & R_{0, 2} R_{2, 1} & R_{1, 1} R_{2, 2} & R_{1, 2} R_{2, 1}\\\\R_{0, 1} R_{0, 2} & R_{1, 1} R_{1, 2} & R_{2, 1} R_{2, 2} & R_{0, 2} R_{1, 1} & R_{0, 1} R_{1, 2} & R_{0, 2} R_{2, 1} & R_{0, 1} R_{2, 2} & R_{1, 2} R_{2, 1} & R_{1, 1} R_{2, 2}\\end{matrix}\\right]$" + ], + "text/plain": [ + "⎡ 2 2 2 \n", + "⎢ R₀₀ R₁₀ R₂₀ R₀₀⋅R₁₀ R₀₀⋅R₁₀ R₀₀⋅R₂₀ R₀₀⋅R₂₀ R₁₀⋅R₂₀ R₁₀⋅R\n", + "⎢ \n", + "⎢ 2 2 2 \n", + "⎢ R₀₁ R₁₁ R₂₁ R₀₁⋅R₁₁ R₀₁⋅R₁₁ R₀₁⋅R₂₁ R₀₁⋅R₂₁ R₁₁⋅R₂₁ R₁₁⋅R\n", + "⎢ \n", + "⎢ 2 2 2 \n", + "⎢ R₀₂ R₁₂ R₂₂ R₀₂⋅R₁₂ R₀₂⋅R₁₂ R₀₂⋅R₂₂ R₀₂⋅R₂₂ R₁₂⋅R₂₂ R₁₂⋅R\n", + "⎢ \n", + "⎢R₀₀⋅R₀₁ R₁₀⋅R₁₁ R₂₀⋅R₂₁ R₀₀⋅R₁₁ R₀₁⋅R₁₀ R₀₀⋅R₂₁ R₀₁⋅R₂₀ R₁₀⋅R₂₁ R₁₁⋅R\n", + "⎢ \n", + "⎢R₀₀⋅R₀₁ R₁₀⋅R₁₁ R₂₀⋅R₂₁ R₀₁⋅R₁₀ R₀₀⋅R₁₁ R₀₁⋅R₂₀ R₀₀⋅R₂₁ R₁₁⋅R₂₀ R₁₀⋅R\n", + "⎢ \n", + "⎢R₀₀⋅R₀₂ R₁₀⋅R₁₂ R₂₀⋅R₂₂ R₀₀⋅R₁₂ R₀₂⋅R₁₀ R₀₀⋅R₂₂ R₀₂⋅R₂₀ R₁₀⋅R₂₂ R₁₂⋅R\n", + "⎢ \n", + "⎢R₀₀⋅R₀₂ R₁₀⋅R₁₂ R₂₀⋅R₂₂ R₀₂⋅R₁₀ R₀₀⋅R₁₂ R₀₂⋅R₂₀ R₀₀⋅R₂₂ R₁₂⋅R₂₀ R₁₀⋅R\n", + "⎢ \n", + "⎢R₀₁⋅R₀₂ R₁₁⋅R₁₂ R₂₁⋅R₂₂ R₀₁⋅R₁₂ R₀₂⋅R₁₁ R₀₁⋅R₂₂ R₀₂⋅R₂₁ R₁₁⋅R₂₂ R₁₂⋅R\n", + "⎢ \n", + "⎣R₀₁⋅R₀₂ R₁₁⋅R₁₂ R₂₁⋅R₂₂ R₀₂⋅R₁₁ R₀₁⋅R₁₂ R₀₂⋅R₂₁ R₀₁⋅R₂₂ R₁₂⋅R₂₁ R₁₁⋅R\n", + "\n", + " ⎤\n", + "₂₀⎥\n", + " ⎥\n", + " ⎥\n", + "₂₁⎥\n", + " ⎥\n", + " ⎥\n", + "₂₂⎥\n", + " ⎥\n", + "₂₀⎥\n", + " ⎥\n", + "₂₁⎥\n", + " ⎥\n", + "₂₀⎥\n", + " ⎥\n", + "₂₂⎥\n", + " ⎥\n", + "₂₁⎥\n", + " ⎥\n", + "₂₂⎦" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "FourthOrderTensor().from_operator(rotation).as_unsym()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In 2-d, the rotation matrix can also be directly expressed by the `theta` variable." + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": {}, + "outputs": [ + { + "data": { + "text/latex": [ + "$\\displaystyle \\left[\\begin{matrix}\\cos^{2}{\\left(\\theta \\right)} & \\sin^{2}{\\left(\\theta \\right)} & \\sqrt{2} \\sin{\\left(\\theta \\right)} \\cos{\\left(\\theta \\right)}\\\\\\sin^{2}{\\left(\\theta \\right)} & \\cos^{2}{\\left(\\theta \\right)} & - \\sqrt{2} \\sin{\\left(\\theta \\right)} \\cos{\\left(\\theta \\right)}\\\\- \\sqrt{2} \\sin{\\left(\\theta \\right)} \\cos{\\left(\\theta \\right)} & \\sqrt{2} \\sin{\\left(\\theta \\right)} \\cos{\\left(\\theta \\right)} & 2 \\cos^{2}{\\left(\\theta \\right)} - 1\\end{matrix}\\right]$" + ], + "text/plain": [ + "⎡ 2 2 ⎤\n", + "⎢ cos (θ) sin (θ) √2⋅sin(θ)⋅cos(θ) ⎥\n", + "⎢ ⎥\n", + "⎢ 2 2 ⎥\n", + "⎢ sin (θ) cos (θ) -√2⋅sin(θ)⋅cos(θ)⎥\n", + "⎢ ⎥\n", + "⎢ 2 ⎥\n", + "⎣-√2⋅sin(θ)⋅cos(θ) √2⋅sin(θ)⋅cos(θ) 2⋅cos (θ) - 1 ⎦" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "def rotation(x):\n", + " assert x.shape[0] == 2\n", + " theta = sympy.symbols(\"theta\")\n", + " sin = sympy.sin(theta)\n", + " cos = sympy.cos(theta)\n", + " r = sympy.Matrix([[cos, -sin], [sin, cos]])\n", + " return r.T * x * r\n", + "\n", + "\n", + "sympy.expand_trig(FourthOrderTensor(dim=2).from_operator(rotation).as_mandel())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Acoustic tensor\n", + "\n", + "Given a unit vector $\\mathbf{n}$ in $\\mathbb{R}^d$ and the fourth-order stiffness tensor $\\mathbb{C}$, the following second-order acoustic tensor $\\mathbf{A}$ can be defined\n", + "\n", + "$$\n", + "A_{ik}=\\sum_{j=1}^d\\sum_{l=1}^d n_j\\cdot C_{ijkl}\\cdot n_l.\n", + "$$\n", + "\n", + "This acoustic tensor can also be regarded as the output of a fourth-order tensor $\\mathbb{A}$ operating on the second-order tensor $\\mathbf{n}\\otimes\\mathbf{n}$.\n", + "\n", + "$$\n", + "\\mathbb{A}:\\mathbf{n}\\otimes\\mathbf{n}\\mapsto \\mathbf{A},\\quad A_{ik}=\\sum_{j=1}^d\\sum_{l=1}^d C_{ijkl}\\cdot n_jn_l.\n", + "$$" + ] + }, + { + "cell_type": "markdown", "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "True" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], "source": [ - "a_mandel = sympy.randMatrix(6)\n", - "a_mandel = a_mandel + a_mandel.T\n", - "a = FourthOrderTensor().from_mandel(a_mandel).as_array()\n", - "FourthOrderTensor().from_array(a).as_mandel() == a_mandel" + "Assume that the stiffness tensor has major symmetry (for instance, under linear elasticity). It can thus be represented by Mandel notation." ] }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 47, "metadata": {}, "outputs": [ { "data": { + "text/latex": [ + "$\\displaystyle \\left[\\begin{matrix}C_{0, 0} & C_{0, 1} & C_{0, 2} & C_{0, 3} & C_{0, 4} & C_{0, 5}\\\\C_{0, 1} & C_{1, 1} & C_{1, 2} & C_{1, 3} & C_{1, 4} & C_{1, 5}\\\\C_{0, 2} & C_{1, 2} & C_{2, 2} & C_{2, 3} & C_{2, 4} & C_{2, 5}\\\\C_{0, 3} & C_{1, 3} & C_{2, 3} & C_{3, 3} & C_{3, 4} & C_{3, 5}\\\\C_{0, 4} & C_{1, 4} & C_{2, 4} & C_{3, 4} & C_{4, 4} & C_{4, 5}\\\\C_{0, 5} & C_{1, 5} & C_{2, 5} & C_{3, 5} & C_{4, 5} & C_{5, 5}\\end{matrix}\\right]$" + ], "text/plain": [ - "True" + "⎡C₀₀ C₀₁ C₀₂ C₀₃ C₀₄ C₀₅⎤\n", + "⎢ ⎥\n", + "⎢C₀₁ C₁₁ C₁₂ C₁₃ C₁₄ C₁₅⎥\n", + "⎢ ⎥\n", + "⎢C₀₂ C₁₂ C₂₂ C₂₃ C₂₄ C₂₅⎥\n", + "⎢ ⎥\n", + "⎢C₀₃ C₁₃ C₂₃ C₃₃ C₃₄ C₃₅⎥\n", + "⎢ ⎥\n", + "⎢C₀₄ C₁₄ C₂₄ C₃₄ C₄₄ C₄₅⎥\n", + "⎢ ⎥\n", + "⎣C₀₅ C₁₅ C₂₅ C₃₅ C₄₅ C₅₅⎦" ] }, - "execution_count": 12, + "execution_count": 47, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "a_unsym = sympy.randMatrix(9)\n", - "a = FourthOrderTensor(symmetry=None).from_unsym(a_unsym).as_array()\n", - "FourthOrderTensor(symmetry=None).from_array(a).as_unsym() == a_unsym" + "C = sympy.Matrix(sympy.MatrixSymbol(\"C\", 6, 6))\n", + "for i in range(C.shape[0]):\n", + " for j in range(i):\n", + " C[i, j] = C[j, i]\n", + "C = FourthOrderTensor().from_mandel(C)\n", + "C.as_mandel()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Acoustic tensor" + "The fourth-order tensor $\\mathbb{A}$ can be defined as follows." ] }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 48, "metadata": {}, "outputs": [], "source": [ - "C = sympy.Matrix(sympy.MatrixSymbol(\"C\", 6, 6))\n", - "for i in range(C.shape[0]):\n", - " for j in range(i):\n", - " C[i, j] = C[j, i]\n", - "C = FourthOrderTensor().from_mandel(C)\n", - "\n", - "\n", "def acoustic_tensor(n_n):\n", " C_array = C.as_array()\n", " dim = 3\n", @@ -700,9 +1328,16 @@ " return A" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Its Mandel representation can be computed easily via `as_mandel`." + ] + }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 50, "metadata": {}, "outputs": [ { @@ -736,7 +1371,7 @@ "⎣ 2 2 2 2 2 2 ⎦" ] }, - "execution_count": 28, + "execution_count": 50, "metadata": {}, "output_type": "execute_result" } @@ -746,9 +1381,16 @@ "A.as_mandel()" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To compute the actual acoustic tensor, we need to define the second-order tensor $\\mathbf{n}\\otimes\\mathbf{n}$ as the outer product of $\\mathbf{n}$." + ] + }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 51, "metadata": {}, "outputs": [ { @@ -773,7 +1415,7 @@ "⎣√2⋅n[1]⋅n[2]⎦" ] }, - "execution_count": 27, + "execution_count": 51, "metadata": {}, "output_type": "execute_result" } @@ -786,9 +1428,16 @@ "n_n.as_mandel()" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The acoustic tensor can be obtained by performing matrix-vector multiplication between the Mandel representation of $\\mathbb{A}$ and that of $\\mathbf{n}\\otimes\\mathbf{n}$." + ] + }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 52, "metadata": {}, "outputs": [ { @@ -858,7 +1507,7 @@ " 2 ⎦" ] }, - "execution_count": 30, + "execution_count": 52, "metadata": {}, "output_type": "execute_result" } @@ -867,6 +1516,13 @@ "sympy.simplify(A.as_mandel() * n_n.as_mandel())" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The same procedure can be repeated for unsymmetric stiffness tensors, for instance for finite-strain applications." + ] + }, { "cell_type": "code", "execution_count": 46, @@ -1003,217 +1659,6 @@ "source": [ "sympy.simplify(A.as_unsym() * n_n.as_unsym())" ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Change of basis of second-order tensors" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 3-d" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/latex": [ - "$\\displaystyle \\left[\\begin{matrix}R_{0, 0}^{2} & R_{1, 0}^{2} & R_{2, 0}^{2} & \\sqrt{2} R_{0, 0} R_{1, 0} & \\sqrt{2} R_{0, 0} R_{2, 0} & \\sqrt{2} R_{1, 0} R_{2, 0}\\\\R_{0, 1}^{2} & R_{1, 1}^{2} & R_{2, 1}^{2} & \\sqrt{2} R_{0, 1} R_{1, 1} & \\sqrt{2} R_{0, 1} R_{2, 1} & \\sqrt{2} R_{1, 1} R_{2, 1}\\\\R_{0, 2}^{2} & R_{1, 2}^{2} & R_{2, 2}^{2} & \\sqrt{2} R_{0, 2} R_{1, 2} & \\sqrt{2} R_{0, 2} R_{2, 2} & \\sqrt{2} R_{1, 2} R_{2, 2}\\\\\\sqrt{2} R_{0, 0} R_{0, 1} & \\sqrt{2} R_{1, 0} R_{1, 1} & \\sqrt{2} R_{2, 0} R_{2, 1} & R_{0, 0} R_{1, 1} + R_{0, 1} R_{1, 0} & R_{0, 0} R_{2, 1} + R_{0, 1} R_{2, 0} & R_{1, 0} R_{2, 1} + R_{1, 1} R_{2, 0}\\\\\\sqrt{2} R_{0, 0} R_{0, 2} & \\sqrt{2} R_{1, 0} R_{1, 2} & \\sqrt{2} R_{2, 0} R_{2, 2} & R_{0, 0} R_{1, 2} + R_{0, 2} R_{1, 0} & R_{0, 0} R_{2, 2} + R_{0, 2} R_{2, 0} & R_{1, 0} R_{2, 2} + R_{1, 2} R_{2, 0}\\\\\\sqrt{2} R_{0, 1} R_{0, 2} & \\sqrt{2} R_{1, 1} R_{1, 2} & \\sqrt{2} R_{2, 1} R_{2, 2} & R_{0, 1} R_{1, 2} + R_{0, 2} R_{1, 1} & R_{0, 1} R_{2, 2} + R_{0, 2} R_{2, 1} & R_{1, 1} R_{2, 2} + R_{1, 2} R_{2, 1}\\end{matrix}\\right]$" - ], - "text/plain": [ - "⎡ 2 2 2 \n", - "⎢ R₀₀ R₁₀ R₂₀ √2⋅R₀₀⋅R₁₀ √2⋅R₀₀⋅R₂₀ \n", - "⎢ \n", - "⎢ 2 2 2 \n", - "⎢ R₀₁ R₁₁ R₂₁ √2⋅R₀₁⋅R₁₁ √2⋅R₀₁⋅R₂₁ \n", - "⎢ \n", - "⎢ 2 2 2 \n", - "⎢ R₀₂ R₁₂ R₂₂ √2⋅R₀₂⋅R₁₂ √2⋅R₀₂⋅R₂₂ \n", - "⎢ \n", - "⎢√2⋅R₀₀⋅R₀₁ √2⋅R₁₀⋅R₁₁ √2⋅R₂₀⋅R₂₁ R₀₀⋅R₁₁ + R₀₁⋅R₁₀ R₀₀⋅R₂₁ + R₀₁⋅R₂₀ R₁₀\n", - "⎢ \n", - "⎢√2⋅R₀₀⋅R₀₂ √2⋅R₁₀⋅R₁₂ √2⋅R₂₀⋅R₂₂ R₀₀⋅R₁₂ + R₀₂⋅R₁₀ R₀₀⋅R₂₂ + R₀₂⋅R₂₀ R₁₀\n", - "⎢ \n", - "⎣√2⋅R₀₁⋅R₀₂ √2⋅R₁₁⋅R₁₂ √2⋅R₂₁⋅R₂₂ R₀₁⋅R₁₂ + R₀₂⋅R₁₁ R₀₁⋅R₂₂ + R₀₂⋅R₂₁ R₁₁\n", - "\n", - " ⎤\n", - "√2⋅R₁₀⋅R₂₀ ⎥\n", - " ⎥\n", - " ⎥\n", - "√2⋅R₁₁⋅R₂₁ ⎥\n", - " ⎥\n", - " ⎥\n", - "√2⋅R₁₂⋅R₂₂ ⎥\n", - " ⎥\n", - "⋅R₂₁ + R₁₁⋅R₂₀⎥\n", - " ⎥\n", - "⋅R₂₂ + R₁₂⋅R₂₀⎥\n", - " ⎥\n", - "⋅R₂₂ + R₁₂⋅R₂₁⎦" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "def rotation(x):\n", - " r = sympy.MatrixSymbol(\"R\", x.shape[0], x.shape[0])\n", - " return r.T * x * r\n", - "\n", - "\n", - "FourthOrderTensor().from_operator(rotation).as_mandel()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/latex": [ - "$\\displaystyle \\left[\\begin{matrix}R_{0, 0}^{2} & R_{1, 0}^{2} & R_{2, 0}^{2} & R_{0, 0} R_{1, 0} & R_{0, 0} R_{1, 0} & R_{0, 0} R_{2, 0} & R_{0, 0} R_{2, 0} & R_{1, 0} R_{2, 0} & R_{1, 0} R_{2, 0}\\\\R_{0, 1}^{2} & R_{1, 1}^{2} & R_{2, 1}^{2} & R_{0, 1} R_{1, 1} & R_{0, 1} R_{1, 1} & R_{0, 1} R_{2, 1} & R_{0, 1} R_{2, 1} & R_{1, 1} R_{2, 1} & R_{1, 1} R_{2, 1}\\\\R_{0, 2}^{2} & R_{1, 2}^{2} & R_{2, 2}^{2} & R_{0, 2} R_{1, 2} & R_{0, 2} R_{1, 2} & R_{0, 2} R_{2, 2} & R_{0, 2} R_{2, 2} & R_{1, 2} R_{2, 2} & R_{1, 2} R_{2, 2}\\\\R_{0, 0} R_{0, 1} & R_{1, 0} R_{1, 1} & R_{2, 0} R_{2, 1} & R_{0, 0} R_{1, 1} & R_{0, 1} R_{1, 0} & R_{0, 0} R_{2, 1} & R_{0, 1} R_{2, 0} & R_{1, 0} R_{2, 1} & R_{1, 1} R_{2, 0}\\\\R_{0, 0} R_{0, 1} & R_{1, 0} R_{1, 1} & R_{2, 0} R_{2, 1} & R_{0, 1} R_{1, 0} & R_{0, 0} R_{1, 1} & R_{0, 1} R_{2, 0} & R_{0, 0} R_{2, 1} & R_{1, 1} R_{2, 0} & R_{1, 0} R_{2, 1}\\\\R_{0, 0} R_{0, 2} & R_{1, 0} R_{1, 2} & R_{2, 0} R_{2, 2} & R_{0, 0} R_{1, 2} & R_{0, 2} R_{1, 0} & R_{0, 0} R_{2, 2} & R_{0, 2} R_{2, 0} & R_{1, 0} R_{2, 2} & R_{1, 2} R_{2, 0}\\\\R_{0, 0} R_{0, 2} & R_{1, 0} R_{1, 2} & R_{2, 0} R_{2, 2} & R_{0, 2} R_{1, 0} & R_{0, 0} R_{1, 2} & R_{0, 2} R_{2, 0} & R_{0, 0} R_{2, 2} & R_{1, 2} R_{2, 0} & R_{1, 0} R_{2, 2}\\\\R_{0, 1} R_{0, 2} & R_{1, 1} R_{1, 2} & R_{2, 1} R_{2, 2} & R_{0, 1} R_{1, 2} & R_{0, 2} R_{1, 1} & R_{0, 1} R_{2, 2} & R_{0, 2} R_{2, 1} & R_{1, 1} R_{2, 2} & R_{1, 2} R_{2, 1}\\\\R_{0, 1} R_{0, 2} & R_{1, 1} R_{1, 2} & R_{2, 1} R_{2, 2} & R_{0, 2} R_{1, 1} & R_{0, 1} R_{1, 2} & R_{0, 2} R_{2, 1} & R_{0, 1} R_{2, 2} & R_{1, 2} R_{2, 1} & R_{1, 1} R_{2, 2}\\end{matrix}\\right]$" - ], - "text/plain": [ - "⎡ 2 2 2 \n", - "⎢ R₀₀ R₁₀ R₂₀ R₀₀⋅R₁₀ R₀₀⋅R₁₀ R₀₀⋅R₂₀ R₀₀⋅R₂₀ R₁₀⋅R₂₀ R₁₀⋅R\n", - "⎢ \n", - "⎢ 2 2 2 \n", - "⎢ R₀₁ R₁₁ R₂₁ R₀₁⋅R₁₁ R₀₁⋅R₁₁ R₀₁⋅R₂₁ R₀₁⋅R₂₁ R₁₁⋅R₂₁ R₁₁⋅R\n", - "⎢ \n", - "⎢ 2 2 2 \n", - "⎢ R₀₂ R₁₂ R₂₂ R₀₂⋅R₁₂ R₀₂⋅R₁₂ R₀₂⋅R₂₂ R₀₂⋅R₂₂ R₁₂⋅R₂₂ R₁₂⋅R\n", - "⎢ \n", - "⎢R₀₀⋅R₀₁ R₁₀⋅R₁₁ R₂₀⋅R₂₁ R₀₀⋅R₁₁ R₀₁⋅R₁₀ R₀₀⋅R₂₁ R₀₁⋅R₂₀ R₁₀⋅R₂₁ R₁₁⋅R\n", - "⎢ \n", - "⎢R₀₀⋅R₀₁ R₁₀⋅R₁₁ R₂₀⋅R₂₁ R₀₁⋅R₁₀ R₀₀⋅R₁₁ R₀₁⋅R₂₀ R₀₀⋅R₂₁ R₁₁⋅R₂₀ R₁₀⋅R\n", - "⎢ \n", - "⎢R₀₀⋅R₀₂ R₁₀⋅R₁₂ R₂₀⋅R₂₂ R₀₀⋅R₁₂ R₀₂⋅R₁₀ R₀₀⋅R₂₂ R₀₂⋅R₂₀ R₁₀⋅R₂₂ R₁₂⋅R\n", - "⎢ \n", - "⎢R₀₀⋅R₀₂ R₁₀⋅R₁₂ R₂₀⋅R₂₂ R₀₂⋅R₁₀ R₀₀⋅R₁₂ R₀₂⋅R₂₀ R₀₀⋅R₂₂ R₁₂⋅R₂₀ R₁₀⋅R\n", - "⎢ \n", - "⎢R₀₁⋅R₀₂ R₁₁⋅R₁₂ R₂₁⋅R₂₂ R₀₁⋅R₁₂ R₀₂⋅R₁₁ R₀₁⋅R₂₂ R₀₂⋅R₂₁ R₁₁⋅R₂₂ R₁₂⋅R\n", - "⎢ \n", - "⎣R₀₁⋅R₀₂ R₁₁⋅R₁₂ R₂₁⋅R₂₂ R₀₂⋅R₁₁ R₀₁⋅R₁₂ R₀₂⋅R₂₁ R₀₁⋅R₂₂ R₁₂⋅R₂₁ R₁₁⋅R\n", - "\n", - " ⎤\n", - "₂₀⎥\n", - " ⎥\n", - " ⎥\n", - "₂₁⎥\n", - " ⎥\n", - " ⎥\n", - "₂₂⎥\n", - " ⎥\n", - "₂₀⎥\n", - " ⎥\n", - "₂₁⎥\n", - " ⎥\n", - "₂₀⎥\n", - " ⎥\n", - "₂₂⎥\n", - " ⎥\n", - "₂₁⎥\n", - " ⎥\n", - "₂₂⎦" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "FourthOrderTensor().from_operator(rotation).as_unsym()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 2-d" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/latex": [ - "$\\displaystyle \\left[\\begin{matrix}\\cos^{2}{\\left(\\theta \\right)} & \\sin^{2}{\\left(\\theta \\right)} & \\sqrt{2} \\sin{\\left(\\theta \\right)} \\cos{\\left(\\theta \\right)}\\\\\\sin^{2}{\\left(\\theta \\right)} & \\cos^{2}{\\left(\\theta \\right)} & - \\sqrt{2} \\sin{\\left(\\theta \\right)} \\cos{\\left(\\theta \\right)}\\\\- \\sqrt{2} \\sin{\\left(\\theta \\right)} \\cos{\\left(\\theta \\right)} & \\sqrt{2} \\sin{\\left(\\theta \\right)} \\cos{\\left(\\theta \\right)} & 2 \\cos^{2}{\\left(\\theta \\right)} - 1\\end{matrix}\\right]$" - ], - "text/plain": [ - "⎡ 2 2 ⎤\n", - "⎢ cos (θ) sin (θ) √2⋅sin(θ)⋅cos(θ) ⎥\n", - "⎢ ⎥\n", - "⎢ 2 2 ⎥\n", - "⎢ sin (θ) cos (θ) -√2⋅sin(θ)⋅cos(θ)⎥\n", - "⎢ ⎥\n", - "⎢ 2 ⎥\n", - "⎣-√2⋅sin(θ)⋅cos(θ) √2⋅sin(θ)⋅cos(θ) 2⋅cos (θ) - 1 ⎦" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "def rotation(x):\n", - " theta = sympy.symbols(\"theta\")\n", - " sin = sympy.sin(theta)\n", - " cos = sympy.cos(theta)\n", - " r = sympy.Matrix([[cos, -sin], [sin, cos]])\n", - " return r.T * x * r\n", - "\n", - "\n", - "sympy.expand_trig(FourthOrderTensor(dim=2).from_operator(rotation).as_mandel())" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/latex": [ - "$\\displaystyle \\left[\\begin{matrix}\\cos^{2}{\\left(\\theta \\right)} & \\sin^{2}{\\left(\\theta \\right)} & \\sin{\\left(\\theta \\right)} \\cos{\\left(\\theta \\right)} & \\sin{\\left(\\theta \\right)} \\cos{\\left(\\theta \\right)}\\\\\\sin^{2}{\\left(\\theta \\right)} & \\cos^{2}{\\left(\\theta \\right)} & - \\sin{\\left(\\theta \\right)} \\cos{\\left(\\theta \\right)} & - \\sin{\\left(\\theta \\right)} \\cos{\\left(\\theta \\right)}\\\\- \\sin{\\left(\\theta \\right)} \\cos{\\left(\\theta \\right)} & \\sin{\\left(\\theta \\right)} \\cos{\\left(\\theta \\right)} & \\cos^{2}{\\left(\\theta \\right)} & - \\sin^{2}{\\left(\\theta \\right)}\\\\- \\sin{\\left(\\theta \\right)} \\cos{\\left(\\theta \\right)} & \\sin{\\left(\\theta \\right)} \\cos{\\left(\\theta \\right)} & - \\sin^{2}{\\left(\\theta \\right)} & \\cos^{2}{\\left(\\theta \\right)}\\end{matrix}\\right]$" - ], - "text/plain": [ - "⎡ 2 2 ⎤\n", - "⎢ cos (θ) sin (θ) sin(θ)⋅cos(θ) sin(θ)⋅cos(θ) ⎥\n", - "⎢ ⎥\n", - "⎢ 2 2 ⎥\n", - "⎢ sin (θ) cos (θ) -sin(θ)⋅cos(θ) -sin(θ)⋅cos(θ)⎥\n", - "⎢ ⎥\n", - "⎢ 2 2 ⎥\n", - "⎢-sin(θ)⋅cos(θ) sin(θ)⋅cos(θ) cos (θ) -sin (θ) ⎥\n", - "⎢ ⎥\n", - "⎢ 2 2 ⎥\n", - "⎣-sin(θ)⋅cos(θ) sin(θ)⋅cos(θ) -sin (θ) cos (θ) ⎦" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "sympy.expand_trig(FourthOrderTensor(dim=2).from_operator(rotation).as_unsym())" - ] } ], "metadata": { @@ -1232,7 +1677,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.11" + "version": "3.10.9" }, "orig_nbformat": 4 }, diff --git a/docs/notebooks/second-order.ipynb b/docs/notebooks/second-order.ipynb index b875bc7..fd7d2e9 100644 --- a/docs/notebooks/second-order.ipynb +++ b/docs/notebooks/second-order.ipynb @@ -4,16 +4,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Conversion between representations of second-order tensors\n", + "# Second-order tensors\n", "\n", "In this notebook we will illustrate various representations of second-order tensors and conversion between them.\n", "\n", - "Various representation of second order tensors are implemented in the `tensorconvert.SecondOrderTensor` class." + "Various representation of second-order tensors are implemented in the `tensorconvert.SecondOrderTensor` class." ] }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "metadata": {}, "outputs": [], "source": [ @@ -144,14 +144,14 @@ "source": [ "The ordering of the shear components can also be specified by the `ordering` argument. Three choices are possible\n", "\n", - "1. By default, Abaqus standard convention is used: `SecondOrderTensor(ordering=\"121323\")`.\n", - "2. ANSYS convention can be adopted by `SecondOrderTensor(ordering=\"122313\")`\n", - "3. Another possibility is `SecondOrderTensor(ordering=\"231312\")` " + "1. By default, `SecondOrderTensor(ordering=\"121323\")` gives $(\\sigma_{11},\\sigma_{22},\\sigma_{33},\\sigma_{12},\\sigma_{13},\\sigma_{23})$. This ordering is used in Abaqus/Standard.\n", + "2. With `ordering=\"122313\")`, we will have $(\\sigma_{11},\\sigma_{22},\\sigma_{33},\\sigma_{12},\\sigma_{23},\\sigma_{13})$.\n", + "3. Another possibility is `ordering=\"231312\"` , which leads to $(\\sigma_{11},\\sigma_{22},\\sigma_{33},\\sigma_{23},\\sigma_{13},\\sigma_{12})$." ] }, { "cell_type": "code", - "execution_count": 3, + "execution_count": 4, "metadata": {}, "outputs": [ { @@ -173,7 +173,7 @@ "⎣2⋅a₀₂⎦" ] }, - "execution_count": 3, + "execution_count": 4, "metadata": {}, "output_type": "execute_result" } @@ -184,7 +184,7 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": 5, "metadata": {}, "outputs": [ { @@ -206,7 +206,7 @@ "⎣2⋅a₀₁⎦" ] }, - "execution_count": 4, + "execution_count": 5, "metadata": {}, "output_type": "execute_result" } @@ -440,7 +440,7 @@ ], "source": [ "a = SecondOrderTensor().from_array(sympy.randMatrix(3, 3))\n", - "a.as_mandel()" + "a.as_mandel() # note that here the lower-diagonal part will be ignored" ] }, { @@ -555,7 +555,9 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Basis vectors" + "## Basis vectors\n", + "\n", + "The basis *vectors* (or matrices) for each representation can be obtained via the `basis_` methods." ] }, { @@ -753,7 +755,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.11" + "version": "3.10.9" }, "orig_nbformat": 4 },