12. Reprises, archivage et gestion de l’état initial#
◇ RESULTAT = evol_noli,
Dans le cas où l’on souhaite poursuivre un calcul déjà exécuté, le mot-clef RESULTAT indique quel objet est enrichi.
12.1. Définition d’un état initial#
◇ ETAT_INIT = _F(
◆ | DEPL = cham_no,
| EVOL_NOLI = evol_noli,
| SIGM = carte / cham_elem,
| VARI = cham_elem,
◇ STRX = cham_elem,
# Si: exists("EVOL_NOLI")
◇ NUME_ORDRE = int,
◇ NUME_DIDI = int,
◇ INST = float,
# Si: exists("INST")
◇ CRITERE = / "ABSOLU",
/ "RELATIF" (par défaut),
# Si: (equal_to("CRITERE", 'RELATIF'))
◇ PRECISION = float (défaut: 1e-06),
# Si: (equal_to("CRITERE", 'ABSOLU'))
◆ PRECISION = float,
),
Le mot-clef ETAT_INIT permet de définir un état initial de référence. Dans le cas où l’utilisateur a spécifié que le concept résultat est réentrant (par le mot RESULTAT), le mot-clé ETAT_INIT est obligatoire. Par convention, l’état initial d’un calcul vierge (sans reprise) est stocké au numéro d’ordre 0.
Par défaut (si on ne précise rien) tous les champs sont identiquement nuls. L’état initial peut être défini soit en précisant chaque champ de l’état initial, soit en extraction depuis un concept de type evol_noli préexistant.
Si on donne une structure de données de type EVOL_NOLI provenant d’un autre calcul par le mot-clef EVOL_NOLI, on extrait automatiquement les champs de cette structure de données pour l’état initial.
L’extraction de l’état mécanique initial dans la structure de données evol_noli se fait à partir du numéro d’archivage NUME_ORDRE ou de l’instant d’archivage INST.
Si NUME_ORDRE ou INST ne sont pas remplis, on prend le dernier numéro archivé existant. Ces champs extraits seront archivés au premier instant de la liste d’instants défini sous le mot-clé INCREMENT. Dans le cas où l’on renseigne INST, les mots-clefs PRECISION et CRITERE (voir [U4.71.00] pour la syntaxe détaillée) servent à repérer le bon numéro d’ordre. En effet, les instants sont repérés par un numéro d’ordre (un entier). Si l’utilisateur veut utiliser un instant (un réel) et non un numéro d’ordre pour INST, l’opérande PRECISION permet de sélectionner ce numéro d’ordre.
A - Exemple simple (comportement par défaut)
listInst = DEFI_LIST_REEL(DEBUT=0.,
INTERVALLE=_F(JUSQU_A= 10.,NOMBRE=10)),
evolNoli = MECA_NON_LINE(INCREMENT=_F(LIST_INST=listInst,
INST_FIN=4.)),
evolNoli = MECA_NON_LINE(reuse=evolNoli,
INCREMENT=_F(LIST_INST=listInst),
ETAT_INIT=_F(EVOL_NOLI=evolNoli))
Le premier MECA_NON_LINE effectue le calcul pour les instants 1, 2, 3 et 4.
Le second MECA_NON_LINE: effectue le calcul pour les instants de 5 à 10, l’état initial correspondant au temps 4.
B - Exemple pour montrer l’intérêt de deux listes d’instants différentes
listInst1 = DEFI_LIST_REEL(DEBUT=0.,
INTERVALLE=_F(JUSQU_A= 10., NOMBRE=10)),
evolNoli = MECA_NON_LINE (INCREMENT=_F(LIST_INST=listInst1))
listInst2 = DEFI_LIST_REEL(DEBUT=20.,
INTERVALLE=_F(JUSQU_A= 30., NOMBRE=10))
evolNoli = MECA_NON_LINE(reuse=evolNoli,
RESULTAT=evolNoli,
INCREMENT=_F(LIST_INST=listInst2, INST_INIT=20.),
ETAT_INIT=_F(EVOL_NOLI=evolNoli,))
Le premier MECA_NON_LINE effectue le calcul pour les instants de 1 à 10. L’état initial, de numéro d’ordre 0, est vierge (tous les champs sont nuls).
Le second MECA_NON_LINE effectue le calcul des instants 21 à 30. L’état initial correspond à l’instant 10 du premier MECA_NON_LINE (dernier instant calculé dans le premier MECA_NON_LINE). Cet état initial correspond pour ce second MECA_NON_LINE à l’instant 20 (INST_INIT=20.).
L’utilisation d’un état initial non nul va changer le calcul de la déformation thermique. S’il y a un état initial non nul, alors le calcul de la déformation thermique est incrémental pur.
Si on utilise un état initial dont le modèle est différent du modèle de calcul renseigné dans l’opérateur, on procède automatiquement au passage entre les deux modèles:
Si le modèle de calcul est inclus dans le modèle donné dans l’état initial, les données de l’état initial sont simplement recopiées maille à maille pour tous les champs
Si le modèle donné dans l’état initial est inclus dans le modèle de calcul, on commence par copier les valeurs de l’état initial pour les mailles communes puis complète avec la valeur nulle. Il faut prendre garde au sens que peut avoir une variable interne nulle initiale dans le calcul
Les mots-clefs DEPL, SIGM et VARI permettent (respectivement) de donner un champ de déplacement, de contraintes et de variables internes initiaux.
D’autres champs ne sont disponibles que dans certaines modélisations:
Le mot-clef STRX donne le champ d’efforts et de déplacements correspondant aux éléments de structures
Si un résultat donné par le mot-clef EVOL_NOLI est également donné, les champs ci-dessus viennent le surcharger.
Si l’un de ces champs n’est pas précisé, il est pris nul par défaut. Ils peuvent par exemple être issus de la commande CREA_CHAMP [U4.72.04], ou bien avoir été lus dans un fichier par la commande LIRE_RESU [U7.02.01].
Le champ de contraintes et de variables internes aux points de Gauss et le champ des déplacements est un champ aux nœuds. Si les champs ne sont pas définis sur les bons supports les conversions peuvent être faites de manière automatique. Il n’y a aucune condition imposée sur les champs données par l’utilisateur. Ils peuvent très bien représenter un état mécanique non-équilibré et/ou ne respectant pas la loi de comportement. Si le calcul a du mal à converger dans ce cas, le plus simple est de créer artificiellement un état de contraintes initiales nul pour forcer la sélection du mode incrémental, ou d’utiliser une matrice purement élastique, qui permet une convergence certaine au prix d’un grand nombre d’itérations.
En grandes déformations, l’utilisateur souhaitant utiliser le formalisme GDEF_LOG avec un champ de contrainte initial (ETAT_INIT) se reportera au cas test SSNP159b. En effet, pour imposer un champ de contrainte initial, l’utilisateur doit donner en entrée le tenseur de contrainte défini dans l’espace logarithmique \(T\) (et non celui de Cauchy \(\sigma\) ). Les composantes de ce dernier étant stockées en tant que variables internes, il faut utiliser le mot-clef VARI.
Si les caractéristiques matériaux dépendent fortement des variables de commande, il convient d’être prudent sur la sélection de l’état initial, au risque de ne pas converger. En effet, les comportements élastiques existent en deux versions (voir [U4.51.11]). La version élastique « pure » est choisie automatiquement par le code lorsqu’il n’y a pas d’état initial, sinon, on sélectionne la version incrémentale. Or, seule cette dernière est efficace si l’on a de fortes variations des caractéristiques matériaux (élastiques dans ce cas) par rapport aux variables de commande.
Si on utilise simultanément un état provenant d’un résultat complet (mot-clef EVOL_NOLI) et la définition individuelle d’un champ (par exemple les contraintes), la règle de surcharge s’applique et les champs données à titre individuel remplacent ceux présents dans la structure de données donnée comme état initial.
Dans le cas de chargements de type Dirichlet différentiel DIDI, on donne sous NUME_DIDI le numéro d’archivage de l’état mécanique (déplacements) qui sert de référence pour l’application de ces conditions aux limites. Par défaut on prend l’état mécanique défini sous NUME_ORDRE ou INST.
12.2. Archivage des champs#
⟐ ARCHIVAGE = _F(
◆ / PAS_ARCH = int,
/ LIST_INST = listr8,
/ INST = float,
# Si: exists("INST") or exists("LIST_INST")
◇ CRITERE = / "ABSOLU",
/ "RELATIF" (par défaut),
# Si: equal_to("CRITERE", 'RELATIF')
◇ PRECISION = float (défaut: 1e-06),
# Si: equal_to("CRITERE", 'ABSOLU')
◆ PRECISION = float,
◇ CHAM_EXCLU = text (défaut: "('RESI_NOEU', 'RESI_RELA_NOEU')"),
),
Le mot-clef facteur ARCHIVAGE (une seule occurrence) permet d’archiver des ou certains résultats à tous ou certains instants du calcul.
En l’absence de ce mot clé tous les pas de temps sont archivés, y compris les instants de calculs nouvellement créés par redécoupage automatique du pas de temps. L’archivage permet de réduire sensiblement la taille des bases en sélectionnant les instants sauvegardés.
La désignation des instants à stocker est effectuée soit par une liste d’instants (mots-clefs LIST_INST ou INST) ou alors par une fréquence d’archivage PAS_ARCH (tous les PAS_ARCH pas de temps).
- Remarques
le dernier pas de calcul est toujours stocké pour pouvoir effectuer une reprise
si on emploie un accès par liste d’instants, alors les instants de calculs nouvellement créés par redécoupage automatique du pas de temps ne seront pas archivés
l’état initial est systématiquement archivé sous le numéro d’ordre 0 dès lors que l’on n’est pas en reprise de calcul
Le mot-clef CHAM_EXCLU permet de préciser les champs qui ne seront pas archivés, excepté au dernier pas de temps.
12.3. Archivage personnalisé#
◇ OBSERVATION = _F(
◇ TITRE = text,
◇ OBSE_ETAT_INIT = / "NON",
/ "OUI" (par défaut),
◇ EVAL_CHAM = / "MAX",
/ "MAXI_ABS",
/ "MIN",
/ "MINI_ABS",
/ "MOY",
/ "VALE" (par défaut),
◆ / NOM_CMP = text,
/ NOM_VARI = text,
◇ EVAL_CMP = / "FORMULE",
/ "VALE" (par défaut),
◇ INST = float,
◇ LIST_INST = listr8,
◇ PAS_OBSE = int,
◇ CRITERE = / "ABSOLU",
/ "RELATIF" (par défaut),
◆ NOM_CHAM = / "ACCE",
/ "ACCE_ABSOLU",
/ "CONT_ELEM",
/ "CONT_NOEU",
/ "DEPL",
/ "DEPL_ABSOLU",
/ "EPSI_ELGA",
/ "FORC_NODA",
/ "SIEF_ELGA",
/ "VARI_ELGA",
/ "VITE",
/ "VITE_ABSOLU",
# Si: (equal_to("EVAL_CMP", 'FORMULE'))
◆ FORMULE = formule,
# Si: is_in("NOM_CHAM", ('DEPL','VITE','ACCE','TEMP','FORC_NODA','CONT_NOEU','DEPL_ABSOLU','VITE_ABSOLU','ACCE_ABSOLU'))
◆ / TOUT = "OUI" (ou non renseigné),
/ NOEUD = no,
/ GROUP_NO = grno,
/ GROUP_MA = grma,
/ MAILLE = ma,
# Si: is_in("NOM_CHAM", ('SIEF_ELGA','EPSI_ELGA','VARI_ELGA'))
◆ / TOUT = "OUI" (ou non renseigné),
/ GROUP_MA = grma,
/ MAILLE = ma,
◇ EVAL_ELGA = / "MAX",
/ "MIN",
/ "VALE" (par défaut),
# Si: (equal_to("EVAL_ELGA", 'VALE'))
◆ POINT = int,
◇ SOUS_POINT = int,
# Si: (equal_to("NOM_CHAM", 'CONT_ELEM'))
◆ / TOUT = "OUI" (ou non renseigné),
/ GROUP_MA = grma,
/ MAILLE = ma,
# Si: (equal_to("CRITERE", 'RELATIF'))
◇ PRECISION = float (défaut: 1e-06),
# Si: (equal_to("CRITERE", 'ABSOLU'))
◆ PRECISION = float,
),
Le mot-clef facteur OBSERVATION permet de post-traiter certains champs aux nœuds ou aux éléments sur des parties de modèle à des instants d’une liste (dite d’observation) généralement plus raffinée que la liste des instants archivés définie dans le mot clé ARCHIVAGE (où on stocke tous les champs sur tout le modèle). Il sert essentiellement à des économies de stockage, mais aussi à évaluer des champs sur des parties réduites du maillage, sans avoir besoin de post-traiter après le calcul. Il est possible, par exemple, de calculer la norme des contraintes, au sens de von Mises, et de la stocker dans la table d’observation.
Ce mot clé est répétable et permet la création d’une table d’observation de même nom que le concept résultat de STAT_NON_LINE que l’on pourra extraire à l’aide de la commande [RECU_TABLE].
On ne peut utiliser que 99 occurrences du mot-clef OBSERVATION au maximum.
Il est possible de nommer une occurrence de l’observation (colonne NOM_OBSERVATION ) en utilisant le mot-clef TITRE. S’il n’est pas utilisé, la colonne NOM_OBSERVATION contient OBSERVATION_xx avec xx variant de 1 à 99.
12.3.1. Sélection dans le transitoire#
Pour créer la liste des observations à faire sur le transitoire, LIST_INST, INST et PAS_OBSE ont la même signification que les opérandes de même nom servant à définir une liste d’archivage. PAS_OBSE jouant le même rôle que PAS_ARCH dans ARCHIVAGE.
L’opérande OBSE_ETAT_INIT précise si l’on doit observer les champs à l’instant initial car l’instant initial n’est pas gérable par la liste d’instants.
Les paramètres PRECISION et CRITERE permettent de gérer la précision de la sélection des instants pour l’observation.
12.3.2. Sélection des valeurs#
NOM_CHAM permet de définir le champ à post-traiter ainsi que ses composantes données par leur nom (NOM_CMP) ou, pour les variables internes, le nom de celles-ci (au lieu de V1, V2, …). On ne peut définir que 20 composantes au maximum par occurrence du mot-clef facteur OBSERVATION. On peut post-traiter les champs sortis par défaut par l’opérateur ou demander la sortie d’autres champs (pour l’instant, seulement EPSI_ELGA).
Pour d’autres champs, il faut faire une demande d’évolution.
La sélection pour NOM_VARI ne fonctionne que pour des champs de type VARI_ELGA.
12.3.3. Sélection dans l’espace#
Les mots-clefs TOUT, GROUP_NO et GROUP_MA permettent de définir le support géométrique de post-traitement:
pour des champs aux nœuds(“DEPL”, “VITE”, “ACCE”, “DEPL_ABSOLU”, “VITE_ABSOLU”, “ACCE_ABSOLU”, “CONT_NOEU”, “FORC_NODA”), on extrait la liste des nœuds
pour des champs aux points de Gauss (“SIEF_ELGA”, “VARI_ELGA” ), on extrait la liste des mailles.
Attention à ne pas utiliser TOUT=”OUI” sur des gros maillages!
12.3.4. Observation d’un champ ELGA#
Pour un champ ELGA, on commence par choisir les composantes ou la formule entre les composantes avec le mot-clef EVAL_CMP:
Si EVAL_CMP=”VALE”, on extrait simplement la liste des composantes donnée par NOM_CMP ou NOM_VARI .
Si EVAL_CMP=”FORMULE”, on évalue la formule donnée par le mot-clef-simple FORMULE.
Si on applique une formule sur les composantes, on aura donc une valeur et donc une observation, sinon, on aura autant d’observations que de composantes dans la liste NOM_CMP ou NOM_VARI.
Une fois évalué les composantes ou la formule sur les composantes, par le mot-clef EVAL_ELGA, on peut:
Extraire ces valeurs sur les points et sous-points d’intégration avec EVAL_ELGA=”VALE”. Dans ce cas, il faut préciser explicitement le point et le sous-point d’intégration par POINT et SOUS_POINT. Les sous-points d’intégration apparaissent pour les éléments de structures (poutres, plaques, coques, tuyaux, etc.).
Demander d’extraire le maximum EVAL_ELGA=”MAX” ou le minimum EVAL_ELGA=”MIN” sur tous les points et sous-points d’une maille.
Si on demande explicitement un point et un sous-point, on aura autant de réalisations que de points demandés, multiplié par le nombre de composantes demandées. Par contre, si on demande le maximum ou le minimum, il y a aura une seule observation par composante demandée.
Une fois évalué les composantes (ou la formule sur les composantes), ainsi que le point/sous-point d’extraction, on peut par le mot-clef EVAL_CHAM:
Extraire ces valeurs sur toutes les mailles avec EVAL_CHAM=”VALE”.
Demander d’extraire le maximum EVAL_CHAM=”MAX”, le minimum EVAL_CHAM=”MIN” ou la moyenne EVAL_CHAM=”MOY”
Demander d’extraire la valeur minimale en absolu EVAL_CHAM=”MINI_ABS” telle que MINI_ABS(-1,3,4,-12,-0.1) = 0.1
Demander d’extraire la valeur maximale en absolu EVAL_CHAM=”MAXI_ABS” telle que MAXI_ABS(-1,3,4,-12,-0.1) = 12
Voici un exemple pour extraire le maximum de la trace du tenseur des contraintes sur le GROUP_MA=”TOTO”:
trace = FORMULE(VALE='0.333*(SIXX+SIYY+SIZZ)', NOM_PARA=('SIXX','SIYY','SIZZ',));
OBSERVATION =_F( NOM_CHAM = 'SIEF_ELGA',
GROUP_MA = 'TOTO',
EVAL_CHAM = 'MAX',
NOM_CMP = ('SIXX','SIYY','SIZZ',),
EVAL_CMP = 'FORMULE',
FORMULE = trace,
EVAL_ELGA = 'MAX')
12.3.5. Observation d’un champ NOEU#
On commence par choisir les composantes ou la formule entre les composantes par le mot-clef EVAL_CMP:
Si EVAL_CMP=”VALE”, on extrait simplement la liste des composantes donnée par NOM_CMP
Si EVAL_CMP=”FORMULE”, on évalue la formule donnée par le mot-clef-simple FORMULE.
Si on applique une formule sur les composantes, on aura donc une valeur et donc une observation, sinon, on aura autant d’observations que de composantes dans la liste NOM_CMP.
Une fois évalué les composantes (ou la formule sur les composantes), on peut, par le mot-clef EVAL_CHAMP :
Extraire ces valeurs sur tous les noeuds avec EVAL_CHAM=”VALE”.
Demander d’extraire le maximum EVAL_CHAM = “MAX”, le minimum EVAL_CHAM = “MIN” ou la moyenne EVAL_CHAM = “MOY”.
Demander d’extraire la valeur minimale en absolu EVAL_CHAM=”MINI_ABS” telle que MINI_ABS(-1,3,4,-12,-0.1) = 0.1
Demander d’extraire la valeur maximale en absolu EVAL_CHAM=”MAXI_ABS” telle que MAXI_ABS(-1,3,4,-12,-0.1) = 12
Voici un exemple pour extraire le maximum de la composante DX du déplacement sur GROUP_NO=”TOTO”:
OBSERVATION = _F( NOM_CHAM = 'DEPL',
GROUP_NO = 'TOTO',
EVAL_CHAM = 'MAX',
NOM_CMP = ('DX',),
)
12.3.6. Observation d’un champ ELEM#
On commence par choisir les composantes ou la formule entre les composantes par EVAL_CMP:
Si EVAL_CMP=”VALE”, on extrait simplement la liste des composantes donnée par NOM_CMP
Si EVAL_CMP=”FORMULE”, on évalue la formule donnée par le mot-clef-simple FORMULE
Si on applique une formule sur les composantes, on aura donc une valeur et donc une observation, sinon, on aura autant d’observations que de composantes dans la liste NOM_CMP.
Une fois évalué les composantes (ou la formule sur les composantes), ainsi que le point/sous-point d’extraction, on peut, par le mot-clef EVAL_CHAMP :
Extraire ces valeurs sur toutes les mailles avec EVAL_CHAM=”VALE”.
Demander d’extraire le maximum EVAL_CHAM = “MAX”, le minimum EVAL_CHAM = “MIN” ou la moyenne EVAL_CHAM = “MOY”.
Demander d’extraire la valeur minimale en absolu EVAL_CHAM=”MINI_ABS” telle que MINI_ABS(-1,3,4,-12,-0.1) = 0.1
Demander d’extraire la valeur maximale en absolu EVAL_CHAM=”MAXI_ABS” telle que MAXI_ABS(-1,3,4,-12,-0.1) = 12
12.3.7. Contenu des valeurs en sortie#
La table contiendra au maximum 16 colonnes.
NOM_OBSERVATION |
K80 |
Nom donné automatiquement ou par le mot clef TITRE |
TYPE_OBJET |
K16 |
La table ne contient que des valeurs réelles donc R |
NOM_SD |
K24 |
“ “ |
NUME_REUSE |
I |
Indice de réutilisation de la table en cas de REUSE |
NUME_OBSE |
I |
Numéro d’ordre de l’observation |
INST |
R |
Instant de l’observation |
NOM_CHAM |
K16 |
Nom du champ observé |
EVAL_CHAM |
K8 |
Type d’évaluation du champ |
NOM_CMP |
K8 |
Nom de la composante observée |
NOM_VARI |
K16 |
Nom de la variable interne observée |
EVAL_CMP |
K8 |
Type d’évaluation de la composante |
NOEUD |
K8 |
Nœud où se réalise l’observation (champ aux nœuds) |
MAILLE |
K8 |
Maille où se réalise l’observation (champ aux mailles) |
EVAL_ELGA |
K8 |
Type d’évaluation des champs aux points de Gauss |
POINT |
I |
Point d’intégration où se réalise l’observation (champs aux mailles) |
SOUS_POINT |
I |
Sous-point d’intégration où se réalise l’observation (champs aux mailles) |
VALE |
R |
Valeur |
NUME_GLOBAL_NOEUD |
I |
Numéro du nœud où se réalise l’observation (champ aux nœuds) dans la numérotation globale (attention cette numérotation commence à zéro). Cette colonne n’est ajoutée que dans le cas de l’utilisation du parallélisme distribué, |
Le paramètre NUME_REUSE sert en cas d’enrichissement de la structure de données résultat. En effet, si la reprise écrase d’anciens numéros d’ordre dans la structure de données résultat (voir mot-clef ETAT_INIT), ce n’est pas le cas des valeurs dans la table d’observation, qui n’est jamais modifiée rétroactivement. On peut donc avoir deux valeurs différentes pour le même instant dans la table, la distinction se fera alors sur NUME_REUSE.