Durée : 2h. Notes de cours personnelles (manuscrites, sorties imprimante ou polys), TD et TP autorisés. Calculatrices autorisées. Autres documents (dont livres) interdits. Ce document comporte trois pages. Il est assez long, mais faisable. Il est donc déconseillé de perdre du temps à rajouter des choses que je n'ai pas demandées, comme des affichages ou des vérifications (je parle bien de celles que je n'ai pas demandées).
Remarques : En cas d’informations insuffisantes, vous pouvez faire toute supposition qui vous arrange, à condition qu’elle ne contredise ni ce que j’ai imposé dans le sujet, ni le bon sens.
Le calcul d'une pièce par éléments finis consiste à découper la pièce en petits éléments, en supposant un comportement simplifié (par exemple linéaire) pour chaque élément, permettant d'appréhender le comportement global de la pièce (contraintes internes, déformations). Comme pour l'approximation d'une courbe par des segments de droites, la taille des éléments n'a pas nécessairement à être uniforme.
Bien
que cela fonctionne bien en 3D, plaçons nous uniquement dans
les cas bidimensionnels (dans le plan xy). Un maillage d'une pièce
est son découpage en éléments simples. Nous nous
limiterons aux éléments triangles comme dessiné
ci-contre. Le maillage est défini par deux groupes de
données : les noeuds (numérotés ici de 1 à
9) et les élément (numérotés ici de I à
VIII, en chiffres romains pour bien les différencier sur le
dessin, mais dans la pratique on les numérotera normalement
dans le programme, de 1 à 8). Chaque noeud est défini
par ses deux coordonnées (donc des flottants) X et Y, chaque
élément par les numéros (donc des entiers) des
trois noeuds qui le forment. Bien qu'elle complique le travail du
programmeur, cette organisation simplifie l'utilisation et permet une
meilleure cohérence des données : pour déplacer
le noeud 9, il suffit de changer ses coordonnées, sans rien
modifier dans les éléments I, II, VII et VIII. Les
numéros (de noeud et d'élément) commencent
toujours par 1, et se suivent.
Nous désirons stocker un maillage sous forme d'objets. Voyez ci-après une partie des données correspondant au maillage ci-dessus :
Nous allons (vous allez, plutôt) définir ces différentes classes. Pour commencer, je vous détaille leurs attributs, nous verrons les méthodes après :
Tous ces attributs devront être privés dans leur classe respective.
Question 1 : Définissez la classe « noeud ». Elle comportera les méthodes publiques suivantes :
Vous surchargerez également l'opérateur <<.
Question 2 : Définissez la classe « tabnoeuds ». Elle comportera les méthodes publiques suivantes :
Question 3 : Déclarez la classe « element ». Contrairement aux questions précédentes, vous vous limiterez à la déclaration, c'est à dire que les attributs et entêtes des méthodes doivent être déclarés, mais la définition complète (externe) des méthodes n'a pas à être faite lors de cette épreuve. Par contre vous pourrez vous en servir dans les questions suivantes, si nécessaire. Cette classe comportera les méthodes publiques suivantes :
Vous pourrez également supposer que l'opérateur << a été surchargé.
Question 4 : La résolution d'un problème par éléments finis est simplifiée si l'on est sûr que les éléments sont définis dans le sens trigonométrique. Elle nécessite également la connaissance de la surface des éléments. Vous allez donc maintenant définir (complètement) les deux méthodes de la classe element. Dans cette question, pour simplifier, vous supposerez que les coordonnées des noeuds sont définies dans un tabnoeuds nommé N et qu'il soit accessible directement sans aucune déclaration (c'est ce qu'on appelle une variable globale, mais nous n'avons pas vu cela en cours).
Question 5 : Définissez la classe « tabelements ». Vous n'y détaillerez qu'une seule méthode publique, nommée « connexions » qui reçoive en argument entier un numéro de noeud, et retourne le nombre d'éléments qui contiennent ce noeud. Cette méthode sera très utile lorsque l'on cherchera à calculer la somme des forces appliquée à un noeud (je vous en dispense pour cette fois-ci).
Question 6 : Cette question ne nécessite que quelques phrases en français, pas de programme. Soit la déclaration :
class maillage : public tabnoeuds, public tabelements {};
Ceci signifie que la classe maillage hérite de la classe tabnoeuds ET de la classe tabelements. S'il n'y a rien entre les accolades, que pensez vous que l'on puisse faire avec cette classe ? Quelle(s) modification(s) aux questions précédentes proposeriez-vous pour améliorer l'utilisation de la classe maillage ?
Remarques : Un certain nombre de problèmes géométriques se résolvent beaucoup plus simplement avec les vecteurs (vous avez le droit de créer une fonction « prod_vect ») :
pour quelques pistes de solution, cliquez ici, pour retourner au sommaire des sujets d'examen, cliquez là
Patrick
TRAU, ULP - IPST
janvier 05