Welcome to the forums. Please post in English or French.

You are not logged in.

#1 2011-11-14 12:45:37

pilafa
Member
Registered: 2011-08-26
Posts: 124

[SOLVED] "metal forming" contact problem with shell elements

Hi. 

I have an interesting contact problem. It is similar to the one disused there:
http://www.code-aster.org/forum2/viewtopic.php?id=14558
I basically try to do the same, using a different modelization. 

It is a "metal forming" contact problem. In the image, you see the 3 parts of the problem:
1) The "moving" mold, made of 9 nodes shell elements
2) The plate to deform, made of 3D brick elements
3) The "fixed" mold

I also have a soft spring on the plate to fix the rigid translation in the "Y" direction.

(Note that I first ran a linear simulation without contact. The "moving mold" is going down (passing trough the plate), and the plate is stable. Good.)   

I use shell elements for the mold simply because this part is "rigid", and I thought that could save computing time (first mistake??). 
For the same reason, I modelized the parts with zero gap between them (second mistake??).

My idea was to use the CONTACT_INIT='OUI' option, but this option works only for the formulation 'CONTINUE', and this kind of contact is not available yet for shell elements. 

So, do you think that is a problem to modelize the parts in contact with a zero gap, without using an "initial contact"?
Do you think it should be better to use solid elements instead of shell?

Thanks,
Pierre

Last edited by pilafa (2011-11-14 12:47:40)


Attachments:
cast.jpg, Size: 34.86 KiB, Downloads: 713

Offline

#2 2011-11-14 13:34:29

pierre_j
Member
Registered: 2010-01-19
Posts: 773

Re: [SOLVED] "metal forming" contact problem with shell elements

Hi Pilafa,

You should have a look at model "solidV_72.7z" posted in this thread.

I also managed to build a model with all non linearities that works, but took 2 months to compute.
Because of the large file sizes, I was not able to retrieve the results (: .

Still, here is the model (you can use the same med file than with solidV_72: it will work.

I have to re-try next year with CA11.1 to see if computation times are reduced: that would be interesting smile.

To answer your questions:

I use shell elements for the mold simply because this part is "rigid", and I thought that could save computing time (first mistake??).

It is a good assumption.
It would be better to see how you really do it in CA.
AFFE_CHAR_CINE?
The thing is there is not a single formalised way to model a rigid body in CA.

For the same reason, I modelized the parts with zero gap between them (second mistake??).

No, it is not a mistake (see my model).

My idea was to use the CONTACT_INIT='OUI' option, but this option works only for the formulation 'CONTINUE', and this kind of contact is not available yet for shell elements.

Yes it is, but shell elements are not compatible with large deformations, so it is better not to tuse them for metal forming.
Anyway you don't have to declare "shell elements" but "3D" elements, even if they are shells: it will work because they are only used for contact definitions.

So, do you think that is a problem to modelize the parts in contact with a zero gap, without using an "initial contact"?

Awkward question: it depends if you use CONTINUE or DISCRETE.
With CONTINUE, it is indeed better to use CONTACT_INI=OUI

Do you think it should be better to use solid elements instead of shell?

No, it is fine to use shell, and interesting to have solid elements to be sure about shell orientation (the same way I do in my model).

Have a good day Pilafa.
Bests,

Pierre


Attachments:
solidV_200.comm, Size: 20.62 KiB, Downloads: 529

Offline

#3 2011-11-15 18:43:57

pilafa
Member
Registered: 2011-08-26
Posts: 124

Re: [SOLVED] "metal forming" contact problem with shell elements

Hi Pierre,

Thank you very much, now it's running well. Indeed, I modified only two things, and now convergence is pretty fast (while before it was impossible to converge...)

1) SHELL ====> PLATE
I changed the 9 nodes shell elements (coque_3D) to plate elements (DKT). I had chosen shell elements because they have non-linear capacity. That was I bad choice. Since I want the mold to be rigid, I don't mind about the strain-stress in those elements.

2) contact formulation: DISCRET ====> CONTINUE

I thought that "discret" was most robust, but apparently not. And the "continue" formulation allows to define an initial contact. 

Thanks again!
Pierre


Attachments:
contact.png, Size: 19.53 KiB, Downloads: 544

Offline

#4 2011-11-16 07:15:58

pierre_j
Member
Registered: 2010-01-19
Posts: 773

Re: [SOLVED] "metal forming" contact problem with shell elements

Hi Pilafa,

Please, could you send your own working model?
I would like to compare it with the one I sent.

Do you consider non linear material?
If not, I can understand that it is "pretty fast".
If yes, I would love to know how you get "pretty fast" simulation smile.

Have a good day.
Bests,

Pierre

Last edited by pierre_j (2011-11-16 07:16:24)

Offline

#5 2011-11-16 11:08:20

pilafa
Member
Registered: 2011-08-26
Posts: 124

Re: [SOLVED] "metal forming" contact problem with shell elements

Hi Pierre,

I put the .comm in the message and the mesh is attached.

Other comments:

- By "fast", maybe I meant that it converged "well". it's true that it is not especially "fast" wink 

- I have non-lin material. It's the last thing I added to the model, and I observed that it doesn't seem to be much longer or difficult to solve than the model with linear material.

- I don't use friction (you do)

- First, the upper mold goes down and deform the plate. Then, it goes up (it returns to it's initial position).
The deformed plate has residual plastic deformation. However, the plate doesn't stay in contact with the lower mold.
Instead, it goes up again (I'm not sure if I'm clear :S ...look at the figure attached in my last post).
I understand that this is due to the soft spring that pull the plate back.
I tried without the soft spring, but when the upper mold starts going up, I have I singular matrix (due to rigid displacements I assume...)

Don't hesitate to comment my file, and tell me if you need something else.

Pierre

This is some code.

DEBUT();


#
# PARAMETERS
#
bajada=0.081#0.005#0.081#0.005 #la descente de la matrice (ne pas mettre le signe -)
ntt=100#200#50      #number of time step
pasout=10#2

#
# MESH
#

mesh_1=LIRE_MAILLAGE(FORMAT='MED',VERI_MAIL=_F(VERIF='OUI',));

#soft spring
mesh=CREA_MAILLAGE(MAILLAGE=mesh_1,
                       CREA_POI1=_F(NOM_GROUP_MA='ps',
                                    GROUP_NO='ps',),);

# Si shell utilise:
#mesh=CREA_MAILLAGE(MAILLAGE=mesh_2,
#                    MODI_MAILLE=_F(GROUP_MA=('s1','s3',),
#                                   OPTION='QUAD8_9',),);

mesh=MODI_MAILLAGE(reuse =mesh,
                       MAILLAGE=mesh,
                       ORIE_PEAU_3D=_F(GROUP_MA=('pt','pb',),),                     
                       ); 
                       
#
# MATERIALS
#
                     
steel=DEFI_MATERIAU(ELAS=_F(E=210E9,
                         NU=0.3,),);
                         
alu=DEFI_MATERIAU(ELAS=_F(E=70E9,
                         NU=0.3,),);   

Sigmaeps = DEFI_FONCTION(NOM_PARA='EPSI',
                          VALE=(0.0016,	330e6,
                                0.0032,	350e6,
                                0.0064,	367e6,
                                0.0128,	387e6,
                                0.0200,	401e6,
                                0.0270,	410e6,
                                0.0400,	420e6,
                                0.0700,	437e6,
                                0.1000,	450e6,
                                0.1500,	473e6,
                                0.2000,	490e6,
                                0.3000,	510e6,),
                     INTERPOL='LIN',PROL_DROITE='LINEAIRE',PROL_GAUCHE='EXCLU',);

#define plastic behaviour of steel by Sigmaeps
steelnl=DEFI_MATERIAU(ELAS=_F(E=210000000000.0,NU=0.27,),
                    TRACTION=_F(SIGM=Sigmaeps,),);
                         

mat=AFFE_MATERIAU(MAILLAGE=mesh,
                  AFFE=(_F(GROUP_MA='s1',
                           MATER=steel,),
                        _F(GROUP_MA='s3',
                           MATER=steel,),   
                        _F(GROUP_MA='s2',
                           MATER=steelnl,),),);                         
                                               
#
# ASSIGN physical model and element type
#
                         
model=AFFE_MODELE(MAILLAGE=mesh,INFO=1,
                 VERIF=('MAILLE','NOEUD',),
                 AFFE=(_F(GROUP_MA='s2',
                         PHENOMENE='MECANIQUE',
                         MODELISATION='3D',),
                        _F(GROUP_MA='ps',
                           PHENOMENE='MECANIQUE',
                           MODELISATION='DIS_T',),
                        _F(GROUP_MA='s1',
                           PHENOMENE='MECANIQUE',
                           MODELISATION='DKT',),         #Checker le choix de l'element plaque!!!
                        _F(GROUP_MA='s3',
                           PHENOMENE='MECANIQUE',
                           MODELISATION='DKT',),                                                
                           ),);

#
# Real Consant
#

realcst=AFFE_CARA_ELEM(MODELE=model,
                      COQUE=(_F(GROUP_MA=('s1','s3',),
                              EPAIS=0.0003,),),             #Plate thick.                                     
                      DISCRET=_F(GROUP_MA='ps',
                                 CARA='K_T_D_N',                                                    
                                 VALE=(1.0,10.0,1.0,),),);  #K of spring

#
# ASSIGN LOADS and DDL
#                         

symme=AFFE_CHAR_MECA(MODELE=model,
                    DDL_IMPO=(_F(GROUP_NO='px',DX=0.0,),                             
                              _F(GROUP_NO='pz',DZ=0.0,),),);

dyn_bloc=AFFE_CHAR_CINE(MODELE=model,
                      MECA_IMPO=_F(GROUP_MA='s3',
                                  DX=0.0,DY=0.0,DZ=0.0,DRX=0.0,DRY=0.0,DRZ=0.0,),);

dyn_move=AFFE_CHAR_CINE(MODELE=model,
                      MECA_IMPO=_F(GROUP_MA='s1',
                                  DX=0.0,DY=-bajada,DZ=0.0,DRX=0.0,DRY=0.0,DRZ=0.0,),);                    
                                                                                                                         
#
# CONTACT
#

cont1=DEFI_CONTACT(MODELE=model,
                 LISSAGE='NON',
                 #FORMULATION='DISCRETE',
                 FORMULATION='CONTINUE',                 
 #                RESI_ABSO=1.0E-3,   #pour ALGO_CONT='GCP'                                
                 FROTTEMENT='SANS',
                 REAC_GEOM='AUTOMATIQUE',
                 ITER_GEOM_MAXI=100,
                 ZONE=(_F(GROUP_MA_MAIT='s1',
                         GROUP_MA_ESCL='pt',
                         #ALGO_CONT='CONTRAINTE',
                         CONTACT_INIT='INTERPENETRE',
                         ),
                      _F(GROUP_MA_MAIT='s3',
                         GROUP_MA_ESCL='pb',
                         #ALGO_CONT='CONTRAINTE',
                         CONTACT_INIT='INTERPENETRE',
                         ),),);

#
# SOLVE
#                                     
                                    
#resultat=MECA_STATIQUE(MODELE=model,
#                   CHAM_MATER=mat,
#                   CARA_ELEM=realcst,
#                   EXCIT=(_F(CHARGE=symme,),
#                          _F(CHARGE=dyn_bloc,),
#                          _F(CHARGE=dyn_move,),),);

LoadRamp=DEFI_FONCTION(NOM_PARA='INST',VALE=(0.0,0.0,
                                             1.0,1.0,
                                             1.5,0.5),);

timestep=DEFI_LIST_REEL(DEBUT=0.0,
                     INTERVALLE=_F(JUSQU_A=1.5,
                                   PAS=1.0/ntt,),);


incrm=DEFI_LIST_INST(DEFI_LIST=_F(METHODE='AUTO',
                                  LIST_INST=timestep,
                                  PAS_MINI=1e-6,),
                     ECHEC=_F(EVENEMENT='ERREUR',
                              SUBD_METHODE='UNIFORME',
                              SUBD_COEF_PAS_1=0.25,
                              SUBD_PAS=4,),
                     ADAPTATION=_F(EVENEMENT='SEUIL',
                                   NB_INCR_SEUIL=3,
                                   NOM_PARA='NB_ITER_NEWTON',
                                   CRIT_COMP='LE',
                                   PCENT_AUGM=100,),);
                                   
resultat=STAT_NON_LINE(MODELE=model,
                       CHAM_MATER=mat,
                       CARA_ELEM=realcst,
                       EXCIT=(_F(CHARGE=symme,),
                              _F(CHARGE=dyn_bloc,),
                              _F(CHARGE=dyn_move,FONC_MULT=LoadRamp),),
                      COMP_INCR=(_F(RELATION='ELAS',
                                    DEFORMATION='PETIT',
                                    TOUT='OUI',), 
                                 _F(RELATION='VMIS_ISOT_TRAC',
                                     DEFORMATION='SIMO_MIEHE',							 
                                     GROUP_MA='s2',),),                                                                       
                       INCREMENT=_F(LIST_INST=incrm,),    
                       NEWTON=_F(
                                 PREDICTION='TANGENTE',  #OJO 
                                # PREDICTION='ELASTIQUE',  #OJO
                                 MATRICE='TANGENTE',
                                 REAC_ITER=1,),
                       CONVERGENCE=_F(RESI_GLOB_RELA=1e-05,ITER_GLOB_MAXI=200,),    #
                       CONTACT=cont1, 
                       SOLVEUR=_F(METHODE='MULT_FRONT'),    #OJO                                        
                       ARCHIVAGE=_F(PAS_ARCH=pasout,),);

#
# POSTPROC
#


resultat=CALC_ELEM(reuse = resultat,
                 RESULTAT=resultat,
                 TOUT_ORDRE = 'OUI',
                 INFO=2,
                 TYPE_OPTION='TOUTES',
                 OPTION=('EPSI_ELNO',),);                  

# calculate nodal equivalents and reaction forces
resultat=CALC_NO(reuse =resultat,
             RESULTAT=resultat,
             OPTION= ('EPSI_NOEU',),);

IMPR_RESU(FORMAT='MED',
          RESU=(_F(RESULTAT=resultat,
                  NOM_CHAM='EPSI_NOEU', GROUP_MA='s2'),
               _F(RESULTAT=resultat,
                  NOM_CHAM='DEPL',),),);
                                  
#FIN(FORMAT_HDF='OUI',);
FIN();

Attachments:
cast_shell_6.med, Size: 231.23 KiB, Downloads: 438

Offline

#6 2011-11-16 14:26:21

JMB365
Member
Registered: 2008-01-19
Posts: 781

Re: [SOLVED] "metal forming" contact problem with shell elements

pilafa wrote:

- First, the upper mold goes down and deform the plate. Then, it goes up (it returns to it's initial position).
The deformed plate has residual plastic deformation. However, the plate doesn't stay in contact with the lower mold.
Instead, it goes up again (I'm not sure if I'm clear :S ...look at the figure attached in my last post).
I understand that this is due to the soft spring that pull the plate back.
I tried without the soft spring, but when the upper mold starts going up, I have I singular matrix (due to rigid displacements I assume...)

Hello pilafa,

If you remove the springs there is nothing to hold the plate!  You have a rigid body freely floating into space, which with (or even without) the slightest touch is floating away uncontrolled, like a weightless object in outer space.

With the springs incorporated in the model, you will see the plate moving back up, but that is where you have to compromise in using soft enough springs that it does not significantly affect what you are modelling, but is sufficient enough to keep the problem numerically stable.  Another reason for this 'spring back' is commonly seen in stamping due to the linear-nonlinear portions of the stress strain curve of the material coming into play.  Hope this helps.

Regards, JMB


SalomeMeca 2021
Ubuntu 20.04, 22.04

Offline

#7 2011-11-16 14:45:22

pilafa
Member
Registered: 2011-08-26
Posts: 124

Re: [SOLVED] "metal forming" contact problem with shell elements

Hi JMB,

Yes, I understand...but I thought that the contact of the deformed plate with the lower mold could be enough.

I still think that it should work actually...If the contact with the lower mold converged, there is equilibrium of the force in 'Y' (and before that the CONTACT_INIT='INTERPENETRE' makes the job).

Anyway, like you said I just have to find the correct stiffness for the spring. It is probably easier to simulate that with the soft spring that without. 

Also:

Thomas DE SOZA wrote:

with metal forming studies, one of the difficult part is to avoid rigid body motions of the shape. If you place the shape in contact in the mesh at the first time step, then using the CONTINUE method of contact (with the keyword CONTACT_INIT='INTERPENETRE') as well as the modeling of only half of the structure you could avoid using springs (or dynamics). The X-translation will be blocked by the symmetry and the Y-translation by contact
(from http://www.code-aster.org/forum2/viewto … ?id=14558)

Thanks!
Pierre

Offline