diff --git a/docs/_static/img/img_example_ff_theory2.png b/docs/_static/img/img_example_ff_theory2.png new file mode 100644 index 000000000..01c81634f Binary files /dev/null and b/docs/_static/img/img_example_ff_theory2.png differ diff --git a/docs/_static/img/img_example_ff_theory3.png b/docs/_static/img/img_example_ff_theory3.png new file mode 100644 index 000000000..ed3a7d66a Binary files /dev/null and b/docs/_static/img/img_example_ff_theory3.png differ diff --git a/docs/_static/img/img_example_ff_theory4.png b/docs/_static/img/img_example_ff_theory4.png new file mode 100644 index 000000000..e7990bccc Binary files /dev/null and b/docs/_static/img/img_example_ff_theory4.png differ diff --git a/docs/_static/img/img_example_ff_theory5.png b/docs/_static/img/img_example_ff_theory5.png new file mode 100644 index 000000000..96d90fca8 Binary files /dev/null and b/docs/_static/img/img_example_ff_theory5.png differ diff --git a/docs/_static/img/img_examplo_ff_eliptical.png b/docs/_static/img/img_examplo_ff_eliptical.png new file mode 100644 index 000000000..643fc78a4 Binary files /dev/null and b/docs/_static/img/img_examplo_ff_eliptical.png differ diff --git a/docs/_static/img/img_examplo_ff_theory.png b/docs/_static/img/img_examplo_ff_theory.png new file mode 100644 index 000000000..82679d14a Binary files /dev/null and b/docs/_static/img/img_examplo_ff_theory.png differ diff --git a/docs/_static/img/img_examplo_ff_wear.png b/docs/_static/img/img_examplo_ff_wear.png new file mode 100644 index 000000000..58d9c21ba Binary files /dev/null and b/docs/_static/img/img_examplo_ff_wear.png differ diff --git a/docs/user_guide/example_25.ipynb b/docs/user_guide/example_25.ipynb index bb7af4bc2..47df75a1f 100644 --- a/docs/user_guide/example_25.ipynb +++ b/docs/user_guide/example_25.ipynb @@ -5,7 +5,7 @@ "id": "73c0b6bc-eca1-4cb1-a36b-a90cd4c29520", "metadata": {}, "source": [ - "# Example 23 - Overhung Rotor\n", + "# Example 25 - Coaxial rotor\n", "\n", "This example is based on Example 6.8.1 from {cite}`friswell2010dynamics`.\n", "\n", diff --git a/docs/user_guide/example_26.ipynb b/docs/user_guide/example_26.ipynb index 96f9219f4..c13543079 100644 --- a/docs/user_guide/example_26.ipynb +++ b/docs/user_guide/example_26.ipynb @@ -14,7 +14,7 @@ "id": "eb6566cf-32ab-4537-9a64-8877fa3ea2c0", "metadata": {}, "source": [ - "This example is based on Example 6.3.1.a page 253 from [Friswell, 2010]." + "This example is based on Example 6.3.1.a page 253 from {cite}`friswell2010dynamics`." ] }, { @@ -151344,9 +151344,9 @@ ], "metadata": { "kernelspec": { - "display_name": "Python [conda env:py312] *", + "display_name": "rs", "language": "python", - "name": "conda-env-py312-py" + "name": "python3" }, "language_info": { "codemirror_mode": { @@ -151358,7 +151358,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.4" + "version": "3.9.16" } }, "nbformat": 4, diff --git a/docs/user_guide/example_27.ipynb b/docs/user_guide/example_27.ipynb index 5ab96d045..aec86da2d 100644 --- a/docs/user_guide/example_27.ipynb +++ b/docs/user_guide/example_27.ipynb @@ -14,7 +14,7 @@ "id": "eb6566cf-32ab-4537-9a64-8877fa3ea2c0", "metadata": {}, "source": [ - "This example is based on Example 6.3.1.b page 253 from [Friswell, 2010]." + "This example is based on Example 6.3.1.b page 253 from {cite}`friswell2010dynamics`." ] }, { diff --git a/docs/user_guide/example_28.ipynb b/docs/user_guide/example_28.ipynb new file mode 100644 index 000000000..099655d65 --- /dev/null +++ b/docs/user_guide/example_28.ipynb @@ -0,0 +1,631 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "51c04513-6d2a-4452-ae4e-c3708ed97bc3", + "metadata": {}, + "source": [ + "# Example 28 - Rigid rotor on isotropic bearings" + ] + }, + { + "cell_type": "markdown", + "id": "6fe89697", + "metadata": {}, + "source": [ + "This example is based on Example 6.2.1 page 239 from {cite}`friswell2010dynamics`. \n", + "\n", + "A uniform rigid rotor is shown in figure 3.8. The rotor has length of 0.5 m and a diameter of 0.2 m, and it is made from steel with a density of 7810 kg/m³. The rotor is supported at the ends by bearings. The horizontal and vertical stiffness are 1 MN/m at bearing 1 and 1.3 MN/m at bearing 2. The damping values in the horizontal and vertical supports are 10 Ns/m at bearing 1 and 13 Ns/m at bearing 2. This rotor is the same as that described in Example 3.5.3(b). Find the response to a mass eccentricity of 0.1 mm and plot the Campbell diagram." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "65c76928-dcff-4c75-9dba-c4f58e564203", + "metadata": {}, + "outputs": [], + "source": [ + "import ross as rs\n", + "import plotly.graph_objects as go\n", + "import plotly.io as pio\n", + "import numpy as np\n", + "\n", + "Q_ = rs.Q_\n", + "pio.renderers.default = \"notebook\"" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "3a5d86a1", + "metadata": {}, + "outputs": [], + "source": [ + "steel = rs.Material(\"steel\", E=211e9, G_s=81.2e9, rho=7810)" + ] + }, + { + "cell_type": "markdown", + "id": "a8541470", + "metadata": {}, + "source": [ + "### Creating rotor" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "1e6d3966", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + " \n", + " " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "N = 6\n", + "L = 0.5/N\n", + "idl = 0\n", + "odl = 0.2\n", + "\n", + "shaft = [rs.ShaftElement(L=L, idl=idl, odl=odl, material=steel) for i in range(N)]\n", + "bearings = [\n", + " rs.BearingElement(n=0, kxx=1e6, kyy=1.5e6, cxx=20, cyy=30),\n", + " rs.BearingElement(n=6, kxx=1.3e6, kyy=1.8e6, cxx=26, cyy=36),\n", + "]\n", + "disks = []\n", + "\n", + "rotor = rs.Rotor(shaft_elements=shaft, disk_elements=disks, bearing_elements=bearings)\n", + "rotor.plot_rotor()" + ] + }, + { + "cell_type": "markdown", + "id": "189f5f75", + "metadata": {}, + "source": [ + "### Campbell Diagram" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "a3079397", + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Wn [Hz] at 0 rpm = [21.5 25.93 35.84 42.82]\n" + ] + } + ], + "source": [ + "fig = rotor.run_campbell(speed_range=Q_(list(range(0, 3500, 50)), \"RPM\"), frequencies = 4)\n", + "fig.plot().show()\n", + "print(\"Wn [Hz] at 0 rpm =\", np.round((rotor.run_modal(speed=0 * np.pi / 30, num_modes = 8).wn)/(2*np.pi), 2))" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "95aa4b76", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Rotor mass = 122.68 kg\n", + "Unbalance mass = 0.12 kg\n" + ] + } + ], + "source": [ + "#Calculating equivalent unbalance mass\n", + "e = 0.1e-3\n", + "shaft_radius = 0.1\n", + "m_unb = (rotor.m * e) / shaft_radius\n", + "\n", + "print(f\"Rotor mass = {round(rotor.m, 2)} kg\")\n", + "print(f\"Unbalance mass = {round(m_unb, 2)} kg\")" + ] + }, + { + "cell_type": "markdown", + "id": "5596c3d6", + "metadata": {}, + "source": [ + "### Bode Plot" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "b81d5553", + "metadata": {}, + "outputs": [], + "source": [ + "n1 = 3 # position of the unbalance mass in the center of the rotor\n", + "m1 = m_unb * (odl/2)\n", + "p1 = 0 # unbalance mass phase\n", + "speed = Q_(np.linspace(0, 3500, 60),\"RPM\")\n", + "results_case1 = rotor.run_unbalance_response([n1], [m1], [p1], speed)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "6a59fbb5", + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\users\\vinic\\onedrive\\desktop\\digital_twin\\github\\ross_atual\\ross\\ross\\results.py:280: RuntimeWarning:\n", + "\n", + "invalid value encountered in scalar divide\n", + "\n" + ] + }, + { + "data": { + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "probe1 = (3, 0)\n", + "results_case1.plot(probe=[probe1], probe_units=\"degrees\",frequency_units=\"RPM\", amplitude_units=\"µm pkpk\", phase_units = \"degrees\")" + ] + }, + { + "cell_type": "markdown", + "id": "9266ec94", + "metadata": {}, + "source": [ + "### Mode Shapes" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "1271ce71", + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "speed = 3500 * np.pi / 30\n", + "modal = rotor.run_modal(speed)\n", + "\n", + "for i in np.arange(0, 3.1, 1):\n", + " modal.plot_mode_3d(mode=int(i), frequency_units=\"RPM\").show()" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "6fdfc9c4", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "for mode in range(4):\n", + " display(modal.plot_orbit(mode, nodes=[0, 3, 6]))" + ] + } + ], + "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.9.16" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/user_guide/example_29.ipynb b/docs/user_guide/example_29.ipynb new file mode 100644 index 000000000..b27f987d1 --- /dev/null +++ b/docs/user_guide/example_29.ipynb @@ -0,0 +1,787 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "51c04513-6d2a-4452-ae4e-c3708ed97bc3", + "metadata": {}, + "source": [ + "# Example 29 - Rigid rotor on anisotropic bearings" + ] + }, + { + "cell_type": "markdown", + "id": "21498ba9", + "metadata": {}, + "source": [ + "This example is based on Example 6.2.3 page 247 from {cite}`friswell2010dynamics`. \n", + "\n", + "A uniform rigid rotor is shown in figure 3.7. The rotor has length of 0.5 m and a diameter of 0.2 m, and it is made from steel with a density of 7810 kg/m³. The rotor is supported at the ends by bearings. The horizontal and vertical stiffnesses are 1 MN/m and 1.5 MN/m, respectively, at bearing 1 and 1.3 MN/m and 1.8 MN/m, respectively, at bearing 2. The damping values in the horizontal and vertical supports at both bearings are propostional to the stiffnesses and are 20 Ns/m and 30 Ns/m\n", + "at bearing 1 and 26 Ns/m and 36 Ns/mat bearing 2. This rotor is essentially the same as that described in Example 3.6.1. Determine the unbalance response over the speed range 0 to 4000 rev/min." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "65c76928-dcff-4c75-9dba-c4f58e564203", + "metadata": {}, + "outputs": [], + "source": [ + "import ross as rs\n", + "import plotly.graph_objects as go\n", + "import plotly.io as pio\n", + "import numpy as np\n", + "\n", + "Q_ = rs.Q_\n", + "pio.renderers.default = \"notebook\"" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "3a5d86a1", + "metadata": {}, + "outputs": [], + "source": [ + "steel = rs.Material(\"steel\", E=211e9, G_s=81.2e9, rho=7810)" + ] + }, + { + "cell_type": "markdown", + "id": "642b244b", + "metadata": {}, + "source": [ + "### Creating rotor" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "1e6d3966", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + " \n", + " " + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "N = 6\n", + "L = 0.5/N\n", + "idl = 0\n", + "odl = 0.2\n", + "\n", + "shaft = [rs.ShaftElement(L=L, idl=idl, odl=odl, material=steel) for i in range(N)]\n", + "bearings = [\n", + " rs.BearingElement(n=0, kxx=1e6, kyy=1.5e6, cxx=20, cyy=30),\n", + " rs.BearingElement(n=6, kxx=1.3e6, kyy=1.8e6, cxx=26, cyy=36),\n", + "]\n", + "disks = []\n", + "\n", + "rotor = rs.Rotor(shaft_elements=shaft, disk_elements=disks, bearing_elements=bearings)\n", + "rotor.plot_rotor()" + ] + }, + { + "cell_type": "markdown", + "id": "17469def", + "metadata": {}, + "source": [ + "### Campbell Diagram" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "a3079397", + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Wn [Hz] at 0 rpm = [21.5 25.93 35.84 42.82]\n" + ] + } + ], + "source": [ + "fig = rotor.run_campbell(speed_range=Q_(list(range(0, 3500, 50)), \"RPM\"), frequencies = 4).plot()\n", + "fig.show()\n", + "print(\"Wn [Hz] at 0 rpm =\", np.round((rotor.run_modal(speed=0 * np.pi / 30, num_modes = 8).wn)/(2*np.pi), 2))" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "8c87781b", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Rotor mass = 122.68 kg\n", + "Unbalance mass = 0.12 kg\n" + ] + } + ], + "source": [ + "#Calculating equivalent unbalance mass\n", + "e = 0.1e-3\n", + "shaft_radius = 0.1\n", + "m_unb = (rotor.m * e) / shaft_radius\n", + "\n", + "print(f\"Rotor mass = {round(rotor.m, 2)} kg\")\n", + "print(f\"Unbalance mass = {round(m_unb, 2)} kg\")" + ] + }, + { + "cell_type": "markdown", + "id": "adea2f26", + "metadata": {}, + "source": [ + "### Bode Plot" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "792ff1ff", + "metadata": {}, + "outputs": [], + "source": [ + "n1 = 3 # position of the unbalance mass in the center of the rotor\n", + "m1 = m_unb * (odl/2)\n", + "p1 = 0 # unbalance mass phase\n", + "speed = Q_(np.linspace(0, 4000, 60),\"RPM\")\n", + "results_case2 = rotor.run_unbalance_response([n1], [m1], [p1], speed)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "1883ff96", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\users\\vinic\\onedrive\\desktop\\digital_twin\\github\\ross_atual\\ross\\ross\\results.py:280: RuntimeWarning:\n", + "\n", + "invalid value encountered in scalar divide\n", + "\n" + ] + }, + { + "data": { + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "#Response in x\n", + "probe_x = (0, 0)\n", + "results_case2.plot(probe=[probe_x], probe_units=\"degrees\",frequency_units=\"RPM\", amplitude_units=\"µm pkpk\", phase_units = \"degrees\")" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "95a11089", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# response in y\n", + "probe_y = (0, 90)\n", + "results_case2.plot(probe=[probe_y], probe_units=\"degrees\",frequency_units=\"RPM\", amplitude_units=\"µm pkpk\", phase_units = \"degrees\")" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "2106b297", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Max response\n", + "probe_major = (0, \"major\")\n", + "results_case2.plot(probe=[probe_major], probe_units=\"degrees\",frequency_units=\"RPM\", amplitude_units=\"µm pkpk\", phase_units = \"degrees\")" + ] + }, + { + "cell_type": "markdown", + "id": "3065fb6d", + "metadata": {}, + "source": [ + "### Mode Shapes" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "d92c8a62", + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "speed = 4000 * np.pi / 30\n", + "modal = rotor.run_modal(speed)\n", + "\n", + "for i in np.arange(0, 3.1, 1):\n", + " modal.plot_mode_3d(mode=int(i), frequency_units=\"RPM\").show()" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "05472e8b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "for mode in range(4):\n", + " display(modal.plot_orbit(mode, nodes=[0, 3, 6]))" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "id": "ec2b99a3", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "c:\\users\\vinic\\onedrive\\desktop\\digital_twin\\github\\ross_atual\\ross\\ross\\results.py:280: RuntimeWarning:\n", + "\n", + "invalid value encountered in scalar divide\n", + "\n" + ] + }, + { + "data": { + "text/html": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "n = [0,1,2,3,4,5] # position of the unbalance mass along the rotor\n", + "m1 = m_unb * (odl/2)\n", + "m = [m1/6, m1/6, m1/6, m1/6, m1/6, m1/6]\n", + "p = [0, 0, 0, 0, 0, 0] # unbalance mass phase\n", + "speed = Q_(np.linspace(0, 4000, 60),\"RPM\")\n", + "results_case1 = rotor.run_unbalance_response(n, m, p, speed)\n", + "\n", + "probe1 = (0, \"major\")\n", + "results_case1.plot(probe=[probe1], probe_units=\"degrees\",frequency_units=\"RPM\", amplitude_units=\"µm pkpk\", phase_units = \"degrees\")" + ] + } + ], + "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.11.9" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/user_guide/fluid_flow_elliptical_bearing.ipynb b/docs/user_guide/fluid_flow_elliptical_bearing.ipynb index 6e0a11b01..b9e853206 100644 --- a/docs/user_guide/fluid_flow_elliptical_bearing.ipynb +++ b/docs/user_guide/fluid_flow_elliptical_bearing.ipynb @@ -15,7 +15,14 @@ "\n", "The elliptical bearing or \"lemon bearing\", as it is also known, is a variation of the cylindrical bearing with axial groove and reduced clearance in one direction.\n", "\n", - "\n", + "![alt text](../_static/img/img_examplo_ff_eliptical.png)\n", + "\n", + "\n", + "\n", "\n", "For the inclusion of this new geometry, adaptations to the stator radius are necessary, as it will no longer be constant in $\\theta$. As seen in the figure above, the new stator is composed of the arc $C_{1}$, with center in $O_{1}$, joined to the arc $C_{2}$, centered in $O_{2}$, both with radius $R_{o}$. In this new configuration, the centers are at a distance $\\epsilon$ from the origin, called ellipticity.\n", "\n", @@ -23,16 +30,18 @@ "\n", "$$R_o^* = \\sqrt{R_o ^2 - \\epsilon^2 \\sin^2{\\alpha}} + \\epsilon \\cos{\\alpha}$$\n", "\n", - "where $\\alpha =\\begin{cases} \n", + "where \n", + "$$\\alpha =\\begin{cases} \n", "\\pi/2 + \\theta \\text{,} \n", - "&\\mbox{if} \\quad \\theta \\in 1^{\\circ} \\text{quadrant} \\\\ \n", + "&\\text{if} \\quad \\theta \\in 1^{\\circ} \\text{quadrant} \\\\\n", "3\\pi/2 + \\theta \\text{,} \n", - "&\\mbox{if} \\quad \\theta \\in 2^{\\circ} \\text{quadrant} \\\\\n", + "&\\text{if} \\quad \\theta \\in 2^{\\circ} \\text{quadrant} \\\\\n", "\\theta - \\pi/2 \\text{,} \n", - "&\\mbox{if} \\quad \\theta \\in 3^{\\circ} \\text{quadrant} \\\\\n", + "&\\text{if} \\quad \\theta \\in 3^{\\circ} \\text{quadrant} \\\\\n", "5\\pi/2 -\\theta \\text{,} \n", - "&\\mbox{if} \\quad \\theta \\in 4^{\\circ} \\text{quadrant}\n", - "\\end{cases}$.\n", + "&\\text{if} \\quad \\theta \\in 4^{\\circ} \\text{quadrant}\n", + "\\end{cases}$$\n", + ".\n", "\n", "Another important parameter to be defined is the $ m $ preload which, in this text, will be established as:\n", "\n", @@ -247,7 +256,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.16" + "version": "3.11.9" } }, "nbformat": 4, diff --git a/docs/user_guide/fluid_flow_theory.ipynb b/docs/user_guide/fluid_flow_theory.ipynb index 5c667aba0..d2a9d8e20 100644 --- a/docs/user_guide/fluid_flow_theory.ipynb +++ b/docs/user_guide/fluid_flow_theory.ipynb @@ -41,7 +41,12 @@ "\n", "Fluid flow occurs in the annular space between the shaft and the bearing, both of $ L $ length. These structures are called rotor and stator, respectively. The stator is fixed with radius $R_{o}$ and the rotor, with radius $R_{i} $, is a rigid body with rotation speed $\\omega$, as shown in the figure below.\n", "\n", - "\n", + "![alt text](../_static/img/img_examplo_ff_theory.png)\n", + "\n", "\n", "Due to the rotation of the rotor, a pressure field is set in the lubricating oil film, developing fluid forces that act on the rotor surface. For a constant speed of rotation, these forces displace the rotor to a location inside the stator called the _equilibrium position_. In this position, the stator and rotor are eccentric, with a distance between centers $e$ and an attitude angle $\\beta$, formed between the axis connecting both centers and the vertical axis.\n", "\n", @@ -49,12 +54,14 @@ "\n", "$$ R_{\\theta} = \\sqrt{R_i ^2 - e^2 \\sin^2{\\alpha}} + e \\cos{\\alpha},$$\n", "\n", - "where $\\alpha =\\begin{cases} \n", + "where \n", + "$$\\alpha =\\begin{cases} \n", "\\dfrac{3\\pi}{2} - \\theta + \\beta \\text{,} \n", - "&\\mbox{se } \\dfrac{\\pi}{2} + \\beta \\leq \\theta < \\dfrac{3\\pi}{2} + \\beta \\\\ \\\\\n", + "&\\text{se } \\dfrac{\\pi}{2} + \\beta \\leq \\theta < \\dfrac{3\\pi}{2} + \\beta \\\\ \\\\\n", "- \\left(\\dfrac{3\\pi}{2} - \\theta + \\beta\\right) \\text{,} \n", - "& \\mbox{se } \\dfrac{3\\pi}{2} + \\beta \\leq \\theta < \\dfrac{5\\pi}{2} + \\beta \n", - "\\end{cases}$." + "& \\text{se } \\dfrac{3\\pi}{2} + \\beta \\leq \\theta < \\dfrac{5\\pi}{2} + \\beta \n", + "\\end{cases}$$\n", + "." ] }, { @@ -370,8 +377,12 @@ "\n", "where $e_{r}$ and $e_{\\theta}$ are unit vectors of the cylindrical coordinate system. This is shown in the figure below.\n", "\n", - "\n", - "\n", + "![alt text](../_static/img/img_example_ff_theory2.png)\n", + "\n", " \n", "Now, consider the position vector $a=R_{\\theta} e_r$, from the stator center to any point in the rotor surface. Its time derivative, relative to an inertial frame, is the total speed $v_{tot}$:\n", "\n", @@ -407,50 +418,45 @@ " \n", "where \n", "\n", - "$$\\mathbf{C_0} = \n", + "$$\\mathbf{C_0} =\n", " - \\omega R_{i} R_{\\theta}\n", - " \\left[\n", + " [\n", " \\ln{\\left(\\frac{R_{o}}{R_{\\theta}}\\right)}\n", - " \\left(\n", - " 1 +\n", - " \\frac{R_{\\theta}^2}{(R_{o}^2-R_{\\theta}^2)}\n", - " \\right)\n", + " (1 + \\frac{R_{\\theta}^2}{(R_{o}^2-R_{\\theta}^2)})\n", " -\\dfrac{1}{2}\n", - " \\right]\\label{eq:C_0}\\text{,}$$\n", - " \n", + " ] $$ ,\n", + "\n", + " \n", "$$\\mathbf{C_1} =\n", " \\dfrac{1}{4\\mu}\n", - " \\left\\{\n", - " \\left[\n", - " R_{o}^2 \\ln{R_{o}}\n", - " - R_{\\theta}^2 \\ln{R_{\\theta}}\n", + " {[R_{o}^2 \\ln{R_{o}} \n", + " - R_{\\theta}^2 \\ln{R_{\\theta}} \n", " + (R_{o}^2-R_{\\theta}^2)(k-1)\n", - " \\right]\n", + " ]\n", " - 2R_{o}^2\n", - " \\left[\n", - " \\left(\n", - " \\ln{R_{o}}+k-\\dfrac{1}{2}\n", - " \\right)\n", - " \\ln{\\left(\\frac{R_{o}}{R_{\\theta}}\\right)}\n", - " \\right]\n", - " \\right\\}\\label{eq:C_1}\\text{,}$$\n", - "\n", + " [\n", + " (\\ln{R_{o}}+k-\\dfrac{1}{2})\n", + " \\ln{(\\frac{R_{o}}{R_{\\theta}})}\n", + " ]\n", + " }\n", + "$$ ,\n", + " \n", "$$\\mathbf{C_2} =\n", " - \\dfrac{R_{\\theta}^2}{8\\mu}\n", - " \\left\\{\n", - " \\left[\n", + " {\n", + " [\n", " R_{o}^2-R_{\\theta}^2\n", " -\\dfrac{(R_{o}^4-R_{\\theta}^4)}{2R_{\\theta}^2}\n", - " \\right]\n", + " ]\n", " +\n", - " \\left(\n", + " (\n", " \\dfrac{R_{o}^2-R_{\\theta}^2}{R_{\\theta}^2 \\ln{\\left(\\dfrac{R_{o}}{R_{\\theta}}\\right)}}\n", - " \\right)\n", - " \\left[\n", - " R_{o}^2\\ln{\\left(\\dfrac{R_{o}}{R_{\\theta}}\\right)}\n", + " )\n", + " [\n", + " R_{o}^2\\ln{(\\dfrac{R_{o}}{R_{\\theta}})}\n", " -\\dfrac{(R_{o}^2-R_{\\theta}^2)}{2}\n", - " \\right]\n", - " \\right\\}\\label{eq:C_2}\\text{.}$$\n", + " ]\n", + " }$$\n", "\n", "This is a elliptic partial differential equation and its solution detemines the pressure field $p$." ] @@ -463,7 +469,12 @@ "\n", "The partial differential equation is solved using finite centered differences method. It is applied to a regular rectangular mesh with $𝑁_{z}$ nodes in the axial direction and $𝑁_{\\theta}$ nodes in the tangential direction, as shown in the figure below.\n", "\n", - "\n", + "![alt text](../_static/img/img_example_ff_theory3.png)\n", + "\n", "\n", "The discretized equation is given by\n", "\n", @@ -481,7 +492,12 @@ "\n", "It is important to note that this change in pressure behavior due to cavitation does not necessarily start at the point of least thickness in the annular space. Several studies seek to establish the appropriate boundary conditions to describe the beginning of cavitation in the fluid. ISHIDA and YAMAMOTO (2012) [2] indicate that the condition of Gumbel is widely used because of its simplicity. Using the argument that lubricant evaporation and axial air flow from both ends can occur, the pressure in the region $\\pi < \\theta < 2\\pi$ is considered to be almost zero (that is, the atmospheric pressure ). $p = 0 $ is then defined across the divergent region.\n", "\n", - "\n", + "![alt text](../_static/img/img_example_ff_theory4.png)\n", + "\n", "\n", "In addition, according to SANTOS (1995) [3], although it violates mass conservation, this condition presents acceptable errors in the global parameters of the bearing. For these reasons, the present study adopts the Gumbel boundary condition to describe the phenomenon of cavitation." ] @@ -722,7 +738,12 @@ " \n", "Knowing the external load $ W $, it is possible to reach the equilibrium position using an iterative method. Starting at an initial position, the residues between the forces at the current position and external forces are calculated. If the residue is greater than a defined tolerance, the position of the rotor is varied systematically, inside the fourth quadrant, until the desired tolerance is reached. In other words, a local minimum of the forces function is reached. The Python tool *optimize.least\\_squares* was used for this purpose. The method is shown in the image below.\n", "\n", - "" + "![alt text](../_static/img/img_example_ff_theory5.png)\n", + "" ] }, { @@ -939,7 +960,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.16" + "version": "3.11.9" } }, "nbformat": 4, diff --git a/docs/user_guide/fluid_flow_wear_bearing.ipynb b/docs/user_guide/fluid_flow_wear_bearing.ipynb index 368e21006..bcd12b882 100644 --- a/docs/user_guide/fluid_flow_wear_bearing.ipynb +++ b/docs/user_guide/fluid_flow_wear_bearing.ipynb @@ -15,21 +15,30 @@ "\n", "Although lubrication reduces the friction between the metal surfaces of the bearing, these structures usually suffer wear after a long operating period or else due to a certain number of repetitions of the starting cycles.\n", "\n", - "\n", + "![alt text](../_static/img/img_examplo_ff_wear.png)\n", + "\n", + "\n", + "\n", "\n", "The wear geometry that will be used in the FluidFlow has been adapted from the version presented by MACHADO; CAVALCA (2015) [1]. To include wear in the geometry, it is necessary to make some adaptations to the stator radius. Considering that the fault starts at the angular position $\\theta = \\theta_{s}$ and ends at $\\theta = \\theta_{f}$, the stator description from the origin is defined as:\n", "\n", "$$R_o^* = R_o + d_{\\theta}$$\n", "\n", - "where $d_{\\theta} =\\begin{cases} \n", + "where \n", + "$$d_{\\theta} =\\begin{cases} \n", " 0 \\text{,} \n", - " &\\mbox{if} \n", + " &\\text{if} \n", " \\quad 0 \\leq \\theta \\leq \\theta_s\\text{,} \\quad\n", " \\theta_f \\leq \\theta \\leq 2\\pi \\\\ \n", " d_0 - F \\left(1 + \\cos{\\left(\\theta - \\pi/2\\right)} \\right) \\text{,} \n", - " &\\mbox{if} \n", + " &\\text{if} \n", " \\quad \\theta_s < \\theta < \\theta_f\n", - "\\end{cases}$.\n", + "\\end{cases}$$\n", + ".\n", "\n", "In $\\theta_{s}$ and $\\theta_{f}$, the wear depth is zero, so the location of the edges can be defined as follows:\n", "\n", diff --git a/docs/user_guide/user_guide.md b/docs/user_guide/user_guide.md index 12943dd09..25b76f85b 100644 --- a/docs/user_guide/user_guide.md +++ b/docs/user_guide/user_guide.md @@ -40,6 +40,8 @@ example_24 example_25 example_26 example_27 +example_28 +example_29 fluid_flow_elliptical_bearing fluid_flow_short_bearing fluid_flow_theory