1. Syntax#

emp_mode = DEFI_BASE_REDUITE (
    ◇ reuse = <objet de BASE >,
    ◇ BASE = mode_empi,
    ◇ OPERATION =/"GLOUTON ",
                  /"ORTHO ",
                  /"POD" (by default),
                  /"POD_INCR ",
                  /"TRONCATURE ",
    # If: (equal_to (" OPERATION ", 'POD'))
        ◆ RESULTAT = evol_noli/evol_ther,
        # If: is_type (" RESULTAT ") == evol_ther
            ◆ NOM_CHAM =/"FLUX_NOEU ",
                         /"TEMP ",
        # If: is_type (" RESULTAT ") == evol_noli
            ◆ NOM_CHAM =/"DEPL ",
                         /"SIEF_ELGA ",
                         /"SIEF_NOEU ",
                         /"VARI_ELGA ",
        ◇ TYPE_BASE =/"3D" (by default),
                      /"LINEIQUE ",
        # If: (equal_to (" TYPE_BASE ", 'LINEIQUE'))
            ◆ AXE =/"OX",
                    /"OH",
                    /"OZ",
            ◆ SECTION = grno,
        ◇ TOLE_SVD = float (default: 1e-06),
        ◇ NB_MODE = int,
        ◇ SNAPSHOT = int,
        ◇ NOM_CMP = text,
        # If: (equal_to (" NOM_CHAM ", 'VARI_ELGA'))
            ◇ NOM_VARI = text,
    # If: (equal_to (" OPERATION ", 'POD_INCR'))
        ◆ RESULTAT = evol_noli/evol_ther,
        # If: is_type (" RESULTAT ") == evol_ther
            ◆ NOM_CHAM =/"FLUX_NOEU ",
                         /"TEMP ",
        # If: is_type (" RESULTAT ") == evol_noli
            ◆ NOM_CHAM =/"DEPL ",
                         /"SIEF_ELGA ",
                         /"SIEF_NOEU ",
                         /"VARI_ELGA ",
        ◇ TYPE_BASE =/"3D" (by default),
                      /"LINEIQUE ",
        # If: (equal_to (" TYPE_BASE ", 'LINEIQUE'))
            ◆ AXE =/"OX",
                    /"OH",
                    /"OZ",
            ◆ SECTION = grno,
        ◇ TOLE = float (default: 1e-10),
        ◇ TOLE_SVD = float (default: 1e-06),
        ◇ NB_MODE = int,
        ◇ TABL_COOR_REDUIT = table,
        ◇ SNAPSHOT = int,
        ◇ NOM_CMP = text,
        # If: (equal_to (" NOM_CHAM ", 'VARI_ELGA'))
            ◇ NOM_VARI = text,
    # If: (equal_to (" OPERATION ", 'GLOUTON'))
        ◆ NB_VARI_COEF = int,
        ◇ TYPE_VARI_COEF = "DIRECT ",
        ◇ ORTHO_BASE =/"NON" (by default),
                       /"OUI ",
        ◇ TYPE_BASE =/"IFS_STAB ",
                      /"STANDARD" (by default),
        # If: (equal_to (" TYPE_VARI_COEF ", 'DIRECT'))
            ◇ VARI_PARA = _F (
                 ◆ NOM_PARA =/"ABSC ",
                              /"AMOR ",
                              /"DRX ",
                              /"DRY ",
                              /"DRZ ",
                              /"DSP ",
                              /"DTAN ",
                              /"XX",
                              /"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 = 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_c/matr_asse_temp_r,
             ◆/COEF_R = float,
               /COEF_C = complex,
               /FONC_R = function/formula,
               /FONC_C = function_c/formula_c,
          ),
        ◇ VECT_ASSE = _F (
             ◇ VECTEUR = cham_no,
             ◆/COEF_C = complex,
               /COEF_R = float,
               /FONC_R = function/formula,
               /FONC_C = function_c/formula_c,
          ),
        SOLVEUR = _F (
             ◇ METHODE =/"LDLT ",
                         /"MULT_FRONT ",
                         /"MUMPS" (by default),
             # If: equal_to (" METHODE ", 'MULT_FRONT')
                 ◇ RENUM =/"MD",
                           /"MDA" (by default),
                 ◇ NPREC = int (default: 8),
                 ◇ ELIM_LAGR =/"NON" (by default),
                               /"OUI ",
                 ◇ STOP_SINGULIER =/"NON ",
                                    /"OUI" (by default),
             # If: equal_to (" METHODE ", 'LDLT')
                 ◇ RENUM = "RCMK ",
                 ◇ NPREC = int (default: 8),
                 ◇ ELIM_LAGR =/"NON" (by default),
                               /"OUI ",
                 ◇ STOP_SINGULIER =/"NON ",
                                    /"OUI" (by default),
             # If: equal_to (" METHODE ", 'MUMPS')
                 ◇ RENUM =/"AMD ",
                           /"AMF ",
                           /"AUTO" (by default),
                           /"METIS ",
                           /"PARMETIS ",
                           /"PORD ",
                           /"PTSCOTCH ",
                           /"QAMD ",
                           /"SCOTCH ",
                 ◇ NPREC = int (default: 8),
                 ◇ ELIM_LAGR =/"LAGR2" (by default),
                               /"NON ",
                               /"OUI ",
                 ◇ STOP_SINGULIER =/"NON ",
                                    /"OUI" (by default),
                 ◇ TYPE_RESOL =/"AUTO" (by default),
                                /"NONSYM ",
                                /"SYMDEF ",
                                /"SYMGEN ",
                 ◇ ACCELERATION =/"AUTO ",
                                  /"FR" (by default),
                                  /"FR+",
                                  /"FR++",
                                  /"LR",
                                  /"LR+",
                                  /"LR++",
                 ◇ LOW_RANK_SEUIL = float (default: 0.0),
                 ◇ PRETRAITEMENTS =/"AUTO" (by default),
                                    /"SANS ",
                 ◇ POSTTRAITEMENTS =/"AUTO" (by default),
                                     /"FORCE ",
                                     /"MINI ",
                                     /"SANS ",
                 ◇ PCENT_PIVOT = int (default: 35),
                 ◇ NB_RHS = int (default: 1),
                 ◇ RESI_RELA = float (default: -1.0),
                 ◇ GESTION_MEMOIRE =/"AUTO" (by default),
                                     /"EVAL ",
                                     /"IN_CORE ",
                                     /"OUT_OF_CORE ",
             # If: equal_to (" METHODE ", 'GCPC')
                 ◇ ELIM_LAGR =/"NON" (by default),
                               /"OUI ",
                 ◇ PRE_COND =/"LDLT_DP ",
                              /"LDLT_INC" (by default),
                              /"LDLT_SP ",
                 ◇ RESI_RELA = float (default: 1e-06),
                 ◇ NMAX_ITER = int (default: 0),
                 # If: equal_to (" PRE_COND ", 'LDLT_INC')
                     ◇ RENUM = "RCMK ",
                     ◇ NIVE_REMPLISSAGE = int (default: 0),
                 # If: is_in (" PRE_COND ", ('LDLT_SP', 'LDLT_DP'))
                     ◇ RENUM =/"METIS ",
                               /"PARMETIS" (by default),
                               /"SANS ",
                     ◇ REAC_PRECOND = int (default: 30),
                     ◇ PCENT_PIVOT = int (default: 20),
                     ◇ GESTION_MEMOIRE =/"AUTO" (by default),
                                         /"IN_CORE ",
                     ◇ LOW_RANK_SEUIL = float (default: 0.0),
             # If: equal_to (" METHODE ", 'PETSC')
                 ◇ ELIM_LAGR =/"NON" (by default),
                               /"OUI ",
                 ◇ ALGORITHME =/"CG",
                                /"CR",
                                /"FGMRES" (by default),
                                /"GCR ",
                                /"GMRES ",
                                /"GMRES_LMP ",
                 ◇ OPTION_PETSC = text (default: ""),
                 ◇ PRE_COND =/"BLOC_LAGR ",
                              /"BOOMER ",
                              /"FIELDSPLIT ",
                              /"GAMG ",
                              /"HPDDM ",
                              /"JACOBI ",
                              /"LDLT_DP ",
                              /"LDLT_INC ",
                              /"LDLT_SP" (by default),
                              /"ML",
                              /"SANS ",
                              /"SOR ",
                              /"UTILISATEUR ",
                 ◇ RESI_RELA = float (default: 1e-06),
                 ◇ NMAX_ITER = int (default: 0),
                 # If: equal_to (" PRE_COND ", 'LDLT_INC')
                     ◇ RENUM = "RCMK ",
                     ◇ NIVE_REMPLISSAGE = int (default: 0),
                     ◇ REMPLISSAGE = float (default: 1.0),
                 # If: is_in (" PRE_COND ", ('LDLT_SP', 'LDLT_DP'))
                     ◇ RENUM =/"METIS ",
                               /"PARMETIS" (by default),
                               /"SANS ",
                     ◇ REAC_PRECOND = int (default: 30),
                     ◇ PCENT_PIVOT = int (default: 20),
                     ◇ GESTION_MEMOIRE =/"AUTO" (by default),
                                         /"IN_CORE ",
                     ◇ LOW_RANK_SEUIL = float (default: 0.0),
                 # If: equal_to (" PRE_COND ", 'ML')
                     ◇ RENUM = "SANS ",
                 # If: equal_to (" PRE_COND ", 'BOOMER')
                     ◇ RENUM = "SANS ",
                 # If: equal_to (" PRE_COND ", 'GAMG')
                     ◇ RENUM = "SANS ",
                 # If: equal_to (" PRE_COND ", 'HPDDM')
                     ◇ RENUM = "SANS ",
                 # If: equal_to (" PRE_COND ", 'BLOC_LAGR')
                     ◇ RENUM = "SANS ",
                 # If: is_in (" PRE_COND ", ('FIELDSPLIT'))
                     ◇ RENUM = "SANS ",
                     ◇ PARTITION_CMP = int,
                     ◇ NOM_CMP = text,
                 # If: is_in (" PRE_COND ", ('UTILISATEUR'))
                     ◇ KSP_UTIL = not_checked,
                     ◇ RENUM = "SANS ",
                 # If: is_in (" PRE_COND ", ('JACOBI', '', 'SOR', 'SANS'))
                     ◇ RENUM =/"RCMK ",
                               /"SANS" (by default),
          ),
        ◆ NB_MODE = int,
        ◇ TOLE_GLOUTON = float (default: 1e-10),
    # If: (equal_to (" OPERATION ", 'TRONCATURE'))
        ◆ MODELE_REDUIT = model,
    # If: (equal_to (" OPERATION ", 'ORTHO'))
        ◇ ALPHA = float (default: 0.717),
    ◇ INFO =/1 (by default),
             /2,
    ◇ TITRE = text,
)

◆: mandatory
◇: optional
: present by default
&: together
/: only one among
|: several possible choices