Comment supprimer les mouvements de corps rigides dans l'élasticité linéaire?

9

Je veux résoudre où est ma matrice de rigidité. Cependant, certaines contraintes peuvent manquer et donc un mouvement de corps rigide peut être encore présent dans le système (en raison de la valeur propre zéro). Puisque j'utilise CG pour résoudre le système linéaire, cela n'est pas acceptable car parfois CG ne converge pas sur des problèmes semi-positifs (mais je peux parfois converger).Ku=bK

En fait, j'utilise une approche de déplacement pénalisé dans le sens où j'ajoute une pénalité de la forme à l'énergie élastique. Donc l'énergie lit où \ alpha pris comme une entrée proportionnelle à une diagonale de la matrice de rigidité. Mais en fait, cela a pour effet d'amortir certains modes de déformation que j'aimerais parfois avoir.α||u||2

W(u): =12uT(K+αje)u-btu
α

Certains ma question est:

a) pourrais-je transformer le système d'origine de façon à le rendre exempt de singularité et de définition positive (comme la transformation de coordonnées ou la transformation de congruence ou autre)? Mon idée est d'utiliser une telle transformation pour continuer à utiliser CG sur le problème transformé

b) Existe-t-il un moyen standard de gérer ces singularités?

Merci beaucoup !

Sincères amitiés,

À M

À M
la source

Réponses:

6

La méthode standard consiste à ajouter la contrainte pour un nœud choisi arbitrairement . Cela garantit que votre corps ne peut pas se traduire ou tourner et enlève donc la valeur propre zéro. Le système résultant avec cette contrainte est défini positif même sans votre peine de pénalité.u(X0)=0X0

Wolfgang Bangerth
la source
1
Je vous remercie! Oui, mais je suis dans mon cas, j'ai plusieurs sous-structures flottantes et je ne peux pas dire quels nœuds (3 nœuds non colinéaires en 3D) corriger. C'est pourquoi je me demande s'il n'y a pas de solution de niveau supérieur car dans mon cas l'espace nul est bien connu.
Tom
Si vous avez plusieurs structures, vous devez corriger un nœud pour chaque structure. Peu importe lequel, choisissez-en un par structure.
Wolfgang Bangerth
3
@WolfgangBangerth Il s'agit de l'élasticité 3D, vous devez donc épingler trois points non colinéaires pour contrôler l'espace nul de la dimension 6. L'épinglage de ces trois déplacements est une perturbation de rang 9 et il n'est pas facile de s'assurer que la modification de rang 3 au-delà de la l'espace nul ne change pas la solution. Pour tout choix de points et de valeurs à épingler, il existe une famille tridimensionnelle de côtés droits dans laquelle votre problème épinglé donne la bonne réponse pour un seul membre.
Jed Brown
Non, vous ne pouvez pas épingler 3 points pour 9 contraintes, car vous fixeriez également leurs distances relatives. Si vos conditions aux limites ne fournissent vraiment aucune autre contrainte (par exemple, s'il n'y a pas de déplacement normal sur un cercle), vous devez fixer 1 point + différents angles de rotation sur deux autres points pour un total de 6 contraintes.
Wolfgang Bangerth
6

Si vous connaissez l'espace nul, vous pouvez rendre le côté droit compatible et faire en sorte que la méthode Krylov empêche le préconditionneur de causer de la pollution, voir Pourquoi épingler un point pour supprimer un espace nul est-il mauvais? pour une discussion plus approfondie. Dans PETSc, cela se fait en utilisant l' MatNullSpaceobjet. Notez que vous pouvez fournir votre propre fonction pour projeter l'espace nul, ce qui serait utile pour réduire le coût de projection lorsque vous avez de nombreuses structures flottantes.

Si vous ne connaissez pas l'espace nul et ne pouvez pas éviter un côté droit incompatible, il existe des méthodes Krylov spécialisées comme MINRES-QLP qui peuvent malgré tout trouver la solution de norme minimale. Cette approche peut être utile si vous disposez de charnières et de connexions monopoint qui ne couplent que certains modes. Notez que vous devez toujours faire attention au préconditionneur causant la pollution (par exemple, en raison de la factorisation LU qui trouve des pivots zéro, peut-être à un niveau grossier de multigrille).

Jed Brown
la source
Merci Jed! J'ai pensé à supprimer par projection l'espace nul directement dans ma méthode itérative. Mais je me demandais si ce n'était pas trop cher (je peux créer un opérateur qui projette l'espace nul car il est vraiment trivial en élasticité). Je pense aussi que le résidu devrait également être projeté?
Tom
2
K=(je-N)P-1UNE{b,Kb,K2b,}MatSetNullSpace()