{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Finite differences for linear elasticity" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Definitions" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from sympy import *\n", "from continuum_mechanics.vector import lap, sym_grad\n", "from continuum_mechanics.solids import navier_cauchy, strain_stress" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "init_printing()" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "x, y = symbols(\"x y\")\n", "lamda, mu, h = symbols(\"lamda mu h\")" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "def construct_poly(pts, terms, var=\"u\"):\n", " npts = len(pts)\n", " u = symbols(\"{}:{}\".format(var, npts))\n", " vander = Matrix(npts, npts,\n", " lambda i, j: (terms[j]).subs({x: pts[i][0],\n", " y: pts[i][1]}))\n", " inv_vander = simplify(vander.inv())\n", " shape_funs = simplify(inv_vander.T * Matrix(terms))\n", " poly = sum(Matrix(u).T * shape_funs)\n", " return poly\n", " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Nine-point stencil" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can compute the finite difference for elasticity applying\n", "the Navier-Cauchy operator to a polynomial interpolator for\n", "our stencil.\n", "\n", "
\n", " \n", "
" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "pts = [[0, 0],\n", " [h, 0],\n", " [0, h],\n", " [-h, 0],\n", " [0, -h],\n", " [h, h],\n", " [-h, h],\n", " [-h, -h],\n", " [h, -h]]\n", "terms = [S(1), x, y, x**2, x*y, y**2, x**2*y, x*y**2, x**2*y**2]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can construct the interpolators for horizontal and\n", "vertical components of the displacement vector." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "U = construct_poly(pts, terms, \"u\")\n", "V = construct_poly(pts, terms, \"v\")\n", "disp = Matrix([U, V, 0])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's take a look at one of the components" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$$\\frac{u_{0}}{h^{4}} \\left(h^{4} - h^{2} \\left(x^{2} + y^{2}\\right) + x^{2} y^{2}\\right) + \\frac{u_{1} x}{2 h^{4}} \\left(h^{3} + h^{2} x - h y^{2} - x y^{2}\\right) + \\frac{u_{2} y}{2 h^{4}} \\left(h^{3} + h^{2} y - h x^{2} - x^{2} y\\right) + \\frac{u_{3} x}{2 h^{4}} \\left(- h^{3} + h^{2} x + h y^{2} - x y^{2}\\right) + \\frac{u_{4} y}{2 h^{4}} \\left(- h^{3} + h^{2} y + h x^{2} - x^{2} y\\right) + \\frac{u_{5} x y}{4 h^{4}} \\left(h^{2} + h \\left(x + y\\right) + x y\\right) + \\frac{u_{6} x y}{4 h^{4}} \\left(- h^{2} + h \\left(x - y\\right) + x y\\right) + \\frac{u_{7} x y}{4 h^{4}} \\left(h^{2} - h \\left(x + y\\right) + x y\\right) + \\frac{u_{8} x y}{4 h^{4}} \\left(- h^{2} + h \\left(- x + y\\right) + x y\\right)$$" ], "text/plain": [ " ⎛ 4 2 ⎛ 2 2⎞ 2 2⎞ ⎛ 3 2 2 2⎞ ⎛ 3 \n", "u₀⋅⎝h - h ⋅⎝x + y ⎠ + x ⋅y ⎠ u₁⋅x⋅⎝h + h ⋅x - h⋅y - x⋅y ⎠ u₂⋅y⋅⎝h + h\n", "────────────────────────────── + ────────────────────────────── + ────────────\n", " 4 4 \n", " h 2⋅h \n", "\n", "2 2 2 ⎞ ⎛ 3 2 2 2⎞ ⎛ 3 2 \n", " ⋅y - h⋅x - x ⋅y⎠ u₃⋅x⋅⎝- h + h ⋅x + h⋅y - x⋅y ⎠ u₄⋅y⋅⎝- h + h ⋅y + h⋅\n", "────────────────── + ──────────────────────────────── + ──────────────────────\n", " 4 4 4 \n", " 2⋅h 2⋅h 2⋅h \n", "\n", " 2 2 ⎞ ⎛ 2 ⎞ ⎛ 2 ⎞ \n", "x - x ⋅y⎠ u₅⋅x⋅y⋅⎝h + h⋅(x + y) + x⋅y⎠ u₆⋅x⋅y⋅⎝- h + h⋅(x - y) + x⋅y⎠ \n", "────────── + ───────────────────────────── + ─────────────────────────────── +\n", " 4 4 \n", " 4⋅h 4⋅h \n", "\n", " ⎛ 2 ⎞ ⎛ 2 ⎞\n", " u₇⋅x⋅y⋅⎝h - h⋅(x + y) + x⋅y⎠ u₈⋅x⋅y⋅⎝- h + h⋅(-x + y) + x⋅y⎠\n", " ───────────────────────────── + ────────────────────────────────\n", " 4 4 \n", " 4⋅h 4⋅h " ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "disp[0]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This expression is quite lengthy to manipulate by hand, but we\n", "can obtain the finite difference for the Navier operator\n", "straightforward." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAA4UAAABNCAMAAAAmXTHWAAAAPFBMVEX///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAo1xBWAAAAE3RSTlMAMquZdlQQQOkwRM3d7yK7iWZsWcT17wAAAAlwSFlzAAAOxAAADsQBlSsOGwAAExdJREFUeAHtXeuCs7oKtTfP3r2NPb7/u25IhAAhGm07X+eb+GOMKRDCChqjruk6d9td3OpW2SLQIvBNEdgd9tdvaqo10yLQItDtxrDtdShOLQt1QNpRi8DrI3CNyddBFh6OsJ10Ey0LdTzaUYvAGyLwwNTbj5iFO8d8MQvvD0caqkr1vnSrrY7A414hGqPfV8m65oxmQ9ON0vOVFGfao8XH6iy8f/me+PX98Tgczr7GYu3usCjiC2xW9M396dr9chpS9B/jcrDvh8PXV37iVa2QPd31hqaOx6YjijPtwcj6LLwUhoRfH/Jobya7tc5fCwm/qL9ZcdHyHxHol5erOfrLXe9xAWDIs1W1wvZUhxuaKhzbDijOtAcrq7PwUbg++fWnMHu9L4+i7nTM+nS81WThZsWsvbkKp5U58RW/1VgeTHAynRT949jbxo30PgjcblasE60ke1Lqk9E0nZRuP1l+uWWKM+03ZOG1cCn064eQR33Fcmve1/vjsi0LKxVXgZO7t0p9RrjGcm9SJtNJ0b+PJmM7e4K7BTT2+WKAaCXZk55/MppZSKTjT5VfbpniTPvZLDTIx57cCwlVqD+PX3DmHQrrOTI4eV+HbmMWVirK1hfLuXuLKpUCVZYv+m7P6sjoXzKEjPQlXC2dLOy4FWlPdOOT0TSdFF4/W3y9ZYoz7Ysz0vvhOu6zs2rXHWlCugtJeqSHjFxv+rwfx0dIwv54QHP3WzZhihpZX2ENKWTh2xSNp7Gd/uqfMYx788JPWC4YHijsfrBk9B/ZRc74Hk1cQy5qFLkVaU925oPRNJ0sxFF2JpXnhZ+wXDBMcaZ9MQuTi7r0RYN0CKfcK40OrtfiuAwwXjDxDt0J8/YIa7LwdzgOuBeb6WvXQ86GLFSKw+HrYNK4ThFaWpjeDtHB677b7Xf3B/VzctG0koShh8PRCItuYTEJD6ceNv2ztpxku8dw5L4+9J211oGuCQf6cSm02P45SmkUuRVpT3n7WjS7/C1J27PCMDge4t1tcs4opjh6aCa1UErCHppFyx6a2rIw7KHJ8S6vzmh7dHSl5c4L5l8/0iHXk+C0P+3P1/F2xoeJBxxJX5gLDxgnJ7qKkqC58OJQwixUigPclO71gLR3PTDmHUWoO+XLFlPTYXc/dQc8sZwGGKHjaLwzrQhhnMbd3ck7WRfCcC2BTZ8OFMhC9gHPEnoSNQ9vlQ60I6O/G603Vhodg5MNbhpFbkXaC3LTn9ei6b0laX110TzASedAoSHX1PgRcfTQlH2CIZag99DULglhD01lWci6aHK8dRaGQeL/mcxDQoUt5l8a2VN9f7nydoFh9ECwj+MNLwA3jFP4c0UjnBTDBbfrLexo9J/weRZmoVaELNyNtD60QhHsDNxgZ72Eprid86k7n3bieuW1Qk6BMM7J8YQdtwXL+zNseKccNseyMPyF3aQzzi5MIaDC0YFaQgWKuy/xyNCXBqlDnMMYFLmV70ETTnniHtb11R8GB8hNHLhx8xRFHDWaCwBpNBcsazQdy8ILF02Ot85C6pjY74YhWJiqCO+Yf+HyFn6heqGJxVvImB1eMs+YBeE1nT7cudzoMhpV9Bmnx3NgnJEKxQ7T926edFUpwqmgT1kYW7R/g4MdJNRZL4UEOd3K1BsUNt2wRsMxW8Yun4x1Y5llDxDSHZ2UGK9o3+iILNxd+85eyK00BGO6kTAocivfg6bOQq9nhWGAovPXQgGQh2ZsK/3loHto2vCxsIdmshlKLOuiyfF2sjBc6o+3kAfhbuoszlg0Vwmzt+464DUEN6qPR/S3n05Ye5xCoJVwWxivZmYZRPf1tMdtvOECUVIMZtP1N7ZSp7g7LWZh7BJ0+wyv1fId2dQV3crkFM5+x1MuPOnwji1DTRxY/BOMRL6QhkqW7a/jF911dxICEDM6KfpnPO0d+DIRm7HS3Qnt3lEyIMsocivfhaa8Fnq+lodBfzMv/9hOchw9NGNb6S8Le2gWLYN+hmayGUps2EWT451n4TTKw6wRLMGcSI5fum8Pr2jc4RpHySrWB4Qn8VrY4dX0C8/rcFv46HfhqnTVo8/2FY3Ep/ZJMRg2etmI9BXhdLF0LQzt4BToDlerx+xtx9QbEL6PMKI5msHB/A9bhp/sqoL1P8k+biM/tuP7+GjcBotQOYd5Qph6CC+sdHy/7wiYGBS5FbInjGDx5WguZWFs3xkGx4sePfmJiePooWn6FcdmCU0bPrYMVjI0jeUk66HJ8c6ycLp/kmNWxmpaXO1HPIsexvtumlfyoqt24xzWRx8YMpxCnG8HSNt4LQx3iEna9hV/iesYSRHrsoaqFOGxh+wRGsq2AU8400lF3H1GOdsKCcc7KzNJtqZJGOp3Jruz4cOyAy6w0XMdvBMSW+ZNvGiex3guNG+xGen7dRiG8PmoRZFbyYIc2345mnJkxSaMr6HSGwaLM1KOI5pIawmxFfuXhF00rUskjHYzNI1llnXR5HhnWTjdP4nTey/fKZzqT+NhOB7xicPUrJBXjuz2h+lt7n4/HE+7/XEH+YCzCTNybV8h375gqRKGVVIErfzVqhpFXD5ZzMJuP8TnE3iC65fcI+EgN41+1XN5QMLOScReC8mL8L5RT1NDXOkSm+3zFP2vCY0TL2AFHSN9ictvcBq1KHIr34VmTRa6wwCXB+bWFaDfFHMPTRHKWCRhD00TvmTZQ9Nangz7aHK8bRbS/dOwfzz2AfpeX3XjJMk+LoDJDUxwaje9Rhq1sr66xs5wTTjPj0hP73SAbcQF7poNJ153M38tundBoyZlZxq56IsaSBYsx48apo8+7bssmc5s9DNp8s+gKFqZtUfq0347mmqNNFor+ioaDfeEd3PmKyp6aApjuuihWbQMt2sZmtocH7lopnjbLKT7pwustYUXY/rDnadpaDRejMx0kuu52dkCLtHZ54V9TRbvLqfTiVf6YxtViiBq86rs4QDXQjsnK7ZyhknJiR4olG3SL7fsTFCyHGYg0xmQpxyTmUwnnyJQg7DPpOk3g6JoZdYeqU/7zWhC4OyjzbKvslE8Rxxpsj79UOykh6Y0psoemkXLcKOcoamsiQMPzRRvk4V8/4Rn9zBtxS/yw0oamcSVlnv2lhSsV9Sk0WRkgGnqtLhKZqv2tzCZqhK1Qo+vsfoDK7htqj3J4WlpTV9o0cu6lx/3MOfHtxRgE9/A5HKxZk30yYZBUbWyxt5WNEtvSZJ/xf0OIiO+zivKxR8+FU0Rb52FfP8U3i+kmxLdS7y4evcN/nehWrcdbYpARUpsib5BUbWyxd6mvv0+JYoz7SECOgv5/ukIqXYfO30HNgWsxIVQqv99cX5xjyU3QtH009E3rTxtr+jpL/+B4kx7DIfOQqwJ90+42gaPzOrnZajZthaBFoEtEciyMN4/4c3kfQ83tvlb71taaTotAi0C5QhkWahEvbfelUA7aBFoEXg6AvNZCGvJan306eaagRaBFoEsAi0Ls5C0ihaBb47A5iwsraGV6r+5X39jc3JVrdi/GP/GDlwM0B/7geHjAruyNQtLz5NK9dzgTys8QYS7kZu4rFbxpJriLz71LUZ8Oztw0eTH/fAEfF0ZiNluFtUYPi6Qna1ZKN/wJlu4L9VLmR9VDl8rVL91o7pmPm1Qv80clNXE2xYlfY5/2QqpPsEOTCY+f/8EfPG7r/VdLEae4eMCGd+YhaX3DEv11Jy/n3lf1ldYU/uc8VoiXKeVGlLjlWrpzcMYgUw9xf+d7MBrwu/IZl47Mi+qqoXPe6f+9fgxfFyYurkxC0vv3Jfq54P6VlieM15LhJu3UsVNvFIt8cjGgGbqKf7vZAeeR3Px18zrRY3NArXwOVn4BvwYPi5MHVvMwuytd1RM32To+JTqtVR29FZYnjNeS4Sbt1LFTbxWjXlkYwytuoz/G9mBMwDXVViv12mvkq6Fz8nCd+DH8HEh9mY+C0tvvRN7UKdZZZlVyEQqkqNWMwIvia+zbjBfabwzRLiVrMHw/p8iNX6VmvngyvRNxf+F7MArY7Ykrr1ekl6HtpGuhS/Pwrfgx/BxIfo7n4W2T3TMvCSaVVax05Is7CWxr0fSqmFR4vCl3xLprrTuELXOGZdUrcJfVSQiXMHwuobUWKg5rwMa5xIXslADcmD+0JqZSqKLVp1xgZ9fyA4sI+zhp+Kl4fbw015L4w58xrYeHBX41cGXZSGzEUsgVlBSCzXoARFjMHxciN3bloX8zZNmlU1cYCp28AgrMQJ7JK0aFiXu0bQq45o22CFqnTGuqFq1VT5iItxEHbuK1Dipea8DaudgyEK7gQs5qSkKXPMqk1VnXMDM69iBFSAefhysUFDiHn7KayXtwKdta7Qr8KuEL8tCB4hVlNQJP+gA0wYyfFyI3fOy0KcFlh/YEl+lYZUlXkxDkArf84avusMfTdI6x7saxDVNqzEcuqCsK6LWRePhCy/+Tt4zntMaAxGwpnjwWukyNltQ068DVqvhB8eIUtiYwdJVp/ij6AvZgVWENX5ezJS4xs/xWkkr+GbJm8PgWMYvY6XO4PN5lj38cOUr0Ug5XQGA8VNAyWUdYE+E1AwfFwKqAd///fNvPCj/fY4bWBL7eiSt6uQITgQu1fh/vj2aVuumEHeIWmeMK6pWazUeR/K/RGsMRMBbSI2RP1hnYTSvnYvUIojiFIOoFvnrgoJBT6vDyY4Zh1/LDiwi7OEX+5L+CnEPP+O1kHbgS1ankhBfxq8WPnMtdIHAk+9KSuqIXyKkZvi4EDv1/38wwZ2vecNQeA03MIwifCc8/qMYj6TVwCLFPZpWC4ywDj8plhw4njGuqFqt1XCc0RozkeM6UuP4paaZh2TOZSS40weeiQLXfB5v+8Yz0hezA4sIe/jZ0AlxDz/jtZAGQxY+a1sOjkX8quEzo6QERJpbTm7prvhqRKgGKgwfF6Idb0aKv7yUG1gwAtdT7gYC4XrS3SCOnvNKBh7ApgM18flO0pKqNUrbv/FkmmiNYc6xhdQ4TFWcD1Ssc9i8IMGNaoIC19zVW3VanXk1O3Agt40xqybZLeNnvBbGofcWPguIHEvdIn618GWjxAUCmAYnrknyynQlVFv8iFANfmT4uBANFbLwtdzAghE4tJpm19EJ25fEA+zStEal9DeJQ11G1Fo2Dsuvgng32ZMlQYRLDK8rSY1JDawuXQtjw5EEV6iJGalhpbJ9mxbAX84OrCIs745kqFI5ibv4Ga+TNFjI4EtWp5IQX8avFj43C3MgzAOG/BSPPho1eOTBVLgMHxdipwpZ+GJuYEHsi+e6JcpdIe7RtE5w8E6I5xSGWXyTtKZqZXO6kGiNiWd2JakxqYHZmiwkElyhhrcjEwUu88hGJ814phnPy9mBU8zCtcripyMG+DIBdGRqnacOFdIOfNa2MF6DXyV82SgBTyZSagFEej+QvLIA5GpMqIYqDB8XoiE/C2kq+wZuYJwjWGrQvC/Uy86jaeUfvUJG1Fo2Hr8/mIh3PVuFOr1GGoXKrQgjNVkoxENRUeDKd2Pw16zV9AabteNJk8wadmAPP7Lj7D38Mq+FXgaf+M0WN+LnwZdH0jYGx5soqZlQDQwwfFyYWvGzkKayb+AG9khaZ3hXPZpWJ0CpKiNqnTEePkBYvBFJtqfSZhrcTSS4mFhEgWvfAs76lp+thfeZNP0Wlv3pAE7n6eYnt+fhl1Szkodf0Q/QzuDLLIqKbfh58NWwEW+npKarDgeWC1Nn3Czkqew7uIFXkbTCDe0q0l24f+bFegFXoSiIdwsSfvU2GtzS64B+G1wrKHCzL2JYiAuC5JLrlgrr2IHfi98a+LqN+G2Dr9tMSU2E1AwfFwgZLwt5Ktu4gSlMn7GvSDH6yneNw2bZXLWyxd6atn+TLAeWC9R7Lwt5Ktu4gSlMH7GHKcryBm+EPbeZVp6295w3f5E2B5YL3DkvC/HHxg3MIWqFFoE3R6CQhYYb+M1ONPMtAr86AoUs/NUxaZ1vEfjeCLQs/N54t9ZaBPIItCzMY9JqWgS+NwItC7833q21FoE8Ai0L85j8sBp4dv0YnG/Tflg3frO7LQt/PPoXeNO7n32B9Md38W/vQMvCn47wI3BV4odQbfupEWhZ+FORI7/DR7L0VTZVtv2PikDLwh8Fl+PsuMfKM32B6Ei0qk+PQMvCT0dowb9+DP8Q5Tymz5EWNNrPHxeBloUfB8k6h+4jUmcCGU7YrdNt0h8SgZaFHwLEVjcCP1bLwq3h+wy9loWfgcNmL9qMdHPoPkexZeHnYLHNk7g6c2qrM9vC9xFaLQs/AoYnnADeT9geI3Dbte2HRqBl4Q8Fjt2OT+3Dv+Phulb4WRFoWfiz8HK8RVr8xKHvCLSqT49Ay8JPR2jRv344Hvftbe7FOH2wQMvCDwanufZLItCy8JcA3br5wRFoWfjB4DTXfkkEWhb+EqBbNz84Ai0LPxic5toviUDLwl8CdOvmB0cgZuGIW/hO7YNdba61CPx9EbiG3Bvhke8xbCv+2dHfF4zWoxaBPxKBR0y+7j+/J+9eoDf3yAAAAABJRU5ErkJggg==\n", "text/latex": [ "$$\\left[\\begin{matrix}\\frac{1}{4 h^{2}} \\left(\\mu \\left(- 8 u_{0} + 4 u_{2} + 4 u_{4} - v_{5} + v_{6} - v_{7} + v_{8}\\right) + \\left(\\lambda + 2 \\mu\\right) \\left(- 8 u_{0} + 4 u_{1} + 4 u_{3} + v_{5} - v_{6} + v_{7} - v_{8}\\right)\\right)\\\\\\frac{1}{4 h^{2}} \\left(\\mu \\left(- u_{5} + u_{6} - u_{7} + u_{8} - 8 v_{0} + 4 v_{1} + 4 v_{3}\\right) + \\left(\\lambda + 2 \\mu\\right) \\left(u_{5} - u_{6} + u_{7} - u_{8} - 8 v_{0} + 4 v_{2} + 4 v_{4}\\right)\\right)\\\\0\\end{matrix}\\right]$$" ], "text/plain": [ "⎡μ⋅(-8⋅u₀ + 4⋅u₂ + 4⋅u₄ - v₅ + v₆ - v₇ + v₈) + (λ + 2⋅μ)⋅(-8⋅u₀ + 4⋅u₁ + 4⋅u₃ \n", "⎢─────────────────────────────────────────────────────────────────────────────\n", "⎢ 2 \n", "⎢ 4⋅h \n", "⎢ \n", "⎢μ⋅(-u₅ + u₆ - u₇ + u₈ - 8⋅v₀ + 4⋅v₁ + 4⋅v₃) + (λ + 2⋅μ)⋅(u₅ - u₆ + u₇ - u₈ - \n", "⎢─────────────────────────────────────────────────────────────────────────────\n", "⎢ 2 \n", "⎢ 4⋅h \n", "⎢ \n", "⎣ 0 \n", "\n", "+ v₅ - v₆ + v₇ - v₈)⎤\n", "────────────────────⎥\n", " ⎥\n", " ⎥\n", " ⎥\n", "8⋅v₀ + 4⋅v₂ + 4⋅v₄) ⎥\n", "─────────────────── ⎥\n", " ⎥\n", " ⎥\n", " ⎥\n", " ⎦" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "simplify(navier_cauchy(disp, [lamda, mu]).subs({x:0, y:0}))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To impose Neuman boundary conditions we need to compute the stresses." ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [], "source": [ "strain = (sym_grad(disp)).subs({x:0, y:0})\n", "stress = strain_stress(strain, [lamda, mu])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The tractions are the projection of the stress tensor. For a uniform grid\n", "these would be horizontal or vertical." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$$\\left[\\begin{matrix}\\lambda \\left(u_{1} - u_{3} + v_{2} - v_{4}\\right) + 2 \\mu \\left(u_{1} - u_{3}\\right)\\\\\\mu \\left(u_{2} - u_{4} + v_{1} - v_{3}\\right)\\\\0\\end{matrix}\\right]$$" ], "text/plain": [ "⎡λ⋅(u₁ - u₃ + v₂ - v₄) + 2⋅μ⋅(u₁ - u₃)⎤\n", "⎢ ⎥\n", "⎢ μ⋅(u₂ - u₄ + v₁ - v₃) ⎥\n", "⎢ ⎥\n", "⎣ 0 ⎦" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "t1 = stress * Matrix([1, 0, 0])\n", "simplify(2*h*t1)" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/latex": [ "$$\\left[\\begin{matrix}\\mu \\left(u_{2} - u_{4} + v_{1} - v_{3}\\right)\\\\\\lambda \\left(u_{1} - u_{3} + v_{2} - v_{4}\\right) + 2 \\mu \\left(v_{2} - v_{4}\\right)\\\\0\\end{matrix}\\right]$$" ], "text/plain": [ "⎡ μ⋅(u₂ - u₄ + v₁ - v₃) ⎤\n", "⎢ ⎥\n", "⎢λ⋅(u₁ - u₃ + v₂ - v₄) + 2⋅μ⋅(v₂ - v₄)⎥\n", "⎢ ⎥\n", "⎣ 0 ⎦" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "t2 = stress * Matrix([0, 1, 0])\n", "simplify(2*h*t2)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "scrolled": true }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "data": { "text/html": [ "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.core.display import HTML\n", "def css_styling():\n", " styles = open('./styles/custom_barba.css', 'r').read()\n", " return HTML(styles)\n", "css_styling()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.9" }, "nteract": { "version": "nteract-on-jupyter@2.1.3" }, "varInspector": { "cols": { "lenName": 16, "lenType": 16, "lenVar": 40 }, "kernels_config": { "python": { "delete_cmd_postfix": "", "delete_cmd_prefix": "del ", "library": "var_list.py", "varRefreshCmd": "print(var_dic_list())" }, "r": { "delete_cmd_postfix": ") ", "delete_cmd_prefix": "rm(", "library": "var_list.r", "varRefreshCmd": "cat(var_dic_list()) " } }, "types_to_exclude": [ "module", "function", "builtin_function_or_method", "instance", "_Feature" ], "window_display": false } }, "nbformat": 4, "nbformat_minor": 2 }