Tips & Tricks: OptiStruct NonLinear Analysis

Adriano_Koga
Adriano_Koga
Altair Employee
edited May 2023 in Altair HyperWorks

When dealing with NonLinear models in implicit analysis, some convergence issues might arise, as many aspects are involved and sometimes it can be very tricky.

I'd like to list here a couple of tips and tricks in order to help your NL model to run in OptiStruct:

 

NL Analysis Basics

  • NL analysis in OS can be performed as NL quasi-static (small or large displacement). To control if small (default) or large displacement is used, you can use PARAM,LGDISP,(0 for Small, 1 for Large). Another way is to use accordingly the NLPARM (nonlinear parameters) in the loadstep definition, where NLPARM(LGDISP) enables large displacement.
  • Also NL Transient analysis is available for dynamic nonlinear problems.
  • NL analysis is performed by applying small load increments, until at some point 100% of the load is applied. It can start at 10% for example, and then go to 20%, 30%,...100%. Depending on the setup, OS will automatically increase or decrease (cutback) the load increment.

 

NL convergence controls

  • The NLPARM load collector is mandatory for any NL analysis, and it mainly controls the initial load increments (DT or NINC) and convergence criterea (ESPU, EPSP, EPSW). These convergence controls can be checked in the .out file, for each load increment.
  • By default, OptiStruct saves only the final load increment of your NL analysis. To save more intermediate results, you need to create a load collector NLOUT, and use the NINT parameter to define how many steps are desired to be saved. Most recent versions have some other options, such as save ALL load increments, or at some specific load increments. The NLOUT load collector need to be referenced inside your NL loadstep to be active. NLOUT also has an option called SVNONCV, which means 'save non-convergent increment'. In case your model didn't convergem you will be able to see the last increment at least.
  • Convergence issues may arise from many different sources, such as model not properly constrained, or sometimes some rotation DOF not constrained, poor contact definition, etc. For verifying some of the most common issues, add the control card, PARAM,NLMON,DISP. This will write 2 additional files (modelname_nl.H3D, modelname_nl.out) while the model is running. These 2 files show more in details how the model behaves and you can check if there's something going on that is causing the convergence issue. Also the nl.out file shows in details the nodes that show higher NL errors, or higher pressure forces. These usually show where the model has more difficulty in converging.
  • To have a better control over the load increments, NLADAPT card can be used. NLADAPT is tipically used in LGDISP analysis, and it enables control over minimum and maximum increments (DTMIN and DTMAX), and maximum number of cutbacks allowed (NCUTS). Controlling DTMAX is useful in cases that you know that need a more controlled load increment to converge, such as finite sliding contacts. It limits the maximum load increment to a certain value, avoiding a step too large, that might cause the solver to go back and forth and slow down the analysis evolution. NCUTS controls the maximum number of successive cutbacks allowed by OS. The default is 5 cutbacks in a row. Cutback is the need of decrease in the load increment, when the solver tries to apply a load increment and it does not converge. Cutbacks indicate some hard time for convergence. There are also NOPCL and NSTSL. These control number of change in Open and Close contacts, and Stick Slip transition, respectively. Limiting these changes might facilitate convergence sometimes.

 

NL Contacts

  • For problems that involve contact, the CNTSTB load collector or the control card PARAM,EXPERTNL,CNTSTB might help. These are used for Contact Stabilization, and they add some stiffness to your model specially for cases where your parts are only connected by the contact. In these cases, in general, using a smaller initial load increment is recommended, as the solver needs to capture this change in stiffness due to the contact. CNTSTB helps your model convergence by adding artificial stiffness at the beginning of your loadstep, and as it converges, this energy is reduced. As it is an artificial numeric stiffness, it should be used with caution.
  • For checking contact forces or status, the output card CONTF can be requested. CONTF will provide contact forces in your contact areas, and allows you to check how your contact is working. CONFT(H3D) will provide visuallly your contact status and forces. CONTF(OPTI) provides you and ASCII(text) file with some summarized information, such as sum of contact forces by group, contact area, etc.
  • For contacts, there are: Small, Finite, Continuous Sliding Tracking models. Small sliding is computationally cheaper, as the contact pairs are only calculated once, and kept the same until the end of the loadstep. It can be used in cases where you don't expect a large sliding between your parts, and the contact region is kept the same. If your contact region changes along your simulation (gear teeth, for example), then finite or continuous sliding should be prefered. These are a little bit more expensive, as they recalculate the contact pairs and stiffness at each increment and iteration, respectively. In this case, they allow more freedon in contact representation, as contact regions may be changed along your simulation.
  • There are some predefined contact models: FREEZE, SLIDE or STICK. FREEZE contact considers a "zero relative displacement" between contact pairs, as if they were glued together. FREEZE can be used both in linear and NL analysis. SLIDE assumes zero friction between the contact pairs. It may be used in both linear and NL, but in linear analysis there is no contact opening or closing, as the status is defined based on the initial condition. STICK condition allows the contact pair to open and close, but when it closes, it creates some sticking between the parts, that are not allowed to move/slide. Additionally, a friction coefficient MU can be prescribed, for NL analysis.
  • Contacts are defined by a Master and Slave relationship. The master surface will search for the slave nodes, and once they are "found", a projection is created from the slave to the master. Usually, the master surface is the coarse mesh, and the slave is the finer mesh.
  • For more options in contact definitions, a PCONT property can be associated to your contact. PCONT allows you to control, for example, contact stiffness. For some problems, depending on your material properties for the parts in contact, the contact pressure can get to high and cause some convergence issue. This might happed, for example, if your master has a very stiff material, and your slave has a very soft material. In this case, a large contact pressure may be found and it may deform the soft elements, causing some excessive element distortion and convergence issues. You can change contact stiffness in PCONT, from AUTO, SOFT or HARD, or define your value. SOFT usually helps in many cases, with a smaller contact force, but it might also bring some non-realistic penetration.
  • Sometimes when we mesh our parts, the mesh does not represent perfectly our geometry and some imperfections might arise, that can cause an irregular contact distribution. The option CLEARANCE might help to get a more uniform contact, as it ignores the node-to-node distance of your mesh and assumes a fixed value for the gap between your parts. So you can prescribe a 0 clearance value, and then your parts will be perfectly matching. Also you can use a negative CLEARANCE to simulate press-fit/interference conditions. If you prescribe -2.0 for clearance, your model will work as if there was 2.0mm of interference, thus OptiStruc will push out this interference until it gets no penetration.
  • If 2nd order mesh is used with contacts, there is a special contact formulation enabled by adding the control card PARAM,CONTFEL,YES (contact friendly 2nd order elements).

 

Bolt Pretension and Sequential Loading

  • For pretension loadcases, you need to add an initial PRETENS Loadstep, and apply only the bolt pretension loads. After the pretension subcase, you can add subsequent loadcases, and add STATSUB(PRETENS) referencing the initial pretension loadcase. Pretension will carry out the pretension load to the other loadcases.
  • Additionally to pretension, you can use CNTNLSUB (continuation of NL Subcase) to carry the final condition of a NL loadcase to another NL loadcase, such as Stress and Displacements from the initial loadcase. This is necessary for any sequential loadcases where one loadstep need to continue from another loadcase (not only pretension). 
  • When using CNTNLSUB, from one step to another, the loading must be carefully defined. For example, loadstep 1 applies 1000N in Y, cause some plastic strain, and loadstep 2 is just unloading to check residual strains. In this case, NL loadstep 1 will have 1000N applied as 'LOAD', and NL loadstep 2 will have zero force applied, and CNTNLSUB enabled. In another example, Loadstep 1 applies 1000N in Y, and LoadStep 2 adds 500N in Z. For this case, NL Loadstep 1 will apply 1000N in Y, as 'LOAD', and NL LoadStep 2 will keep the 1000N in Y and add 500N in Z. So NL Loadstep 2 need to apply a combination (LOADADD) of 1000Y and 500Z, besides usage of CNLNLSUB.

 

NL material > elasto-plastic

  • For NL Material (elasto-plastic), you need to use MATS1 card (extension of your MAT1 material). The MATS1 card models elasto-plastic behavior, after Yield is achieved. You can define a bilinear behavior, providing Yield stress (LIMIT1) and hardening coefficient (H). You can alternatively provide a stress-strain curve (curve TABLES1). This curve can be provided as full stress-strain curve (TYPESTRN 0) or only the plastic stress-strain curve (TYPESTRN 1). The curve TABLES1 provides 2 columns, as strain and stress. Hardening can be represented as Kinematic, Isotropic and Mixed.
  • In the .out file maximum plastic strain values will be outputted and easily identified as the model runs. For plastic strain values below 5~7% small displacement can be still used. But for larger plastic strain values, it is necessary to enable LGDISP, as it also enables large deformations models as well.
  • Additional care must be taken when adding plasticity to some singularity areas, such as elements close to rigid elements, or some other numeric unrealistic stress areas. As these areas tend to concentrate stress, and it rises very quickly, also yield is often reached easily and some large plasticity may be present, which can lead to poor convergence in some cases.

 

Restart

  • For some nonlinear model, one useful feature is RESTART. RESTART allows you to continue a NL analysis from a certain point. This might be useful when your machine powers down for some reason and you don't want to start from the beginning. In other cases, you have run a pretension loadcase, and now you want to restart with an additional load after pretension. For both cases, you need to request from the beginning RESTARTW (writes the restart files), and then when restarting, add RESTARTR (reads the restart files and continues from the last restart).

 

That's all for now. I hope this helps a little bit some of you.

Comments

  • Jounihuo
    Jounihuo Altair Community Member
    edited June 2021

    It seems OptiStruct sometimes ignores NLPARM NINC or in NLOUT NINT. Is there some cards which overwrite these or some other combinations one should use?

  • Adriano_Koga
    Adriano_Koga
    Altair Employee
    edited June 2021

    It seems OptiStruct sometimes ignores NLPARM NINC or in NLOUT NINT. Is there some cards which overwrite these or some other combinations one should use?

    NLPARM NINC defines only the initial increment number for NL. If NINC = 10, then the initial increment is set to 0.1 (10%).

    As usually some adjustments are performed by the solver, the increment might increase or decrease according to the evolution of the analysis.

    You could force OS to keep the increment, by using NLADAPT DTMAX 0.1, and then the maximum increment allowed would be 0.1.

     

    NLOUT NINT also defines a target number of increments to be written to the H3D file. But if your analysis converges with less than NINT, the results will have less increments as well.

    If you want to force some specific points, there is a new option inside NLOUT, TIME, where you specify a SET of type TIME with the desired output intervals.

  • Adriano_Koga
    Adriano_Koga
    Altair Employee
    edited July 2021

    It seems OptiStruct sometimes ignores NLPARM NINC or in NLOUT NINT. Is there some cards which overwrite these or some other combinations one should use?

    NLPARM NINC defines only the initial increment number for NL. If NINC = 10, then the initial increment is set to 0.1 (10%).

    As usually some adjustments are performed by the solver, the increment might increase or decrease according to the evolution of the analysis.

    You could force OS to keep the increment, by using NLADAPT DTMAX 0.1, and then the maximum increment allowed would be 0.1.

     

    NLOUT NINT also defines a target number of increments to be written to the H3D file. But if your analysis converges with less than NINT, the results will have less increments as well.

    If you want to force some specific points, there is a new option inside NLOUT, TIME, where you specify a SET of type TIME with the desired output intervals.

    example of user specified output for NLOUT using TIME option.

  • Nicolas KINDT
    Nicolas KINDT Altair Community Member
    edited June 2022

    Is there a way of editing the .h3d file at each loadstep during the calculation process ?

    (Not only at final iteration)

  • Adriano_Koga
    Adriano_Koga
    Altair Employee
    edited June 2022

    Is there a way of editing the .h3d file at each loadstep during the calculation process ?

    (Not only at final iteration)

    Do you mean viewing the result file on the fly?

    If yes, you can request the card

    PARAM,IMPLOUT,YES alongside with NLOUT

     

    this will write an additional result file while your analysis is running, and you can open it in HyperView and check if your analysis is doing well.