vattenledningsnätet i Lutorp - Department of Information Technology
Transcription
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.