Releases: petrobras/ross
ROSS 2.0.0
Version 2.0.0
The following enhancements and bug fixes were implemented for this release:
Enhancements
Model Reduction
Added comprehensive model reduction functionality to reduce the size of rotor models while preserving dynamic behavior. Two methods are available:
- Guyan reduction: Reduces model to specified degrees of freedom (DOFs)
- Pseudo-modal reduction: Uses modal transformation with specified number of modes
The ModelReduction class provides methods to reduce matrices and vectors, and revert reduced vectors back to the full model.
import ross as rs
compressor = rs.compressor_example()
dt = 1e-4
t = np.arange(0, 10, dt)
speed = 600
node = [29]
unb_mag = [0.003]
unb_phase = [0]
probe_nodes = [30]
# Unbalance force
F = compressor.unbalance_force_over_time(
node=node, magnitude=unb_mag, phase=unb_phase, omega=speed, t=t
)
response = compressor.run_time_response(
speed,
F.T,
t,
method="newmark",
model_reduction={
"method": "guyan",
"include_nodes": probe_nodes, # Make sure to include output nodes
"dof_mapping": ["x", "y"],
},
)Thermo-Hydro-Dynamic Tilting-Pad Bearings
Added two new bearing classes with full THD (Thermo-Hydro-Dynamic) analysis:
TiltingPad: Tilting-pad journal bearing with individual pad analysis, pivot mechanics, and thermal effects. Uses Reynolds equation and energy equation with finite difference methods, Lund's perturbation method for dynamic coefficients.
ThrustPad: Tilting-pad thrust bearing with similar THD capabilities for axial applications.
Both classes support multiple lubricant types, turbulence modeling, and provide accurate dynamic coefficients for stability analysis.
HolePatternSeal (Annular Seals)
Added HolePatternSeal class for modeling annular seals with holepattern. Uses bulk flow theory with:
- 1D compressible flow through annular clearance
- Perturbation analysis for dynamic coefficients
- Mass, stiffness, and damping matrices
- Leakage prediction
- Temperature-dependent viscosity using Sutherland's law
Previously named "honeycomb seal", this is a comprehensive implementation for pocket damper seals in turbomachinery.
LabyrinthSeal Enhancements
Significant improvements to the LabyrinthSeal class:
- Integration with ccp for gas properties
- Support for custom gas mixtures via composition dictionary
- Improved numerical methods for pressure distribution
- Enhanced velocity field calculations with swirl effects
- Up to 10x performance improvement through code optimization
MultiRotor Class
Added MultiRotor class for analyzing systems with multiple interconnected rotors, such as geared systems. Supports:
- Multiple rotors connected via coupling or gear elements
- Coordinated modal analysis across all rotors
- Campbell diagram for multi-rotor systems
- Frequency response analysis
- Proper handling of coupled dynamics
GearElement and Mesh Stiffness
New methodology for gear mesh coupling:
GearElementclass for connecting rotors via gear mesh- Mesh stiffness calculation based on gear geometry
- Contact ratio computation
- Support for multi-rotor analysis with gears
Flexible Crack Models
Added flexible crack model implementation (breathing and open crack models) for shaft crack analysis. Enables:
- Time-varying stiffness due to crack opening/closing
- Breathing crack behavior
- Open crack model for continuous stiffness reduction
Gravitational Force
Added gravitational_force() method to apply gravitational loads on the rotor system, useful for static deflection analysis and considering gravity in dynamic simulations.
Free-Free Analysis
Added free-free boundary condition option in run_freq_response() for analyzing rotors without supports, useful for:
- Component mode synthesis
- Free-free modal analysis
- Validation against experimental modal testing
Torsional Model Conversion
Added convert_6dof_to_torsional() function to convert a 6-DoF rotor model to a torsional-only model, enabling:
- Simplified torsional analysis
- Faster computation for torsional-dominated problems
- Separate lateral and torsional analysis
Orbit Animation
Added animation capability to orbit plots with animation=True parameter. Visualizes:
- Dynamic motion of the rotor orbit
- Time-evolution of displacements
- Easier identification of motion patterns
AMB Sensitivity Analysis
Added run_amb_sensitivity() method for computing Active Magnetic Bearing (AMB) sensitivities according to ISO 14839-3 standard. This enables:
- Open-loop, closed-loop, and sensitivity transfer functions calculation
- Compliance with API STANDARD 617 stability assessment requirements
- Chirp disturbance signal injection for frequency response analysis
- Multiple AMB analysis with configurable sensor positions
- Time-domain and frequency-domain visualization
The method returns a SensitivityResults object with attributes for magnitude, phase, and maximum sensitivities, plus plotting methods for both frequency-domain (plot()) and time-domain (plot_run_time_results()) visualization.
rotor_amb = rs.rotor_amb_example()
sensitivity_results = rotor_amb.run_amb_sensitivity(
speed=0,
t_max=5,
dt=1e-4,
disturbance_amplitude=10e-6,
disturbance_min_frequency=0.01,
disturbance_max_frequency=150,
amb_tags=["Magnetic Bearing 0", "Magnetic Bearing 1"],
sensors_theta=45,
)
# Access maximum sensitivity for a specific bearing
max_sens = sensitivity_results.max_abs_sensitivities["Magnetic Bearing 0"]["x"]
# Plot frequency response
fig = sensitivity_results.plot()ROSS GPT Integration
Integrated ROSS GPT assistant into documentation for interactive help and guidance on using the library.
Performance Improvements
Significant performance optimizations across multiple modules:
HolePatternSeal Optimization
Optimized HolePatternSeal for 1.6x faster computation through:
- Caching of repeated calculations
- Vectorized operations
- Reduced function call overhead
LabyrinthSeal Optimization
Optimized LabyrinthSeal for up to 10x faster performance:
- Smart multiprocessing thresholds
- Matrix creation optimization
- Reduced memory allocations
- Efficient array operations
THD Bearing Optimization
Optimized PlainJournal (THD Cylindrical) bearing calculations using:
- Numba JIT compilation for performance-critical sections
- Reduced redundant computations
- Improved numerical integration
General Optimizations
- Applied
lru_cacheto frequently-called methods across rotor assembly - Optimized matrix building operations
- Reduced computation time in modal and response analyses
- Pre-computed base matrices in
Rotor.__init__for faster repeated calculations
API Changes
Remove 4-DoF Model (Breaking Change)
Removed support for the 4-DoF model. All analyses now use the 6-DoF model only (lateral, axial, and torsional). This change:
- Simplifies the codebase
- Ensures consistent behavior across all elements
- Improves maintainability
- Affects:
ShaftElement,DiskElement,BearingElement,PointMass
Migration: Update any code that explicitly used n_dof=4 to work with the 6-DoF model.
Folder Restructuring
Renamed the fluid_flow folder to bearing for better organization and clarity. All bearing-related classes are now in the ross.bearing module.
Migration: Update imports from ross.fluid_flow to ross.bearing.
Build System Update
Migrated from setup.py to pyproject.toml for modern Python packaging standards. This improves:
- Dependency management
- Build reproducibility
- PEP 517 compliance
CylindricalBearing Updates
Enhanced CylindricalBearing class with:
- Improved parameter handling
- Better documentation with "when to use" guidance
- Support for frequency-dependent coefficients
- Oil flow properties calculation
Format Table Methods
Added format_table() methods to results classes for displaying:
- Modal analysis results in formatted tables
- Bearing coefficients comparison
- Critical speeds with detailed information
Check Units Decorator
Added @check_units decorator to run_* methods for automatic unit validation and conversion, improving:
- Type safety with pint quantities
- Clear error messages for unit mismatches
- Consistent unit handling across methods
Pressure Distribution Plot
Added pressure distribution plotting capability for THD bearings to visualize:
- 2D pressure field across bearing surface
- Pressure contours
- Location of maximum pressure
Documentation and Tutorials
Documentation Build Updates
Updated documentation dependencies to latest versions:
- Sphinx 7.2.6 → 8.2.3
- myst-nb 1.1.0 → 1.3.0
- Updated ReadTheDocs Python version to 3.13
Enhanced API documentation with comprehensive theoretical foundations for bearing and seal classes, explaining the numerical methods used.
Tutorial Enhancements
Expanded tutorials with new examples:
- Friswell book examples added to tutorial
- MultiRotor usage examples
- CouplingElement demonstration
- Torsional analysis guide
- GearElement examples
- New user guide examples (User Guide 30)
Bug Fixes
Fix integrate_system for Variable Speed
Fixed NameError in integrate_system() when using variable speed with frequency-dependent bearing coefficients. The bug caused failures in time response analysis with bearings that have speed-dependent properties.
Fix Lund Perturbation Method
Corrected formulation in Lund's perturbation method for calculating dynamic...