SESSION 2022 (@ PSISIN
CONCOURS
COMMUN
INP
ÉPREUVE MUTUALISÉE AVEC E3A-POLYTECH
ÉPREUVE SPÉCIFIQUE - FILIÈRE PSI
INFORMATIQUE
Durée : 3 heures
N.B. : le candidat attachera la plus grande importance à la clarté, à la
précision et à la concision de la rédaction.
Si un candidat est amené à repérer ce qui peut lui sembler être une erreur
d'énoncé, il le signalera sur sa copie
et devra poursuivre sa composition en expliquant les raisons des initiatives
qu'il a été amené à prendre.
RAPPEL DES CONSIGNES
-_ Utiliser uniquement un Stylo noir ou bleu foncé non effaçable pour la
rédaction de votre composition ; d'autres
couleurs, excepté le vert, peuvent être utilisées, mais exclusivement pour les
schémas et la mise en
évidence des résultats.
-< Ne pas utiliser de correcteur. -_ Écrire le mot FIN à la fin de votre composition. Les calculatrices sont interdites. Le sujet est composé de quatre parties. L'épreuve est à traiter en langage Python. La syntaxe de Python est rappelée en Annexe en fin de sujet. Les différents algorithmes doivent être rendus dans leur forme définitive sur le Document Réponse dans l'espace réservé à cet effet en respectant les éléments de syntaxe du langage (les brouillons ne sont pas acceptés). La réponse ne doit pas se limiter à la rédaction de l'algorithme sans explication, les pro- grammes doivent être expliqués et commentés. Énoncé : 16 pages Document Réponse et Annexe : 10 pages Seul le Document Réponse doit être rendu dans son intégralité. 1/16 Assemblage et déformation de pièces automobiles Introduction L'objectif de cette étude est la modélisation du comportement géométrique de pièces défor- mables par la méthode des éléments finis. La partie | déterminera le posage des pièces et sera illustrée par un modèle 2 dimensions. La partie Il permettra d'établir le maillage d'une surface plane pour pouvoir appliquer dans la partie III la méthode de résolution par éléments finis. La partie IV présentera la synthèse de l'étude et une application sur le cas d'une por- tière et de la caisse d'un véhicule. Dans tout le sujet, il sera supposé que les modules python numpy, matplotlib.pyplot sont déjà importés dans le programme. Les fonctions et méthodes autorisées sont indiquées dans l'annexe à la fin du Document Réponse. De manière générale, l'utilisation des méthodes autres que les méthodes append et remove ne sera pas acceptée. L'utilisation des fonctions min OÙ max Sera proscrite. Partie | - Posage des pièces 1.1 - Présentation Le posage consiste à mettre deux pièces en contact. Les pièces n'étant jamais parfaites, le nombre des points en contact n'est jamais infini comme cela pourrait être le cas lorsque l'on pose 2 surfaces parfaitement planes l'une sur l'autre. Ces points de contacts ponctuels doivent être identifiés car ils peuvent être à l'origine de variations géométriques et d'efforts particuliers. Contact parfait Contact réel Figure 1 - Illustration du problème de posage sur des surfaces réelles Pour illustrer la question du posage, on travaille en 2 dimensions et on se limite au posage d'une pièce sur une autre. Les géométries ont été discrétisées en un nombre fini de points. Un prétraitement, qui ne sera pas abordé ici, permet d'extraire les coordonnées des points concernés par le posage. En 2 dimensions, pour chaque point d'abscisse x, = k Ax, est asso- ciée son altitude z, où Ax correspond à une longueur élémentaire associée à la discrétisation spatiale. Ces données sont stockées dans une liste P de N nombres dont l'indice k des élé- ments permet de définir l'abscisse des points et les valeurs leur altitude. Ainsi, x; = k Ax et zx = P[k] où 0 < k < N. La variable Delta_x sera associée à la longueur élémentaire Ax et sera supposée déjà définie. Il sera inutile de la passer en argument des différentes fonctions. 2116 Z Pièce 1 Z Pièce 2 © N Co : 4 LR ai N Figure 2 - Exemple de géométries discrètes associées à des pièces en 2D Par exemple, sur la figure 2, on associe à la pièce de gauche la liste P1 =[2.,3.,2.,3.]. Q1. Donner la liste P2 associée à la pièce 2 sur la figure 2. Pour répondre au problème du posage, il faut commencer par retourner la pièce en effec- tuant une rotation autour de l'axe (O, ÿ), pour que les points soient bien en vis-à-vis. Q2. Écrire une fonction retourne(Ls) qui prend une liste Ls de nombres en argument et qui renvoie une nouvelle liste dont l'ordre des éléments est inversé et le signe de chaque élément lui aussi inversé. Par exemple, retourne([1.,2.,3.]) renverra [---3.,-2.,-1.]. |? Figure 3 - Exemple de posages entre 2 pièces. À gauche : posage aux points 1 et 3. À droite : posage aux points 1 et 2 avec collision en 3 On appellera posage optimal, le posage qui vérifie les deux contraintes suivantes : °< le minimum des distances algébriques entre les points en vis-à-vis doit être positif pour valider le fait qu'il n'y ait pas de collision, °< le maximum des distances entre les points en vis-à-vis doit être le plus petit possible. Q3. À partir des deux pièces de la figure 3, représenter la pièce 2 associée au posage (contact) aux points 0 et 1, puis la pièce 2 associée au posage aux points 2 et 3. Indiquer dans chaque cas si le posage génère des collisions ou non. Pour caractériser le posage, la méthode mise en oeuvre consiste à repérer la position des points du maillage de la deuxième pièce par rapport à ceux de la première pièce. On se placera dans le cadre d'une pièce faiblement inclinée (sur la figure 4, l'inclinaison est am- plifiée). Pour chacune des deux pièces, on associe une droite passant par les 2 points de contacts. Les deux droites ainsi définies seront coïncidentes lors du contact entre les deux pièces comme l'illustre la figure 4. 3/16 Pièce 2 droites coïncidentes Figure 4 - Exemple de posage associé à deux autres pièces Pièce 1 On considère le posage sur les points n et p. On note 7,, et z,, les altitudes des points de contact sur la pièce référence, et z,, et z,, les altitudes des points de contact sur la pièce à poser. L'équation d'une droite qui passe par deux points de contact ayant pour coordonnées (nAx, z,) et (pAx, z,) est : z=ax+b (1) avec pour coefficient directeur a et pour ordonnée à l'origine b tels que : Zn -- Zp (Zn -- Zp) TP et b=z,- "T7. (a=p}Ax np Q4. Écrire la fonction droite(Ls,n,p) qui prend en arguments la liste des altitudes Ls et deux entiers n et p correspondant aux indices des deux points de contact et qui renvoie une liste contenant la pente a et l'ordonnée à l'origine 2 de la droite associée. On applique cette fonction au bâti (pièce 1) et à la pièce 2 retournée. Pour un point donné d'une pièce donnée, on définit son altitude comme la distance algébrique entre ce point et le point sur la droite de même abscisse. Cette altitude sera comptée positivement si le point est au-dessus de la droite et négativement s'il est situé en-dessous. Pour une abscisse donnée, la distance algébrique entre deux points en vis-à-vis (chacun appartenant à une des deux pièces) est la différence entre leur altitude respective par rapport à la droite. Q5. Écrire une fonction posage(Ls1i,Ls2,n,p) qui prend en arguments 2 listes de points (Ls1 et Ls2) et 2 entiers n et p qui correspondent aux indices des points de contact. La pièce associée à Ls1 est située en-dessous de la pièce associée à Ls2 (qui a été préalablement retournée). Cette fonction renvoie une liste de 2 éléments correspon- dant à la distance algébrique maximale et à la distance algébrique minimale entre les pièces discrétisées dans cette situation. Cette fonction devra faire appel à la fonction précédente droite. 4/16 Q6. Écrire une fonction posage_opt(Lsi,Ls2) qui prend en arguments 2 listes de même taille Ls1 et Ls2 (dans la position retournée) et qui renvoie une liste de 2 éléments cor- respondant aux abscisses des points associés au posage optimal. Cette fonction doit faire appel à la fonction définie en Q5. On ne traitera pas le cas où plusieurs couples de points peuvent conduire au posage optimal. Indiquer en justifiant succinctement la complexité de cette fonction en terme de nombre de comparaisons. Partie Il - Maillage de la surface On souhaite appliquer la méthode des éléments finis pour déterminer la déformation de la surface suite aux contraintes qui découlent du posage. Cette méthode nécessite, au préalable, un découpage de la surface en surfaces élémentaires. Cette étape s'appelle le maillage. Le maillage proposé lors de cette étude est un maillage triangulaire. Chaque surface élé- mentaire est alors un triangle dont les sommets sont des noeuds de la surface à étudier. Le maillage est une étape déterminante permettant d'obtenir des résultats cohérents ou non par la méthode des éléments finis. En effet, un mauvais maillage comme illustré à gauche figure 5 peut être à l'origine d'instabilités numériques ou encore d'erreurs d'arrondis. Au contraire, une triangulation de Delaunay illustrée à droite figure 5 présente de bons résul- tats lors d'un traitement numérique. Dans ce maillage, les triangles ont des arêtes courtes, des angles ni trop petits, ni trop grands. Figure 5 - Exemples de 2 triangulations obtenues à partir de noeuds identiques Une triangulation est dite de Delaunay lorsque le cercle circonscrit à chaque triangle ne contient aucun autre point du maillage. Une triangulation peut devenir une triangulation de Delaunay par une suite de basculements (flips) successifs : quand 2 triangles ne respectent pas la condition de Delaunay, il faut rem- placer l'arête commune P,P, par l'arête P,P;, comme l'illustre la figure 6. L'algorithme mis en oeuvre pour réaliser une triangulation de Delaunay est un algorithme ité- ratif. La construction s'appuie sur un maillage initial de Delaunay. Ce maillage constitué d'un faible nombre de noeuds est construit de telle sorte que la surface ainsi délimitée contienne l'ensemble des noeuds qui devront être ajoutés à chaque itération. Ce maillage initial peut être composé d'un ou de plusieurs triangles vérifiant le critère de Delaunay. 9/16 P; P4 Figure 6 - Principe du basculement Chaque noeud P, restant du maillage est alors ajouté en suivant l'algorithme : °< repérer à quel triangle 7, appartient le point P, (par exemple sur la figure 7, P, appar- tient au triangle P,P;P;), + construire 3 triangles à partir du point P, et des sommets du triangle T,. Ajouter ces triangles à la liste des triangles T. Supprimer le triangle T;, de la liste T. La triangulation ainsi obtenue n'est pas nécessairement de Delaunay. Pour chaque nouveau triangle : -- vérifier que les triangles voisins respectent la triangulation de Delaunay. Si ce n'est pas le cas, basculer l'arête commune (figure 6). -- répéter cette opération pour les triangles modifiés après le basculement. N Pi Ya- Y Po x Figure 7 - Ajout d'un point à un maillage de Delaunay Structure des données On dispose de N noeuds P, d'une surface plane repérés par leurs coordonnées cartésiennes (x, y). Ces noeuds sont stockés dans le tableau noeud qui est un tableau Numpy de flottants de taille N x 2. Chaque noeud est repéré par son indice dans le tableau noeud. L'élément k du tableau noeud contient les coordonnées cartésiennes du noeud d'indice k. Ainsi noeud[k] = array([xk,yk]). On souhaite construire un tableau T qui contient des listes à 3 éléments. Ces listes repré- sentent l'indice des noeuds d'un même triangle. Dans le cas de la figure 7, la liste T s'écrit : T = [[0,1,2],[2,3,0]]. L'ordre des indices des noeuds est sans importance. Q7. On considère le maillage de Delaunay de la figure 7. On souhaite ajouter le noeud P, à ce maillage et faire les transformations nécessaires pour obtenir une nouvelle triangulation de Delaunay. Sur les figures du DR, représenter les différentes transfor- mations qui permettent d'aboutir à une triangulation de Delaunay. Indiquer la liste T qui résulte de cette triangulation. 6/16 -- © © © --J O O1 & © ND = L'algorithme de Delaunay doit permettre de construire la liste T des triangles du maillage. Cette liste est initialisée par 2 triangles contenant tous les noeuds du maillage. Ensuite, à chaque nouveau noeud ajouté, on applique l'algorithme de triangulation, pour mettre à jour la liste T. L'implémentation de cet algorithme nécessite l'utilisation de plusieurs fonctions : x addT(indN, indT) : fonction qui prend en arguments l'indice d'un noeud indnN à l'inté- rieur du triangle d'indice inaT. Cette fonction modifie la liste T en insérant les nouveaux triangles et en supprimant le triangle d'indice indT ; circle(T1i) : fonction qui prend en argument une liste à 3 éléments (les indices des sommets d'un triangle) et qui renvoie les coordonnées du centre du cercle circonscrit ainsi que le rayon [fxc,yc] ,R]; insideT(indaN, T1) : fonction qui prend en arguments l'indice d'un noeud inaN et une liste correspondant aux indices des sommets d'un triangle T1. Cette fonction renvoie un booléen suivant si le noeud appartient ou non au triangle considéré ; insideC([xc,yc]l, R, [x,y1) : fonction qui prend en argument les coordonnées du centre, le rayon et les coordonnées d'un point. Cette fonction renvoie un booléen sui- vant si le point considéré appartient ou non au cercle de centre (xc, yc) de rayon R; edge(indN, indT) : fonction qui prend en arguments l'indice d'un noeud inaN et l'indice d'un triangle inaT. Cette fonction renvoie l'indice du triangle ayant pour arête commune l'arête à l'opposé du noeud considéré ; flip(indTi, indT2) : fonction qui prend en arguments 2 indices (associés à des tri- angles de la liste T). Cette fonction permet de basculer l'arête commune en modifiant en conséquence la liste T. Les tableaux noeud et T sont des variables globales qu'il sera inutile de passer en arguments des fonctions et qui pourront être utilisées et modifiées à l'intérieur de celles-ci. Dans la suite du sujet, on considérera que les différents noeuds sont toujours strictement inclus dans un triangle de la liste T et qu'ils ne sont jamais situés sur l'une des arêtes. Q8. Q9. def Écrire la fonction addT(indN, indT) décrite ci-dessus. La fonction flip(indTi,indT2) qui permet de basculer l'arête commune à 2 triangles en modifiant les sommets de 2 triangles de la liste T est définie ci-dessous. Choisir l'une des 3 propositions données pour compléter les instructions manquantes (indi- quées par instructions à compléter). flip (indT1 ,indT2 ) : T1 = T[indT1] T2 = T[indT2] Ledge, Lflip = [], fl #instructions à compléter T[indT1] T[indT2] Lflip +[Ledge[0]] Lflip +[Ledgel[1]] 716 ©O --NJ O O1 FR © ND = Proposition 1 Ls = T1+72 for Kk in rangel(len(Ls)) : for j in range(k+1,len(Ls)) : if LS[IK] == Ls!)]: Ledge+=[Ls[Kk]|] else : Lflip+=[Ls[Kk]| Proposition 2 Proposition 3 for k in range(3) : for K in range(3) : if T2[IK] in T1: if T2IK] == T1[Kk]: Ledge+=[T2[IKk]|] Ledge+=[T2[IKk]|] else : else : Lflip+=[T2[Kk]| Lflip+=[T2[Kk]| for noeud in T1: Lflip+=[T1[Kk]|] if noeud not in Ledge Lflip +=[noeud] Pour vérifier si un point M du plan cartésien appartient à un triangle ABC, on propose de faire le produit vectoriel AB À AM et de vérifier que le résultat est du même signe que le produit vectoriel AB À AC. On procédera de la même manière pour chaque sommet en comparant > > ,-- > D > -- ,,
les signes de BC A BM à BC A BA et enfin de CA A CM à CA A CB. L'annexe du
sujet rappelle
la syntaxe et la définition du produit vectoriel sous numpy,.
Q10. Écrire la fonction insideT(indaN,T1) qui prend en argument l'indice d'un
noeud indN
et une liste Ti, associée à un triangle. Cette fonction renvoie un booléen
suivant si
le noeud appartient au triangle ou non (True si le noeud appartient au
triangle, False
SiNON).
Une fois le noeud d'indice indN inséré, pour se ramener à une configuration de
Delaunay, on
applique la fonction récursive checkedge(indN, indT) où indN est l'indice du
noeud inséré,
et indT un triangle qui a pour sommet le nouveau noeud. Cette fonction doit
d'abord vérifier
si le noeud inséré est inclus dans les cercles circonscrits des triangles
voisins, c'est-à-dire,
les triangles qui possèdent une arête commune aux nouveaux triangles. Par
exemple, sur la
figure 7, PP, est une arête commune à un nouveau triangle formé par l'insertion
du noeud P,
et au triangle défini par les noeuds P,, P, et P;. Si le noeud inséré
appartient effectivement à
l'un des cercles circonscrits, il faut alors procéder à un basculement grâce à
la fonction flip.
Une fois ce basculement réalisé, il faut à nouveau s'assurer que le noeud
d'indice inaN et les
triangles ainsi modifiés vérifient le critère de Delaunay en appliquant la
fonction checkedge.
def checkedgel(indN ,indT ) :
indA = edgel(indN,indT)
if indA != None:
C,R = cercle(T[indA])
if insideC(C,R,noeud!]indN])
instruction à compléter
instruction à compléter
instruction à compléter
8/16
Q11. Indiquer l'intérêt de la condition ligne 3 de la fonction checkedge.
Compléter les lignes
6, / et 8 de cette fonction.
Q12. Écrire la fonction delaunay (noeud) qui prend en arguments un tableau de
noeuds (de
dimension N x2) et qui renvoie la liste des triangles T correspondant à une
triangulation
de Delaunay. Cette fonction pourra utiliser les fonctions insideT, addT et
checkedge
déjà définies. On considère toujours que chaque noeud inséré est strictement
inclus
dans un triangle de la distribution. De plus, les 4 premiers éléments du
tableau noeud
permettent d'initialiser le tableau des triangles : T = [[0,1,2],[2,3,0]].
Partie III - Détermination de la matrice de rigidité d'une pièce
À partir de ce maillage, l'objectif est maintenant de calculer numériquement la
déformation
de la pièce étudiée.
Dans la suite du sujet, on considérera que toutes les constantes NE, S, L, Fx,
p0 etnontété
préalablement définies de manière globale.
Pour illustrer cette partie, nous travaillons sur un modèle 1D où 2 noeuds du
maillage sont
reliés par une barre.
11.1 - Modélisation mécanique
Chaque barre se déforme proportionnellement à l'effort subit, comme un ressort.
La raideur
dépend de la section de la barre S de sa longueur L et de l'élasticité du
matériau E (module
d'Young) :
ES
où y est un vecteur unitaire de même direction que la barre (figure 8).
Y
> --> >
F --F
----ÿ@ D (- ----
Figure 8 - Efforts exercés au niveau des barres
On considère que les efforts extérieurs ne s'exercent que sur les noeuds. Le
problème
consiste à déterminer les déplacements des noeuds.
Sur des structures complexes, le système d'équations peut atteindre plusieurs
centaines de
milliers voire des millions d'inconnues. Une mise en oeuvre numérique est alors
indispen-
sable.
11.2 - Calcul de la déformation d'une poutre en traction
Pour introduire la méthode de résolution par éléments finis, nous allons
travailler sur un pro-
blème simple à une dimension : la poutre en traction.
La poutre représentée figure 9 est encastrée en ©. Cette poutre de longueur L
de section S
est soumise à un effort F, = 100 N en A et à un effort réparti, également
suivant x, représenté
par une densité linéique de force p(x) = po = 500 N/m (non réprésenté).
9/16
Figure 9 - Paramétrage du problème de la poutre
La théorie de la résistance des matériaux nous fournit les équations suivantes :
dN
gx +? = 0 . . u(0) = 0
À d avec comme conditions aux limites
_ du N(L) -- F,
N=ES d
X
où N correspond à l'effort normal dans la poutre et le déplacement longitudinal
dû à la
traction. En combinant ces deux premières équations, on obtient :
d'u
EST = --p(x). (3)
Après intégration, on obtient simplement l'expression analytique suivante :
___ Po 2, (Fx+Lpo)
Un(X) = SES * + ES X.
IIL.3 - Tracé de la solution analytique
Q13. Écrire les instructions permettant de créer un vecteur x de n points
régulièrement ré-
partis entre 0 et L inclus, puis permettant de créer le vecteur uth
représentant le dépla-
cement dans la poutre des points d'abscisse x. Enfin, écrire les instrutions
permettant
de tracer la solution analytique u,,(x).
L'équation différentielle peut être résolue analytiquement dans ce cas simple,
mais dans le
cadre général des problèmes d'élasticité 2D ou 3D, ce n'est pas possible. On
envisage alors
une résolution numérique en appliquant la méthode d'approximation que sont les
éléments
finis.
IIl.4 - Recherche de la solution par éléments finis
La méthode de résolution par éléments finis consiste à transformer l'équation
différentielle
en un système linéaire d'équations.
En repartant de l'équation (3), la multiplication de l'équation différentielle
par une fonction
test , puis son intégration permettent d'aboutir à la relation suivante :
L du L
[ ES -- ®(x) dx = [ --p(x)D(x) dx
0 0
dx?
où la fonction test D (dont un exemple est donné figure 10) doit vérifier les
mêmes conditions
aux limites que la fonction , soit P(0) = 0.
10/16
Une intégration par parties nous amène au résultat suivant :
L L
[ ES du dep dx = [ p(x)D(x) dx + N(L)D(L). (4)
0 dx dx :
Nous allons alors chercher une solution linéaire par morceaux à l'équation (4)
ce qui va nous
amener à la discrétisation du problème et à son écriture matricielle.
Nous cherchons alors u(x) sous la forme :
u(x) = > ux;D}(x) (5)
k=0
où les fonctions ®, sont appelées fonctions de forme illustrées sur la figure
10. Ces fonctions
ont les propriétés suivantes :
x = kdx =&E etO