vattenledningsnätet i Lutorp - Department of Information Technology

11 oktober 2015
Miniprojekt
1 (5)
Beräkningsvetenskap I/KF
Institutionen för
informationsteknologi
Teknisk databehandling
Besöksadress:
MIC hus 2, Polacksbacken
Lägerhyddsvägen 2
Postadress:
Box 337
751 05 Uppsala
Telefon:
018–471 0000 (växel)
Miniprojekt: Vattenledningsnäten i Lutorp och Vingby1
Du är nyanställd på konsultföretaget Pollax Pipes AB i vattenledningsbranchen
och du har nu blivit engagerad i ditt första uppdrag vid tekniska kontoret i Gaussby kommun. Din uppgift är att kontrollera att vattenledningsnätet i den lilla tätorten Lutorp är väldimensionerat, och sedan skriva ett program med vars hjälp
man kan bygga ut vattenledningsnätet i den lite större tätorten Vingby.
Telefax:
018–52 30 49
Del 1
Hemsida:
http://www.it.uu.se
Department of
Information Technology
Scientific Computing
Före den planerade utbyggnaden består Lutorp av ett fåtal bostäder. De är anslutna till en egen del av det kommunala vattenledningsnätet. Hos Tekniska kontoret
i Gaussby kommun finns en schematisk skiss över det lokala vattenledningsnätet
i Lutorp före utbyggnaden. (Se Figur 1.)
Visiting address:
MIC bldg 2, Polacksbacken
Lägerhyddsvägen 2
Postal address:
Box 337
SE-751 05 Uppsala
SWEDEN
Telephone:
+46 18–471 0000 (switch)
Telefax:
+46 18–52 30 49
Web page:
http://www.it.uu.se
Figur 1: Skiss av vattenledningsnätet i Lutorp.
Noderna (knutpunkterna) i nätet är numrerade 1, 2, 3, 4, 5, 6. Till nod 1 är en
vattenreservoar ansluten, och nod 5 och 6 är kopplade till avtappningskranar i
två bostäder. Tryckvärdena i de olika noderna betecknas med p1 , p2 , p3 , p4 , p5
respektive p6 . Ditt uppdrag är beräkna trycket i de inre noderna (2, 3 & 4) och se
till att vattentornet är dimensionerat så att trycket i dessa noder är tillräckligt högt.
1
Del 1 baseras på Problem 5.1 i A. Quarteroni & F. Saleri, Scientific Computing with MATLAB,
Springer-Verlag Berlin Heidelberg, 2003
2 (5)
Matematisk modell
Trycket anges som skillnaden mellan vattentrycket och det omgivande atmosfäriska trycket. I beräkningarna används därför en skala där det atmosfäriska trycket
sätts till 0. För beräkningen av trycket används följande samband:
1. För rörledning nummer j kan vattenflödeshastigheten Qj (i m3 /s) uttryckas:
Qj = kL (pin − put ) .
(1)
Beteckningar: 1/k är det hydrauliska motståndet i den aktuella rörledningen, så k är inversen av det hydrauliska motståndet vilket mäts i m2 /bar · s.
L är rörledningens längd i m. pin är trycket vid inloppet till rörledningen
och put är trycket vid utloppet från samma rörledning, där trycken mäts i
bar. I det här fallet är k konstant och lika med 0.001.
2. Summan av flödena in till en knutpunkt är lika med summan av flödena ut
från samma knutpunkt.
Samband 2 ovan ger följande ekvationer för de tre inre noderna i Lutorps vattenledningsnät (se Figur 1):
Punkt 2:
Q1 = Q2 + Q3
Punkt 3:
Q3 = Q4 + Q6
Punkt 4:
Q2 + Q4 = Q5
Tekniska kontoret tillhandahåller en tabell över värdena på k och L för de rörledningar som ingår i Lutorps vattenledningsnät före utbyggnaden:
rör
1
2
3
L
300
500
500
rör
4
5
6
L
600
500
500
Vidare är trycket i vattenreservoaren 10 bar och trycket p vid avtappningsställena
cirka 0 bar.
Genom att lägga in sambandet (1) i ekvation 2 och värdena för k och L, får vi
efter förenkling följande system av sex ekvationer för trycken i de olika noderna:









1.0
0
0
0
0
0
0.3 −1.3 0.5
0.5
0
0
0
0.5 −1.6 0.6
0 0.5
0
0.5
0.6 −1.6 0.5 0
0
0
0
0
1.0 0
0
0
0
0
0 1.0









p1
p2
p3
p4
p5
p6


 
 
 
 
=
 
 
 
10
0
0
0
0
0









(2)
3 (5)
Uppgift
Skriv i Matlab ett program (ett matlabscript/kommandofil) som ställer upp detta
system, löser det med Matlabs inbyggda ”backslash”-operator samt skriver ut lösningen. Dessutom ska programmet rita upp en graf över trycket i de olika noderna.
Utskriften och grafen ska vara sådan att dina uppdragsgivare på Tekniska kontoret
förstår den utan att du behöver ge någon kompletterande, muntlig information. I
grafen ska man på x-axeln se knutpunkternas nummer och i y-led de beräknade
tryckvärdena.
Förutom ovanstående vill man kontrollera att trycket i systemet är tillräckligt högt
genom att beräkna medeltrycket. I Lutorp vill man inte att medeltrycket ska understiga 20 bar. Medelvärdet över trycken kan beräknas med hjälp av MATLABs
inbyggda funktion mean. Om p är en vektor så beräknas medelvärdet genom
kommandot medeltryck = mean(p); (där medeltryck och p är variabler och kan ersättas med vilka variabelnamn som helst).
Lägg till beräkning av medelvärdet till ditt program. Lägg dessutom till en inläsning av trycket i vattentornet, dvs när programmet körs så ska alltså användaren
själv mata in pr från kommandofönstret. Resultatet ska presenteras i en graf där
man på x-axeln ska se knutpunkternas nummer och i y-led de beräknade tryckvärdena.Använd sedan ditt program för att se ungefär hur högt trycket i vattentornet
minst måste vara för att medeltrycket ska bli minst 20 bar.
Du kan göra detta genom ”trial-and-error”, dvs genom att köra programmet många
gånger och testa dig fram. Programmet behöver alltså inte automatiskt leta sig
fram.
Tips:
• När du ska skriva matlabprogram (matlabscript), skriv och testa kommandon direkt i kommandofönstret, för att se hur de och olika delar av problemet fungerar och kan lösas. Gör dessutom lite i taget och undersök successivt om det ser korrekt ut (t ex genom utskrifter på skärmen). Det brukar
sällan bli rätt om man skriver ett helt program i ett svep direkt i en m-fil.
• Använd det du gjort i kursens laborationer när du arbetar med miniprojekten. Alla kommandon och programmeringskonstruktioner som behövs finns
där.
4 (5)
Del 2
I Gaussby kommun ska en lite större tätort, Vingby, byggas ut kraftigt och det
behövs en motsvarande utbyggnad av vattenledningsnätet. Vingby är beläget runt
några sjöar med befolkningen koncentrerad kring stränderna. En av sjöarna är formad som en flygplansvinge, därav namnet Vingby. Det ska byggas tre vattentorn,
och uppdraget består i att dimensionera dessa för att trygga vattenförsörjningen.
Precis som i Lutorp vill man inte att medeltrycket i Vingbys vattenledningsnät
ska understiga 20 bar. Medelvärdet av trycket beräknas med hjälp av MATLABs
inbyggda funktion mean precis som tidigare.
Slutprodukten i den här uppgiften ska vara två program som utför samma sak,
men det ena programmet är effektivare än den andra. Slutprodukten motsvarar resultaten i deluppgift c och d nedan.
Här är det fråga om tusentals noder och att lägga in ett sådan ekvationssystem i
Matlab för hand blir omöjligt. Därför har ditt konsultföretag skapat ett program
för att hantera detta, och lagrat data i en fil Vingby.mat (filen finns att ladda
ned från kurshemsidan). En .mat-fil lagrar Matlab-variabler och kan läsas in i
Matlab genom kommandot load Vingby. Om du gör det kommer två variabler att laddas in, nämligen systemmatrisen A och en vektor sources. Vektorn
sources innehåller index för de noder som är källor, dvs vattentorn (för Lutorp
skulle det alltså ha blivit enbart värdet 1). För att få en bild över hur det ser ut kan
du även ladda ner en bild på vattenledningsnätet, som finns i filen Vingby.fig.
Den kan du sedan öppna i Matlab. Eftersom det är ett stort vattenledningsnät kan
du zooma in med ”förstoringsglaset” i Matlabs grafikfönster. De blå punkterna
betyder öppna kranar, och de röda punkterna är vattentorn.
Uppgift
När man löser lite större problem som det här är, är strategin att man löser lite i
taget. Man börjar med med enklast möjliga lösning, och bygger ut successivt tills
man har den färdiga slutprodukten. Dessutom inleder man vanligen med att lösa
ett lite mindre problem så man får en uppfattning över vad som händer och hur
funktioner fungerar, dvs man får en förståelse för problemet. Här följer ett förslag
på en sådan strategi som du kan följa:
a. För att förstå hur .mat-filer fungerar och hur de används, börja med samma
exempel som i Del 1, dvs Lutorp. Ladda ner Lutorp.mat och Lutorp.fig
från kurshemsidan. Kopiera ditt program från Del 1, och modifiera sedan
detta, så att du istället för att skapa matrisen för hand använder .matfilen, dvs du använder kommandot load Lutorp i din kod. Försök förstå
vad variabeln sources betyder. Titta även på figuren genom att använda
Lutorp.fig.
Ingen redovisning av denna deluppgift behövs.
b. När du förstår hur .mat-filer fungerar kan du gå vidare till att lösa problemet för området Vingby. Om du inte redan gjort det så laddar du först
ner Vingby.mat och Vingby.fig. Observera att Vingby har flera vattentorn som användaren skall kunna bestämma trycket i. Programmet ska
kunna fungera oberoende av hur många vattentorn som finns i nätet. Det
5 (5)
ska alltså automatiskt fråga efter tryck i rätt antal vattentorn och skapa högerledet efter detta. Här måste du använda en programmeringskonstruktion
och du måste förstå hur variabeln sources fungerar.
Ingen redovisning av denna deluppgift behövs.
c. Precis som i Lutorp vill man att medeltrycket i Vingbys vattenledningsnät
inte ska understiga 20 bar. Utvidga nu programmet så att användaren kan ge
olika värden på trycken i vattentornen, så att man kan komma fram till en
fördelning där trycken är tillräckligt hög. När användaren testar olika tryck
i vattentornen skall medeltryck visas på skärmen. När resultatet har presenterats, så ska användaren ges möjlighet att mata in nya tryck i vattentornen,
titta på resultatet, mata in nya tryck i vattentornen igen etc. Detta upprepas
tills användaren väljer att inte mata in ytterligare värden. Det är inte säkert
att användaren vill se en graf efter varje test, och därför ska detta kunna väljas efter varje beräkning. När du är klar med detta har du nått slutprodukten,
och det här programmet redovisas.
d. När man kör många test, är det viktigt att det inte tar för lång tid att köra programmet. Kanske finns det ett sätt att snabba upp beräkningarna? Fundera ut
och implementera ett effektivare sätt att utföra de upprepade beräkningarna,
så att resultaten från tidigare beräkningar så långt som möjligt återanvänds
när nya tryck behandlas. Redovisa även detta förbättrade program. Redovisa även något körexempel.