2. Simulation de Monte Carlo avec Code_Aster#
Dans le cadre de la simulation de Monte Carlo, la modélisation des incertitudes passe par la génération de variables aléatoires et éventuellement de processus stochastiques. Dans ce qui suit, on suppose que l’utilisateur ait choisi des lois caractérisant bien les \(m\) paramètres incertains. Pour ce faire, on peut avoir recours à des résultats d’essais, le jugement d’expert ou encore le principe du maximum d’entropie (voir [R4.03.05]). Très souvent, on peut supposer que les différentes sources d’incertitudes sont indépendantes. On peut alors effectuer des tirages aléatoires selon les \(m\) lois marginales des variables aléatoires. Dans certains cas, on peut aussi inclure des grandeurs plus complexes (non scalaires) comme les matrices aléatoires ou encore les processus stochastiques.
On parle aussi de plan d’expérience pour désigner la méthode de tirage et l’échantillon qui en résulte. Dans Code_Aster, la simulation de Monte Carlo selon un plan d’expériences est possible à l’aide de l’option calculs distribués [U2.08.07].
2.1. Réalisation du plan d’expérience#
Toutes les méthodes dont les tirages sont indépendants peuvent être mises en œuvre via la distribution des calculs avec Code_Aster . En particulier, on peut faire appel aux tirages aléatoires selon la méthode de l’hypercube Latin (Latin Hypercube Sampling – LHS) ou le quasi Monte Carlo (suites quasi-aléatoires comme la suite de Sobol, …) [bib4, bib5].
Variables aléatoires: les incertitudes sur les paramètres du modèle éléments finis (paramètres matériaux, valeurs d’un jeu, d’une raideur de butée élastiques, d’un module d’Young, etc).
Matrices aléatoires: En dynamique des structures sur base modale, les variables aléatoires peuvent être les valeurs des matrices généralisées de masse, de raideur et d’amortissement du modèle aux éléments finis. Dans cette approche, on fait des tirage de ces matrices aléatoires à l’aide de l’opérateur GENE_MATR_ALEA [U4.36.06]. Dans cette approche, on modélise à la fois les incertitudes de modèle et de modélisation par une approche probabiliste dite «non-paramétrique».
Excitations aléatoires: l’opérateur GENE_FONC_ALEA permet de générer des signaux aléatoires stationnaire à partir de la densité spectrale de puissance. L’opérateur GENE_ACCE_SEISME permet de générer des signaux sismiques non stationnaire en amplitude et en contenu fréquentiel. Dans d’autres cas, on peut disposer d’une base de données contenant des signaux qui modélisent un phénomène physique aléatoire. Cela peut être le cas en analyse sismique où un ensemble d’accélérogrammes mesurés in situ peut être fourni par des sismologues.
Il existe deux possibilités pour réaliser le plan d’expérience: 1) soit on crée l’échantillon des jeux de paramètres au préalable selon la méthode de tirage souhaitée et on le stocke dans un fichier de données, pour cela on peut utiliser un logiciel dédié comme OpenTURNS ou encore les toolbox dédiés de Python et Matlab2) soit on utilise l’un des opérateurs du Code_Aster pour générer une réalisation d’un processus stochastique ou d’une matrice aléatoire. Dans le cas d’un calcul dynamique transitoire, on peut ainsi utiliser des chargements temporels aléatoires générés par le Code_Aster . On peut bien sûr utiliser les deux options conjointement.
Remarque : Si, dans le cadre d’une analyse sismique, on dispose d’un échantillon de \(\mathit{Ns}\) accélérogrammes, on peut se ramener, pour le plan d’expérience, à une variable aléatoire discrète prenant des valeurs de \(1\) à \(\mathit{Ns}\) . Chaque entier désigne l’une des réalisations du processus aléatoire (c’est-à-dire un accélérogramme). Le tirage par Hypercube Latin consiste alors à parcourir les entiers de \(1\) à \(\mathit{Ns}\) .
**Attention:Les commandes* GENE_MATR_ALEA et GENE_FONC_ALEA génèrent la même suite de variables aléatoires à l’intérieur d’une même exécution de Code_Aster. Ainsi, d’une exécution à l’autre, un fichier de commande strictement identique (mêmes appels aux commandes dans le même ordre avec les mêmes arguments) fournira exactement les mêmes résultats. Ceci est dû au fait que le générateur de variables aléatoires utilisé par Code_Aster est toujours initialisé à la même valeur. Si l’on souhaite générer des résultats différents d’une exécution à l’autre, alors il faut utiliser le mot-clé INIT_ALEA. En revanche, GENE_ACCE_SEISME génère des signaux sismiques indépendants aléatoires.
2.2. Définition et lancement des études distribuées avec Code_Aster#
Il faut, dans la fenêtre astk:
1 |
définir l’étude déterministe (fichier .comm, maillage, etc.) nominale |
2 |
définir, dans le .comm, les valeurs nominales des paramètres (incertains) qui seront modifiés ensuite selon le plan d’expérience |
3 |
définir, toujours dans le .comm, la ou les variables d’intérêt et écrire ces variables dans un fichier résultat (sous format python) |
4 |
définir un répertoire output (type repe) où seront écrit ces résultats |
5 |
définir le plan d’expérience dans le .distr(jeux de paramètres pour les études à lancer) |
6 |
aller dans l’onglet «Option», choisir distrib = yes(cf. [U1.04.00] §8) |
7 |
dans l’onglet «Option», choisir classe = distr si calculs sur le serveur centralisé |
8 |
si utile, ajouter un fichier de type hostfiledéfinissant les machines disponibles (cf. [U1.04.00] §9) |
Pour plus de détail, on peut consulter le tutoriel [U2.08.07].
2.3. Récupérer les résultats des calculs dans un fichier#
Les résultats des calculs distribués avec Code_Aster sont écrites dans des fichiers de sortie qu’on retrouve dans les \(\mathit{Ns}\) répertoires nommés \({\mathit{CALC}}_{i}\) , \(i=1,\mathit{Ns}\) (cf. [U2.08.07]). Afin de procéder au post-traitement par un logiciel de statistique (comme OpenTURNS ou encore les toolbox dédiés de Python et Matlab, R), il faut rassembler l’échantillon de sorties dans un fichier de résultats unique. Ceci peut se réaliser de manière très aisée via un script python.