I’m looking for a way to show or calculate the piercing angle of a foil relative to the water surface within the ventilation module.
Specifically, I need to visualise the intersection angle between the foil geometry and the free surface interface.
Thanks.
Edoardo Asked question
One option for displaying the piercing angle is to output the local rondure frame Frame_[elementName]_NearOcean] at the element’s wetted point closest to the water surface by setting nearOceanFrame: true (see manual in section Foils/Hydrodynamics/Configuration).
Assuming a T-foil configuration with a vertical Shaft and two horizontal surfaces WingOB and WingIB:
"Elements": {
"Shaft" : { "Mesh": { "Spanwise": { "nSeg": 20 } } },
"WingOB": { nearOceanFrame: true, "Mesh": { "Spanwise": { "nSeg": 10 } } },
"WingIB": { nearOceanFrame: true, "Mesh": { "Spanwise": { "nSeg": 10 } } },
},
You will then need to manually alias the output frames from the Foil block. This is because the Frame Graphics system requires names to end with the “Frame” suffix to render correctly. Since multiple outputs from a single block cannot share the same suffix without causing a display conflict, a separate copy is required for each.
In
Blocks.Boat:"WingIBFrame" : {
"Frame" : BL.FrameXfromParent({
ParentFrame : "{^.Foil.Hydro.Frame_WingIB_NearOcean}",
Translation : [0,0,0]
}),
},
The piercing angle can then be calculated and converted into degrees:
"WingIBAngle" : "aLimit180({WingIBFrame.Frame}.eulerInFrame({Root.InertialFrame})[0]/pi*180)",
The same process applies to the other horizontal surface:
R.merge("Blocks.Boat", {
"WingOBFrame" : {
"Frame" : BL.FrameXfromParent({
ParentFrame : "{^.Foil.Hydro.Frame_WingOB_NearOcean}",
Translation : [0,0,0]
}),
},
"WingOBAngle" : "aLimit180({WingOBFrame.Frame}.eulerInFrame({Root.InertialFrame})[0]/pi*180)",
});
Support SumToZero Changed status to publish
