• Aucun résultat trouvé

L'ensemble des modèles décrits aux chapitres précédents ont été programmés dans un code de calcul numérique auquel on a donné le nom de SAFIR. Dans ce chapitre sont rassemblés les principales caractéristiques du programme et les techniques mises en oeuvre pour assurer son fonctionnement. Dans la mesure du possible, on explique les raisons de certains choix, les implications qui en résultent, et les changements qui pourraient ou devraient intervenir dans le futur.

A titre anecdotique, on signalera d'abord que le nom SAFIR n'est pas un acronyme, mais simplement un nom dans lequel on retrouve en anglais certains accents de safe et de fire et qui, en français comme en anglais, évoque le corindon de couleur bleu, le saphir.

Le programme est écrit en langage FORTRAN, de type 77. On n'a pas utilisé une version de type FORTRAN 90 car, à l'époque de l'écriture des premières lignes, le FORTRAN 90 était fort peu répandu. La rédaction avait d'abord été entreprise sur ordinateur PC compatible mais, après quelque temps, il est apparu qu'il n'était plus possible de poursuivre dans cette voie. Les problèmes rencontrés n'étaient pas le fait du matériel mais plutôt du manque de possibilité des compilateurs disponibles et, surtout, du manque total de fiabilité, aussi bien des compilateurs que du système d'exploitation, l'Operating System. Il est en outre apparu que les deux sociétés dont les produits en question portaient le nom avaient, pour l'une, une conception par trop étriquée de son business international et, pour l'autre, par trop tendance, en terme de communication, à fermer les portes. Le développement s'est donc poursuivi sur ordinateur de type VAX sous système d'exploitation VMS.

On s'est efforcé de n'utiliser que des instructions de base, acceptables par la majorité des compilateurs. La recherche de la date et quelques lignes menant à l'ouverture d'un fichier sont les seules instructions qu'il peut être nécessaire de modifier d'un système à l'autre. C'est

ce qui a permis la compilation presque immédiate du programme sur différentes machines utilisant un système d'exploitation UNIX et plus récemment, sur des ordinateurs PC compatibles fonctionnant sous Windows 95 ou Windows NT.

L'allocation dynamique de la mémoire, par exemple, qui est permise avec les compilateurs FORTRAN 90 constitue sans conteste un progrès important par rapport au FORTRAN 77. A l'heure actuelle, les avantages qu'on pourrait en retirer paraissent compenser l'investissement que constituerait l'adaptation du programme. D'autre part, l'évolution du matériel de type PC, et l'utilisation sur ces machines d'Operating Systems 32 bit les rendent de plus en plus performantes. Les compilateurs conçus pour ce type de machine ont atteint une maturité certaine en ce qui concerne la fiabilité et offrent une facilité d'utilisation que ne possèdent pas les compilateurs utilisés, par exemple, en VMS, notamment en phase de mise au point ou debugging. Il est donc probable que la stratégie de développement à moyen terme soit à nouveau revue dans l'optique du système d'exploitation Windows NT même si, de ce fait, on perd un peu de la portabilité. Les paragraphes suivants se rapportent à la situation actuelle.

Pour offrir un maximum de souplesse dans le type de problème analysable, on groupe toutes les matrices dont la taille dépend de chaque problème dans un seul vecteur et on utilise le fait que, en langage FORTRAN, le transfert des arguments vers les sousroutines se fait par adresse pour réaliser une pseudo allocation dynamique. Il est ainsi possible d'analyser avec la même taille réservée dans la mémoire, une structure possédant par exemple, peu d'éléments et de nombreux points d'intégration pour chacun d'eux, ou beaucoup d'éléments et un plus petit nombre de points d'intégration.

L'ensemble du problème est traité en mémoire centrale. Il n'y a en tout cas pas d'ordre spécifique d'écriture et de lecture vers des fichiers temporaires. Bien entendu, avec le principe de la mémoire virtuelle, il est possible que des écritures vers les disques aient lieu, mais elles sont générées par le système d'exploitation. Il importe néanmoins d'en être conscient. Le programme est organisé pour réduire ces entrées-sorties le plus possible.

Qu'il s'agisse de déterminer la position d'équilibre d'une structure en cas d'incendie, d'y calculer le champ thermique ou d'évaluer la résistance torsionnelle d'une section, la solution du problème passe par la résolution d'un système d'équations linéaires. Dans le programme, on utilise la technique de la skyline pour le stockage de la matrice du système d'équations, et une décomposition L-U de la matrice par la méthode Cholesky pour la résolution. Cela signifie que le programme ne peut traiter que les problèmes décrits par un système d'équations dont la matrice est symétrique.

Pour réduire au maximum la longueur du vecteur dans lequel on stocke la matrice du système d'équations, deux techniques différentes sont disponibles. La première consiste à renuméroter les noeuds à partir d'un noeud choisi comme point de départ, en donnant les numéros suivants aux noeuds qui sont géométriquement les plus proches du noeud de départ. Le programme peut faire cet exercice en prenant successivement chacun des noeuds comme point de départ et en retenant la meilleure de toutes les solutions ainsi obtenue. Une seconde technique a été développée sur base d'une matrice de LOGICAL*1 qui est une sorte d'image de la matrice du système. Cette matrice contient la valeur FALSE à toutes les positions où il

est certain que la matrice du système contient une valeur nulle. La valeur des autres cellules est TRUE. On procède ensuite par une série de permutations simples entre deux numéros d'équations. Ces permutations sont choisies de manière à réduire au maximum la longueur du vecteur nécessaire à stocker la matrice de LOGICAL, c'est-à-dire aussi la longueur du vecteur nécessaire à stocker la matrice du système. L'utilisation de la matrice image permet de renuméroter les équations sans avoir formé la matrice de rigidité. Comme on ne manipule que des valeurs de type LOGICAL, l'algorithme est assez rapide. L'avantage de travailler au niveau des équations et non plus au niveau des noeuds est, d'abord, de pouvoir tenir compte plus facilement des D.D.L. bloqués à certains noeuds, mais il apparaît surtout lorsqu'un grand nombre de relations maître-esclave sont imposées pour la solution.

Les relations maître-esclave forcent, D.D.L. par D.D.L., la solution d'un ou de plusieurs noeuds, les noeuds esclaves, à être la même que celle d'un autre noeud, le noeud maître. Cette technique est très utile dans les calculs statiques pour introduire des rotules internes, pour exprimer que le gauchissement ne se transmet pas entre des éléments différents qui se rejoignent à un noeud poutre-colonne, mais aussi, par exemple, pour numéroter plus naturellement les noeuds et les éléments dans un cadre composé de plusieurs lignes de poutres et de colonnes. L'introduction des données peut être simplifiée si on place deux noeuds différents au même endroit, à chaque joint poutre-colonne, et qu'on les lie par des relations maître-esclave. Dans les calculs thermiques, cette technique permet de gagner un temps considérable dans certains cas, en particulier en présence de parois métalliques très minces. Dans l'étude de dalles mixtes coulées sur des tôles minces profilées à froid, on n'introduit pas une grande erreur en forçant la solution à être uniforme sur l'épaisseur des tôles qui est de l'ordre du millimètre. Ce faisant, on tient quand même compte de la chaleur spécifique de la tôle ainsi que de la conductivité dans le plan de la tôle. Comme on ne traite que les systèmes à matrice symétrique, on ne stocke évidemment que la moitié de chaque matrice. Pour les calculs thermiques, il ne faut pas oublier de ramener sur la diagonale principale non seulement le terme capacitif de couplage qui se trouve dans la partie supérieure de la matrice, C(i,j), mais aussi le terme identique qui se trouve dans la partie inférieure de la matrice C(j,i).

L'introduction des données fait un large usage de fonctions. Ces fonctions du temps sont de deux types. Certaines sont programmées directement et désignées par un nom particulier. Parmi ces fonctions, on trouve, en autre :

• la courbe d'incendie ISO 834, • la courbe d'incendie ASTME 119, • la fonction qui vaut 20 à chaque instant, • la fonction qui vaut 0 à chaque instant, • la fonction qui vaut 1 à chaque instant,

• la fonction qui passe de 0 à 1 en 20 secondes puis garde la valeur unitaire, • la fonction qui a la même valeur que le temps.

Le deuxième type de fonction est défini point par point par l'utilisateur dans un fichier. Le nom de la fonction est le nom du fichier.

Dans chaque jeu de données, on impose à diverses grandeurs d'évoluer au cours du temps suivant l'une ou l'autre de ces fonctions. Il en est ainsi, par exemple :

• de la température des gaz utilisée pour définir les conditions aux limites d'un calcul thermique ;

• des déplacements en n'importe quel D.D.L. lors d'un calcul statique. N'importe quel D.D.L. peut ainsi se voir imposer n'importe quel déplacement, l'appui fixe n'étant qu'un cas particulier de déplacement imposé à une valeur qui est constamment nulle ;

• des fonctions qui modulent les charges appliquées. Les charges sont divisées en plusieurs vecteurs et chacun peut être modulé par une fonction différente. On pourrait, par exemple, imaginer un vecteur contenant les charges nodales dues au poids propre et modulé par la fonction unité, un vecteur représentant les charges de service apparaissant à un instant déterminé, et un vecteur représentant la pression du vent modulé par une fonction sinusoïdale variant entre 0 et 1 avec une fréquence de l'ordre de quelques secondes, ce qui permettrait d'obtenir automatiquement la durée de résistance au feu pour le cas le plus sévère, avec ou sans vent.

Dans les calculs ayant pour but de déterminer les positions d'équilibre, le temps n'est présent que pour ordonner la séquence des événements, c'est-à-dire les déplacements imposés, les forces appliquées et les températures de la structure. Les termes d'accélération ne sont pas pris en compte. C'est pourquoi on utilise souvent l'expression calcul statique pour désigner les calculs résolvant les équations d'équilibre.

Pour obtenir une précision suffisante sur le temps de résistance, à priori inconnu, tout en utilisant d'assez grands pas de temps durant la majeure partie du calcul, il est possible d'imposer au programme de stocker toutes les variables nécessaires après chaque pas convergé. En cas de non convergence, le programme peut ainsi revenir automatiquement au dernier pas convergé et tenter un nouveau pas dont la taille est réduite de moitié par rapport à l'essai infructueux. La division du pas se poursuit jusqu'à une valeur définie et jugée acceptable. En plus de permettre une convergence vers un résultat plus précis, cette technique permet aussi parfois d'aller plus loin dans les calculs avant d'obtenir la ruine numérique. Par exemple si, après convergence à 90 minutes, il est impossible de converger à 92 minutes, il n'est pas impossible que la réduction du pas à 60 ou 30 secondes permette d'atteindre 120 minutes de résistance. De manière assez typique pour les structures en béton soumises à l'incendie, on observe souvent que le danger de ruine numérique est plus élevé non seulement aux instants qui précèdent la vraie perte d'équilibre mais également après quelque 30 minutes d'essais. Cela est dû à la sévérité des gradients thermiques et de la fissuration que ceux-ci induisent, maximale aux alentours de 30 minutes, puis décroissant par la suite. Tout arrêt du programme à ce moment par suite d'un pas trop grand donnerait évidemment un résultat sans rapport avec la capacité de résistance réelle. C'est pourquoi il importe que le programme puisse s'adopter automatiquement à la situation.

Pour permettre de juger si l'arrêt du calcul correspond bien à un épuisement de la capacité portante, et non à des problèmes numériques, le programme calcule, par la méthode itérative de la puissance, la plus petite valeur propre de la matrice de rigidité après chaque pas convergé. Cette grandeur normalisée par rapport à sa valeur dans l'état initial, donne une idée de la raideur de la structure. Elle est en quelque sorte une image de la première fréquence propre de vibration. Tout arrêt du programme alors que cette minimum eigen value possède encore une valeur supérieure à quelques pourcents doit attirer l'attention.

Une autre vérification à effectuer pour vérifier le caractère plausible des résultats est d'observer la déformée. Aucun critère de flèche ou de vitesse de déformation n'a en effet été introduit pour arrêter le calcul. Pour illustrer le propos, on citera un cas pour lequel on obtenait des durées de résistance anormalement élevées pour des poutres mixtes posées sur deux appuis simples. L'évolution de la flèche calculée au cours du temps est schématisée à la figure 9.1. Après s'être aperçu que la flèche maximale était de l'ordre de la moitié de la portée, on a dessiné la déformée, aussi schématisée sur la figure, et on a remarqué que la poutre s'était transformée en câble. L'esprit humain a tôt fait de décréter que la ruine correspond à l'instant A plutôt que B. Le programme numérique est incapable de porter ce jugement. Dans l'exemple rapporté ici, il avait été victime de sa trop grande ductilité numérique.

Fig. 9.1 : Déformée irréaliste

Lorsque le programme a divisé le pas de temps jusqu'à la valeur minimale admise, il lui est encore possible, si l'utilisateur l'a spécifié, de rechercher s'il n'est pas possible de trouver une autre position d'équilibre pour le même champ de température. C'est tout le problème des ruines locales dans les structures complexes qui est posé. Il sera discuté dans la deuxième thèse secondaire annexée à cette thèse.

Les coordonnées des noeuds sont introduites dans un système d'axes global cartésien ou cylindrique. Il est possible de définir des conditions d'appui dans des axes qui sont obliques par rapport aux axes globaux. Cette possibilité est obtenue par l'emploi d'une formulation dite pénalisée.

Les données sont introduites sous forme de fichier ASCII créé à l'aide d'un éditeur de texte. Quelques petits programmes de génération automatique ont été rédigés en Visual Basic, notamment pour ce qui concerne les profilés laminés en double té. Pour l'analyse des résultats, on peut utiliser un programme de traitement écrit pour créer, à partir des fichiers résultats, des fichiers interprétables par tableur pour dessiner l'évolution d'une ou de plusieurs variables au cours du temps. Pour le dessin des isothermes ou des structures déformées, on utilise le logiciel DESFIN développé au Département MSM de l'Université de Liège. Les quelques dessins en couleur qui sont présentés dans cette thèse ont, par exemple, été réalisés à l'aide de ce logiciel.

Le calcul des propriétés torsionnelles d'une section ne nécessite pas d'intégration temporelle. Le système d'équations décrivant le problème n'est résolu qu'une seule fois.

Le calcul des champs thermiques transitoires nécessite évidemment une intégration temporelle du système d'équations. La manière dont on procède a été décrite en détail au chapitre 4.

Pour calculer les positions d'équilibre successives d'une structure au cours du temps, on procède de la manière indiquée par la figure 9.2 où sont représentées de manière simplifiée les principales boucles imbriquées qui sont parcourues.

La boucle extérieure est relative aux pas de temps. A chaque nouveau pas, le temps reçoit une nouvelle valeur, définie par l'utilisateur. Les forces extérieures appliquées à la structure à cet instant, Fext, sont calculées et la température de la structure en chaque point

d'intégration est déterminée sur base des valeurs lues dans les fichiers où sont stockés les résultats des calculs thermiques réalisés préalablement. Un compteur d'itération, iter, est mis à 0.

Pour déterminer la position d'équilibre à ce nouvel instant considéré, il est nécessaire de parcourir un certain nombre de fois une boucle intérieure. Chaque exécution de cette boucle est appelée une itération ce qui indique que, en parcourant cette boucle, le programme procède par approximations successives et adapte à chaque fois la position de la structure de manière à l'amener toujours plus près de sa position d'équilibre. Chaque itération comporte 4 étapes essentielles qui sont

1. le calcul des forces hors équilibre DF, 2. le calcul des déplacements u,

3. le calcul des déformations et, sur base de celles-ci, le calcul des contraintes qui donnent les forces internes énergétiquement équivalentes, Fint, et des modules tangents qui donnent la

matrice de rigidité, K,

4. l'évaluation de la convergence vers l'équilibre avec, éventuellement, sortie de la boucle et passage à un autre pas.

Les étapes 1 à 3 doivent impérativement être parcourues dans cet ordre. L'évaluation de la convergence dépend du type de critère qui est utilisé. Si celui-ci ne fait appel qu'à des grandeurs de type déplacement, il peut être placé au point noté B sur la boucle d'itérations. Si le critère ne se base que sur les forces hors équilibre, il peut se situer au point noté C. Le critère de convergence du programme SAFIR fait appel à des quantités qui ont la dimension de l'énergie ce qui, en présence d'éléments orientés, est la seule manière de conserver la même importance relative aux D.D.L. de rotation et aux D.D.L. de translation, quel que soit le système d'unités choisi. En calculant ces termes énergétiques sur base des forces externes, on pourrait aussi placer le critère en B, après avoir calculé les déplacements incrémentaux Du. Il est cependant préférable de calculer ces termes énergétiques sur base des forces internes. En effet, en ne prenant en compte que les forces externes, on pourrait dans certains cas considérer que l'équilibre est atteint parce que les points d'application des forces extérieures ne se déplacent plus, alors que des mouvements ont encore lieu à l'intérieur de la structure et que des redistributions d'effort y sont encore nécessaires avant que la structure ne soit en équilibre. Pour que ces mouvements internes ne donnent pas lieu à une résultante globale nulle, on compte les contributions de chaque D.D.L. en valeur absolue. On n'a donc pas réellement accès à l'énergie en tant que telle mais à un résultat qui a la dimension d'une énergie. C'est pourquoi on a parlé de terme énergétique et non pas d'énergie.

Basé sur les forces internes, le critère de convergence doit donc trouver sa place en D dans la boucle des itérations. On constate sur la figure 9.2 que, par rapport à un critère basé sur les forces hors équilibre qui serait placé en C, le critère basé sur l'énergie interne nécessite le parcours de presque la totalité d'une boucle itérative en plus. La partie CD est en effet, de loin, celle qui prend le plus de temps, alors que la partie DC est parcourue très rapidement.

La position du critère de convergence indique le point de sortie de la boucle des itérations. Mais où faut-il placer le point d'entrée ?

Pour le calcul d'une structure à la température ambiante, le point d'entrée naturel est en A. Les forces hors équilibre sont calculées comme la différence entre les nouvelles forces appliquées et les forces internes évaluées à la fin du pas précédent, ce qui évite l'accumulation des légères forces hors équilibre résiduelles à chaque fin de pas. Les forces ainsi calculées sont conjuguées à la matrice de rigidité évaluée à la fin du pas précédent pour donner une