I am working in the integration of SeaFEM within the OpenFAST framework. Given that my question is not trivial, I will try to set the stage before as precise as I can. Please let me know if additional information is needed.
This hydro-elastic coupling will be carried out by means of an input-output solve between SeaFEM, which provides sea forces and moments applied on the platform in exchange of ElastoDyn’s platform motions, for each degree of freedom and time step. In this way, the full multi-physic problem regarding offshore wind turbines can be simulated computing the hydrodynamic forces using SeaFEM.
To do so, it has been taken advantage of HydroDyn’s module by using it as intermediary, in this way some defined types or subroutines can be used. Then, an additional module has been created similarly to WAMIT or Morison called SeaFEM, containing its own .f90, .txt and auto-generated files. Two subroutines have been declared within this new module:
- An initialization subroutine with the aim of generating the output meshes, a source one u%PRPMesh to store motions and a destination mesh copy y%PRPMesh for the forces and moments.
- A CalcOutput subroutine, which receives the motions stored in u%PRPMesh (translational displacements and rotations). Besides it contains an imported exchange data function from SeaFEM which brings its forces and sends OpenFAST motions, these forces are later stored in y%PRPMesh.
Both subroutines are called from HydroDyn’s module by using a conditional which disables other hydrodynamic solutions. Again forces and moments are stored in HydroDyn’s y%PRPMesh in order to be accessed from the glue code.
Till here information is well received or stored for its exchange at the ED_HD_InputOutputSolve subroutine located within the glue code. Even so, coherence is not found in the plotted results, thus the relevant code flow has been analyzed. It has been detected that PlatformPtMesh forces and moments were not obtained at the ED_HD subroutine. Going further, this is detected to be caused at the U_ED_HD_Residual subroutine, where two conditionals are found for Morison and WAMIT. Similar conditionals have been found among the rest of the code, differing from previous FASTV8 version.
I have tried to replicate those conditionals creating new ones for SeaFEM, including its own new mesh type definitions (u_HD_S_Mesh, HD_S_P_2_ED_P…) but the small-angle approximation breaks and following error appears: “FAST_Solution: CalcOutputs_And_SolveForInputs: SolveOption1: ED_HD_InputOutputSolve: HydroDyn_CalcOutput: HydroDyn_CalcOutput: Angles in GetSmllRotAngs() are larger than 0.4 radians”.
So, before following this error path and solving the errors that will probably later appear, entailing much more debugging time. I wanted to know why a distinction is made regarding the hydrodynamic solution at the time of computing the residuals and perturbations. In other words, why those are not calculated by using general HydroDyn’s meshes, as for instance y_HD2%AllHdroOrigin in FASTV8 version. This is why, I also wanted to make sure that I’m storing the exchanged forces and motions in the right meshes and if I’m going in the right direction by adding the new conditionals for SeaFEM. Or otherwise, if it would be more appropriate to create a destination mesh y%AllHdroOrigin and replicate its involved subroutines from previous V8 version. I don’t want to mislead myself by doing a lot of modifications in different areas of OpenFAST, given that it’s a big code and is easy to lose control.
I would appreciate to have any orientation in this regard. Thank you in advance,