Difference between revisions of "Contrib:KeesWouters/shellsolid/liaisonmail"

From CAELinuxWiki
Jump to: navigation, search
m (''Results'')
(''Connecting shells and solid elements by liaison_mail'')
 
(25 intermediate revisions by one other user not shown)
Line 1: Line 1:
 
==''Connecting shells and solid elements by liaison_mail''==
 
==''Connecting shells and solid elements by liaison_mail''==
  
['''under construction .... not finished yet ... ''']
+
['''under construction .... not finished yet ... but usable''']
  
 
To start with, this contribution mainly focuses on the use of Salome and Code Aster, not 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 the fifth
 
To start with, this contribution mainly focuses on the use of Salome and Code Aster, not 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 the fifth
 
decimal place, which they are 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.
 
decimal place, which they are 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.
  
I ''stole'' a lot of ideas from the CaeLinux and Code Aster forums. So thank you for all who posted on this topic. This contribution is based on the examples ssls101m and ssls101m in the ''atest'' directory. You can have a glance there as well.
+
I ''stole'' a lot of ideas from the CaeLinux and Code Aster forums. So thank you for all who posted on this topic. This contribution is based on the examples ssls101m and ssls101m in the ''astest'' directory. You can have a glance there as well.
  
 
The following cases have been compared:
 
The following cases have been compared:
Line 26: Line 26:
  
  
As usual the geometry is quite simple, in order not to introduce other difficulties. The first part consists of a ''beam'' of height 23 [mm] and a cross section of 3*8 [mm2]. This part is modeled by solid elements. On top of this another ''beam'' of height 17 [mm] is added. The width of this beam is 8 [mm]. This part is modeled by shell elements, ie. only the 2D dimensions -height and width- are modeled here. The thickness of 1 [mm] is defined in the Aster command file.
+
As usual the geometry is quite simple, in order not to introduce other difficulties. The first part consists of a ''block'' of height 23 [mm] and a cross section of 3*8 [mm2]. This part is modeled by solid elements. On top of this a ''shell'' of height 17 [mm] is added. The width of this shell is 8 [mm]. This part is modeled by shell elements, ie. only the 2D dimensions -height and width- are modeled here. The thickness of 1 [mm] is defined in the Aster command file.
 +
 
 +
After defining the shell (face1) and the block the two are assembled to a compound:
 +
constr = geompy.MakeCompound([face1, block])
 +
that leaves two seperate entities and will have no common nodes in the mesh.
  
 
The geometry is defined in a python script (for download see end of this contribution)  and can be loaded into Salome Geometry module by ''File --> Load script (or ctrl T in the object browser window)''. Right click ''Refresh'' or push ''F5'' after loading if necessary.  
 
The geometry is defined in a python script (for download see end of this contribution)  and can be loaded into Salome Geometry module by ''File --> Load script (or ctrl T in the object browser window)''. Right click ''Refresh'' or push ''F5'' after loading if necessary.  
Line 183: Line 187:
  
 
==='''TYPE_RACCORD='COQUE_MASSIF' '''===
 
==='''TYPE_RACCORD='COQUE_MASSIF' '''===
 +
 +
===='''TYPE_RACCORD='COQUE_MASSIF' with linear elements '''====
 
The additional part that replace the Arlequin method in the previous part is:
 
The additional part that replace the Arlequin method in the previous part is:
 
  ConShSol=AFFE_CHAR_MECA(MODELE=SVmodel,
 
  ConShSol=AFFE_CHAR_MECA(MODELE=SVmodel,
Line 202: Line 208:
 
                     INFO=1);
 
                     INFO=1);
  
since  LIAISON_MAIL does not accept a string as an input parameter (as far as I understand the error message correctly).
+
* [since  LIAISON_MAIL does not accept a string as an input parameter (as far as I understand the error message correctly)?]
 +
* Note that GROUP_MA_ESCL, GROUP_MA_MAIT and CHAM_NORMALE(GROUP_MA...) can be replaced by there ''node'' equivalents: GROUP_NO_ESCL, GROUP_NO_MAIT and CHAM_NORMALE(GROUP_NO...)
 +
* ''chnorm'' is a field normal to the shell elements and creates a field with normal vectors of lenght one one all the node of the shell mesh. The nodes that are on the slave entity [''GROUP_MA_ESCL='Cline' ''] will than form the interconnection to the maste body ''GROUP_MA_MAIT='block' ''.
 +
 
 +
===='''TYPE_RACCORD='COQUE_MASSIF' with quadratic elements '''====
 +
In this case we use quadratic elements for both the shell and block geometry. For me, an additional problem occured after conversion to tria7 shell (coque_3d) elements: you cannot create a normal field (chnormal) with tria7 (and therefore with quad9) elements 1)). So you need to create the normal field from the tria6 (or quad8) elements in the first place. Thereafter you can convert the tria6, quad8 elements to tria7, quad9 elements that are suitable for coque_3d:
 +
 
 +
SVmesh=LIRE_MAILLAGE();
 +
 
 +
SVmod=AFFE_MODELE(MAILLAGE=SVmesh,
 +
                    AFFE=(_F(GROUP_MA='block',PHENOMENE='MECANIQUE',MODELISATION='3D',),
 +
                          _F(GROUP_MA='shell',PHENOMENE='MECANIQUE',MODELISATION='COQUE_3D',),),);
 +
 
 +
chnormal = CREA_CHAMP(TYPE_CHAM='NOEU_GEOM_R',
 +
                      OPERATION='NORMALE',
 +
                      MODELE= SVmod,
 +
                      GROUP_MA='shell',);
 +
 
 +
QUADmesh=CREA_MAILLAGE(MAILLAGE=SVmesh,
 +
                      MODI_MAILLE=(_F(GROUP_MA='shell',OPTION='TRIA6_7',),),);
 +
 
 +
QUADmod=AFFE_MODELE(MAILLAGE=QUADmesh,
 +
                    AFFE=(_F(GROUP_MA='block',PHENOMENE='MECANIQUE',MODELISATION='3D',),
 +
                          _F(GROUP_MA='shell',PHENOMENE='MECANIQUE',MODELISATION='COQUE_3D',),),);
 +
 
 +
connect=AFFE_CHAR_MECA(MODELE=QUADmod,
 +
                        LIAISON_MAIL =_F(TYPE_RACCORD='COQUE_MASSIF',
 +
                                        #GROUP_NO_ESCL='Cline',
 +
                                        GROUP_MA_ESCL='Cline',
 +
                                        GROUP_MA_MAIT='block',
 +
                                        CHAM_NORMALE=chnormal,
 +
                                        EPAIS=thickness,))
 +
 
 +
...
 +
 
 +
QUADres=MECA_STATIQUE(MODELE=QUADmod,CHAM_MATER=Mat,CARA_ELEM=Shell,
 +
                      EXCIT=(_F(CHARGE=force,),
 +
                              _F(CHARGE=connect,),),);
  
Note that GROUP_MA_ESCL, GROUP_MA_MAIT and CHAM_NORMALE(GROUP_MA...) can be replaced by there ''node'' equivalents: GROUP_NO_ESCL, GROUP_NO_MAIT and CHAM_NORMALE(GROUP_NO...)
+
1)) You cannot create a normal field from tria6, quad9 elements probably because the centre nodes do not have translational degree of freedoms. But if anyone has more information on this, feel free to comment.
  
 
==='''TYPE_RACCORD='MASSIF_COQUE' '''===
 
==='''TYPE_RACCORD='MASSIF_COQUE' '''===
Line 245: Line 288:
 
Here the displacements of the two force nodes are given for the two types of connections.  
 
Here the displacements of the two force nodes are given for the two types of connections.  
  
 +
 +
'''COQUE_MASSIF'''
 
* '''For type_raccord='coque_massif' with linear elements (DKT)'''
 
* '''For type_raccord='coque_massif' with linear elements (DKT)'''
 
  #displacements at nodes on group Nforce
 
  #displacements at nodes on group Nforce
 
  #displacements of top vertices
 
  #displacements of top vertices
  * INTITULE        * NOEUD    * RESU    * NOM_CHAM ...    * DX ...
+
  * INTITULE        * NOEUD    * RESU    * NOM_CHAM   ...    * DX ...
  * displacements    * N3494    * SVresult * DEPL     ...    *  '''3.27736E-01''' ...
+
  * displacements    * N3494    * SVresult * DEPL       ...    *  '''3.27736E-01''' ...
  * displacements    * N5015    * SVresult * DEPL     ...    *  '''3.27709E-01''' ...
+
  * displacements    * N5015    * SVresult * DEPL       ...    *  '''3.27709E-01''' ...
  
 
* '''For type_raccord='coque_massif' with quadratic elements (coque_3d)'''
 
* '''For type_raccord='coque_massif' with quadratic elements (coque_3d)'''
#displacements at nodes on group Nforce
+
#displacements at nodes on group Nforce
#displacements of top vertices                                                   
+
#displacements of top vertices                                                   
 
  * INTITULE        * NOEUD    * RESU    * NOM_CHAM  ...      * DX
 
  * INTITULE        * NOEUD    * RESU    * NOM_CHAM  ...      * DX
 
  * displacements    * N1      * QUADres  * DEPL      ...      *  '''3.41541E-01'''
 
  * displacements    * N1      * QUADres  * DEPL      ...      *  '''3.41541E-01'''
 
  * displacements    * N4      * QUADres  * DEPL      ...      *  '''3.41562E-01'''
 
  * displacements    * N4      * QUADres  * DEPL      ...      *  '''3.41562E-01'''
  
 
+
'''MASSIF_COQUE'''
 
+
 
+
 
+
 
* '''for type_raccord='massif_coque' with linear elements (DKT)'''
 
* '''for type_raccord='massif_coque' with linear elements (DKT)'''
 
  #displacements at nodes on group Nforce
 
  #displacements at nodes on group Nforce
Line 269: Line 311:
 
  * displacements    * N2885    * LINres  * DEPL        ...    *  '''3.22123E-01'''
 
  * displacements    * N2885    * LINres  * DEPL        ...    *  '''3.22123E-01'''
 
  * displacements    * N4917    * LINres  * DEPL        ...    *  '''3.22129E-01'''
 
  * displacements    * N4917    * LINres  * DEPL        ...    *  '''3.22129E-01'''
 
  
 
* '''for type_raccord='massif_coque' with quadratic elements (coque_3d)'''
 
* '''for type_raccord='massif_coque' with quadratic elements (coque_3d)'''
#displacements at nodes on group Nforce
+
#displacements at nodes on group Nforce
#displacements of top vertices                                                   
+
#displacements of top vertices                                                   
 
  * INTITULE        * NOEUD    * RESU    * NOM_CHAM    ...    * DX
 
  * INTITULE        * NOEUD    * RESU    * NOM_CHAM    ...    * DX
 
  * displacements    * N29015  * QUADres  * DEPL        ...    *  '''3.31732E-01'''
 
  * displacements    * N29015  * QUADres  * DEPL        ...    *  '''3.31732E-01'''
Line 285: Line 326:
  
 
* [[Media:kw_liaisonmail.zip]]<br/>
 
* [[Media:kw_liaisonmail.zip]]<br/>
 +
* [[Media:kw_V02_coqmassive_coque3d.zip]]<br/>
 
* [[Media:kw_V03_massive_coque_dkt.zip]]<br/>
 
* [[Media:kw_V03_massive_coque_dkt.zip]]<br/>
 
* [[Media:KW_V04_massive_coque_coque3d.zip]]<br/>
 
* [[Media:KW_V04_massive_coque_coque3d.zip]]<br/>
  
 
* The first zip file is for the case of '''coque_massif''', linear elements
 
* The first zip file is for the case of '''coque_massif''', linear elements
* The second zip file is for the case of '''massif_coque''', linear elements
+
* The second zip file is for the case of '''coque_massif''', quadratic elements
* The third zip file is for the case of '''massif_coque''', quadratic elements
+
* The third zip file is for the case of '''massif_coque''', linear elements
 +
* The fouorth zip file is for the case of '''massif_coque''', quadratic elements
 
* This first zip file contains the following files for the ''liaison mail'' method:
 
* This first zip file contains the following files for the ''liaison mail'' method:
 
** BSgeomesh_liaisonmail.py python geometry and mesh files (load in Salome by ''File --> Load script'' (cntrl T)) and right select ''refresh'' (F5) in the object browser). Export the mesh ''constr'' in the mesh module to ''constr.med'' for further processing by Code-Aster, controlled by ASTK.
 
** BSgeomesh_liaisonmail.py python geometry and mesh files (load in Salome by ''File --> Load script'' (cntrl T)) and right select ''refresh'' (F5) in the object browser). Export the mesh ''constr'' in the mesh module to ''constr.med'' for further processing by Code-Aster, controlled by ASTK.
Line 308: Line 351:
 
* [http://www.code-aster.org/forum2/viewtopic.php?id=12138 Shell to solid coupling 2]
 
* [http://www.code-aster.org/forum2/viewtopic.php?id=12138 Shell to solid coupling 2]
  
 +
More information about the creation of the normal field:
 +
* [http://www.code-aster.org/V2/doc/v9/man_u/u4/u4.72.04.pdf crea_champ]
  
 
==''Fini''==
 
==''Fini''==
Line 313: Line 358:
 
Any remarks - pls let me know - eg by the watch page<br/>
 
Any remarks - pls let me know - eg by the watch page<br/>
 
It needs a bit of cleaning up - I know<br/>
 
It needs a bit of cleaning up - I know<br/>
june 2010<br/>
+
june - august 2010<br/>
 
Kees Wouters<br/>
 
Kees Wouters<br/>

Latest revision as of 21:32, 12 February 2011

Connecting shells and solid elements by liaison_mail

[under construction .... not finished yet ... but usable]

To start with, this contribution mainly focuses on the use of Salome and Code Aster, not 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 the fifth decimal place, which they are 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.

I stole a lot of ideas from the CaeLinux and Code Aster forums. So thank you for all who posted on this topic. This contribution is based on the examples ssls101m and ssls101m in the astest directory. You can have a glance there as well.

The following cases have been compared:

  • LIAISON_MAIL =_F(TYPE_RACCORD='COQUE_MASSIF', ....)), linear elements MODELISATION = 'DKT')
  • LIAISON_MAIL =_F(TYPE_RACCORD='COQUE_MASSIF', ....)), quadratic elements MODELISATION = 'COQUE_3D')

  • LIAISON_MAIL =_F(TYPE_RACCORD='MASSIF_COQUE', ....)), linear elements MODELISATION = 'DKT')
  • LIAISON_MAIL =_F(TYPE_RACCORD='MASSIF_COQUE', ....)), quadratic elements MODELISATION = 'COQUE_3D')

For older versions of CA (before CA10.1.19) you can use the Arlequin method to interface between shells and solids: Arlequin

[As usual, the files that define the geometry, mesh and command files can be found at the end of this contribution.]

The construction

The geometry of the construction

  • a number of method to establish a connection between shells to solid elements can be used:
    • the Arlequin method
    • use a region of solid nodes; this causes a rigid body between the interface of the shells and solids
    • liason_mail, since version CAster 10.1.19


As usual the geometry is quite simple, in order not to introduce other difficulties. The first part consists of a block of height 23 [mm] and a cross section of 3*8 [mm2]. This part is modeled by solid elements. On top of this a shell of height 17 [mm] is added. The width of this shell is 8 [mm]. This part is modeled by shell elements, ie. only the 2D dimensions -height and width- are modeled here. The thickness of 1 [mm] is defined in the Aster command file.

After defining the shell (face1) and the block the two are assembled to a compound:

constr = geompy.MakeCompound([face1, block])

that leaves two seperate entities and will have no common nodes in the mesh.

The geometry is defined in a python script (for download see end of this contribution) and can be loaded into Salome Geometry module by File --> Load script (or ctrl T in the object browser window). Right click Refresh or push F5 after loading if necessary.

Kw lm constr.jpg
  • x direction is out-of-plane of the shell
  • z direction is in the main direction of the construction
  • width of block and shell: 8 mm
  • thickness of block 3 mm; thickness of shell 1 mm; thickness of the shell is defined in Code Aster
  • height of block 23 mm; height of shell 17 mm
  • groups defined in Salome
    • volume block
    • shell area shell, FBbot and FBtop
    • connection line between shells and solids Cline

The mesh of the construction

For we command file in Code Aster we need various parts (or groups in Salome) to apply boundary conditions, forces, material properties and such. These groups are depicted in the image above:

the bottom and top surface of the block FBbot and FBtop,
the solid element region block,
the shell elements shell and
the two vertices on top edge of the shell elements: Nforce
Kw lm mesh.jpg:Kw lm mesh detail.jpg

Again, the mesh of the construction is defined in a python script.

The mesh consists of linear shell elements (tria3 elements) that can be used with DKT modelisation, the solid elements are linear tetrahedrons.

Relevant part of the command file

The boundary conditions are applied on FBbot: all displacements of this surface are restricted. The forces are applied on the two nodes Nforce in the out-of-plane or x direction and the magnitude is 10 N each, ie. 20 N in total. The material properties of both the shell and solid elements are steel.


SVmesh=LIRE_MAILLAGE(...);
SVmodel=AFFE_MODELE(INFO=1,
                   MAILLAGE=SVmesh,
                  AFFE=(_F(GROUP_MA='block',PHENOMENE='MECANIQUE',MODELISATION='3D',),
                       _F(GROUP_MA='shell',PHENOMENE='MECANIQUE',MODELISATION='DKT',),),);
Steel=DEFI_MATERIAU(ELAS=_F(E=210000,NU=0.3,),);
Assigns a physical model
thickness = 1.000
Shell=AFFE_CARA_ELEM(INFO=1,
                      MODELE=SVmodel,
                      COQUE=_F(GROUP_MA='shell',
                               EPAIS=thickness,
                               VECTEUR=(0.0,1.0,0.0),# defines local x-axis of shell, default global x-axis
                               EXCENTREMENT=0.000,
                               COQUE_NCOU=1,  # 1 for non linear STAT_NON_LINE et DYNA_NON_LINE
                               INER_ROTA='OUI',),); # inertia of rotation: DKT, DST et Q4G
                             
chnorm = CREA_CHAMP(TYPE_CHAM='NOEU_GEOM_R',
                     OPERATION='NORMALE',
                     MODELE= SVmodel,
                     GROUP_MA='shell',
                     INFO=1);
ConShSol=AFFE_CHAR_MECA(MODELE=SVmodel,
                         LIAISON_MAIL =_F(TYPE_RACCORD='COQUE_MASSIF', 
                                          #GROUP_NO_ESCL='Cline', 
                                          GROUP_MA_ESCL='Cline', 
                                          GROUP_MA_MAIT='block',
                                          CHAM_NORMALE=chnorm, 
                                          EPAIS=thickness,))
Mat=AFFE_MATERIAU(...);
force=AFFE_CHAR_MECA(MODELE=SVmodel,
                      DDL_IMPO=_F(GROUP_MA='FBbot',LIAISON='ENCASTRE',),
                      FORCE_NODALE=_F(GROUP_NO='Nforce',FX=10.00,),);
SVresult=MECA_STATIQUE(MODELE=SVmodel,
                      CHAM_MATER=Mat,
                      CARA_ELEM=Shell,
                      EXCIT=(_F(CHARGE=force,),
                             _F(CHARGE=ConShSol,),),);

Liaison_mail keyword in AFFE_CHAR_MECA

The various TYPE_RACCORD connections

The LIAISON_MAIL keyword takes the TYPE_RACCORD as a parameter. Valid parameters are

  • MASSIF (see the history file below)
  • COQUE for a connection between two incompatible shells (eg DKT and COQUE_3D modelisation)
  • COQUE_MASSIF for a connection between solids and shells
  • MASSIF_COQUE (see the history file below)

from histor file

RESTITUTION FICHE 013381 DU 2009-05-06 09:33:20 TYPE evolution concernant Code_Aster (VERSION ) TITRE

  Quelques evolutions autour de LIAISON_MAIL : raccord entre modelisations differentes

FONCTIONNALITE

  Evolution proposée :
  ---------------------
  Je propose d'ajouter 2 nouvelles possibilités pour AFFE_CHAR_MECA / LIAISON_MAIL :
    1) TYPE_RACCORD= 'COQUE'
       pour relier des modélisations de coques entre elles
    2) TYPE_RACCORD=  / 'COQUE_MASSIF'
                      / 'MASSIF_COQUE'
       pour relier une modélisation "coque" avec une modélisation "3D"
   
   
  Syntaxe :
  ---------
  TYPE_RACCORD =
    / 'MASSIF'       : pour raccorder 2 modélisations 2D (ou 3D ou SHB)   [defaut]
    / 'COQUE'        : pour raccorder 2 modélisations DKT (ou coque_3D)
    / 'COQUE_MASSIF' : pour raccorder 1 modélisation  DKT (ou coque_3D) avec 1 modelisation 3D
       (o)   CHAM_NORMALE : champ des "normales" à la coque
             EPAIS        : épaisseur des éléments de coque
    / 'MASSIF_COQUE' : pour raccorder 1 modélisation  1 modelisation 3D avec une modéliation
  DKT (ou coque_3D)
   
   
  Quelles relations de liaison ecrit-on ?
  ---------------------------------------
  MASSIF :
     On écrit l'égalité des translations (DX,DY,DZ) du noeud "esclave" avec les translations
  du point en vis à vis de la maille "maitre"
     (The translations DX,DY,DZ between the slave and master nodes are equal)
                                                                                           
                        
  COQUE :
     On écrit l'égalité des translations et des rotations (DX,DY,DZ,DRX,DRY,DRZ) du noeud
  "esclave" avec les translations et rotations du point en vis à vis de la maille "maitre"
     (The translations DX,DY,DZ and rotations DRX,DRY,DRZ between the slave and master
      nodes are equal)
                                                                                           
                        
  COQUE_MASSIF :
     On écrit l'égalité des translations et des rotations (DX,DY,DZ,DRX,DRY,DRZ) du noeud
  "esclave" (de type "coque") avec les translations de 3 points (3D)  en vis à vis dans les
  mailles "maitre" (A, A+h/2, A-h/2)
     (The translations DX,DY,DZ and rotations DRX,DRY,DRZ of the 'slave' nodes (of type
      'shell') are equal to the translation of 3D nodes vis-a-vis the 'master" elements
       A, A+h/2, A-h/2 )
     En notant :
       * A le point 3D géométriquement en vis à vis (a 3D geometric point vis-a-vis)
       *  h un petit vecteur normal à la coque dont la longueur est l'épaisseur de la coque
            (a small vector normal to the shell, its length equals the shell's
             thickness)                                                                               
                        
  MASSIF_COQUE :
     On écrit l'égalité des translations (DX,DY,DZ) du noeud "esclave" (de type "3D") avec
  les translations et rotations du point (coque) en vis à vis dans la maille "maitre".
     (The translations DX,DY,DZ of the 'slave' nodes (of type 3D) are equal to the translation and
      rotation of shell nodes vis-a-vis the 'master" elements)
                                                                                           
                        
  1ères expériences :
  -------------------
  Les premiers essais montrent qu'il vaut mieux utiliser MASSIF_COQUE lorsque l'on veut
  raccorder un "patch" 3D (maillé fin) dans une structure coque.

TYPE_RACCORD='COQUE_MASSIF'

TYPE_RACCORD='COQUE_MASSIF' with linear elements

The additional part that replace the Arlequin method in the previous part is:

ConShSol=AFFE_CHAR_MECA(MODELE=SVmodel,
                       LIAISON_MAIL =_F(TYPE_RACCORD='COQUE_MASSIF', 
                                        #GROUP_NO_ESCL='Cline', 
                                        GROUP_MA_ESCL='Cline', 
                                        GROUP_MA_MAIT='block',
                                        CHAM_NORMALE=chnorm, 
                                        EPAIS=thickness,))


In this case we have a solid part and shell, so we use TYPE_RACCORD='COQUE_MASSIF'. The three keywords GROUP_MA_ESCL, GROUP_MA_MAIT and CHAM_NORMALE define the geometry between the interconnection. The 'block' is the master group defined by GROUP_MA_MAIT. The slave is the connection line 'Cline' between the solid and the shells defined by GROUP_MA_ESCL='Cline'. The shell part is defined by CHAM_NORMALE=chnorm. You cannot use CHAM_NORMALE='shell' directly, first a transition needs to be carrried out:

chnorm = CREA_CHAMP(TYPE_CHAM='NOEU_GEOM_R',
                   OPERATION='NORMALE',
                   MODELE= SVmodel,
                   GROUP_MA='shell',
                   INFO=1);
  • [since LIAISON_MAIL does not accept a string as an input parameter (as far as I understand the error message correctly)?]
  • Note that GROUP_MA_ESCL, GROUP_MA_MAIT and CHAM_NORMALE(GROUP_MA...) can be replaced by there node equivalents: GROUP_NO_ESCL, GROUP_NO_MAIT and CHAM_NORMALE(GROUP_NO...)
  • chnorm is a field normal to the shell elements and creates a field with normal vectors of lenght one one all the node of the shell mesh. The nodes that are on the slave entity [GROUP_MA_ESCL='Cline' ] will than form the interconnection to the maste body GROUP_MA_MAIT='block' .

TYPE_RACCORD='COQUE_MASSIF' with quadratic elements

In this case we use quadratic elements for both the shell and block geometry. For me, an additional problem occured after conversion to tria7 shell (coque_3d) elements: you cannot create a normal field (chnormal) with tria7 (and therefore with quad9) elements 1)). So you need to create the normal field from the tria6 (or quad8) elements in the first place. Thereafter you can convert the tria6, quad8 elements to tria7, quad9 elements that are suitable for coque_3d:

SVmesh=LIRE_MAILLAGE();
SVmod=AFFE_MODELE(MAILLAGE=SVmesh,
                    AFFE=(_F(GROUP_MA='block',PHENOMENE='MECANIQUE',MODELISATION='3D',),
                         _F(GROUP_MA='shell',PHENOMENE='MECANIQUE',MODELISATION='COQUE_3D',),),);
chnormal = CREA_CHAMP(TYPE_CHAM='NOEU_GEOM_R',
                     OPERATION='NORMALE',
                     MODELE= SVmod,
                     GROUP_MA='shell',);
QUADmesh=CREA_MAILLAGE(MAILLAGE=SVmesh,
                      MODI_MAILLE=(_F(GROUP_MA='shell',OPTION='TRIA6_7',),),);
QUADmod=AFFE_MODELE(MAILLAGE=QUADmesh,
                   AFFE=(_F(GROUP_MA='block',PHENOMENE='MECANIQUE',MODELISATION='3D',),
                         _F(GROUP_MA='shell',PHENOMENE='MECANIQUE',MODELISATION='COQUE_3D',),),);
connect=AFFE_CHAR_MECA(MODELE=QUADmod,
                       LIAISON_MAIL =_F(TYPE_RACCORD='COQUE_MASSIF', 
                                        #GROUP_NO_ESCL='Cline', 
                                        GROUP_MA_ESCL='Cline', 
                                        GROUP_MA_MAIT='block',
                                        CHAM_NORMALE=chnormal, 
                                        EPAIS=thickness,))
...
QUADres=MECA_STATIQUE(MODELE=QUADmod,CHAM_MATER=Mat,CARA_ELEM=Shell,
                      EXCIT=(_F(CHARGE=force,),
                             _F(CHARGE=connect,),),);

1)) You cannot create a normal field from tria6, quad9 elements probably because the centre nodes do not have translational degree of freedoms. But if anyone has more information on this, feel free to comment.

TYPE_RACCORD='MASSIF_COQUE'

  • using linear elements DKT

The connection part is defined by a shell as master plane and a volume part as slave:

ConVolSh=AFFE_CHAR_MECA(MODELE=VSmodel,
                       LIAISON_MAIL =_F(TYPE_RACCORD='MASSIF_COQUE',
                                        GROUP_MA_ESCL='FBtop',
                                        GROUP_MA_MAIT='shell'))

Here the slave group 'FBtop' is taken as part of the volume 'block' (GROUP_MA_ESCL='FBtop'). The group 'FBtop' is the top plane of the block that interfaces to the master plane 'shell'. There is no need to define an additional plane for the normal directions.

  • using quadratic elements coque_3d
  • Changes compared to DKT elements:
    • The mesh should now be converted to quadratic shell elements. I also changed the solid (volume) elements, although this is not really necessary.

The command file is very much the same as for the DKT element except for the following changes:

    • After reading the quadratic mesh, convert the triangular elements to 7 node elements TRIA6-->TRIA7:
QUADmesh=CREA_MAILLAGE(MAILLAGE=SALmesh,
                      MODI_MAILLE=(_F(GROUP_MA='shell',OPTION='TRIA6_7',),),);
    • Applying the model:
VSmodel=AFFE_MODELE(INFO=1,
                   MAILLAGE=QUADmesh,
                   AFFE=(_F(GROUP_MA='block',PHENOMENE='MECANIQUE',MODELISATION='3D',),
                        _F(GROUP_MA='shell',PHENOMENE='MECANIQUE',MODELISATION='COQUE_3D',),),);
  • The displacements at the nodes where the load is applied increases from 3.22 to 3.32 [mm]. This is in line with the general behaviour of linear elements being less stiffer than quadratic elements.

Note - warning: when you select the whole volume for the slave group:

LIAISON_MAIL=_F(TYPE_RACCORD='MASSIF_COQUE',
                GROUP_MA_ESCL='block',   ## 'block' iso 'FBtop'
                GROUP_MA_MAIT='shell'),

the code returns with an pivot zero error:

Solveur linéaire LDLT ou MULT_FRONT) Matrice non actorisable 
- pivot presque nul à la ligne : 47119

Results

Here the displacements of the two force nodes are given for the two types of connections.


COQUE_MASSIF

  • For type_raccord='coque_massif' with linear elements (DKT)
#displacements at nodes on group Nforce
#displacements of top vertices
* INTITULE         * NOEUD    * RESU     * NOM_CHAM    ...     * DX ...
* displacements    * N3494    * SVresult * DEPL        ...     *  3.27736E-01 ...
* displacements    * N5015    * SVresult * DEPL        ...     *  3.27709E-01 ...
  • For type_raccord='coque_massif' with quadratic elements (coque_3d)
#displacements at nodes on group Nforce
#displacements of top vertices                                                   
* INTITULE         * NOEUD    * RESU     * NOM_CHAM   ...      * DX
* displacements    * N1       * QUADres  * DEPL       ...      *  3.41541E-01
* displacements    * N4       * QUADres  * DEPL       ...      *  3.41562E-01

MASSIF_COQUE

  • for type_raccord='massif_coque' with linear elements (DKT)
#displacements at nodes on group Nforce
#displacements of top vertices                                                   
* INTITULE         * NOEUD    * RESU     * NOM_CHAM    ...     *  DX   
* displacements    * N2885    * LINres   * DEPL        ...     *  3.22123E-01
* displacements    * N4917    * LINres   * DEPL        ...     *  3.22129E-01
  • for type_raccord='massif_coque' with quadratic elements (coque_3d)
#displacements at nodes on group Nforce
#displacements of top vertices                                                   
* INTITULE         * NOEUD    * RESU     * NOM_CHAM    ...     * DX
* displacements    * N29015   * QUADres  * DEPL        ...     *  3.31732E-01
* displacements    * N29815   * QUADres  * DEPL        ...     *  3.31734E-01 


Kw lm displacements.jpg * Kw ss displacement2.jpg

Download files

  • The first zip file is for the case of coque_massif, linear elements
  • The second zip file is for the case of coque_massif, quadratic elements
  • The third zip file is for the case of massif_coque, linear elements
  • The fouorth zip file is for the case of massif_coque, quadratic elements
  • This first zip file contains the following files for the liaison mail method:
    • BSgeomesh_liaisonmail.py python geometry and mesh files (load in Salome by File --> Load script (cntrl T)) and right select refresh (F5) in the object browser). Export the mesh constr in the mesh module to constr.med for further processing by Code-Aster, controlled by ASTK.

(Note that the group_ma Cline need to be added manually, though it has been defined in the geometry module --- I will adapt this shortly ----it has been done in some if not all of the three described cases)

    • liaisonmail.comm command files for Code-Aster
    • astk file for file control by ASTK and resulting export file
    • tab4res.txt, text file with nodal displacements of nodes Nforce.
    • the file documentation_liaison_mail.txt contains part of the histor file
  • The result file con4res.med can be viewed in the post processor module of Salome by File --> Import --> con2res.med or cntrl I in the object browser.

Links

This contribution is based on the astest files ssls101m and ssls101n that are described here:

Discussion on the code aster forum are here:

More information about the creation of the normal field:

Fini

That's it for now
Any remarks - pls let me know - eg by the watch page
It needs a bit of cleaning up - I know
june - august 2010
Kees Wouters