ross.ThrustPad
Contents
ross.ThrustPad#
- class ross.ThrustPad(n, pad_inner_radius, pad_outer_radius, pad_pivot_radius, pad_arc_length, angular_pivot_position, oil_supply_temperature, lubricant, n_pad, n_theta, n_radial, frequency, equilibrium_position_mode, radial_inclination_angle, circumferential_inclination_angle, initial_film_thickness, model_type='thermo_hydro_dynamic', fzs_load=None, print_result=False, print_progress=False, print_time=False, compare_coefficients=False, **kwargs)#
Thermo-Hydro-Dynamic (THD) Tilting Pad Thrust Bearing.
This class implements a comprehensive thermo-hydro-dynamic analysis for tilting pad thrust bearings, calculating pressure and temperature fields, equilibrium position, and dynamic coefficients (stiffness and damping).
The analysis solves the Reynolds equation for pressure distribution and the energy equation for temperature field, considering viscosity variations with temperature and turbulent effects.
- Parameters:
- nint
Node number for the bearing element.
- pad_inner_radiusfloat or Quantity
Inner radius of the pad. Default unit is meter.
- pad_outer_radiusfloat or Quantity
Outer radius of the pad. Default unit is meter.
- pad_pivot_radiusfloat or Quantity
Radius of the pivot point. Default unit is meter.
- pad_arc_lengthfloat or Quantity
Arc length of each pad. Default unit is degrees.
- angular_pivot_positionfloat or Quantity
Angular position of the pivot point. Default unit is degrees.
- oil_supply_temperaturefloat or Quantity
Oil supply temperature. Default unit is degrees Celsius.
- lubricantstr or dict
Lubricant specification. Can be: - String: ‘ISOVG32’, ‘ISOVG46’, ‘ISOVG68’ - Dictionary: Custom lubricant properties
- n_padint
Number of pads in the bearing.
- n_thetaint
Number of mesh elements in circumferential direction.
- n_radialint
Number of mesh elements in radial direction.
- frequencyarray_like or Quantity
Rotor rotating frequency(ies). Default unit is rad/s.
- equilibrium_position_modestr
Equilibrium position calculation mode: - ‘calculate’: Calculate film thickness and inclination angles - ‘imposed’: Use imposed film thickness, calculate inclination angles
- model_typestr, optional
Type of model to be used. Options: - ‘thermo_hydro_dynamic’: Thermo-Hydro-Dynamic model
- radial_inclination_anglefloat or Quantity
Initial radial inclination angle. Default unit is radians.
- circumferential_inclination_anglefloat or Quantity
Initial circumferential inclination angle. Default unit is radians.
- initial_film_thicknessfloat or Quantity
Initial film thickness at pivot point. Default unit is meters.
- fzs_loadfloat, optional
Axial load applied to the bearing. Default is None.
- print_resultbool, optional
Whether to print calculation results. Default is False.
- print_progressbool, optional
Whether to print convergence progress. Default is False.
- print_timebool, optional
Whether to print calculation time. Default is False.
- compare_coefficientsbool, optional
Whether to compare dynamic coefficients by each frequency in a table. Default is False.
- **kwargs
Additional keyword arguments passed to BearingElement.
- Attributes:
- pressure_field_dimensionalndarray
Dimensional pressure field [Pa]. Shape: (n_radial+2, n_theta+2)
- temperature_fieldndarray
Temperature field [°C]. Shape: (n_radial+2, n_theta+2)
- pivot_film_thicknessfloat
Oil film thickness at the pivot point [m]
- max_thicknessfloat
Maximum oil film thickness [m]
- min_thicknessfloat
Minimum oil film thickness [m]
- kzzndarray
Axial stiffness coefficient [N/m]. Shape: (n_frequencies,)
- czzndarray
Axial damping coefficient [N*s/m]. Shape: (n_frequencies,)
- viscosity_fieldndarray
Viscosity field [Pa*s]. Shape: (n_radial, n_theta)
- film_thickness_center_arrayndarray
Film thickness at cell centers. Shape: (n_radial, n_theta)
Notes
The class implements a finite volume method to solve the Reynolds equation and energy equation simultaneously. The solution includes:
Pressure Field: Solved using finite volume discretization of the Reynolds equation with appropriate boundary conditions.
Temperature Field: Solved using the energy equation considering viscous heating, convection, and conduction effects.
Viscosity Variation: Temperature-dependent viscosity using exponential interpolation: μ = a * exp(b * T)
Equilibrium Position: Found by minimizing residual forces and moments using scipy.optimize.fmin.
Dynamic Coefficients: Calculated using perturbation method for stiffness and damping coefficients.
The mesh discretization uses a structured grid with n_radial by n_theta control volumes. Boundary conditions include atmospheric pressure at pad edges and oil supply temperature at boundaries.
References
[1]BARBOSA, J.S. Analise de Modelos Termohidrodinamicos para Mancais de unidades geradoras Francis. 2016. Dissertacao de Mestrado. Universidade Federal de Uberlandia, Uberlandia.
[2]HEINRICHSON, N.; SANTOS, I. F.; FUERST, A., The Influence of Injection Pockets on the Performance of Tilting Pad Thrust Bearings Part I Theory. Journal of Tribology, 2007.
[3]NICOLETTI, R., Efeitos Termicos em Mancais Segmentados Hibridos Teoria e Experimento. 1999. Dissertacao de Mestrado. Universidade Estadual de Campinas, Campinas.
[4]LUND, J. W.; THOMSEN, K. K. A calculation method and data for the dynamic coefficients of oil lubricated journal bearings. Topics in fluid film bearing and rotor bearing system design and optimization, n. 1000118, 1978.
Examples
>>> from ross.bearings.thrust_pad import ThrustPad >>> from ross.units import Q_ >>> bearing = ThrustPad( ... n=1, ... pad_inner_radius=Q_(1150, "mm"), ... pad_outer_radius=Q_(1725, "mm"), ... pad_pivot_radius=Q_(1442.5, "mm"), ... pad_arc_length=Q_(26, "deg"), ... angular_pivot_position=Q_(15, "deg"), ... oil_supply_temperature=Q_(40, "degC"), ... lubricant="ISOVG68", ... n_pad=12, ... n_theta=10, ... n_radial=10, ... frequency=Q_([90], "RPM"), ... equilibrium_position_mode="calculate", ... fzs_load=13.320e6, ... radial_inclination_angle=Q_(-2.75e-04, "rad"), ... circumferential_inclination_angle=Q_(-1.70e-05, "rad"), ... initial_film_thickness=Q_(0.2, "mm") ... )
Methods
- C(frequency)#
Damping matrix for an instance of a bearing element.
This method returns the damping matrix for an instance of a bearing element.
- Parameters:
- frequencyfloat
The excitation frequency (rad/s).
- Returns:
- Cnp.ndarray
A 3x3 matrix of floats containing the cxx, cxy, cyx, cyy, and czz values (N*s/m).
Examples
>>> bearing = bearing_example() >>> bearing.C(0) array([[200., 0., 0.], [ 0., 150., 0.], [ 0., 0., 50.]])
- G()#
Gyroscopic matrix for an instance of a bearing element.
This method returns the mass matrix for an instance of a bearing element.
- Returns:
- Gnp.ndarray
A 3x3 matrix of floats.
Examples
>>> bearing = bearing_example() >>> bearing.G() array([[0., 0., 0.], [0., 0., 0.], [0., 0., 0.]])
- K(frequency)#
Stiffness matrix for an instance of a bearing element.
This method returns the stiffness matrix for an instance of a bearing element.
- Parameters:
- frequencyfloat
The excitation frequency (rad/s).
- Returns:
- Knp.ndarray
A 3x3 matrix of floats containing the kxx, kxy, kyx, kyy and kzz values (N/m).
Examples
>>> bearing = bearing_example() >>> bearing.K(0) array([[1000000., 0., 0.], [ 0., 800000., 0.], [ 0., 0., 100000.]])
- M(frequency)#
Mass matrix for an instance of a bearing element.
This method returns the mass matrix for an instance of a bearing element.
- Parameters:
- frequencyfloat
The excitation frequency (rad/s).
- Returns:
- Mnp.ndarray
Mass matrix (kg).
Examples
>>> bearing = bearing_example() >>> bearing.M(0) array([[0., 0., 0.], [0., 0., 0.], [0., 0., 0.]])
- __init__(n, pad_inner_radius, pad_outer_radius, pad_pivot_radius, pad_arc_length, angular_pivot_position, oil_supply_temperature, lubricant, n_pad, n_theta, n_radial, frequency, equilibrium_position_mode, radial_inclination_angle, circumferential_inclination_angle, initial_film_thickness, model_type='thermo_hydro_dynamic', fzs_load=None, print_result=False, print_progress=False, print_time=False, compare_coefficients=False, **kwargs)#
- coefficients()#
- dof_local_index()#
Get the local index for a element specific degree of freedom.
- Returns:
- local_index: namedtupple
A named tuple containing the local index.
Examples
>>> # Example using BearingElement >>> from ross.bearing_seal_element import bearing_example >>> bearing = bearing_example() >>> bearing.dof_local_index() LocalIndex(x_0=0, y_0=1, z_0=2)
- dof_mapping()#
Degrees of freedom mapping.
Returns a dictionary with a mapping between degree of freedom and its index.
- Returns:
- dof_mappingdict
A dictionary containing the degrees of freedom and their indexes.
Examples
The numbering of the degrees of freedom for each node.
Being the following their ordering for a node:
x_0 - horizontal translation y_0 - vertical translation z_0 - axial translation
>>> bearing = bearing_example() >>> bearing.dof_mapping() {'x_0': 0, 'y_0': 1, 'z_0': 2}
- format_table(frequency=None, coefficients=None, frequency_units='rad/s', stiffness_units='N/m', damping_units='N*s/m', mass_units='kg')#
Return frequency vs coefficients in table format.
- Parameters:
- frequencyarray, pint.Quantity, optional
Array with frequencies (rad/s). Default is 5 values from min to max frequency.
- coefficientslist, str, optional
List or str with the coefficients to include. Defaults is a list of stiffness and damping coefficients.
- frequency_unitsstr, optional
Frequency units. Default is rad/s.
- stiffness_unitsstr, optional
Stiffness units. Default is N/m.
- damping_unitsstr, optional
Damping units. Default is N*s/m.
- mass_unitsstr, optional
Mass units. Default is kg.
- Returns:
- tablePrettyTable object
Table object with bearing coefficients to be printed.
- classmethod from_table(n, file, sheet_name=0, tag=None, n_link=None, scale_factor=1, color='#355d7a')#
Instantiate a bearing using inputs from an Excel table.
A header with the names of the columns is required. These names should match the names expected by the routine (usually the names of the parameters, but also similar ones). The program will read every row bellow the header until they end or it reaches a NaN.
- Parameters:
- nint
The node in which the bearing will be located in the rotor.
- filestr
Path to the file containing the bearing parameters.
- sheet_nameint or str, optional
Position of the sheet in the file (starting from 0) or its name. If none is passed, it is assumed to be the first sheet in the file.
- tagstr, optional
A tag to name the element. Default is None.
- n_linkint, optional
Node to which the bearing will connect. If None the bearing is connected to ground. Default is None.
- scale_factorfloat, optional
The scale factor is used to scale the bearing drawing. Default is 1.
- colorstr, optional
A color to be used when the element is represented. Default is ‘#355d7a’ (Cardinal).
- Returns:
- bearingrs.BearingElement
A bearing object.
Examples
>>> import os >>> file_path = os.path.dirname(os.path.realpath(__file__)) + '/tests/data/bearing_seal_si.xls' >>> BearingElement.from_table(0, file_path, n_link=1) BearingElement(n=0, n_link=1, kxx=[1.379...
- get_class_name_prefix(index=None)#
Extract prefix of the class name preceding ‘Element’, insert spaces before uppercase letters, and append an index number at the end.
- Parameters:
- indexint, optional
The index number to append at the end of the resulting string. Default is None.
- Returns:
- prefixstr
The processed class name prefix.
Examples
>>> # Example using BearingElement >>> from ross.bearing_seal_element import bearing_example >>> bearing = bearing_example() >>> bearing.get_class_name_prefix() 'Bearing'
- classmethod get_subclasses()#
- classmethod load(file)#
- plot(coefficients=None, frequency_units='rad/s', stiffness_units='N/m', damping_units='N*s/m', mass_units='kg', fig=None, **kwargs)#
Plot coefficient vs frequency.
- Parameters:
- coefficientslist, str
List or str with the coefficients to plot.
- frequency_unitsstr, optional
Frequency units. Default is rad/s.
- stiffness_unitsstr, optional
Stiffness units. Default is N/m.
- damping_unitsstr, optional
Damping units. Default is N*s/m.
- mass_unitsstr, optional
Mass units. Default is kg.
- **kwargsoptional
Additional key word arguments can be passed to change the plot layout only (e.g. width=1000, height=800, …). *See Plotly Python Figure Reference for more information.
- Returns:
- figPlotly graph_objects.Figure()
The figure object with the plot.
- plot_results()#
Plot pressure and temperature field results.
Creates 3D surface plots and 2D contour plots for both pressure and temperature fields using Plotly.
- classmethod read_toml_data(data)#
Read and parse data stored in a .toml file.
The data passed to this method needs to be according to the format saved in the .toml file by the .save() method.
- Parameters:
- datadict
Dictionary obtained from toml.load().
- Returns:
- The element object.
Examples
>>> # Example using BearingElement >>> from tempfile import tempdir >>> from pathlib import Path >>> from ross.bearing_seal_element import bearing_example >>> from ross.bearing_seal_element import BearingElement >>> # create path for a temporary file >>> file = Path(tempdir) / 'bearing1.toml' >>> bearing1 = bearing_example() >>> bearing1.save(file) >>> bearing1_loaded = BearingElement.load(file) >>> bearing1 == bearing1_loaded True
- run_thermo_hydro_dynamic()#
Execute the complete thermo-hydrodynamic analysis for the tilting pad thrust bearing.
This method performs the main computational sequence for analyzing a tilting pad thrust bearing, including pressure and temperature field calculations, equilibrium position determination, and dynamic coefficient computation for each operating frequency.
The analysis includes: - Initialization of field arrays (pressure, temperature, film thickness) - Iterative solution of Reynolds and energy equations - Calculation of hydrodynamic forces and moments - Computation of stiffness and damping coefficients - Optional display of results
- Parameters:
- None
This method uses the bearing parameters defined during initialization.
- Attributes:
- pressure_field_dimensionalndarray
Dimensional pressure field [Pa]. Shape: (n_radial+2, n_theta+2).
- temperature_fieldndarray
Temperature field [°C]. Shape: (n_radial+2, n_theta+2).
- pivot_film_thicknessfloat
Oil film thickness at pivot point [m].
- max_thicknessfloat
Maximum oil film thickness [m].
- min_thicknessfloat
Minimum oil film thickness [m].
- kzzndarray
Axial stiffness coefficient [N/m]. Shape: (n_frequencies,).
- czzndarray
Axial damping coefficient [N*s/m]. Shape: (n_frequencies,).
- viscosity_fieldndarray
Viscosity field [Pa*s]. Shape: (n_radial, n_theta).
- Returns:
- None
Results are stored as instance attributes and optionally displayed.
Notes
The method processes each frequency in the frequency array sequentially. For each frequency, it: 1. Solves the pressure field using Reynolds equation with finite volume method 2. Solves the temperature field using energy equation considering viscous heating 3. Calculates dynamic coefficients using perturbation method 4. Stores results in instance attributes
The solution includes viscosity variation with temperature using exponential interpolation: μ = a * exp(b * T), where a and b are temperature-dependent coefficients calculated from lubricant properties.
Examples
>>> from ross.bearings.thrust_pad import thrust_pad_example >>> bearing = thrust_pad_example()
- save(file)#
Save the element in a .toml file.
This function will save the element to a .toml file. The file will have all the argument’s names and values that are needed to reinstantiate the element.
- Parameters:
- filestr, pathlib.Path
The name of the file the element will be saved in.
Examples
>>> # Example using DiskElement >>> from tempfile import tempdir >>> from pathlib import Path >>> from ross.disk_element import disk_example >>> # create path for a temporary file >>> file = Path(tempdir) / 'disk.toml' >>> disk = disk_example() >>> disk.save(file)
- show_results()#
Display thrust bearing calculation results in a formatted table.
This method prints the main results from the thrust bearing analysis using PrettyTable, including operating conditions, field results, load information, and dynamic coefficients.
- Parameters:
- None
This method uses the bearing parameters and results stored as instance attributes.
- Returns:
- None
Results are printed to the console in a formatted table.
Notes
The displayed results include: - Operating speed in RPM - Equilibrium position mode - Maximum and minimum pressure values - Maximum and minimum temperature values - Film thickness values (maximum, minimum, and pivot) - Axial load information - Dynamic coefficients (stiffness kzz and damping czz)
Examples
>>> from ross.bearings.thrust_pad import thrust_pad_example >>> bearing = thrust_pad_example() >>> bearing.show_results() ================================================ THRUST BEARING RESULTS ================================================ +------------------------+-------------+-------+ | Parameter | Value | Unit | +------------------------+-------------+-------+ | Operating Speed | 90.0 | RPM | | Equilibrium Mode | calculate | - | | Maximum Pressure | 6957021.42 | Pa | | Maximum Temperature | 70.4 | °C | | Maximum Film Thickness | 0.000207 | m | | Minimum Film Thickness | 0.000082 | m | | Pivot Film Thickness | 0.000131 | m | | Axial Load | 13320000.00 | N | | kzz (Stiffness) | 3.1763e+11 | N/m | | czz (Damping) | 1.0806e+10 | N*s/m | +------------------------+-------------+-------+ ================================================
- solve_fields()#
- summary()#
Present a summary for the element.
A pandas series with the element properties as variables.
- Returns:
- A pandas series.
Examples
>>> # Example using DiskElement >>> from ross.disk_element import disk_example >>> disk = disk_example() >>> disk.summary() n 0 n_l 0 n_r 0...
- classmethod table_to_toml(n, file)#
Convert bearing parameters to toml.
Convert a table with parameters of a bearing element to a dictionary ready to save to a toml file that can be later loaded by ross.
- Parameters:
- nint
The node in which the bearing will be located in the rotor.
- filestr
Path to the file containing the bearing parameters.
- Returns:
- datadict
A dict that is ready to save to toml and readable by ross.
Examples
>>> import os >>> file_path = os.path.dirname(os.path.realpath(__file__)) + '/tests/data/bearing_seal_si.xls' >>> BearingElement.table_to_toml(0, file_path) {'n': 0, 'kxx': array([...