Hi, I am defining a sail geometry using the SailModelfile.js and the sail topology parameters. Just to be sure and precise, are the length data measurement corresponding to straight lines measures or curvilinear measures?
In other words, is LFoot the straight line dimension from tack to clew, or the actual developed (curvilinear) length of the foot edge of the sail? Same question for LLuff.
Also, how is defined the position where to measure r25 r50 r100? Is it:
- r25 is the positioned as the line cutting through the points on 25% of the luff and leech?
- r25 is the positioned as the line cutting through 25% along either luff or leech and is parallel to the foot or head?
- PS: these definition are equivalent or close when having a triangle or close to triangle shape, but may results in some differences when considering a more squared shape (r100 >> 0) such as for a squared head mainsail.
- Once the position is defined, is the r25 ratio numerator (r25*LFoot) using the direct straight line measure from point on luff to point on leech at that stripe location, or the developed curvilinear dimension (developed) at that stripe location?
Thank you.
Hi Nicolas,
Thanks for your question.
First, please be aware that the definitions of the sail dimensions are written and available in the sail preset file in Runtime/SailModel/Presets and therefore vary on the selected sail preset (e.g. GenericSloopMainJib.js or TwoElementWing.js). The sail preset files use functions written in Runtime/SailModel/SST.js. You can write your own sail preset and the SST.js if you want it to function any differently.
Then, please find below the answers to your questions in the particular case of the GenericSloopMainJib.js preset.
- For the jib, ‘Jib.LLuff’ is the straight-line length between the headstay base and the headstay top, minus ‘LLuffFoot’.
- For the main, Main.LLuff + Main.LLuffFoot = Mast.height, and ‘Mast.height’ is the mast length before any rake is applied. Then the camber for the mast is applied afterwards as a fore-aft offset (for an unraked mast), so ‘Main.LLuff’, ‘Main.LLuffFoot’ and ‘Mast.height’ are all straight-line distances.
- ‘LFoot’, both for the jib and the main, is equal to the girth length of the foot edge of the sail, or in other words the actual developed (curvilinear) length of the foot edge of the sail.
‘LFoot’ is also used in sailSimpleSection’ of the SST.js class to define the sail section of the foot edge when v = 0 (where v is the curvilinear abscissa of the mast trailing edge reference line / headstay starting at the foot of the sail), along with other parameters:- the coordinates of the point verifying v = 0
- the camber of the sail at 40% draft (this is specified in the BOC/BIC files using ‘rCamberM’ and ‘rCamberJ’)
- the angle aTrim between the sail section leading edge tangent, projected in the (OXZ) plane and the x-axis, defined by aFoot
- the angle aChord between the sail section leading edge tangent, projected in the (OXY) plane and the x-axis, defined by aBoom and aTwist (defined at the BOC/BIC level).
- r25 (resp. r50, r75 and r100) corresponds to the girth length (or developed curvilinear dimension) of the sail section with leading edge positioned on the mast trailing edge reference line / headstay, with h = 0.25*Mast.LLuff (resp. h = 0.50*Mast.LLuff, etc.).
- for each section, the direction of the section, and therefore the position at which its trailing edge will be located on the leech, is defined by aTrim, where aTrim = 1/Mast.LLuff ( (1 – h) S.aFoot + h * S.aHead)
Hi,
Correct, the sail preset can be adapted to add another sail definition, a wing with a flap element, etc.
If you include the new sail preset in the Runtime folder, you need to restart Gomboc to be able to read this new preset. Indeed, the Runtime folder is read only once at Gomboc start-up. However, if you include the preset directly in the model using an ‘include’ statement, the new preset will be loaded when reloading the model and there is no need to restart Gomboc.
When including a new sail preset, there are 2 places in the model that need to be modified:
- The aero *.bic file defining the sail. In this file, you will need to
- Define new sail trimming parameters to match the definition in your preset (e.g. aTwistM, aTwistJ, etc.)
- Include the sail preset in the @GraphicsNodes of the ‘Sail’ block:
// Dynamic sail shape graphics – updated live“@GraphicsNodes”: {
“Shape”: {
“Type”: “SailShape”,
“MeshSpec”: SST.preset.twoElementWingAyro.meshSpecDisplay(), // Plain sail graphics
},
}, - Include the aero *.js file defining the sail dimensions in the ‘Sail’ block:
// Sail geometry plan
SailModelFile: spec.ownPath + “AeroGeometry04.js”,
- The aero *.js file defining the sail dimensions. In this file, you will need to
- Add the parameters defining the additional sail.
- Update the return statement using your new sail preset:
return SST.preset.genericSloopMainJib.surfaceFcns(SailSpec);
Could you please let us know if the issue persists after updating the two files of interest following the instructions above? You can also refer to the Gomboc-60 sample project for a working example.
Thanks
SumToZero support
Hi,
I managed to find the missing change required thanks to your reply (return statement in the Aero*.js parameter file was still pointing to the original Runtime file). Thank you again for pointing all the locations that needed to be adapted.
Looking at the Oceanis51 Gomboc example, I noted that: the graphics node is calling the genericSloop in Aero01.bic, “MeshSpec”: SST.preset.genericSloop.meshSpecDisplay(), while the Aero01.js is calling the genericSloopMainJib.
Not sure if this generates a difference between what is seen on the graphics and the dynamic aero force computation behind it.
ABoomJ is defined independently of the Sail.Flat parameter in this model however, the graphics of the jib are affected by a change in the flat parameter so graphics seems driven by what is in the SailModelFile Aero01.js instead of the definition of the MeshSpec. For instance is you put aBoomJ constant at 0, the jib graphics is affected (foot of jib on boat centreline visible), while still using genericSloop as “MeshSpec” which should rely on the aBoom of the mainsail unchanged.
My next question was about representing furling or reefing behavior, but I could see there is already some things implemented in the Oceanis51 template noted as reef. Looking closer the reef seems to drive more the twist of the sail or length/tension of leech. Building our own Runtime preset, would that be possible to have a sail furling type behavior?
Thank you,
Nicolas
Hi Nicolas,
Nice to hear you could find the missing change.
You are correct, in the Oceanis 51 model, the sail presets are not consistent between the Aero01.bic file and the Aero01.js file. We are going to solve that inconsistency for the next release by using the ‘genericSloopMainJib’ in both files. However, it will not impact the results.
Indeed, the ‘meshSpecDisplay’ function used to create the sail mesh is the same between the genericSloop and the genericSloopMainJib presets so the same number of cells are created in both cases. Also, ‘meshSpecDisplay’ only creates the mesh of the surface, not the surface itself. The surface is created by the ‘surfaceFcns’ function. Even if the ‘surfaceFcns’ function differs between the 2 sail presets, since it is the ‘surfaceFcns’ of the ‘genericSloopMainJob’ preset which is called, different sets of sail trimming parameters are considered for the jib (aBoomJ, aTwistJ and rCamberJ) and for the main (aBoomM, aTwistM and rCamberM).
Note that ‘meshSpecDisplay’ relies on ‘meshSpec’ which does not depend on the sail trimming parameters defined in the BIC file. ‘meshSpec’ does not depend on the aBoomJ or aBoomM, it only defines a mesh resolution.
Regarding your last question, it is important to note that the relationships between the sail trimming parameters controlling the graphics (aBoomJ, aBoomM, etc) and the flat/reef parameters of the ‘AeroModelFlatReefMirror’ are arbitrary and can be modified. Hence, you can adjust those relationships to better represent the response of your sail to those flat/reef parameters. You can also modify the presets to add more sail trimming parameters or modify the camber laws, etc.
In order to reproduce a furling behaviour, you might be able to multiply the S.r25, S.r50, etc parameters by a new ‘furl’ sail trimming parameter in the ‘sailConstraints’ method of the sail preset. However, please note that this is untested.
Hi,
so if we want to add more sails in the model compared to the base existing preset, we would adapt an existing preset to include additional sail definition and consideration of their geometric parameter added into the aero.js parameters. Is it required to restart Gomboc to be able to read a new preset file added in RuntimeSailModelPresets? I adapted a preset file to have a 3 sail model, and it seems to load as it is not showing an error message but I cannot see the third sail in the model even if I have modified the SST.preset.genericSloopCustom first line definition in the new file and added a third sail into the rest of the file.