.. DO NOT EDIT. .. THIS FILE WAS AUTOMATICALLY GENERATED BY SPHINX-GALLERY. .. TO MAKE CHANGES, EDIT THE SOURCE PYTHON FILE: .. "api/gallery/fluid_engineering/viscous/plot_01_couette_viscometer.py" .. LINE NUMBERS ARE GIVEN BELOW. .. only:: html .. note:: :class: sphx-glr-download-link-note :ref:`Go to the end ` to download the full example code or to run this example in your browser via JupyterLite. .. rst-class:: sphx-glr-example-title .. _sphx_glr_api_gallery_fluid_engineering_viscous_plot_01_couette_viscometer.py: Couette's rotating-cylinder viscometer (1890) ============================================= Maurice Couette, in his 1890 thesis at Paris, measured the viscosity of water in the narrow gap between a fixed inner cylinder and a rotating outer one, from the torque on the inner cylinder. Rotating the outer cylinder keeps the flow laminar to high speeds. For a narrow gap the flow is the plane shear flow between a fixed and a sliding plate, with a straight velocity profile and uniform stress :math:`\mu U/h` (:func:`~engineeringkit.fluid_engineering.couette_velocity`, :func:`~engineeringkit.fluid_engineering.couette_shear_stress`); the exact torque for any gap is :func:`~engineeringkit.fluid_engineering.couette_viscometer_torque`. This example reads a viscosity back from a torque and adds a pressure gradient to the plane flow. .. GENERATED FROM PYTHON SOURCE LINES 20-25 .. code-block:: Python import matplotlib.pyplot as plt import numpy as np from engineeringkit.fluid_engineering import couette_flow_rate, couette_shear_stress, couette_velocity, couette_viscometer_torque .. GENERATED FROM PYTHON SOURCE LINES 26-32 Reading a viscosity ------------------- A bob of radius 20 mm and wetted length 60 mm in a cup of radius 21 mm, the cup turning at 60 rpm, reads a torque of 4.2 mN m on a glycerine solution. The torque is linear in :math:`\mu`, so one reading gives it. .. GENERATED FROM PYTHON SOURCE LINES 32-39 .. code-block:: Python R1, R2, L, omega = 0.020, 0.021, 0.060, 2 * np.pi torque = 4.2e-3 mu = torque / couette_viscometer_torque(1.0, omega, R1, R2, L) narrow = couette_shear_stress(mu, omega * R2, R2 - R1) * 2 * np.pi * R1 * L * R1 print(f"viscosity {mu:.4f} Pa s; the narrow-gap estimate of the torque is {narrow * 1e3:.2f} mN m") .. rst-class:: sphx-glr-script-out .. code-block:: none viscosity 0.2061 Pa s; the narrow-gap estimate of the torque is 4.10 mN m .. GENERATED FROM PYTHON SOURCE LINES 40-46 Couette-Poiseuille flow ----------------------- Between flat plates 1 mm apart, the top one sliding at 1 m/s, a pressure gradient bends the line into a parabola. An adverse gradient beyond :math:`2\mu U/h^2` makes the fluid run backward near the fixed wall. .. GENERATED FROM PYTHON SOURCE LINES 46-65 .. code-block:: Python h, U = 1e-3, 1.0 y = np.linspace(0, h, 100) critical = 2 * mu * U / h**2 fig, ax = plt.subplots(figsize=(5, 4)) for k in [-1.0, 0.0, 1.0, 3.0]: ax.plot(couette_velocity(y, h, U, mu, k * critical), y * 1000, label=f"dp/dx = {k:g} × 2μU/h²") ax.axvline(0, color="k", lw=0.5) ax.set(xlabel="velocity [m/s]", ylabel="height above fixed plate [mm]", title="Couette flow") ax.legend(fontsize="small") fig.tight_layout() print(f"flow per metre width with no gradient: {couette_flow_rate(h, U, mu) * 1000:.2f} L/s") assert np.isclose(couette_viscometer_torque(mu, omega, R1, R2, L), torque) assert abs(narrow / torque - 1) < 0.05 assert np.isclose(couette_flow_rate(h, U, mu, critical * 3), U * h / 2 - h**3 * 3 * critical / (12 * mu)) assert couette_velocity(h / 10, h, U, mu, 3 * critical) < 0 plt.show() .. image-sg:: /api/gallery/fluid_engineering/viscous/images/sphx_glr_plot_01_couette_viscometer_001.png :alt: Couette flow :srcset: /api/gallery/fluid_engineering/viscous/images/sphx_glr_plot_01_couette_viscometer_001.png :class: sphx-glr-single-img .. rst-class:: sphx-glr-script-out .. code-block:: none flow per metre width with no gradient: 0.50 L/s .. rst-class:: sphx-glr-timing **Total running time of the script:** (0 minutes 0.082 seconds) .. _sphx_glr_download_api_gallery_fluid_engineering_viscous_plot_01_couette_viscometer.py: .. only:: html .. container:: sphx-glr-footer sphx-glr-footer-example .. container:: lite-badge .. image:: images/jupyterlite_badge_logo.svg :target: ../../../../lite/lab/index.html?path=api/gallery/fluid_engineering/viscous/plot_01_couette_viscometer.ipynb :alt: Launch JupyterLite :width: 150 px .. container:: sphx-glr-download sphx-glr-download-jupyter :download:`Download Jupyter notebook: plot_01_couette_viscometer.ipynb ` .. container:: sphx-glr-download sphx-glr-download-python :download:`Download Python source code: plot_01_couette_viscometer.py ` .. container:: sphx-glr-download sphx-glr-download-zip :download:`Download zipped: plot_01_couette_viscometer.zip ` .. only:: html .. rst-class:: sphx-glr-signature `Gallery generated by Sphinx-Gallery `_