Correction

Maillage : Par rapport à la fois dernière, la principale difficulté provient de la présence d'une partie semi-circulaire. Deux opérateurs permettent de réaliser un arc de cercle : ce sont les opérateurs CERC et CER3.

La lecture de la notice indique qu'ils nécessitent soit trois points de l'arc de cercle (CER3), soit deux points de l'arc de cercle et le centre du cercle (CERC). Dans ce corrigé, nous utiliserons CER3.

La partie inférieure du maillage sera construite en trois partie, la partie centrale étant réalisée à l'aide de l'opérateur CER3.

OPTI DIME 2 ELEM QUA4 ;
*
* Variables globales
*
* LX0 : Dimension suivant x
* LY0 : Dimension suivant y
* XMIN,YMIN : Coordonnées du coin inférieur gauche
* NX0 : Nombre de points suivant x
* NY0 : Nombre de points suivant y
*
R0 = 1.D0 ; LX0  = 6.D0 * R0 ; LY0 = 5.D0 * R0 ;
XMIN = LX0 / 2.D0 * -1.D0 ; YMIN = 0.D0 ;
XMAX = LX0 / 2.D0 ; YMAX = LY0 ;
NX1 = 4 ; NX2 = 6 ; NX3 = NX1 + NX1 + NX2 ; NY0 = 5 ;
*
* Création des points
P1 = XMIN YMIN ;
P2 = (R0 * -1.) YMIN ;
P3 = 0.D0 R0   ;
P4 = R0   YMIN ;
P5 = XMAX YMIN ;
P6 = XMAX YMAX ;
P7 = XMIN YMAX ;
*
* Création des droites
P1P2 = P1 DROI NX1 P2 ;
P2P4 = CER3 NX2 P2 P3 P4  ;
P4P5 = P4 DROI NX1 P5 ;
P5P6 = P5 DROI NY0 P6 ;
P6P7 = P6 DROI NX3 P7 ;
P7P1 = P7 DROI NY0 P1 ;
*
* Création du maillage
SURF0 = DALL (P1P2 ET P2P4 ET P4P5) P5P6 P6P7 P7P1 ;
CONT0 = CONT SURF0 ;

Modèle NAVIER_STOKES : L'objet modèle, créé par l'opérateur MODE, permet de transmettre aux opérateurs de CAST3M un ensemble d'informations nécessaires au contrôle des données. En mécanique des fluides, le maillage à transmettre à l'opérateur MODE est un maillage constitué d'éléments dits QUAF -- comme QUAdratique pour les Fluides. En pratique, le maillage de QUAF est obtenu à partir du maillage constitué des éléments classiques de la mécanique -- TRI3, QUA4, TRI6 et/ou QUA8 en 2D -- à l'aide de l'opérateur CHANger. Il faut donc systématiquement coder les phrases GIBIANE suivantes après avoir construit le maillage :

*
* Création du modèle NAVIER-STOKES
DISCR = 'LINE' ;
SURF1 = CHAN SURF0 QUAF ;
MOD1  = MODE SURF1 'NAVIER_STOKES' DISCR ;

La variable DISCR identifie le type d'éléments souhaité pour discrétiser les différentes inconnues des équations de Navier-Stokes. Avec LINE, on choisit un élément linéaire en vitesse ; MACRO aurait permis, dans le cadre de la résolution des équations de Navier-Stokes pour un écoulement incompressible, d'éviter l'apparition de modes de pression parasites tout en conservant une discrétisation linéaire de la vitesse ; QUAF indiquerait un élément quadratique pour l'inconnue de vitesse. Il est à noter que dans le cas d'une discrétisation linéaire LINE, certains points du maillage SURF1 transmis à l'opérateur ne sont plus utilisés par la suite.

Pour l'instant, la discrétisation de la pression n'est pas indiqué dans le modèle. Nous verrons, qu'à nouveau, on dispose de trois possibilité : CENTRE et CENTREP1 conduisent respectivement à une représentation constante et linéaire de la pression sur chaque élément du maillage, la pression étant discontinue à la face commune de deux éléments adjacents ; MSOMMET enfin permet une discrétisation linéaire et continue de la pression sur le maillage.

Nous verrons dans un prochain TP que tous les couples en vitesse/pression ne sont pas possibles, le plus souvent pour des questions de stabilité/compatibilité ou de précision.

Pour en finir avec la discrétisation des champs, signalons que tous les champs autre que la pression -- en particulier la température -- sont discrétisés comme la vitesse. Lorsqu'on spécifie l'espace de discrétisation de la vitesse, on spécifie donc aussi la plupart des espaces discrets (tous sauf la pression).

Les maillages pour la mécanique des fluides : En créant l'objet modèle Navier-Stokes, des maillages ont été créés. Ils sont accessibles par l'opérateur DOMA dont nous allons ici préciser les options les plus utilisées. La syntaxe générale de cet opérateur est :

RES1 = DOMA MOD1 MOT1 ;
MOT1 désigne le nom de l'option retenue.

Si MOT1='MAILLAGE', l'objet RES1 contient le maillage. Dans le cas ou DISCR='LINE', le maillage RES1 a la même finesse que le maillage initial SURF0. Nous verrons que lorsque DISCR='MACRO', le maillage est deux fois plus fin dans chacune des directions suite à un redécoupage du maillage initial SURF0. C'est pourquoi il est prudent de considérer que le maillage au sens classique est celui obtenu via l'option 'MAILLAGE' de DOMA et non pas celui créé initialement par l'utilisateur. Plus généralement, il faut écraser les maillages initiaux -- ceux créés avant la construction du modèle -- par ceux obtenus via DOMA.

Les maillages de classe de points d'un élément -- c'est à dire les points situés au centre de gravité de l'élément, au centre de gravité des faces ou aux sommets de l'élément -- peuvent être nommés en utilisant les options 'CENTRE', 'FACE' et 'SOMMET' de DOMA. Ces maillages sont constitués d'éléments de type POI1 -- nom donné dans CAST3M à l'élément constitué d'un point. Pour s'en convaincre, il suffit de les tracer. Par exemple :

RES1 = DOMA MOD1 'CENTRE' ;
TRAC RES1 ;

Création et manipulation d'un vecteur : Nous avons créé durant le précédant TP un CHAMPOIN qui contenait pour chaque point du maillage une fonction bilinéaire de ses coordonnées. Pour stocker les vecteurs, par exemple la vitesse du fluide, nous allons créer un CHAMPOIN à plusieurs composantes.

Pour cela, nous allons créer un CHAMPOIN pour chacune des composantes de la vitesse. L'opérateur ET permettra de fusionner les deux CHAMPOINs en un seul. Durant cette fusion, nous ne voulons pas que les valeurs de chacune des composantes en un point soient additionnées. Afin d'éviter cette sommation, il existe dans les CHAMPOINs un identifiant appelé « nom de la composante ». Par défaut, le nom de la composante d'un CHAMPOIN est SCAL. Par convention, le nom de la première composante d'un vecteur (resp. deuxième et troisième) est UX (resp. UY et UZ). L'opérateur qui permet de modifier le nom de la composante d'un CHAMPOIN est NOMC (voir aussi EXCO).

Dans l'exemple suivant, nous allons créer un champ de vitesse dont la composante suivant l'axe $ x$ (resp. $ y$) est $ -y$ (resp. $ x$) :

MAIL0 = DOMA MOD1 'MAILLAGE' ;
X0 Y0 = COOR MAIL0 ;
UX0 = NOMC 'UX' (-1. * Y0) ;
UY0 = NOMC 'UY' X0 ;
V0  = UX0 ET UY0 ;

Pour tracer V0, il faut transformer le CHAMPOIN à deux composantes en un objet VECTEUR :

VECT1 = VECT 0.5 V0 'UX' 'UY' ;
TRAC VECT1 MAIL0 'TITR' 'Vitesse' ;

Les paramètres de l'opérateur VECT sont un coefficient de normalisation qui permet d'ajuster la longueur des flèches au moment du tracé, le CHAMPOIN à transformer en VECTEUR et la liste des noms de composantes du CHAMPOIN.

Dans le cas d'un CHAMPOIN constant par zone, l'opérateur KCHT permet de limiter le nombre de phrases GIBIANE. Le vecteur constant (0.2 ; 0.5) défini aux sommets du maillage est créé par

VS0 = KCHT MOD1 'VECT' 'SOMMET' (0.2 0.5) ;

L'opérateur KCHT permet aussi d'initialiser des CHAMPOINs définis sur les classes de points 'CENTRE' et 'FACE'. Ces CHAMPOINs peuvent aussi être des CHAMPOINs scalaires à une composante. Dans ce cas on remplacera le mot clef 'VECT' par 'SCAL'. Ainsi, un champ constant sur le domaine et valant 5. sur chaque élément est créé par :

SC0 = KCHT MOD1 'SCAL' 'CENTRE' 5. ;

Cet opérateur a deux autres grandes vertus :

$ \triangleright$
Il permet, sur le plan informatique, de gagner en rapidité en imposant le pointeur du maillage sous-tendant le modèle NAVIER_STOKES. Ainsi les tests internes aux opérateurs sont simplifiés. A l'usage, vous rencontrerez des messages d'erreur concernant des problèmes de pointeur. Pour un CHAMPOIN scalaire défini aux sommets du maillage sur lequel le modèle MOD1 a été construit on impose le pointeur de maillage par :
SS0 = KCHT MOD1 'SCAL' 'SOMMET' SS0 ;

$ \triangleright$
Il permet de surcharger les valeurs d'un CHAMPOIN par celles contenues dans un deuxième CHAMPOIN. Ce dernier peut n'être défini que sur une partie du maillage. C'est ainsi qu'on pourra très simplement modifier les conditions aux limites lorsqu'elles varient au cours du temps sur une partie de la frontière du domaine.
CL1 = KCHT MOD1 'SCAL' 'SOMMET' 0. CHP1 CHP2 ;

avec en plus une initialisation à $ 0.$ de CL1 sur l'ensemble des points, CHPi étant les CHAMPOINs préalablement construits par l'utilisateur.

Projection de CHAMPOIN : supports CENTRE et SOMMET. Nous verrons en cours que le support d'un CHAMPOIN caractérise l'espace vectoriel discret auquel appartient le champ discrétisé. Passer du support CENTRE au support SOMMET -- et inversement -- c'est faire une projection d'un espace dans un autre.

Un CHAMPOIN CENTRE permet de «stocker» un champ par l'intermédiaire de ses valeurs moyennes en chaque élément du maillage. Un CHAMPOIN SOMMET permet d'évaluer un champ en n'importe quel point d'un élément en interpolant les valeurs du champ exprimées aux sommets de l'élément tout en assurant la continuité de l'approximation à la traversée de la frontière entre deux éléments. Pour les éléments associés au modèle NAVIER_STOKES, les fonctions d'interpolation sont linéaires -- discrétisations LINE et MACRO -- ou quadratiques -- discrétisation QUAF.

Il peut être intéressant de passer des centres aux sommets et inversement : pour initialiser une donnée, pour du post-traitement, etc.

Pour illustrer ces manipulations, nous allons calculer la norme du champ de vitesse crée précédemment, calculer sa moyenne par élément -- passage SOMMETs $ \rightarrow$ CENTREs -- ; revenir aux SOMMETs ; comparer la norme initiale à la norme obtenue après le passage SOMMET $ \rightarrow$ CENTRE $ \rightarrow$ SOMMET.

MOT1 = 'MOTS' 'UX' 'UY' ;
NORM0 = ('PSCA' V0 V0 MOT1 MOT1) '**' 0.5 ;
NORM0 = 'KCHT' MOD1 'SCAL' 'SOMMET' NORM0 ;
NC0 = 'NOEL' MOD1 NORM0 ;
NS0 = 'ELNO' MOD1 NC0 ;
DIFF1 = NORM0 '-' NS0 / NORM0 ;
'TRAC' DIFF1 MAIL0
       'TITR' 'Erreur relative : r et ELNO(NOEL(r))' ;
Si à l'oeil nu on ne constate des différences qu'au voisinage des éléments les plus déformés, le tracé de l'erreur relative montre aussi des différences au bord du domaine. Dans le cas de fonctions moins monotones que celle utilisée ici -- par exemple une sinusoïde -- un enchaînement de ELNO/NOEL lisse la fonction, rabote les extrema.

Lecture et écriture sur fichier : On peut sauvegarder sur disque les objets créés -- en particulier les résultats de calcul -- afin de les utiliser plus tard.

Une utilisation possible des fonctionnalités du langage de commande GIBIANE consiste à séparer physiquement un jeu de données en trois fichiers d'extension dgibi. Le premier construira le maillage et le sauvegardera sur disque. Dans le deuxième, on relira un des maillages et on codera la modélisation physique et numérique du problème traité ainsi que sa résolution. Les calculs y seront sauvés sur disque. Dans un troisième fichier enfin, on réalisera le post-traitement.

Cette stratégie permet la mise au point du post-traitement à l'aide des résultats obtenus sur un maillage grossier pendant qu'un gros calcul tourne par ailleurs. De plus on évite de dupliquer les modèles physiques et numériques réalisés.

Il est possible de ne sauvegarder qu'une partie des objets présents en mémoire. Cela permet, soit disant, d'économiser de l'espace disque. A l'usage, on s'aperçoit qu'il vaut mieux sauvegarder l'ensemble des objets. En effet, dans le cas d'une sauvegarde partielle, l'expérience montre qu'il arrive assez souvent de souhaiter se servir après coup d'un des objets que l'on n'a pas sauvé. De plus, la différences de taille de fichiers entre des sauvegardes partielle et totale n'est pas très grande. A cause des dépendances entre objets on sauve bien plus que ce que l'utilisateur spécifie. Nous ne présentons donc ici que la sauvegarde complète.

Les opérateurs SAUV et REST réalisent les opérations d'écriture et de lecture sur disque. Au préalable, les fichiers auront été précisés dans les options, par l'opérateur OPTI. Le nom du fichier doit être l'adresse absolue. Il ne faut pas mettre d'adresse relative. Pour sauver :

'OPTI' 'SAUV' '/chemin/monfichierdesauvegarde' ;
 ...
'SAUV' ;
Pour lire :
'OPTI' 'REST' '/chemin/monfichierdesauvegarde' ;
 ...
'REST' ;
Le fait de mettre le nom du fichier entre quote est important : c'est le seul moyen de faire respecter la casse -- distinction entre majuscule et minuscule -- ce qui est vital si on souhaite que le chemin vers le fichier soit reconnu.

Pour les calculs dépendant du temps, la sauvegarde incrémentale permet de ne sauver que les objets dont les pointeurs ont été modifiés depuis la dernière sauvegarde. Consultez la notice pour de plus amples informations.

traduction 2003-11-04