K2/Bt2 - TMK: Tillämpad matematik K (TMA 682) - 2003/2004

Datorstudioövning 3: 1DPoissonSolver.

Dagens uppgift är att bygga ut programmet 1DPoissonSolver.m till en komplett FEM-lösare för stationära (dvs. tidsoberoende) reaktions-diffusionsproblem med Dirichlet- och Neumannrandvillkor i en rumsdimension:

$\displaystyle -u''(x)+u(x)$ $\displaystyle = f(x), \qquad x \in (a,b),$ (1)
$\displaystyle u'(a)$ $\displaystyle = \gamma[u(a)-g_{D}]+g_{N},$ (2)
$\displaystyle -u'(b)$ $\displaystyle = \gamma[u(b)-g_{D}]+g_{N}.$ (3)

Huvudmomenten i en FEM-kod är:

  1. Meshgenerering dvs. skapa en partition av intervallet [a,b].
2. Assemblering av t.ex. mass-, rand- och styvhetsmatriser M, R och S samt rand- och lastvektor r, och v.
3. Lösning av det resulterande linjära ekvationssystemet, Au = l.
4. Visualisering.
Dessa steg är ofta implementerade på följande sätt:
I. En meshgenerator delar in området i delintervall med längden h. I
   det endimensionella fallet är detta trivialt och görs i början av
   huvudprogrammet.
II. En assembleringsfunktion beräknar de matriser och vektorer, som resulterar från diskretiseringen av differentialekvationen.
III. Huvudprogrammet löser det diskreta, linjära ekvationssystemet.

Starta laborationen med att ladda hem filerna PoissonSolver1D.m och PoissonAssembler1D.m till ditt hembibliotek. Starta därefter Matlab.

Variationsformulera ekvation (1) tillsammans med homogena Dirichletvillkor. Formulera FEM för denna ekvation. Ansätt en lösningsapproximation av styckvis linjära, kontinuerliga polynom. Härled det resulterande, diskreta ekvationssystemet. Beräkna matriselementen för styvhets- och massmatrisen i fallet med en uniform indelning av intervallet [a,b] i steg med längden h.

Koden i PoissonSolver1D.m innehåller delar av rutiner för att assemblera och lösa det ekvationssystem du just härlett. Din uppgift är att, på de platser i koden där det står ???, komplettera denna så att problemet kan lösas fullständigt.

Prova nu att lösa exemplet, som finns beskrivet i slutet av PoissonSolver1D.m. Det är mycket viktigt att testa ditt program genom att jämföra din beräknade lösning med den exakta lösningen, vilken är känd i detta fall.

Lycka till!

Tillbaka till kurshemsidan.


Editor: Fredrik Bengzon
Last modified: 2003-09-11