1. Définition du champ de contraintes analytique#
On suppose que le modèle contient des éléments finis de milieu continu (MODELISATION=”3D”).
On veut qu’en chaque point de Gauss, les composantes des contraintes aient les expressions suivantes :
SIZZ = RHO*G*Z
SIXX = SIYY = KP*SIZZ
où :
RHO : masse volumique
G : accélération de la pesanteur
Z : 3éme coordonnée d’espace
KP : coefficient de « poussée » des sols
La solution proposée consiste à :
définir trois fonctions « formules » correspondant à SIXX, SIYY et SIZZ,
constituer un champ dont les composantes sont les fonctions précédentes,
évaluer les formules du champ en lui fournissant le champ de géométrie nécessaire à leur évaluation.
1.1. Étape 1 : définir les formules#
RHO = 1000.0
G = 10.0
KP = 3.0
SIZZ = FORMULE(REEL="""(REEL:Z) = RHO*G*Z """)
SIXX = FORMULE(REEL="""(REEL:Z) = KP*SIZZ(Z) """)
SIYY = FORMULE(REEL="""(REEL:Z) = KP*SIZZ(Z) """)
1.2. Étape 2 : créer le champ de formules SIG1#
SIG1 = CREA_CHAMP(
OPERATION="AFFE",
TYPE_CHAM="ELGA_NEUT_F",
MODELE=MO,
PROL_ZERO="OUI",
AFFE=_F(TOUT="OUI", NOM_CMP=("X1", "X2", "X3"), VALE_F=(SIXX, SIYY, SIZZ)),
)
- Remarques
le champ SIG1 que l’on crée est un cham_elem aux points de Gauss (ELGA),
les seuls champs pouvant avoir des composantes de type « fonctions » sont les champs de la grandeur NEUT_F. Il faudra donc se rappeler que la composante “X1”- de SIG1 est en réalité “SIXX”, etc.,
le mot clé PROL_ZERO=”OUI” est obligatoire car pour tous les types d’élément, les cham_elem NEUT_R ont actuellement 6 composantes : “X1”, “X2”, …, “X6”. Il faut donc accepter de « prolonger » par zéro le champ sur les 3 composantes non affectées. Le prolongement par « zéro » pour un champ dont les composantes sont des textes (noms des fonctions) consiste à affecter la chaîne « « à chaque composante absente du champ. Attention donc, il ne s’agit pas d’une fonction nulle. On peut le constater en utilisant INFO=2 pour imprimer le champ SIG1.
1.3. Étape 3 : évaluer les formules du champ SIG1#
Le champ SIG1 est un champ connu aux points de Gauss des éléments du modèle. En chaque point, on va vouloir évaluer les fonctions SIXX, SIYY et SIZZ. Pour cela, il faut disposer des valeurs de toutes les variables apparaissant dans les fonctions (ici Z). Ces variables doivent être connues sur les mêmes points que le champ de fonctions. Il faut donc disposer d’un champ contenant la géométrie des points de Gauss (cham_elem_GEOM_R / ELGA).
Ce champ de géométrie des points de Gauss (CHXG) est obtenu à partir du maillage (MA) par les 2 commandes suivantes :
CHXN = CREA_CHAMP(
OPERATION="EXTR", TYPE_CHAM="NOEU_GEOM_R", NOM_CHAM="GEOMETRIE", MAILLAGE=MA, INFO=1
)
CHXG = CREA_CHAMP(OPERATION="DISC", TYPE_CHAM="ELGA_GEOM_R", MODELE=MO, CHAM_GD=CHXN, INFO=1)
La première commande extrait le champ de géométrie (aux nœuds) du maillage. La seconde transforme le champ de géométrie aux nœuds en un champ de géométrie aux points de Gauss en utilisant les fonctions de forme des éléments finis du modèle.
On peut alors évaluer les fonctions grâce à l’opérateur CREA_CHAMP / OPERATION=”EVAL” :
SIG2 = CREA_CHAMP(OPERATION="EVAL", TYPE_CHAM="ELGA_NEUT_R", INFO=1, CHAM_F=SIG1, CHAM_PARA=(CHXG,))
Le champ (SIG2) obtenu par évaluation d’un champ de la grandeur NEUT_F est un champ de la grandeur NEUT_R dont les composantes ont les mêmes noms que les composantes de NEUT_F : “X1”, “X2”, …, “X6”.
- Attention
Les composantes “X4”, “X5”, “X6” sont indéfinies (en réalité elles contiennent le réel le plus grand possible), car elles correspondent à une fonction inexistante.
Il reste encore à changer la grandeur du champ SIG2(NEUT_R en SIEF_R) pour terminer la fabrication de notre champ de contraintes analytique :
SIGINI = CREA_CHAMP(
OPERATION="ASSE",
TYPE_CHAM="ELGA_SIEF_R",
MODELE=MO,
PROL_ZERO="OUI",
ASSE=_F(
TOUT="OUI", CHAM_GD=SIG2, NOM_CMP=("X1", "X2", "X3"), NOM_CMP_RESU=("SIXX", "SIYY", "SIZZ")
),
)
- Remarques
seules les composantes “X1”, “X2’et “X3” du champ SIG2 sont recopiées dans cette opération pour donner les composantes “SIXX”, “SIYY”, “SIZZ” du champ SIGINI. Ce champ de contraintes doit contenir également les composantes liées aux cisaillements (“SIXY”, “SIYZ”, “SIXZ”). Pour les obtenir (avec une valeur nulle), il faut utiliser le prolongement par zéro avec PROL_ZERO=”OUI”.
les manipulations faites pour obtenir les composantes de cisaillement nulles, auraient été plus simples si on avait explicitement affecté sur ces 3 composantes une fonction nulle. On n’aurait pas eu à « jouer » avec les prolongements. Mais on aurait bénéficié de la coïncidence que les grandeurs SIEF_R et NEUT_R ont toutes les deux 6 composantes pour les cham_elem (ELGA) sur les éléments du modèle.