Kf1 - Differentialekvationer och tekniska beräkningar del A, TMA 225 - 2003

Datorstudioövning 8: MyFirst2DPoissonSolver.

Börja med att läsa igenom det utdelade materialet om Robinrandvillkor (2D).

Dagens uppgift är att bygga ut programmet MyFirst2DPoissonSolver till en komplett FEM-lösare för stationära (d.v.s. icke-tidsberoende) reaktions-diffusionsproblem med Robinrandvillkor i två rumsdimensioner.

Huvudmomenten i MyFirst2DPoissonSolver är:

  - Assemblera matriser (A, Mc, R) och vektorer (b, rv).
- Lös det linjära ekvationssystemet.
- Plotta lösningen.
Dessa steg är implementerade på följande sätt:

Huvudprogrammet MyFirst2DPoissonSolver anropar funktionen MyFirst2DPoissonAssembler, i vilken assembleringen av matriser och vektorer görs.

MyFirst2DPoissonAssembler anropar i sin tur funktionerna a_2D, c_2D, f_2D, vilka specificerar koefficienterna i differentialekvationen, samt gamma_2D, g_D_2D, g_N_2D, vilka specificerar Robinrandvillkoren.

Lösning av det linjära ekvationssystemet och plottning av lösningen görs slutligen i MyFirst2DPoissonSolver.

Den enda skillnaden mot det en-dimensionella fallet i MyFirstPoissonSolver är att vi i detta fall skapade partitionen (t.ex. p = 0:1/10:1) inuti MyFirstPoissonSolver. Nu antar vi att det redan finns matriser p, t och e som beskriver partitionen (d.v.s. trianguleringen i 2D). Vi har på de senaste studioövningarna skapat sådana för hand (i alla fall p och t), men skall strax se hur detta kan göras automatiskt med Partial Differential Equations (PDE) Toolbox.

Du öppnar huvudprogramsfilen MyFirst2DPoissonSolver.m i Matlabs editor genom att skriva

  >> edit K:\Matkfkb\0102\detb-a-k-kf-1\MyFirst2DPoissonSolver
Spar programmet i ett av dina egna bibliotek.

Fortsätt nu med att öppna, samt spara hos dig själv, funktionsfilerna MyFirst2DPoissonAssembler.m, a_2D.m, c_2D.m, f_2D.m, gamma_2D.m, g_D_2D.m, och g_N_2D.m, vilka samtliga ligger i kursbiblioteket K:\Matkfkb\0102\detb-a-k-kf-1\.

Gå igenom koden i MyFirst2DPoissonSolver.m noggrant, så du förstår programmets struktur. Denna kod behöver du inte göra något med själv.

Fortsätt med att gå igenom koden i MyFirst2DPoissonAssembler.m. Assembleringen av massmatrisen, Mc, är (så när som på koefficienten c) identisk med det vi gjorde på förra studioövningen och finns därför redan inlagd. Det du alltså själv måste göra är att, på de platser i koden där det står ???, komplettera MyFirst2DPoissonAssembler.m så att styvhetsmatrisen, A, lastvektorn, b, och randbidragen till ekvationssystemet, matrisen R och vektorn rv, assembleras.

Prova nu att lösa exemplet som finns beskrivet i MyFirst2DPoissonSolver.m: Kontrollera först att filerna a_2D.m, c_2D.m, f_2D.m, gamma_2D.m, g_D_2D.m, och g_N_2D.m är korrekt definierade.

Innan du kan köra programmet måste du skapa matriserna p, t och e som beskriver trianguleringen. Vi skall nu se hur vi kan göra detta automatiskt i Matlab. För detta ändamål använder vi PDE Toolbox, till vilken det finns ett grafiskt användargränssnitt (GUI) som du startar inifrån Matlab genom att skriva


  >> pdetool

Vi börjar med att rita området Omega = [-1, 1] x [-0.8, 0.8].

För att underlätta ritningen: markera Grid och Snap i menyn Options. Detta lägger ut en grid, samt linjerar upp objekten du ritar med grid:en.

Rita nu Omega genom att klicka på rektangelikonen längst uppe till vänster (under File), placera musmarkören över [-1; -0.8], samt klicka och dra med vänster musknapp. Släpp när markören står över (1; 0.8).

Du kan nu triangulera området genom att klicka på ikonen med en triangel på (under Mesh).

Prova att markera Show Node Labels samt Show Triangle Labels i menyn Mesh. För att se tydligare kan du använda zoom-funktionen (ikonen med förstoringsglas snett under Help).

För att kunna använda oss av matriserna p, t och e exporterar vi dem till Matlabs workspace genom att välja Export Mesh... från menyn Mesh. Klicka på OK.

Skriv


  >> whos

vid Matlab-prompten för att se efter att du har lyckats exportera matriserna. Notera deras storlek. Hur många trianglar respektive noder är det i din mesh?

Om allt gått väl kan du nu köra programmet med kommandot >> MyFirst2DPoissonSolver. 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), på det sätt som finns beskrivet i slutet av MyFirst2DPoissonSolver.m.

Lycka till!!!

Tillbaka till kurshemsidan.


Editor: Georgios Foufas
Last modified: 2003-05-02