Wie entferne ich starre Körperbewegungen bei linearer Elastizität?

9

Ich möchte lösen, wobei meine Steifheitsmatrix ist. Es können jedoch einige Einschränkungen fehlen und daher kann immer noch eine Bewegung des starren Körpers im System vorhanden sein (aufgrund des Eigenwerts Null). Da ich CG zum Lösen des linearen Systems verwende, ist dies nicht akzeptabel, da CG manchmal nicht bei halbpositiven Problemen konvergiert (aber manchmal konvergiert ich).Ku=bK

Eigentlich verwende ich einen Ansatz der bestraften Verschiebung in dem Sinne, dass ich der elastischen Energie eine Strafe der Form hinzufüge . Die Energie lautet also wobei als genommen wird ein proportional zu einem diagonalen Eintrag der Steifheitsmatrix. Aber tatsächlich hat dies den Effekt, einen Verformungsmodus zu dämpfen, den ich manchmal gerne hätte.α||u||2

W(u):=12uT(K+αI)ubtu
α

Einige meiner Fragen sind:

a) Könnte ich das ursprüngliche System transformieren, um es frei von Singularität und positivem Definitiv zu machen (wie Koordinatentransformation oder Kongruenztransformation oder was auch immer)? Meine Idee ist es, eine solche Transformation zu verwenden, um CG für das transformierte Problem weiterhin zu verwenden

b) Gibt es einen Standardweg, um mit diesen Singularitäten umzugehen?

Vielen Dank !

Mit freundlichen Grüßen,

Tom

Tom
quelle

Antworten:

6

Der Standardweg besteht darin, die Bedingung für einen beliebig gewählten Knoten hinzuzufügen . Dies stellt sicher, dass Ihr Körper sich nicht verschieben oder drehen kann und nimmt daher den Null-Eigenwert weg. Das resultierende System mit dieser Einschränkung ist auch ohne Ihre Strafzeit positiv definitiv.u(x0)=0x0

Wolfgang Bangerth
quelle
1
Vielen Dank! Ja, aber ich bin mein Fall, ich habe mehrere schwebende Unterstrukturen und kann nicht sagen, welche Knoten (3 nicht kolineare Knoten in 3D) repariert werden sollen. Aus diesem Grund frage ich mich, ob es keine übergeordnete Lösung gibt, da in meinem Fall der Nullraum bekannt ist.
Tom
Wenn Sie mehrere Strukturen haben, müssen Sie einen Knoten für jede Struktur festlegen. Es spielt keine Rolle, welche, wählen Sie einfach eine pro Struktur.
Wolfgang Bangerth
3
@WolfgangBangerth Dies ist 3D-Elastizität, daher müssten Sie drei nicht kolineare Punkte fixieren, um den Nullraum der Dimension 6 zu steuern. Das Fixieren dieser drei Verschiebungen ist eine Störung von Rang 9 und es ist nicht einfach sicherzustellen, dass die Modifikation von Rang 3 über den Wert hinausgeht Der Nullraum ändert nichts an der Lösung. Für jede Auswahl von Punkten und Werten gibt es eine dreidimensionale Familie von rechten Seiten, in der Ihr festgestecktes Problem nur für ein Mitglied die richtige Antwort gibt.
Jed Brown
Nein, Sie können nicht 3 Punkte für 9 Einschränkungen festlegen, da Sie dann auch deren relative Abstände festlegen würden. Wenn Ihre Randbedingungen wirklich keine anderen Einschränkungen bieten (z. B. wenn es sich nicht um eine normale Verschiebung auf einem Kreis handelt), müssen Sie 1 Punkt + verschiedene Drehwinkel an zwei anderen Punkten für insgesamt 6 Einschränkungen festlegen.
Wolfgang Bangerth
6

Wenn Sie den Nullraum kennen, können Sie die rechte Seite kompatibel machen und die Krylov-Methode verhindern, dass der Vorkonditionierer Verschmutzung verursacht. Siehe Warum ist das Feststecken eines Punkts zum Entfernen eines Nullraums schlecht? zur weiteren Diskussion. In PETSc erfolgt dies mithilfe des MatNullSpaceObjekts. Beachten Sie, dass Sie Ihre eigene Funktion zum Projizieren des Nullraums bereitstellen können. Dies wäre hilfreich, um die Projektionskosten zu reduzieren, wenn Sie viele schwebende Strukturen haben.

Wenn Sie den Nullraum nicht kennen und eine inkompatible rechte Seite nicht vermeiden können, gibt es spezielle Krylov-Methoden wie MINRES-QLP , die trotz allem die minimale Normlösung finden können. Dieser Ansatz kann nützlich sein, wenn Sie Scharniere und Einzelpunktverbindungen haben, die nur einige Modi koppeln. Beachten Sie, dass Sie immer noch vorsichtig mit dem Vorkonditionierer sein müssen, der Verschmutzung verursacht (z. B. aufgrund der LU-Faktorisierung, bei der keine Drehpunkte gefunden werden, möglicherweise auf einem groben Multigrid-Niveau).

Jed Brown
quelle
Danke Jed! Ich dachte darüber nach, den Nullraum direkt in meiner iterativen Methode durch Projektion zu entfernen. Aber ich habe mich gefragt, ob es nicht zu teuer ist (ich kann einen Operator erstellen, der den Nullraum projiziert, da seine Elastizität wirklich trivial ist). Auch denke ich, dass der Rest auch projiziert werden sollte?
Tom
2
Machen Sie die rechte Seite kompatibel und projizieren Sie den Nullraum nach jeder Vorkonditioniereranwendung (da viele Vorkonditionierer den Nullraum kontaminieren). Dies ergibt einen Krylov-Operator so dass orthogonal zum Nullraum ist. Da Ihr Problem symmetrisch ist, benötigen Sie keine andere Routine für den linken und rechten Nullraum. Dies ist, was PETSc tut, wenn Sie anrufen . K=(IN)P1A{b,Kb,K2b,}MatSetNullSpace()
Jed Brown