Come rimuovere i movimenti del corpo rigido nell'elasticità lineare?


9

Voglio risolvere dove K è la mia matrice di rigidità. Tuttavia, possono mancare alcuni vincoli e pertanto alcuni movimenti del corpo rigidi possono essere ancora presenti nel sistema (a causa di autovalore zero). Dal momento che sto usando CG per risolvere il sistema lineare, questo non è accettabile poiché a volte CG non converge su problemi semi-positivi (ma a volte posso convergere).Ku=bK

In realtà sto usando un approccio di spostamento penalizzato, nel senso che sto aggiungendo una penalità del modulo all'energia elastica. Quindi l'energia legge W ( u ) : = 1α||u||2doveαpreso come proporzionale a qualche entrata diagonale della matrice di rigidezza. Ma in realtà questo ha l'effetto di smorzare alcune modalità di deformazione che un giorno mi piacerebbe avere.

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

Alcuni la mia domanda è:

a) potrei trasformare il sistema originale in modo da renderlo libero dalla singolarità e dal definito positivo (come la trasformazione di coordinate o trasformazione di congruenza o altro)? La mia idea è quella di utilizzare tale trasformazione per usare ancora CG sul problema trasformato

b) Esiste un modo standard per affrontare queste singolarità?

Grazie mille !

Cordiali saluti,

Tom

Risposte:


6

u(x0)=0x0


1
Grazie! Sì, ma nel mio caso ho diverse sottostrutture mobili e non so dire quali nodi (3 nodi non lineari in 3D) da riparare. Questo è il motivo per cui mi chiedo se non esiste una soluzione di livello superiore poiché nel mio caso lo spazio nullo è ben noto.
Tom,

Se si dispone di più strutture, è necessario correggere un nodo per ciascuna struttura. Non importa quale, basta sceglierne uno per struttura.
Wolfgang Bangerth,

3
@WolfgangBangerth Questa è l'elasticità 3D, quindi è necessario appuntare tre punti non lineari per controllare lo spazio nullo della dimensione 6. L'inserimento di questi tre spostamenti è una perturbazione di grado 9 e non è facile garantire che la modifica di grado 3 oltre la lo spazio null non cambia la soluzione. Per ogni scelta di punti e valori da appuntare, esiste una famiglia tridimensionale di lati destri in cui il problema appuntato fornisce la risposta corretta per un solo membro.
Jed Brown,

No, non è possibile aggiungere 3 punti per 9 vincoli perché si fisserebbero anche le loro distanze relative. Se le condizioni al contorno non prevedono altri vincoli (ad es. Se non sono uno spostamento normale su un cerchio), è necessario fissare 1 punto + vari angoli di rotazione su altri due punti per un totale di 6 vincoli.
Wolfgang Bangerth,

6

Se conosci lo spazio nullo, puoi rendere compatibile il lato destro e avere il metodo Krylov per evitare che il precondizionatore causi inquinamento, vedi Perché bloccare un punto per rimuovere uno spazio nullo è male? per ulteriori discussioni. In PETSc, questo viene fatto usando l' MatNullSpaceoggetto. Si noti che è possibile fornire la propria funzione per proiettare lo spazio nullo, il che sarebbe utile per ridurre i costi di proiezione quando si hanno molte strutture mobili.

Se non si conosce lo spazio nullo e non si può evitare un lato destro incompatibile, esistono metodi Krylov specializzati come MINRES-QLP che possono trovare la soluzione di norma minima nonostante. Questo approccio può essere utile se si hanno cerniere e connessioni a punto singolo che accoppiano solo alcune modalità. Si noti che è ancora necessario fare attenzione al precondizionatore che causa l'inquinamento (ad esempio, a causa della fattorizzazione LU che trova zero perni, forse a un livello grossolano di multigrid).


Grazie Jed! Ho pensato di rimuovere per proiezione lo spazio nullo direttamente nel mio metodo iterativo. Ma mi chiedevo se non fosse troppo costoso (posso creare un operatore che proietta lo spazio nullo poiché è davvero banale nell'elasticità). Inoltre penso che anche il residuo debba essere proiettato?
Tom,

2
K=(IN)P1A{b,Kb,K2b,}MatSetNullSpace()
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.