Fluid-flow theory#
The FluidFlow code is responsible for providing Ross with simulations of thin thickness fluid in hydrodynamic bearings. It returns relevant information for the stability analysis of rotating machines, such as pressure field, fluid forces and dynamic coefficients. In this section, the main theoretical foundations of the modeling described in the code are synthesized and some examples are provided.
import ross
from ross.bearings.fluid_flow import fluid_flow_example2
import plotly.graph_objects as go
# Make sure the default renderer is set to 'notebook' for inline plots in Jupyter
import plotly.io as pio
pio.renderers.default = "notebook"
my_fluid_flow = fluid_flow_example2()
PROBLEM DESCRIPTION
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.
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.
Based on the eccentricity and attitude angle, the cosine law can be used to describe the position of the rotor surface \(R_{\theta}\) with respect to the center of the stator:
where $$\alpha =\begin{cases} \dfrac{3\pi}{2} - \theta + \beta \text{,} &\text{se } \dfrac{\pi}{2} + \beta \leq \theta < \dfrac{3\pi}{2} + \beta \ \
\left(\dfrac{3\pi}{2} - \theta + \beta\right) \text{,} & \text{se } \dfrac{3\pi}{2} + \beta \leq \theta < \dfrac{5\pi}{2} + \beta \end{cases}$$ .
from ross.bearings.fluid_flow_graphics import plot_eccentricity
fig = plot_eccentricity(my_fluid_flow, z=int(my_fluid_flow.nz / 2), scale_factor=0.5)
fig.show()
THEORETICAL MODELING
We start from the Navier Stokes and continuity equations:
where \(\rho\) is the specific mass of the fluid, \(\mathbf{v}\) is the velocity field, and \(\sigma=-p \mathbf{I} + \tau\) is the Cauchy’s tensor, in which \(p\) represents the pressure field, \(\tau\) is the stress tensor and \(\mathbf{I}\) the identity tensor. In order to consider the effects of curvature, the velocity field is represented in cylindrical coordinates with \(u\), \(v\) and \(w\) being the axial, radial and tangential speeds, respectively.
In this code, the following hypotheses are considered:
Newtonian fluid: \({\mathbf{\tau}} = {\mathbf{\mu}}(\nabla \mathbf{v})\)
Incompressible fluid: constant \(\rho\)
Permanent regime: \(\dfrac{\partial(*)}{\partial t}=0\)
Thus, the equations can be rewritten as
or in terms of each direction:
Direction \(z\) (similar to directions \(r\) and \(\theta\)):
Continuity:
Dimensionaless Analysis
Considering U and L as a typical speed and sizes with the relation
the equation that represents movement in the \(z\) direction, in its dimensionless form, is:
where the dimensionless quantities aare denoted with a circumflex accent.
The previous equation is rearranged to explicit the Reynolds number \(\left(\mathbf{Re}=\dfrac{\rho U L}{\mu}\right)\) by using the relation \(P = \dfrac{\mu UL}{F^2}\):
After some simplifications, based on lubrication theory, the equations along each direction are:
\(z\) direction:
\(r\) direction:
\(\theta\) direction:
Returning to the dimensional form and noting that the pressure does not change along the radial direction, the simplified Reynold’s equations are:
Speeds
It is now possible to integrate the above equations to find the velocities in the \(z\) (axial velocity \(u\)) and \(\theta\) (tangential velocity w) directions. This yields:
where \(c_1\), \(c_2\), \(c_3\) and \(c_4\) are constant in the integration in the variable \(r\).
By applying the boundary conditions
\(u(R_{o})=u(R_{\theta})=0,\)
\(w(R_{o})=0\) and \(w(R_{\theta}) = \omega R_{i},\)
the speeds are
where \(k = \frac{1}{R^2_{\theta}-R^2_{o}} \left[ R^2_{o} \left( \ln R_{o} - \frac{1}{2} \right) -R^2_{\theta} \left( \ln R_{\theta} - \frac{1}{2} \right) \right]\)
Pressure
Once the speeds are calculated, the continuity equation is integrated into the annular region of interest, from \(R_{\theta}\) to \(R_o\):
The integral is splitted into three integrals and the fundamental theorem of calculus and Leibnitz rule are applied. This yields:
\(\int^{R_{o}}_{R_{\theta}} \left( \frac{\partial{(rv)}}{\partial{r}} \right) \,dr = R_{o} v(R_{o}) - R_{\theta} v(R_{\theta})\)
\(\int^{R_{o}}_{R_{\theta}} \left( \frac{\partial{w}}{\partial{\theta}} \right) \, dr = \dfrac{\partial}{\partial \theta} \int^{R_{o}}_{R_{\theta}} w \,dr - \left[ w(R_{o}) \dfrac{\partial R_{o}}{\partial \theta} - w(R_{\theta}) \dfrac{\partial R_{\theta}}{\partial \theta} \right]\)
\(\int^{R_{o}}_{R_{\theta}} \left( \frac{\partial{(ru)}}{\partial{z}} \right) \, dr = \dfrac{\partial}{\partial z} \int^{R_{o}}_{R_{\theta}} (ru) \,dr - \left[ u(R_{o}) \dfrac{\partial R_{o}}{\partial z} - u(R_{\theta}) \dfrac{\partial R_i}{\partial z} \right]\)
Here, some considerations are taken into account:
The radial velocity is zero at \(v(R_{o})=0\). However, \(v(R_{\theta})\neq 0\) because the origin of the frame is not in the center of the rotor.
As seen earlier, \(w(R_o) = 0\) and \(w(R_{\theta}) = \omega R_{i}\). Due to the eccentricity, \(\dfrac{\partial R_{\theta}}{\partial \theta} \neq 0\).
By the boundary condition it is known that \(u(R_o)=u(R_{\theta})=0\).
Moreover, the speeds \(v(R_{\theta})\) and \(w(R_{\theta})\) must be calculated with kinematic relations. First, consider any \( A \) point pertaining to the rotor surface. Due to rotation, point \(A\) has a velocity
where \(e_{r}\) and \(e_{\theta}\) are unit vectors of the cylindrical coordinate system. This is shown in the figure below.
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}\):
where \(v(R_{\theta}) = \omega \dfrac{\partial R_{\theta}}{\partial \theta}\) and \(w(R_{\theta}) = \omega R_{\theta}\).
Substituting the values of \(v(R_{\theta})\) and \(w(R_{\theta})\) in the continuity equation, we obtain:
Performing this integral and replacing the \(u\) and \(w\) speeds yields:
where
This is a elliptic partial differential equation and its solution detemines the pressure field \(p\).
NUMERICAL SOLUTION
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.
The discretized equation is given by
with boundary conditions
Cavitation Condition
According to DOWNSON and TAYLOR (1979) [1], cavitation can be defined as the phenomenon that describes the discontinuity of a fluid due to the existence of gases or steam. This is a characteristic phenomenon in hydrodynamic bearings.
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.
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.
from ross.bearings.fluid_flow_graphics import (
plot_pressure_theta_cylindrical,
plot_pressure_z,
plot_pressure_theta,
plot_pressure_surface,
)
my_fluid_flow.calculate_pressure_matrix_numerical()
fig1 = plot_pressure_z(my_fluid_flow, theta=int(my_fluid_flow.ntheta / 2))
fig1.show()
fig2 = plot_pressure_theta(my_fluid_flow, z=int(my_fluid_flow.nz / 2))
fig2.show()
fig3 = plot_pressure_theta_cylindrical(my_fluid_flow, z=int(my_fluid_flow.nz / 2))
fig3.show()
fig4 = plot_pressure_surface(my_fluid_flow)
fig4.show()
FORCES
The pressure field developes forces that acts on the rotor surface. According to SAN ANDRES (2010) [4] these forces are given by:
As the pressure behavior is obtained numerically, the integrals above also need a numerical method to be solved. For this, the composite Simpson rule applied through the integrate.simpson method of the library SciPy was chosen, by VIRTANEN et al. (2020) [5].
It is also possible to obtain the forces \( f_x \) and \( f_y \) in the Cartesian coordinate system:
from ross.bearings.fluid_flow_coefficients import calculate_oil_film_force
radial_force, tangential_force, force_x, force_y = calculate_oil_film_force(
my_fluid_flow
)
print("N=", radial_force)
print("T=", tangential_force)
print("fx=", force_x)
print("fy=", force_y)
N= 252.92778538212667
T= 460.0571000325067
fx= 4.147154299971589e-06
fy= 524.9999999129781
EQUILIBRIUM POSITION
As indicated by SAN ANDRES (2010) [4], there is an equilibrium position in which the rotor center is stationary and the fluid film forces balance the external forces, in this case the rotor weight. This is expressed as:
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.
from ross.bearings.fluid_flow_coefficients import find_equilibrium_position
find_equilibrium_position(my_fluid_flow)
print("(xi,yi)=", "(", my_fluid_flow.xi, ",", my_fluid_flow.yi, ")")
radial_force, tangential_force, force_x, force_y = calculate_oil_film_force(
my_fluid_flow
)
print("fx, fy=", force_x, ",", force_y)
(xi,yi)= ( 2.2153894486259628e-05 , -1.2179652426727167e-05 )
fx, fy= 0.001845012021419734 , 524.99140388343
DYNAMIC COEFFICIENTS
According to SAN ANDRÉS (2010) [4], small disturbances around the equilibrium position allow us to express the fluid film forces as an expansion in Taylor series:
From this expansion, the author also defines the stiffness coefficients \((k_{ij})\), damping \((c_{ij})\) as:
The procedure to calculate these coeficients is divided in three steps. First, two perturbations along the \(x\) and \(y\) directions are considered in the calculation of the velocity of any point \(A\) in the rotor surface. This is expressed as
where \(v_{rot}\) is the velocity of the point due to the rotation and \(v_{p}\) is the velocity acquired by a disturbance along each direction. These perturbation are considered of the type
where \(e_x\) and \(e_y\) are unit vectors in cartesian coordinates.
Combination of the two last equations, in cylindrical coordinates, gives the following velocity along each axis:
The second step is to substitute the radial speeds (\(v(R_\theta)_x\) and \(v(R_\theta)_y\)), and tangential speeds(\(w(R_\theta)_x\) and \(w(R_\theta)_y\)) in the continuity equation, previously calculated for a fixed position. Thus, when the rotor is rotating and its center is being perturbed along horizontal and vertical directions, the new \(C_0\) coefficient of the continuity equation is
This new coefficient ensures that the fluid film forces are calculated for a rotor with a fixed rotation \(\omega\) and with a center moving along a horizontal or vertical direction with a fixed frequency \(\omega_p\).
The final step is to calculate the forces, along both the horizontal and vertical directions, for each perturbation. This sets the following four equations:
where the only unkowns are the eight coefficients. In matrix form, this equation is expressed as follows
The coefficients are obtained by using the Moore Penrose inverse and solving for each set of coefficients:
from ross.bearings.fluid_flow_coefficients import (
calculate_stiffness_and_damping_coefficients,
)
K, C = calculate_stiffness_and_damping_coefficients(my_fluid_flow)
kxx, kxy, kyx, kyy = K[0], K[1], K[2], K[3]
cxx, cxy, cyx, cyy = C[0], C[1], C[2], C[3]
print("Stiffness coefficients:")
print("kxx, kxy, kyx, kyy = ", kxx, kxy, kyx, kyy)
print("Damping coefficients:")
print("cxx, cxy, cyx, cyy", cxx, cxy, cyx, cyy)
Stiffness coefficients:
kxx, kxy, kyx, kyy = 15556250.693881571 15145278.189353602 -25805047.46042633 14187090.360595703
Damping coefficients:
cxx, cxy, cyx, cyy 249368.91019188316 -137131.94444472058 -25506.28091724217 315938.195445776
Based on MOTA (2020), where is the complete theory used by FluidFlow:#
Mota, J. A.; Estudo da teoria de lubrificação com parametrização diferenciada da geometria e aplicações em mancais hidrodinâmicos. Dissertação de Mestrado - Programa de Pós-Graduação em Informática, Universidade Federal do Rio de Janeiro, Rio de Janeiro, 2020
REFERENCES CITED IN THE TEXT
[1] DOWSON, D.; TAYLOR, C. Cavitation in bearings. Annual Review of Fluid Mechanics, [S.l.], v. 11, n. 1, p. 35–65, 1979.
[2] ISHIDA, Y.; YAMAMOTO, T. Flow-Induced Vibrations. In: Linear and nonlinear rotordynamics. Weinheim: Wiley Online Library, 2012. p. 235–261.
[3] SANTOS, E. S. ** Carregamento dinamico de mancais radiais com cavitaçãodo filme de óleo**. Dissertação de Mestrado — Centro Tecnológico, Universidade Federal de Santa Catarina, Santa Catarina, 1995.
[4] SAN ANDRES, L. Experimental Identification of Bearing Force Coefficients, Notes 1 5 Acesso em 08/02/2020, http://oaktrust.library.tamu.edu/handle/1969.1/93199.
[5] VIRTANEN, P. et al. SciPy 1.0: fundamental algorithms for scientific computing inpython. Nature Methods, [S.l.], v. 17, p. 261–272, 2020.