Calcul d'un champ utilisateur ----------------------------- Le mot-clé facteur CHAM_UTIL permet de calculer des champs quelconques, dits «utilisateur» en raison du nom qui leur sera affecté dans le concept résultat. Il peut y avoir plusieurs occurrences de CHAM_UTIL afin d'enchaîner le calcul de plusieurs champs. Le traitement étant effectué à la fin de la commande CALC_CHAMP, les champs calculés par les mots-clés précédents (CONTRAINTE, DEFORMATION...) sont disponibles ici. Soit on demande le calcul d'un critère prédéfini, soit on applique une ou plusieurs formules pour calculer un autre champ. Opérande NOM_CHAM ~~~~~~~~~~~~~~~~~ Il s'agit du champ à partir duquel on fait les calculs. Le champ produit aura le même type: ELGA, ELNO ou NOEU. Opérande CRITERE ~~~~~~~~~~~~~~~~ Demande le calcul d'un critère prédéfini. Les critères sont (le paragraphe :ref:`2.6.5 ` fournit les expressions de chaque critère): * VMIS (pour les champs de contraintes), * INVA_2 (pour les champs de déformations), * TRACE (pour les champs de contraintes ou de déformations). Chacun de ces critères produit une composante (nommée X1). Un des intérêts est de pouvoir calculer INVA_2 de n'importe quel champ de déformations. Opérande FORMULE ~~~~~~~~~~~~~~~~ Ceci permet de calculer n'importe quelle expression fonction des composantes du champ fourni pour NOM_CHAM. Le champ produit contiendra autant de composantes que de formules fournies: à la première formule correspondra la composante X1, à la deuxième X2, etc. Jusqu'à 30 composantes peuvent être ainsi créées. Le champ en sortie est systématiquement prolongé à zéro sur les autres composantes et là où le champ en entrée n'est pas défini. Des exemples de formules permettant de retrouver les critères VMIS et INVA_2 peuvent être trouvés dans la deuxième partie du test sslv104a. Opérande NORME ~~~~~~~~~~~~~~ Demande le calcul d'une norme prédéfinie. Les normes sont : * L2:norme :math:`{L}_{2}` d'un tenseur * FROBENIUS: norme de Frobenius d'un tenseur La norme calculée est une quantité intégrée (au sens faible) sur un élément :math:`{\Omega}_{e}` . Pour un tenseur :math:`A` , la norme :math:`{L}_{2}` vaut: .. math:: :label: eq-13 {N}_{{L}_{2}}={\int}_{{\Omega}_{e}}\sqrt{(A:A)}.d{\Omega}_{e} La norme de Frobenius sur les composantes :math:`{A}_{ij}` d'un tenseur :math:`A` : .. math:: :label: eq-14 {N}_{F}={\int}_{{\Omega}_{e}}{\sum}_{i,j}∣{A}_{ij}∣.∣{A}_{ij}∣.d{\Omega}_{e} Chacune de ces normes produit une composante (nommée X1) sur un élément. Il s'agit donc d'un champ ELEM. Il est à noter que la différence entre les deux normes vient des termes croisées (hors diagonale). Opérande NUME_CHAM_RESU ~~~~~~~~~~~~~~~~~~~~~~~ Le champ produit doit être rangé, de manière unique, dans le concept résultat. Les champs «utilisateur» sont donc numérotés en utilisant NUME_CHAM_RESU et le type du champ. Le nom du champ sera donc du type UT01_ELGA, UT22_NOEU, etc. Exemple de calcul d'un champ utilisateur ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Produit le champ UT02_ELGA à deux composantes. X1 est la trace de SIGM_ELGA (comparable à la composante TRSIG de SIEQ_ELGA) et X2 est la contrainte équivalente de Von Mises (composante VMIS de SIEQ_ELGA). .. code-block:: python fTrace = FORMULE(NOM_PARA=("SIXX", "SIYY", "SIZZ"), VALE="""SIXX+SIYY+SIZZ""") fVonMis = FORMULE( NOM_PARA=("SIXX", "SIYY", "SIZZ", "SIXY", "SIXZ", "SIYZ"), VALE="""sqrt(3./2. * (SIXX**2 + SIYY**2 + SIZZ**2 + 2*SIXY**2 + 2*SIXZ**2 + 2*SIYZ**2 ) - 1./2. * fTrace(SIXX, SIYY, SIZZ)**2)""", ) RES = CALC_CHAMP( reuse=RES, RESULTAT=RES, CHAM_UTIL=_F(NOM_CHAM="SIGM_ELGA", FORMULE=(fTrace, fVonMis), NUME_CHAM_RESU=2), )