Przejdź do treści

Obsługa geometrycznych warunków brzegowych

Metoda Newtona-Raphsona rozwiązuje w każdej iteracji równanie liniowe \(\boldsymbol{K} d\boldsymbol{u} = \boldsymbol{R}\), lecz geometryczne warunki brzegowe (więzy przemieszczeń) nie zostały jeszcze uwzględnione w tym równaniu. W tym rozdziale pokazano, jak zmodyfikować macierz sztywności \(\boldsymbol{K}\) i wektor residuum \(\boldsymbol{R}\) dla stopni swobody, na które nałożono więzy przemieszczeń \(\boldsymbol{u} = \bar{\boldsymbol{u}}\), tak aby przemieszczenie po iteracji osiągało wartość zadaną. Więzy wielopunktowe (MPC) oraz nieliniowe więzy związane z kontaktem są obsługiwane oddzielnie; patrz Więzy wielopunktowe i Kontakt.

Zasada pozostawiania więzów przemieszczeń jako zmiennych niewiadomych

Przemieszczenie węzła podlegającego geometrycznemu warunkowi brzegowemu nie jest już zmienną niewiadomą, lecz jest ustalone na wartość zadaną \(\bar{u}_i\). Takie stopnie swobody można byłoby traktować jako stałe i eliminować z równania liniowego \(\boldsymbol{K} d\boldsymbol{u} = \boldsymbol{R}\); jednak FrontISTR wymusza więzy przez modyfikację \(\boldsymbol{K}\) i \(\boldsymbol{R}\), pozostawiając ograniczone stopnie swobody w wektorze korekty \(d\boldsymbol{u}\) na takich samych zasadach jak pozostałe stopnie swobody.

Przy takim podejściu wymiary macierzy współczynników i kolejność stopni swobody nie zmieniają się w zależności od obecności więzów, dlatego nie trzeba eliminować zmiennych i ponownie upakowywać zwolnionych wierszy i kolumn. Ponieważ takie ponowne upakowywanie jest uciążliwe w implementacji przechowującej macierz współczynników w postaci rzadkiej, FrontISTR stosuje podejście, w którym więzy są wymuszane wyłącznie przez aktualizację macierzy współczynników i prawej strony.

Wartość docelowa korekt Newtona-Raphsona

Dla stopnia swobody \(i\) z więzem przemieszczenia niech korekta \(du_i\) otrzymana w iteracji Newtona-Raphsona wynosi

\[ du_i = d\bar{u}_i \equiv \begin{cases} \bar{u}_i & (\text{1. iteracja}) \\ 0 & (\text{2. i kolejne iteracje}) \end{cases} \]

Zmodyfikuj \(\boldsymbol{K}\) i \(\boldsymbol{R}\) tak, aby korekta przyjmowała tę wartość. Powoduje to, że przyrost przemieszczenia osiąga zadaną wartość \(\bar{u}_i\) w pierwszej iteracji; od drugiej iteracji korekta wynosi \(0\), a wartość zadana zostaje utrzymana.

Procedura modyfikacji macierzy i wektora residuum

Wartość docelową opisaną w poprzedniej sekcji uzyskuje się przez następujące dwie modyfikacje, zachowując postać równania liniowego \(\boldsymbol{K} d\boldsymbol{u} = \boldsymbol{R}\).

  1. Diagonalizacja wiersza \(i\): Zastąp wyraz diagonalny \(K_{ii}\), będący współczynnikiem przy \(du_i\), wartością \(1\), wszystkie pozostałe współczynniki \(K_{ij}\ (j \not= i)\) wartością \(0\), a prawą stronę ustaw jako \(R_i \to d\bar{u}_i\). Równanie w wierszu \(i\) przyjmuje wtedy postać \(du_i = d\bar{u}_i\).
  2. Przeniesienie z wierszy \(j(\not= i)\): Dla każdego wiersza \(j(\not= i)\), jeśli \(K_{ji} \not= 0\), przenieś składnik \(K_{ji} du_i = K_{ji} d\bar{u}_i\) na prawą stronę. Oznacza to odjęcie \(K_{ji} d\bar{u}_i\) od prawej strony i ustawienie współczynnika \(K_{ji}\) przy \(du_i\) na \(0\).

W zapisie składowym równania przed i po modyfikacji odpowiadają sobie następująco.

\[ \begin{bmatrix} K_{11} & K_{12} & \cdots & K_{1i} & \cdots & K_{1N} \\ K_{21} & K_{22} & \cdots & K_{2i} & \cdots & K_{2N} \\ \vdots & \vdots & \ddots & \vdots & & \vdots \\ K_{i1} & K_{i2} & \cdots & K_{ii} & \cdots & K_{iN} \\ \vdots & \vdots & & \vdots & \ddots & \vdots \\ K_{N1} & K_{N2} & \cdots & K_{Ni} & \cdots & K_{NN} \\ \end{bmatrix} \begin{bmatrix} du_1 \\ du_2 \\ \vdots \\ du_i \\ \vdots \\ du_N \end{bmatrix} = \begin{bmatrix} R_1 \\ R_2 \\ \vdots \\ R_i \\ \vdots \\ R_N \end{bmatrix} \]
\[ \Longrightarrow \quad \begin{bmatrix} K_{11} & K_{12} & \cdots & 0 & \cdots & K_{1N} \\ K_{21} & K_{22} & \cdots & 0 & \cdots & K_{2N} \\ \vdots & \vdots & \ddots & \vdots & & \vdots \\ 0 & 0 & \cdots & 1 & \cdots & 0 \\ \vdots & \vdots & & \vdots & \ddots & \vdots \\ K_{N1} & K_{N2} & \cdots & 0 & \cdots & K_{NN} \\ \end{bmatrix} \begin{bmatrix} du_1 \\ du_2 \\ \vdots \\ du_i \\ \vdots \\ du_N \end{bmatrix} = \begin{bmatrix} R_1 - K_{1i} d\bar{u}_i \\ R_2 - K_{2i} d\bar{u}_i \\ \vdots \\ d\bar{u}_i \\ \vdots \\ R_N - K_{Ni} d\bar{u}_i \\ \end{bmatrix} \]

Niech zmodyfikowana macierz współczynników i prawa strona będą oznaczone odpowiednio przez \(\tilde{\boldsymbol{K}}, \tilde{\boldsymbol{R}}\). Ostatecznie rozwiązywane równanie liniowe ma postać

\[ \tilde{\boldsymbol{K}}\, d\boldsymbol{u} = \tilde{\boldsymbol{R}} \]

Jeśli istnieje wiele ograniczonych stopni swobody, modyfikacje 1 i 2 opisane powyżej stosuje się kolejno do każdego ograniczonego stopnia swobody \(i\).

Zakres przetwarzania w implementacji macierzy rzadkiej

W implementacji macierz współczynników \(\boldsymbol{K}\) jest przechowywana w postaci macierzy rzadkiej. Dlatego przetwarzanie wierszy \(j(\not= i)\) w procedurze 2 z poprzedniej sekcji jest wykonywane tylko dla wierszy mających niezerowe elementy w kolumnie \(i\), czyli dla stopni swobody węzłów połączonych przez elementy z ograniczonym stopniem swobody \(i\). Dla niepołączonych stopni swobody \(K_{ji} = 0\), więc przeniesienie składnika nie zmienia prawej strony. Ograniczenie to pozwala zakończyć przetwarzanie więzów przy użyciu wyłącznie operacji lokalnych względem całkowitej liczby węzłów.

Tematy powiązane