1. Syntaxe#

mode_empi = DEFI_BASE_REDUITE(
    ◇ reuse = <objet de BASE>,
    ◇ BASE = mode_empi,
    ◇ OPERATION = / "GLOUTON",
                  / "ORTHO",
                  / "POD" (par défaut),
                  / "POD_INCR",
                  / "TRONCATURE",
    # Si: (equal_to("OPERATION", 'POD'))
        ◆ RESULTAT = evol_noli / evol_ther,
        # Si: is_type("RESULTAT") == evol_ther
            ◆ NOM_CHAM = / "FLUX_NOEU",
                         / "TEMP",
        # Si: is_type("RESULTAT") == evol_noli
            ◆ NOM_CHAM = / "DEPL",
                         / "SIEF_ELGA",
                         / "SIEF_NOEU",
                         / "VARI_ELGA",
        ◇ TYPE_BASE = / "3D" (par défaut),
                      / "LINEIQUE",
        # Si: (equal_to("TYPE_BASE", 'LINEIQUE'))
            ◆ AXE = / "OX",
                    / "OY",
                    / "OZ",
            ◆ SECTION = grno,
        ◇ TOLE_SVD = float (défaut: 1e-06),
        ◇ NB_MODE = int,
        ◇ SNAPSHOT = list[int],
        ◇ NOM_CMP = list[text],
        # Si: (equal_to("NOM_CHAM", 'VARI_ELGA'))
            ◇ NOM_VARI = list[text],
    # Si: (equal_to("OPERATION", 'POD_INCR'))
        ◆ RESULTAT = evol_noli / evol_ther,
        # Si: is_type("RESULTAT") == evol_ther
            ◆ NOM_CHAM = / "FLUX_NOEU",
                         / "TEMP",
        # Si: is_type("RESULTAT") == evol_noli
            ◆ NOM_CHAM = / "DEPL",
                         / "SIEF_ELGA",
                         / "SIEF_NOEU",
                         / "VARI_ELGA",
        ◇ TYPE_BASE = / "3D" (par défaut),
                      / "LINEIQUE",
        # Si: (equal_to("TYPE_BASE", 'LINEIQUE'))
            ◆ AXE = / "OX",
                    / "OY",
                    / "OZ",
            ◆ SECTION = grno,
        ◇ TOLE = float (défaut: 1e-10),
        ◇ TOLE_SVD = float (défaut: 1e-06),
        ◇ NB_MODE = int,
        ◇ TABL_COOR_REDUIT = table,
        ◇ SNAPSHOT = list[int],
        ◇ NOM_CMP = list[text],
        # Si: (equal_to("NOM_CHAM", 'VARI_ELGA'))
            ◇ NOM_VARI = list[text],
    # Si: (equal_to("OPERATION", 'GLOUTON'))
        ◆ NB_VARI_COEF = int,
        ◇ TYPE_VARI_COEF = "DIRECT",
        ◇ ORTHO_BASE = / "NON" (par défaut),
                       / "OUI",
        ◇ TYPE_BASE = / "IFS_STAB",
                      / "STANDARD" (par défaut),
        # Si: (equal_to("TYPE_VARI_COEF", 'DIRECT'))
            ◇ VARI_PARA = _F(
                 ◆ NOM_PARA = / "ABSC",
                              / "AMOR",
                              / "DRX",
                              / "DRY",
                              / "DRZ",
                              / "DSP",
                              / "DTAN",
                              / "DX",
                              / "DY",
                              / "DZ",
                              / "ENDO",
                              / "EPAIS",
                              / "EPSI",
                              / "EXCENT",
                              / "FREQ",
                              / "HYDR",
                              / "INST",
                              / "IRRA",
                              / "META",
                              / "NEUT1",
                              / "NEUT2",
                              / "NEUT3",
                              / "NEUT4",
                              / "NORM",
                              / "NUME_ORDRE",
                              / "PAD",
                              / "PCAP",
                              / "PGAZ",
                              / "PLIQ",
                              / "PORO",
                              / "PULS",
                              / "PVAP",
                              / "SAT",
                              / "SECH",
                              / "SIGM",
                              / "TEMP",
                              / "TSEC",
                              / "VITE",
                              / "X",
                              / "XF",
                              / "Y",
                              / "YF",
                              / "Z",
                              / "ZF",
                 ◆ VALE_PARA = list[float],
                 ◆ VALE_INIT = float,
              ),
        ◇ MATR_ASSE = _F(
             ◆ MATRICE = matr_asse_depl_c / matr_asse_depl_r / matr_asse_pres_c / matr_asse_pres_r / matr_asse_temp_c / matr_asse_temp_r,
             ◆ / COEF_R = float,
               / COEF_C = complex,
               / FONC_R = fonction / formule,
               / FONC_C = fonction_c / formule_c,
          ),
        ◇ VECT_ASSE = _F(
             ◇ VECTEUR = cham_no,
             ◆ / COEF_C = complex,
               / COEF_R = float,
               / FONC_R = fonction / formule,
               / FONC_C = fonction_c / formule_c,
          ),
        ⟐ SOLVEUR = _F(
             ◇ METHODE = / "LDLT",
                         / "MULT_FRONT",
                         / "MUMPS" (par défaut),
             # 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",
                                  / "FR" (par défaut),
                                  / "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),
                 ◇ 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",
             # 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",
                 ◇ 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),
          ),
        ◆ NB_MODE = int,
        ◇ TOLE_GLOUTON = float (défaut: 1e-10),
    # Si: (equal_to("OPERATION", 'TRONCATURE'))
        ◆ MODELE_REDUIT = modele,
    # Si: (equal_to("OPERATION", 'ORTHO'))
        ◇ ALPHA = float (défaut: 0.717),
    ◇ INFO = / 1 (par défaut),
             / 2,
    ◇ TITRE = text,
)

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