u4.54.03 Opérateur THER_NON_LINE_MO#

Syntaxe#

Détail de la syntaxe
evol_ther = THER_NON_LINE_MO(
    ◆ MODELE = modele,
    ◆ CHAM_MATER = cham_mater,
    ◆ EXCIT = _F(
         ◆ CHARGE = char_ther,
      ),
    ◇ ETAT_INIT = _F(
         ◇ EVOL_THER = evol_ther,
         ◇ NUME_ORDRE = int,
      ),
    ⟐ CONVERGENCE = _F(
         ◇ CRIT_TEMP_RELA = float (défaut: 0.001),
         ◇ CRIT_ENTH_RELA = float (défaut: 0.01),
         ◇ ITER_GLOB_MAXI = int (défaut: 10),
      ),
    ⟐ SOLVEUR = _F(
         ◇ METHODE = / "MULT_FRONT",
                     / "LDLT",
                     / "MUMPS" (par défaut),
                     / "GCPC",
                     / "PETSC",
         # Si: equal_to("METHODE", 'MULT_FRONT')
             ◇ RENUM = / "MD",
                       / "MDA" (par défaut),
             ◇ NPREC = int (défaut: 8),
             ◇ ELIM_LAGR = / "OUI",
                           / "NON" (par défaut),
             ◇ STOP_SINGULIER = / "OUI" (par défaut),
                                / "NON",
         # Si: equal_to("METHODE", 'LDLT')
             ◇ RENUM = "RCMK",
             ◇ NPREC = int (défaut: 8),
             ◇ ELIM_LAGR = / "OUI",
                           / "NON" (par défaut),
             ◇ STOP_SINGULIER = / "OUI" (par défaut),
                                / "NON",
         # Si: equal_to("METHODE", 'MUMPS')
             ◇ RENUM = / "AMD",
                       / "AMF",
                       / "PORD",
                       / "METIS",
                       / "QAMD",
                       / "SCOTCH",
                       / "AUTO" (par défaut),
                       / "PARMETIS",
                       / "PTSCOTCH",
             ◇ NPREC = int (défaut: 8),
             ◇ ELIM_LAGR = / "OUI",
                           / "NON",
                           / "LAGR2" (par défaut),
             ◇ STOP_SINGULIER = / "OUI" (par défaut),
                                / "NON",
             ◇ TYPE_RESOL = / "NONSYM",
                            / "SYMGEN",
                            / "SYMDEF",
                            / "AUTO" (par défaut),
             ◇ ACCELERATION = / "AUTO" (par défaut),
                              / "FR",
                              / "FR+",
                              / "FR++",
                              / "LR",
                              / "LR+",
                              / "LR++",
             ◇ LOW_RANK_SEUIL = float,
             ◇ PRETRAITEMENTS = / "SANS",
                                / "AUTO" (par défaut),
             ◇ POSTTRAITEMENTS = / "SANS",
                                 / "AUTO" (par défaut),
                                 / "FORCE",
                                 / "MINI",
             ◇ PCENT_PIVOT = int (défaut: 35),
             ◇ REDUCTION_MPI = int,
             ◇ NB_RHS = int (défaut: 1),
             ◇ RESI_RELA = float (défaut: 1e-06),
             ◇ GESTION_MEMOIRE = / "IN_CORE",
                                 / "OUT_OF_CORE",
                                 / "AUTO" (par défaut),
                                 / "EVAL",
         # Si: equal_to("METHODE", 'GCPC')
             ◇ ELIM_LAGR = / "OUI",
                           / "NON" (par défaut),
             ◇ PRE_COND = / "LDLT_INC" (par défaut),
                          / "LDLT_SP",
                          / "LDLT_DP",
             ◇ RESI_RELA = float (défaut: 1e-06),
             ◇ NMAX_ITER = int,
             # Si: equal_to("PRE_COND", 'LDLT_INC')
                 ◇ RENUM = "RCMK",
                 ◇ NIVE_REMPLISSAGE = int,
             # Si: is_in("PRE_COND", ('LDLT_SP', 'LDLT_DP'))
                 ◇ RENUM = / "SANS",
                           / "METIS",
                           / "PARMETIS" (par défaut),
                 ◇ REAC_PRECOND = int (défaut: 30),
                 ◇ PCENT_PIVOT = int (défaut: 20),
                 ◇ GESTION_MEMOIRE = / "IN_CORE",
                                     / "AUTO" (par défaut),
                 ◇ LOW_RANK_SEUIL = float,
         # Si: equal_to("METHODE", 'PETSC')
             ◇ ELIM_LAGR = / "OUI",
                           / "NON" (par défaut),
             ◇ ALGORITHME = / "CG",
                            / "CR",
                            / "GMRES",
                            / "GCR",
                            / "FGMRES" (par défaut),
                            / "GMRES_LMP",
             ◇ OPTION_PETSC = text,
             ◇ PRE_COND = / "LDLT_INC",
                          / "LDLT_SP" (par défaut),
                          / "LDLT_DP",
                          / "JACOBI",
                          / "SOR",
                          / "ML",
                          / "BOOMER",
                          / "GAMG",
                          / "BLOC_LAGR",
                          / "FIELDSPLIT",
                          / "UTILISATEUR",
                          / "HPDDM",
                          / "SANS",
             ◇ RESI_RELA = float (défaut: 1e-06),
             ◇ NMAX_ITER = int,
             # Si: equal_to("PRE_COND", 'LDLT_INC')
                 ◇ RENUM = "RCMK",
                 ◇ NIVE_REMPLISSAGE = int,
                 ◇ REMPLISSAGE = float (défaut: 1.0),
             # Si: is_in("PRE_COND", ('LDLT_SP', 'LDLT_DP'))
                 ◇ RENUM = / "SANS",
                           / "METIS",
                           / "PARMETIS" (par défaut),
                 ◇ REAC_PRECOND = int (défaut: 30),
                 ◇ PCENT_PIVOT = int (défaut: 20),
                 ◇ GESTION_MEMOIRE = / "IN_CORE",
                                     / "AUTO" (par défaut),
                 ◇ LOW_RANK_SEUIL = float,
             # Si: equal_to("PRE_COND", 'ML')
                 ◇ RENUM = "SANS",
             # Si: equal_to("PRE_COND", 'BOOMER')
                 ◇ RENUM = "SANS",
             # Si: equal_to("PRE_COND", 'GAMG')
                 ◇ RENUM = "SANS",
             # Si: equal_to("PRE_COND", 'HPDDM')
                 ◇ RENUM = "SANS",
             # Si: equal_to("PRE_COND", 'BLOC_LAGR')
                 ◇ RENUM = "SANS",
             # Si: is_in("PRE_COND", ('FIELDSPLIT'))
                 ◇ RENUM = "SANS",
                 ◇ PARTITION_CMP = int,
                 ◇ NOM_CMP = text,
             # Si: is_in("PRE_COND", ('UTILISATEUR'))
                 ◇ KSP_UTIL = not_checked,
                 ◇ RENUM = "SANS",
             # Si: is_in("PRE_COND", ('JACOBI','SOR','SANS'))
                 ◇ RENUM = / "SANS" (par défaut),
                           / "RCMK",
      ),
    ◇ TITRE = text,
    ◇ INFO = / 1,
             / 2,
)


◆ : obligatoire
◇ : optionnel
⟐ : présent par défaut
& : ensemble
/ : un seul parmi
| : plusieurs choix possibles

Opérandes#

Opérande MODELE#

♦    MODELE= mo

Nom du modèle dont les éléments font l’objet du calcul thermique.

Opérande CHAM_MATER#

♦    CHAM_MATER= chmat

Nom du champ de matériau affecté sur le modèle.

Mot clé EXCIT#

♦    EXCIT=

Mot clé facteur permettant de définir plusieurs chargements. Pour chaque occurrence du mot clé facteur, on définit une charge constante en temps.

Opérande CHARGE#


♦ CHARGE = char

Concept de type charge produit par AFFE_CHAR_THER ou par AFFE_CHAR_THER_F [U4.44.02].

Remarques importantes:

Pour chaque occurence du mot clé facteur EXCITles différents concepts charutilisés doivent être construits sur le même modèle mo.

Par ailleurs, l’opérateur AFFE_CHAR_THER ou AFFE_CHAR_THER_Fdoit obligatoirement renseigner sous le mot clé facteur CONVECTIONun concept de type cham_no_DEPL_Rdéfinissant la vitesse de déplacement du domaine et produit par CREA_CHAMP.

Il faut veiller à définir des conditions aux limites cohérentes avec le défilement de la pièce (ou du chargement, selon le référentiel choisi) et l’hypothèse de stationnarité:

Si le solide est animé d’un mouvement de translation uniforme à vitesse constante, il est équivalent de considérer le champ de température calculé:

  • comme une photographie à un instant donné,

  • ou comme une succession temporelle de la carte de température dans une section d’abscisse fixe, orthogonale à la direction de défilement.

../../../../_images/10000D16000069BB0000356F2B433754D92B2E05.svg

Ainsi, en aval dans l’espace (tôt dans le temps), la condition aux limites sur le bord de la pièce doit imposer la température de la pièce avant que n’arrive le chargement mobile. En amont dans l’espace (ou tard dans le temps), un flux thermique nul (adiabaticité) garantit l’hypothèse de stationnarité.

Mot clé ETAT_INIT#

◊    ETAT_INIT

Permet de définir le champ initial à partir duquel le calcul en repère mobile sous condition de stationnarité est effectué.

Opérande EVOL_THER#


♦ EVOL_THER = temp

Nom de la structure de donnée de type evol_ther dont est extrait le champ de température à partir duquel est calculée la solution au problème.

Opérande NUME_ORDRE#


◊ NUME_ORDRE = / nuini_evol / 0 [DEFAUT]

Numéro d’ordre du champ à extraire de cette structure de donnée.

Remarque :

Pour ce type de calcul, il n’y a pas de condition initiale à définir (elle se définit avec une condition aux limites sur un bord du domaine défini par le modèle). Mais, on peut néanmoins réaliser le calcul stationnaire à partir d’un champ de température déjà calculé comme solution du problème pour une partie de la charge seulement. Cela peut être utile dans le cas où l’application de la totalité du chargement rend la convergence difficile. On peut alors enchaîner plusieurs résolutions avec un chargement qui évolue progressivement et prendre comme premier itéré d’un calcul courant la solution du calcul précédent. Concrètement, on utilise alors le mot clé ETAT_INIT pour définir le champ de température avec lequel on veut initialiser le calcul courant.

Mot clé CONVERGENCE#

◊    CONVERGENCE=

Permet de définir les valeurs associées aux critères de convergence:

Opérande CRIT_TEMP_RELA#


◊ CRIT_TEMP_RELA = / 1.e-3 / testr

L’algorithme continue les itérations tant que la variation relative de l’itéré est supérieure à testr.

\({(\underset{i=1,\mathrm{...},\mathrm{nb}\mathrm{ddl}}{\Sigma}{({T}_{i}^{n}-{T}_{i}^{n-1})}^{2})}^{1/2}/{(\underset{i=1,\mathrm{...},\mathrm{nb}\mathrm{ddl}}{\Sigma}{({T}_{i}^{n})}^{2})}^{1/2}>\mathrm{testr}\)

\({T}_{i}^{n}\) désigne la valeur de la température au nœud i pour la nième itération.

Opérande CRIT_ENTH_RELA#

◊    CRIT_ENTH_RELA =    / 1.e-2

/ testl

L’algorithme continue les itérations tant que la variation relative de l’itéré est supérieure à testl.

\({(\underset{i=1,\mathrm{...},N}{\Sigma}{({\beta}_{i}^{n}-{\beta}_{i}^{n-1})}^{2})}^{1/2}/{(\underset{i=1,\mathrm{...},N}{\Sigma}{({\beta}_{i}^{n})}^{2})}^{1/2}>\mathrm{test1}\)

\({\beta}_{i}^{n}\) désigne la valeur de l’enthalpie à la nième itération au iième point de Gauss.

Opérande ITER_GLOB_MAXI#

◊    ITER_GLOB_MAXI =    / 10

/ iterl

L’algorithme continue les itérations externes tant que le nombre d’itérations externes est inférieur à iterl.

Mot clé SOLVEUR#

◊    SOLVEUR =

Ce mot clé facteur est facultatif : il permet de choisir un autre solveur de résolution de système.

Cet opérande est commun à l’ensemble des commandes globales [U4.50.01].

Opérande TITRE#

◊    TITRE = titre

Titre que l’on veut donner au résultat stocké dans temp structure de données de type evol_ther [U4.03.01].

Modélisation#

Les problèmes de thermique non linéaire en repère mobile et sous condition de stationnarité peuvent être traités avec des modèles utilisant les éléments finis 3D ou 2D plan décrits dans les documents [U3.23.01] et [U3.24.01].

Exemples#

On présente ci-dessous les principales commandes utilisées pour effectuer un calcul de thermique non-linéaire en repère mobile et sous condition de stationnarité.

conduc    =    DEFI_FONCTION    (    NOM_PARA    =    'TEMP',

VALE = … )

enthal = DEFI_FONCTION ( NOM_PARA = “TEMP”,

VALE = … )

mat = DEFI_MATERIAU ( THER_NL= _F( LAMBDA = conduc,

BETA = enthal ),)

chavi = CREA_CHAMP ( MAILLAGE = mail, TYPE_CHAM=”NOEU_DEPL_R”,

AFFE = _F( TOUT = “OUI”, NOM_CMP = (“DX”,”DY”), VALE_R = (1.0 , 0.0) )

char = AFFE_CHAR_THER ( MODELE = model,

FLUX_REP =_F( GROUP_MA = sou, FLUN = 5.E6 ), CONVECTION=_F( VITESSE = chavi ) )

tempe = THER_NON_LINE_MO ( MODELE = model,

CHAM_MATER = chmat, EXCIT =_F(CHARGE = char ), )