Extending RAFT to multiple bodies
Description of feature
I am wondering if there are any plans to extend RAFT to multiple hydrodynamic bodies, and if not how easy it would be for me to do this myself? This would be useful for simulating wave energy converters. I would want to do this in RAFT instead of some other code like WEC-Sim or WecOptTool because the frequency domain with the drag linearization is faster than the time/pseudospectral domains and I'm doing optimization.
Potential solution
I see that there is an ndof property set to 6* number of turbines, but I assume that simulating a 2-body system would be more complicated than just setting ndof=12. Here are my initial thoughts on what would need to be done, please let me know what I am missing because I haven't read through the RAFT source in detail yet.
- adjust calcBEM to run multiple bodies and get/save interaction coefficients (although for my specific usecase I plan to override HAMS and use hydro coeffs that I calculate with a different package that is faster - matched eigenfunction expansion method)
- find places in the code that 6 dofs are implicitly assumed, ie in RAO plots, and modify accordingly
- account for constrained motion in the dynamics (ie after constraints the two-body RM3 WEC has 7 DOF because the float can only translate wrt the spar, but the hydro coefficients are computed for the 12 DOF system). This seems like the hard part. The DTOcean+ project has code for multibody hydrodynamics in the frequency domain, which I would try to replicate. I think I would prefer to start with RAFT and add multibody than to start with DTOcean+ and add drag iteration and open MDAO integration, because RAFT seems better maintained and has a more permissive license.
Open to any additional thoughts you have. I'm a PhD student and able to develop this if it makes sense within the time constraints of my project. Thanks.
Hi Rebecca,
Sorry for taking so long to answer your question! We do have plans for multiple body dynamics, besides the already available capability of considering arrays of rigid bodies connected by mooring lines, and those plans could possibly include hydrodynamic interactions between bodies.
I haven't thought much about the hydrodynamic part of things yet. But if you only needed the hydrodynamic interactions to solve your problem—i.e., if you didn't need to model hinges or other connections that we still don't have in RAFT—the first step you listed seems enough to me. As you said, you would need the full 12x12 added mass and radiation damping matrices and the 12-element wave excitation vector. I don't think HAMS can do that, but if you have a different approach that does it then it should be good enough! RAFT can read precomputed hydrodynamic coefficients using WAMIT format, but it would need some modification to read the full matrix instead of treating the bodies separately.
And indeed, I would say that the hardest part would be to account for the connections between the different bodies. You probably wouldn't need to change plotting functions or other similar things because RAFT can model systems composed of multiple rigid bodies as long as they are independent or connected by mooring lines (to model arrays of floating wind turbines). But we have plans to include other kinds of connections in the near future, and the idea of using DTOcean+ seems promising, thanks for sharing that!
If you want, we would be glad to schedule a call to talk about this further 😀 My email is [email protected]
Thanks for meeting with us! Also wanted to mention that I just found this other open source multibody code, also copyleft but it seems more general than the one in DTOcean. link
Also HydroChrono (project Chrono has a more permissive license). This and the link above (MBDyn) are both time domain solvers but maybe their multibody representations could be reused for the freq domain.
hi Lucas + other RAFT developers, I wanted to check in to understand the development progress on the multibody feature over the last few months, if there is an eta for a dev version that I could play around with, or any development support needed. Thanks!
Hi Becca!
Up to now, we have outlined the approach and implemented a prototype code to make sure it works. We're basically implementing a direct elimination technique for joints (similar to SubDyn) and a lumped mass approach for flexible members. The idea is that the model will be made of nodes that are connected by rigid links, joints, and springs/dampers. My plan was to have it ready by the end of this month, but I got pulled into other stuff and I'm still not sure when I'll be able to get back to this. My hope is to finish it in the next two months, but I may be wrong again 😅
I would be more than happy to have some help with development! I am writing a document outlining the approach that I can share with you soon. That might help deciding what you would like to contribute with.
Thanks!