Correction

Après avoir lu l'intégralité des consignes, appliquons l'analyse descendante : on doit tracer l'évolution d'un CHAMPOIN le long d'un axe horizontal. La prise en compte de cet axe découpe naturellement la surface rectangulaire initiale en deux surfaces rectangulaires, de part et d'autre de l'axe médian horizontal. Les cotés de chaque rectangle sont entièrement décrits dès que les points situés aux extrémités des segments et le découpage du coté sont indiqués. Le croquis réalisé sur papier servira de support à la réalisation du jeu de données GIBIANE.

Paramètres généraux : La première des choses à faire dans le jeu de données GIBIANE est d'indiquer à CAST3M à l'aide de l'opérateur OPTI -- comme OPTION -- un certain nombre de variables d'environnement : la dimension de l'espace de travail, le type d'éléments servant à la réalisation du maillage, etc.. Dans le cas présent, nous sommes en dimension 2 et souhaitons utiliser de préférence des quadrangles à quatre noeuds :

OPTI DIME 2 ELEM QUA4 ;

Variables globales : L'analyse sur papier a permis d'identifier un certain nombre de variables globales qu'on initialise :

*
* Variables globales
*
* LX0 : Dimension suivant x
* LY0 : Dimension suivant y
* XMIN,YMIN : Coordonnées du coin inférieur
* NX0 : Nombre de points suivant x
* NY0 : Nombre de points suivant y
*
LX0  = 2.D0 ; LY0 = 1.D0 ;
XMIN = 0.D0 ; YMIN = 0.D0 ;
NX0  = 3 ; NY0 = 5 ;
XMAX = XMIN + LX0 ; YMAX = YMIN + LY0 ;
YMID = YMAX + YMIN / 2.D0 ;

Comme GIBIANE est un langage de commande, on peut tout paramétrer : longueur, nombre de points, coordonnées, etc.. L'intérêt est évident : pour la mise au point du jeu de données, inutile de générer de gros maillages. C'est pourquoi dans la programmation ci-dessus, NX0 et NY0 sont des entiers raisonnables. Ils sont différents et premier entre eux de façon à détecter d'éventuelles erreurs de codage. Après la mise au point, il suffira de modifier ces valeurs pour générer des maillages plus fin. Les flottants sont initialisés en double précision en utilisant la même syntaxe que le Fortran. On peut très bien se passer des D0 et coder "LX0=2." mais autant garder de bonnes (vieilles ?) habitudes.

Notez que la différence entre un entier et un flottant est l'absence ou la présence d'un point après les valeurs numériques. Faites-y attention surtout si vous effectuez des divisions : la division entre deux entiers -- ou division entière -- peut provoquer quelques surprises :

* Re : Nombre de Reynolds
Re = 1000 ;
IRe = 1 / Re ;
LIST IRe ;
La division entière de 1 par 1000 donne 0 au lieu de $ 10^{-3}$ qui est manifestement le résultat attendu. On s'étonnera alors à l'issue du calcul d'un manque de viscosité dans l'écoulement !

Enfin, la variable YMID contient bien la mi-hauteur : une phrase GIBIANE est décodée de gauche à droite sans règle de priorité. Les deux expressions suivantes sont donc équivalentes :

YMID = (YMAX + YMIN) / 2.D0 ;
YMID = YMAX + YMIN / 2.D0 ;
Usez à bon escient des parenthèses. Pour calculer le rayon les expressions suivantes ne donnent pas le même résultat. Seules les deux premières sont justes :
R0VRAI = X*X + (Y*Y) ** 0.5 ;
R1VRAI = ((X*X) + (Y*Y)) ** 0.5 ;
R0FAUX = X*X + Y*Y ** 0.5 ;
R1FAUX = (X*X + Y*Y) ** 0.5 ;

Points, droites et surfaces : L'analyse descendante ayant permis d'identifier tous les éléments du maillage, nous allons successivement créer les points, les segments et les surfaces.

Pour créer un point, il suffit d'indiquer ses coordonnées.

*
* Création des points
P1 = XMIN YMIN ;
P2 = XMAX YMIN ;
P3 = XMAX YMID ;
P4 = XMAX YMAX ;
P5 = XMIN YMAX ;
P6 = XMIN YMID ;

Pour créer les segments de droite, on utilise l'opérateur DROI. Cet opérateur permet de découper le segment de droite entre deux points en différentes parties de même longueur ou non. Si on transmet en argument de l'opérateur un point dit point initial, le nombre de segment $ ns$ et le point dit final, le segment de droite entre les deux points précisés sera découpé en $ ns$ segments d'égale longueur. Des options -- faire "INFO DROI ;" pour consulter en ligne la notice complète de l'opérateur -- permettent d'avoir un découpage non régulier du segment -- options DINI et DFIN.

*
* Création des droites
P1P2 = P1 DROI NX0 P2 ;
P2P3 = P2 DROI NY0 P3 ;
P3P4 = P3 DROI NY0 P4 ;
P4P5 = P4 DROI NX0 P5 ;
P5P6 = P5 DROI NY0 P6 ;
P6P1 = P6 DROI NY0 P1 ;
P3P6 = P3 DROI NX0 P6 ;
P6P3 = INVE P3P6 ;

On choisit de décrire les frontières dans le sens trigonométrique. La ligne P3P6 commune aux deux sous-surfaces est créée avec DROI. La description de cette ligne dans le sens inverse est créée avec INVE. Si on utilisait à nouveau l'opérateur DROI pour créer P6P3, les points intermédiaires situés entre les points P3 et P6 auraient été dupliqués. Il aurait alors fallu les fusionner avec ceux de la ligne P3P6 via l'opérateur ELIM. L'utilisation de l'opérateur ELIM est délicate dans certaines situations et donc fortement déconseillée dans un premier temps. Une application rigoureuse de la méthode de construction de maillage par analyse descendante / réalisation ascendante permet de s'affranchir de son usage, au moins en 2D, à condition d'utiliser l'opérateur INVE.

Le domaine étant rectangulaire, nous pouvons utiliser un pavage régulier du domaine par des éléments quadrangulaires. Le dallage de chaque partie est réalisé par l'opérateur DALL. On fournit à cet opérateur les quatre cotés du domaine à daller. Les cotés opposés doivent être découpés de la même façon, c'est à dire avec le même nombre de points. Même si dans certains cas les opérateurs de maillage rattrapent quelques bévues, il est conseillé de décrire les droites dans le même sens.

*
* Création des surfaces
SURF1 = DALL P1P2 P2P3 P3P6 P6P1 ;
SURF2 = DALL P6P3 P3P4 P4P5 P5P6 ;
SURF0 = SURF1 ET SURF2 ;

Pour réunir les deux sous-domaines on utilise l'opérateur ET. Cette opérateur permet de fusionner les objets de même type lorsque cela a un sens.

On pourrait mailler, par exemple, la surface SURF2 en utilisant des triangles. Pour cela, il suffit de changer le type d'élément par défaut après avoir créé la première surface SURF1 :

SURF1 = DALL P1P2 P2P3 P3P6 P6P1 ;
OPTI ELEM TRI3 ;
SURF2 = DALL P6P3 P3P4 P4P5 P5P6 ;
SURF0 = SURF1 ET SURF2 ;

D'autres opérateurs permettent de mailler une surface. Ainsi, l'opérateur SURF maille l'intérieur d'un contour fermé. Le maillage de SURF1 à l'aide de l'opérateur SURF est obtenu par :

CONT1 = P1P2 ET P2P3 ET P3P6 ET P6P1 ;
SURF1 = SURF CONT1 ;

L'inconvénient des mailleurs automatiques, comme SURF, est qu'on contrôle difficilement la forme des mailles et leurs répartitions. En particulier, les mailles peuvent être déformées ; le maillage généré ne pas respecter certaines contraintes tant géométriques (symétrie, ... ) que physiques (alignement avec l'écoulement, ... ).

Pour tracer le maillage obtenu, il suffit d'utiliser l'opérateur TRAC. Un autre opérateur de maillage intéressant est l'opérateur CONT qui permet d'obtenir le contour d'un maillage.

TRAC SURF0 ;
CONT0 = CONT SURF0 ;
TRAC CONT0 ;

Fonction des coordonnées : Le maillage étant créé, nous allons initialiser un CHAMPOIN contenant une fonction bilinéaire dépendant des coordonnées de chacun des points du maillage.

L'opérateur COOR permet de récupérer les coordonnées des sommets -- dans des objets de type CHAMPOIN -- du maillage indiqué. Les opérateurs algébriques manipulent les CHAMPOINs comme des vecteurs : les opérations y sont faites selon les règles indiquées dans les notices, point par point, sans intervention particulière de l'utilisateur. En particulier, connaître le numéro d'un point du maillage ne sert à rien.

*
* Création d'un CHAMPOIN contenant la fonction z = ax + by + c
A1 = 2.D0 ; B1 = 3.D0 ; C0 = 5.D0 ;
X0 Y0 = COOR SURF0 ;
Z0 = A1*X0 + (B1*Y0) + C0 ;
TRAC Z0 SURF0 CONT0 ;

Là encore, les parenthèses sont importantes afin que l'évaluation de la fonction soit correcte du fait des règles de décodage d'une phrase GIBIANE -- de gauche à droite et sans règle de priorité en l'absence de parenthèses. Le tracé de la fonction obtenue est réalisé avec TRAC, les isovaleurs étant automatiquement calculées. De nombreuses options permettent de modifier le rendu du tracé. Voir pour cela la notice des opérateurs TRAC, sans oublier celle d'OPTI.

On peut noter la présence du contour CONT0 parmi les arguments de TRAC. La présence d'un deuxième maillage permet de supprimer le tracé du maillage au-dessus des isovaleurs du champ représenté. Essayez sans le contour CONT0 pour apprécier la différence !

Evolution le long de la ligne médiane : L'opérateur EVOL permet d'associer les valeurs d'un CHAMPOIN aux abscisses curvilignes des points d'une ligne brisée passant par certains des points où le CHAMPOIN est défini. L'objet créé est un objet EVOLUTION qui peut être tracé à l'aide de la directive de dessin DESS.

*
* Evolution de z = ax + by + c le long de l'axe médian
ZP6P3 = EVOL CHPO Z0 P6P3 ;
DESS ZP6P3 ;

De nombreuses options permettent de modifier le rendu du tracé. Voir pour cela la notice de DESS.

traduction 2003-11-04