Calculix Ok for sails simulation: membrane+beams+interactions?

Hello all,

I wonder if Calculix would be suitable for the below use case. I currently try to progress using MBDyn, but it is hard for me. The Calculix good documentation, the many example, pre and post processing tools would help. I’m first of all a hobbyist sailor. My work is in Intrumentation and Control + IT, not mechanics. I’m dedicated and willing to do my homework if there is a green light from those that know that I’m heading in a right direction. I would be happy to avoid spending to much time in something obviously not being the right tool.

The intention is to do FSI to simulate a landyacht/small sailboat sail. A key aspect is a flexible and freestanding mast. Pressure on the sail has a strong influence on the mast shape. Mast shape has a strong influence on the sail shape. FSI is the way to go. There are dedicated professional tools, but out of reach for the hobbyist. So I investigate open source tools: OpenFOAM, Precice, Calculix, MBDyn…

The sail can be an almost flat “membrane”. The side that goes along the mast is cut with a curve (luff curve). When this curve will be “stiched” to the straighter mast (real lifle, ou slide the sail pocket on the mast), this will create “volume” in the sail: the extra cloth from the curve will move to create “volume” in the sail. If by tuning the rig, the mast gets more curved, then the sail gets more flat. Less curve in the mast gives a more deep sail. Then enters the aero of the sail that will influence the mast curve… This is the magic of sailing and adaptability of those rigs.

Mast could be a sequence of 1D beams getting progressively less rigid from bottom to top.

I want to start with a “simple case” that would simulate how the “volume” of the membrane evolve, as I change the curve of the mast: all laid flat, rely on gravity on membrane nodes, or uniform pressure to move the membrane down up to equilibrium (for sailors: simulating the boom at the bottom of the sail to pull the leech and bend the mast).

But I don’t see how to describe the problem as initially the nodes of the mast/beams do not fit with the nodes of the membrane luff curve. In MBDyn the strategy is to set time dependant relations between the two sets of nodes and reduce progressibely that distance over the initialization part of the simulation.

Can this type of thing be addressed with Calculix? If yes, what would be the key features to investigate?

Thanks for help,

Best regards,

JMF

1 Like

The approach in CalculiX is very different since it’s a FEM solver with various types of classic finite elements and constraints acting on their degrees of freedom (either by elimination or addition of DOFs). In this case, you could simulate the interaction between the sail (membrane) and mast (beams) using contact or MPCs. The latter allow you to define very complex interactions. Just keep in mind that structural (e.g. shell, beam) elements in CalculiX are internally expanded to solids.

Before trying FSI, I would start with a purely structural analysis in CalculiX in which the sail will be subjected to pressure (to test the interactions). Then you could use preCICE to connect OpenFOAM to CalculiX and run coupled analysis.

As a side note, on the main CalculiX website, there’s an example of a parachute so quite similar case to yours.

1 Like

I simulated an FSI coupling with OpenFOAM baffle, CalculiX and preCICE. However, I had used shell elements in CalculiX as I needed the bending. This worked and gave similar results compared to the solid elements. The transfer of the pressure to both sides worked.

1 Like

Thank you Calc8em for the encouraging feedback, complemented by ull’s one on the FSI coupling.

I had seen the paraglider “picture” on the Calculix website, but could not find the associated files. I have seen the “pillow” example. But I have not locates some “parachute example”.

Is there one I can look at? Or another use case that would manipulate the concepts I would need to implement?

Best regards,

JM

Do you mean this Inflating a Pillow example? If so, you could start with that one and add the mast elements (beam elements) using MPCs. Although, in my experience, I would rather expand the elements to full solid elements- just to minimize model debugging.
Maybe have a minimal CAD model (FreeCAD), import that to PrePoMax, mesh it using a 3D solid mesh and apply the appropriate boundary conditions - there are several YouTube videos on how to use PrePoMax, so it will take you no time to get started.

Hello

@jbr: yes, it is that inflating pilow. I’m already a FreeCAD user, which already allowed me to use Calculix in the FEM workbench. I have also downloaded and installed PrePomax.

@Calc_em: I will for sure start with some structural only (Calculix only) trials. Those could already give a lot of usefull information. I understand the concept of constraints acting on nodes degrees of freedom.

But there is someting that I struggle to understand in my case. The different elements of my problem (mast/sail) don’t match (have different shapes) when their geometries are easy to define: the mast is straight and the sail’s border is curved. So I can’t use “contacts” to tie them on proximity basis.

One example that could be similar could be two parallel elastic strips, clamped at the bottom, at a distance from each other, with slightly different length and stiffness (to make it a bit harder). And you would like to determine the shape when you join the tops to form an “arch”. Modelling the 2 strips would be OK. Then how to enforce that the tops are “joined” together, and then calculate the resulting shape of the arch at equilibrium?

Is this achievable in Calculix?

I browsed the examples and to my eyes they start from a “stable” shape, and apply a load to some part. I don’t see how to model my use case in such way…

Best regards,

JMF

Contact can work also when the parts don’t touch initially. Once you specify that two surfaces are in a contact pair and define the behavior in both directions (normal and tangential) the software will automatically detect whether these surfaces are in contact or not. So they can start as separated, then come into contact (and the forces will be properly transmitted through the contact interface), then separate again or slide on each other due to applied load and so on. The only problem with such cases is that convergence issues may occur in a static analysis if the model relies on contact to eliminate rigid body motions. But you could use a dynamic analysis or apply some tricks (such as displacement control) in such a case.

I don’t use MPCs in CalculiX but they can be (and often are) nonlinear and are able to model quite complex interactions so maybe they could help in this case as well. After all, they are sometimes used in place of contact:

The process of sewing the cutting pattern of the sail and the connection between sail and mast could perhaps be done using the following procedure:

  • Define your model in the undeformed state (straight mast, bare cutting pattern of the sail, which by the way provides a smart way to account for fabric orientation)
  • Mesh the model such that in the assembled deformed state you have matching nodes
  • define equations between pairs of nodes (one of them being the dependent one) and a third control control node. (one equation per dof, one control node per pair of nodes)
  • now apply constraints (*boundary) and solve for equillibrium.
    • fix the independent node at some convenient reasonable position (initial position will most likely not do)
    • fix the control node such that the nodes in the pair have co-incident position (displacement of the control node is equal to the initial distance between the nodes)
  • now release the constraints to the independent nodes and keep the control nodes fixed. This should keep the paired node coincident no matter what deformation the whole system undergoes.

A similar procedure was used by Prof. Schoop at TU Berlin more than 20 years ago for computing the shape of sails under pressure load based on the CNC cutting patterns. It was called Panel reference method. I used this in the context of rope systems (tethered balloons) under wind load.
I never tried it in CalculiX or ABAQUS, so the above steps are just based on guess.

1 Like

Thanks mkraska,

Your description appeals to me and seems to match with how I visualize the thing (and tried to implement under MBdyn).

The two first bullets are OK. Third bullet looks to me like equation like (x1, y1, z1) from node 1 = (x2, y2, z2) from node 2 (Ie. matching node)

But I don’ understand the purpose of the control node. I also googled for a definition of “control node” but could not identify something relevant.

Bullet 4: when applying the constraint, the simulation runs to satisfy the equations and “tie” the matching nodes (my Graal). But what is now the role again of the control node + bullet 5 ?

Really interested by understanding better :slight_smile:

Having the principles clear in mind would help me a lot.

JMF

Just asking: what exactly are you trying to find? The load in the mast or the load in the sail? If you model the mast curved the way you want it to be in your design sailing condition you can (I presume) determine the load that would make it straight the way you build it. If you keep that load, inverse, in your load sets it I think you will get a good estimate.

The below is intended for use with craft slightly larger than your landyacht/sail boat, but annex B is pretty general and may be of help.

Hello,
The mast is a given: an set of luminum tubes fitted together to have a specific curve validated by trails and errors from landsailors.

My goal is to have a tool to define the optimum sail shape (sail “mould” that cen then be rerived in flat panels to be assembled), that under load and in operation conditions (sail fitted on the flexible mast and with the aerodynamic loads) will give the optimum “flying shape”. Optimum flying shapes are well known. Finding the unloaded shape that will derive in that flying shape is not easy. The case of a flexible freestanding mast is a sort of extreme one, and it influences the sail shape a lot as its bending changes depending on the conditions. But you can’t have a standing rig on those landyacht, and for several dinguies this is against the rules.

JMF

Check the *EQUATION keyword and corresponding examples in CalculiX User’s Manual.

Good literature can be very important in such cases, especially at the initial stage of the project. Do you have L. Larsson’s classic book “Principles of Yacht Design” ? That’s for general information. Research papers focusing on numerical simulations of sails can be useful too. For example, the one titled " FSI analysis on the sail performance of a yacht with rig deformation" by S. Bak et al. Even when authors use different software, you should be able to get some valuable information from such articles. This topic is not easy, especially when you start your adventure with simulations, but it’s also interesting and worth studying.

Thanls Calc_em for the encouragements !

Yes, I have several books on yacht design and sail design (the best French one, and the reference T. Marchaj book is on the way). I also have about 20 FSI papers related to sails FSI, the type of FEM elements to use (CST, MITC…), wrinkling models… But they don’t address explicitly this “assembly sequence” of the models, or in much simpler cases applicable to big yacht and not to my case: straight rigid mast.

I may have to start with a less generic simulation attempt : defined mast bending (base clamped, lateral force at the top), and design an exact matching curve for the sail, and then get them match. Note: doing this for the straight flexible mast can’t definitively work as a sail in real life.

mkraska process would be the graal for slightly independant curves on mast and sail.

I have downloaded the Abaqus “get started” document, to get better basics about key principles of the tool, understanding that most should be applicable to Calculix.

If I fail, I will go back to MBDyn…

Best regards,

JMF

The “Getting Started with Abaqus/CAE” guide is a nice document but meant primarily for Abaqus/CAE - the GUI of Abaqus. So it won’t be very useful if you want to work in CalculiX. What you need is an introduction to Abaqus keywords since those are in large part common with CalculiX and the description of functionalities that you need to use (e.g. equation constraints).

CalculiX itself also has very good documentation that you should use as a primary reference when working with this solver: http://www.dhondt.de/ccx_2.19.pdf

And if you need a bit of theory, “The Finite Element Method for Three-Dimensional Thermomechanical Applications” book written by G. Dhondt (author of CalculiX) is a good choice, in addition to general literature about FEA. I would also recommend “Practical Finite Element Analysis for Mechanical Engineers” by D. Madier - a recently published book focusing on the practical aspects of FEA. It covers topics such as contact and MPCs as well.

MBDyn is a great tool for multi-body dynamics simulations but keep in mind that, from what I know, it doesn’t support contact and deformable bodies (unlike some commercial MBS solutions) and thus will have very limited use in your case.

1 Like

The control nodes are separate nodes which aren’t attached to any element of the structure. Their initial location is not important. You can, however line them up in a row and connect them by truss elements, just for visualization in the debugging phase.

Now, let’s say you have a pair of nodes n1 and n2 with control node n3
They have the initial coordinates X1, X2 and X3, where X3 can be zero or whatever, doesn’t matter.

Now you couple the displacements u1, u2 and u2 such that u1+u2+u3=0
This eliminates u1, such that you can still apply constraints for u2 and u3

Then, decide, where the pair of nodes has to be in the assembledstep, let’s say at x0. The closer this is to the later equllibrium position, the better the convergence will be, but as long as the material is elastic (not path dependent) then this intermediate position should not affect the result.

Now you apply a constraint to n2 with x2=x0, i.e. u2=x0-X2. In order to force n1 to be at the same position (x1=x0), it’s displacement has to be u1=x0-X1. Yet you can’t apply this directly, as you eliminated that dof. So you have to solve u1+u2+u3=0 for u3: u3=-u1-u2=X1+X2-2*x0

Check: x1=X1+u1=X1+(-u2-u3)= X1 -x0+X2 +2*x0-X1-X2 = x0

Once you constrain the control node to u3 for the remainder of the simulation, you make sure that always x1=x2. Of course, you release n2 from the constraint in the estimated assembled position x0.

For a sail, a reasonable x0 could be obtained by projection to a spherical surface.

You need to write a program which takes care of

  • consistent meshing of both sides of each seam
  • identifying pairs of nodes
  • generation of the control nodes
  • generation of the equations
  • generation of the constraints in the intermediate estimated assembly position

Hope this helps. Let me know if that really works. I actually didn’t test anything of this in CalculiX. A minimum working example would be welcome for my example collection.

1 Like

Thanks Calc_em, I have identified the official Calculix 2.19 reference documentation. I looked at it, but did not succeeded to grasp from my diagonal read, and focus on the MPC keyword the principles behind. I know that this is not a good practice to work that way ;-). I was hoping that the Abaqus doc would help grab the concepts and provide a good starting point to enter the CCX reference doc. I take your warning, but may have an attempt. “Practical Finite Element Analysis for Mechanical Engineers” seems the best reference. I somehow think that I have strange hobbies :slight_smile:

1 Like

Thanks you mkraska for the detailed explanation. I had not linked your pseudo the this superb library of examples and use cases ! Thanks a lot for this great resource I already digged in to understand possibilities. This is a mandatory stop. Time you spent to detail the process deserve some attempt on my side. I may be slow, but hope to be in a position to deliver an working example. I will post here the results.

JMF, don’t feel under pressure with the example. I am just curious whether the proposed approach actually works. Any feedback is welcome.