2. Syntaxe#

char_contact = DEFI_CONTACT(
    ◆ MODELE = modele,
    ◇ INFO = / 1,
             / 2,
    ◇ FORMULATION = / "CONTINUE",
                    / "DISCRETE" (par défaut),
                    / "LIAISON_UNIL",
    ◇ FROTTEMENT = / "COULOMB",
                   / "SANS" (par défaut),
    # Si: ((equal_to("FORMULATION", 'CONTINUE')) or (equal_to("FORMULATION", 'DISCRETE')))
        ◇ STOP_INTERP = / "NON" (par défaut),
                        / "OUI",
        ◇ LISSAGE = / "NON" (par défaut),
                    / "OUI",
        ◇ VERI_NORM = / "NON",
                      / "OUI" (par défaut),
    # Si: equal_to("FORMULATION", 'DISCRETE')
        ◇ ALGO_RESO_GEOM = "POINT_FIXE",
        ◇ REAC_GEOM = / "AUTOMATIQUE" (par défaut),
                      / "CONTROLE",
                      / "SANS",
        # Si: equal_to("REAC_GEOM", 'AUTOMATIQUE')
            ◇ ITER_GEOM_MAXI = int (défaut: 10),
            ◇ RESI_GEOM = float (défaut: 0.01),
        # Si: equal_to("REAC_GEOM", 'CONTROLE')
            ◇ NB_ITER_GEOM = int (défaut: 2),
    # Si: equal_to("FORMULATION", 'CONTINUE')
        ◇ ALGO_RESO_GEOM = / "NEWTON",
                           / "POINT_FIXE" (par défaut),
        ◇ CONT_STAT_ELAS = int (défaut: 0),
        # Si: equal_to("ALGO_RESO_GEOM", 'NEWTON')
            ◇ RESI_GEOM = float (défaut: 1e-06),
        # Si: equal_to("ALGO_RESO_GEOM", 'POINT_FIXE')
            ◇ REAC_GEOM = / "AUTOMATIQUE" (par défaut),
                          / "CONTROLE",
                          / "SANS",
            # Si: equal_to("REAC_GEOM", 'AUTOMATIQUE')
                ◇ ITER_GEOM_MAXI = int (défaut: 10),
                ◇ RESI_GEOM = float (défaut: 0.01),
            # Si: equal_to("REAC_GEOM", 'CONTROLE')
                ◇ NB_ITER_GEOM = int (défaut: 2),
    # Si: equal_to("FORMULATION", 'DISCRETE')
        ◇ ITER_CONT_MULT = int (défaut: 4),
    # Si: equal_to("FORMULATION", 'CONTINUE')
        ◇ ALGO_RESO_CONT = / "NEWTON" (par défaut),
                           / "POINT_FIXE",
        ◇ RESI_CONT = float (défaut: -1),
        # Si: equal_to("ALGO_RESO_CONT", 'POINT_FIXE')
            ◇ ITER_CONT_TYPE = / "MAXI" (par défaut),
                               / "MULT",
            # Si: equal_to("ITER_CONT_TYPE", 'MULT')
                ◇ ITER_CONT_MULT = int (défaut: 4),
            # Si: equal_to("ITER_CONT_TYPE", 'MAXI')
                ◇ ITER_CONT_MAXI = int (défaut: 30),
    # Si: equal_to("FROTTEMENT", 'COULOMB') and equal_to("FORMULATION", 'CONTINUE')
        ◇ ALGO_RESO_FROT = / "NEWTON" (par défaut),
                           / "POINT_FIXE",
        # Si: equal_to("ALGO_RESO_FROT", 'POINT_FIXE')
            ◇ ITER_FROT_MAXI = int (défaut: 10),
            ◇ RESI_FROT = float (défaut: 0.0001),
        # Si: equal_to("ALGO_RESO_FROT", 'NEWTON')
            ◇ RESI_FROT = float (défaut: 0.0001),
    # Si: equal_to("FORMULATION", 'DISCRETE')
        ◇ STOP_SINGULIER = / "NON",
                           / "OUI" (par défaut),
        ◇ NB_RESOL = int (défaut: 10),
        ◇ RESI_ABSO = float,
        ◇ ITER_GCP_MAXI = int (défaut: 0),
        ◇ RECH_LINEAIRE = / "ADMISSIBLE" (par défaut),
                          / "NON_ADMISSIBLE",
        ◇ PRE_COND = / "DIRICHLET",
                     / "SANS" (par défaut),
        # Si: equal_to("PRE_COND", 'DIRICHLET')
            ◇ COEF_RESI = float (défaut: -1.0),
            ◇ ITER_PRE_MAXI = int (défaut: 0),
    # Si: equal_to("FORMULATION", 'LIAISON_UNIL')
        ◆ ZONE = _F(
             ◆ / GROUP_MA = list[grma],
               / GROUP_NO = list[grno],
             ◆ NOM_CMP = list[text],
             ◆ COEF_IMPO = fonction / formule / nappe,
             ◆ COEF_MULT = list[fonction / formule / nappe],
             ◇ SANS_GROUP_NO = list[grno],
             ◇ ALGO_CONT = / "CONTRAINTE" (par défaut),
                           / "PENALISATION",
             # Si: equal_to("ALGO_CONT", 'PENALISATION')
                 ◆ COEF_PENA = float,
          ),
    # Si: equal_to("FORMULATION", 'DISCRETE') and equal_to("FROTTEMENT", 'COULOMB')
        ◆ ZONE = _F(
             ◇ APPARIEMENT = / "MAIT_ESCL" (par défaut),
                             / "NODAL",
             ◇ GROUP_MA_MAIT = grma,
             ◇ GROUP_MA_ESCL = grma,
             ◇ NORMALE = / "ESCL",
                         / "MAIT" (par défaut),
                         / "MAIT_ESCL",
             ◇ VECT_MAIT = / "AUTO" (par défaut),
                           / "FIXE",
                           / "VECT_Y",
             # Si: equal_to("VECT_MAIT", 'FIXE')
                 ◆ MAIT_FIXE = list[float],
             # Si: equal_to("VECT_MAIT", 'VECT_Y')
                 ◆ MAIT_VECT_Y = list[float],
             ◇ VECT_ESCL = / "AUTO" (par défaut),
                           / "FIXE",
                           / "VECT_Y",
             # Si: equal_to("VECT_ESCL", 'FIXE')
                 ◆ ESCL_FIXE = list[float],
             # Si: equal_to("VECT_ESCL", 'VECT_Y')
                 ◆ ESCL_VECT_Y = list[float],
             ◇ TYPE_PROJECTION = / "FIXE",
                                 / "ORTHOGONALE" (par défaut),
             # Si: equal_to("TYPE_PROJECTION", 'FIXE')
                 ◇ DIRE_APPA = list[float],
             ◇ DIST_POUTRE = / "NON" (par défaut),
                             / "OUI",
             ◇ DIST_COQUE = / "NON" (par défaut),
                            / "OUI",
             # Si: equal_to("DIST_POUTRE", 'OUI') or equal_to("DIST_COQUE", 'OUI')
                 ◆ CARA_ELEM = cara_elem,
             ◇ DIST_MAIT = fonction / formule / nappe,
             ◇ DIST_ESCL = fonction / formule / nappe,
             ◇ DIST_APPA = float (défaut: -1.0),
             ◇ TOLE_PROJ_EXT = float (défaut: 0.5),
             ◇ SANS_GROUP_NO = list[grno],
             ◇ SANS_GROUP_MA = list[grma],
             ◇ RESOLUTION = / "NON",
                            / "OUI" (par défaut),
             # Si: equal_to("RESOLUTION", 'NON')
                 ◇ TOLE_INTERP = float (défaut: 0.0),
             ◇ ALGO_CONT = / "CONTRAINTE" (par défaut),
                           / "GCP",
                           / "PENALISATION",
             # Si: equal_to("ALGO_CONT", 'CONTRAINTE')
                 ◇ GLISSIERE = / "NON" (par défaut),
                               / "OUI",
                 # Si: equal_to("GLISSIERE", 'OUI')
                     ◇ ALARME_JEU = float (défaut: 0.0),
             # Si: equal_to("ALGO_CONT", 'PENALISATION')
                 ◆ E_N = float,
             ◆ COULOMB = float,
             ◇ COEF_MATR_FROT = float (défaut: 0.0),
             ◇ ALGO_FROT = "PENALISATION",
             ◆ E_T = float,
          ),
    # Si: equal_to("FORMULATION", 'DISCRETE') and not equal_to("FROTTEMENT", 'COULOMB')
        ◆ ZONE = _F(
             ◇ APPARIEMENT = / "MAIT_ESCL" (par défaut),
                             / "NODAL",
             ◇ GROUP_MA_MAIT = grma,
             ◇ GROUP_MA_ESCL = grma,
             ◇ NORMALE = / "ESCL",
                         / "MAIT" (par défaut),
                         / "MAIT_ESCL",
             ◇ VECT_MAIT = / "AUTO" (par défaut),
                           / "FIXE",
                           / "VECT_Y",
             # Si: equal_to("VECT_MAIT", 'FIXE')
                 ◆ MAIT_FIXE = list[float],
             # Si: equal_to("VECT_MAIT", 'VECT_Y')
                 ◆ MAIT_VECT_Y = list[float],
             ◇ VECT_ESCL = / "AUTO" (par défaut),
                           / "FIXE",
                           / "VECT_Y",
             # Si: equal_to("VECT_ESCL", 'FIXE')
                 ◆ ESCL_FIXE = list[float],
             # Si: equal_to("VECT_ESCL", 'VECT_Y')
                 ◆ ESCL_VECT_Y = list[float],
             ◇ TYPE_PROJECTION = / "FIXE",
                                 / "ORTHOGONALE" (par défaut),
             # Si: equal_to("TYPE_PROJECTION", 'FIXE')
                 ◇ DIRE_APPA = list[float],
             ◇ DIST_POUTRE = / "NON" (par défaut),
                             / "OUI",
             ◇ DIST_COQUE = / "NON" (par défaut),
                            / "OUI",
             # Si: equal_to("DIST_POUTRE", 'OUI') or equal_to("DIST_COQUE", 'OUI')
                 ◆ CARA_ELEM = cara_elem,
             ◇ DIST_MAIT = fonction / formule / nappe,
             ◇ DIST_ESCL = fonction / formule / nappe,
             ◇ DIST_APPA = float (défaut: -1.0),
             ◇ TOLE_PROJ_EXT = float (défaut: 0.5),
             ◇ SANS_GROUP_NO = list[grno],
             ◇ SANS_GROUP_MA = list[grma],
             ◇ RESOLUTION = / "NON",
                            / "OUI" (par défaut),
             # Si: equal_to("RESOLUTION", 'NON')
                 ◇ TOLE_INTERP = float (défaut: 0.0),
             ◇ ALGO_CONT = / "CONTRAINTE" (par défaut),
                           / "GCP",
                           / "PENALISATION",
             # Si: equal_to("ALGO_CONT", 'CONTRAINTE')
                 ◇ GLISSIERE = / "NON" (par défaut),
                               / "OUI",
                 # Si: equal_to("GLISSIERE", 'OUI')
                     ◇ ALARME_JEU = float (défaut: 0.0),
             # Si: equal_to("ALGO_CONT", 'PENALISATION')
                 ◆ E_N = float,
          ),
    # Si: equal_to("FORMULATION", 'CONTINUE') and equal_to("FROTTEMENT", 'COULOMB')
        ◆ ZONE = _F(
             ◇ ALGO_CONT = / "LAC",
                           / "PENALISATION",
                           / "STANDARD" (par défaut),
             ◇ ALGO_FROT = / "PENALISATION",
                           / "STANDARD" (par défaut),
             # Si: equal_to("ALGO_FROT", 'STANDARD')
             # Si: (equal_to("ALGO_CONT", 'PENALISATION') and equal_to("ALGO_FROT", 'STANDARD') )
                 ◇ ADAPTATION = / "ADAPT_COEF",
                                / "CYCLAGE" (par défaut),
                                / "NON",
                                / "TOUT",
                 ◇ COEF_FROT = float (défaut: 100.0),
                 # Si: (equal_to("ADAPTATION", 'NON') or equal_to("ADAPTATION", 'CYCLAGE') or not exists("ADAPTATION"))
                     ◆ COEF_PENA_CONT = float,
                 # Si: (equal_to("ADAPTATION", 'ADAPT_COEF') or equal_to("ADAPTATION", 'TOUT'))
                     ◇ PENE_MAXI = float,
                     ◇ COEF_PENA_CONT = float (défaut: 100.0),
             # Si: (equal_to("ALGO_CONT", 'STANDARD') and equal_to("ALGO_FROT",'STANDARD' ) )
                 ◇ ADAPTATION = / "ADAPT_COEF",
                                / "CYCLAGE" (par défaut),
                                / "NON",
                                / "TOUT",
                 ◇ COEF_CONT = float (défaut: 100.0),
                 ◇ COEF_FROT = float (défaut: 100.0),
             # Si: (equal_to("ALGO_CONT", 'PENALISATION') and equal_to("ALGO_FROT", 'PENALISATION'))
                 ◇ ADAPTATION = / "ADAPT_COEF",
                                / "CYCLAGE" (par défaut),
                                / "NON",
                                / "TOUT",
                 # Si: (equal_to("ADAPTATION", 'NON') or equal_to("ADAPTATION", 'CYCLAGE') or not exists("ADAPTATION"))
                     ◆ COEF_PENA_CONT = float,
                     ◆ COEF_PENA_FROT = float,
                 # Si: (equal_to("ADAPTATION", 'ADAPT_COEF') or equal_to("ADAPTATION", 'TOUT'))
                     ◇ PENE_MAXI = float,
                     ◇ COEF_PENA_CONT = float (défaut: 100.0),
                     ◇ GLIS_MAXI = float,
                     ◇ COEF_PENA_FROT = float (défaut: 10000000.0),
             # Si: (equal_to("ALGO_CONT", 'STANDARD') and equal_to("ALGO_FROT", 'PENALISATION'))
                 ◇ ADAPTATION = / "ADAPT_COEF",
                                / "CYCLAGE" (par défaut),
                                / "NON",
                                / "TOUT",
                 ◇ COEF_CONT = float (défaut: 100.0),
                 # Si: (equal_to("ADAPTATION", 'NON') or equal_to("ADAPTATION", 'CYCLAGE'))
                     ◆ COEF_PENA_FROT = float,
                 # Si: (equal_to("ADAPTATION", 'ADAPT_COEF') or equal_to("ADAPTATION", 'TOUT'))
                     ◇ GLIS_MAXI = float,
                     ◇ COEF_PENA_FROT = float (défaut: 10000000.0),
             # Si: equal_to("ALGO_CONT", 'STANDARD') or equal_to("ALGO_CONT", 'PENALISATION')
                 ◇ APPARIEMENT = "MAIT_ESCL",
                 ◇ GROUP_MA_MAIT = grma,
                 ◇ GROUP_MA_ESCL = grma,
                 ◇ NORMALE = / "ESCL",
                             / "MAIT" (par défaut),
                             / "MAIT_ESCL",
                 ◇ VECT_MAIT = / "AUTO" (par défaut),
                               / "FIXE",
                               / "VECT_Y",
                 # Si: equal_to("VECT_MAIT", 'FIXE')
                     ◆ MAIT_FIXE = list[float],
                 # Si: equal_to("VECT_MAIT", 'VECT_Y')
                     ◆ MAIT_VECT_Y = list[float],
                 ◇ VECT_ESCL = / "AUTO" (par défaut),
                               / "FIXE",
                               / "VECT_Y",
                 # Si: equal_to("VECT_ESCL", 'FIXE')
                     ◆ ESCL_FIXE = list[float],
                 # Si: equal_to("VECT_ESCL", 'VECT_Y')
                     ◆ ESCL_VECT_Y = list[float],
                 ◇ TYPE_PROJECTION = / "FIXE",
                                     / "ORTHOGONALE" (par défaut),
                 # Si: equal_to("TYPE_PROJECTION", 'FIXE')
                     ◇ DIRE_APPA = list[float],
                 ◇ DIST_APPA = float (défaut: -1.0),
                 ◇ TOLE_PROJ_EXT = float (défaut: 0.5),
                 ◇ DIST_POUTRE = / "NON" (par défaut),
                                 / "OUI",
                 ◇ DIST_COQUE = / "NON" (par défaut),
                                / "OUI",
                 # Si: equal_to("DIST_POUTRE", 'OUI') or equal_to("DIST_COQUE", 'OUI')
                     ◆ CARA_ELEM = cara_elem,
                 ◇ DIST_MAIT = fonction / formule / nappe,
                 ◇ DIST_ESCL = fonction / formule / nappe,
                 ◇ SANS_GROUP_NO = list[grno],
                 ◇ SANS_GROUP_MA = list[grma],
                 ◇ INTEGRATION = / "AUTO" (par défaut),
                                 / "GAUSS",
                                 / "NCOTES",
                                 / "SIMPSON",
                 # Si: equal_to("INTEGRATION", 'GAUSS')
                     ◇ ORDRE_INT = int (défaut: 3),
                 # Si: equal_to("INTEGRATION", 'SIMPSON')
                     ◇ ORDRE_INT = int (défaut: 1),
                 # Si: equal_to("INTEGRATION", 'NCOTES')
                     ◇ ORDRE_INT = int (défaut: 3),
                 ◇ RESOLUTION = / "NON",
                                / "OUI" (par défaut),
                 # Si: equal_to("RESOLUTION", 'NON')
                     ◇ TOLE_INTERP = float (défaut: 0.0),
                 ◇ CONTACT_INIT = / "INTERPENETRE" (par défaut),
                                  / "NON",
                                  / "OUI",
                 # Si: equal_to("CONTACT_INIT", 'INTERPENETRE')
                     ◇ DIST_MAXI = float,
                 ◇ GLISSIERE = / "NON" (par défaut),
                               / "OUI",
             # Si: equal_to("ALGO_CONT", 'LAC')
                 ◇ APPARIEMENT = "MORTAR",
                 ◇ TYPE_APPA = / "RAPIDE" (par défaut),
                               / "ROBUSTE",
                 ◇ RESI_APPA = float (défaut: 1e-08),
                 ◇ TYPE_JACOBIEN = / "ACTUALISE",
                                   / "INITIAL" (par défaut),
                 ◇ INTEGRATION = "AUTO",
                 ◆ GROUP_MA_MAIT = grma,
                 ◆ GROUP_MA_ESCL = grma,
                 ◇ CONTACT_INIT = / "INTERPENETRE" (par défaut),
                                  / "NON",
                                  / "OUI",
                 # Si: equal_to("CONTACT_INIT", 'INTERPENETRE')
                     ◇ DIST_MAXI = float,
             ◆ COULOMB = float,
             ◇ GRAND_GLIS = / "NON" (par défaut),
                            / "OUI",
             ◇ SEUIL_INIT = float,
             ◇ SANS_GROUP_NO_FR = list[grno],
             # Si: exists("SANS_GROUP_NO_FR")
                 ◇ DIRE_EXCL_FROT = list[float],
          ),
    # Si: equal_to("FORMULATION", 'CONTINUE') and not equal_to("FROTTEMENT", 'COULOMB')
        ◆ ZONE = _F(
             ◇ ALGO_CONT = / "LAC",
                           / "PENALISATION",
                           / "STANDARD" (par défaut),
             # Si: equal_to("ALGO_CONT", 'STANDARD')
                 ◇ COEF_CONT = float (défaut: 100.0),
                 ◇ ADAPTATION = / "ADAPT_COEF",
                                / "CYCLAGE" (par défaut),
                                / "NON",
                                / "TOUT",
             # Si: equal_to("ALGO_CONT", 'PENALISATION')
                 ◇ ADAPTATION = / "ADAPT_COEF",
                                / "CYCLAGE" (par défaut),
                                / "NON",
                                / "TOUT",
                 # Si: (equal_to("ADAPTATION", 'ADAPT_COEF')) or (equal_to("ADAPTATION", 'TOUT'))
                     ◇ PENE_MAXI = float,
                     ◇ COEF_PENA_CONT = float (défaut: 100.0),
                 # Si: (equal_to("ADAPTATION", 'CYCLAGE')) or (equal_to("ADAPTATION", 'NON')) or (not exists("ADAPTATION"))
                     ◆ COEF_PENA_CONT = float,
             # Si: equal_to("ALGO_CONT", 'STANDARD') or equal_to("ALGO_CONT", 'PENALISATION')
                 ◇ APPARIEMENT = "MAIT_ESCL",
                 ◇ GROUP_MA_MAIT = grma,
                 ◇ GROUP_MA_ESCL = grma,
                 ◇ NORMALE = / "ESCL",
                             / "MAIT" (par défaut),
                             / "MAIT_ESCL",
                 ◇ VECT_MAIT = / "AUTO" (par défaut),
                               / "FIXE",
                               / "VECT_Y",
                 # Si: equal_to("VECT_MAIT", 'FIXE')
                     ◆ MAIT_FIXE = list[float],
                 # Si: equal_to("VECT_MAIT", 'VECT_Y')
                     ◆ MAIT_VECT_Y = list[float],
                 ◇ VECT_ESCL = / "AUTO" (par défaut),
                               / "FIXE",
                               / "VECT_Y",
                 # Si: equal_to("VECT_ESCL", 'FIXE')
                     ◆ ESCL_FIXE = list[float],
                 # Si: equal_to("VECT_ESCL", 'VECT_Y')
                     ◆ ESCL_VECT_Y = list[float],
                 ◇ TYPE_PROJECTION = / "FIXE",
                                     / "ORTHOGONALE" (par défaut),
                 # Si: equal_to("TYPE_PROJECTION", 'FIXE')
                     ◇ DIRE_APPA = list[float],
                 ◇ DIST_APPA = float (défaut: -1.0),
                 ◇ TOLE_PROJ_EXT = float (défaut: 0.5),
                 ◇ DIST_POUTRE = / "NON" (par défaut),
                                 / "OUI",
                 ◇ DIST_COQUE = / "NON" (par défaut),
                                / "OUI",
                 # Si: equal_to("DIST_POUTRE", 'OUI') or equal_to("DIST_COQUE", 'OUI')
                     ◆ CARA_ELEM = cara_elem,
                 ◇ DIST_MAIT = fonction / formule / nappe,
                 ◇ DIST_ESCL = fonction / formule / nappe,
                 ◇ SANS_GROUP_NO = list[grno],
                 ◇ SANS_GROUP_MA = list[grma],
                 ◇ INTEGRATION = / "AUTO" (par défaut),
                                 / "GAUSS",
                                 / "NCOTES",
                                 / "SIMPSON",
                 # Si: equal_to("INTEGRATION", 'GAUSS')
                     ◇ ORDRE_INT = int (défaut: 3),
                 # Si: equal_to("INTEGRATION", 'SIMPSON')
                     ◇ ORDRE_INT = int (défaut: 1),
                 # Si: equal_to("INTEGRATION", 'NCOTES')
                     ◇ ORDRE_INT = int (défaut: 3),
                 ◇ RESOLUTION = / "NON",
                                / "OUI" (par défaut),
                 # Si: equal_to("RESOLUTION", 'NON')
                     ◇ TOLE_INTERP = float (défaut: 0.0),
                 ◇ CONTACT_INIT = / "INTERPENETRE" (par défaut),
                                  / "NON",
                                  / "OUI",
                 # Si: equal_to("CONTACT_INIT", 'INTERPENETRE')
                     ◇ DIST_MAXI = float,
                 ◇ GLISSIERE = / "NON" (par défaut),
                               / "OUI",
             # Si: equal_to("ALGO_CONT", 'LAC')
                 ◇ APPARIEMENT = "MORTAR",
                 ◇ TYPE_APPA = / "RAPIDE" (par défaut),
                               / "ROBUSTE",
                 ◇ RESI_APPA = float (défaut: 1e-08),
                 ◇ TYPE_JACOBIEN = / "ACTUALISE",
                                   / "INITIAL" (par défaut),
                 ◇ INTEGRATION = "AUTO",
                 ◆ GROUP_MA_MAIT = grma,
                 ◆ GROUP_MA_ESCL = grma,
                 ◇ CONTACT_INIT = / "INTERPENETRE" (par défaut),
                                  / "NON",
                                  / "OUI",
          ),
)

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