2. Syntax#

evol_ther = THER_NON_LINE (
    ◇ reuse = <objet de RESULTAT >,
    ◇ & RESULTAT = evol_ther,
    ◆ MODELE = model,
    ◆ CHAM_MATER = cham_master,
    ◇ CARA_ELEM = cara_elem,
    COMPORTEMENT = _F (
         ◇ RELATION =/"SECH_BAZANT ",
                      /"SECH_GRANGER ",
                      /"SECH_MENSI ",
                      /"SECH_NAPPE ",
                      /"SECH_RFT ",
                      /"THER_HYDR ",
                      /"THER_NL" (by default),
         ◆/TOUT = "OUI" (or not specified),
           /GROUP_MA = grma,
      ),
    ◇ EVOL_THER_SECH = evol_ther,
    ◆ EXCIT = _F (
         ◆ CHARGE = char_cine_ther/char_ther,
         ◇ FONC_MULT = function/formula/table cloth,
         ◇ TYPE_CHARGE = "FIXE_CSTE ",
      ),
    AFFICHAGE = _F (
         ◇ INFO_RESIDU =/"NON" (by default),
                         /"OUI ",
         ◇ INFO_TEMPS =/"NON" (by default),
                        /"OUI ",
         ◇ UNITE = unit,
         ◇ PAS = int,
      ),
    ◇ METHODE =/"MODELE_REDUIT ",
                /"NEWTON" (by default),
                /"NEWTON_KRYLOV ",
    # If: equal_to (" METHODE ", 'NEWTON') or equal_to (" METHODE ", 'NEWTON_KRYLOV')
        NEWTON = _F (
             ◇ REAC_ITER = int (default: 0),
             ◇ REAC_INCR = int (default: 1),
             ◇ PREDICTION = "TANGENTE ",
             ◇ MATRICE = "TANGENTE ",
          ),
        RECH_LINEAIRE = _F (
             ◇ METHODE = "CORDE ",
             ◇ RESI_LINE_RELA = float (default: 0.1),
             ◇ ITER_LINE_MAXI = int (default: 3),
             ◇ RHO_MIN = float (default: 0.01),
             ◇ RHO_MAX = float (default: 10.0),
             ◇ RHO_EXCL = float (default: 0.009),
          ),
    # If: equal_to (" METHODE ", 'MODELE_REDUIT')
        MODELE_REDUIT = _F (
             ◇ REAC_ITER = int (default: 0),
             ◇ REAC_INCR = int (default: 1),
             ◆ BASE_PRIMAL = mode_empi,
             ◇ DOMAINE_REDUIT =/"NON" (by default),
                                /"OUI ",
             # If: (equal_to (" DOMAINE_REDUIT ", 'OUI'))
                 ◆ GROUP_NO_INTERF = grno,
                 ◇ CORR_COMPLET =/"NON" (by default),
                                  /"OUI ",
                 # If: (equal_to (" CORR_COMPLET ", 'OUI'))
                     ◆ GROUP_NO_ENCASTRE = grno,
                     ◇ COEF_PENA = float (default: 1000000.0),
          ),
    ◇ TYPE_CALCUL =/"STAT ",
                    /"TRAN" (by default),
    # If: (equal_to (" TYPE_CALCUL ", 'TRAN'))
        ◆ ETAT_INIT = _F (
             ◆/STAT = "OUI" (or not specified),
               /EVOL_THER = evol_ther,
               /CHAM_NO = fiel_no,
               /VALE = float,
             # If: exists (" EVOL_THER ")
                 ◇ NUME_ORDRE = int,
                 ◇ INST = float,
                 # If: exists (" INST ")
                     ◇ CRITERE =/"ABSOLU ",
                                 /"RELATIF" (by default),
                     # If: (equal_to (" CRITERE ", 'RELATIF'))
                         ◇ PRECISION = float (default: 1e-06),
                     # If: (equal_to (" CRITERE ", 'ABSOLU'))
                         ◆ PRECISION = float,
          ),
        SCHEMA_TEMPS = _F (
             ◇ SCHEMA = "HHT ",
             # If: equal_to (" SCHEMA ", 'HHT')
                 ◇ THETA = float (default: 0.57),
          ),
    # If: (equal_to (" TYPE_CALCUL ", 'STAT'))
        ETAT_INIT = _F (
             ◇ STAT = "OUI ",
          ),
    ◆ INCREMENT = _F (
         # If: exists (" INST_INIT ") or exists (" INST_FIN ")
             ◇ CRITERE = "RELATIF ",
             # If: (equal_to (" CRITERE ", 'RELATIF'))
                 ◇ PRECISION = float (default: 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 (default: 10),
      ),
    SOLVEUR = _F (
         ◇ METHODE =/"GCPC ",
                     /"LDLT ",
                     /"MULT_FRONT ",
                     /"MUMPS" (by default),
                     /"PETSC ",
         # 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" (by default),
                              /"EN",
                              /"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),
             ◇ REDUCTION_MPI = int (default: 0),
             ◇ NB_RHS = int (default: 1),
             ◇ RESI_RELA = float (default: -1.0),
             ◇ GESTION_MEMOIRE =/"AUTO" (by default),
                                 /"EVAL ",
                                 /"IN_CORE ",
                                 /"OUT_OF_CORE ",
             ◇ FILTRAGE_MATRICE = float (default: -1.0),
             ◇ MIXER_PRECISION =/"NON" (by default),
                                 /"OUI ",
             ◇ MATR_DISTRIBUEE =/"NON" (by default),
                                 /"OUI ",
         # 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 ",
             ◇ MATR_DISTRIBUEE =/"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),
      ),
    ARCHIVAGE = _F (
         ◆/PAS_ARCH = int,
           /LIST_INST = listr8,
           /INST = float,
         # If: exists (" INST ") or exists (" LIST_INST ")
             ◇ CRITERE =/"ABSOLU ",
                         /"RELATIF" (by default),
             # If: equal_to (" CRITERE ", 'RELATIF')
                 ◇ PRECISION = float (default: 1e-06),
             # If: equal_to (" CRITERE ", 'ABSOLU')
                 ◆ PRECISION = float,
         ◇ CHAM_EXCLU = text (default: "('RESI_NOEU', 'RESI_RELA_NOEU')"),
      ),
    ◇ OBSERVATION = _F (
         ◇ TITRE = text,
         ◇ OBSE_ETAT_INIT =/"NON ",
                            /"OUI" (by default),
         ◇ EVAL_CHAM =/"MAX ",
                       /"MAXI_ABS ",
                       /"MIN ",
                       /"MINI_ABS ",
                       /"MOY ",
                       /"VALE" (by default),
         ◆/NOM_CMP = text,
           /NOM_VARI = text,
         ◇ EVAL_CMP =/"FORMULE ",
                      /"VALE" (by default),
         ◇ INST = float,
         ◇ LIST_INST = listr8,
         ◇ PAS_OBSE = int,
         ◇ CRITERE =/"ABSOLU ",
                     /"RELATIF" (by default),
         ◆ NOM_CHAM = "TEMP" (or not specified),
         # If: (equal_to (" EVAL_CMP ", 'FORMULE'))
             ◆ FORMULE = formula,
         # If: is_in (" NOM_CHAM ", ('DEPL', '', '', 'VITE', '', '', 'ACCE', '', 'FORC_NODA', '', 'CONT_NOEU', 'DEPL_ABSOLU', '', '', 'VITE_ABSOLU', 'ACCE_ABSOLU') TEMP
             ◆/TOUT = "OUI" (or not specified),
               /NOEUD = no,
               /GROUP_NO = grno,
               /GROUP_MA = grma,
               /MAILLE = my,
         # If: is_in (" NOM_CHAM ", ('SIEF_ELGA', '', 'EPSI_ELGA', 'VARI_ELGA'))
             ◆/TOUT = "OUI" (or not specified),
               /GROUP_MA = grma,
               /MAILLE = my,
             ◇ EVAL_ELGA =/"MAX ",
                           /"MIN ",
                           /"VALE" (by default),
             # If: (equal_to (" EVAL_ELGA ", 'VALE'))
                 ◆ POINT = int,
                 ◇ SOUS_POINT = int,
         # If: (equal_to (" NOM_CHAM ", 'CONT_ELEM'))
             ◆/TOUT = "OUI" (or not specified),
               /GROUP_MA = grma,
               /MAILLE = my,
         # If: (equal_to (" CRITERE ", 'RELATIF'))
             ◇ PRECISION = float (default: 1e-06),
         # If: (equal_to (" CRITERE ", 'ABSOLU'))
             ◆ PRECISION = float,
      ),
    ◇ TITRE = text,
    ◇ INFO =/1 (by default),
             /2,
)

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