Difference between revisions of "Contrib:Johnnygeling/springplate"

From CAELinuxWiki
Jump to: navigation, search
('''The model''')
m ('''coque_3d''')
Line 27: Line 27:
 
==='''coque_3d'''===
 
==='''coque_3d'''===
  
Read mesh file off 'bladveer' component
+
There are three mesh-files to be read, for each component one.
 +
 
 +
Read mesh file of 'bladveer' component
  
 
  bladveer=LIRE_MAILLAGE(UNITE=20,
 
  bladveer=LIRE_MAILLAGE(UNITE=20,
Line 34: Line 36:
  
  
Read mesh file off 'drive' component
+
Read mesh file of 'drive' component
  
 
  drive=LIRE_MAILLAGE(UNITE=21,
 
  drive=LIRE_MAILLAGE(UNITE=21,
Line 41: Line 43:
  
  
Read mesh file off 'wall' component
+
Read mesh file of 'wall' component
  
 
  wall=LIRE_MAILLAGE(UNITE=22,
 
  wall=LIRE_MAILLAGE(UNITE=22,
Line 68: Line 70:
 
                                     OPTION='QUAD8_9',),);
 
                                     OPTION='QUAD8_9',),);
  
Orientation off the surfaces:
+
Orientation of the surfaces:
 
  meshQ=MODI_MAILLAGE(reuse =meshQ,
 
  meshQ=MODI_MAILLAGE(reuse =meshQ,
 
                     MAILLAGE=meshQ,
 
                     MAILLAGE=meshQ,
Line 90: Line 92:
 
                           PHENOMENE='MECANIQUE',
 
                           PHENOMENE='MECANIQUE',
 
                           MODELISATION='COQUE_3D',),);
 
                           MODELISATION='COQUE_3D',),);
 +
 +
Boundary conditions of fixed elements:
  
 
  randvw3=AFFE_CHAR_CINE(MODELE=model,
 
  randvw3=AFFE_CHAR_CINE(MODELE=model,
Line 101: Line 105:
 
                                   _F(GROUP_MA=('f_reac_c','f_bladv',),
 
                                   _F(GROUP_MA=('f_reac_c','f_bladv',),
 
                                       DZ=0.0,),),);
 
                                       DZ=0.0,),),);
 +
 +
Contact definitions:
  
 
  cont1=AFFE_CHAR_MECA(MODELE=model,
 
  cont1=AFFE_CHAR_MECA(MODELE=model,
Line 121: Line 127:
 
                                   TOLE_APPA=0.01,
 
                                   TOLE_APPA=0.01,
 
                                   REAC_GEOM='AUTOMATIQUE',),),);
 
                                   REAC_GEOM='AUTOMATIQUE',),),);
 +
 +
Load condition. In this case f_drive is moved 7mm downwards
 
   
 
   
 
  load=AFFE_CHAR_MECA(MODELE=model,
 
  load=AFFE_CHAR_MECA(MODELE=model,
Line 127: Line 135:
 
                                 DY=-0.007,
 
                                 DY=-0.007,
 
                                 DZ=0.0,),);
 
                                 DZ=0.0,),);
 +
 +
Thickness and orientation of shell elements:
 
   
 
   
 
  shell=AFFE_CARA_ELEM(MODELE=model,
 
  shell=AFFE_CARA_ELEM(MODELE=model,
 
                       COQUE=_F(GROUP_MA=('f_wall','f_bladv','f_drive',),
 
                       COQUE=_F(GROUP_MA=('f_wall','f_bladv','f_drive',),
 
                               EPAIS=0.0003,),);
 
                               EPAIS=0.0003,),);
 +
 +
Direction of load curve:
  
 
  LinRamp=DEFI_FONCTION(NOM_PARA='INST',VALE=(0.0,0.0,
 
  LinRamp=DEFI_FONCTION(NOM_PARA='INST',VALE=(0.0,0.0,
 
                             1.0,1.0,
 
                             1.0,1.0,
 
                             ),PROL_DROITE='LINEAIRE',PROL_GAUCHE='LINEAIRE',);
 
                             ),PROL_DROITE='LINEAIRE',PROL_GAUCHE='LINEAIRE',);
 +
 +
Loadstep. Load of 7mm is divided into small steps. In this case each load step is 7mm * 0.05/1 = 0,35mm
  
 
  List=DEFI_LIST_REEL(DEBUT=0.,
 
  List=DEFI_LIST_REEL(DEBUT=0.,
 
                     INTERVALLE=_F(JUSQU_A=1.0,
 
                     INTERVALLE=_F(JUSQU_A=1.0,
 
                                   PAS=0.05,),);
 
                                   PAS=0.05,),);
 +
 +
The non-linear calculation:
  
 
  Resu=STAT_NON_LINE(MODELE=model,
 
  Resu=STAT_NON_LINE(MODELE=model,

Revision as of 14:58, 2 May 2010

Sheetmetal spring with contact (shell elements with contact)

under construction (johnnygeling 10:09, 17 April 2010 (CEST))

Introduction

This contribution mainly focuses on the use of Salome, Code Aster and particular howto deal with shell elements and contact. So I do not focus on the results and the mechanical justifications of the code that has been used. So no guarantee that the results will be correct up to five decimal places, which they are probably not. I do hope though that this information is useful. For me it has been, because I had to think about some commands and look through the documentation and learn from that. In case of mistakes, errors or remarks, please notify me, or better, you are invited to correct or edit them yourself. Enjoy.

The geometry

The geometry and the mesh of the construction

The description of this problem is shown in the picture:

Shell spring problem description.png

The mesh

The mesh is divided in three components:

  • drive
  • bladveer
  • wall

The assemble mesh is shown:

Mesh assy.png

The model

The .comm files:

coque_3d

There are three mesh-files to be read, for each component one.

Read mesh file of 'bladveer' component

bladveer=LIRE_MAILLAGE(UNITE=20,
                       FORMAT='MED',
                       VERI_MAIL=_F(VERIF='OUI',),);


Read mesh file of 'drive' component

drive=LIRE_MAILLAGE(UNITE=21,
                    FORMAT='MED',
                    VERI_MAIL=_F(),);


Read mesh file of 'wall' component

wall=LIRE_MAILLAGE(UNITE=22,
                   FORMAT='MED',
                   VERI_MAIL=_F(),);


Assemble 2 meshes into a temporary mesh:

temp_m=ASSE_MAILLAGE(MAILLAGE_1=bladveer,
                     MAILLAGE_2=drive,
                     OPERATION='SUPERPOSE',);


Assemble the temporary mesh with the last mesh:

mesh=ASSE_MAILLAGE(MAILLAGE_1=temp_m,
                   MAILLAGE_2=wall,
                   OPERATION='SUPERPOSE',);


Transform the quad mesh with 8 node into a quad mesh with 9 nodes:

meshQ=CREA_MAILLAGE(MAILLAGE=mesh,
                    MODI_MAILLE=_F(TOUT='OUI',
                                   OPTION='QUAD8_9',),);

Orientation of the surfaces:

meshQ=MODI_MAILLAGE(reuse =meshQ,
                    MAILLAGE=meshQ,
                    ORIE_NORM_COQUE=_F(GROUP_MA=('f_wall','f_reac_c',),),);

Define material properties. (Be aware of the units of the mesh)

staal=DEFI_MATERIAU(ELAS=_F(E=2.1E11,
                            NU=0.3,),);

Apply material to domain:

Appl_mat=AFFE_MATERIAU(MAILLAGE=meshQ,
                       AFFE=_F(TOUT='OUI',
                               MATER=staal,),);

Create model:

model=AFFE_MODELE(MAILLAGE=meshQ,
                  VERIF=('MAILLE','NOEUD',),
                  AFFE=_F(TOUT='OUI',
                          PHENOMENE='MECANIQUE',
                          MODELISATION='COQUE_3D',),);

Boundary conditions of fixed elements:

randvw3=AFFE_CHAR_CINE(MODELE=model,
                       MECA_IMPO=(_F(GROUP_MA=('f_wall','f_fix_1',),
                                     DX=0.0,
                                     DY=0.0,
                                     DZ=0.0,
                                     DRX=0.0,
                                     DRY=0.0,
                                     DRZ=0.0,),
                                  _F(GROUP_MA=('f_reac_c','f_bladv',),
                                     DZ=0.0,),),);

Contact definitions:

cont1=AFFE_CHAR_MECA(MODELE=model,
                     CONTACT=(_F(METHODE='CONTRAINTE',
                                 GROUP_MA_MAIT='f_drive',
                                 GROUP_MA_ESCL='f_load_c',
                                 APPARIEMENT='MAIT_ESCL',
                                 LISSAGE='NON',
                                 NORMALE='MAIT',
                                 TYPE_APPA='PROCHE',
                                 TOLE_APPA=0.01,
                                 REAC_GEOM='AUTOMATIQUE',),
                              _F(METHODE='CONTRAINTE',
                                 GROUP_MA_MAIT='f_wall',
                                 GROUP_MA_ESCL='f_reac_c',
                                 APPARIEMENT='MAIT_ESCL',
                                 LISSAGE='NON',
                                 NORMALE='MAIT',
                                 TYPE_APPA='PROCHE',
                                 TOLE_APPA=0.01,
                                 REAC_GEOM='AUTOMATIQUE',),),);

Load condition. In this case f_drive is moved 7mm downwards

load=AFFE_CHAR_MECA(MODELE=model,
                    DDL_IMPO=_F(GROUP_MA='f_drive',
                                DX=0.0,
                                DY=-0.007,
                                DZ=0.0,),);

Thickness and orientation of shell elements:

shell=AFFE_CARA_ELEM(MODELE=model,
                     COQUE=_F(GROUP_MA=('f_wall','f_bladv','f_drive',),
                              EPAIS=0.0003,),);

Direction of load curve:

LinRamp=DEFI_FONCTION(NOM_PARA='INST',VALE=(0.0,0.0,
                            1.0,1.0,
                            ),PROL_DROITE='LINEAIRE',PROL_GAUCHE='LINEAIRE',);

Loadstep. Load of 7mm is divided into small steps. In this case each load step is 7mm * 0.05/1 = 0,35mm

List=DEFI_LIST_REEL(DEBUT=0.,
                   INTERVALLE=_F(JUSQU_A=1.0,
                                 PAS=0.05,),);

The non-linear calculation:

Resu=STAT_NON_LINE(MODELE=model,
                  CHAM_MATER=Appl_mat,
                  CARA_ELEM=shell,
                  EXCIT=(_F(CHARGE=randvw3,),
                         _F(CHARGE=load,
                            FONC_MULT=LinRamp,),
                         _F(CHARGE=cont1,),),
                  COMP_INCR=_F(RELATION='ELAS',
                               DEFORMATION='REAC_GEOM',),
                  INCREMENT=_F(LIST_INST=List,
                               PRECISION=1.E-6,),
                  CONVERGENCE=_F(RESI_GLOB_MAXI=1.E-4,
                                 RESI_GLOB_RELA=1.E-4,
                                 ITER_GLOB_MAXI=30,
                                 TYPE='PIC',),
                  SOLVEUR=_F(METHODE='MULT_FRONT',
                             SYME='OUI',),
                  METHODE='NEWTON',
                  NEWTON=_F(REAC_INCR=1,
                            PREDICTION='TANGENTE',
                            MATRICE='TANGENTE',
                            REAC_ITER=1,
                            REAC_ITER_ELAS=1,),);
IMPR_RESU(FORMAT='MED',
         UNITE=80,
         RESU=_F(MAILLAGE=meshQ,
                 RESULTAT=Resu,
                 INFO_MAILLAGE='OUI',
                 TOUT_CHAM='OUI',),);
FIN();

dkt

contact

Result