I suspect that the following error message (issued 5654 times) is the reason for my latest failures; but I cannot make sense of it.
A machine translation to English gives: "
User alarm in the command CALC_CHAMP/REAC_NODA + GROUP_MA:!
! The N1 mesh of the mod? The MODEL is not one of the stitches!
! Signed by the word CL? GROUP_MA. !
! Still, it seems to be an edge mesh of one of these meshes. !
! Risks and advice:!
! The calculation of support actions is false if this mesh is affected!
! By a non-zero load.
In my earlier attempts, I’ve modelled the axle solid, but for a variety of reasons, not least that it obscures the view of the inner faces of the jaws , I’d liek to leave the axle out and substitute a force acting directly on the faces.
Ben suggested using the remote force as a substitute for a torque BC – which is mentioned in the docs but doesn’t appear to be available – and showed me how he uses it in his allen key model.
But still, the definition of the remote point confuses me.
Apologies in advance for the delayed response. Normally we would reply as soon as we can but I mostly deal with CFD and would not be in the best position to help you out with this FEA issue. Let me call in @jousefm who may be more able to help you out, he has quite a busy schedule so replies may be delayed.
I understand you being upset at a lack of a reply but you must understand that the PowerUsers (the people who reply most often) are typically quite busy and there are not as many FEA PowerUsers as CFD PowerUsers hence you will see CFD problems get answered and resolved more quickly.
No one here has “stupid questions” per say, we are all here to learn and help each other. Problems that are tricky, while we may not have the right answer, we will certainly try our best to help out.
No that is not the case. Even for me, support does take quite awhile to reply as they tend to paying customers that don’t participate in the forum first and there are plenty of those.
For an answer, maybe. I’ve already tagged Jousef in here and let him know that you’re facing issues so hopefully he will get back to you soon. You may try other CFD forums where people are familiar with the solver.
Thanks a lot for jumping in @Get_Barried! I am dreadfully sorry for my late response and my delayed reaction @mhere, that was definitely my fault and I should have get back to you earlier!
As you have stated correctly this can be viewed as some additional solid rod “welded” to the component and works as a leverage (same principle as you would loosen a screw on your car tire).
For the simulation you are trying to achieve I have a bit of a problem with understanding the realization of the model. The thing is how do you know the resulting forces on your bigger component when you turn your axle which is not modelled?
Also while turning the axle the contact area will get smaller assuming the big component is deformable and not totally rigid - of course you can neglect that in the first step and apply a sinusoidal load on both faces.
Didn’t @BenLewis do exactly what you want in his project? I would have done it the same way.
The question is not stupid at all, it is just a basic concept from a second year statics course, which is difficult to supplement in the context of this forum.
Moment and forces can be translated from a point in space to another point in space by considering the total static balance, that is, sum of moments and forces should be equal to zero. All the solver does is to apply forces at each mesh node to balance the applied remote load condition (this is a simplification). Forces and moments act “along” a point because they are vectors, which have a direction and a magnitude, and the point is what fix the space location.
Numerical simulation is not a magic wound which will give you what you wish every time. If you throw garbage in, it will throw garbage at you, including errors that will show that you are trying to do something wrong. As with everything in engineering, many fundamental and advanced concepts are needed to get the job done.
Finally, and as I can sense your frustration, if you really need a quick and reliable result, carried out by a professional, @BenLewis or me can send you a quotation for a consultancy project.
I realise you are trying to ‘put me in my place’ for having allowed my frustration to show through, but your reply is rather instructive, so I’m going to take it seriously.
In my Mech.Eng degree some 40 years ago, I remember doing some statistics; but in the intervening years of using the Mech.Eng, the stats didn’t come up much. A few std.Dev s for QC, checking tool wear rates, that sort of thing, but nothing applicable here.
I get the idea that the forces applied to the point get portioned out across the faces it is connected to – that bit I don’t have a problem with.
The bit I have a problem with is how to apply 200N.m of torque to a point in space, such that it applies (distributes?) that to the faces of my component correctly.
Force acting as a result of torque depends upon radius. The radius varies across the face of my components.
Where do I position this point in space? How does the force get distributed?
Eg. In my model, the torque acts about the Z-axis at(X=0,Y=0). If I position the point at (0,0,0) then radii calculated from that point to the front edge of the first layer in my model will be trivially correct. (Simple Pythagoras, though I get it isn’t done that way.)
But for the rest of the faces, the third dimension comes into play, and the radii calculated from that point to the back edge of the rearmost face (and even the back edge of the front layer; and all the layers in between) is wrong (too long).
This I believe is responsible for the effect seen in the results from runs 1 & 2 – that ran successfully, but timed out – where (with a displacement scaling filter applied) show the layers “fanning out” – analogous to the way a magician fans a deck of cards – rather than displacing in (approximate) unison.
No matter where I position that “point”, it will never distribute the forces resulting from the torque, evenly across the 12 layers.
Now, if I could define a vector – aligned to the axis of rotation – and the math first apportioned it along the length of that vector, divided by the number of matrix cells it pierced; and then calculated the radii to the faces, for each subdivision of that vector; before finally apportioning its share of the torque amongst the faces connecting to that subdivision according to the radii calculated and the area on which they act…That I could understand. But I am asked for a “point”, not a “vector”.
And that is – I think – the problem. The details omitted by the ‘simplifications’ leave me without a hook on which to hang my hat. I am constantly having to guess how this might be applied rather than being able to read how and know.
I get GIGO. the latter half of my 40+years in engineering was most as a programmer – systems architect – developing software for engineering purposes.
Take a look at simulation “Copy of static” and then “Run 2” you’ll see that it ran, but timed out, and produced some results (the fan effect described earlier).
Then look at “Run 4” and see it failed with “floating point error”. As far as my memory – and my best attempts to compare the “Settings” used by those two runs – a process that is in no way easy as there is no ability I can find to automate the diff’ing – they are identical except:
Under “Simulation Control”, I changed the “Time step length [s]” from 0.025, to 0.05; with a veiw to halving the runtime and allowing the run to complete without timeout.
However, “Run 4” terminates almost immediately with: "Unexpected solver error. Please contact our support for further help or use the ‘report an issue’ functionality. ".
Inspecting the log file I find:
" <DVP_2> !
! Erreur num?rique (floating point exception). !
! Il y a probablement une erreur dans la programmation. !
! Veuillez contacter votre assistance technique. "
(I dutifully submitted a support ticket as requested. So far (4 days) no response.)
And looking immediately above the floating point exception in the log file, I see reference to:
“Time of computation: 5.000000000000e-02 - Level of cutting: 1”
AFAIK (from memory, don’t hold me to it) the only 0.05 value in the entire model (as entered by me) is the time step value.
Why would changing the time step value cause a floating point exception?
0.025 has a binary representation of: 00111100110011001100110011001101; which is an representational error of 3.7252902984619140625E-10.
0.05 has a binary representation of: 00111101010011001100110011001101 ; which is representational error of 7.450580596923828125E-10.
Nothing significant there. I tried a few variations: 0.049999, 0.0500001 etc. etc. And the runs always fail in the same way.
Obviously, one of the first things I tried was reverting the value back to 0.025. It still failed!
Of course, you’ll say “You must have changed something else!”; and you are probably right, but I don’t remember changing anything else – I was only seeking to get a completed run – but it is possible that I saw something in the results of Runs 1 & 2 that I thought I could correct at the same time.
But there are a lot of parameters; a lot of BCs with a lot of faces assigned to each. I don’t believe that this is just down to my age!
I’ve open the settings trees for both runs in adjacent tabs and stepped through the entire model – several times over – looking for what “garbage I might have thrown”; but I cannot find it?
I’ve looked for a way to download the two sets of parameters such that I could use software to perform the comparison.
I hope you see that I have tried very hard to do due diligence in finding my “garbage”; without success.
I’m sorry if I allowed the frustration – from having pursued every angle I could think of to solve this problem myself – to show through in my earlier post; but maybe if you read this far, you might recall the feeling from your own learning curves.
I would not be using a community account if I could afford to pay experts to do this for me!
Ben did an amazing job – in no time at all it seemed – of matching my stated goals of my earlier, greatly simplified model. Despite that I explicitly stated “I’m not asking you to do this for me”.
The problem comes from the “Give a man a fish” -vs- “Teach a man to fish” dichotomy.
He made a lot of changes to my first, naive and clumsy attempts to get to grips with your system; but he did not go into much by way of details with respect to exactly what those changes were – much less, why he made them.
And (once again), the process of trying to compare two hierarchical sets of parameters trying to discover their differences has defeated me.
And even where I discover changes; working out why they were made – given the propensity of the documentation to give “simplifications” of the math and physics behind the model parameters – is the source of an entirely other type of frustration.
Is that help system description of X, a complete and cogent explanation that anyone with the right mix and level of education would immediately understand? (Am I just too thick to get it?)
Translational forces are vectors, so a point and a value plus the direction from that point to any given face (or point on that face) fully defines the vector.
But torque is a vector product. To derive a vector from it, you need the radius at which it acts. But the radius to points on a face vary in 3 dimensions, so wherever you put the point, the force acting at point along an axial line across the face will vary; which they shouldn’t! Because torque act around a vector, not a point.
(Am I just too thick to understand how to define a vector using a point?)
The only mechanism (in SimScale) that would allow me to evenly distribute the torque to the faces of all the layers in my model – without modelling the axle – which as Ben pointed out in his reply, doesn’t produce a valid result for the axle – would be to define a separate Remote Force BC at the center of every mesh cell along the axis of rotation through the thickness of my model, and manually calculate the proportion of torque that would act at that point.
The proportions would be a simple τ/no of cells; but recalculating that and re-creating the numerous BCs any time I needed to refine the mesh would be a pain-staking and laborious process. (And what chance of getting support if I have a few thousand near identical RFBCs defined?)
Finally, the best explanation of how RFBCs work that I’ve found is here.
And the most instructive part of that explanation – as applicable to my design goal – reads:
Moments can be applied as a remote load, but they can only be transmitted through beam elements. Truss elements, gap elements, and other line element types that do not have rotational degrees of freedom cannot transmit moments and torques. the joints of these element types are pinned (no translation, rotation allowed).
Which I think means that unless SimScale enable the Torque BC (mentioned in the docs, but not available anywhere I have discovered) , my only recourse is to revert to modelling the axle as a solid and applying torque to an end face as Ben did.
This is problematic in many ways, not least of which is that the presence of the axle obscures the very faces I am most interested in seeing.
I hope that this reply, if you’ve read this far, demonstrates that I’m not a totally uneducated, dumb user throwing garbage and hoping for magic; nor am I asking for free consultancy.
I’m a serious hobbyist, seeking to learn a new skill to solve a real problem, and doing my damnedest to get up to speed in a field that is somewhat new to me – I had other people occupying the expensive licenced seats running the simulations to do this stuff for me for most of my career – and being frustrated at every turn by a combination of:
My own inabilities.
The “simplified” explanations of SimScale’s features in the documentation.
The profusion (and repetitious nature of) the ‘Hows’; but almost complete absence of ‘Why’s’.
(How many times do you need to describe how to click on a box and enter a number?)
System internal errors.
(That for all the world look like bugs. Even the error report suggests that could be the case.)
Log files in a language that I speak (une petite peur), but not at this technical level.
And (it appears), a support mechanism that concerns itself more with the form of the message than its content.
( I don’t believe anything I said was rude; and none of it was aimed at any individual. I wasn’t even criticising SimScale per se, but rather my learning experience here at SimScale; and (I thought) I was clearly levelling most of that at my own door. )
I’m used to being able to pick up and run with new software at a much higher rate than most of those I’ve worked with. Whilst this (my difficulties with a new system) is not a unique experience for me, it is my first serious experience of using a remote (cloud) system where all the analytical tools that I would normally bring to bear – grep, diff, inspecting the sources – are denied me because the configuration and sources are not local.
I sit here, totally dejected as I try to decide how to sign off.
Given the tone and nature of your response – and its complete lack of any attempt to assist me – I suspect that I have “cooked my goose” with any chance of getting any further with my projects.
I’m simply stuck in no-man’s land with no where to go and no one to call.
I’ll try to answer strictly on the technical aspects you had trouble with, so we have all the details regarding the model and setup at one place and we can discuss your rather unpleasant experience with SimScale maybe later ( I would love to give you a call regarding this, maybe you can directly message me your phone number).
In our implementation of the “Remote Force” or “Remote Displacement” with the option “deformation behavior” as “deformable”, a mesh node is created at the point referred to as “Remote Point”. Additionally an
RBE3 connection is created between the remote node and the nodes of the assigned faces, all 6 DOFs of the remote node are activated for the coupling.
The implementation of the RBE3 connection in Code-Aster is (almost?) the same as in Nastran, where the displacement of the dependent node (the remote node) is defined as a weighted average of the connected nodes. The weight itself depends on the distance of the remote node to each connected node.
At the beginning of the Solver log log we print the command file that is used to run the Code-Aster job - together with the documentation above you could get all the information up to the matrix formulation of the boundary condition to verify if the implementation fits with what you would expect.
The “fan effect” can be exaplained by two things:
the layers near the XY-Plane had a closer distance to the remote point as the faces further away, thus they got a larger “weight” for the force distribution (not too relevant in your case)
additionally you added a moment around Y-axis, leading to unsymmetric forces (main reason, see below)
I copied your project, and added two runs:
New Remote Point: here I changed the “Pivot Point” to an actual pivot using an undeformable remote constraint and freeing z-rotation, additionally I changed the remote point location for the “Axle torque”, by moving it into the center (z-coordinate to 0.00305 - see **New Remote Point" geometry primitive). The results look almost the same w.r.t. the “fan effect”:
I’ll take the feedback of not having an easy method to compare settings between two runs - we are already working on a solution.
Regarding the actual changes between the runs, there were two more:
you changed the “Pivot” constraint from Elastic Support to Rotating Motion
you iuncreased the load substantially: from 200*sin(t) to 200e6*t for x-moment and 200*cos(t) to 200e6*t in Y-moment
See comment above, we will find a way of visualizing setup changes between runs which will be implemented hopefully soon in to the new workbench, which is in its final stages.
I hope my answers help you to move on with you project and also get to the details of how exactly the “remote force” is implemented/used in SimScale.
As written initially, I would be happy to have a phone call with you regarding your overall experiences to find out what we could improve.
I just realized that the reason for the error you got in the second simulation is due to the load ramping you used. The load “Follower (right)” is defined as 200e6*cos(t) which means, you will have the full load directly at the first time step, being a nonlinear run with a nonlinear load (follower) and such a high load of 200 MPa, it is reasonable that it fails - even subdivision will not help as it will actually increase the load - although I admit the error message is bad (basically zero value).
I do remember making (some of) those changes – but I thought they all came after the Run2/Run4 transition.
I don’t know if your system allows you to see it, but I attempted literally dozens of runs over the weekend; mostly I deleted them when they failed to produce any results.
The large jump in the force value was an attempt to avoid needing to apply the displacement scaling factor; and actually, just to see what if any effect it had.
I added the sin(t) and cos(t) to the x&y translational part of the remote BC in an attempt to simulate [sic] the effects of torque in the z-axis. (because I couldn’t wrap my brain around how to define the torque about z-axis).
And also because if I used a simple scalar (eg, 200*t) it crapped out with FPE, but if I wrapped t in a system defined function (sin/cos/pow/etc.) it didn’t. (Just failed for unsolvable matrix reasons.)
Essentially, by then I was in a try anything and see what changes, debug mode.
You have provided a lot of very dense information, and several simulations for me to work through. Thank you, and I’ll get back to you in a few days on that.
With respect to a phone call – I’m not good on the phone, but if you want to take this off-line by email I okay with that.
As for how to improve the experience.
the single easiest to implement and immediately valuable thing would be to provide a way to download the settings used by individual runs in a flat ascii format so I could diff them.
A feature that I believe would be most useful in the long term, but it would probably involve a considerable amount of development effort to implement; would be the ability to duplicate BCs (in the way you can copy simulations) and then select between those copies using (say) a check box.
Most changes to a model seem (to my inexperienced self) to be made at the BC level, and if you could make a copy, make a change, and quickly switch between them, that would go a long way to simplifying the suck-it-and-see approach to learning.
Add a comment field displayed alongside or underneath in the navigator and you end up with an undo/redo facility and an aide-mémoire to what you’ve tried and why.
Beyond that, commissioning a (human) technical translator to translate the French error messages to English and providing links to them when the errors occur probably wouldn’t cost much; but would help immensely.
Imposing upon the @powerusers to put their collective heads together and come up with a guide or check list of things they do to try and isolate which of the 9 possible causes of a Matrix insoluble/singular error might allow us beginners to help ourselves when that arises.
Of course, if one you know the cause, it won’t tell you how to fix it, but it would be a starting point
Right now I have to decide whether this project is worth the pain and humiliation I’ve felt here over the last few days. When the idea came up whilst discussing the underlying problem with some equally minded friends, I described how (in my former career) I would tackle such problems by having a simulation created.
It was then that one of them pointed me at your site and the community accounts, and suggested I “knock up a few simulations” to explore the ideas we’d had to resolve the issue. I failed to explain that mostly I would produce a CAD of the part(s) and then hand those over to a guy (Dassault Systèmes trained simulations engineer) who constructed and ran the simulations and post-processed the results to according to my description of what I wanted to see.
I think I found the reason for that. I believe you were looking in “Static” rather than “Copy of static”.
But no matter, it’s irrelevant now.
Can you explain how you discovered those differences?
I see you also added constraints to simulate the frame and nut. Thank you.
It was my intention to add these, but I’ve been trying to add one thing at a time and if it breaks, back it out and rethink.
A technique I use when developing software, but it doesn’t seem to work for this. It seems that you have to have all the constraints in place – but not too many – else the simulation fails for reasons of the matrix being singular or divergent or produces numbers internally that cause it to choke.
It feels like you need to jump from ‘new born’ simulator to expert; able to define (and understand how to define) every constraint otherwise Code_Aster coupes les cheveux en quatre. Maybe that feeling will go away with time.
Just some thoughts.
Update: Also, I notice that your Without-Y-Movement version also fails with “Matrix is not factorisable”. Is that expected? The result of some other error I’ve made?