2. Syntax#

char_contact = DEFI_CONTACT (
    ◆ MODELE = model,
    ◇ INFO =/1,
             /2,
    ◇ FORMULATION =/"DISCRETE" (by default),
                    /"CONTINUE ",
                    /"XFEM ",
                    /"LIAISON_UNIL ",
    ◇ FROTTEMENT =/"COULOMB ",
                   /"SANS" (by default),
    # If: ((equal_to (" FORMULATION ", '",' CONTINUE ')) or (equal_to (" FORMULATION ",' DISCRETE ')))
        ◇ STOP_INTERP =/"OUI ",
                        /"NON" (by default),
        ◇ LISSAGE =/"OUI ",
                    /"NON" (by default),
        ◇ VERI_NORM =/"OUI" (by default),
                      /"NON ",
    # If: equal_to (" FORMULATION ", 'DISCRETE')
        ◇ ALGO_RESO_GEOM = "POINT_FIXE ",
        ◇ REAC_GEOM =/"AUTOMATIQUE" (by default),
                      /"CONTROLE ",
                      /"SANS ",
        # If: equal_to (" REAC_GEOM ", 'AUTOMATIQUE')
            ◇ ITER_GEOM_MAXI = int (default: 10),
            ◇ RESI_GEOM = float (default: 0.01),
        # If: equal_to (" REAC_GEOM ", 'CONTROLE')
            ◇ NB_ITER_GEOM = int (default: 2),
    # If: equal_to (" FORMULATION ", 'CONTINUE')
        ◇ ALGO_RESO_GEOM =/"POINT_FIXE" (by default),
                           /"NEWTON ",
        ◇ CONT_STAT_ELAS = int,
        # If: equal_to (" ALGO_RESO_GEOM ", 'NEWTON')
            ◇ RESI_GEOM = float (default: 1e-06),
        # If: equal_to (" ALGO_RESO_GEOM ", 'POINT_FIXE')
            ◇ REAC_GEOM =/"AUTOMATIQUE" (by default),
                          /"CONTROLE ",
                          /"SANS ",
            # If: equal_to (" REAC_GEOM ", 'AUTOMATIQUE')
                ◇ ITER_GEOM_MAXI = int (default: 10),
                ◇ RESI_GEOM = float (default: 0.01),
            # If: equal_to (" REAC_GEOM ", 'CONTROLE')
                ◇ NB_ITER_GEOM = int (default: 2),
    # If: equal_to (" FORMULATION ", 'XFEM')
        ◇ ALGO_RESO_GEOM = "POINT_FIXE ",
        ◇ REAC_GEOM = "SANS ",
    # If: equal_to (" FORMULATION ", 'DISCRETE')
        ◇ ITER_CONT_MULT = int (default: 4),
    # If: equal_to (" FORMULATION ", 'CONTINUE')
        ◇ ALGO_RESO_CONT =/"POINT_FIXE ",
                           /"NEWTON" (by default),
        ◇ RESI_CONT = float (default: -1),
        # If: equal_to (" ALGO_RESO_CONT ", 'POINT_FIXE')
            ◇ ITER_CONT_TYPE =/"MULT ",
                               /"MAXI" (by default),
            # If: equal_to (" ITER_CONT_TYPE ", 'MULT')
                ◇ ITER_CONT_MULT = int (default: 4),
            # If: equal_to (" ITER_CONT_TYPE ", 'MAXI')
                ◇ ITER_CONT_MAXI = int (default: 30),
    # If: equal_to (" FORMULATION ", 'XFEM')
        ◇ ITER_CONT_TYPE =/"MULT ",
                           /"MAXI" (by default),
        # If: equal_to (" ITER_CONT_TYPE ", 'MULT')
            ◇ ITER_CONT_MULT = int (default: 4),
        # If: equal_to (" ITER_CONT_TYPE ", 'MAXI')
            ◇ ITER_CONT_MAXI = int (default: 30),
    # If: equal_to (" FROTTEMENT ", 'COULOMB') and equal_to (" FORMULATION ", 'CONTINUE')
        ◇ ALGO_RESO_FROT =/"POINT_FIXE ",
                           /"NEWTON" (by default),
        # If: equal_to (" ALGO_RESO_FROT ", 'POINT_FIXE')
            ◇ ITER_FROT_MAXI = int (default: 10),
            ◇ RESI_FROT = float (default: 0.0001),
        # If: equal_to (" ALGO_RESO_FROT ", 'NEWTON')
            ◇ RESI_FROT = float (default: 0.0001),
    # If: equal_to (" FROTTEMENT ", 'COULOMB') and equal_to (" FORMULATION ", 'XFEM')
        ◇ ITER_FROT_MAXI = int (default: 10),
        ◇ RESI_FROT = float (default: 0.0001),
    # If: equal_to (" FORMULATION ", 'XFEM')
        ◇ ELIM_ARETE =/"DUAL" (by default),
                       /"ELIM ",
    # If: equal_to (" FORMULATION ", 'DISCRETE')
        ◇ STOP_SINGULIER =/"OUI" (by default),
                           /"NON ",
        ◇ NB_RESOL = int (default: 10),
        ◇ RESI_ABSO = float,
        ◇ ITER_GCP_MAXI = int,
        ◇ RECH_LINEAIRE =/"ADMISSIBLE" (by default),
                          /"NON_ADMISSIBLE ",
        ◇ PRE_COND =/"DIRICHLET ",
                     /"SANS" (by default),
        # If: equal_to (" PRE_COND ", 'DIRICHLET')
            ◇ COEF_RESI = float (default: -1.0),
            ◇ ITER_PRE_MAXI = int,
    # If: equal_to (" FORMULATION ", 'LIAISON_UNIL')
        ◆ ZONE = _F (
             ◆/GROUP_MA = grma,
               /GROUP_NO = grno,
             ◆ NOM_CMP = text,
             ◆ COEF_IMPO = formula/tablecloth/function,
             ◆ COEF_MULT = formula/tablecloth/function,
             ◇ SANS_GROUP_NO = big,
             ◇ ALGO_CONT =/"CONTRAINTE" (by default),
                           /"PENALISATION ",
             # If: equal_to (" ALGO_CONT ", 'PENALISATION')
                 ◆ COEF_PENA = float,
          ),
    # If: equal_to (" FORMULATION ", 'DISCRETE') and equal_to (" FROTTEMENT ", 'COULOMB')
        ◆ ZONE = _F (
             ◇ APPARIEMENT =/"NODAL ",
                             /"MAIT_ESCL" (by default),
             ◇ GROUP_MA_MAIT = Grma,
             ◇ GROUP_MA_ESCL = Grma,
             ◇ NORMALE =/"MAIT" (by default),
                         /"MAIT_ESCL ",
                         /"ESCL ",
             ◇ VECT_MAIT =/"AUTO" (by default),
                           /"FIXE ",
                           /"VECT_Y ",
             # If: equal_to (" VECT_MAIT ", 'FIXE')
                 ◆ MAIT_FIXE = float,
             # If: equal_to (" VECT_MAIT ", 'VECT_Y')
                 ◆ MAIT_VECT_Y = float,
             ◇ VECT_ESCL =/"AUTO" (by default),
                           /"FIXE ",
                           /"VECT_Y ",
             # If: equal_to (" VECT_ESCL ", 'FIXE')
                 ◆ ESCL_FIXE = float,
             # If: equal_to (" VECT_ESCL ", 'VECT_Y')
                 ◆ ESCL_VECT_Y = float,
             ◇ TYPE_PROJECTION =/"ORTHOGONALE" (by default),
                                 /"FIXE ",
             # If: equal_to (" TYPE_PROJECTION ", 'FIXE')
                 ◇ DIRE_APPA = float,
             ◇ DIST_POUTRE =/"OUI ",
                             /"NON" (by default),
             ◇ DIST_COQUE =/"OUI ",
                            /"NON" (by default),
             # If: equal_to (" DIST_POUTRE ", 'OUI') or equal_to (" DIST_COQUE ", 'OUI')
                 ◆ CARA_ELEM = cara_elem,
             ◇ DIST_MAIT = formula/sheet/function,
             ◇ DIST_ESCL = formula/sheet/function,
             ◇ DIST_APPA = float (default: -1.0),
             ◇ TOLE_PROJ_EXT = float (default: 0.5),
             ◇ SANS_GROUP_NO = big,
             ◇ SANS_GROUP_MA = Grma,
             ◇ RESOLUTION =/"OUI" (by default),
                            /"NON ",
             # If: equal_to (" RESOLUTION ", 'NON')
                 ◇ TOLE_INTERP = float,
             ◇ ALGO_CONT =/"CONTRAINTE" (by default),
                           /"PENALISATION ",
                           /"GCP ",
             # If: equal_to (" ALGO_CONT ", 'CONTRAINTE')
                 ◇ GLISSIERE =/"OUI ",
                               /"NON" (by default),
                 # If: equal_to (" GLISSIERE ", 'OUI')
                     ◇ ALARME_JEU = float,
             # If: equal_to (" ALGO_CONT ", 'PENALISATION')
                 ◆ E_N = float,
             ◆ COULOMB = float,
             ◇ COEF_MATR_FROT = float,
             ◇ ALGO_FROT = "PENALISATION ",
             ◆ E_T = float,
          ),
    # If: equal_to (" FORMULATION ", 'DISCRETE') and not equal_to (" FROTTEMENT ", 'COULOMB')
        ◆ ZONE = _F (
             ◇ APPARIEMENT =/"NODAL ",
                             /"MAIT_ESCL" (by default),
             ◇ GROUP_MA_MAIT = Grma,
             ◇ GROUP_MA_ESCL = Grma,
             ◇ NORMALE =/"MAIT" (by default),
                         /"MAIT_ESCL ",
                         /"ESCL ",
             ◇ VECT_MAIT =/"AUTO" (by default),
                           /"FIXE ",
                           /"VECT_Y ",
             # If: equal_to (" VECT_MAIT ", 'FIXE')
                 ◆ MAIT_FIXE = float,
             # If: equal_to (" VECT_MAIT ", 'VECT_Y')
                 ◆ MAIT_VECT_Y = float,
             ◇ VECT_ESCL =/"AUTO" (by default),
                           /"FIXE ",
                           /"VECT_Y ",
             # If: equal_to (" VECT_ESCL ", 'FIXE')
                 ◆ ESCL_FIXE = float,
             # If: equal_to (" VECT_ESCL ", 'VECT_Y')
                 ◆ ESCL_VECT_Y = float,
             ◇ TYPE_PROJECTION =/"ORTHOGONALE" (by default),
                                 /"FIXE ",
             # If: equal_to (" TYPE_PROJECTION ", 'FIXE')
                 ◇ DIRE_APPA = float,
             ◇ DIST_POUTRE =/"OUI ",
                             /"NON" (by default),
             ◇ DIST_COQUE =/"OUI ",
                            /"NON" (by default),
             # If: equal_to (" DIST_POUTRE ", 'OUI') or equal_to (" DIST_COQUE ", 'OUI')
                 ◆ CARA_ELEM = cara_elem,
             ◇ DIST_MAIT = formula/sheet/function,
             ◇ DIST_ESCL = formula/sheet/function,
             ◇ DIST_APPA = float (default: -1.0),
             ◇ TOLE_PROJ_EXT = float (default: 0.5),
             ◇ SANS_GROUP_NO = big,
             ◇ SANS_GROUP_MA = Grma,
             ◇ RESOLUTION =/"OUI" (by default),
                            /"NON ",
             # If: equal_to (" RESOLUTION ", 'NON')
                 ◇ TOLE_INTERP = float,
             ◇ ALGO_CONT =/"CONTRAINTE" (by default),
                           /"PENALISATION ",
                           /"GCP ",
             # If: equal_to (" ALGO_CONT ", 'CONTRAINTE')
                 ◇ GLISSIERE =/"OUI ",
                               /"NON" (by default),
                 # If: equal_to (" GLISSIERE ", 'OUI')
                     ◇ ALARME_JEU = float,
             # If: equal_to (" ALGO_CONT ", 'PENALISATION')
                 ◆ E_N = float,
          ),
    # If: equal_to (" FORMULATION ", 'CONTINUE') and equal_to (" FROTTEMENT ", 'COULOMB')
        ◆ ZONE = _F (
             ◇ ALGO_CONT =/"STANDARD" (by default),
                           /"PENALISATION ",
                           /"LAC ",
             ◇ ALGO_FROT =/"STANDARD" (by default),
                           /"PENALISATION ",
             # If: equal_to (" ALGO_FROT ", 'STANDARD')
             # If: (equal_to (" ALGO_CONT ", '",' PENALISATION ') and equal_to (" ALGO_FROT ",' STANDARD '))
                 ◇ ADAPTATION =/"ADAPT_COEF ",
                                /"CYCLAGE" (by default),
                                /"TOUT ",
                                /"NON ",
                 ◇ COEF_FROT = float (default: 100.0),
                 # If: (equal_to (" ADAPTATION ", 'NON', '') or equal_to (" ADAPTATION ", 'CYCLAGE') or not exists (" ADAPTATION "))
                     ◆ COEF_PENA_CONT = float,
                 # If: (equal_to (" ADAPTATION ", '",' ADAPT_COEF ') or equal_to (" ADAPTATION ",' TOUT '))
                     ◇ PENE_MAXI = float,
                     ◇ COEF_PENA_CONT = float (default: 100.0),
             # If: (equal_to (" ALGO_CONT ", '",' STANDARD ') and equal_to (" ALGO_FROT ",' STANDARD '))
                 ◇ ADAPTATION =/"ADAPT_COEF ",
                                /"CYCLAGE" (by default),
                                /"TOUT ",
                                /"NON ",
                 ◇ COEF_CONT = float (default: 100.0),
                 ◇ COEF_FROT = float (default: 100.0),
             # If: (equal_to (" ALGO_CONT ", '",' PENALISATION ') and equal_to (" ALGO_FROT ",' PENALISATION '))
                 ◇ ADAPTATION =/"ADAPT_COEF ",
                                /"CYCLAGE" (by default),
                                /"TOUT ",
                                /"NON ",
                 # If: (equal_to (" ADAPTATION ", 'NON', '') or equal_to (" ADAPTATION ", 'CYCLAGE') or not exists (" ADAPTATION "))
                     ◆ COEF_PENA_CONT = float,
                     ◆ COEF_PENA_FROT = float,
                 # If: (equal_to (" ADAPTATION ", '",' ADAPT_COEF ') or equal_to (" ADAPTATION ",' TOUT '))
                     ◇ PENE_MAXI = float,
                     ◇ COEF_PENA_CONT = float (default: 100.0),
                     ◇ GLIS_MAXI = float,
                     ◇ COEF_PENA_FROT = float (default: 10000000.0),
             # If: (equal_to (" ALGO_CONT ", '",' STANDARD ') and equal_to (" ALGO_FROT ",' PENALISATION '))
                 ◇ ADAPTATION =/"ADAPT_COEF ",
                                /"CYCLAGE" (by default),
                                /"TOUT ",
                                /"NON ",
                 ◇ COEF_CONT = float (default: 100.0),
                 # If: (equal_to (" ADAPTATION ", '",' NON ') or equal_to (" ADAPTATION ",' CYCLAGE '))
                     ◆ COEF_PENA_FROT = float,
                 # If: (equal_to (" ADAPTATION ", '",' ADAPT_COEF ') or equal_to (" ADAPTATION ",' TOUT '))
                     ◇ GLIS_MAXI = float,
                     ◇ COEF_PENA_FROT = float (default: 10000000.0),
             # If: equal_to (" ALGO_CONT ", 'STANDARD') or equal_to (" ALGO_CONT ", 'PENALISATION')
                 ◇ APPARIEMENT = "MAIT_ESCL ",
                 ◇ GROUP_MA_MAIT = Grma,
                 ◇ GROUP_MA_ESCL = Grma,
                 ◇ NORMALE =/"MAIT" (by default),
                             /"MAIT_ESCL ",
                             /"ESCL ",
                 ◇ VECT_MAIT =/"AUTO" (by default),
                               /"FIXE ",
                               /"VECT_Y ",
                 # If: equal_to (" VECT_MAIT ", 'FIXE')
                     ◆ MAIT_FIXE = float,
                 # If: equal_to (" VECT_MAIT ", 'VECT_Y')
                     ◆ MAIT_VECT_Y = float,
                 ◇ VECT_ESCL =/"AUTO" (by default),
                               /"FIXE ",
                               /"VECT_Y ",
                 # If: equal_to (" VECT_ESCL ", 'FIXE')
                     ◆ ESCL_FIXE = float,
                 # If: equal_to (" VECT_ESCL ", 'VECT_Y')
                     ◆ ESCL_VECT_Y = float,
                 ◇ TYPE_PROJECTION =/"ORTHOGONALE" (by default),
                                     /"FIXE ",
                 # If: equal_to (" TYPE_PROJECTION ", 'FIXE')
                     ◇ DIRE_APPA = float,
                 ◇ DIST_APPA = float (default: -1.0),
                 ◇ TOLE_PROJ_EXT = float (default: 0.5),
                 ◇ DIST_POUTRE =/"OUI ",
                                 /"NON" (by default),
                 ◇ DIST_COQUE =/"OUI ",
                                /"NON" (by default),
                 # If: equal_to (" DIST_POUTRE ", 'OUI') or equal_to (" DIST_COQUE ", 'OUI')
                     ◆ CARA_ELEM = cara_elem,
                 ◇ DIST_MAIT = formula/sheet/function,
                 ◇ DIST_ESCL = formula/sheet/function,
                 ◇ SANS_GROUP_NO = big,
                 ◇ SANS_GROUP_MA = Grma,
                 ◇ INTEGRATION =/"AUTO" (by default),
                                 /"GAUSS ",
                                 /"SIMPSON ",
                                 /"NCOTES ",
                 # If: equal_to (" INTEGRATION ", 'GAUSS')
                     ◇ ORDRE_INT = int (default: 3),
                 # If: equal_to (" INTEGRATION ", 'SIMPSON')
                     ◇ ORDRE_INT = int (default: 1),
                 # If: equal_to (" INTEGRATION ", 'NCOTES')
                     ◇ ORDRE_INT = int (default: 3),
                 ◇ RESOLUTION =/"OUI" (by default),
                                /"NON ",
                 # If: equal_to (" RESOLUTION ", 'NON')
                     ◇ TOLE_INTERP = float,
                 ◇ CONTACT_INIT =/"OUI ",
                                  /"INTERPENETRE" (by default),
                                  /"NON ",
                 ◇ GLISSIERE =/"OUI ",
                               /"NON" (by default),
             # If: equal_to (" ALGO_CONT ", 'LAC')
                 ◇ APPARIEMENT = "MORTAR ",
                 ◇ TYPE_APPA =/"ROBUSTE ",
                               /"RAPIDE" (by default),
                 ◇ RESI_APPA = float (default: 1e-08),
                 ◇ TYPE_JACOBIEN =/"INITIAL" (by default),
                                   /"ACTUALISE ",
                 ◇ INTEGRATION = "AUTO ",
                 ◆ GROUP_MA_MAIT = GRMA,
                 ◆ GROUP_MA_ESCL = GRMA,
                 ◇ CONTACT_INIT =/"OUI ",
                                  /"INTERPENETRE" (by default),
                                  /"NON ",
             ◆ COULOMB = float,
             ◇ GRAND_GLIS =/"OUI ",
                            /"NON" (by default),
             ◇ SEUIL_INIT = float,
             ◇ SANS_GROUP_NO_FR = big,
             # If: exists (" SANS_GROUP_NO_FR ")
                 ◇ DIRE_EXCL_FROT = float,
          ),
    # If: equal_to (" FORMULATION ", 'CONTINUE') and not equal_to (" FROTTEMENT ", 'COULOMB')
        ◆ ZONE = _F (
             ◇ ALGO_CONT =/"STANDARD" (by default),
                           /"PENALISATION ",
                           /"LAC ",
             # If: equal_to (" ALGO_CONT ", 'STANDARD')
                 ◇ COEF_CONT = float (default: 100.0),
                 ◇ ADAPTATION =/"ADAPT_COEF ",
                                /"CYCLAGE" (by default),
                                /"TOUT ",
                                /"NON ",
             # If: equal_to (" ALGO_CONT ", 'PENALISATION')
                 ◇ ADAPTATION =/"ADAPT_COEF ",
                                /"CYCLAGE" (by default),
                                /"TOUT ",
                                /"NON ",
                 # If: (equal_to (" ADAPTATION ", '",' ADAPT_COEF ')) or (equal_to (" ADAPTATION ",' TOUT '))
                     ◇ PENE_MAXI = float,
                     ◇ COEF_PENA_CONT = float (default: 100.0),
                 # If: (equal_to (" ADAPTATION ", 'CYCLAGE', '')) or (equal_to (" ADAPTATION ", 'NON')) or (not exists (" ADAPTATION "))
                     ◆ COEF_PENA_CONT = float,
             # If: equal_to (" ALGO_CONT ", 'STANDARD') or equal_to (" ALGO_CONT ", 'PENALISATION')
                 ◇ APPARIEMENT = "MAIT_ESCL ",
                 ◇ GROUP_MA_MAIT = Grma,
                 ◇ GROUP_MA_ESCL = Grma,
                 ◇ NORMALE =/"MAIT" (by default),
                             /"MAIT_ESCL ",
                             /"ESCL ",
                 ◇ VECT_MAIT =/"AUTO" (by default),
                               /"FIXE ",
                               /"VECT_Y ",
                 # If: equal_to (" VECT_MAIT ", 'FIXE')
                     ◆ MAIT_FIXE = float,
                 # If: equal_to (" VECT_MAIT ", 'VECT_Y')
                     ◆ MAIT_VECT_Y = float,
                 ◇ VECT_ESCL =/"AUTO" (by default),
                               /"FIXE ",
                               /"VECT_Y ",
                 # If: equal_to (" VECT_ESCL ", 'FIXE')
                     ◆ ESCL_FIXE = float,
                 # If: equal_to (" VECT_ESCL ", 'VECT_Y')
                     ◆ ESCL_VECT_Y = float,
                 ◇ TYPE_PROJECTION =/"ORTHOGONALE" (by default),
                                     /"FIXE ",
                 # If: equal_to (" TYPE_PROJECTION ", 'FIXE')
                     ◇ DIRE_APPA = float,
                 ◇ DIST_APPA = float (default: -1.0),
                 ◇ TOLE_PROJ_EXT = float (default: 0.5),
                 ◇ DIST_POUTRE =/"OUI ",
                                 /"NON" (by default),
                 ◇ DIST_COQUE =/"OUI ",
                                /"NON" (by default),
                 # If: equal_to (" DIST_POUTRE ", 'OUI') or equal_to (" DIST_COQUE ", 'OUI')
                     ◆ CARA_ELEM = cara_elem,
                 ◇ DIST_MAIT = formula/sheet/function,
                 ◇ DIST_ESCL = formula/sheet/function,
                 ◇ SANS_GROUP_NO = big,
                 ◇ SANS_GROUP_MA = Grma,
                 ◇ INTEGRATION =/"AUTO" (by default),
                                 /"GAUSS ",
                                 /"SIMPSON ",
                                 /"NCOTES ",
                 # If: equal_to (" INTEGRATION ", 'GAUSS')
                     ◇ ORDRE_INT = int (default: 3),
                 # If: equal_to (" INTEGRATION ", 'SIMPSON')
                     ◇ ORDRE_INT = int (default: 1),
                 # If: equal_to (" INTEGRATION ", 'NCOTES')
                     ◇ ORDRE_INT = int (default: 3),
                 ◇ RESOLUTION =/"OUI" (by default),
                                /"NON ",
                 # If: equal_to (" RESOLUTION ", 'NON')
                     ◇ TOLE_INTERP = float,
                 ◇ CONTACT_INIT =/"OUI ",
                                  /"INTERPENETRE" (by default),
                                  /"NON ",
                 ◇ GLISSIERE =/"OUI ",
                               /"NON" (by default),
             # If: equal_to (" ALGO_CONT ", 'LAC')
                 ◇ APPARIEMENT = "MORTAR ",
                 ◇ TYPE_APPA =/"ROBUSTE ",
                               /"RAPIDE" (by default),
                 ◇ RESI_APPA = float (default: 1e-08),
                 ◇ TYPE_JACOBIEN =/"INITIAL" (by default),
                                   /"ACTUALISE ",
                 ◇ INTEGRATION = "AUTO ",
                 ◆ GROUP_MA_MAIT = GRMA,
                 ◆ GROUP_MA_ESCL = GRMA,
                 ◇ CONTACT_INIT =/"OUI ",
                                  /"INTERPENETRE" (by default),
                                  /"NON ",
          ),
    # If: equal_to (" FORMULATION ", 'XFEM') and equal_to (" FROTTEMENT ", 'COULOMB') and not equal_to (" ALGO_CONT ", '', 'CZM')
        ◆ ZONE = _F (
             ◆ FISS_MAIT = fiss_xfem,
             ◇ TOLE_PROJ_EXT = float (default: 0.5),
             ◇ INTEGRATION =/"NOEUD ",
                             /"GAUSS" (by default),
                             /"SIMPSON ",
                             /"NCOTES ",
             # If: equal_to (" INTEGRATION ", 'GAUSS')
                 ◇ ORDRE_INT = int (default: 6),
             # If: equal_to (" INTEGRATION ", 'SIMPSON')
                 ◇ ORDRE_INT = int (default: 1),
             # If: equal_to (" INTEGRATION ", 'NCOTES')
                 ◇ ORDRE_INT = int (default: 3),
             ◇ ALGO_LAGR =/"AUTO" (by default),
                           /"NON ",
                           /"VERSION1 ",
                           /"VERSION2 ",
                           /"VERSION3 ",
             ◇ ALGO_CONT =/"STANDARD" (by default),
                           /"PENALISATION ",
                           /"CZM ",
             # If: not equal_to (" ALGO_CONT ", 'CZM')
                 ◇ CONTACT_INIT =/"OUI ",
                                  /"NON" (by default),
                 ◇ GLISSIERE =/"OUI ",
                               /"NON" (by default),
             # If: equal_to (" ALGO_CONT ", 'STANDARD')
                 ◇ COEF_CONT = float (default: 100.0),
                 ◇ ADAPTATION =/"ADAPT_COEF ",
                                /"CYCLAGE" (by default),
                                /"TOUT ",
                                /"NON ",
             # If: equal_to (" ALGO_CONT ", 'PENALISATION')
                 ◆ COEF_PENA_CONT = float,
             # If: equal_to (" ALGO_CONT ", 'CZM')
                 ◆ RELATION =/"CZM_EXP_REG ",
                              /"CZM_LIN_REG ",
                              /"CZM_TAC_MIX ",
                              /"CZM_OUV_MIX ",
                              /"CZM_LIN_MIX ",
             ◆ COULOMB = float,
             ◇ SEUIL_INIT = float,
             ◇ ALGO_FROT =/"STANDARD" (by default),
                           /"PENALISATION ",
             # If: equal_to (" ALGO_FROT ", 'STANDARD')
                 ◇ COEF_FROT = float (default: 100.0),
             # If: equal_to (" ALGO_FROT ", 'PENALISATION')
                 ◆ COEF_PENA_FROT = float,
          ),
    # If: equal_to (" FORMULATION ", 'XFEM') and equal_to (" FROTTEMENT ", 'SANS')
        ◆ ZONE = _F (
             ◆ FISS_MAIT = fiss_xfem,
             ◇ TOLE_PROJ_EXT = float (default: 0.5),
             ◇ INTEGRATION =/"NOEUD ",
                             /"GAUSS" (by default),
                             /"SIMPSON ",
                             /"NCOTES ",
             # If: equal_to (" INTEGRATION ", 'GAUSS')
                 ◇ ORDRE_INT = int (default: 6),
             # If: equal_to (" INTEGRATION ", 'SIMPSON')
                 ◇ ORDRE_INT = int (default: 1),
             # If: equal_to (" INTEGRATION ", 'NCOTES')
                 ◇ ORDRE_INT = int (default: 3),
             ◇ ALGO_LAGR =/"AUTO" (by default),
                           /"NON ",
                           /"VERSION1 ",
                           /"VERSION2 ",
                           /"VERSION3 ",
             ◇ ALGO_CONT =/"STANDARD" (by default),
                           /"PENALISATION ",
                           /"CZM ",
             # If: not equal_to (" ALGO_CONT ", 'CZM')
                 ◇ CONTACT_INIT =/"OUI ",
                                  /"NON" (by default),
                 ◇ GLISSIERE =/"OUI ",
                               /"NON" (by default),
             # If: equal_to (" ALGO_CONT ", 'STANDARD')
                 ◇ COEF_CONT = float (default: 100.0),
             # If: equal_to (" ALGO_CONT ", 'PENALISATION')
                 ◆ COEF_PENA_CONT = float,
             # If: equal_to (" ALGO_CONT ", 'CZM')
                 ◆ RELATION =/"CZM_EXP_REG ",
                              /"CZM_LIN_REG ",
                              /"CZM_TAC_MIX ",
                              /"CZM_OUV_MIX ",
                              /"CZM_LIN_MIX ",
          ),
)

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