I have searched to no avail, so hopefully this hasn't already been discussed.
This has been a major blocker to the complexity of models I have been able to put through Mecway but I think I am finally getting somewhere.
For my industry, I frequently need to build contact stacks, think of three or more parts being clamped together, sometimes this can involve fasteners with pre-tension etc. In many cases I need to use quasi-static for time-history effects (ie loading beyond yield then unloading). Getting this type of analysis to progress past the initial "extra contact step" can often be a no-go seemingly once you exceed some relatively low amount of contact complexity; the current example I have fails with too many cutbacks. I have increased the max iterations and it doesn't seem to help - the residuals are flatlining so it's not heading towards convergence anyhow.
Note: I have tried using weak springs to stabilise parts (no help). I have swept the contact stiffness up and down, usually a converged solution can be coaxed out at low contact stiffness but with silly penetration. It solves in moments as a standard, non-quasi-static, non-linear analysis with even relatively hard contact.
Turning off the extra contact step - with no other changes - means CCX goes straight into the main event's timesteps and these converge comfortably. According to a prior discussion (
https://mecway.com/forum/discussion/comment/7599#Comment_7599), the contact stiffness only reaches the prescribed stiffness at the end of the first step and this is a CCX quirk. As far as I can tell the workaround is to solve a dummy step 1 then TIMERESET, so your main event is then your Step 2, for the workaround this is what gets added to the input file ahead of the actual step:
*STEP
*STATIC,TIMERESET
*EL FILE
*END STEPIn order to get this step to ever converge in my example, I have had to resort to turning on "no extra contact step" so the above is not added, then adding a replacement dummy first step to my "custom model definition".
Where node 7475 is a hand picked random node with a token force (here: 10N) in a sensible direction (here: Z) but the load is otherwise meaningless:
*STEP
*STATIC,TIMERESET
*CLOAD
7475,3,-10
*EL FILE
*END STEPThis then solves within 10 iterations and CCX happily trundles into Step 2 which also converges timesteps without too much difficulty. I have used primarily Pardiso but also tested with Pastix and the behaviour was the same, just slower.
Is this as simple as, it is difficult to converge the dummy step where there is no 'driving' input, ie force or displacement but there are parts with 'conflicting' interaction?I don't have too much more of a point than this to raise, but I have fought this extensively, found little supporting info, and hope that this information may help another.
Comments
I am familiar with your frustrations. The initial contact step was added several revisions ago because the contact condition developed "over the first load step" instead of before. This can sometimes be a problem. Without using custom inputs, a simple thing to try is to move the parts that will contact slightly into an interference condition. this gives CalculiX a chance to find itself and establish the initial contacts. I have found this to be a useful trick.
If this does not work, suppressing the initial contact step and putting your own in manually with better time stepping or other helpful initializing conditions is the right way to go.
Could the adjust parameter be responsible?
I’m missing it specially with unilateral.
I have been trying different configurations . File attached as example.
Apart from finding some combinations of master and slave more suitable than others, if the contact setting has any small gap, the contact is not stated in the first step and might not allow going further in the analysis. (I have exaggerated the gap for better visualization)
Victor, do you think it would be worth to consider the Adjust parameter as an option also for the unilateral contact behavior.?
Both cases fail but custom cards solves properly with adjust added by hand.
Somehow I thought it was already using ADJUST in all cases. When it's not, are the contact springs initially under tension? That would explain some of the convergence issues with elastic bonded contact.
1-Adjust.
2-Clearance/penetration evaluation.
3-Springs generation.
Points 2) and 3) may loop as the model evolves.
ADJUST response to Initial Geometric Penetration
(TIED)
If ADJUST parameter is present no matter what value, initial penetration is closed in a Strain free manner. Spring elements are generated but starting contact pressure is ZERO. This behavior agrees with the note on the manual.
Manual ccx 2.21: Penetration is interpreted as a negative clearance and consequently all penetrating nodes are always adjusted, no matter how small the adjustment size (which must be nonnegative).
If ADJUST is not present, Spring elements are generated, and the initial penetration is resolved as an interference fit. This do not seem to agree with the manual.
Mecway include ADJUST for TIED.
(Unilateral/LINEAR)
If ADJUST parameter is present no matter what value, initial penetration is closed in a Strain free manner. Spring elements are generated but starting contact pressure is ZERO. This behavior agrees with the note on the manual.
Manual ccx 2.21: Penetration is interpreted as a negative clearance and consequently all penetrating nodes are always adjusted, no matter how small the adjustment size (which must be nonnegative).
HARD TO MAKE IT CONVERGE depending on the BC. Here a dummy load makes a difference.
If ADJUST is not present, Spring elements are generated, and the initial penetration is resolved as an interference fit.
Mecway do not include ADJUST for Unilateral
(TIE)
"MPC’s are generated connecting the slave nodes with the master faces, provided the orthogonal distance between the nodes and the adjacent face do not exceed the POSITION TOLERANCE"
If no tolerance is specified, or the tolerance is smaller than 10−10, a default tolerance applies equal to 2.5% of the typical element size.
"Nodes which are connected are automatically adjusted, i.e. the position of the slave nodes is modified such that they lie exactly on the master surface, unless ADJUST=NO was specified by the user."
Irrespective of whether there is adjustment and regardless of the boundary conditions, no stresses are generated during the materialization of the TIE contact.
ADJUST response to Initial Geometric Clearance
All nodes in the set are adjusted at the start of the calculation. If a real number is specified, all nodes for which the clearance is smaller or equal to this number are adjusted.
(TIED)
ADJUST bigger than Initial Clearance: Gap is closed in a Strain Free manner. Spring elements are generated but starting contact pressure is ZERO.
ADJUST=0,No ADJUST parameter or ADJUST smaller than Initial Clearance : Not Adjusted. Spring elements are generated. Contact stresses may emerge depending on BC. It's value (Stresses) will depend on Contact Stiffness and Initial clearance.
(Unilateral/LINEAR)
ADJUST bigger than Initial Clearance: Gap is closed in a Strain Free manner. Spring elements are generated but starting contact pressure is ZERO.
ADJUST=0,No ADJUST parameter or ADJUST smaller than Initial Clearance : Not Adjusted. Spring elements are NOT generated.
(TIE)
"MPC’s are generated connecting the slave nodes with the master faces, provided the orthogonal distance between the
nodes and the adjacent face do not exceed the POSITION TOLERANCE"
If no tolerance is specified, or the tolerance is smaller than 10−10, a default tolerance applies equal to 2.5% of the typical element size.
"Nodes which are connected are automatically adjusted, i.e. the position of the slave nodes is modified such that they lie exactly on the master surface, unless ADJUST=NO was specified by the user."
Irrespective of whether there is adjustment and regardless of the boundary conditions, no stresses are generated during the materialization of the TIE contact.
*CONTACT PAIR,INTERACTION=SI_1255,TYPE=SURFACE TO SURFACE
Pad_Rotor_ContactFace,Rotor_Pad_ContactFace
*SURFACE INTERACTION,NAME=SI_1255
*SURFACE BEHAVIOR,PRESSURE-OVERCLOSURE=LINEAR
150000000000
*FRICTION
0.4,150000000000
These are modelled as "zero clearance" but obviously there can be some very small rounding error.
What is interesting is that I have two parallel contact stacks in a model, adding a token force in the dummy first step to just one of them and not changing the other is an effective fix. If it was struggling to solve any and all elastic contact that is not adjusted, I wouldn't have thought my fix would be effective.
That can be done with modify Keyword without the need to rewrite the contact.
NOTE: That will affect all the contacts if you have more than one.
Is that token force normal to the contact plane?
If that’s the case the reason why the dummy force also works could be different. Anyway it’s good to know there are different workarounds.
1) Baseline - no customisations in the CCX tree other than specifying Pardiso solver. After some incidental modifications this one does converge eventually - 60 iterations.
2) ADJUST=0.1 with the default extra contact step on. This one also got there in the end after 47 iterations.
3) No ADJUST=, with the default extra contact step off, and my previously discussed dummy initial step with token force. 16 iterations.
4) I also tried the burger with the lot, ADJUST=0.1, extra contact step switch off, dummy initial step with token force. Results identical to (3) above.
Sorry I can't share liml files unless I build a non commercial in confidence test example.
Even if the contact is achieved with ADJUST as mine (Number of contact spring elements=672) the convergence can fail if the model is under constrain.
Adding the small force makes some friction to emerge (nu*P). That can only be appreciated if you add NLGEOM to the first Extra Step to see what is going on there. (I have added it.See Vid)
If I make this an input, would you say there's any value in allowing arbitrary distances or just ADJUST= NO/0/huge AKA never/initial penetration only/always.
Another way to do the initial contact step which avoids the issue of converging too slowly or not at all. Use *HEAT TRANSFER instead of *STATIC. It doesn't require any thermal material properties or temperature constraints, and never iterates so it's fast and hopefully can't fail. However, if there are beam elements, it messes up the subsequent *STATIC step.
I didn't have more explicit constraints and there's a good chance what you have illustrated with your sample is responsible. I'll have a play with the model tonight to compare.
And, I will also try Victor's idea of a heat transfer dummy step. Knocking a few minutes of pointless iteration off the front of every model run is pretty appealing.
@Victor: my preference would be no/0/user input, as it would be nice to retain the ability to have a round pin in round hole simulation where initial tangential contact is adjusted, but subsequent nodes outside a distance are left alone to have clearance initially and only strike up a spring in later timesteps once deformation has occurred.
A huge default value and an explanatory tooltip, perhaps?
I have edit and rewrite my previous summary. Hopefully, it is more clear and not so model specific and more accurate.
It only refers to the creation of the contact itself and how ADJUST affects the result at the end of the first extra step.
I’m finding something that seems to contradict the manual.
In case of initial penetration, TIED and LINEAR are supposed to adjust always providing a zero-contact pressure state ready for the second step. No matter how small value of Adjust.
But…, if the ADJUST parameter IS NOT PRESENT, the spring elements are created and the contact is resolved similar to an interference fit generating contact stress.
Mecway add ADJUST to TIED but not to LINEAR so now, all unilateral contacts would resolved small initial penetrations in the geometry as interference fits.
Is that token force normal to the contact plane?
If that’s the case the reason why the dummy force also works could be different. Anyway it’s good to know there are different workarounds.
Yes, in the comparison I ran, turning ADJUST on did reduce the iterations to converge, but not as much as the dummy force.
Yes, the token force is normal to the contact plane.
I have just tested the same token force (10N) normal to the contact plane on both contact stacks and the number of contact springs is stable from the second iteration onwards, with convergence in 5 iterations.
Out of curiosity, I then reduced friction coefficients to zero and retained the dummy force. NLGEOM on. It ~should~ be under-constained and fail to converge but bizarrely, the dummy step converged in 4 iterations, so better again. More on this later!
I then also removed the token force. Much worse - no convergence and 'chattering' displacement correction indicative of rigid body motion.
I tested the HEAT TRANSFER step, PASTIX=52 seconds to get through the dummy step, PARDISO=40. Neat!
Even if the contact is achieved with ADJUST as mine (Number of contact spring elements=672) the convergence can fail if the model is under constrain.
Adding the small force makes some friction to emerge (nu*P). That can only be appreciated if you add NLGEOM to the first Extra Step to see what is going on there. (I have added it.See Vid)
It is an accurate simplified representation, yes. But it has some odd behaviour, so I started testing:
I turned off all forces and friction in your example model and turned off the ADJUSTs; no issues, no movement.
Then, I turned on the ADJUSTs. This should be a strain free movement of nodes, but seemingly it is "untidy" and the settling of the springs generates small forces and tiny displacements, no big deal though:
I turned the friction back on. Here the weirdness begins! A long difficult solve, with unexplained rigid body movement:
Then, the token force is restored and all is well again:
Finally, I turned the traction force back on and with both active, convergence is easy, results are as expected, no rigid body motion.
Turn friction back off again and the relatively large traction force deforms the elements, assymetric forces are generated and rigid body motion is back (sensible). No convergence.
Conclusion: The initial step is difficult to converge where friction is "present" but a normal force is not, due to unexpected rigid body motion.
I’m finding something that seems to contradict the manual.
In case of initial penetration, TIED and LINEAR are supposed to adjust always providing a zero-contact pressure state ready for the second step. No matter how small value of Adjust.
But…, if the ADJUST parameter IS NOT PRESENT, the spring elements are created and the contact is resolved similar to an interference fit generating contact stress.
Mecway add ADJUST to TIED but not to LINEAR so now, all unilateral contacts would be resolved as interference fits in case of small penetrations in the geometry.
I agree the manual is not explicit about this, but given the statement that all penetrating nodes are always adjusted is within the ADJUST section, with ADJUST keyword not present, the moving of nodes may not be performed at all. With ADJUST on, any overclosure is eliminated. The real number parameter seemingly relates only to clearance hence the comment 'no matter how small'.