6. Exemples d’utilisation#

6.1. Identification des paramètres d’une loi de comportement élastoplastique sur un essai de traction#

Cet exemple est traité par le test ZZZZ159A [V1.01.159].

6.1.1. Position du problème#

On dispose des résultats d’un essai de traction. Il s’agit de l’évolution de la contrainte \({\sigma}_{yy}\) au cours du temps ainsi que de l’évolution de la déformation plastique cumulée \(p\) au cours du temps.

_images/1000000000000276000001BB92996068A7AB9D02.jpg

Contrainte SIYY

_images/1000000000000275000001BBABD20AA42C300161.jpg

Déformation plastique cumulée

On désire recaler sur ces essais le module de Young, la limite d’élasticité et la pente d’écrouissage d’une loi de comportement élastoplastique à écrouissage isotrope linéaire.

6.1.2. Mise en données#

6.1.2.1. Expérience#

On commence tout d’abord par définir nos résultats d’essais. Ils consistent en deux courbes que l’on définit comme suit.

exper1 = DEFI_FONCTION(
     NOM_PARA='INST',
     NOM_RESU='SIYY',
     VALE=(0.00000E+00 , 0.00000E+00 ,
     5.00000E-02 , 5.00000E+01 ,
     ...
     9.50000E-01 , 2.07500E+02 ,
     1.00000E+00 , 2.08000E+02 ),)

exper2 = DEFI_FONCTION(
     NOM_PARA='INST',
     NOM_RESU='V1',
     VALE=(0.00000E+00 , 0.00000E+00 ,
     5.00000E-02 , 0.00000E+00 ,
     ...
     9.50000E-01 , 3.71250E-03 ,
     1.00000E+00 , 3.96000E-03 ),)

exper1 et exper2 sont donc des fonctions qui représentent respectivement la contrainte \({\sigma}_{yy}\) et la déformation plastique cumulée \(p\) .

6.1.2.2. Calcul#

On écrit ensuite le fichier de commandes Code_Aster esclave modélisant cet essai de traction où vont apparaître nos 3 paramètres ainsi que les deux courbes à recaler.

DEBUT()

# AFFECTATION DES VALEURS DES PARAMETRES A RECALER
# LES VALEURS RENSEIGNEES ICI SONT SANS IMPORTANCE
# SEULES COMPTENT LES VALEURS RENSEIGNEES DANS LE FICHIER MAITRE
DSDE__ = 200.
YOUN__ = 8.E4
SIGY__ = 1.

ACIER=DEFI_MATERIAU(
     ECRO_LINE=_F(
          D_SIGM_EPSI=DSDE__,
          SY=SIGY__,),
     ELAS=_F(
          NU=0.3,
          E=YOUN__,),)
.....

U=SIMU_POINT_MAT(
     COMPORTEMENT=_F(RELATION='VMIS_ISOT_LINE'),
     MATER=ACIER,
     INCREMENT=_F(LIST_INST=INSTANTS,),
     NEWTON=_F(REAC_ITER=1),
     EPSI_IMPOSE=_F(EPYY=epyy,),
)

# EXTRACTION DE LA REPONSE SIGMAYY(T)
REPONSE1 = CALC_TABLE(
     TABLE = U,
     ACTION =_F(OPERATION='EXTR',
     NOM_PARA=('INST','SIYY')))

# EXTRACTION DE LA REPONSE EPSP(T)
REPONSE2 = CALC_TABLE(
     TABLE = U,
     ACTION =_F(OPERATION='EXTR',
     NOM_PARA=('INST','V1')))

FIN()

6.1.2.3. MACR_RECAL#

Il nous faut maintenant définir dans le fichier maître les valeurs initiales et les plages de variations de nos paramètres. On désire:

1.E5    <    Module d’Young initial = 1.E5        <    5.E5
5.        <    Limite d’élasticité initiale = 30.        <    500
1.E3    <    Module d’écrouissage initial = 1.E3    <    1.E4

Enfin il faut aussi définir dans le fichier maître les grandeurs à extraire du fichier de commandes esclave. Nous désirons d’une part extraire la colonne INST et la colonne SIYY de la table REPONSE1 et d’autre part la colonne INST et la colonne V1 de la table REPONSE2. Nous l’écrivons:

Voici comment nous renseignons ces informations dans le corps de MACR_RECAL:

RESU2 = MACR_RECAL(
    UNITE_ESCL=3,
    PARA_OPTI=(
        _F(NOM_PARA="YOUN__", VALE_INI=100000.0, VALE_MIN=50000.0, VALE_MAX=500000.0),
        _F(NOM_PARA="DSDE__", VALE_INI=1000.0, VALE_MIN=500.0, VALE_MAX=10000.0),
        _F(NOM_PARA="SIGY__", VALE_INI=30.0, VALE_MIN=5.0, VALE_MAX=500.0),
    ),
    COURBE=(
        _F(FONC_EXP=exper1, NOM_FONC_CALC="REPONSE1", PARA_X="INST", PARA_Y="SIYY"),
        _F(FONC_EXP=exper2, NOM_FONC_CALC="REPONSE2", PARA_X="INST", PARA_Y="V1"),
    ),
)

6.1.2.4. Mise en données alternative (listes Python)#

On peut utiliser la mise en données à base de liste Python et d’objet numpy. Le fichier maître va alors s’écrire:

experience = [
numpy.array(
     [
          [0.00000e00, 0.00000e00],
          [5.00000e-02, 5.00000e01],
          ...
          [9.50000e-01, 2.07500e02],
          [1.00000e00, 2.08000e02],
     ]
),
numpy.array(
     [
          [0.00000e00, 0.00000e00],
          [5.00000e-02, 0.00000e00],
          ...
          [9.50000e-01, 3.71250e-03],
          [1.00000e00, 3.96000e-03],
     ]
),
]

parametres = [
["YOUN__", 100000.0, 50000.0, 500000.0],
["DSDE__", 1000.0, 500.0, 10000.0],
["SIGY__", 30.0, 5.0, 500.0],
]

calcul = [["REPONSE1", "INST", "SIYY"], ["REPONSE2", "INST", "V1"]]

où: experience est le nom d’une liste Python (définie entre crochets) de 2 tableaux numpy, parametres est une liste de listes Python contenant les valeurs initiales et les plages de variations de nos paramètres et calcul les grandeurs à extraire du fichier de commandes esclave.

Le corps de la commande s’écrit alors:

RESU = MACR_RECAL(UNITE_ESCL=3, RESU_EXP=experience, LIST_PARA=parametres, RESU_CALC=calcul)

6.1.2.5. Astk#

On définit enfin le profil d’étude suivant :

_images/100000000000028E0000016C6D5BCC9780E220D1.png

6.1.3. Résultats#

Une fois l’étude réalisée, le fichier de résultat du recalage ZZZZ159_opti.resu contient les informations suivantes :

Calcul de la sensibilité par rapport à = YOUN__ DSDE__ SIGY__

=======================================================

Iteration 0 =

=> Fonctionnelle = 1.0

=> Résidu = 1.0

=> Paramètres =

YOUN__ = 100000.0

DSDE__ = 1000.0

SIGY__ = 30.0

=======================================================

Calcul de la sensibilité par rapport à = YOUN__ DSDE__ SIGY__

=======================================================

Iteration 1 =

=> Fonctionnelle = 0.259742161795

=> Résidu = 0.30865397471

=> Paramètres =

YOUN__ = 300857.888503

DSDE__ = 9135.12770111

SIGY__ = 152.548047532

=======================================================

Calcul de la sensibilité par rapport à = YOUN__ DSDE__ SIGY__

=======================================================

Iteration 2 =

=> Fonctionnelle = 0.0757636994765

=> Résidu = 0.473053125246

=> Paramètres =

YOUN__ = 157723.378846

DSDE__ = 2022.7431335

SIGY__ = 213.155325073

=======================================================

Calcul de la sensibilité par rapport à = YOUN__ DSDE__ SIGY__

=======================================================

Iteration 3 =

=> Fonctionnelle = 0.00190706595529

=> Résidu = 0.0520849911718

=> Paramètres =

YOUN__ = 192302.166747

DSDE__ = 895.845518907

SIGY__ = 203.753909707

=======================================================

Calcul de la sensibilité par rapport à = YOUN__ DSDE__ SIGY__

=======================================================

Iteration 4 =

=> Fonctionnelle = 2.70165453323e-06

=> Résidu = 0.00172172540305

=> Paramètres =

YOUN__ = 199801.572817

DSDE__ = 1928.08902726

SIGY__ = 200.274590793

=======================================================

Calcul de la sensibilité par rapport à = YOUN__ DSDE__ SIGY__

=======================================================

Iteration 5 =

=> Fonctionnelle = 2.65431115925e-12

=> Résidu = 1.83121468206e-06

=> Paramètres =

YOUN__ = 199999.975047

DSDE__ = 1999.86955101

SIGY__ = 200.000462987

=======================================================

=======================================================

CONVERGENCE ATTEINTE

=======================================================

Valeurs propres du Hessien:

[7.17223479e+00 3.67264061e-01 6.25194340e-04]

Vecteurs propres associés:

[0.98093218 -0.00549396 -0.19427266]

[-0.19418112 -0.06940835 -0.97850712]

[0.00810827 -0.9975732 0.0691517]

On peut en déduire que :

Les combinaisons suivantes de paramètres sont prépondérantes pour votre calcul :

  1. +9.8E-01 * YOUN__ -1.9E-01 * DSDE__

associée à la valeur propre 7.2E+00

Les combinaisons suivantes de paramètres sont insensibles pour votre calcul:

  1. -1.9E-01 * YOUN__ -9.8E-01 * DSDE__

associée à la valeur propre 6.3E-04

Et le fichier POSTSCRIPT ZZZZ159.ps contient:

_images/10000000000002E80000020B1A88118CA2DB2CF9.jpg _images/10000000000002EB0000020B35643E1C935F2202.jpg

6.2. Identification des paramètres d’un modèle dynamique en exploitant la sensibilité des modes propres#

Cet exemple est traité par le test SDLS121A [V2.03.121].

On souhaite recaler l’épaisseur d’une plaque et la valeur d’une masse discrète qui est située dessus en utilisant des mesures expérimentales de modes propres.

6.2.1. Mise en données#

Dans le fichier maitre on renseigne d’abord les noms des tables qui contiendront à la fois les résultats calculés ainsi que les résultats numériques:

calcul = [["REPONSE1", "NUME_ORDRE", "FREQ"], ["REPONSE2", "NUME_ORDRE", "MAC"]]

experience = [["REPEXP1", "NUME_ORDRE", "FREQ"], ["REPEXP2", "NUME_ORDRE", "MAC_EXP"]]

Il est important de noter ici que, pour les résultats calculés, la REPONSES2 est donnée par la diagonale de la matrice des MAC issue de la commande MAC_MODES comme on verra un peu plus tard dans ce paragraphe. Le nom du paramètre “MAC” est donc un nom réservé, choisi ainsi dans le Fortran, et donc il ne peut plus être utilisé par la suite (pour la réponse expérimentale correspondant on a choisi “MAC_EXP”)

Les options retenues dans la commande MACR_RECAL, toujours dans le fichier maitre sont:

RESU = MACR_RECAL(
     UNITE_ESCL=3,
     RESU_EXP=experience,
     LIST_PARA=parametres,
     RESU_CALC=calcul,
     POIDS=poids,
     METHODE="HYBRIDE",
     ITER_FONC_MAXI=500,
     NB_PARENTS=10,
     NB_FILS=5,
     ECART_TYPE=10.0,
     ITER_ALGO_GENE=2,
     DYNAMIQUE=_F(MODE_EXP="MODMES", MODE_CALC="MODNUM", APPARIEMENT_MANUEL="NON"),
)

On a choisi donc de lancer le recalage en utilisant la méthode HYBRIDE avec deux itérations pour l’algorithme évolutionnaire. Finalement on définit le profil suivant pour l’étude:

_images/10000000000003F6000001FBAA93DC2BD5E4FD2E.jpg

6.2.2. Calcul esclave#

La principale particularité du calcul esclave est la présence dans le fichier de commande (unité 3) de deux modèles: le modèle expérimental et celui numérique. Ci-dessous on présente, pour ce cas-test, le fichier de commande esclave avec les explications nécessaires.

  • lecture du maillage expérimental (le maillage des capteurs):

    PRE_GIBI(UNITE_GIBI=23)
    
    MAILEXP1 = LIRE_MAILLAGE()
    
  • création d’un groupe de nœuds qui servira plus tard à définir un éléments discret de masse:

    MAILEXP1 = DEFI_GROUP(
        reuse=MAILEXP1,
        MAILLAGE=MAILEXP1,
        CREA_GROUP_NO=_F(NOM="NO_MA", OPTION="ENV_SPHERE", POINT=(2.0, 3.0), RAYON=0.1, PRECISION=0.1),
    )
    
  • création du groupe de nœuds pour définir les conditions aux limites:

    MAILEXP1 = DEFI_GROUP(
         reuse=MAILEXP1, MAILLAGE=MAILEXP1, CREA_GROUP_NO=_F(GROUP_MA="BORDS", NOM="BORDS")
    )
    
  • création d’un éléments POI1 pour introduire la masse discrète:

    MAILEXP2 = CREA_MAILLAGE(MAILLAGE=MAILEXP1, CREA_POI1=(_F(NOM_GROUP_MA="MASS", GROUP_NO="NO_MA"),))
    
  • affectation du modèle expérimental:

    MODEXP = AFFE_MODELE(
    MAILLAGE=MAILEXP2,
    AFFE=(
         _F(GROUP_MA="TOUT_ELT", PHENOMENE="MECANIQUE", MODELISATION="DST"),
         _F(GROUP_MA="MASS", PHENOMENE="MECANIQUE", MODELISATION="DIS_T"),
    ),
    )
    
  • définition des caractéristiques élémentaires, matériau, etc.

    CAREXP=AFFE_CARA_ELEM(...)
    
    ACIER=DEFI_MATERIAU(...)
    
    MATEX=AFFE_MATERIAU(...)
    
  • calculs élémentaires et assemblages des matrices.

    KELEXP=CALC_MATR_ELEM(OPTION='RIGI_MECA',
    ...)
    
    MELEXP=CALC_MATR_ELEM(OPTION='MASS_MECA',
    ...)
    
    NUMEXP=NUME_DDL(...)
    
    KASSEXP=ASSE_MATRICE(...)
    
    MASSEXP=ASSE_MATRICE(...)
    
  • création de la sd_mode_meca avec les modes propres expérimentaux:

    MODMES = LIRE_RESU(
         TYPE_RESU="MODE_MECA",
         FORMAT="IDEAS",
         MODELE=MODEXP,
         UNITE=21,
         NOM_CHAM="DEPL",
         MATR_RIGI=KASSEXP,
         MATR_MASS=MASSEXP,
         FORMAT_IDEAS=_F(
              NOM_CHAM="DEPL",
              NUME_DATASET=55,
              RECORD_6=(1, 2, 3, 8, 2, 6),
              POSI_ORDRE=(7, 4),
              POSI_NUME_MODE=(7, 4),
              POSI_FREQ=(8, 1),
              POSI_MASS_GENE=(8, 2),
              POSI_AMOR_GENE=(8, 3),
              NOM_CMP=("DX", "DY", "DZ", "DRX", "DRY", "DRZ"),
         ),
         TOUT_ORDRE="OUI",
    )
    

Et on continue avec le modèle numérique, les mêmes étapes. Les paramétrés à recaler sont EP__ (l’épaisseur) et MP__ (la masse):

EP__ = 0.5
MP__ = 50000.0
PRE_GIBI(UNITE_GIBI=22)

# nombre de fréquences
NF = 8

MODES = CALC_MODES(
     MATR_RIGI=M_AS_RIG,
     MATR_MASS=M_AS_MAS,
     OPTION="PLUS_PETITE",
     CALC_FREQ=_F(NMAX_FREQ=NF),
     SOLVEUR_MODAL=_F(METHODE="SORENSEN"),
     VERI_MODE=_F(STOP_ERREUR="NON"),
)

Le maillage expérimental est toujours plus grossier que le maillage du modèle numérique donc il faut projeter le résultat numérique sur le maillage expérimental:

MODNUM = PROJ_CHAMP(RESULTAT=MODES, MODELE_1=MODEL, MODELE_2=MODEXP, NUME_DDL=NUMEXP)

On récupère le tableau des fréquences expérimentales

REPEXP1 = RECU_TABLE(CO=MODMES, NOM_PARA="FREQ")

On construit le tableau des MAC expérimentaux - en fait le MAC idéal qui est 1.0

liste_mac = [1.0] * NF

REPEXP2 = CREA_TABLE(
     LISTE=(_F(PARA="NUME_ORDRE", LISTE_I=range(1, NF + 1)), _F(PARA="MAC_EXP", LISTE_R=liste_mac))
)

Et finalement les tableaux avec les réponses calculées:

REPONSE1 = RECU_TABLE(CO=MODES, NOM_PARA="FREQ")

REPONSE2 = MAC_MODES(BASE_1=MODNUM, BASE_2=MODMES)

Les résultats (les valeurs recalées des paramètres) sont ensuite calculés de façon similaire avec le cas classique de recalage présenté dans le paragraphe précédant.

6.3. Identification paramétrique de système conservatif en exploitant l’orthogonalité des modes propres#

Cet exemple est traité par la modélisation D du cas test SDLS121 [V2.03.121].

On souhaite recaler l’épaisseur d’une plaque et la valeur d’une masse discrète qui est située dessus en utilisant des mesures expérimentales de modes propres.

A partir des déformées modales relevées aux points d’observation, on effectue une expansion sur le modèle numérique support. On essaie par la suite de retrouver les paramètres du modèle tels que les matrices de masse et de raideur généralisées relatives aux modes identifiés expérimentalement soient diagonales et que l’écart entre la pulsation propre mesurée et la pulsation propre calculée soit minimal.

6.3.1. Mise en données#

La technique, illustrée ici, exploite les déformées modales identifiées étendues sur le modèle numérique support. Cette déformée modale peut être obtenue à l’aide d’un calcul indépendant en déposant les déformées étendues dans un fichier qui sera lu par la suite par le fichier esclave. Pour de raisons pratiques, on effectue l’expansion dans le fichier pilote. Il est plus facile ainsi de récupérer le modèle support qui sera utilisé dans le fichier esclave.

Dans le fichier maître on renseigne à la fois les valeurs cibles (valeurs expérimentales) et les noms des tables qui contiennent les résultats issus du calcul numérique effectué dans le fichier esclave.

Les différentes étapes sont rappelées ci-après.

  • Création d’un modèle expérimental afin de pouvoir définir la localisation des points de mesure. Les nœuds du maillage peuvent être reliés entre eux par des éléments discrets pour faciliter la visualisation des informations mesurées. Les caractéristiques mécaniques que l’on affecte à ce modèle n’influent pas sur les résultats, elles permettent au modèle d’accueillir les modes propres identifiés

  • Lecture des modes propres identifiés

  • Création du modèle numérique support pour l’expansion de la mesure

  • Définition de la base d’expansion (ici, une base modale)

  • Calcul des coordonnées des modes identifiés dans la base d’expansion

  • Expansion des informations mesurées sur le modèle support

  • Ecriture des modes étendus dans un fichier afin de pouvoir l’exploiter dans le calcul esclave

  • Définition des valeurs cibles

Les valeurs cibles sont déposées dans deux listes. La première liste contient les termes extra-diagonnaux qui devraient être nuls et la deuxième liste contient les fréquences propres identifiées.

  • Définition des paramètres de recalage

  • Lancement de la procédure d’optimisation

6.3.2. Calcul esclave#

Le calcul esclave crée les tables qui contiendront les valeurs calculées à partir des paramètres d’entrée. Les différentes étapes de calcul sont décrites ci-après:

  • Création du modèle support (même numérotation de ddl que celle qui a servi à l’expansion de la mesure)

  • Lecture des déformées modales étendues

  • Calcul des matrices de masse et de raideur generalisees via MAC_MODES

  • Création des tables qui contiennent les termes extradiagonnaux des matrices généralisées

  • Création de la table qui contient les fréquences propres estimées à l’aide des matrices généralisées

6.4. Identification paramétrique de système dissipatif en exploitant les relations de norme des déformées modales#

Cet exemple est traité par la modélisation E du cas test SDLS121 [V2.03.121].

On souhaite recaler l’épaisseur d’une plaque, la valeur d’une masse ponctuelle sur la plaque et les amortissements discrets répartis sur la plaque.

A partir des déformées modales complexes relevées aux points d’observation, on effectue une expansion sur le modèle numérique support. On essaie par la suite de retrouver les paramètres du modèle de telle sorte que les modes propres identifiés expérimentalement vérifient les relations de norme associées au modèle numérique. On se focalise uniquement sur les termes diagonaux de la matrice de normalisation.

6.4.1. Mise en données#

La mise en données ressemble à celle présentée dans le chapitre précédent (6.3). La différence se situe au niveau de l’expansion de la déformée modale. Les déformées modales sont ici complexes. On effectue l’expansion en traitant la partie réelle et la partie imaginaire de façon indépendante. La déformée complexe étendue est obtenue après assemblage de la déformée réelle et de la déformée imaginaire étendues.

Les différentes étapes sont décrites ci-après:

  • Création du modèle expérimental

  • Lecture des modes propres identifiés (expérimentaux)

  • Expansion de la mesure

  • Définition des valeurs cibles (les valeurs cibles sont ici des vecteurs nuls)

  • Définition des paramètres de recalage

  • Lancement de la procédure d’optimisation

6.4.2. Calcul esclave#

Le calcul esclave crée les tables qui contiendront les termes diagonaux de la matrice de normalisation.

Les différentes étapes de calcul sont décrites ci-après:

  • Création du modèle support (même numérotation de ddl que celle qui a servi à l’expansion de la mesure)

  • Lecture des déformées modales étendues

  • Lecture des fréquences propres et amortissements réduits

  • Calcul des produits matrice * vecteur par PROD_MATR_CHAM

  • création de la table qui contient les termes relatifs à l’amortissement et à la masse : \(\frac{{y}_{\nu}^{T}B\stackrel{̄}{{y}_{\nu}}+2\Re ({s}_{\nu}){y}_{\nu}^{T}M\stackrel{̄}{{y}_{\nu}}}{\mid {n}_{\nu}\mid }={z}_{1\nu }\)

  • création de la table qui contient les termes relatifs à la rigidité et à la masse : \(\frac{{s}_{\nu}\stackrel{̄}{{s}_{\nu}}{y}_{\nu}^{T}M\stackrel{̄}{{y}_{\nu}}-{y}_{\nu}^{T}K\stackrel{̄}{{y}_{\nu}}}{\mid {n}_{\nu}{s}_{\nu}\mid }={z}_{2\nu }\)

  • création de la table qui contient les termes relatifs à la masse, la rigidité et l’amortissement : \(\frac{{s}_{\nu}^{2}{y}_{\nu}^{T}{\mathit{My}}_{\nu}+{s}_{\nu}{y}_{\nu}^{T}{\mathit{By}}_{\nu}+{y}_{\nu}^{T}{\mathit{Ky}}_{\nu}}{{n}_{\nu}{s}_{\nu}}={z}_{3\nu }\)