Je me demande comment les conditions aux limites de Dirichlet dans les matrices d'éléments finis clairsemées globales sont effectivement mises en œuvre efficacement. Par exemple, disons que notre matrice d'éléments finis globale était:
Ensuite, pour appliquer une condition de Dirichlet sur le premier nœud ( ), nous allons mettre à zéro la première ligne, mettre un 1 à K 11 et soustraire la première colonne du côté droit. Par exemple, notre système deviendrait: K = [ 1 0 0 0 0 0 4 1 0 0 0 1 6 3 2 0 0 3 7 0 0 0 2 0 3 ]
Les avantages de cette méthode sont qu'elle maintient la symétrie de la matrice tout en étant très efficace pour les formats de stockage clairsemés. Mes questions sont alors les suivantes:
Comment les conditions aux limites de Dirichlet sont-elles généralement implémentées dans les codes d'éléments finis pour la chaleur / les fluides? Les gens utilisent-ils généralement la méthode des grands nombres ou font-ils autre chose? Y a-t-il un inconvénient à la méthode des grands nombres que quelqu'un peut voir? Je suppose qu'il existe probablement une méthode standard efficace utilisée dans la plupart des codes commerciaux et non commerciaux qui résout ce problème (évidemment, je ne m'attends pas à ce que les gens connaissent tous les rouages internes de chaque solveur commercial à éléments finis, mais ce problème semble fondamental / fondamental assez que quelqu'un a probablement travaillé sur de tels projets et pourrait fournir des conseils).
Réponses:
Dans deal.II ( http://www.dealii.org - clause de non-responsabilité: je suis l'un des principaux auteurs de cette bibliothèque), nous éliminons les lignes et les colonnes entières, et ce n'est pas trop cher dans l'ensemble. L'astuce consiste à utiliser le fait que le modèle de densité est généralement symétrique, de sorte que vous savez quelles lignes vous devez examiner lors de l'élimination d'une colonne entière.
À mon avis, la meilleure approche consiste à éliminer ces lignes et colonnes dans les matrices de cellules, avant de les ajouter à la matrice globale. Là, vous travaillez avec des matrices complètes, donc tout est efficace.
Je n'ai jamais entendu parler de l'approche des grands nombres et je ne l'utiliserais pas car cela entraînera sûrement des problèmes terriblement mal conditionnés.
Pour référence, les algorithmes que nous utilisons dans deal.II sont décrits conceptuellement dans les cours 21.6 et 21.65 à http://www.math.colostate.edu/~bangerth/videos.html . Ils correspondent étroitement à votre description.
la source
Zéro BC est facile. Pour les BC non nuls, vous pouvez également utiliser des multiplicateurs de Lagrange. Par exemple, voir ici . L'un des avantages des LM est que vous pouvez utiliser n'importe quelle équation de contrainte, bien que le système devienne indéfini, vous avez donc besoin d'un solveur approprié.
la source