{ "cells": [ { "cell_type": "markdown", "id": "068b2a62-5851-45da-b2e9-2cc734c6634e", "metadata": {}, "source": [ "# Using TubeInflation" ] }, { "cell_type": "code", "execution_count": 1, "id": "cefa2ca7-174d-48e3-a26f-0a9781231008", "metadata": {}, "outputs": [], "source": [ "import pymecht as pmt\n", "import numpy as np\n", "from matplotlib import pyplot as plt" ] }, { "cell_type": "markdown", "id": "b89512a8-ec74-49f0-b14e-c98db87b4ac3", "metadata": {}, "source": [ "Inflation-extension experiments can be simulated using the `TubeInflation` class in `SampleExperiment` module as demonstrated in this example." ] }, { "cell_type": "markdown", "id": "13c42e6a-1226-4a2f-b1b2-4f3b8a6e993b", "metadata": {}, "source": [ "## Displacement controlled" ] }, { "cell_type": "markdown", "id": "1cbaecac-80ad-4ea5-89e6-06c263566009", "metadata": {}, "source": [ "First, we use the `TubeInflation` in a simple `disp_controlled` manner. We start by creating a material and using it to create an experiment sample. Since GOH is an anisotropic material, fiber directions need to be specified before simulation (otherwise an error is raised). In `TubeInflation` cylinderical coordinates are used in the order of radius, angle, and longitudinal length. For the model to be valid, the fiber directions need to be axially symmetric, which means they should not have a radial component, and should be symmetric about the circumferential axis. This can be automatically satisfied by using the helper function, which sets the same fiber directions to all material model components, as below." ] }, { "cell_type": "code", "execution_count": 2, "id": "a081e150-3020-4035-b775-0cba443e05a0", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Fiber directions set to 10 degrees ( 0.17453292519943295 radians)\n", "An object of type TubeInflationwith radius as input, pressure as output, and the following material\n", "Material model with 2 components:\n", "Component1: YEOH with fiber direction(s):[array([0. , 0.98480775, 0.17364818]), array([ 0. , 0.98480775, -0.17364818])]\n", "Component2: GOH with fiber direction(s):[array([0. , 0.98480775, 0.17364818]), array([ 0. , 0.98480775, -0.17364818])]\n", " ------------------------------------------------------------------\n", "Keys Value Fixed? Lower bound Upper bound \n", "------------------------------------------------------------------\n", "Ri 1.00 No 0.50 1.50 \n", "thick 0.10 No 0.00 1.00 \n", "omega 0.00 No 0.00 0.00 \n", "L0 1.00 No 1.00 1.00 \n", "lambdaZ 1.00 No 1.00 1.00 \n", "c1_0 1.00 No 1.00e-04 1.00e+02 \n", "c2_0 1.00 No 0.00 1.00e+02 \n", "c3_0 1.00 No 0.00 1.00e+02 \n", "c4_0 0.00 No 0.00 1.00e+02 \n", "k1_1 10.00 No 0.10 30.00 \n", "k2_1 10.00 No 0.10 30.00 \n", "k3_1 0.10 No 0.00 0.33 \n", "------------------------------------------------------------------\n", "\n" ] } ], "source": [ "mat_model = pmt.MatModel('Yeoh','goh')\n", "sample = pmt.TubeInflation(mat_model)\n", "pmt.specify_two_fibers(sample,10)\n", "params = sample.parameters\n", "print(sample,params)" ] }, { "cell_type": "markdown", "id": "b189b917-8e50-4b6c-8dd0-453d4219dd63", "metadata": {}, "source": [ "By default, the displacement measure (input) is radius and the force measure (output) is pressure. Moreover, we can see that the sample parameters include geometric ones (radius, thickness, length, opening angle omega, and longitudinal stretch lambdaZ) in addition to the material parameters. Next we set the parameter values." ] }, { "cell_type": "code", "execution_count": 3, "id": "3b23305d-dde4-464e-94cc-7a47bd34e0b0", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "------------------------------------------------------------------\n", "Keys Value Fixed? Lower bound Upper bound \n", "------------------------------------------------------------------\n", "Ri 9.00 No 0.50 1.50 \n", "thick 2.00 No 0.00 1.00 \n", "omega 0.00 No 0.00 0.00 \n", "L0 1.00 No 1.00 1.00 \n", "lambdaZ 1.00 No 1.00 1.00 \n", "c1_0 28.00 No 1.00e-04 1.00e+02 \n", "c2_0 21.00 No 0.00 1.00e+02 \n", "c3_0 8.00 No 0.00 1.00e+02 \n", "c4_0 1.00 No 0.00 1.00e+02 \n", "k1_1 5.00 No 0.10 30.00 \n", "k2_1 15.00 No 0.10 30.00 \n", "k3_1 0.10 No 0.00 0.33 \n", "------------------------------------------------------------------\n", "\n" ] } ], "source": [ "params.set('Ri', 9) \n", "params.set('thick', 2)\n", "params.set('omega', 0)\n", "params.set('L0', 1)\n", "params.set('lambdaZ', 1)\n", "params.set('c1_0', 28)\n", "params.set('c2_0', 21)\n", "params.set('c3_0', 8)\n", "params.set('c4_0', 1)\n", "params.set('k1_1',5.)\n", "params.set('k2_1',15)\n", "params.set('k3_1',0.1)\n", "print(params)" ] }, { "cell_type": "markdown", "id": "310d28a5-e823-404e-bacc-48b4feacfc4f", "metadata": {}, "source": [ "and fix certain parameters (for the parameter fitting etc.)." ] }, { "cell_type": "code", "execution_count": 4, "id": "7f19d749-e78a-4ffe-803c-0459d667e0ce", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "------------------------------------------------------------------\n", "Keys Value Fixed? Lower bound Upper bound \n", "------------------------------------------------------------------\n", "Ri 9.00 Yes - - \n", "thick 2.00 Yes - - \n", "omega 0.00 Yes - - \n", "L0 1.00 Yes - - \n", "lambdaZ 1.00 Yes - - \n", "c1_0 28.00 No 1.00e-04 1.00e+02 \n", "c2_0 21.00 No 0.00 1.00e+02 \n", "c3_0 8.00 No 0.00 1.00e+02 \n", "c4_0 1.00 No 0.00 1.00e+02 \n", "k1_1 5.00 No 0.10 30.00 \n", "k2_1 15.00 No 0.10 30.00 \n", "k3_1 0.10 No 0.00 0.33 \n", "------------------------------------------------------------------\n", "\n" ] } ], "source": [ "params.fix('Ri')\n", "params.fix('thick')\n", "params.fix('omega')\n", "params.fix('L0')\n", "params.fix('lambdaZ')\n", "print(params)" ] }, { "cell_type": "markdown", "id": "367ff4ca-176c-422b-a5e8-c32c9f267e0a", "metadata": {}, "source": [ "Then we perform the simulation by specifying the deformed internal radius in the `disp_controlled` method." ] }, { "cell_type": "code", "execution_count": 5, "id": "f1d4b739-b9cf-4ab4-bb37-4568b2814b5e", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from matplotlib import pyplot as plt\n", "def_radius = np.linspace(9,12,100)\n", "plt.plot(def_radius,sample.disp_controlled(def_radius,params)) \n", "plt.ylabel('Pressure acting on the tube')\n", "plt.xlabel('Internal radius')\n", "plt.title('Displacement control plot')\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "fd8a539a-6896-43d0-89e6-d34ff48aef84", "metadata": {}, "source": [ "## Force controlled" ] }, { "cell_type": "markdown", "id": "2cbbcb7f-bb47-4f1d-9745-15890ab8b377", "metadata": {}, "source": [ "Inversely, one can specify the force acting on the tube and calculate the deformed internal radius using `force_controlled` method." ] }, { "cell_type": "code", "execution_count": 6, "id": "9fbaaa0a-91d0-4de6-b964-c2468cefb7e4", "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYgAAAEWCAYAAAB8LwAVAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8g+/7EAAAACXBIWXMAAAsTAAALEwEAmpwYAAAtX0lEQVR4nO3deXhc1X3/8ffHWm15t2XjFRvCToCAMKQhFLKwlQBJs0A2IAslDS1JnyykoSFN0zY0aZKnv6Ql/AgQQljaX0IgDQEcmkBLgWCzGoOxWQze5VW2tUvf3x/3jjWSR9JY0szI0uf1PPPMnTN37v3qSjrfuefce44iAjMzs57GlDoAMzMbnpwgzMwsJycIMzPLyQnCzMxycoIwM7OcnCDMzCwnJwiz/ZykmyV9c4Cf/b2kTw11TDYyOEHYsCXpNUlNknZlPWaXOq6hJOkSSf9T6jj6I2mBpJBUXupYrHicIGy4e09EjM96rNuXD4+ECk1SWaljsNHJCcL2O5KqJH1f0rr08X1JVel7p0laI+nLkjYAN0kqk/TXkl6WtFPSUknz0vUPl7RY0lZJKyR9sI/9TpV0U7rPbZJ+mfXepyWtSrdzT/aZTvrN+3JJKyVtl/RDJY4ArgPemp4dbU/Xv1nSv0m6V9Ju4HRJR6TNQdslPS/pvDyP1SWSHpH0A0k7JL0o6Z29rDtG0tWSVkvaJOkWSZPStx9On7ensb41n/3b/s0JwvZHXwVOBo4DjgUWAVdnvX8AMBU4ELgM+CvgIuAcYCLwCaBRUg2wGLgNmAFcCPyrpCN72e9PgXHAUen63wOQ9A7gH4EPArOA1cAdPT57LnAicEy63pkR8QJwOfBoenY0OWv9DwN/D0wAHgd+BTyQ7vcvgJ9JOqy/A5U6CXgZmA5cA/xC0tQc612SPk4HDgLGAz9I3zs1fZ6cxvponvu2/ZgThA13v0y/NW/P+sb+EeAbEbEpIuqBvwU+lvWZTuCaiGiJiCbgU8DVEbEiEs9ExBaSSvu1iLgpItoj4ing58AHegYhaRZwNnB5RGyLiLaIeCgrnhsj4smIaAG+QnJWsCBrE9+KiO0R8TrwO5Lk1pe7I+KRiOhM1x2fbqM1Iv4L+E+SpJePTcD305jvBFYAf5JjvY8A342IVyJiV/pzXDgSmulsYPyLt+Hugoj4bY+y2STf0jNWp2UZ9RHRnPV6Hsk36J4OBE7KNO2kyknOFHqaB2yNiG053psNPJl5ERG7JG0B5gCvpcUbstZvJKnw+/JGj+2/kSaLjNXp9vOxNrqPytnzeGXvp+dxLQdm5rkfG2F8BmH7o3UklXvG/LQso+cQxW8AB+fYzhvAQxExOesxPiI+08u6UyVN7i+etOlqGrC2359k71hzla8D5knK/n+dn+f2AeZIUo/P5ursz3Vc24GNfcRpI5gThO2PbgeullQraTrwNeDWPta/Afg7SYekncPHSJpG0kxzqKSPSapIHyemncfdRMR64DckfRRT0nUz7fK3A5dKOi7tLP8H4PGIeC2Pn2UjMFdSZR/rPE5y1vGldL+nAe9h736O3swA/jL97AeAI4B7c6x3O/B5SQsljU9/jjsjoh2oJ2m6OyjPfdoI4ARh+6NvAkuAZ4HnSJp3+rpR7LvAv5N08jYAPwbGRsRO4AySzul1JM1A1wJVvWznY0Ab8CJJu/7nANImsL8h6b9YT3K2cmGeP8t/Ac8DGyRtzrVCRLSSJISzgc3AvwIfj4gX89zH48Ah6Wf/Hnh/2gfT040kzWsPA68CzSQd4kREY/rZR9L+oJPz3Lftx+QJg8xGLkmXAJ+KiFNKHYvtf3wGYWZmOTlBmJlZTm5iMjOznHwGYWZmORX0RjlJN5LcrbopIo5Oy/4OOJ/kkrlNwCW5BmCTdDFdwyd8MyJ+0t/+pk+fHgsWLBii6M3MRr6lS5dujojaXO8VtIkpvU58F3BLVoKYGBEN6fJfAkdGxOU9PjeV5DLGOpIbdJYCJ/RyF+sedXV1sWTJkqH/QczMRihJSyOiLtd7BW1iioiHga09yhqyXtaQ+w7NM4HFEZEZ2mAxcFbBAjUzs72UZCwmSX8PfBzYQTJyZE9z6D4WzRp6GXdG0mUkI3Yyf/78oQ3UzGwUK0kndUR8NSLmAT8Drhjktq6PiLqIqKutzdmMZmZmA1Dqq5h+BvxpjvK1JKNnZswl/4HJzMxsCBQ9QUg6JOvl+STj2vR0P3BGOijaFJLxcu4vRnxmZpYo9GWutwOnAdMlrSGZzeqcdCasTpLx5i9P160jmYzlUxGxNb0c9ol0U9+IiK177cDMzApmRN1J7ctczcz2TV+XuXpGOTOzYaC9o5Pm9k6a2zrSRyct7V3PLVmvm9s6aGnveq4oG8NnTss1J9bgOEGYmeUQEbR2dNLc2klTWwdNacXd1NZBc2sHze0dNLWmFXp7B02tSWXd1Jq1Xlsnze1d62cq954JoLmtg/bOgbfmzJhQ5QRhZpbR0Rk0tXXQ2NpOU2sHja1JpZxZbmxtp7kts9yxZzlTwWcq/ewKPfO6KX1/IHX2GMHYijKq00dVxRiqy8uorhhDdUUZk8dWdJVXlHV7r7piDFVZrzPLPZ+T97qey8sKc72RE4SZFVRHZ7C7tZ3Glo7uz63t7G5JKvJMJb67pX1P5d6YVdE3tXawuzVT+SfvtbR37lMcEoxLK+2xlWWMqyxjbLo8taaSsZVJZT02Lc+sl6m4M+tXVZRlJYAxyTayyivKRPcpwPdfThBm1k1nZ9DY1sGu5nZ2tSSP3enzruZ2drd2le1uSSr1pKyDxnS9TGW/u7Wd5rb8K/KyMWJcZRk1leWMq0oq8XEV5UweV8nsyWWMqyxPyiqzKvnKcsZVZJeV76n4s5NAVfmYEVNxF4sThNkIERHsbk0q9p3NbTSkz7ta2tmZWW5uZ2da0Wcq/53NXZV/piwfZWNETWUZ46vKGVdVTk1VOeOryphSMy4pS98bm1knrdxrqsqpSSvzzPvjKsupqSqjssyV+HDiBGE2TEQEO1vaaWhqY0dTGw1N7TQ0t9HQlFT2yXNX+c5uy0nF3tFPo7kE4yvLmVBdzvjqpFKfOLaCOZPHUlNVxoTqij0V/fiqCsZXJ8s1leXpciYRlPsb+SjgBGE2xFrbO9ne1Mr2xrb00cr2pjZ2NLbtKd/RtPejoamt307RCdXlTKyuSJ7HVjB7cjWHVU9gYnU5E9Lyrue9l8dVlDFmjCt1y48ThFkfmts62NbYytbdXY9tu1vZmlb8W3cnFf62xq7nxtaOXrdXNkZMGlux5zFlXCULptV0K5s0toKJY5NEMDHzujr5Nl/myt2KyAnCRpW2jk627Gpl864WtuxuZcuuluT17uR5a1q2tbGVrbta2d1HZT9pbAVTayqZPK6CmROrOeyACUwZV8nksRVMrkmfxyVJYNLYCiaNq2BCVbmbZWy/4QRh+72IYFtjG5t2NrOpoYX6nS3U70qfd3a93ryrhe2NbTm3UVEmptVUMW18JVNrKlk4vYap6esp45Ky5NFV4Rfq2nOz4cIJwoa13S3trN/RzIYdzWxsaGZDQzObGprZ2NDCxjQhbNrZTFvH3o33NZVlTJ9QxfTxVbypdjwnHzSV6eOrsh6VTBufJAF/szfbmxOElUxLewcbdjSzdnsT67Y3s257E+u2N7F+RzPrdyTPO5v3vuRyQnU5B0ysZubEak5aWMOMidXMnFjFjAnVzJhYRe34KmonVFFT5T9vs8Hwf5AVTGt7J+u2N/HGtkbe2NrEmm2NrNmWvF67rYn6XS30HEx4+vhKZk0ay4JpNbz1oGnMmjx2TzI4YFKSCMZV+s/WrBj8n2aD0tzWwWtbdvPa5kZWb9nNa1uS59VbGlm/o6nbZZvlY8TsyWOZO2Usf3xoLXOmjGXO5OQxe/JYDphUTXVFWel+GDPrxgnC+hURrN/RzKpNu3i5fhev1O/mlc27eLV+N+t2NHdbd2pNJQdOG0fdginMnzqH+VPHMS99HDCx2pdpmu1HnCBsj4hgY0MLL25o4KWNO3lp4y5WbtzJqk27ul3uOaG6nIOm13DSQdNYOL2GBdNrWDithgOnj2NidUUJfwIzG0oFSxCSbgTOBTZFxNFp2beB9wCtwMvApRGxPcdnXwN2Ah1Ae2+zHdnAtbZ3snLTTpava2D5+gZeWN/Aixt2drsMtHZCFYfOHM8H6ubxphnjedOM8RxcO57p4yt9xY/ZKFDIM4ibgR8At2SVLQa+EhHtkq4FvgJ8uZfPnx4RmwsY36jR0Rms3LSTp1/fzjNrdrBs7Q5WbNhJa0cyyubYijIOnzWBs4+exRGzJnDYzAkcdsAEJo+rLHHkZlZKBUsQEfGwpAU9yh7IevkY8P5C7X80297YytLV21i6ehtPvr6NZ9fs2DP8w8Tqco6eM4lL37aAo+ZM4qjZE1kwrcZ9A2a2l1L2QXwCuLOX9wJ4QFIAP4qI63vbiKTLgMsA5s+fP+RB7g8272rh0Ze38PirW3ji1W2s2LgTSK4aOmr2RD5YN4/j5k3m2HmTWTBtnJuHzCwvJUkQkr4KtAM/62WVUyJiraQZwGJJL0bEw7lWTJPH9QB1dXUDn9R1P9Lc1sHjr27l4ZfqeWTVZl7ckCSEmsoyTlgwlfOOm80JB07h2LmTGVvpy0bNbGCKniAkXULSef3OiJ63SSUiYm36vEnSXcAiIGeCGC3W72jity9s4rfLN/LYK1toae+ksnwMJy6YwhfPPIw/Ongab54zyeMDmdmQKWqCkHQW8CXgjyOisZd1aoAxEbEzXT4D+EYRwxw2Xt28m3ufW89vlq1n2doGABZMG8eHT5rPHx9ay0kLp/kMwcwKppCXud4OnAZMl7QGuIbkqqUqkmYjgMci4nJJs4EbIuIcYCZwV/p+OXBbRNxXqDiHm00Nzdz99Druemoty9cnSeG4eZO56uzDedcRMzm4tsZ9CGZWFOqllWe/VFdXF0uWLCl1GPusraOTB1/YyO1/eIP/XllPZ8Cx8ybznmNmcfabZzFn8thSh2hmI5Skpb3da+Y7qUto085mbn10NXc88QabdrYwa1I1f37am3jv8XM4uHZ8qcMzs1HOCaIEVm3ayf99+FXuemotbZ2dnHZoLf9w0oGcdlitO5nNbNhwgiiil+t38b3FL/Gfz66nqnwMHzxxLp885SAWTq8pdWhmZntxgiiCDTua+ecHVvDzJ9dQXVHGn592MJ88ZSHTxleVOjQzs145QRRQW0cnNz/yGt//7Uu0dQaX/NFC/vz0g5nuxGBm+wEniAJ5+o3tfPn/PcuKjTt5x+Ez+Pp7jmL+tHGlDsvMLG9OEEOsozO47qGX+d7il5gxoYrrP3YC7z5ypu9dMLP9jhPEENqwo5kr73iKx1/dyrnHzOLv3/tmJo31BDpmtn9yghgiL6xv4NKbnqChuY3vfOBY/vT4OT5rMLP9mhPEEHhk1WYu/+lSaqrK+fln/ogjZk0sdUhmZoPmBDFIv352PVfe8RQH147npktPZLaHxTCzEcIJYhD+d9VmPnfnU7xl/mRuuPhE9zeY2YjicR0G6IX1DfzZT5eycHqNk4OZjUj7lCAkjZE06hvY121v4tKbnmBcVRk3X7rIycHMRqR+E4Sk2yRNTCfvWQYsl/TFwoc2PHV0Blfc9iS7W9q5+dJF7nMwsxErnzOIIyOiAbgA+A2wEPhYIYMazm59bDVPvr6db1xwlK9WMrMRLZ8EUSGpgiRB3BMRbUC/swxJulHSJknLssq+LelFSc9KukvS5F4+e5akFZJWSboqvx+l8NZub+Kf7nuRUw+t5YLj5pQ6HDOzgsonQfwIeA2oAR6WdCDQkMfnbgbO6lG2GDg6Io4BXiKZgrQbSWXAD4GzgSOBiyQdmcf+CioiuPqu5wjgH957tG+CM7MRr98EERH/EhFzIuKcSKwGTs/jcw8DW3uUPRAR7enLx4C5OT66CFgVEa9ERCtwB3B+f/srtF89u57frajnC2ccxtwpHnTPzEa+fu+DkPS1Xt76xiD3/Qngzhzlc4A3sl6vAU7qbSOSLgMuA5g/f/4gQ8qtszP4zv0rePOcSVz8RwsKsg8zs+Emnyam3VmPDpKmnwWD2amkrwLtwM8Gsx2AiLg+Iuoioq62tnawm8vpf1Zt5vWtjXz61IMoG+OmJTMbHfo9g4iIf85+Lek7wP0D3aGkS4BzgXdGRK7O7rXAvKzXc9Oykrn1sdVMq6nkzKNmljIMM7OiGsid1OPI3XfQL0lnAV8CzouIxl5WewI4RNJCSZXAhcA9A9nfUFi/o4kHX9zEB+rmUVVeVqowzMyKLp8+iOfouqy1DKglj/4HSbcDpwHTJa0BriG5aqkKWJxeBfRYRFwuaTZwQ9oR3i7pCpKzlDLgxoh4fp9/siFy5xNv0BnBhxcVpn/DzGy4ymewvnOzltuBjVlXIvUqIi7KUfzjXtZdB5yT9fpe4N48Yiuo9o5O7vjDG5x6SK2nCzWzUafXJqasMZd2Zj2agImSphYhtpJ78MVNbGho5iMn+ezBzEafvs4gbiM5e1hK0sSUfflOAAcVMK5h4Y4/vM4BE6t5x+EzSh2KmVnR9ZogIuLc9Hlh8cIZPiKCJa9t47zjZlNe5lHRzWz06TVBSDq+rw9GxJNDH87wsWZbEztb2jlq9qRSh2JmVhJ9NTFl7n+oBuqAZ0iamY4BlgBvLWxopfX8umS4qSNmTShxJGZmpdFr20lEnB4RpwPrgePTu5VPAN5CiW9cK4YX1jcwRnD4AR7S28xGp3wa1w+LiOcyLyJiGXBE4UIaHpavb2Dh9BrGVvrmODMbnfK5D+JZSTcAt6avPwI8W7iQhofl6xo4/sAppQ7DzKxk8jmDuBR4HrgyfSxPy0asHY1trN3exJGeMc7MRrF8ButrBr6XPkaF5evdQW1mls9YTIcA/0gyu1t1pjwiRuyNci+kCeLI2T6DMLPRK58mppuAfyMZh+l04Ba6+iNGpOXrG5g+vooZE6r7X9nMbITKJ0GMjYgHAUXE6oj4OvAnhQ2rtJava/DZg5mNevlcxdQiaQywMh2Gey0wvrBhlU5reycrN+3k7YdOL3UoZmYllc8ZxJUkkwT9JXAC8FHg4kIGVUov1++irSN8BZOZjXp9nkFIKgM+FBFfAHYxwi9vhaR5CeAoNzGZ2SjX5xlERHQApxQplmFh+foGqivGsHD6iG1FMzPLSz59EE9Jugf4D2B3pjAiftHXhyTdSDKfxKaIODot+wDwdZKhOhZFxJJePvsayQRFHUB7RNTlEeeQWL6ugcNmTqBsjPpf2cxsBMsnQVQDW4B3ZJUF0GeCAG4GfkByWWzGMuB9wI/y2O/pEbE5j/WG1Ootuzn5oGnF3q2Z2bCTz53UA+p3iIiHJS3oUfYCgDR8v523tHd6gD4zM/K7iqkUAnhA0lJJl/W1oqTLJC2RtKS+vn7QO27t6KTCM8iZmQ3bBHFKRBwPnA18VtKpva0YEdenc1XU1dbWDnrHbR2dVJYP18NiZlY8w7ImjIi16fMm4C5gUbH23dYRVJQN3yYwM7Ni6WtO6r/q64MR8d2hDwck1QBjImJnunwG8I1C7Kunjs6gozPcxGRmRt+d1IMa61rS7cBpwHRJa4BrgK3A/wFqgV9LejoizpQ0G7ghIs4BZgJ3pR3Z5cBtEXHfYGLJV1tHJ4AThJkZfSSIiPjbwWw4Ii7q5a27cqy7DjgnXX4FOHYw+x6oTIKodIIwM8trPohq4JPAUXSfD+ITBYyrJNo6AsCd1GZm5NdJ/VPgAOBM4CFgLsldziOOm5jMzLrkUxO+KSL+BtgdET8hmQvipMKGVRqt7ZkE4auYzMzySRBt6fN2SUcDk4AZhQupdPb0QbiJycwsr7GYrpc0Bfgb4B6SyYK+VtCoSiTTB+EmJjOz/MZiuiFdfAg4qLDhlJb7IMzMuuRzFVMV8KfAguz1I6IoN68VU4v7IMzM9sinieluYAewFGgpbDil5fsgzMy65JMg5kbEWQWPZBjY08TkTmozs7yuYvpfSW8ueCTDgPsgzMy65HMGcQpwiaRXSZqYBEREHFPQyEqgtT1zFZP7IMzM+kwQSkbMuxxYXZxwSst9EGZmXfpMEBERkn4YEaOqick3ypmZ5dcH8aSkEwseyTDgPggzsy759EGcBHxU0mvAbkZyH4TvpDYz2yOfBHFmwaMYJtra3QdhZpbRb00YEauBecA70uXGfD4n6UZJmyQtyyr7gKTnJXVKquvjs2dJWiFplaSr8vtRBq/rPghfxWRmlk9Ffw3wZeAraVEFcGse274Z6HmD3TLgfcDDfeyvDPghcDZwJHCRpCPz2N+guQ/CzKxLPjXhe4HzSPofMtOD9jtfdUQ8TDIHdXbZCxGxop+PLgJWRcQrEdEK3AGcn0ecg5bpgygf4zMIM7N8EkRrRAQQAJJqChsSc4A3sl6vScsKrq2jk8qyMSS3f5iZjW75JIh/l/QjYLKkTwO/BW7o5zNFI+kySUskLamvrx/UtlrbO30XtZlZKp/5IL4j6d1AA3AY8LWIWFzAmNaSdIpnzE3LeovveuB6gLq6uhjMjts6Oj1Qn5lZKp/5IK6NiC8Di3OUFcITwCGSFpIkhguBDxdoX920dXS6g9rMLJVPbfjuHGVn9/chSbcDjwKHSVoj6ZOS3itpDfBW4NeS7k/XnS3pXoCIaAeuAO4HXgD+PSKez+/HGZzW9vA9EGZmqV7PICR9Bvhz4CBJz2a9NQF4pL8NR8RFvbx1V4511wHnZL2+F7i3v30MteQMwn0QZmbQdxPTbcBvgH8Esm9W2xkRW3N/ZP/W1tHpgfrMzFK9JoiI2EEy1ehF6c1rM9P1x0saHxGvFynGonEfhJlZl3w6qa8Avg5sBDrT4gBG5GB9ThBmZol8Buv7HHBYRGwpcCwl19be6U5qM7NUPrXhGyRNTSNech+EO6nNzCC/M4hXgN9L+jXJnNQARMR3CxZVibR1dDK+Op9DYmY28uVTG76ePirTx4jlPggzsy75DLXxt8UIZDjIDNZnZmZ93yj3/Yj4nKRfkY7kmi0izitoZCXgG+XMzLr0dQbx0/T5O8UIZDhIRnP1GYSZGfR9o9zS9Pmh4oVTWh7N1cysi2vDLK2+D8LMbA/XhlnaOsJjMZmZpVwbZnEntZlZl76uYsp59VLGSLuKqbMzaO/0fRBmZhl9XcWUuXrpfcABwK3p64tIBu4bUdo6k3EInSDMzBJ9XcX0EICkf46Iuqy3fiVpScEjK7K2juRkyZ3UZmaJfGrDGkkHZV6kc0XX9PchSTdK2iRpWVbZVEmLJa1Mn6f08tkOSU+nj3vy+UEGq609cwbhPggzM8gvQXyeZLC+30t6CPgdyRDg/bkZOKtH2VXAgxFxCPAg3Weqy9YUEcelj6L0dbR1pAnCVzGZmQH5jcV0n6RDgMPTohcjoqWvz6Sfe1jSgh7F5wOnpcs/AX4PfDnfYAuptcN9EGZm2fqtDSWNA74IXBERzwDzJZ07wP3NjIj16fIGkmlMc6mWtETSY5Iu6Ce+y9J1l9TX1w8wLPdBmJn1lE9teBPQCrw1fb0W+OZgdxwRQe+X0R6Ydox/GPi+pIP72M71EVEXEXW1tbUDjqfNZxBmZt3kUxseHBH/BLQBREQjMNCe3I2SZgGkz5tyrRQRa9PnV0iaod4ywP3lrdWd1GZm3eSTIFoljSX9tp9+m++3D6IX9wAXp8sXA3f3XEHSFElV6fJ04G3A8gHuL2/upDYz6y6f2vAa4D5gnqSfkVx99KX+PiTpduBR4DBJayR9EvgW8G5JK4F3pa+RVCfphvSjRwBLJD1DcsXUtyKi4AkicwbhPggzs0Q+VzEtlvQkcDJJ09KVEbE5j89d1Mtb78yx7hLgU+ny/wJv7m/7Q21PJ7XPIMzMgPwH65sDlJHMSX2qpPcVLqTScCe1mVl3/Z5BSLoROAZ4HuhMiwP4RQHjKrqu+yDcSW1mBnkkCODkiDiy4JGUWOYMwn0QZmaJfGrDRyWNmgThJiYzs0Q+ZxC3kCSJDSSXt4rkPrdjChpZkbW1J53UvszVzCyRT4L4MfAx4Dm6+iBGHPdBmJl1l0+CqI+Iogy5XUrugzAz6y6fBPGUpNuAX5F1B3VEjKirmNwHYWbWXT4JYixJYjgjq2zEXeaauVHOCcLMLNFngpBUBmyJiC8UKZ6S8WB9Zmbd9fl1OSI6SAbLG/HaOjqpKBOSE4SZGeTXxJSZF/o/gN2ZwpHYB+EOajOzLvkkiGpgC/COrLIR1wfR2t7peyDMzLLkM5rrpcUIpNRaO8Id1GZmWfKZk3qupLskbUofP5c0txjBFZObmMzMust3Tup7gNnp41dp2YiS6aQ2M7NEPgmiNiJuioj29HEzUFvguIouSRA+gzAzy8inRtwi6aOSytLHR0k6rfsl6ca0WWpZVtlUSYslrUyfp/Ty2YvTdVZKujjXOkOptd19EGZm2fKpET8BfBDYAKwH3g/k23F9M3BWj7KrgAcj4hCS+a2v6vkhSVNJ5sI+CVgEXNNbIhkqbR2+isnMLFuvNaKka9PFRRFxXkTURsSMiLggIl7PZ+MR8TCwtUfx+cBP0uWfABfk+OiZwOKI2BoR24DF7J1ohlTSSe0+CDOzjL6+Mp+j5LbirwzxPmdGxPp0eQMwM8c6c4A3sl6vScv2IukySUskLamvrx9wUO6DMDPrrq8a8T5gG3CMpAZJO7Ofh2LnEREkN90NZhvXR0RdRNTV1g6879z3QZiZdddrjRgRX4yIycCvI2JiREzIfh7EPjdKmgWQPm/Ksc5aYF7W67lpWcG0tfsMwswsW781YkScL+lASe8CkDRW0oRB7PMeIHNV0sXA3TnWuR84Q9KUtHP6jLSsYNo6OqlyJ7WZ2R753En9aeD/AT9Ki+YCv8xn45JuBx4FDpO0RtIngW8B75a0EnhX+hpJdZJuAIiIrcDfAU+kj2+kZQXjG+XMzLrLZ7C+z5Jcavo4QESslDQjn41HxEW9vPXOHOsuAT6V9fpG4MZ89jMU2twHYWbWTT41YktEtGZeSCpnkB3Lw1Gr74MwM+smnxrxIUl/DYyV9G6SeSF+Vdiwiq+13YP1mZlly6dGvAqoB54D/gy4F7i6kEGVgvsgzMy6y2c+iE5JvwR+GREDvxNtmPONcmZm3fU11IYkfV3SZmAFsEJSvaSvFS+84ogId1KbmfXQV434eeBtwIkRMTUippIMnvc2SZ8vSnRF0taR9LlXupPazGyPvmrEjwEXRcSrmYKIeAX4KPDxQgdWTG0dnQDugzAzy9JXgqiIiM09C9N+iIrChVR8XQnCZxBmZhl91YitA3xvv9PqBGFmtpe+rmI6tpdRWwVUFyiektjTB+EEYWa2R68JIiLKihlIKbW1J2cQ7qQ2M+viGhH3QZiZ5eIakew+CF/FZGaW4QRBVx+EB+szM+viGpGuJiZ3UpuZdXGNSDKSK7gPwswsW0lqRElXSlom6XlJn8vx/mmSdkh6On0UdPwn90GYme0tnxnlhpSko4FPk8xS1wrcJ+k/I2JVj1X/OyLOLUZMbT6DMDPbSylqxCOAxyOiMSLagYeA95Ugjj08WJ+Z2d5KUSMuA94uaZqkccA5wLwc671V0jOSfiPpqN42JukySUskLamvH9h0Fb4Pwsxsb0VvYoqIFyRdCzwA7AaeBjp6rPYkcGBE7JJ0DvBL4JBetnc9cD1AXV3dgObKdh+EmdneSvKVOSJ+HBEnRMSpwDbgpR7vN0TErnT5XqBC0vRCxePLXM3M9laqq5hmpM/zSfofbuvx/gGSlC4vIolzS6Hi8VhMZmZ7K3oTU+rnkqYBbcBnI2K7pMsBIuI64P3AZyS1A03AhRExoOajfOy5k9pnEGZme5QkQUTE23OUXZe1/APgB8WKx/NBmJntzTUinnLUzCwXJwiSBFFRJtJuDzMzwwkCSPog3LxkZtada0WSwfqcIMzMunOtSNJJ7QRhZtada0WS+yAq3UFtZtaNEwRpJ7VvkjMz68a1Iu6kNjPLxbUi7oMwM8vFtSJJE5P7IMzMunOCIE0Q7oMwM+vGtSLQ1u4+CDOznlwr4j4IM7NcXCuSGYvJh8LMLJtrRTJ9EO6kNjPL5gSB74MwM8vFtSIerM/MLJdSzUl9paRlkp6X9Lkc70vSv0haJelZSccXMh73QZiZ7a3otaKko4FPA4uAY4FzJb2px2pnA4ekj8uAfytkTL5Rzsxsb6X42nwE8HhENEZEO/AQ8L4e65wP3BKJx4DJkmYVKiA3MZmZ7a0UteIy4O2SpkkaB5wDzOuxzhzgjazXa9KyvUi6TNISSUvq6+sHFNAZRx3AUXMmDuizZmYjVXmxdxgRL0i6FngA2A08DXQMYnvXA9cD1NXVxUC28b0PHTfQ3ZuZjVglaVeJiB9HxAkRcSqwDXipxypr6X5WMTctMzOzIinVVUwz0uf5JP0Pt/VY5R7g4+nVTCcDOyJifZHDNDMb1YrexJT6uaRpQBvw2YjYLulygIi4DriXpG9iFdAIXFqiOM3MRq2SJIiIeHuOsuuylgP4bFGDMjOzbnxtp5mZ5eQEYWZmOTlBmJlZTk4QZmaWk5L+4JFBUj2weoAfnw5sHsJwhorj2jeOa984rn0zEuM6MCJqc70xohLEYEhaEhF1pY6jJ8e1bxzXvnFc+2a0xeUmJjMzy8kJwszMcnKC6HJ9qQPohePaN45r3ziufTOq4nIfhJmZ5eQzCDMzy8kJwszMchr1CULSWZJWSFol6aoi73uepN9JWi7peUlXpuVfl7RW0tPp45ysz3wljXWFpDMLGNtrkp5L978kLZsqabGklenzlLRckv4ljetZSccXKKbDso7J05IaJH2uVMdL0o2SNklallW2z8dI0sXp+islXVyAmL4t6cV0v3dJmpyWL5DUlHXcrsv6zAnp739VGvegJ23vJbZ9/t0N9f9sL3HdmRXTa5KeTsuLcsz6qBuK+/cVEaP2AZQBLwMHAZXAM8CRRdz/LOD4dHkCycRJRwJfB76QY/0j0xirgIVp7GUFiu01YHqPsn8CrkqXrwKuTZfPAX4DCDiZZM7xYvzuNgAHlup4AacCxwPLBnqMgKnAK+nzlHR5yhDHdAZQni5fmxXTguz1emznD2mcSuM+u0DHa59+d4X4n80VV4/3/xn4WjGPWR91Q1H/vkb7GcQiYFVEvBIRrcAdwPnF2nlErI+IJ9PlncAL9DL3dup84I6IaImIV0nmy1hU+Ei77f8n6fJPgAuyym+JxGPAZEmzChzLO4GXI6KvO+cLerwi4mFga4597ssxOhNYHBFbI2IbsBg4ayhjiogHIqI9ffkYyQyNvUrjmhgRj0VSy9yS9XMMWC/Hqze9/e6G/H+2r7jSs4APArf3tY2hPmZ91A1F/fsa7QliDvBG1us19F1BF4ykBcBbgMfToivSU8UbM6eRFDfeAB6QtFTSZWnZzOia2W8DMLMEcWVcSPd/2lIfr4x9PUbFjvETJN80MxZKekrSQ5Iy87TMSeMoVkz78rsr9vF6O7AxIlZmlRX1mPWoG4r69zXaE8SwIGk88HPgcxHRAPwbcDBwHLCe5BS32E6JiOOBs4HPSjo1+830W1JJrpGWVAmcB/xHWjQcjtdeSnmMcpH0VaAd+FlatB6YHxFvAf4KuE3SxCKHNSx/d1kuovsXkaIesxx1wx7F+Psa7QliLTAv6/XctKxoJFWQ/AH8LCJ+ARARGyOiIyI6gf9LV7NI0eKNiLXp8ybgrjSGjZmmo/R5U7HjSp0NPBkRG9MYS368suzrMSpKjJIuAc4FPpJWLKTNN1vS5aUkbfuHpvvPboYq5N/Zvv7uivY7lVQOvA+4Myveoh2zXHUDRf77Gu0J4gngEEkL02+lFwL3FGvnafvmj4EXIuK7WeXZ7ffvBTJXV9wDXCipStJC4BCSjrGhjqtG0oTMMkkn57J0/5mrIC4G7s6K6+PplRQnAzuyToMLodu3ulIfrx729RjdD5whaUravHJGWjZkJJ0FfAk4LyIas8prJZWlyweRHJ9X0rgaJJ2c/o1+POvnGFID+N0V83/2XcCLEbGn6ahYx6y3uoFi/30NtJd9pDxIev9fIvkm8NUi7/sUklPEZ4Gn08c5wE+B59Lye4BZWZ/5ahrrCobgypJe4jqI5OqQZ4DnM8cFmAY8CKwEfgtMTcsF/DCN6zmgroDHrAbYAkzKKivJ8SJJUuuBNpK23U8O5BiR9AusSh+XFiCmVSTt0Jm/sevSdf80/f0+DTwJvCdrO3UklfXLwA9IR10oQGz7/Lsb6v/ZXHGl5TcDl/dYtyjHjN7rhqL+fXmoDTMzy2m0NzGZmVkvnCDMzCwnJwgzM8vJCcLMzHJygjAzs5ycIGxEkHSBpJB0+CC3c7Ok96fLN0g6ch8+e5qk/xzM/s2GEycIGykuAv4nfR4SEfGpiFg+VNvrS3qDU1H+H9M7hM365QRh+710vJpTSG68ujCr/DRJD0v6tZL5A67LVMKSdkn6npKx9h+UVJtju7+XVJcunyHpUUlPSvqPdJ+ZuQlelPQkybAMueK7RNLd6fZWSromLV+QxnULyQ1W8yR9UdITSgav+9t0vZr0Z3hG0jJJH0rLv6VkvoBnJX0nLdtzBpT5ObOOxX9LugdYLqlMyTwRmX392SB/DTYCOUHYSHA+cF9EvARskXRC1nuLgL8gGUv/YLoq8RpgSUQcBTwEXNPbxiVNB64G3hXJAIZLgL+SVE0yftB7gBOAA/qIcRHJXbjHAB/IJB6SoRr+NY3jsPT1IpLB605QMkjiWcC6iDg2Io4G7pM0jWRoiqMi4hjgm/0cI0jmPLgyIg4lSaY7IuJE4ETg0+mQFmZ7OEHYSHARybwApM/ZzUx/iGTugA6SIRVOScs76RqE7das8lxOJkkwjyiZWexikomKDgdejYiVkQxJcGsf21gcEVsiogn4Rdb+Vkcyfj8k4+ScATxFMozD4SQJ4zng3ZKulfT2iNgB7ACagR9Leh/QSP/+EMncCpl9fTz9eR4nGcLhkDy2YaOI2yJtvyZpKvAO4M2SgmTGsZD0xXSVnmPJ9Da2TF9jzoikgu/WvyHpuH0Itbc4dvfYzz9GxI/2CiCZQvIc4JuSHoyIb0haRDJx0vuBK0iOQzvpF7+0Oa0yazM99/UXETGkAwPayOIzCNvfvR/4aUQcGBELImIe8CrJRC8Ai9KRP8cAHyLpyIbkbz/TVv/hrPJcHgPeJulNsKdP4FDgRWCBpIPT9frqIH+3kvmEx5LMAvZIjnXuBz6R1b8xR9IMSbOBxoi4Ffg2cHy6zqSIuBf4PHBsuo3XSJq7IJkzo6KXeO4HPqNkSGkkHapk5F6zPXwGYfu7i0jmWc7287T8TpLhoX8AvAn4HcncFpB8m14k6WqSMfU/1NsOIqJeyXwKt0uqSouvjoiXlMy292tJjcB/k8wfnMsf0rjmArdGxBIlM4Vl7+cBSUcAjyajPbML+Gga+7cldZKMOPqZdD93p/0gIpm8BpI+kbslPQPcR/ezhmw3kMyv/KSSndUzBNOK2sji0VxtxJJ0GvCFiDg3x3u7ImJ8keK4hGT45SuKsT+zoeImJjMzy8lnEGZmlpPPIMzMLCcnCDMzy8kJwszMcnKCMDOznJwgzMwsp/8P0k3+SjWjAwQAAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from matplotlib import pyplot as plt\n", "force = np.linspace(0,2000,100)\n", "plt.plot(force,sample.force_controlled(force,params)) \n", "plt.ylabel('Deformed internal radius')\n", "plt.xlabel('Applied pressure')\n", "plt.title('Force control plot')\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "1e108272-c2a2-4d4a-b5be-3970961d6765", "metadata": {}, "source": [ "Note that `force_controlled` uses iterative solver, evaluating the `disp_controlled` simulation multiple times to find the “displacement” that would result in the applied force (numerically close-enough). Thus, `force_controlled` is commonly slower than `disp_controlled`." ] }, { "cell_type": "markdown", "id": "13433afa-6309-41c4-84a2-8598d51711d2", "metadata": { "tags": [] }, "source": [ "## Stress across the thickness" ] }, { "cell_type": "markdown", "id": "f7f9aee6-e67d-4e19-b028-d9c2416bd88a", "metadata": {}, "source": [ "Since the induced stress in a cylinder is non-uniform, we can calculate it using the `cauchy_stress` method. It takes the `disp_measure` (by default the deformed inner radius) of the tube and the parameters. The output is a tuple of the normalised thickness `xi` which has by default 10 points, and stress tensors `stress` which is a list of the stress tensors at these locations across the thickness." ] }, { "cell_type": "code", "execution_count": 7, "id": "edf28232-b856-4848-8744-e5b2b44693a6", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " \n", "10 10\n", "(3, 3)\n" ] } ], "source": [ "xi,stress = sample.cauchy_stress([10], params)\n", "print(type(xi), type(stress))\n", "print(len(xi), len(stress))\n", "print(stress[0].shape)" ] }, { "cell_type": "markdown", "id": "a9eabc71-1bff-4bb0-adc3-64e0b56c35b1", "metadata": {}, "source": [ "For visualisation, we plot the von-Mises stress at each point across the thickness." ] }, { "cell_type": "code", "execution_count": 8, "id": "619008ce-4595-4039-a466-b6055d70068b", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "def von_mises(sigma_list):\n", " return [sqrt(3./2.)*np.linalg.norm(sigma-np.trace(sigma)/3.*np.eye(3)) for sigma in sigma_list]\n", "\n", "plt.plot(xi,von_mises(stress))\n", "plt.xlabel('Normalized thickness')\n", "plt.ylabel('von-Mises stress')\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "ed07c89f-328c-408a-b579-dd01c99f42f3", "metadata": {}, "source": [ "## Different `force_measure`s" ] }, { "cell_type": "markdown", "id": "231fe26b-1945-46d7-9bc9-f5b5cba462cc", "metadata": {}, "source": [ "There are two options for the `force_measure` argument, as we can see from the helper function." ] }, { "cell_type": "code", "execution_count": 9, "id": "8cb45386-ad84-436e-96a6-9f2e19366fe3", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "\u001b[0;31mInit signature:\u001b[0m\n", "\u001b[0mpmt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mTubeInflation\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\u001b[0m\n", "\u001b[0;34m\u001b[0m \u001b[0mmat_model\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", "\u001b[0;34m\u001b[0m \u001b[0mdisp_measure\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'radius'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", "\u001b[0;34m\u001b[0m \u001b[0mforce_measure\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;34m'pressure'\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\n", "\u001b[0;34m\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n", "\u001b[0;31mDocstring:\u001b[0m \n", "For simulating uniform axisymmetric inflation of a tube\n", "\n", "+-----------+-----------------------------+\n", "| Parameter | Description (default) |\n", "+===========+=============================+\n", "| Ri | Internal radius (1) |\n", "+-----------+-----------------------------+\n", "| thick | Thickness (0.1) |\n", "+-----------+-----------------------------+\n", "| omega | Opening angle (radians) (0) |\n", "+-----------+-----------------------------+\n", "| L0 | Length of sample (1) |\n", "+-----------+-----------------------------+\n", "| lambdaZ | Longitudinal stretch (1) |\n", "+-----------+-----------------------------+\n", "\n", "Parameters\n", "----------\n", "mat_model: MatModel\n", " A material model object of type MatModel\n", "disp_measure: str\n", " The measure of displacement with the following options: \n", " \n", " * 'stretch' : Ratio of deformed to reference internal radius\n", " * 'deltar' : Change in internal radius\n", " * 'radius' : Deformed internal radius (default)\n", " * 'area' : Deformed internal area\n", " \n", "force_measure: str\n", " The measure of force with the following options:\n", " \n", " * 'force' : Total force acting on the tube length\n", " * 'pressure' : Internal pressure acting on the tube (default)\n", " \n", "\u001b[0;31mFile:\u001b[0m /usr/local/lib/python3.9/site-packages/pymecht/SampleExperiment.py\n", "\u001b[0;31mType:\u001b[0m type\n", "\u001b[0;31mSubclasses:\u001b[0m \n" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pmt.TubeInflation?" ] }, { "cell_type": "code", "execution_count": 10, "id": "da6b95ca-d72a-47ac-855e-deec5a531487", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "4.008308115330826\n", "4.008308115330826\n" ] } ], "source": [ "#output pressure (by default)\n", "sample = pmt.TubeInflation(mat_model,force_measure='pressure')\n", "params.set('L0',1)\n", "print(sample.disp_controlled(10,params)) #prints presssure at a deformed radius of 10\n", "\n", "params.set('L0',2)\n", "print(sample.disp_controlled(10,params)) #the pressure remains unchanged" ] }, { "cell_type": "code", "execution_count": 11, "id": "24fe06cd-da24-4073-940d-617d4cd95534", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "251.84942656895345\n", "503.6988531379069\n" ] } ], "source": [ "#output force, which depends on the length of the tube\n", "sample = pmt.TubeInflation(mat_model,force_measure='force')\n", "params.set('L0',1)\n", "print(sample.disp_controlled(10,params)) #prints force at a deformed radius of 10, which depends on the reference radius and length of the sample\n", "\n", "params.set('L0',2)\n", "print(sample.disp_controlled(10,params)) #see the new force, which should be twice" ] }, { "cell_type": "markdown", "id": "112cae44-ba5d-466f-b21d-e46cd5d96d43", "metadata": {}, "source": [ "## Different `disp_measure`s" ] }, { "cell_type": "markdown", "id": "e2f07f47-aa6a-422d-a709-d7ebdb56e536", "metadata": {}, "source": [ "There are four options for the `disp_measure` argument, as we can see from the helper function above. Thus, one can use different ones when creating the sample. This will result in different outputs from `force_controlled`. Similarly, the inputs to the `disp_controlled` will be treated as the chosen `disp_measure`.\n", "\n", "When using `force_controlled` simulation, an iterative solution is involved, for which an initial guess is required. There is a default value, which may not be reasonable for different `disp_measure`s. Thus, we can explicitly specify the initial guess using `x0` argument." ] }, { "cell_type": "code", "execution_count": 12, "id": "cbf46528-6c43-4bef-8e29-d841d4ac82c9", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "stretch 1.2239472787140655\n", "deltar 2.0155255084265886\n", "radius 11.015525508426588\n", "area 381.2065144490343\n" ] } ], "source": [ "sample2 = pmt.TubeInflation(mat_model, disp_measure='stretch', force_measure='pressure')\n", "print('stretch', sample2.force_controlled(10,params,x0=1))\n", "\n", "sample2 = pmt.TubeInflation(mat_model, disp_measure='deltar', force_measure='pressure')\n", "print('deltar', sample2.force_controlled(10,params,x0=0))\n", "\n", "sample2 = pmt.TubeInflation(mat_model, disp_measure='radius', force_measure='pressure')\n", "print('radius', sample2.force_controlled(10,params,x0=params['Ri'].value))\n", "\n", "sample2 = pmt.TubeInflation(mat_model, disp_measure='area', force_measure='pressure')\n", "area = np.pi*(params['Ri'].value)**2 #calculates the lumen area\n", "print('area', sample2.force_controlled(10,params,x0=area))" ] }, { "cell_type": "markdown", "id": "da46907a-add2-409d-84aa-9eee2773f4ec", "metadata": {}, "source": [ "## Fiber direction warning" ] }, { "cell_type": "markdown", "id": "497a670a-cb69-42cd-a189-9c9122a79cb1", "metadata": {}, "source": [ "One can manually specify the fiber direction in the material models before using them to create a `TubeInflation` sample, as follows." ] }, { "cell_type": "code", "execution_count": 13, "id": "ae8273f9-acfa-45da-a971-ce122fc37df4", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "An object of type TubeInflationwith radius as input, pressure as output, and the following material\n", "Material model with 2 components:\n", "Component1: YEOH\n", "Component2: GOH with fiber direction(s):[array([0. , 0.70710678, 0.70710678])]\n", "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/usr/local/lib/python3.9/site-packages/pymecht/SampleExperiment.py:536: UserWarning: The TubeInflation assumes that fibers are symmetric w.r.t. axes. This is not satisfied and the results may be spurious.\n", " warnings.warn(\"The TubeInflation assumes that fibers are symmetric w.r.t. axes. This is not satisfied and the results may be spurious.\")\n" ] } ], "source": [ "mat = pmt.MatModel('yeoh','goh')\n", "mat_models = mat.models\n", "mat_models[1].fiber_dirs = np.array([0,1,1])\n", "sample = pmt.TubeInflation(mat)\n", "print(sample)" ] }, { "cell_type": "markdown", "id": "39da6bd1-26f7-4b30-b475-a848ac95375f", "metadata": {}, "source": [ "However, it raises a warning that the fiber directions are not symmetric with respect to the coordinate system, which means there are shear stresses that are being ignored during the simulation. Therefore, to avoid such issues, helper functions `specifiy_single_fiber` and `specify_two_fibers` are provided." ] }, { "cell_type": "markdown", "id": "776a3f45-9611-4786-a726-be08a37536a1", "metadata": {}, "source": [ "## Least square fitting" ] }, { "cell_type": "markdown", "id": "462db114-060e-4dd2-9cf5-9d40ed7c9d82", "metadata": {}, "source": [ "One can also use `TubeInflation` instance to perform parameter fitting as demonstrated below. More details on this are provided in the \"Using ParamFitter\" example." ] }, { "cell_type": "code", "execution_count": 14, "id": "c665b0f1-690e-44c7-8162-ab94be9c24d1", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Fiber directions set to 10 degrees ( 0.17453292519943295 radians)\n", "Parameter fitting instance created with the following settings\n", "------------------------------------------------------------------\n", "Keys Value Fixed? Lower bound Upper bound \n", "------------------------------------------------------------------\n", "Ri 9.00 Yes - - \n", "thick 2.00 Yes - - \n", "omega 0.00 Yes - - \n", "L0 2.00 Yes - - \n", "lambdaZ 1.00 Yes - - \n", "c1_0 28.00 No 1.00e-04 1.00e+02 \n", "c2_0 21.00 No 0.00 1.00e+02 \n", "c3_0 8.00 No 0.00 1.00e+02 \n", "c4_0 1.00 No 0.00 1.00e+02 \n", "k1_1 5.00 No 0.10 30.00 \n", "k2_1 15.00 No 0.10 30.00 \n", "k3_1 0.10 No 0.00 0.33 \n", "------------------------------------------------------------------\n", "\n", "7 parameters will be fitted.\n" ] } ], "source": [ "applied_radius = np.linspace(9,12,20)\n", "measured_pressure = np.linspace(0,10,20)\n", "\n", "sample = pmt.TubeInflation(mat_model, force_measure='pressure')\n", "pmt.specify_two_fibers(sample,10)\n", "\n", "def sim_func(param):\n", " return sample.disp_controlled(applied_radius,param)\n", "\n", "param_fitter = pmt.ParamFitter(sim_func,measured_pressure,params)" ] }, { "cell_type": "code", "execution_count": 15, "id": "b904bd23-dccc-4dbf-adfb-460fb2805bc3", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " Iteration Total nfev Cost Cost reduction Step norm Optimality \n", " 0 1 2.0177e+03 2.95e+04 \n", " 1 2 3.1888e+02 1.70e+03 4.40e+00 4.18e+03 \n", " 2 3 4.5504e+01 2.73e+02 2.56e+00 5.99e+02 \n", " 3 4 6.7995e+00 3.87e+01 1.64e+00 9.19e+01 \n", " 4 5 1.2549e+00 5.54e+00 2.33e+00 1.72e+01 \n", " 5 6 3.0985e-01 9.45e-01 1.61e+00 5.45e+00 \n", " 6 7 1.5975e-01 1.50e-01 1.88e+00 2.60e+00 \n", " 7 8 1.1851e-01 4.12e-02 3.71e+00 2.81e+00 \n", " 8 9 9.1492e-02 2.70e-02 2.38e+00 1.29e+00 \n", " 9 10 7.8419e-02 1.31e-02 2.86e+00 1.06e+00 \n", " 10 11 7.0629e-02 7.79e-03 1.73e+00 6.80e-02 \n", " 11 14 6.9678e-02 9.51e-04 1.32e+00 1.03e+00 \n", " 12 15 6.6380e-02 3.30e-03 4.41e-01 2.73e-02 \n", " 13 18 6.6041e-02 3.39e-04 2.34e-01 9.52e-02 \n", " 14 19 6.5527e-02 5.14e-04 1.96e-01 5.02e-02 \n", " 15 20 6.4263e-02 1.26e-03 6.82e-01 3.42e-02 \n", " 16 21 6.1835e-02 2.43e-03 1.39e+00 4.71e-01 \n", " 17 22 5.6742e-02 5.09e-03 1.22e+00 1.91e-01 \n", " 18 24 5.5916e-02 8.26e-04 1.29e+00 1.39e+00 \n", " 19 25 5.0716e-02 5.20e-03 6.46e-01 8.71e-02 \n", " 20 26 4.9376e-02 1.34e-03 1.51e+00 1.29e+00 \n", " 21 27 4.4528e-02 4.85e-03 7.50e-01 1.17e-01 \n", " 22 28 4.2163e-02 2.36e-03 1.43e+00 9.03e-01 \n", " 23 29 3.8352e-02 3.81e-03 1.03e+00 2.16e-01 \n", " 24 30 3.5724e-02 2.63e-03 1.40e+00 5.97e-01 \n", " 25 31 3.2442e-02 3.28e-03 1.41e+00 3.47e-01 \n", " 26 32 2.9432e-02 3.01e-03 2.27e+00 7.80e-01 \n", " 27 33 2.6508e-02 2.92e-03 9.07e-01 1.05e-01 \n", " 28 34 2.4283e-02 2.22e-03 2.65e+00 1.13e+00 \n", " 29 35 2.1297e-02 2.99e-03 6.41e-01 3.70e-02 \n", " 30 36 1.8168e-02 3.13e-03 2.49e+00 5.32e-01 \n", " 31 37 1.6327e-02 1.84e-03 1.17e+00 1.14e-01 \n", " 32 38 1.2073e-02 4.25e-03 3.89e+00 5.70e-01 \n", " 33 39 1.0950e-02 1.12e-03 8.19e-01 9.93e-03 \n", " 34 41 1.0078e-02 8.72e-04 9.37e-01 3.52e-01 \n", " 35 43 8.8749e-03 1.20e-03 1.44e+00 4.39e-01 \n", " 36 44 8.1434e-03 7.32e-04 6.94e-01 1.24e-01 \n", " 37 45 7.6002e-03 5.43e-04 6.55e-01 1.14e-01 \n", " 38 46 6.7295e-03 8.71e-04 1.11e+00 3.68e-01 \n", " 39 47 6.0282e-03 7.01e-04 8.86e-01 6.68e-02 \n", " 40 49 5.9418e-03 8.64e-05 3.91e-01 3.16e-01 \n", " 41 50 5.9309e-03 1.09e-05 3.17e-04 8.40e-03 \n", " 42 51 5.8442e-03 8.67e-05 5.17e-01 5.14e-01 \n", " 43 52 5.8137e-03 3.06e-05 4.88e-04 1.86e-03 \n", " 44 53 5.7326e-03 8.11e-05 4.87e-01 4.39e-01 \n", " 45 54 5.7105e-03 2.21e-05 3.90e-04 2.26e-03 \n", " 46 56 5.6634e-03 4.71e-05 2.42e-01 1.03e-01 \n", " 47 57 5.5879e-03 7.55e-05 4.60e-01 3.63e-01 \n", " 48 58 5.5729e-03 1.50e-05 2.96e-04 3.67e-03 \n", " 49 60 5.5323e-03 4.06e-05 2.31e-01 8.87e-02 \n", " 50 61 5.4661e-03 6.61e-05 4.50e-01 3.26e-01 \n", " 51 62 5.4539e-03 1.23e-05 2.47e-04 2.60e-03 \n", " 52 64 5.4188e-03 3.50e-05 2.19e-01 7.52e-02 \n", " 53 65 5.3605e-03 5.83e-05 4.29e-01 2.80e-01 \n", " 54 66 5.3515e-03 9.05e-06 1.98e-04 1.67e-03 \n", " 55 68 5.3213e-03 3.02e-05 2.07e-01 6.36e-02 \n", " 56 69 5.2699e-03 5.14e-05 4.05e-01 2.37e-01 \n", " 57 70 5.2439e-03 2.59e-05 1.49e-01 6.98e-02 \n", " 58 71 5.1961e-03 4.79e-05 4.27e-01 2.69e-01 \n", " 59 72 5.1876e-03 8.44e-06 1.72e-04 1.77e-03 \n", " 60 73 5.1607e-03 2.70e-05 7.33e-01 7.10e-01 \n", " 61 74 5.1006e-03 6.00e-05 4.37e-04 4.55e-04 \n", " 62 75 5.0657e-03 3.49e-05 6.62e-01 5.47e-01 \n", " 63 76 5.0300e-03 3.57e-05 3.18e-04 3.22e-04 \n", " 64 77 4.9940e-03 3.60e-05 5.98e-01 4.24e-01 \n", " 65 78 4.9725e-03 2.16e-05 2.34e-04 2.28e-04 \n", " 66 79 4.9382e-03 3.42e-05 5.34e-01 3.22e-01 \n", " 67 80 4.9257e-03 1.25e-05 1.71e-04 1.57e-04 \n", " 68 82 4.9070e-03 1.88e-05 2.34e-01 5.99e-02 \n", " 69 83 4.8957e-03 1.13e-05 1.39e-01 3.58e-02 \n", " 70 84 4.8789e-03 1.68e-05 2.22e-01 5.77e-02 \n", " 71 85 4.8704e-03 8.48e-06 1.10e-01 2.63e-02 \n", " 72 86 4.8547e-03 1.57e-05 2.22e-01 5.38e-02 \n", " 73 87 4.8485e-03 6.15e-06 8.32e-02 1.90e-02 \n", " 74 88 4.8348e-03 1.37e-05 2.03e-01 4.33e-02 \n", " 75 89 4.8301e-03 4.74e-06 6.79e-02 1.24e-02 \n", " 76 90 4.8188e-03 1.13e-05 1.75e-01 3.10e-02 \n", " 77 91 4.8154e-03 3.44e-06 5.23e-02 6.73e-03 \n", " 78 92 4.8072e-03 8.17e-06 1.31e-01 1.70e-02 \n", " 79 93 4.8050e-03 2.21e-06 3.53e-02 2.42e-03 \n", " 80 94 4.8008e-03 4.16e-06 6.84e-02 4.53e-03 \n", " 81 95 4.8001e-03 7.55e-07 1.24e-02 7.19e-04 \n", " 82 96 4.7997e-03 4.15e-07 6.87e-03 2.63e-04 \n", " 83 97 4.7994e-03 2.29e-07 3.79e-03 1.67e-05 \n", " 84 98 4.7994e-03 6.61e-09 1.09e-04 7.00e-06 \n", " 85 99 4.7994e-03 4.38e-09 7.23e-05 4.12e-07 \n", " 86 100 4.7994e-03 3.36e-10 5.51e-06 1.13e-07 \n", " 87 101 4.7994e-03 1.90e-11 3.41e-07 1.81e-09 \n", "`gtol` termination condition is satisfied.\n", "Function evaluations 101, initial cost 2.0177e+03, final cost 4.7994e-03, first-order optimality 1.81e-09.\n", "Fitting completed, with the following results\n", "------------------------------------------------------------------\n", "Keys Value Fixed? Lower bound Upper bound \n", "------------------------------------------------------------------\n", "Ri 9.00 Yes - - \n", "thick 2.00 Yes - - \n", "omega 0.00 Yes - - \n", "L0 2.00 Yes - - \n", "lambdaZ 1.00 Yes - - \n", "c1_0 13.18 No 1.00e-04 1.00e+02 \n", "c2_0 1.03e-48 No 0.00 1.00e+02 \n", "c3_0 4.50e-40 No 0.00 1.00e+02 \n", "c4_0 4.07e-39 No 0.00 1.00e+02 \n", "k1_1 30.00 No 0.10 30.00 \n", "k2_1 0.10 No 0.10 30.00 \n", "k3_1 0.13 No 0.00 0.33 \n", "------------------------------------------------------------------\n", "\n" ] } ], "source": [ "res = param_fitter.fit()" ] }, { "cell_type": "code", "execution_count": 16, "id": "db0bf90e-5fbf-4c30-9555-eeb1b6089185", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "------------------------------------------------------------------\n", "Keys Value Fixed? Lower bound Upper bound \n", "------------------------------------------------------------------\n", "Ri 9.00 Yes - - \n", "thick 2.00 Yes - - \n", "omega 0.00 Yes - - \n", "L0 2.00 Yes - - \n", "lambdaZ 1.00 Yes - - \n", "c1_0 13.18 No 1.00e-04 1.00e+02 \n", "c2_0 1.03e-48 No 0.00 1.00e+02 \n", "c3_0 4.50e-40 No 0.00 1.00e+02 \n", "c4_0 4.07e-39 No 0.00 1.00e+02 \n", "k1_1 30.00 No 0.10 30.00 \n", "k2_1 0.10 No 0.10 30.00 \n", "k3_1 0.13 No 0.00 0.33 \n", "------------------------------------------------------------------\n", "\n" ] } ], "source": [ "print(params)" ] }, { "cell_type": "code", "execution_count": 17, "id": "7dd89950-4fab-43d9-bd6d-7b2ae08c23b5", "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "plt.plot(applied_radius,sample.disp_controlled(applied_radius,params),label='Fitted') \n", "plt.plot(applied_radius,measured_pressure,'o',label='Observed')\n", "plt.ylabel('Internal pressure in kPa')\n", "plt.xlabel('Internal radius in mm')\n", "plt.legend()\n", "plt.show()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.9.16" } }, "nbformat": 4, "nbformat_minor": 5 }