-
Notifications
You must be signed in to change notification settings - Fork 105
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Convert CoAxialRotor class to MultiRotor #755
Comments
Some ideas:
|
Agreed. I think we can go in this direction. Regarding the rotor speed, if we take multiple rotor objects, for the analysis we could have an API like: import ross as rs
rotor1 = rs.Rotor(...)
rotor2 = rs.Rotor(...)
multirotor = rs.MultiRotor(rotor1, rotor2, links)
speed1 = 100
speed2 = 100
modal = multirotor.run_modal(speed=(speed1, speed2)) Here we would have to take in consideration the order in which we have instantiated the multirotor object and we would have to pass each rotor speed in the same order. In this case we would have more freedom defining each rotor speed, and if the user wants to have a speed relation, they can do |
Taking 2 (or more) rotors and merging them requires renumbering the elements to make sure there'll be a continuous values for the elements, and set the degrees of freedom correctly. However, once rotors are built, there's no way we can change the To make things shorter and more general, I'm adding two methods to class Element(ABC):
def __init__(self, n, tag=None):
self._n = n
self.tag = tag
@property
def n(self):
return self._n
@n.setter
def n(self, value):
self._n = value
self.n_l = value
if value is not None:
self.n_r = value + 1 These methods will allows to manipulate the nodal location of each element and won't change the user experience at all. Although it seems a pretty simple way to get over this situation, these changes may require some change on rotors |
@rodrigomoliveira1, initially I wanted to avoid having to change the I am only worried that we could break or make things more complex just to make this multirotor functionality work. In some cases I would suggest that we try to implement things by keeping the original rotors as they are and, if needed, we could make copies of these rotors and add attributes/methods to them after we create them. |
I have suggested that because Even making copies of the input rotors, we'd still need to build those The other option I see is copying the rotors' data and re-instantiate the elements to build a modified global assembly, but it probably would take a bit longer than just changing the The original rotors would not be changed at all in both cases. |
Hi there!
|
Hi,
The Links class contains the stiffnesses, gear ratio, shaft and node position for the connection : I can then assemble the mass and stiffness matrices by iterating on the shafts and creating a macro matrix :
(Note : this is still not 100% clean as the speed transfer function between the first shaft and the nth shaft is not very well defined, I need to work some more on this The tricky part comes at the assembly of the A matrix and the connections between the nodes to ensure the conversion of speeds and torque : what I do is modify the K and C matrices to include the connection terms with stiffness and damping. I can then assemble the A matrix This gives proper results in torsion analysis. Still need a bit of work to clean up the gear ratio vs number of shafts and node position and to get the post-processing tools up and ready to have the MultiRotor fit into the existing Results classes ; but it gives proper results for torsional analysis which was my # 1 objective |
The
CoAxialRotor
class constructs a series of shafts in a coaxial and parallel manner, limiting itself to positioning the shafts internally and externally.Some configurations demands it not to be parallel of even coaxial, for example, compressors which have gear coupling between shafts.
CoAxialRotor
class already has support for multiple shafts but isn't general enough. So, we could change its name toMultiRotor
class and make some adaptations to suit these situations.Anyway, there's still a need for allowing the user to set a speed relation between shafts, since
CoAxialRotor
just make the shafts to rotate at the same speed.Another idea is to create a new element called
GearLink
(GearCouple
, etc) which would provide gear coupling (stiffness and damping) between 2 nodes from different shafts, and would inherit fromBearingElement
.The text was updated successfully, but these errors were encountered: