ross.FluidFilmBearing#

class ross.FluidFilmBearing(n, speed=None, frequency=None, journal_diameter=None, radial_clearance=None, pad_thickness=None, pivot_angle=None, pad_arc=None, pad_axial_length=None, preload=None, offset=None, lubricant=None, oil_supply_temperature=None, oil_flow_v=None, weight=0, fxs_load=0, fys_load=0, bearing_type='fixed_geometry', operating_type='regular_flooded', thermal_type='full', temp_j_type='averaged_film_temperature', deform_type=None, equilibrium_type='match_load', sump_type='supply_temperature', pivot_type='user_specified_stiffness', total_ex_film=40, total_ey_film=30, total_ez_film=20, total_ey_pad=20, track_arc=None, track_axial_length=None, track_depth=None, taper_depth_le=None, taper_arc_le=None, taper_depth_te=None, taper_arc_te=None, pocket_arc=0, pocket_axial_length=0, pad_E=206800000000.0, pad_poisson=0.3, pad_conductivity=50.0, pad_expansion=1.17e-05, pad_density=7830.0, journal_expansion=1.17e-05, shell_expansion=1.17e-05, pad_convection=735.9030318060636, edges_convection=73.59030318060636, environment_temperature=294.261, environment_convection=735.9030318060636, sump_convect_area=0, house_diameter=0, pivot_diameter=0, pivot_stiffness=0, crush_fit=0, shell_id=0, shell_od=0, ambient_pressure_1=0, ambient_pressure_2=0, cavitation_pressure=0, oil_supply_pressure=0, reference_temperature=297.0388888888889, journal_temperature=None, probes=None, excitation_ratio=1, initial_position=(0.15, -0.2), starvation_number=1, hot_oil_lambda=0.8, relax_pressure=0.5, relax_temperature=1, relax_deformation=1, relax_pivot=1, re_laminar=500, re_turbulent=1000, num_processes=None, **kwargs)#

Journal bearing solved by the fluid-film TEHD engine.

Shared base for the hydrodynamic journal bearing classes. The bearing is described by per-pad arrays – pivot position, arc, preload, offset and the optional pocket / taper fields – plus operating conditions and model-selection flags; any fixed-geometry or tilting-pad journal bearing the engine supports can be expressed directly through this class. The configuration subclasses only translate friendlier constructor surfaces into these arrays.

For every entry of speed the engine solves the journal equilibrium (film pressure, temperature and deformation as selected by the model flags) and reduces the result to the synchronous 2x2 stiffness and damping matrices that make up the element’s coefficient table. Solved pressure / temperature / film-thickness fields are kept on a results object; every plot_* / show_* call on the bearing is delegated to it.

save() deliberately downgrades the element to a plain ross.BearingElement holding the solved coefficient table: loading the file restores the rotordynamic behavior without re-running the solver (the solver inputs are not round-tripped).

Parameters:
nint

Node in which the bearing will be located.

speedarray_like, pint.Quantity

Rotor speeds, rad/s. One solver case runs per entry.

frequencyarray_like, pint.Quantity, optional

Excitation (whirl) frequencies, rad/s. When given, one solver case runs per (speed, frequency) pair with the whirl ratio frequency / speed, and the element carries a 2-D coefficient table of shape (len(speed), len(frequency)) interpolated on both axes (excitation_ratio is ignored). Requires nonzero speeds. Default is None (1-D table over the speed axis, whirl ratio excitation_ratio).

journal_diameterfloat, pint.Quantity

Journal diameter, m.

radial_clearancefloat, pint.Quantity

Radial (bearing-set) clearance, m.

pad_thicknessfloat, pint.Quantity

Radial pad thickness, m.

pivot_anglearray_like, pint.Quantity

Per-pad pivot (or arc-center) angular position, rad.

pad_arcarray_like, pint.Quantity

Per-pad arc length, rad.

pad_axial_lengtharray_like, pint.Quantity

Per-pad axial length, m.

preloadarray_like

Per-pad preload factor (0 for a cylindrical land).

offsetarray_like

Per-pad pivot offset fraction (0.5 = centered).

lubricantstr or dict

Key of ross.bearings.lubricants.lubricants_dict or a dict with the same field names (SI).

oil_supply_temperaturefloat, pint.Quantity

Lubricant supply temperature, K.

oil_flow_vfloat, pint.Quantity

Supplied lubricant volumetric flow, m**3/s.

weightfloat, pint.Quantity, optional

Gravity load on the bearing (applied in -y), N. Default is 0.

fxs_load, fys_loadfloat, pint.Quantity, optional

Additional static load in x and y, N. Default is 0. The total static load must be nonzero for the load-matched equilibrium.

bearing_typestr, optional

One of "fixed_geometry" (default), "conventional_tilting_pad", "inlet_groove_tilting_pad", "spray_bar_tilting_pad", "pressure_dam".

operating_typestr, optional

One of "regular_flooded" (default), "axial_flow", "high_ambient_pressure", "starved_condition_even", "starved_condition_uneven", "oil_ring_lubricated".

thermal_typestr or None, optional

"full" (default): energy equation over film and pad with conduction; "adiabatic": 2-D film energy equation; None: isoviscous.

temp_j_typestr, optional

Journal surface temperature treatment: "averaged_film_temperature" (default), "no_heat_flux_into_journal" or "insulated_shaft_surface".

deform_typestr or None, optional

Pad/pivot deformation model: None (default, rigid), "pad_mechanical", "pad_mechanical_thermal", "pad_mechanical_thermal_shaft_shell_thermal", "pad_mechanical_thermal_shaft_shell_thermal_pivot_mechanical" or "pad_pivot_mechanical".

equilibrium_typestr, optional

"match_load" (default) solves the journal position for the applied load; "match_eccentricity" holds initial_position.

sump_typestr, optional

Groove-mixing supply temperature source: "supply_temperature" (default) or "sump_temperature".

pivot_typestr, optional

Pivot flexibility model (used by the pivot deformation types): "ball_in_socket", "button", "rocker_back" or "user_specified_stiffness" (default).

total_ex_film, total_ey_film, total_ez_film, total_ey_padint, optional

Element counts of the film (circumferential / radial / axial) and pad (radial) meshes; all must be even. Default is 40 / 30 / 20 / 20.

track_arc, taper_arc_le, taper_arc_tearray_like, pint.Quantity, optional

Per-pad pocket (or dam track) arc and leading/trailing taper arcs, rad. Default is 0.

track_axial_lengtharray_like, pint.Quantity, optional

Per-pad pocket/track axial length, m. Default is 0.

track_depth, taper_depth_le, taper_depth_tearray_like, pint.Quantity, optional

Per-pad pocket/track depth and taper depths, m. Default is 0.

pocket_arcfloat, pint.Quantity, optional

Leading-edge-groove pocket arc, rad. Default is 0.

pocket_axial_lengthfloat, pint.Quantity, optional

Leading-edge-groove pocket axial length, m. Default is 0.

pad_Efloat, pint.Quantity, optional

Pad Young’s modulus, Pa. Default is 206.8e9 (steel).

pad_poissonfloat, optional

Pad Poisson ratio. Default is 0.3.

pad_conductivityfloat, pint.Quantity, optional

Pad thermal conductivity, W/(m*K). Default is 50.

pad_expansion, journal_expansion, shell_expansionfloat, optional

Thermal expansion coefficients, 1/K. Default is 1.17e-5 (steel).

pad_densityfloat, optional

Pad material density, kg/m**3. Default is 7830.

pad_convectionfloat or array_like, optional

Pad back-face convection coefficient, W/(m**2*K). A scalar is applied to every pad. Default is 735.903.

edges_convectionfloat, optional

Pad edge convection coefficient, W/(m**2*K). Default is 73.59.

environment_temperaturefloat, pint.Quantity, optional

Environment temperature, K. Default is 294.261.

environment_convectionfloat, optional

Sump-to-environment convection coefficient, W/(m**2*K). Default is 735.903.

sump_convect_areafloat, optional

Sump convection area, m**2 (oil-ring-lubricated operation). Default is 0.

house_diameter, pivot_diameterfloat, pint.Quantity, optional

Housing / pivot contact diameters for the Hertzian pivot models, m. Default is 0.

pivot_stiffnessfloat, pint.Quantity, optional

Pivot stiffness for "user_specified_stiffness", N/m. Default is 0.

crush_fitfloat, pint.Quantity, optional

Shell crush (shrink) fit, m. Default is 0.

shell_id, shell_odfloat, pint.Quantity, optional

Shell inner/outer diameter for the shell thermal growth model, m. Default is 0.

ambient_pressure_1, ambient_pressure_2float, pint.Quantity, optional

Ambient (edge) pressures, Pa. Default is 0.

cavitation_pressurefloat, pint.Quantity, optional

Cavitation pressure, Pa. Default is 0.

oil_supply_pressurefloat, pint.Quantity, optional

Lubricant supply pressure, Pa. Default is 0.

reference_temperaturefloat, pint.Quantity, optional

Reference (assembly) temperature for thermal growth, K. Default is 297.039.

journal_temperaturefloat, pint.Quantity, optional

Initial journal temperature estimate, K. Default is the supply temperature.

probeslist of tuple, optional

Temperature probes as (pad_number, theta_location, r_location): 1-based pad number, circumferential position as % of the pad arc from the leading edge, and radial distance from the pad surface (m, accepts pint). Default is no probes.

excitation_ratiofloat, optional

Whirl-to-rotation frequency ratio for the dynamic reduction. Default is 1 (synchronous).

initial_positiontuple of float, optional

Initial journal position guess (x, y) as fractions of the radial clearance (held fixed for "match_eccentricity"). Default is (0.15, -0.2).

starvation_numberint, optional

Starvation model parameter. Default is 1.

hot_oil_lambdafloat, optional

Hot-oil carryover factor for the groove mixing model. Default is 0.8.

relax_pressure, relax_temperature, relax_deformation, relax_pivotfloat, optional

Under-relaxation factors of the solver iterations. Default is 0.5 / 1 / 1 / 1.

re_laminar, re_turbulentfloat, optional

Reynolds numbers bounding the laminar-turbulent transition. Default is 500 / 1000.

num_processesint, optional

Solve the speed cases in num_processes worker processes instead of serially. Default is None (serial).

tagstr, optional

A tag to name the element.

Returns:
A FluidFilmBearing object.

Examples

>>> from ross.bearings.fluid_film_bearing import fluid_film_bearing_example
>>> bearing = fluid_film_bearing_example()
>>> bearing.n_pads
2
>>> float(bearing.kxx[0]) > 1e8
True

Methods

C(frequency, speed=None)#

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 (whirl) frequency (rad/s).

speedfloat, optional

The rotor speed (rad/s). Default is the excitation frequency (synchronous evaluation).

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, speed=None)#

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 (whirl) frequency (rad/s).

speedfloat, optional

The rotor speed (rad/s). Default is the excitation frequency (synchronous evaluation).

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, speed=None)#

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 (whirl) frequency (rad/s).

speedfloat, optional

The rotor speed (rad/s). Default is the excitation frequency (synchronous evaluation).

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, speed=None, frequency=None, journal_diameter=None, radial_clearance=None, pad_thickness=None, pivot_angle=None, pad_arc=None, pad_axial_length=None, preload=None, offset=None, lubricant=None, oil_supply_temperature=None, oil_flow_v=None, weight=0, fxs_load=0, fys_load=0, bearing_type='fixed_geometry', operating_type='regular_flooded', thermal_type='full', temp_j_type='averaged_film_temperature', deform_type=None, equilibrium_type='match_load', sump_type='supply_temperature', pivot_type='user_specified_stiffness', total_ex_film=40, total_ey_film=30, total_ez_film=20, total_ey_pad=20, track_arc=None, track_axial_length=None, track_depth=None, taper_depth_le=None, taper_arc_le=None, taper_depth_te=None, taper_arc_te=None, pocket_arc=0, pocket_axial_length=0, pad_E=206800000000.0, pad_poisson=0.3, pad_conductivity=50.0, pad_expansion=1.17e-05, pad_density=7830.0, journal_expansion=1.17e-05, shell_expansion=1.17e-05, pad_convection=735.9030318060636, edges_convection=73.59030318060636, environment_temperature=294.261, environment_convection=735.9030318060636, sump_convect_area=0, house_diameter=0, pivot_diameter=0, pivot_stiffness=0, crush_fit=0, shell_id=0, shell_od=0, ambient_pressure_1=0, ambient_pressure_2=0, cavitation_pressure=0, oil_supply_pressure=0, reference_temperature=297.0388888888889, journal_temperature=None, probes=None, excitation_ratio=1, initial_position=(0.15, -0.2), starvation_number=1, hot_oil_lambda=0.8, relax_pressure=0.5, relax_temperature=1, relax_deformation=1, relax_pivot=1, re_laminar=500, re_turbulent=1000, num_processes=None, **kwargs)#
coefficients(speed, frequency=None)#

Return the stiffness and damping matrices at a rotor speed.

Coefficients are interpolated on the element’s table; for a 2-D table the excitation frequency selects the whirl axis.

Parameters:
speedfloat, pint.Quantity

Rotor speed, rad/s.

frequencyfloat, pint.Quantity, optional

Excitation (whirl) frequency, rad/s. Default is the rotor speed (synchronous evaluation).

Returns:
stiffnesstuple of float

(kxx, kxy, kyx, kyy), N/m.

dampingtuple of float

(cxx, cxy, cyx, cyy), N*s/m.

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(speed=None, frequency=None, coefficients=None, frequency_units='rad/s', stiffness_units='N/m', damping_units='N*s/m', mass_units='kg')#

Return speed / frequency vs coefficients in table format.

The table lists the coefficients along the axes the element is tabulated on: the rotor speed, the excitation (whirl) frequency, or every (speed, frequency) pair for 2-D tables.

Parameters:
speedarray, pint.Quantity, optional

Array with rotor speeds (rad/s). Default is 5 values from min to max speed.

frequencyarray, pint.Quantity, optional

Array with excitation (whirl) 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

Units for the speed and frequency columns. 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__)) + '/data/bearing_seal_si.xls'
>>> BearingElement.from_table(0, file_path, n_link=1)
BearingElement(n=0, n_link=1,
 kxx=[13798100.0, ...
classmethod get_base_class()#

Get the direct subclass of Element in the inheritance chain.

Returns the first class in the inheritance hierarchy that directly inherits from Element. This is useful for identifying the base element type when working with subclasses or indirect subclasses.

Returns:
base_classtype

The direct subclass of Element in the inheritance chain.

get_class_name_prefix()#

Extract prefix of the class name preceding ‘Element’, insert spaces before uppercase letters.

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()#

Get all subclasses of the Element class.

Returns:
subclasseslist

A list containing all subclasses of the Element class.

classmethod load(file)#

Load an element from a .toml or .json file.

Classes whose save() writes a plain coefficient table (see save_coefficient_table()) read it back as the class named in the file, so PlainJournal.load or SqueezeFilmDamper.load returns the saved BearingElement table instead of re-running the solver. Other subclasses keep building themselves, as before.

Parameters:
filestr, pathlib.Path

The name of the file the element will be loaded from.

Returns:
The element object.

Examples

>>> from tempfile import tempdir
>>> from pathlib import Path
>>> bearing = bearing_example()
>>> file = Path(tempdir) / 'bearing_load.toml'
>>> bearing.save(file)
>>> BearingElement.load(file) == bearing
True
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 speed or frequency.

Coefficients are plotted against the axis they are tabulated on: the rotor speed axis, the excitation (whirl) frequency axis, or, for 2-D tables, one curve per rotor speed against the frequency axis.

Parameters:
coefficientslist, str

List or str with the coefficients to plot.

frequency_unitsstr, optional

Units for the speed or frequency axis. 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.

classmethod read_toml_data(data)#

Read and parse data stored in a .toml or .json file.

Overrides the base Element method to pass extra saved keys (e.g. pre-computed coefficients) as kwargs to the constructor. This allows subclasses to skip expensive computation when coefficients are already available from a saved file.

Parameters:
datadict

Dictionary obtained from toml.load() or json.load().

Returns:
The element object.
save(file)#

Save the element as a plain coefficient-table BearingElement.

The downgrade is deliberate (and applies to every subclass): the saved file holds the solved dynamic-coefficient table, so loading it restores the rotordynamic behavior instantly instead of re-running the solver. Re-create the object from its constructor to change the bearing model.

Parameters:
filestr or pathlib.Path

File to write (created or updated).

save_coefficient_table(file)#

Save the element as a plain coefficient-table BearingElement.

Solver-based bearings (FluidFilmBearing and its configuration classes, ThrustPad, SqueezeFilmDamper) use this as their save(): the file holds the solved dynamic-coefficient table under a BearingElement_<tag> section, so loading it restores the rotordynamic behavior instantly instead of re-running the solver. Re-create the object from its constructor to change the bearing model.

Parameters:
filestr or pathlib.Path

File to write (created or updated).

set_tag(index, check_tag=True)#

Set a tag to the given element.

Parameters:
indexint

The index of the element to standardize the tag.

check_tagbool, optional

Whether to check if the tag is already set.

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__)) + '/data/bearing_seal_si.xls'
>>> BearingElement.table_to_toml(0, file_path)
{'n': 0, 'kxx': [13798100.0, ...