Gå til innhold

Behandling av geometriske randbetingelser

Den lineære ligningen \(\boldsymbol{K} d\boldsymbol{u} = \boldsymbol{R}\) som løses ved hver iterasjon i Newton-Raphson-metoden, inneholder ennå ikke geometriske randbetingelser (forskyvningsbetingelser). Dette kapitlet viser hvordan stivhetsmatrisen \(\boldsymbol{K}\) og restvektoren \(\boldsymbol{R}\) må endres for frihetsgrader med forskyvningsbetingelsen \(\boldsymbol{u} = \bar{\boldsymbol{u}}\), slik at forskyvningen etter iterasjonen når den foreskrevne verdien. Flerpunktbegrensninger (MPC) og ikke-lineære betingelser knyttet til kontakt behandles separat; se Flerpunktbegrensninger og Kontakt.

Prinsipp om å beholde bundne forskyvninger som ukjente

Forskyvningen til en node med en geometrisk randbetingelse er ikke lenger en ukjent variabel, men er fastsatt til den foreskrevne verdien \(\bar{u}_i\). Disse frihetsgradene kan behandles som konstanter og elimineres fra den lineære ligningen \(\boldsymbol{K} d\boldsymbol{u} = \boldsymbol{R}\), men i FrontISTR håndheves betingelsen ved å omskrive \(\boldsymbol{K}\) og \(\boldsymbol{R}\) samtidig som de bundne frihetsgradene beholdes i korreksjonsvektoren \(d\boldsymbol{u}\) på samme måte som øvrige frihetsgrader.

Med denne metoden endres verken dimensjonen til koeffisientmatrisen eller rekkefølgen på frihetsgradene avhengig av om det finnes betingelser. Det er derfor ikke nødvendig å eliminere variabler og pakke om ledige rader og kolonner. Slik ompakking er komplisert i en implementasjon der koeffisientmatrisen lagres som en spredt matrise, og FrontISTR bruker derfor den sistnevnte metoden, der betingelsen oppfylles utelukkende ved å oppdatere koeffisientmatrisen og høyresiden.

Målverdi for Newton-Raphson-korreksjonen

For en forskyvningsbundet frihetsgrad \(i\) skal korreksjonen \(du_i\) som beregnes i Newton-Raphson-iterasjonen være

\[ du_i = d\bar{u}_i \equiv \begin{cases} \bar{u}_i & (\text{1. iterasjon}) \\ 0 & (\text{2. og senere iterasjoner}) \end{cases} \]

\(\boldsymbol{K}\) og \(\boldsymbol{R}\) endres slik at korreksjonen får denne verdien. Dermed når forskyvningsinkrementet den foreskrevne verdien \(\bar{u}_i\) i 1. iterasjon; fra og med 2. iterasjon blir korreksjonen \(0\), og den foreskrevne verdien opprettholdes.

Prosedyre for endring av matrise og restvektor

Målverdien i forrige avsnitt oppnås med følgende 2 endringer, samtidig som formen på den lineære ligningen \(\boldsymbol{K} d\boldsymbol{u} = \boldsymbol{R}\) beholdes.

  1. Diagonalisering av rad \(i\): Erstatt diagonalleddet \(K_{ii}\), som er koeffisienten til \(du_i\), med \(1\), erstatt alle andre koeffisienter \(K_{ij}\ (j \not= i)\) med \(0\), og sett høyresiden til \(R_i \to d\bar{u}_i\). Ligningen i rad \(i\) blir da \(du_i = d\bar{u}_i\).
  2. Flytting fra radene \(j(\not= i)\): For hver rad \(j(\not= i)\), dersom \(K_{ji} \not= 0\), flyttes leddet \(K_{ji} du_i = K_{ji} d\bar{u}_i\) til høyresiden. Det vil si at \(K_{ji} d\bar{u}_i\) trekkes fra høyresiden, og koeffisienten \(K_{ji}\) til \(du_i\) settes til \(0\).

Skrevet komponentvis korresponderer ligningene før og etter endringen som følger.

\[ \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} \]

La den endrede koeffisientmatrisen og høyresiden betegnes henholdsvis \(\tilde{\boldsymbol{K}}\) og \(\tilde{\boldsymbol{R}}\). Den lineære ligningen som til slutt skal løses, er

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

Hvis det finnes flere bundne frihetsgrader, brukes endringene 1 og 2 ovenfor etter tur for hver bundne frihetsgrad \(i\).

Behandlingsområde i implementasjonen med spredt matrise

I implementasjonen lagres koeffisientmatrisen \(\boldsymbol{K}\) som en spredt matrise. Derfor utføres behandlingen av radene \(j(\not= i)\) i prosedyre 2 i forrige avsnitt bare for rader som har ikke-null-elementer i kolonne \(i\), det vil si frihetsgrader i noder som er koblet via elementer til den bundne frihetsgraden \(i\). For frihetsgrader uten slik forbindelse er \(K_{ji} = 0\), og flyttingen endrer derfor ikke høyresiden. Denne begrensningen gjør at behandlingen av betingelser kan fullføres med bare lokale operasjoner i forhold til det totale antallet noder.

Relaterte emner