Les blocs ========== Les blocs se présentent sous la forme d'un regroupement de mots-clés. Ils permettent deux choses : * traduire dans le catalogue de la commande des règles logiques portant sur la valeur ou le type du contenu des mots clé simples ; alors que les conditions sous l'argument regles ne portent que sur la présence ou l’absence des mots clés. On peut donc regrouper des mots clés ensemble ou leur affecter des attributs (valeur par défaut…) particuliers sous certaines conditions. * regrouper les mots clés par familles pour plus de clarté dans AsterStudy. Ces mots-clés ne seront alors visibles à l'utilisateur que lorsque la condition sera remplie. **Exemples :** .. code-block:: text SOLVEUR =FACT(statut='d', METHODE=SIMP(statut='f',typ='TXM',defaut="MULT_FRONT", into=("MULT_FRONT","LDLT") ), b_mult_front =BLOC(condition = "equal_to(‘METHODE’, 'MULT_FRONT')", fr=tr("Paramètres de la méthode multi frontale"), RENUM=SIMP(statut='f',typ='TXM',defaut="MDA", into=("MD","MDA","METIS") ), ), b_ldlt =BLOC(condition = "equal_to(‘METHODE’, 'LDLT')", fr=tr("Paramètres de la méthode LDLT"), RENUM=SIMP( statut='f',typ='TXM',defaut="RCMK", into=("RCMK","SANS") ), TAILLE=SIMP(statut='f',typ='R',defaut= 400. ), ), ), Les blocs sont nommés par le développeur. Leur nom doit commencer par « b_». Dans l’exemple, si METHODEvaut MULT_FRONT, alors le mot clé simple facultatif RENUMapparaîtra avec trois valeurs possibles déclarées sous into. Si par contre METHODEvaut LDLT, le même mot clé sera présent mais avec deux valeurs possibles différentes ; de plus il sera alors possible de renseigner le mot clé simple TAILLE. Ces mots clés et leurs attributs respectifs n’apparaîtront dans AsterStudy qu’après que l’utilisateur aura affecté une valeur au mot clé simple METHODE. .. code-block:: text b_nomdubloc=BLOC( condition="exists(‘MOTCLE1’) and is_type(‘MOTCLE2’)==grma", … On montre sur cet exemple que la condition peut être multiple (articulée par or / and) et peut porter aussi sur la présence du mot clé (exists(‘MOTCLE1’)) ou le type de ce qu’il contient (is_type(‘MOTCLE2’)== grma). La condition est une expression Python (fournie sous forme d'une chaîne de caractères) qui est évaluée au niveau immédiatement supérieur au bloc lui-même. Les conditions de blocs ne doivent pas manipuler les mots-clés directement mais font appel à des fonctions qui s’appuient sur le nom des mots-clés. Ces fonctions sont les suivantes: * exists(‘MOTCLE’)estvérifiée si MOTCLE existe, c’est à dire a été renseigné par l’utilisateur. Exemple: exists(‘TYPE_MATR_TANG’). * is_in(‘MOTCLE’, VALEURS) est vérifiée si l'intersection entre la ou les valeurs de MOTCLEet VALEURSest non vide. Exemple: is_in("CRIT_COMP", ('EQ','NE'). * equal_to(‘MOTCLE’, VALEUR)est strictement identique à is_inmais plus naturel quand MOTCLEet VALEURne contiennentqu’une valeur. Exemple: equal_to(‘METHODE’, ‘MUMPS’). * is_type(‘MOTCLE’)retourne le type deMOTCLE. Exemple: is_type(‘FONCTION’) in (fonction, fonction_c). * value(‘MOTCLE’, default=’’)retourne la valeur de MOTCLEs’il existe, sinon retourne la valeur defaultqui est une chaîne de caractères vide par défaut. Exemple: value("RELATION").startswith('META_'). * length(‘MOTCLE’)retourne le nombre de valeurs fourniespourMOTCLE. Retourne 0 si on ne sait pas calculer la longueur de value(‘MOTCLE’)ou s’il n’existe pas. Exemple: length(‘FREQ’) > 2. * less_than(‘MOTCLE’, VALEUR)est vérifiée si la valeur deMOTCLEest inférieureVALEUR. Retourne Falsesi MOTCLEn’existe pas. Exemple: less_than(‘COEF_MULT’, 0). * greater_than(‘MOTCLE’, VALEUR)est vérifiée si la valeur deMOTCLEest supérieureVALEUR. Retourne Falsesi MOTCLEn’existe pas. Exemple: greater_than(‘COEF_MULT’, 0). **Attention** **:** *Les mots clés manipulés dans la* *conditiondu* *BLOCdoivent être au même niveau que le bloc lui-même dans l’arborescence définie par les mots clés facteurs et les blocs. Plusieurs mots clés* *BLOCpeuvent être présents dans un même catalogue, à la racine principale de la commande, sous des mots clés facteurs ou dans d’autres blocs. Dans l’exemple ci-dessus, les mots clés simples* *RENUMet* *TAILLE_BLOC sont au même niveau, inférieur à celui de* *METHODE,* *b_mult_frontet* *b_ldlt, lui même inférieur à celui du mot clé facteur* *SOLVEUR. Les conditions testées dans les deux blocs portent ainsi uniquement sur le mot clé simple* *METHODEde niveau immédiatement supérieur aux blocs eux-mêmes.* *Il faut faire attention aux conflits possibles lorsqu’un même mot clé est présent sous deux blocs différents. Les conditions d’activation des deux blocs doivent alors s’exclure. C’est le cas de l’exemple ci-dessus avec le mot clé simple* *RENUM: il ne peut y avoir conflit puisque les* *deuxconditions* *METHODE=’MULT_FRONT’* *et* *METHODE=’LDLT’* *ne peuvent être simultanément satisfaites.Dans un cas où les conditions seraient satisfaites au même moment, une erreur se produirait à l'exécution.* .. _RefHeading__3197_1229290806: