Skip to content

Conversation

@jguarato
Copy link
Collaborator

@jguarato jguarato commented Jul 15, 2025

This PR involves an implementation developed by @tches-co as described in Issue #1139. Some adjustments were made to integrate these modifications into the ROSS library. A new class was added called GearElementTVMS to handle gears whose stiffness varies with rotor speed.

The implementation of gear meshing stiffness is based on the methodologies proposed by:

  • Sainsot et al. (2004): Focused on bidimensional analytical formulas considering gear body contributions.
  • Ma et al. (2014): Developed time-varying mesh stiffness calculations for cracked spur gears.

The gear tooth is modeled as a cantilever beam, and meshing stiffness is calculated at each contact position using the energy method. This approach enables precise modeling of the gear’s dynamic behavior.

class GearElementTVMS(GearElement):
  """A gear element with Time-Varying Mesh Stiffness (TVMS) modeling.

  This class defines a gear element used in rotor dynamics simulations, incorporating
  time-varying mesh stiffness to represent gear interactions more accurately. It uses
  geometric, material, and mass properties to model the gear.

  Parameters
  ----------
  n : int
      Node in which the gear will be inserted.
  material : ross.Material
      Gear's construction material.
  width : float, pint.Quantity
      Tooth width (m).
  bore_diameter : float, pint.Quantity
      Inner diameter, diameter of the shaft on which the gear is mounted (m).
  module : float, pint.Quantity
      Gear module (m).
  n_teeth : int
      Number of teeth.
  pr_angle : float, pint.Quantity, optional
      The normal pressure angle (rad).
      Default is 20 deg (converted to rad).
  helix_angle: float, pint.Quantity, optional
      Helix angle for helical gears (rad).
      Default is 0, representing spur gear.
  addendum_coeff : float, optional
      Addendum coefficient.
      Default is 1.
  tip_clearance_coeff : float, optional
      Gear's clearance coefficient.
      Default is 0.25.
  tag : str, optional
      A tag to name the element.
      Default is None.
  scale_factor : float or str, optional
      The scale factor is used to scale the gear drawing.
      For gears it is also possible to provide 'mass' as the scale factor.
      In this case the code will calculate scale factors for each gear based
      on the gear with the higher mass. Notice that in this case you have to
      create all gears with the scale_factor='mass'.
      Default is 1.
  color : str, optional
      A color to be used when the element is represented.
      Default is 'Goldenrod'.

  Examples
  --------
  >>> from ross.materials import steel
  >>> gear = GearElementTVMS(
  ...    n=0,
  ...    material=steel,
  ...    width=0.02,
  ...    bore_diameter=0.035 * 2,
  ...    module=0.002,
  ...    n_teeth=62,
  ...    pr_angle=0.349066
  ... )
  >>> gear.base_radius # doctest : +ELLIPSIS
  0.058260...
  """

…ss of them, not the inverse of each stiffness.
@codecov-commenter
Copy link

⚠️ Please install the 'codecov app svg image' to ensure uploads and comments are reliably processed by Codecov.

Codecov Report

❌ Patch coverage is 87.87879% with 52 lines in your changes missing coverage. Please review.
✅ Project coverage is 83.25%. Comparing base (fa3ab3e) to head (4c066f5).
⚠️ Report is 15 commits behind head on main.

Files with missing lines Patch % Lines
ross/gear_element.py 88.33% 28 Missing ⚠️
ross/multi_rotor.py 82.08% 24 Missing ⚠️
❗ Your organization needs to install the Codecov GitHub app to enable full functionality.
Additional details and impacted files

Impacted file tree graph

@@            Coverage Diff             @@
##             main    #1184      +/-   ##
==========================================
- Coverage   83.27%   83.25%   -0.03%     
==========================================
  Files          42       42              
  Lines       11894    12122     +228     
==========================================
+ Hits         9905    10092     +187     
- Misses       1989     2030      +41     
Files with missing lines Coverage Δ
ross/disk_element.py 100.00% <100.00%> (ø)
ross/rotor_assembly.py 93.20% <100.00%> (+0.03%) ⬆️
ross/units.py 90.41% <ø> (ø)
ross/multi_rotor.py 83.62% <82.08%> (-6.01%) ⬇️
ross/gear_element.py 89.33% <88.33%> (-2.67%) ⬇️

Continue to review full report in Codecov by Sentry.

Legend - Click here to learn more
Δ = absolute <relative> (impact), ø = not affected, ? = missing data
Powered by Codecov. Last update 6dba5d1...4c066f5. Read the comment docs.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@jguarato jguarato marked this pull request as ready for review October 17, 2025 18:00
@jguarato
Copy link
Collaborator Author

jguarato commented Oct 20, 2025

Results were compared with the work of Ma et al. (2014) and good agreement was obtained (see Fig. 4):

Gear pair 1
gear1

Gear pair 2
gear2

@raphaeltimbo raphaeltimbo merged commit bc15f55 into petrobras:main Oct 23, 2025
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants