2. Syntaxe#

evol_ther = THER_NON_LINE(
    ◇ reuse = <objet de RESULTAT>,
    ◇ & RESULTAT = evol_ther,
    ◆ MODELE = modele,
    ◆ CHAM_MATER = cham_mater,
    ◇ CARA_ELEM = cara_elem,
    ⟐ COMPORTEMENT = _F(
         ◇ RELATION = / "THER_HYDR",
                      / "THER_NL" (par défaut),
         ◆ / TOUT = "OUI" (ou non renseigné),
           / GROUP_MA = list[grma],
      ),
    ◆ EXCIT = _F(
         ◆ CHARGE = char_cine_ther / char_ther,
         ◇ FONC_MULT = fonction / formule / nappe,
         ◇ TYPE_CHARGE = "FIXE_CSTE",
      ),
    ⟐ AFFICHAGE = _F(
         ◇ INFO_RESIDU = / "NON" (par défaut),
                         / "OUI",
         ◇ INFO_TEMPS = / "NON" (par défaut),
                        / "OUI",
         ◇ UNITE = unit,
         ◇ PAS = int,
      ),
    ◇ METHODE = / "MODELE_REDUIT",
                / "NEWTON" (par défaut),
                / "NEWTON_KRYLOV",
                / "RASPEN",
    # Si: equal_to("METHODE", 'NEWTON') or equal_to("METHODE", 'NEWTON_KRYLOV') or equal_to("METHODE", 'RASPEN')
        ⟐ NEWTON = _F(
             ◇ REAC_ITER = int (défaut: 0),
             ◇ REAC_INCR = int (défaut: 1),
             ◇ PREDICTION = "TANGENTE",
             ◇ MATRICE = "TANGENTE",
          ),
        ◇ RECH_LINEAIRE = _F(
             ◇ METHODE = "CORDE",
             ◇ RESI_LINE_RELA = float (défaut: 0.1),
             ◇ ITER_LINE_MAXI = int (défaut: 3),
             ◇ RHO_MIN = float (défaut: 0.01),
             ◇ RHO_MAX = float (défaut: 10.0),
             ◇ RHO_EXCL = float (défaut: 0.009),
          ),
    # Si: equal_to("METHODE", 'MODELE_REDUIT')
        ⟐ MODELE_REDUIT = _F(
             ◇ REAC_ITER = int (défaut: 0),
             ◇ REAC_INCR = int (défaut: 1),
             ◆ BASE_PRIMAL = mode_empi,
             ◇ DOMAINE_REDUIT = / "NON" (par défaut),
                                / "OUI",
             # Si: (equal_to("DOMAINE_REDUIT", 'OUI'))
                 ◆ GROUP_NO_INTERF = grno,
                 ◇ CORR_COMPLET = / "NON" (par défaut),
                                  / "OUI",
                 # Si: (equal_to("CORR_COMPLET", 'OUI'))
                     ◆ GROUP_NO_ENCASTRE = grno,
                     ◇ COEF_PENA = float (défaut: 1000000.0),
          ),
    ◇ TYPE_CALCUL = / "STAT",
                    / "TRAN" (par défaut),
    # Si: (equal_to("TYPE_CALCUL", 'TRAN'))
        ◆ ETAT_INIT = _F(
             ◆ / STAT = "OUI" (ou non renseigné),
               / EVOL_THER = evol_ther,
               / CHAM_NO = cham_no,
               / VALE = float,
             # Si: exists("EVOL_THER")
                 ◇ NUME_ORDRE = 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,
          ),
        ⟐ SCHEMA_TEMPS = _F(
             ◇ SCHEMA = "THETA",
             # Si: equal_to("SCHEMA", 'THETA')
                 ◇ THETA = float (défaut: 0.57),
          ),
    # Si: (equal_to("TYPE_CALCUL", 'STAT'))
        ⟐ ETAT_INIT = _F(
             ◇ STAT = "OUI",
          ),
    ◆ INCREMENT = _F(
         # Si: exists("INST_INIT") or exists("INST_FIN")
             ◇ CRITERE = "RELATIF",
             # Si: (equal_to("CRITERE", 'RELATIF'))
                 ◇ PRECISION = float (défaut: 1e-06),
         ◆ LIST_INST = list_inst / listr8,
         ◇ / NUME_INST_INIT = int,
           / INST_INIT = float,
         ◇ / NUME_INST_FIN = int,
           / INST_FIN = float,
      ),
    ⟐ CONVERGENCE = _F(
         ◆ | RESI_GLOB_MAXI = float,
           | RESI_GLOB_RELA = float,
         ◇ ITER_GLOB_MAXI = int (défaut: 10),
      ),
    ⟐ SOLVEUR = _F(
         ◇ METHODE = / "GCPC",
                     / "LDLT",
                     / "MULT_FRONT",
                     / "MUMPS" (par défaut),
                     / "PETSC",
         # Si: equal_to("METHODE", 'MULT_FRONT')
             ◇ RENUM = / "MD",
                       / "MDA" (par défaut),
             ◇ NPREC = int (défaut: 8),
             ◇ ELIM_LAGR = / "NON" (par défaut),
                           / "OUI",
             ◇ STOP_SINGULIER = / "NON",
                                / "OUI" (par défaut),
         # Si: equal_to("METHODE", 'LDLT')
             ◇ RENUM = "RCMK",
             ◇ NPREC = int (défaut: 8),
             ◇ ELIM_LAGR = / "NON" (par défaut),
                           / "OUI",
             ◇ STOP_SINGULIER = / "NON",
                                / "OUI" (par défaut),
         # Si: equal_to("METHODE", 'MUMPS')
             ◇ RENUM = / "AMD",
                       / "AMF",
                       / "AUTO" (par défaut),
                       / "METIS",
                       / "PARMETIS",
                       / "PORD",
                       / "PTSCOTCH",
                       / "QAMD",
                       / "SCOTCH",
             ◇ NPREC = int (défaut: 8),
             ◇ ELIM_LAGR = / "LAGR2" (par défaut),
                           / "NON",
                           / "OUI",
             ◇ STOP_SINGULIER = / "NON",
                                / "OUI" (par défaut),
             ◇ TYPE_RESOL = / "AUTO" (par défaut),
                            / "NONSYM",
                            / "SYMDEF",
                            / "SYMGEN",
             ◇ ACCELERATION = / "AUTO" (par défaut),
                              / "FR",
                              / "FR+",
                              / "FR++",
                              / "LR",
                              / "LR+",
                              / "LR++",
             ◇ LOW_RANK_SEUIL = float (défaut: 0.0),
             ◇ PRETRAITEMENTS = / "AUTO" (par défaut),
                                / "SANS",
             ◇ POSTTRAITEMENTS = / "AUTO" (par défaut),
                                 / "FORCE",
                                 / "MINI",
                                 / "SANS",
             ◇ PCENT_PIVOT = int (défaut: 35),
             ◇ REDUCTION_MPI = int (défaut: 0),
             ◇ NB_RHS = int (défaut: 1),
             ◇ RESI_RELA = float (défaut: -1.0),
             ◇ GESTION_MEMOIRE = / "AUTO" (par défaut),
                                 / "EVAL",
                                 / "IN_CORE",
                                 / "OUT_OF_CORE",
             ◇ FILTRAGE_MATRICE = float (défaut: -1.0),
             ◇ MIXER_PRECISION = / "NON" (par défaut),
                                 / "OUI",
             ◇ MATR_DISTRIBUEE = / "NON" (par défaut),
                                 / "OUI",
         # Si: equal_to("METHODE", 'GCPC')
             ◇ ELIM_LAGR = / "NON" (par défaut),
                           / "OUI",
             ◇ PRE_COND = / "LDLT_DP",
                          / "LDLT_INC" (par défaut),
                          / "LDLT_SP",
             ◇ RESI_RELA = float (défaut: 1e-06),
             ◇ NMAX_ITER = int (défaut: 0),
             # Si: equal_to("PRE_COND", 'LDLT_INC')
                 ◇ RENUM = "RCMK",
                 ◇ NIVE_REMPLISSAGE = int (défaut: 0),
             # Si: is_in("PRE_COND", ('LDLT_SP', 'LDLT_DP'))
                 ◇ RENUM = / "METIS",
                           / "PARMETIS" (par défaut),
                           / "SANS",
                 ◇ REAC_PRECOND = int (défaut: 30),
                 ◇ PCENT_PIVOT = int (défaut: 20),
                 ◇ GESTION_MEMOIRE = / "AUTO" (par défaut),
                                     / "IN_CORE",
                 ◇ LOW_RANK_SEUIL = float (défaut: 0.0),
         # Si: equal_to("METHODE", 'PETSC')
             ◇ ELIM_LAGR = / "NON" (par défaut),
                           / "OUI",
             ◇ MATR_DISTRIBUEE = / "NON" (par défaut),
                                 / "OUI",
             ◇ ALGORITHME = / "CG",
                            / "CR",
                            / "FGMRES" (par défaut),
                            / "GCR",
                            / "GMRES",
                            / "GMRES_LMP",
             ◇ OPTION_PETSC = text (défaut: ""),
             ◇ PRE_COND = / "BLOC_LAGR",
                          / "BOOMER",
                          / "FIELDSPLIT",
                          / "GAMG",
                          / "HPDDM",
                          / "JACOBI",
                          / "LDLT_DP",
                          / "LDLT_INC",
                          / "LDLT_SP" (par défaut),
                          / "ML",
                          / "SANS",
                          / "SOR",
                          / "UTILISATEUR",
             ◇ RESI_RELA = float (défaut: 1e-06),
             ◇ NMAX_ITER = int (défaut: 0),
             # Si: equal_to("PRE_COND", 'LDLT_INC')
                 ◇ RENUM = "RCMK",
                 ◇ NIVE_REMPLISSAGE = int (défaut: 0),
                 ◇ REMPLISSAGE = float (défaut: 1.0),
             # Si: is_in("PRE_COND", ('LDLT_SP', 'LDLT_DP'))
                 ◇ RENUM = / "METIS",
                           / "PARMETIS" (par défaut),
                           / "SANS",
                 ◇ REAC_PRECOND = int (défaut: 30),
                 ◇ PCENT_PIVOT = int (défaut: 20),
                 ◇ GESTION_MEMOIRE = / "AUTO" (par défaut),
                                     / "IN_CORE",
                 ◇ LOW_RANK_SEUIL = float (défaut: 0.0),
             # 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 = list[int],
                 ◇ NOM_CMP = list[text],
             # Si: is_in("PRE_COND", ('UTILISATEUR'))
                 ◇ KSP_UTIL = not_checked,
                 ◇ RENUM = "SANS",
             # Si: is_in("PRE_COND", ('JACOBI','SOR','SANS'))
                 ◇ RENUM = / "RCMK",
                           / "SANS" (par défaut),
      ),
    ⟐ ARCHIVAGE = _F(
         ◆ / PAS_ARCH = int,
           / LIST_INST = listr8,
           / INST = list[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 = list[text] (défaut: "('RESI_NOEU', 'RESI_RELA_NOEU')"),
      ),
    ◇ OBSERVATION = _F(
         ◆ / TOUT = "OUI" (ou non renseigné),
           / NOEUD = list[no],
           / GROUP_NO = list[grno],
           / GROUP_MA = list[grma],
           / MAILLE = list[ma],
         ◇ 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 = list[text],
         ◇ EVAL_CMP = / "FORMULE",
                      / "VALE" (par défaut),
         ◇ INST = list[float],
         ◇ LIST_INST = listr8,
         ◇ PAS_OBSE = int,
         ◇ CRITERE = / "ABSOLU",
                     / "RELATIF" (par défaut),
         ◆ NOM_CHAM = "TEMP" (ou non renseigné),
         # Si: (equal_to("EVAL_CMP", 'FORMULE'))
             ◆ FORMULE = formule,
         # Si: (equal_to("CRITERE", 'RELATIF'))
             ◇ PRECISION = float (défaut: 1e-06),
         # Si: (equal_to("CRITERE", 'ABSOLU'))
             ◆ PRECISION = float,
      ),
    ◇ TITRE = text,
    ◇ INFO = / 1 (par défaut),
             / 2,
)

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