É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 programmes doivent être expliqués et commentés.
Seul le Document Réponse doit être rendu dans son intégralité.
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éformables par la méthode des éléments finis. La partie I 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 portiè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 ou max sera proscrite.
Partie I - Posage des pièces
I. 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.
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 , est associée son altitude où correspond à une longueur élémentaire associée à la discrétisation spatiale. Ces données sont stockées dans une liste P de nombres dont l'indice des éléments permet de définir l'abscisse des points et les valeurs leur altitude. Ainsi, et où . La variable Delta_x sera associée à la longueur élémentaire et sera supposée déjà définie. Il sera inutile de la passer en argument des différentes fonctions.
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 .
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 effectuant une rotation autour de l'axe ( ), 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 œuvre 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 amplifié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.
Figure 4 - Exemple de posage associé à deux autres pièces
On considère le posage sur les points et . On note et les altitudes des points de contact sur la pièce référence, et et 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 ( ) et ( ) est :
avec pour coefficient directeur et pour ordonnée à l'origine tels que :
Q4. Écrire la fonction droite ( ) qui prend en arguments la liste des altitudes Ls et deux entiers et p correspondant aux indices des deux points de contact et qui renvoie une liste contenant la pente et l'ordonnée à l'origine 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( ) qui prend en arguments 2 listes de points (Ls1 et Ls2) et 2 entiers et 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 correspondant à 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.
Q6. Écrire une fonction posage_opt(Ls1,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 correspondant 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 II - 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 nœuds 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ésultats 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 nœuds 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 remplacer l'arête commune par l'arête comme l'illustre la figure 6.
L'algorithme mis en œuvre 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 nœuds est construit de telle sorte que la surface ainsi délimitée contienne l'ensemble des nœuds 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.
Figure 6 - Principe du basculement
Chaque nœud restant du maillage est alors ajouté en suivant l'algorithme : repérer à quel triangle appartient le point (par exemple sur la figure 7, appartient au triangle ), construire 3 triangles à partir du point et des sommets du triangle . Ajouter ces triangles à la liste des triangles T . Supprimer le triangle 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.
Figure 7 - Ajout d'un point à un maillage de Delaunay
Structure des données
On dispose de nœuds d'une surface plane repérés par leurs coordonnées cartésiennes . Ces nœuds sont stockés dans le tableau noeud qui est un tableau Numpy de flottants de taille . Chaque nœud est repéré par son indice dans le tableau noeud. L'élément k du tableau noeud contient les coordonnées cartésiennes du nœud 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 nœuds d'un même triangle. Dans le cas de la figure 7, la liste T s'écrit : . L'ordre des indices des nœuds est sans importance.
Q7. On considère le maillage de Delaunay de la figure 7. On souhaite ajouter le nœud à 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 transformations qui permettent d'aboutir à une triangulation de Delaunay. Indiquer la liste T qui résulte de cette triangulation.
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 nœuds du maillage. Ensuite, à chaque nouveau nœud 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 :
addT (indN, indT) : fonction qui prend en arguments l'indice d'un nœud indN à l'intérieur du triangle d'indice indT. Cette fonction modifie la liste T en insérant les nouveaux triangles et en supprimant le triangle d'indice indT; circle(T1) : 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 ; insideT(indN, T1) : fonction qui prend en arguments l'indice d'un nœud indN et une liste correspondant aux indices des sommets d'un triangle T1. Cette fonction renvoie un booléen suivant si le nœud appartient ou non au triangle considéré; insideC : 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 suivant si le point considéré appartient ou non au cercle de centre de rayon ;
edge (indN, indT) : fonction qui prend en arguments l'indice d'un nœud indN et l'indice d'un triangle indT. Cette fonction renvoie l'indice du triangle ayant pour arête commune l'arête à l'opposé du nœud considéré;
flip(indT1, indT2) : fonction qui prend en arguments 2 indices (associés à des triangles 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 nœuds 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. Écrire la fonction addT (indN, indT) décrite ci-dessus.
Q9. La fonction flip (indT1, 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 (indiquées par instructions à compléter).
Ls = T1+T2
for k in range(len(Ls)):
for j in range(k+1,len(Ls)):
if Ls[k] == Ls[j]:
Ledge+=[Ls[k]]
else:
Lflip +=[Ls[k]]
Proposition 2
for k in range(3):
if T2[k] in T1:
Ledge+=[T2[k]]
else :
Lflip +=[T2[k]]
for noeud in T1:
if noeud not in Ledge :
Lflip +=[noeud]
Proposition 3
for k in range(3):
if T2[k] == T1[k]:
Ledge+=[T2[k]]
else :
Lflip +=[T2[k]]
Lflip +=[T1[k]]
Pour vérifier si un point du plan cartésien appartient à un triangle ABC , on propose de faire le produit vectoriel et de vérifier que le résultat est du même signe que le produit vectoriel . On procédera de la même manière pour chaque sommet en comparant les signes de à et enfin de à . L'annexe du sujet rappelle la syntaxe et la définition du produit vectoriel sous numpy.
Q10. Écrire la fonction insideT (indN, T1) qui prend en argument l'indice d'un nœud indN et une liste T 1 , associée à un triangle. Cette fonction renvoie un booléen suivant si le nœud appartient au triangle ou non (True si le noeud appartient au triangle, False sinon).
Une fois le nœud 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 nœud inséré, et indT un triangle qui a pour sommet le nouveau nœud. Cette fonction doit d'abord vérifier si le nœud 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, est une arête commune à un nouveau triangle formé par l'insertion du nœud et au triangle défini par les nœuds et . Si le nœud 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 nœud d'indice indN et les triangles ainsi modifiés vérifient le critère de Delaunay en appliquant la fonction checkedge.
def checkedge(indN,indT):
indA = edge(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
Q11. Indiquer l'intérêt de la condition ligne 3 de la fonction checkedge. Compléter les lignes 6,7 et 8 de cette fonction.
Q12. Écrire la fonction delaunay (noeud) qui prend en arguments un tableau de nœuds (de dimension ) 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 nœud 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 : .
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 et n ont été préalablement définies de manière globale.
Pour illustrer cette partie, nous travaillons sur un modèle 1D où 2 nœuds du maillage sont reliés par une barre.
III. 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 de sa longueur et de l'élasticité du matériau (module d'Young) :
où est un vecteur unitaire de même direction que la barre (figure 8).
Figure 8 - Efforts exercés au niveau des barres
On considère que les efforts extérieurs ne s'exercent que sur les nœuds. Le problème consiste à déterminer les déplacements des nœuds.
Sur des structures complexes, le système d'équations peut atteindre plusieurs centaines de milliers voire des millions d'inconnues. Une mise en œuvre numérique est alors indispensable.
III. 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 problème simple à une dimension : la poutre en traction.
La poutre représentée figure 9 est encastrée en . Cette poutre de longueur de section est soumise à un effort en et à un effort réparti, également suivant , représenté par une densité linéique de force (non réprésenté).
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 :
où correspond à l'effort normal dans la poutre et le déplacement longitudinal dû à la traction. En combinant ces deux premières équations, on obtient :
Après intégration, on obtient simplement l'expression analytique suivante :
III. 3 - Tracé de la solution analytique
Q13. Écrire les instructions permettant de créer un vecteur x de points régulièrement répartis entre 0 et inclus, puis permettant de créer le vecteur uth représentant le déplacement dans la poutre des points d'abscisse x . Enfin, écrire les instrutions permettant de tracer la solution analytique .
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.
III. 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 :
où la fonction test (dont un exemple est donné figure 10) doit vérifier les mêmes conditions aux limites que la fonction , soit .
Une intégration par parties nous amène au résultat suivant :
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 sous la forme:
où les fonctions sont appelées fonctions de forme illustrées sur la figure 10. Ces fonctions ont les propriétés suivantes: et est continue; est affine sur et sur ; ; ; même si les fonctions ne sont pas dérivables en tout point de , on considèrera les dérivées comme des fonctions continues par morceaux, en les prolongeant de manière quelconque aux points de "cassure". Le choix du prolongement n'aura de toute façon aucun impact sur les calculs d'intégrales demandés.
Figure 10 - Fonction de forme
Les scalaires constituent les inconnues du problème et représentent le déplacement associé à chaque nœud . Une fois les déplacements déterminés, il est possible de calculer la fonction déplacement en n'importe quel point de la poutre grâce à l'équation (5).
Q14. Écrire une fonction phi ( ) qui prend en argument un entier et un flottant et qui renvoie la valeur .
Nous pouvons alors réécrire le problème sous forme matricielle. En notant et Phi les vecteurs respectivement associés aux déplacements et aux fonctions , on peut écrire la fonction de la manière suivante :
où correspond à la transposée du vecteur . La dérivée de par rapport à s'écrit alors simplement :
Pour résoudre l'équation (4) il faut alors déterminer la matrice .
Q15. Exprimer le produit des dérivées pour en fonction de et de lorsque et dans les autres cas. En déduire l'intégrale à nouveau en fonction de et lorsque , et dans les autres cas.
Les fonctions de forme ainsi choisies permettent d'aboutir à une matrice tridiagonale :
Q16. À partir des résultats de la question précédente et en posant , exprimer les coefficients et .
Le problème peut alors se réécrire, à partir de l'équation (4) de la manière suivante :
où est le vecteur associé à l'effort appliqué aux nœuds de la poutre. Par la suite, on considère que le vecteur et la matrice ont été définis comme des tableaux numpy.
Cette équation peut se mettre sous la forme suivante et correspond à un système linéaire de équations à inconnues :
Q17. Exprimer la matrice et le vecteur en fonction de et des différentes constantes. Écrire les instructions permettant de créer et .
La résolution d'un tel système linéaire peut se faire à l'aide de l'algorithme du pivot partiel de Gauss.
La fonction resolution prend en arguments un tableau de dimensions ( ) de type flottant et un vecteur à éléments de type flottant. Cette fonction renvoie un vecteur à éléments solution de l'équation .
Les fonctions combinaison et echanger_ligne permettent respectivement de faire une combinaison linéaire entre deux lignes du système et d'échanger deux lignes du système.
def resolution(R,Y) :
Syst = []
nb = len(M)
for k in range(nb):
ligne = []
for j in range(nb):
ligne.append(R[k,j])
ligne.append(Y[k])
Syst.append(ligne)
#Mise sous forme triangulaire
for i in range(nb):
j=pivot(Syst,i)
echanger_lignes(Syst,i,j)
for k in range( i + 1, nb):
#instruction à compléter
combinaison(Syst,k, i,mu)
#Remontée
X=[0]*nb
#instructions à compléter
return X
Q18. Indiquer l'intérêt des lignes 2 à 9 de la fonction resolution.
Q19. À la ligne 12, la fonction resolution fait appel à la fonction pivot qui prend en arguments le tableau Syst et un indice k et qui renvoie l'indice du pivot le plus grand en valeur absolue parmi les pivots encore disponibles dans la colonne d'indice k. Indiquer la structure du tableau Syst. Expliquer en quoi il est pertinent d'appliquer cet algorithme avec le pivot le plus grand en valeur absolue. Écrire la fonction pivot répondant au problème.
Q20. La fonction combinaison prend en arguments un tableau Syst, 2 entiers k et i et un flottant x . Cette fonction modifie la ligne k du tableau Syst en réalisant la transvection :
Compléter la ligne 16 du code proposé en définissant la variable mu. Écrire une fonction combinaison qui réalise l'opération souhaitée.
Une fois le problème mis sous forme triangulaire, il reste à créer le vecteur des solutions X. C'est la phase de remontée.
Q21. Proposer les instructions permettant de construire le vecteur X à partir du système triangulaire.
Q22. En utilisant la matrice et le vecteur définis en Q17, écrire l'instruction permettant de résoudre l'équation (8) et d'affecter le résultat à un vecteur . À partir des fonctions précédemment définies, définir la fonction uEF qui construit le déplacement défini à l'équation (5) et solution du problème à partir du vecteur et de la fonction phi .
Partie IV - Analyse et comparaison des résultats
Pour illustrer cette étude sur un exemple 3D, nous proposons un modèle discrétisé de portière de véhicule. Cette portière est posée sur la caisse du véhicule (figure 11(a)) :
au niveau des points 1 et 2 pour la charnière haute,
au niveau des points 3 et 4 pour la charnière basse,
au niveau du point 5 pour la gâche.
Figure 11 - Modélisation d'une portière
IV. 1 - Illustration de la question du posage
On modélise des défauts de position des points de la caisse afin de visualiser leur impact sur la position de la portière. Ainsi, on peut déterminer pour chaque type de défaut dans quel ordre il est préférable d'assembler la portière sur la caisse. On va proposer deux scénarios d'assemblage:
scénario 1 : commencer par poser la caisse au niveau des points 1, 2 et 5 (figure 12 en haut) avant de la déformer pour assembler la charnière basse;
scénario 2 : commencer par poser la caisse au niveau des points 3, 4 et 5 (figure 12 en bas) avant de la déformer pour assembler la charnière haute.
Figure 12 - Illustration du posage. En haut : portière posée au niveau des points 1, 2 et 5. En bas : portière posée au niveau des points .
Q23. Indiquer en justifiant succinctement quel posage vous semble respecter les règles associées au posage optimal définies en partie I de ce sujet.
IV. 2 -Illustration de l'influence de la finesse du maillage
Pour visualiser l'impact de la taille des triangles du maillage,on réalise plusieurs simula- tions numériques.Un déplacement est imposé aux 5 points de liaison avec la caisse et un chargement est imposé sur tous les nœuds du pourtour de la portière comme l'illustre la figure 11(b).
Maillage fin
Maillage intermédiaire
Maillage grossier
Nombre de nœuds
83336
16163
4957
Nombre de triangles
46925
7763
2266
Déplacement maximal
12,154
12,664
13,120
Tableau 1 -Tableau de comparaison des différentes simulations
Figure 13 -Valeur maximale du déplacement(en mm )en fonction du nombre de nœuds.
Q24.En exploitant les données du tableau 1 et la figure 13,déterminer l'ordre de grandeur du nombre minimal d'éléments du maillage pour que le résultat du calcul soit satisfai- sant(précision des résultats inférieure à 1 mm ).
Q25.En exploitant la forme spécifique de la géométrie de la portière,justifier le seuil observé pour 5000 éléments environ dans le tableau 1 et figure 13.
CONCOURS COMMUN INP
Numéro d'inscription
Nom :
Prénom:
Né(e) le
Emplacement
Filière: PSI
Session : 2022
Épreuve de: INFORMATIQUE
- Remplir soigneusement l'en-tête de chaque feuille avant de commencer à composer
- Rédiger avec un stylo non effaçable bleu ou noir
- Ne rien écrire dans les marges (gauche et droite)
- Numéroter chaque page (cadre en bas à droite)
- Placer les feuilles A3 ouvertes, dans le même sens et dans l'ordre
DOCUMENT RÉPONSE
Ce Document Réponse doit être rendu dans son intégralité.
Q1 - Liste P2
Q2 - Fonction retourne(Ls)
-
-
-
|
-
T
T
|
-
-
T
-
T
-
-
T
T
-
T
|
|
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
I
-
.
-
-
-
-
-
-
-
-
-
-
-
-
-
0
-
-
+
Q3 - Représentation du posage aux points 0 et 1 , puis aux points 2 et 3
Q4 - Fonction droite(Ls,n,p)
Q5 - Fonction posage(Ls1,Ls2,n,p)
Q6 - Fonction posage_opt(Ls1,Ls2). Complexité
Q7 - Algorithme de Delaunay
Q8 - Fonction addT(indN,indT)
T
|
-
-
|
|
-
-
-
-
-
-
-
-
-
T
-
-
-
-
-
-
-
-
-
-
I
-
-
-
-
-
-
0.0000
-
-
-
-
-
-
-
-
-
-
- 0 -
-
-
0
-
-
-
- - -
- -
-
-
-
Q9 - Fonction flip(indT1,indT2)
Q10 - Fonction insideT(indN, T1)
Q11 - Intérêt de la ligne 3 de la fonction checkedge(indN,indT). Instructions manquantes
Q12 - Fonction delaunay (noeud)
Q13 - Instructions pour tracer la solution analytique.
Q14 - Fonction phi (k, x)
Q15 - Dérivées et matrice
-
-
-
-
-
-
-
類
-
-
-
-
-
-
-
-
-
-
-
-
- 1 -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
|
-
-
-
-
0
-
|
-
-
-
-
.
-
Q16 - Coefficients et
Q17 - Expressions de la matrice et du vecteur . Instructions pour créer et
Q18 - Intérêt des lignes 2 à 9
Q19 - Fonction pivot
Q20-Fonction combinaison( )
-
-
-
-
-
-
T
T
-
-
-
-
T
T
T
|
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
.
都龧龧龧
-
-
-
-
-
Q21-Construction du vecteur X
Q22-Instruction créant U.Fonction uEF(x)
Q23-Posage correct
-
-
-
|
都龧
都龧龧
-
-
-
|
|
龧龧
-
-
-
-
-
|
|
T
|
-
-
-
|
|
-
|
-
-
-
-
-
-
-
-
-
-
龧龧龧
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
(
-
-
-
-
Q24-Choix de l'ordre de grandeur du nombre minimal d'éléments du maillage
Q25-Seuil observé pour 5000 éléments
ANNEXE
Rappels des syntaxes en Python
Remarque : sous Python, l'import du module numpy permet de réaliser des opérations pratiques sur les tableaux : from numpy import *. Les indices de ces tableaux commencent à 0 .
Python
tableau à une dimension
L= [1,2,3] (liste)
v=array ([1,2,3]) (vecteur)
accéder à un élément
v[0] renvoie 1 (L [0] également)
ajouter un élément
L. append (5) uniquement sur les listes
supprimer la première occurrence d'un élément d'une liste
L.remove(element)
calculer le produit vectoriel entre 2 vecteurs coplanaires
cross ( ] , [ ]) donne
évaluer la racine carrée d'un nombre flottant
sqrt (4)
évaluer la valeur absolue d'un nombre flottant
abs (-2)
tableau de 0 ( 2 lignes, 3 colonnes)
zeros((2,3))
séquence équirépartie quelconque de 0 à 10.1 (exclu) par pas de 0.1
arange (0,10.1,0.1)
séquence de 100 valeurs équiréparties de 0 à 10.0 (inclus)
linspace(0,10,100)
affiche en fonction de où et sont des listes ou vecteurs de même dimension.
plot(x,y)
CCINP Informatique Commune PSI 2022 - Version Web LaTeX | WikiPrépa | WikiPrépa