Upload
others
View
9
Download
0
Embed Size (px)
Citation preview
UPTEC F 18063
Examensarbete 30 hpFebruari 2019
Modernisering och utveckling av befintligt beräkningsprogram för prestandauppföljning av ång- generatorer
Adam Mårtenson
Teknisk- naturvetenskaplig fakultet UTH-enheten Besöksadress: Ångströmlaboratoriet Lägerhyddsvägen 1 Hus 4, Plan 0 Postadress: Box 536 751 21 Uppsala Telefon: 018 – 471 30 03 Telefax: 018 – 471 30 00 Hemsida: http://www.teknat.uu.se/student
Abstract
Modernizing and Development of Existing CalculationProgram for Performance Monitoring of SteamGeneratorsAdam Mårtenson
This thesis is centered around the computional program PASGO.PASGO is used for calculations for making performance monitoring of thesteam generators in Ringhals reactor 3 and 4, especially concerningfouling of the steam generator tubes. The main goal of this thesisproject was to convert the program code from the programming languageTurbo Pascal 6.0 into a more modern language that works with thecurrent Windows operative systems. Apart from a straight conversion ofthe code, a function to make automatic input from an Excel-file tothe program was also requested. The thesis also includes analyzingthe correlations used for heat transfer in PASGO, to determine ifthese can be replaced with more exact correlations. The Dittus-Boeltercorrelation was used in the original program, and while it was not abad correlation, studies show that the more modern Gnielinskicorrelation has a smaller margin of error. The program code wasconverted successfully into C++ in Visual Studio, which was theprogramming language of choice. A function to enable automatic inputof data from Excel-files was successfully implemented as well. Thisfunction allows the user to run performance calculations regardingtube fouling and pressure correction values for hundreds ofperformance tests at the same time. Versions of PASGO using theGnielinski correlation were also created. These versions arerecommended for future tests, while the version using the DittusBoelter correlation is recommended for tests which will be comparedto studies made white the previous version of PASGO.
ISSN: 1401-5757, UPTEC F 18063Examinator: Tomas NybergÄmnesgranskare: Marcus BergHandledare: Anders Surén
iii
Populärvetenskaplig sammanfattning
Kärnkraften är en av de energikällor som står för störst elproduktion i Sverige. Även om antalet kärnreaktorer i drift kommer att minska de kommande åren, så kommer vi fortfa-rande använda kärnkraft under de kommande decennierna, och då är det viktigt att den kan skötas på ett effektivt och säkert sätt.
Vattenfall AB har tagit fram ett beräkningsprogram som kallas PASGO (Performance Analysis and Steam Generator Optimization). PASGO används för att utföra detaljerade prestandauppföljningar på ånggeneratorer i reaktor 3 och 4 i Ringhals’ trycksatta kärn-kraftsreaktoranläggning, med hjälp av beräkningar angående tryckfall och värmeöverfö-ring. Bland annat kan försmutsningen av tuberna i ånggeneratorerna, vilket påverkar värmeöverföringen och effekten, beräknas.
PASGOs programkod är dock skriven för många år sedan i programspråket Turbo Pa-scal 6.0, vilket är ett gammalt programspråk som inte enkelt kan köras på moderna Windows-operativsystem. Detta i kombination med att dokumentationen angående pro-grammet är bristfällig, gör att det finns ett behov av att konvertera PASGO till ett mo-dernare programspråk, samt att mer utförligt dokumentera hur programkoden fungerar.
Målet med projektet var att konvertera PASGOs programkod till ett modernare pro-gramspråk som förutspås kunna fungera på den senaste versionen av Windows under en lång framtid. Utöver en rak konvertering skulle även en del förbättringar av koden göras, vilket inkluderade införandet av en funktion som möjliggör automatisk inläsning av indata till programmet från en Excel-fil. Projektet innefattade även att analysera korre-lationerna för värmeöverföring som PASGO använder, för att bestämma huruvida dessa fortfarande är aktuella, eller om de kan bytas ut mot mer exakta sådana. Allt detta skulle också dokumenteras i form av en manual som gör det enklare för nya användare av pro-grammet att både förstå hur man kör programmet, och hur programkoden är uppbyggd. Slutligen finns det en avsikt att integrera PASGO i Ringhals’ processövervakningssy-stem PIS. Detta skulle tas hänsyn till vid val av programspråk.
Värmöverföring mellan en yta och en turbulent strömmande fluid är ett komplext feno-men, och samband utgörs av empiriskt framtagna korrelationer. Dittus-Boelters korre-lation är en av de mest använda korrelationerna för detta, och är den korrelation som PASGO använder för att göra beräkningar av värmeövergångstal för värmeöverföring mellan tuberna och vattnet i ånggeneratorn. Den modernare Gnielinskis korrelation an-ses dock vara mer exakt, och gäller även för lägre Reynolds’ tal än vad Dittus-Boelters korrelation gör.
iv
Försmutsning av dessa tuber kan försämra värmeöverföringsförmågan, och PASGO gör beräkningar av αsmuts som ett mått på detta. Ett högt värde på αsmuts betyder att det finns lite smuts på tuberna, och därmed erhålls bra värmeöverföring. En jämförelse mellan körningar där de två olika korrelationerna har använts visar att Gnielinskis korrelation ger ett större värde på αsmuts än vad Dittus-Boelters korrelation ger, men att trenderna när många körningar observeras är desamma.
C++ valdes till det programspråk som PASGO skulle konverteras till. Först gjordes en direkt konvertering utan ändringar av själva funktionerna i programmet. Sedan infördes en funktion som, utöver att manuellt skriva in data, låter PASGO automatiskt läsa in data från Excel-filer innehållandes data från Ringhals’ prestandatester. Denna automa-tiska funktion gör en körning av alla prestandatester som finns i Excel-filen, och skriver endast de viktigaste data för varje test till resultatfilen. Både den direkt konverterade versionen av PASGO, och versionen med automatisk inläsning av data från Excel-fil verifierades genom att jämföra körningar med originalversionen av PASGO som är skriven i Turbo Pascal 6.0. Båda versionerna gav resultat som var näst intill exakt över-ensstämmande med originalversionen av programmet, och bedömdes därmed vara kor-rekta.
En till version, som använder Gnielinskis korrelation istället för Dittus-Boelters korre-lation, skapades också. Värdena för αsmuts skiljer sig från dem från originalversionen av PASGO, men trenderna när många värden observeras stämmer överens. Vid analyser av dessa data används trenderna över lång sikt för att bedöma utvecklingen av tubernas försmutsning över tid, vilket betyder att båda versionerna av programmet kan användas. Teori tyder på att Gnielinskis korrelation ger de mer exakta resultaten, men mer experi-mentell data att jämföra korrelationerna med skulle behövas för att kunna bekräfta detta. Versionen som använder Gnielinskis korrelation rekommenderas för användning då det exakta värdet på αsmuts söks, samt för framtida analyser. Versionen som använder Dittus-Boelters korrelation rekommenderas istället för användning då resultaten ska jämföras med resultat från körningar gjorda med den tidigare versionen av PASGO.
v
Förord
Detta examensarbete har utförts åt Vattenfall AB. Arbetet har gjorts på avdelningen Projects & Services i Solna, även om en resa till Ringhals för diskussion också har gjorts. Rapporten är inte sekretessbelagd, men viss information, främst angående ång-generator-specifika data, är det. Av denna anledning har inte den fulla programkoden, som har varit en stor del av arbetet, inkluderats i denna rapport. Indata och resultat från programmet har, i den mån det går, inte heller inkluderats. I de fall då det är nödvändigt så är indata och resultat som skrivs i rapporten endast exempel, och stämmer inte över-ens med indata och resultat för Ringhals’ kärnkraftverk.
Jag vill först och främst tacka min handledare Anders Surén, för att du alltid har varit tillgänglig för att svara på mina frågor, och hjälpt mig under hela examensarbetets gång.
Jag vill också tacka enhetscheferna Erik Dandanell, för allmän support under den första halvan av mitt examensarbete, och Lennart Säterberg, för detsamma under den andra halvan.
Jag vill även tacka alla andra på Vattenfall Project & Services för att ni har varit väldigt inkluderande och vänliga. Ett extra tack till Derin för all hjälp och pepp i gymmet, Ga-briel för alla diskussioner om PASGO, Henrik för allt sportsnack, och Joel för alla möj-liga olika roliga konversationer.
Slutligen vill jag rikta ett stort tack till min ämnesgranskare Marcus Berg för dina goda råd under arbetet, och dina synpunkter som har hjälpt mig förbättra min rapport.
vi
Förkortningar och definitioner
PWR – Pressurized water reactor (tryckvattenreaktor)
BWR – Boiling water reactor (kokvattenreaktor)
PASGO – Performance Analysis and Steam Generator Optimization
PIS – Ringhals’ processövervakningssystem
DP – Differential pressure (tryckskillnad mellan två punkter)
DPkorr – Korrektionsfaktor för DP på primärsidan
αsmuts – Storhet för försmutsning av rör
α – Värmeövergångstal
Rf – Den globala fouling-faktorn
R – Värmeresistans
Re – Reynolds’ tal
Pr – Prandtls tal
Nu – Nusselts tal
– Dynamisk viskositet
– Kinematisk viskositet
L – Karakteristisk längd
u – Karakteristisk hastighet
a – Temperaturledningstal (thermal diffusivity)
cp – Specifik värmekapacitet per massenhet vid konstant tryck
– Värmeledningsförmåga
t – Temperatur
Qq – Yteffekt
Q – Effekt
K – Motståndstal
V – Volymitet (= 1/densitet)
ρ – Densitet
R3 – Kärnreaktorn Ringhals 3
R4 – Kärnreaktorn Ringhals 4
Varma benet – Röranslutning från reaktortanken till ånggeneratorn
vii
Kalla benet – Röranslutning från reaktorkylpumpen till reaktortanken
ÅG – Ånggenerator
Riser – Utrymme runt tuberna i ånggeneratorn
Procedure – Subrutin, alltså en funktion i Turbo Pascal 6.0 som inte returnerar ett värde
Void-funktion – Funktion i C++ som inte returnerar ett värde
Innehållsförteckning Abstract .......................................................................................................................... ii
Populärvetenskaplig sammanfattning ........................................................................ iii
Förord .............................................................................................................................. v
Förkortningar och definitioner ................................................................................... vi
1. Inledning ...................................................................................................................... 1
1.1 Bakgrund .................................................................................................................. 1
1.2 Projektbeskrivning .................................................................................................. 1
1.3 Mål ........................................................................................................................... 2
2. Teori .............................................................................................................................. 2
2.1 Kärnkraft .................................................................................................................. 2
2.2 Tryckvattenreaktor ................................................................................................... 3
2.3 Den globala fouling-faktorn och αsmuts .................................................................... 5
2.4 Reynolds’ och Prandtls tal ....................................................................................... 7
2.5 Turbulenta flöden i trycksatta kärnkraftverk ........................................................... 8
2.6 Nusselts tal och värmeövergångstalet ...................................................................... 9
3. Värmeöverföringskorrelationer ............................................................................... 11
3.1 Dittus-Boelters korrelation ..................................................................................... 13
3.2 Petukhov-Kirillov-Popovs korrelation och Gnielinskis korrelation ...................... 14
4. PASGOs uppbyggnad ............................................................................................... 17
4.1 Skillnader mellan R3 och R4 ................................................................................. 18
4.2 Huvudprogrammet ................................................................................................. 19
4.3 Filhantering ............................................................................................................ 20
4.4 Input till PASGO .................................................................................................... 20
4.5 Start ........................................................................................................................ 21
4.6 HLoop .................................................................................................................... 21
4.7 Pr_Ka ..................................................................................................................... 22
4.8 Tryckfallsberäkningar i HLoop .............................................................................. 25
4.9 Stoppvillkor ............................................................................................................ 27
4.10 Iteration av de sökta storheterna .......................................................................... 28
4.11 DP ........................................................................................................................ 29
5. Konvertering av programkod .................................................................................. 30
5.1 Val av programspråk .............................................................................................. 30
5.2 Konvertering till C++ ............................................................................................. 31
5.3 Inläsning av data från Excel-fil .............................................................................. 33
5.4 Möjlighet att ändra indata ...................................................................................... 36
5.5 Köra PASGO med automatisk inläsning av indata ................................................ 37
5.6 Verifiering av den nya koden ................................................................................. 39
5.7 Version med uppdaterade värmeöverföringskorrelationer .................................... 40
6. Diskussion ................................................................................................................... 43
6.1 Slutsatser ................................................................................................................ 45
7. Referenslista ............................................................................................................... 47
Appendix A ..................................................................................................................... 49
Appendix B ..................................................................................................................... 50
Appendix C ..................................................................................................................... 52
1
1. Inledning
1.1 Bakgrund
Kärnkraften är en viktig energikälla och står för 40% av Sveriges produktion av elektri-
citet. Det är ungefär lika mycket som vattenkraften som också står för cirka 40%, och
flera gånger mer än vindkraften som kommer på tredje plats med 11% (2017). [1] Sve-
rige har idag åtta kärnreaktorer i drift, och även om det är beslutat att två av dessa ska
stängas inom de kommande åren så kommer Sverige fortfarande ha kärnreaktorer i drift
i åtminstone 20 år till. [2] Så länge vi har kärnreaktorer i drift så är det viktigt att dessa
körs på ett säkert och effektivt sätt.
Vattenfall AB har tagit fram PASGO (Performance Analysis and Steam Generator
Optimization), ett beräkningsprogram som används för att utföra detaljerade prestanda-
uppföljningar på ånggeneratorer i reaktor 3 (R3) och reaktor 4 (R4) i Ringhals’ tryck-
satta kärnkraftsreaktoranläggning. Programmet kan också användas för att optimera
driftparametrar för nya ånggeneratorer etc. Det är ett endimensionellt beräkningspro-
gram för stationära förhållanden, och är skrivet i programspråket Turbo Pascal 6.0.
Turbo Pascal 6.0 är dock ett gammalt programspråk som inte kan köras på moderna
operativsystem som exempelvis Windows 10, vilket gör PASGO besvärligt att använda.
Dokumentation angående exakt hur PASGO fungerar och hur det ska användas är också
bristfällig. Dessa anledningar gör att det finns ett behov av att konvertera programkoden
till ett modernare programspråk så att PASGO kan användas på moderna operativsy-
stem, samt av att dokumentera hur PASGO används i en mer utförligt skriven manual
än den som nu finns tillgänglig. Konverteringen av programkoden till ett annat pro-
gramspråk ska även möjliggöra att programmet kan integreras i Ringhals’ processdata-
system, PIS, för att underlätta regelbundna prestandatester.
1.2 Projektbeskrivning
Inom detta projekt ska koden till PASGO konverteras från Turbo Pascal 6.0 till ett annat
programspråk som fungerar med moderna operativsystem såsom exempelvis Windows
10. Vid valet av programspråk ska hänsyn tas till Ringhals’ processdatasystem, PIS, för
att säkerställa att det valda programspråket kan integreras i detta. Utöver en rak konver-
2
tering av programkoden, ska även automatisk inläsning av indata från Excel-fil möjlig-
göras, då resultaten från Ringhals’ regelbundna prestandatester sparas i .xls-format.
Detta, i kombination med att koden även kommer att modifieras en del för att bli mer
lättförståelig, har syftet att göra PASGO mer användarvänligt. Den nya programkoden
ska också verifieras och dokumenteras mot den gamla programkoden för att säkerställa
att konverteringen är korrekt utförd.
Utöver själva programmeringen ska även beräkningsprocedurerna, och de däri använda
korrelationerna för värmeöverföring, analyseras för att avgöra om det finns nya förbätt-
rade korrelationer som kan ersätta de nuvarande. Slutligen ska manualen för PASGO
uppdateras så att den på ett lättförståeligt sätt beskriver hur PASGO används och funge-
rar. Detta inkluderar att förklara hur de olika beräkningsoptionerna fungerar, hur korre-
lationerna för värmeöverföring är utformade, samt vad de olika funktionerna och variab-
lerna i programmet har för roll i programmet.
1.3 Mål
Målen med detta projekt är att göra en lyckad konvertering av PASGOs programkod så
att programmet går att använda på operativsystem som exempelvis Windows 7 och
Windows 10, och att göra programmet mer användarvänligt. Målen innefattar även att
jämföra olika korrelationer för värmeöverföring, för att kunna avgöra om det finns ett
behov av att uppdatera de korrelationerna som används för tillfället. Om det visar sig att
det finns nya korrelationer som låter programmet göra noggrannare beräkningar angå-
ende framför allt försmutsning på tuberna i ånggeneratorn, så ska de gamla korrelation-
erna bytas ut mot dessa nya korrelationer.
2. Teori
2.1 Kärnkraft
Kärnkraft använder radioaktiva ämnen, ofta Uran-isotopen U-235 (235U), som bränsle.
Uran-atomerna genomgår en process kallad fission, där atomkärnorna klyvs av neutro-
ner, vilket gör att rörelseenergi samt fler neutroner frigörs. Dessa neutroner kan i sin tur
klyva andra atomkärnor. Kedjereaktionen som då uppstår gör att en mängd energi fri-
görs i processen. Den frigjorda energin används för att värma upp vatten som finns i
3
kärnkraftreaktorer, vilket gör att ånga produceras. Ångan leds vidare till en turbin som
är kopplad till en elektrisk generator. Ångan får turbinbladen att rotera, vilket i sin tur
leder till att generatorn producerar elektrisk effekt. Efter det kyls ångan ned så att den
kondenserar till vatten, som sedan leds tillbaka för att kunna kokas igen. Fissionsreakt-
ionen kontrolleras med hjälp av styrstavar som består av neutronabsorberande ämnen.
Stavarna kan sänkas eller höjas för att kontrollera hur många fria neutroner som finns i
reaktorn, och på så sätt reglera fissionsreaktionen. [3-4]
2.2 Tryckvattenreaktor
En tryckvattenreaktor, härefter kallad PWR (från engelskans ”Pressurized Water Re-
actor”), är en sorts kärnreaktor. Den utgör tillsammans med kokvattenreaktor, härefter
kallad BWR (från engelskans ”Boiling Water Reactor”), de två vanligaste reaktortyper-
na. Tre av de åtta kärnreaktorer som Sverige har i kommersiell drift för tillfället är PWR.
Både Ringhals 3 och Ringhals 4, som PASGO är avsett för, är PWR.
Figur 1 En överblicksbild av en tryckvattenreaktor. De röda delarna tillhör primärloopen medan de gula delarna
tillhör sekundärloopen. Ref. [3]
En PWR är uppbyggd av en primärloop och en sekundärloop (-slinga). En överblicks-
bild av en PWR kan ses i Figur 1 ovan. I primärloopen finns reaktorn som innehåller
kärnbränslet, medan sekundärloopen bland annat består av ånggeneratorn, turbinen, och
kondensatorn. Hela primärloopen är fylld med vatten och trycksatt till runt 15 MPa,
4
vilket är tillräckligt högt för att hindra vattnet från att koka när kärnbränslet i rektorn
värmer upp vattnet till cirka 325 ºC. Det uppvärmda vattnet flödar ut ur reaktorn genom
det så kallade ”varma benet”. Det varma benet delas upp i tusentals mindre rör när det
övergår till det så kallade tubpaketet. Tubpaketet är den del av primärloopen som leds
genom ånggeneratorn. När det varma vattnet flödar genom tubpaketet överförs värmen
genom rörväggarna till vattnet i ånggeneratorn. Att tubpaketet består av många små rör
istället för ett stort rör gör att arean där värmeöverföring kan blir större. Vattnet leds
sedan vidare från tubpaketet till det ”kalla benet”, varifrån det sedan pumpas tillbaka till
reaktorn där det kan värmas upp igen, och därmed sluta primärloopen. Delen som är till
höger om tryckkärlet i Figur 1 är tryckhållaren, vars uppgift är att reglera reaktortrycket.
En mer detaljerad bild av en ånggenerator i ett PWR kan ses i Figur 2. I sekundärloopen
är trycket lägre än i primärloopen. Vattnet i ånggeneratorns riser värms upp av primär-
loopens vatten och börjar koka. Ångan som bildas stiger upp i separatorerna högst upp i
ånggeneratorn, där vattnet separeras från ångan. Därefter leds ångan in i turbinen där
den roterar turbinbladen. Turbinens axel driver en generator, vilken i sin tur genererar
elektrisk effekt. Vattnet från separatorerna faller ner i fallspalterna (”downcomer annu-
lus”) som leder det på sidan om risern till botten av ånggeneratorn, där det leds in i ri-
sern igen. Ångan i turbinen fortsätter genom en kondensator där den kyls ned och över-
går till vatten igen. Vattnet pumpas sedan in i ånggeneratorn som matarvatten, där det i
fallspalten blandas med vattnet från separatorerna, innan det leds in i risern där det kan
värmas upp igen, vilket sluter sekundärloopen.
5
Figur 2 En ånggenerator i ett PWR sett från sidan. Ref. [16]
I kontrast till PWR så har BWR bara en loop där trycket är lägre än i primärloopen i
PWR. Reaktorn och ånggeneratorn är då kombinerade, vilket betyder att kärnbränslet
värmer upp vattnet i reaktorn så det börjar koka, och den producerade ångan leds genom
separatorerna till turbinen. De roterande turbinbladen gör så att generatorn genererar el,
varefter ångan kyls ned och kondenserar till vatten i kondensatorn, innan vattnet slutlig-
en pumpas tillbaka till reaktorn igen. [3-4]
2.3 Den globala fouling-faktorn och αsmuts
Prestandan för kärnkraftverk förändras allt eftersom det är i drift. En PWR som har varit
i bruk i 20 år kan ha tydliga skillnader i prestanda jämfört med en nybyggd PWR. En
bidragande faktor till detta är försmutsning av rören, vilket också kallas för fouling. Ett
mått på fouling är den globala fouling-faktorn som anges i [m2K/kW]. Korrosionspro-
dukter, till exempel järn, transporteras på sekundärsidan med matarvattnet till ånggene-
ratorn där de samlas som en beläggning på tubernas ytor. Över lång tid byggs dessa la-
ger på och blir tjockare. Korrosionen sker främst i vatten på utsidan av dessa tuber. Att
fouling byggs upp på utsidan av tuberna kan påverka värmeöverföringsförmågan från
primärloopens vatten i tubpaketet till vattnet i ånggeneratorns tank på sekundärsidan,
vilket i sin tur påverkar hur mycket ånga som bildas, vilken effekt reaktorn har, och
därmed också den elektriska effekten. [5-7]
6
De första åren efter att en ny reaktor har tagits i drift så kan foulingen ge en ökad vär-
meöverföring. Detta beror på att en måttlig fouling gör att antalet platser för nukleation,
det vill säga platser där ångbubblor kan bildas, ökar. Ett ökat antal ångbubblor som
lossnar från tubernas yta ökar turbulensen i vattnet omkring tuberna, vilket förbättrar
värmeöverföringen. I takt med att lagret av fouling på tuberna blir tjockare och tjockare
(det kan i värsta fall bli millimetertjocka lager) under en längre tid, så blir värmeöverfö-
ringsförmågan gradvis sämre. En typisk utveckling av den globala fouling-faktorn kan
ses i Figur 3. När värmeöverföringsförmågan försämras minskar även ångtrycket i ång-
generatorn, vilket kan observeras i Figur 4. Blir ångtrycket för lågt finns det en risk att
den termiska effekten inte kan hållas vid 100 %. Det är värt att nämna att de kemiska
förhållandena i vattnet också kan påverka den globala fouling-faktorn mycket. [6-8]
Figur 3 Typisk utveckling av den globala fouling-faktorn i en ånggenerator beroende på antal år den har varit i drift.
Ref. [8]
7
Figur 4 Typisk utveckling av ångtrycket i en ånggenerator beroende på fouling. Refueling Outage är samma sak som
revisionavställning, det vill säga när en reaktor är avstängd under några veckor för underhåll. Under denna tiden
byts även delar av bränslet ut. Ref. [7]
I PASGO används αsmuts (”alfa-smuts”) [kW/(m2K)] istället för den globala fouling-
faktorn som ett mått på försmutsning av tuberna, även om den globala fouling-faktorn
används vid beräkningar i programmet. αsmuts är definierat som inversen av den globala
fouling-faktorn, det vill säga 1/Rf, där Rf är den globala fouling-faktorn. Denna omdefi-
niering beror antagligen på att den globala fouling-faktorn för försmutsning av tuber i
PWR oftast har ett värde strax över 10-2, vilket betyder att αsmuts oftast har ett värde strax
under 100, vilket kan anses vara enklare att skriva ut och läsa. Ett högt värde på αsmuts
betyder att värmeöverföringsförmågan är bra jämfört med ett lågt värde på αsmuts, vilket
är motsatsen till den globala fouling-faktorn, där ett högt värde betyder en sämre vär-
meöverföringsförmåga än ett lågt värde.
2.4 Reynolds’ och Prandtls tal Reynolds’ tal (Re) är en dimensionslös storhet inom fluidmekaniken som används för
att förutse mönster för fluiders flöden. Reynolds’ tal kan beskrivas som en kvot av trög-
hetskrafter och viskösa krafter i en fluid som utsätts för relativ inre rörelse, och är defi-
nierat enligt Ekvation 1, där ρ är fluidens densitet (kg/m3), är fluidens dynamiska vis-
kositet (kg/(m∙s)), är fluidens kinematiska viskositet (m2/s), L är en karaktäristisk
längdenhet (m), och u är en karakteristisk hastighet (m/s), som väljs olika beroende på
8
tillämpning. För ett rör är u ofta vald som fluidens medelhastighet i rörtvärsnittet (röret
antas vara stilla). [9-10]
= � = Ekvation 1
Prandtls tal (Pr) är också en dimensionslös storhet, som kan beskrivas som en kvot av
diffusionshastigheten för rörelsemängd och diffusionshastigheten för värme. Detta be-
tyder att för en fluid med ett lågt Prandtls tal, Pr<<1, så dominerar spridningen av värme
över spridningen av rörelsemängd. Det motsatta gäller för fluider med ett stort Prandtls
tal, Pr>>1, då spridningen av rörelsemängd dominerar. Prandtls tal definieras enligt
Ekvation 2, där a är fluidens temperaturledningstal (thermal diffusivity) (m2/s), cp
(J/(kg∙K)) är fluidens specifika värmekapacitet per massenhet vid konstant tryck, och
(W/(m∙K)) är fluidens värmeledningsförmåga. [9,11]
= � = Ekvation 2
2.5 Turbulenta flöden i trycksatta kärnkraftverk
I fluidmekanik gör man skillnad på laminära och turbulenta flöden. Laminära flöden
kännetecknas av att vätskepartiklarna flödar fram lugnt längs regelbundna linjer. Lami-
nära flöden är vanliga vid låg hastighet och hög viskositet. De beror också på Reynolds’
tal, och i exempelvis rör uppstår laminära flöden vanligtvis när Reynolds’ tal är mindre
än ett kritiskt värde som ligger mellan ungefär 2000 och 2300. För laminära flöden i rör
förflyttar sig vätskepartiklarna i mitten av röret snabbare än partiklarna närmare rörets
yta, vilket beror på friktionen mot den fasta ytan. Turbulenta flöden, däremot, känne-
tecknas av att vätskepartiklarna i flödet förflyttar sig oregelbundet. Även om flödet går i
en specifik riktning så kan individuella partiklar röra sig åt olika håll, och följer inte de
regelbundna linjerna så som vätskepartiklar i laminära flöden tenderar att göra. Turbu-
lens kan börja uppstå i flöden redan vid det kritiska värdet på Reynolds tal mellan 2000
och 2300, men fullt utvecklade turbulenta flöden brukar uppstå först vid Reynolds tal
över 4000 till 5000. I Figur 5 kan ett exempel på laminärt flöde (undre halvan) respektive
turbulent flöde (övre halvan) runt en cylinder ses. [10,12]
9
Figur 5 Turbulent flöde (övre halvan) och laminärt flöde (undre halvan) runt en cylinder. Ref. [12]
Under vanliga reaktorförhållanden är flöden i och runt tuberna i PWR väldigt turbulenta.
[13] Eftersom turbulenta flöden är mycket mer komplexa än laminära flöden, betyder
detta att uttryck för värmeöverföring med mera bygger mer på empiriskt
tagna ”korrelationer” istället för teoretiskt framtagna relationer.
2.6 Nusselts tal och värmeövergångstalet
Värmeövergångstalet, α (W/(m2K)), används för att beräkna värmeutbytet mellan en
fast yta och ett omgivande, strömmande medium. Värmeövergångstalet är definierat
enligt Ekvation 3, där (W) är värmeutbytet som kan skrivas enligt Ekvation 4, med / � � som (normalkomponenten av) temperaturgradienten vid väggen (indexet �
står för ”vägg”), A som arean (m2) hos ytan, och υ som temperaturdifferensen mellan
den fasta ytan och fluiden (K). Ett exempel på en temperaturgradient för en fluid
mellan två ytor kan ses i Figur 6. Ekvation 3 och Ekvation 4 ger tillsammans ut-
trycket för värmeövergångstalet i Ekvation 5, där minustecknet för derivatan har
tagits bort och absolutbeloppet istället används då värmeövergångstalet och tem-
peraturdifferensen alltid brukar räknas positiva.
= ��� Ekvation 3 = −�� / � � Ekvation 4
10
� = � | / |�� Ekvation 5
Figur 6 Temperaturfördelning hos en strömmande fluid mellan två ytor, som båda har samma (lägre) temperatur.
Den lokala temperaturgradienten / � � visas vid den ena ytan. Ref. [9]
Temperaturgradienten vid en yta beror på strömningsförhållanden, ytans geometri, och
ämneskonstanter för mediet, vilket betyder att värmeövergångstalet är en funktion av
många parametrar. Med hjälp av de så kallade likformighetslagarna kan antalet variabler
minskas genom att storheter som påverkar värmeövergången sammanförs till grupper
som bildar dimensionslösa tal. För värmeövergångstalet får vi därmed Ekvation 6, där L
är en karakteristisk längd (lämpligt vald). I derivatan finns nu två dimensionslösa vari-
abler, t/υ som ”temperaturvariabel” och x/L som ”lägesvariabel”. Efter omskrivning fås
det dimensionslösa uttrycket för Nusselts tal (Nu), se Ekvation 7 nedan. Nusselts tal är
en dimensionslös storhet som representerar temperaturgradienten vid en yta.
� = � | / |�� = | /�/ |� Ekvation 6
� = | /�/ |� = � Ekvation 7
11
För geometriskt likformiga system ger grundekvationerna för beskrivning av tempera-
turfält (Fouriers differentialekvation) och hastighetsfält (Navier Stokes’ ekvationer) vid
påtryckt strömning att den dimensionslösa formen av temperaturfältet (bland annat)
beror av Reynolds’ och Prandtls tal. Värmeövergångstalet för temperaturfältet utanför
en yta kan därmed beskrivas av ett funktionssamband på formen i Ekvation 8. Funkt-
ionen f( ) gäller för geometriskt likformiga system.
� = ; Ekvation 8
Funktionssambandet bestäms empiriskt genom modellprov, och kan sedan användas
tillsammans med Ekvation 7 för att bestämma värmeövergångstalet. [9]
3. Värmeöverföringskorrelationer
Vattnet, som värms upp i reaktorn på primärsidan och flödar genom tubpaketet, överför
värme genom tubernas väggar till sekundärsidans vatten i ånggeneratorns tank. Vattnet
som flödar in i tubpaketet har temperaturen Thot (ºC), medan vattnet som flödar ut ur
tubpaketet har temperaturen Tcold (ºC). Temperaturskillnaden mellan vattnet som flödar
in i och ut ur tubpaketet betecknas ΔT (ºC), se Ekvation 9.
�� = �ℎ − � Ekvation 9
Ett större värde på ΔT betyder att mer värme överförs från primärsidan till sekundärsi-
dan. I PASGO beräknas effekten (W) för värmeöverföringen genom en liten area A
(m2) av en tub enligt Ekvation 10, där Rtot (m2K/W) är den totala värmeresistansen per
areaenhet hos tubens vägg.
= ��� Ekvation 10
Den totala värmeresistansen är summan av tre delar; värmeresistansen för tubens inre
yta (Ri), tubens yttre yta (Ry), och tubväggen själv (Rv), vilket kan ses i Ekvation 11. Om
en tub efter att reaktorn har varit i drift en tid också har fouling på tubens yta så uppstår
det även värmeresistans på grund av det, vilket resulterar i Ekvation 12 där Rf1 och Rf2
12
är värmeresistanserna för foulingen på tubens insida respektive utsida. Dessa två värme-
resistanser kan ersättas med en total värmeresistans för fouling, Rf, då man oftast beräk-
nar foulingens värmeresistans genom att jämföra värmeöverföring genom tubväggen för
en tub med fouling, med teoretiska värden för en tub utan fouling. De båda fallen kan
observeras i Figur 7. [6]
= � + + Ekvation 11 = � + + + + Ekvation 12
Figur 7 Värmeresistans för en ånggeneratortub som är ren (a) och en som har fouling på ytan (b). Ref. [6]
I PASGO hänförs Rtot till tubernas yttre diameter enligt Ekvation 13, där Di (m) är tu-
bernas innerdiameter, Dy (m) är tubernas ytterdiameter, och v (W/(m∙K)) är tubernas
värmeledningsförmåga. Den första termen motsvarar Ri, den andra termen motsvarar Rv,
13
och den tredje termen motsvarar Ry i Ekvation 11. αi (W/(m2K)) och αy (W/(m2K)) ges i
enlighet med Ekvation 7 av Ekvation 14 respektive Ekvation 15, där (W/(m∙K)) är
värmeledningsförmågan för fluiden och Ds (m) är den hydrauliska diametern för ut-
rymmet som vattnet på utsidan av tuberna strömmar i. Uttrycket för den hydrauliska
diametern kan ses i Ekvation 16, där Ay (m2) är den våta tvärsnittsarean och P (m) är
den våta omkretsen av tvärsnittet hos utrymmet som vattnet på utsidan av tuberna
strömmar i. Dessa parametrar beror på hur stödplåtarna som håller fast tuberna är ut-
formade. Det ska noteras att den hydrauliska diametern också används för tubernas insi-
das värmeövergångstal, men att den hydrauliska diametern för insidan av ett vattenfyllt
runt rör är densamma som rörets diameter, vilket är varför Ekvation 14 ser ut som den
gör. [6,14]
= �� ��� + � (� /��) + � + Ekvation 13
�� = ��� � � Ekvation 14
� = � � Ekvation 15 = � Ekvation 16
Mängden värme som kan överföras från primärsidan till sekundärsidan beror alltså till
stor del på Nusselts tal. Som tidigare har nämnts, beror Nusselts tal i sin tur på Reynolds’
och Prandtls tal. Nusselts tal beskrivs av empiriskt framtagna korrelationer som lämpar
sig olika väl beroende på diverse förhållanden såsom storlek på Reynolds’ och Prandtls
tal, förhållandet mellan tubens längd och diameter etc. Dittus-Boelters är en av de mest
använda korrelationerna för värmeöverföring i PWR, och är även den som används i
PASGO. Den ska dock, tillsammans med ett antal andra korrelationer, analyseras för att
bedöma om det finns ett behov av att byta ut den eller inte.
3.1 Dittus-Boelters korrelation
Dittus-Boelters korrelation är den mest använda korrelationen för att ta fram Nusselts tal
för vattens turbulenta strömning i rör med slät yta. Den används även ofta för att ta fram
Nusselts tal för vattens turbulenta strömning längs med tubpaketet i ånggeneratorn på
PWR. Detta gör denna korrelation lämplig för användning i värmeöverföringsberäk-
14
ningar i PWR eftersom tuberna har slät yta, och flödena tenderar att vara turbulenta un-
der normala driftförhållanden. Dittus-Boelters korrelation används därmed för att be-
räkna Nusselts tal för insidan och utsidan av tubpaketets tuber vid enfasströmning. Dit-
tus-Boelters korrelation kan ses i Ekvation 17, där n = 0,4 för uppvärmning (tubväggens
temperatur är större än fluidens temperatur) och n = 0,3 för nedkylning (tubväggens
temperatur är mindre än fluidens temperatur). I PASGO används n = 0,4 för både insi-
dan och utsidan av tuberna, vilket resulterar i Ekvation 18.
� = , , Ekvation 17 � = , , , Ekvation 18
Dittus-Boelters korrelation har experimentellt fastställts gälla för , ≤ ≤ , ≳ , och � ≳ , där L (m) är tubens längd och D (m) är tubens diameter.
Temperaturskillnaden mellan fluiden och tubväggen bör dessutom vara liten eller me-
delstor för att resultaten ska anses vara exakta. Detta är villkor som uppfylls i PWR un-
der normala driftförhållanden. Det finns experimentell data som tyder på att konstanten
0,023 i Ekvation 17 och Ekvation 18 är lite i det minsta laget för strömning utanför tub-
paketet, och att den skulle kunna modifieras en aning baserat på tubpaketets stödplåtars
geometri och tubernas diameter. Detta är dock något som inte har använts till ekvation-
erna i PASGO. [11,13]
3.2 Petukhov-Kirillov-Popovs korrelation och Gnielinskis korrelation
Dittus-Boelters korrelation är enkel att använda, och är tillräckligt noggrann i de flesta
sammanhang. Den kan dock ge fel på upp till 25% i vissa fall. Användning av en mo-
dernare och mer komplex korrelation, som Petukhov-Kirillovs korrelation, kan minska
dessa fel till under 10%. Petukhov-Kirillov-Popovs korrelation ges av Ekvation 19, där
det dimensionslösa talet ”f” är en friktionsfaktor för tuber med slät yta, och ges av Ek-
vation 20. [11]
� = /, + , / / / − Ekvation 19 = , � − , − Ekvation 20
15
Petukhov-Kirillov-Popovs korrelation gäller för , < < , och < <∗ . Gnielinski modifierade sedan denna korrelation och skapade sin egen korrelat-
ion som gäller även för lägre Reynolds’ tal. Gnielinskis korrelation ges av Ekvation 21,
där f återigen är en friktionsfaktor för tuber med slät yta, som ges av Ekvation 22.
� = / −+ , / / / − Ekvation 21 = , � − , − Ekvation 22
Gnielinskis korrelation gäller för , < < , och < < ∗ . Detta
betyder att Gnielinskis korrelation, utöver att vara mer exakt än Dittus-Boelters korrelat-
ion, även gäller för ett större spann för Prandtls tal. Dessutom gäller Gnielinskis korre-
lation för lägre Reynolds’ tal, som motsvarar flöden i övergångsområdet mellan lamin-
ärt och turbulent flöde, medan Dittus-Boelters korrelation och Petukhov-Kirillov-
Popovs korrelation bara gäller för fullt utvecklat turbulent flöde [11]. I Figur 8 jämförs
Dittus-Boelters korrelation och Gnielinskis korrelation med experimentellt framtagna
data för hur Nusselts tal beror av Reynolds tal. Experimentella data avser luft med
Prandtls tal Pr = 0,71. Dessa data kan ses i tabell 1 i appendix A.
16
Figur 8 Nusselts tal beräknat med Dittus-Boelters korrelation samt med Gnielinskis korrelation, jämfört med
experimentellt framtagna värden.
I Figur 8 kan man notera att både Dittus-Boelters korrelation och Gnielinskis korrelation
stämmer väl överens med de experimentella data för Reynolds’ tal över cirka 5000, vil-
ket motsvarar den fullt turbulenta regionen och delar av den delvis turbulenta regionen.
För Reynolds’ tal på cirka 2000-5000 kan man dock tydligt se hur Gnielinskis korrelat-
ion stämmer mycket mer väl överens med de experimentella data än vad Dittus-Boelters
korrelation gör. För Reynolds’ tal under 2000, vilket motsvarar laminärt flöde, stämmer
ingen av de två korrelationerna överens med de experimentella data. I Figur 9 kan man
sedan också notera ett liknande mönster, där Petukhov-Kirillov-Popovs korrelation ver-
kar stämma väl överens med de experimentella data för den fullt turbulenta regionen,
men inte för lägre Reynolds’ tal.
17
Figur 9 Nusselts tal beräknat med Petukhov-Kirillov-Popovs korrelation samt med Gnielinskis korrelation, jämfört
med experimentellt framtagna värden.
4. PASGOs uppbyggnad
PASGO (Performance Analysis and Steam Generator Optimization) är ett beräknings-
program skrivet i programspråket Turbo Pascal 6.0. Det utför diverse värmeöverförings-
och tryckfallsberäkningar för att göra prestandauppföljningar för ånggeneratorerna i
Ringhals’ reaktor 3 och 4. PASGO har fem olika optioner där olika utdata beräknas ite-
rativt. Opt 1 beräknar ånggeneratortrycket (ÅG-trycket), opt 2 beräknar αsmuts, opt 3
beräknar den termiska effekten, opt 4 beräknar αsmuts samt DPkorr, vilket är en korrek-
tionsfaktor för primärtrycket, och opt 5 beräknar ÅG-trycket fast med möjlighet att mo-
difera turbineffekten. Det ska noteras att opt 2 är överflödig och inte används, eftersom
opt 4 också beräknar αsmuts, och dessutom gör det mer effektivt.
18
4.1 Skillnader mellan R3 och R4
PASGO är utvecklat både för Ringhals 3 och 4. Dessa två reaktorer är båda PWR, men
utformningen av ånggeneratorerna skiljer sig en del från varandra. Detta gör att det
finns två versioner av PASGO, en som är anpassad för Ringhals 3 och en som är anpas-
sad för Ringhals 4. De två versionerna av PASGO har en rad skillnader, men de är upp-
byggda näst intill identiskt.
En del av skillnaderna beror på att R3 och R4 är geometriskt olika. Detta gör att de två
versionerna av PASGO använder olika värden för längder, areor, volymer, tryckfallsko-
efficienter med mera för ånggeneratorn i programkoden.
Den andra väsentliga skillnaden mellan R3 och R4 är att ånggeneratorn i R4 är av en så
kallad ”economizer-typ”, se Figur 10 nedan. Notera att den övre delen av ånggeneratorn,
där bland annat separatorerna sitter, inte är inkluderad i figuren. R3 är av en konvent-
ionell matarvattenringstyp, se Figur 2 ovan. I en ånggenerator av matarvattenringstyp
fördelas mattarvattenflödet jämnt i en fallspalt som löper 360º runt risern (sett ovani-
från) i ånggeneratorn. Detta innebär att matarvattnet fördelas jämnt mellan den kalla och
den varma halvan av risern. Även recirkulationsflödet som kommer tillbaka från separa-
torerna ned till fallspalten delas upp jämnt mellan den varma och kalla halvan av risern.
Figur 10 En ånggenerator av economizer-typ, likt den som finns i Ringhals 4.
19
I en ånggenerator med economizer, som R4, finns två fallspalter som löper 180º var runt
risern. I den ena fallspalten förs allt matarvatten (högra halvan av Figur 10), samt unge-
fär 10% av recirkulationsflödet till den kalla halvan av risern, medan i den andra falls-
palten (vänstra halvan av Figur 10) leds ungefär 90% av recirkulationsflödet och ingen
del av matarvattenflödet ned till inloppet till den varma halvan av risern. R4 har också
en skiljeplåt som sträcker sig några meter upp från tubplattan, vilket hindrar att vattnet i
den varma och den kalla halvan blandas. R3 har ingen delningsplåt alls.
Recirkulationsflödet kommer från vatten som är separerat från ånga, vilket betyder att
det är väldigt hett, medan matarvattenflödet är relativt svalt jämfört med vattnet i risern.
Att den största delen av recirkulationsflödet leds till den varma halvan av risern, och
matarvattenflödet leds till den kalla halvan, betyder att den varma halvan kommer bli
ännu varmare medan den kalla halvan blir kallare jämfört med i R3. På den varma sidan
låter den högre temperaturen ångbildning ske längre ner i risern. På den kalla sidan blir
temperaturskillnaden jämfört med vattnet i tuberna större än för R3, vilket ger möjlighet
till större värmeöverföring. Ångbildning för den kalla sidan sker först ovanför skiljeplå-
ten, där vattnet från den varma och kalla sidan blandas. Denna design ger ånggeneratorn
en större effekt jämfört med designen i R3, och ger möjligheten att även öka ångtrycket.
Av dessa anledningar kommer också αsmuts att ha ett högre värde i R4 än i R3. [15]
4.2 Huvudprogrammet
PASGO är till största delen uppbyggt av så kallade ”procedures”, det vill säga subruti-
ner, funktioner i Turbo Pascal 6.0 som inte returnerar något värde. Om en subrutin an-
ropas med argument i form av variabler som indata kommer dock argumentet att ändras
i den anropande subrutinen, om det ändras i den anropade subrutinen. Det gör att pro-
grammet kan anropa en subrutin för att göra diverse beräkningar som ändrar flera vari-
ablers värden samtidigt.
Programmet är uppbyggt så att det först deklarerar ett antal globala variabler och arrayer,
samt definierar ett par konstanter, som exempelvis pi. Sedan definieras alla subrutiner
som används i programmet, innan huvudprogrammet startar. Huvudprogrammet är kort,
och består endast av några få anrop till olika subrutiner. Först skapas och namnges filen
20
som resultaten skrivs till, sedan sätts alla globala variabler och arrayer lika med noll,
innan en subrutin vid namn ”Pr_Pr” anropas för att hantera alla anrop rörande beräk-
ningar och liknande. Ett flödesschema för programmets opt 4 visas i appendix B. Där
kan läsaren enklare förstå programmets uppbyggnad när den förklaras i de kommande
styckena. Även om vissa detaljer skiljer sig mellan de fem optionerna så är de så pass
lika varandra att flödesschemat ger en bra överblick av alla fem optioner.
4.3 Filhantering
Programmet låter användaren mata in huruvida resultaten ska skrivas till en ny textfil
eller till slutet av en gammal textfil, samt vad denna textfil ska heta. Sedan kontrollerar
programmet om det redan finns en textfil med det angivna namnet sparad på den platsen
i datorn som är angiven i koden. Om användaren vill skapa en ny textfil med samma
namn som en textfil som redan finns så får användaren välja om denna fil ska skrivas
över eller inte. Väljer användaren att inte skriva över den redan befintliga filen, alterna-
tivt om användaren har valt att skriva resultaten till en gammal textfil som inte finns, så
bes användaren att välja ett nytt namn för resultatfilen. Det valda filnamnet och filens
plats på datorn sparas till globala variabler av typ ”string”, för att programmet enkelt
ska kunna öppna textfilen senare när resultat ska skrivas till den.
4.4 Input till PASGO
När PASGO anropar subrutinen Pr_Pr, så definierar den först diverse variabler, samt
skriver datum och programversion till resultatfilen. Efter detta anropas en subrutin som
läser in ångtabelldata från dat-filer till arrayer i PASGO. Dessa data kommer senare att
användas vid beräkningar av entalpier, tryck, viskositeter, volymiteter etc.
Efter detta anropas en subrutin som låter användaren välja vilken option som ska köras,
samt skriva in värden för diverse parametrar som används som indata. Vilka indata som
efterfrågas varierar med vilken option som har valts, men exempel på efterfrågade pa-
rametrar är temperaturer för varma och kalla benen, ÅG-tryck, olika vatten- och ångflö-
den, αsmuts med mera. Användaren har möjligheten att mata in ”0” som indata till flera
av parametrarna, vilket låter dessa parametrar anta standardvärden som definieras i pro-
gramkoden. Mängder av reaktorspecifika geometriska värden överförs till sina respek-
21
tive variabler och arrayer. Dessa värden varierar givetvis mellan koden för R3 och ko-
den för R4. Till sist skrivs information om körningens indata till resultatfilen.
4.5 Start
Den resterande delen av Pr_Pr är en stor loop som körs tills stoppvilloren, som förklaras
i detalj senare i rapporten, uppfylls. Först anropas en subrutin vid namn ”Start”. Här
beräknas många olika flöden, bland annat flödet upp genom risern av ånggeneratorn,
flödet som kommer från separatorerna till fallspalten, fallspaltsflödet etc. Dessa flöden
är bland annat viktiga för att tryckfallet (även kallat DP från ”delta pressure”) som upp-
står på grund av friktion i fallspalten ska kunna beräknas. Summan av detta DP och
tryckfallet som uppstår i fallspalten på grund av elevationsskillnader i den flera meter
höga fallspalten, ger det totala fallspalts-DP, det vill säga skillnaden i tryck mellan top-
pen och botten av fallspalten.
4.6 HLoop
Nästa subrutin som anropas i Pr_Pr kallas för ”HLoop”. I HLoop görs främst beräk-
ningar av värmeöverföring från primärsidan till sekundärsidan genom tubpaketet, samt
DP för risern av ånggeneratorn. PASGO delar in risern, och därmed även tubpaketet,
axiellt (dvs. i höjdled) i tolv delar där varje del separeras av en stödplåt för tuberna.
Varje del, förutom den första delen som är under den första stödplåten, delas sedan in i
fyra mindre delar så att risern och tubpaketet är indelade i totalt 45 höjdelement. HLoop
består av en stor for-loop med 45 iterationer så att alla beräkningar görs för varje höjd-
element. Bidragen från ett höjdelement adderas i slutet av varje iteration så att man får
den totala effekten för värmeöverföringen och det totala DP för risern när beräkningarna
för alla 45 höjdelement har slutförts. I varje iteration beräknas även nya lokala värden
för vattnets (och eventuellt även ångans) temperatur i risern och i tuberna. Dessa värden
används sedan i det nästkommande höjdelementet. Detta är viktigt, eftersom vattnet i
tuberna för över värme till vattnet i risern, vilket betyder att dessa temperaturer föränd-
ras när man observerar olika delar av ånggeneratorn. Det 45:e och sista höjdelementet
motsvarar den översta delen av tubpaketet, där tuberna böjs i en U-form för att sedan gå
nedåt igen. Figur 11 visar en ånggenerator från en PWR. ”Tube supports” är stödplå-
tar, ”tube bundle” är tubpaketet, ”primary inlet” och ”primary outlet” är inloppet och
utloppet av primärsidans varma och kalla ben, ”downcomer annulus” är den övre delen
22
av fallspalten, och ”steam outlet” är utloppet, genom vilket ångan lämnar ÅG för att
föras vidare till turbinen. Man kan tydligt se hur tuberna i tubpaketet är böjda till en U-
form. Vattnet är givetvis varmare i tuberna på den vänstra sidan än på den högra sidan
eftersom det har hunnit överföra en stor mängd värme innan det kommer till den högra
sidan.
Figur 11 En ånggenerator i ett PWR sett från sidan. Ref. [16]
4.7 Pr_Ka
HLoop anropar en subrutin vid namn ”Pr_Ka” två gånger för varje höjdelement, en
gång för den varma halvan av risern och en gång för den kalla halvan. Det är här som
beräkningarna för värmeöverföringen från primärsidan till sekundärsidan sker. Här de-
las uttrycket för den totala värmeresistansen från Ekvation 13 upp i två delar. Den ena
delen är värmeresistansen för utsidan av tuberna, Ry, och ges av Ekvation 23, medan den
andra delen är resten av den totala värmeresistansen, R, och ges av Ekvation 24.
= � Ekvation 23
23
= �� ��� + � (� /��) + Ekvation 24
PASGO använder sedan Newton-Raphsons metod tillsammans med en omskriven kor-
relation som beskriver värmeövergångstalet, för att skapa en iterationsloop som beräk-
nar yteffekten, Qq (W/m2), och som avslutas när resultatet är tillräckligt exakt. Denna
iterationsloop skiljer sig beroende på om det bara finns vatten utanför tuberna eller om
det finns en blandning av vatten och ånga. För fallet när det bara finns vatten utanför
tuberna gäller uttrycken i Ekvation 25 och Ekvation 26. I Ekvation 25 utgör Fq skillna-
den mellan Dt, som är temperaturskillnaden mellan vattnet i tuberna och koktemperatu-
ren för vattnet utanför tuberna, med samma temperaturskillnad beräknad med värmere-
sistansen och det aktuella värdet för yteffekten. Sedan itereras ett nytt värde på yteffek-
ten fram i Ekvation 26 med hjälp av Fq. Detta värde stoppas sedan in i Ekvation 25 igen.
Denna iterationsloop håller på tills Fq är mindre än 10-5 ºC. Hjälpvariabeln E ges av
uttrycket i Ekvation 27, där Py är sekundärtrycket utanför tubpaketet.
= + , , − Ekvation 25
, = − , / + , − , Ekvation 26 = � − , ∙ − ∗ Ekvation 27
Då det har börjat uppstå ånga på grund av kokning så används på samma sätt Ekvation
28 till Ekvation 30 istället. Båda dessa iterationsloopar brukar konvergera, men om in-
datan skiljer sig mycket från standardvärden kan det hända att iterationen inte konverge-
rar. Iterqq är en iterationskonstant som påverkar hur exakt resultatet blir. Den har stan-
dardvärdet 0,1 men kan specificeras av användaren om så önskas.
= + , − Ekvation 28
, = − � ∙ / + , − , Ekvation 29 = − , Ekvation 30
För fallet då det endast är vatten utanför tuberna beräknas sedan ett nytt värde för Ry
enligt Ekvation 31, där Ti (ºC) är temperaturen hos vattnet i tuberna och Ty (ºC) är tem-
24
peraturen hos vattnet utanför tuberna. Om detta värde på Ry är större än det värde som
beräknades med hjälp av korrelationer i början av Pr_Ka så ersätter det här värdet det
gamla värdet, och yteffekten som beräknades iterativt används för fortsatta beräkningar.
Om det nya värdet däremot är mindre än det gamla så används det gamla värdet, och
yteffekten beräknas enligt Ekvation 32, där Ry är värmeresistansen för utsidan av tuber-
na som beräknades med hjälp av korrelationer i början av Pr_Ka, och R ges av Ekvation
24. Detta görs för att yteffekten tycks konvergera mot ett orimligt lågt värde när det
itereras fram för den kalla sidan av risern. Detta steg görs inte överhuvudtaget för de
höjdelement då vattnet utanför tuberna redan har börjat koka. Detta beror på att vattnet
utanför tuberna har konstant temperatur då det kokar.
= ��−� − Ekvation 31
= ��−�+ Ekvation 32
Härnäst beräknas temperaturen för insidan av tubväggen (Twi), utsidan av tubväggen
(Twy), och för mitten av tubväggen (Tm), i Ekvation 33 till Ekvation 35, där Ri ges av den
första termen i Ekvation 24.
� � = �� − � Ekvation 33 � = � � − � (� /��) Ekvation 34 � = , � � + � Ekvation 35
Alla dessa steg, från det att Qq itereras fram till att Tm beräknas, upprepas sedan tills
skillnaden mellan två efterföljande Tm är mindre än 0,5 ºC. Initialvärdet för Tm beräknas
enligt Ekvation 36, medan det andra värdet alltid beräknas med Ekvation 33, Ekvation
34 och Ekvation 35. Härnäst beräknas yteffekten, också den iterativt. Ct (dimensions-
lös) är en parameter som beräknas i slutet av det föregående höjdelementet enligt Ekvat-
ion 37. För det första höjdelementet används ett förbestämt värde.
� , = �� − �� − � Ekvation 36 = ��−���−� Ekvation 37
25
Slutligen beräknas effekten för det aktuella höjdelementet. Detta görs enligt Ekvation 38,
där Q (W) är effekten, Dz (m) är höjden för det aktuella höjdelementet, och Na (dimens-
ionslös) är antalet ej pluggade tuber i tubpaketet. Effekten summeras efter varje höjd-
element för att få den totala effekten när alla höjdelement har genomförts.
= ��� Ekvation 38
Eftersom varje höjdelement inte är oändligt litet, kommer det att övergå från att vara
endast vatten till att vara en blandning av vatten och ånga i ett av höjdelementen. Detta
höjdelement identifieras genom att i slutet av beräkningarna även beräkna entalpin för
vattnet utanför tuberna, och jämföra denna med entalpin för kokande vatten vid samma
tryck. Om den beräknade entalpin är större än entalpin för kokande vatten vid samma
tryck så vet programmet att kokning har uppstått i toppen av höjdelementet, trots att
kokning inte hade uppstått i botten av höjdelementet. För det specifika höjdelementet
görs då alla beräkningar igen, fast med ekvationerna som gäller för när det finns en
blandning av vatten och ånga utanför tuberna. Den beräknade entalpin används sedan
för att avgöra hur stor del av den effektberäkningen för det aktuella höjdelementet som
ska komma från beräkningarna gjorda för fallet då endast vatten finns utanför tuberna,
och hur stor del som ska komma från beräkningarna då en blandning av vatten och ånga
finns utanför tuberna. Från och med höjdelementet efter detta så används enbart ekvat-
ionerna för fallet då en blandning av vatten och ånga finns utanför tuberna.
4.8 Tryckfallsberäkningar i HLoop
I HLoop beräknas DP för varje höjdelement i risern. Detta DP uppstår av flera olika
orsaker, och beror på det aktuella höjdelementet samt huruvida det har börjat uppstå
kokning på sekundärsidan eller inte. För vart fjärde höjdelement finns det en stödplåt
som skapar ett engångs-DP (Pa) på grund av att den gör det trängre för vattnet och even-
tuell ånga att flöda fram. Uttrycket är detsamma, oavsett om ånga finns i det aktuella
höjdelementet eller inte, och ges av Ekvation 39, där Ms (kg/s) är vattenflödet för ena
halvan av risern, As (m2) är arean för halva risern (med tubernas areor borträknade), K
(dimensionslös) är motståndstalet för den aktuella stödplåten, och V (m3/kg) är volymi-
teten för vattnet (och eventuell ånga) i risern.
26
= , � � ∙ � Ekvation 39
För de höjdelement där det inte finns någon stödplåt skapas det istället ett friktions-DP
på grund av friktionen mellan tuberna och vattnet som flödar upp genom risern, samt ett
elevations-DP på grund av att tyngdkraften verkar olika mycket på vattnet beroende på
hur mycket vatten som finns ovanför det aktuella höjdelementet. Friktions-DP (Pa) ges
av Ekvation 40, där Ds (m) är den hydrauliska diametern för utrymmet mellan tuberna,
Dz (m) är höjden för det aktuella höjdelementet, och Y (dimensionslös) är en friktions-
faktor som itereras fram med hjälp av tubernas ytråhet och vattnets Reynolds’ tal för det
aktuella höjdelementet. När temperaturen har blivit så pass hög att ånga börjar bildas
förändras dock friktions-DP på grund av att vi har en blandning av ånga och vatten i det
aktuella höjdelementet. Detta tvåfas-DP (DPtf) är ett modifierat uttryck av friktions-DP i
Ekvation 40, och kan observeras i Ekvation 41. X (dimensionslös) är ånghalten, medan
pcr=2,21∙107 (Pa) är det kritiska trycket för vatten och p (Pa) är trycket för det aktuella
höjdelementet. Kvoten � (dimensionslös) är det så kallade reducerade trycket, och
används när fluiden är under så pass extremt tryck och temperatur att det inte finns nå-
gon klar övergång mellan vätskeform och gasform.
Elevations-DP (Pa) ges av Ekvation 42, där g (m/s2) är tyngdaccelerationen. Det ska
noteras att volymiteten varierar en del beroende på bland annat om det har bildats ånga i
risern för det aktuella höjdelementet eller inte.
= ,� � ∙ � ∙ Ekvation 40
= ( + , � , ) Ekvation 41 = �� Ekvation 42
Slutligen uppstår det också ett accelerations-DP för de höjdelement där det har börjat
koka. Detta beror på att volymiteten för vattnet ökar när andelen ånga ökar, vilket skap-
ar en acceleration eftersom tubernas diameter, och därmed tubernas volym, inte ökar.
Ett uttryck för accelerations-DP kan ses i Ekvation 43, där V1 (m3/kg) är volymiteten för
27
vattnet för det föregående höjdelementet och V2 (m3/kg) är volymiteten för det aktuella
höjdelementet. Det totala DP för hela risern kan fås genom att summera dessa fem DP
(DPf för de höjdelement med bara vatten, och DPtf för de höjdelement där det finns en
blandning av vatten och ånga) från Ekvation 39-43 över alla 45 höjdelement, vilket kan
ses i Ekvation 44.
� = � � − � Ekvation 43 = ∑ ,� + ,� + ,� + ,� + �,��= Ekvation 44
4.9 Stoppvillkor
PASGO har två stoppvillkor som måste uppfyllas för att de uträknade storheterna i pro-
grammet ska anses vara korrekta. En stor del av programmet loopas tills båda dessa
villkor är uppfyllda. Se gärna flödesschemat i appendix B. Det första stoppvillkoret är
att skillnaden i temperatur mellan vattnet i tuberna på den kalla sidan och den varma
sidan av risern måste vara mindre än 0,001 ºC för det sista höjdelementet. Se Ekvation
45, där Tph (ºC) och Tpc (ºC) är temperaturen för det varma respektive det kalla benet.
Detta är logiskt eftersom det sista, och därmed översta, höjdelementet är där vattnet i
den varma och kalla sidan av tubpaketet möts. Det är helt enkelt samma vatten i både
den varma och kalla sidan i det höjdelementet, och skillnaden i temperatur bör därför
vara så nära noll som möjligt. Eftersom temperaturen i tubernas varma och kalla sidor
beräknas i varje höjdelement, och det översta steget är det sista, så beräknar PASGO
enkelt denna temperaturskillnad efter hela HLoop har avslutats.
|� ℎ − � | < , Ekvation 45
Det andra stoppvillkoret säger att det ska finnas en tryckbalans i ånggeneratorn, det vill
säga att summan av alla DP i ånggeneratorn ska vara så nära noll som möjligt. Detta är
också ett rimligt villkor. Eftersom PASGO behandlar stationära förhållanden så är ång-
flödet ut till turbinen, matarvattenflödet in till ÅG, och reaktorns effekt konstant. Det är
då logiskt att trycket på en punkt i ånggeneratorn är detsamma hela tiden då ånggenera-
torn är ett slutet system, och vatten och ånga flödar runt i en slinga. För att se om stopp-
villkoret uppnås summerar PASGO fallspalts-DP (DPdc) som har beräknats i ”Start”, det
28
totala DP för hela risern (DPst) som har beräknats i ”HLoop”, och DP för separatorerna
(DPsep) som beräknas i ”Pr_Pr” precis innan stoppvillkoret testas. Absolutbeloppet av
summan av dessa DP ska vara mindre än 10 Pa, se Ekvation 46.
| + + | < Ekvation 46
4.10 Iteration av de sökta storheterna
Varje gång programmet loopas så görs även en iteration för beräkning av den sökta
storheten, vilket är ÅG-trycket för option 1 och 5, αsmuts för option 2 och 4, och den ter-
miska effekten för option 3. Den sökta storheten får ett initialt värde i början av pro-
grammet (x0 i Ekvation 47), och den första iterationen görs enligt Ekvation 47 för att få
ett andra värde (x1 i Ekvation 47). Sedan sker en iteration enligt Ekvation 48 varje gång
programmet loopas, för att ta fram nästa värde för den sökta storheten. I Ekvation 48 är
xn+1, xn, och xn-1 värdet på den sökta storheten för den kommande loopen, den nuvarande
loopen, respektive den föregående loopen, medan ΔTn och ΔTn-1 är temperaturskillnaden
som finns beskriven i vänsterledet av Ekvation 45, för den nuvarande respektive den
föregående loopen. Iterf är en iterationsfaktor som användaren kan anpassa i koden be-
roende på hur noggrann lösning man vill ha. PASGO pausar en körning och skriver ut
en varning i kommandoprompten om Δ� − Δ� − < − , eftersom det uttrycket står
i nämnaren i Ekvation 48, och den termen kan bli extremt stor om nämnaren blir väldigt
liten. Händer detta så är det ofta ett tecken på att lösningen inte verkar konvergera.
� = . � Ekvation 47 � + = � − �� ∙ � − −�� −�� − Ekvation 48
PASGO beräknar alltså inte den sökta storheten direkt. Istället används den sökta stor-
heten för att göra beräkningar i PASGO som sedan ger värden för stoppvillkoren. Den
sökta storheten anpassas sedan med hjälp av temperaturskillnaden från det första stopp-
villkoret i varje loop. När den sökta storheten har ett korrekt värde så kommer den att ge
en temperaturskillnad som gör att stoppvillkoret har uppfyllts. När stoppvillkoret när-
mar sig att uppfyllas blir även förändringen av den sökta storheten inför nästa steg
också mindre, eftersom temperaturskillnaden finns med som en del av Ekvation 48.
29
Detta är logiskt eftersom den sökta storhetens värde närmar sig sitt korrekta värde när
stoppvillkoret närmar sig att uppfyllas.
4.11 DP
När stoppvillkoret har uppfyllts körs subrutinen ”Start” en sista gång. Den här gången
beräknas en mängd olika tryckskillnader för primärsidan med hjälp av vattenflödet på
primärsidan och geometriska storheter som är specificerade i programkoden. De DP
som beräknas är trycket som byggs upp av cirkulationspumpen (DPpump), elevations-DP
för tubplattan till härdens underkant (DPe1), tubernas höjd (DPe2), härdens höjd (DPe3),
härdens överkant till tubplattan (DPe4), engångs-DP för reaktortanken (DPrt), varma
benet (DPh), kalla benet (DPc), primärloopens ”loop-seal” (DP1s), ånggeneratorinlopp
(DPsgi), ånggeneratorutloop (DPsgu), tubinlopp (DPsgti), tubutlopp (DPsgtu), samt frikt-
ions-DP för tuberna (DPsgt). Alla DP för delar som är vid ånggeneratorn kan summeras
till en parameter, DPsgf för att förenkla kommande uttryck något, se Ekvation 49. På
samma sätt kan alla tryckfall för resterande flöden på primärsidan summeras till DPrc
enligt Ekvation 50, och alla elevations-DP summeras till DPe enligt Ekvation 51. En
tryckfallsbalans, DPL, kan beräknas enligt Ekvation 52. Denna bör vara lika med noll då
primärloopen är ett slutet system.
= � + � + + + Ekvation 49 = + ℎ + + Ekvation 50 = + + + Ekvation 51 = − − − Ekvation 52
PASGO beräknar till slut en korrektionsfaktor för tryckfallet på primärsidan som kallas
DPkorr (dimensionslös), vilken kan ses i Ekvation 53. Detta är en faktor som måste
multipliceras med för att bli lika med − − , och därmed låta primär-
loopen uppnå tryckbalans, för de aktuella in-parametrarna. Storleken på beror
alltså på förändringar i tryckfallet på primärsidan, och förändringar av den kan bero på
olika faktorer som exempelvis nya bränsletyper, korrosion i primärloopen, och degrade-
ring av primärloopens huvudpump med mera. = motsvarar en exakt tryckba-
lans i primärloopen, medan en högre motsvarar ett ökat tryckfall, och ett lägre
30
motsvarar ett lägre primärflöde. Även mindre beräkningsfel på grund av brist
på noggrannhet i beräkningarna blir inkluderade i .
= � −� −�� � Ekvation 53
5. Konvertering av programkod
5.1 Val av programspråk
PASGO är, som tidigare nämnt, skrivet i Turbo Pascal 6.0. Det fanns ett antal olika al-
ternativ för programspråk att konvertera PASGOs programkod till, varje med olika för-
delar och nackdelar. Det valda programspråket var tvunget att fungera på Windows 10,
och vara så pass etablerat att det förutspås få uppdateringar och liknande kontinuerligt,
så att det kan användas under en lång tid framöver. Det valda programspråket skulle
också gärna möjliggöra enkel integrering i Ringhals’ processdatasystem PIS. Till en
början övervägdes Matlab, mycket på grund av dess styrkor inom beräkningsvetenskap
och det faktum att det är det program jag har haft mest erfarenhet av under min studietid.
Sedan övervägdes även Free Pascal länge, och till viss del även Delphi. Free Pascal är
ett användarutvecklat programspråk som skapades efter att Turbo Pascals utvecklare
Borland lade ner framtida utveckling av Pascal-programspråken. Det är användarut-
vecklat och strävar efter att vara så likt Pascal som möjligt. Detta betyder att Free Pascal
skulle kunna möjliggöra en så enkel konvertering av PASGOs programkod som möjligt,
eftersom syntax och funktioner liknar de i Turbo Pascal 6.0 väldigt mycket. Free Pascal
har även fördelen att det är kostnadsfritt. Delphi är det programspråk som Borland valde
att utveckla efter de gav upp Pascal, och det har därför också syntax som liknar den som
Turbo Pascal 6.0 använder, även om den inte är lika lik Free Pascals syntax.
Efter en hel del övervägande valdes dock C++ i Visual Studio. C++ har fördelarna att
det är ett väl etablerat programspråk som inte förutspås försvinna inom en överskådlig
framtid. C++ använder syntax och funktioner som givetvis skiljer sig mer från Turbo
Pascal 6.0 än vad Free Pascal gör, men syntax och den allmänna programstrukturen är
ändå förhållandevis lik. Visual Studio är utgivet av Microsoft och fungerar därmed utan
problem med moderna Windows-operativsystem. Efter möte med folk på Ringhals där
31
valet av programspråk diskuterades så framkom det också att Visual Studio skulle möj-
liggöra för enklaste möjliga integrering i PIS. Av dessa anledningar ansågs C++ i Visual
Studio vara det mest lämpliga programspråket att konvertera PASGOs programkod till,
och valdes därför för detta projekt.
5.2 Konvertering till C++
Inför konverteringen av koden planerades att först göra en så exakt konvertering som
möjligt av PASGOs programkod till C++, utan att förändra själva innehållet i koden.
Sedan planerades det att göra en nyare version av koden med eventuella modifikationer
och förbättringar, när den första versionen av koden hade verifierats. Denna strategi
antogs för att göra konverteringen så enkel som möjligt och därmed minska risken för
att nya buggar och i programkoden uppstår, och förenkla felsökning när nya funktioner
och förbättringar sedan implementeras. PASGO finns i två snarlika versioner, där den
ena är anpassad för reaktor 3 och den andra för reaktor 4. Båda versionerna har konver-
terats till C++. Delar av koden kommer att visas, och bli hänvisade till, för att göra rap-
porten mer lättförstådd, men hela koden kommer inte att finnas med i denna rapport av
sekretesskäl.
PASGOs programkod består till största delen av en mängd subrutiner, vilka motsvaras
av void-funktioner i C++. De flesta av dessa void-funktioner i PASGO har argument i
form av variabler. Dessa modifieras av void-funktionen, trots att void-funktionen i sig
inte returnerar något värde. Det finns även vissa argument i form av parametrar som då
kan ändras i den kallade funktionen utan att dess värde i den första funktionen ändras.
Ett exempel på en void-funktion med variabler som argument som anropas i Turbo Pa-
scal 6.0 respektive C++ kan ses i Figur 12 nedan. Den nya programkoden behåller den
gamla stilen och är därmed uppbyggd till största delen av void-funktioner med variabler
som argument. Det är värt att nämna att Turbo Pascal 6.0 inte gör skillnad på versaler
och gemener i variabel- och funktionsnamn, medan C++ gör det.
32
Figur 12 Exempel på hur en subrutin/void-funktion med variabler som argument anropas i Turbo Pascal 6.0
respektive i C++.
Programkoden har sedan översatts direkt till den syntax som C++ använder, till största
delen utan nämnvärda förändringar. Det finns dock ett par ställen där kodens struktur
har ändrats något, vilket är relaterat till filhantering. I Turbo Pascal-versionen av PAS-
GO används två miljövariabler, till vilka text från en separat fil läses. Denna fil är av
env-typ (en förkortning av environment) och innehåller två rader text. Den första raden
anger vilken katalog i datorns hårddisk som resultatfilen ska lagras i. Den andra raden
anger i vilken katalog i datorns hårddisk som ett antal dat-filer med polynomkoefficien-
ter till ångtabeller, materialdata med mera, finns. Vid konverteringen till C++ valdes det
att istället ta bort denna env-fil för att göra programkoden mer lättförståelig, och för att
minska beroendet av externa filer. Sökvägen till katalogen som resultatfilerna ska sparas
i har istället skrivits explicit i programkoden. Innehållet från dat-filerna har också skri-
vits explicit i PASGOs programkod, och anges nu direkt till de arrayer som de ska spa-
ras i. Detta sker i samma void-funktion som tidigare skötte inläsningen från dat-filer till
dessa arrayer.
När en direkt konvertering av hela koden var slutförd och verifierad så gjordes en del
förbättringar av diverse detaljer i koden. Variabler som aldrig användes i koden togs
bort, många variabler tilldelades initialvärden i samband med deklarering istället för vid
ett senare tillfälle, och kodens struktur gjordes aningen mer lättläst. Även kommentarer
33
för varje funktion lades till för att ytterligare göra programkoden mer lättförstådd. Alla
dessa ändringar, tillsammans med det faktum att C++ har en mer kompakt syntax än
Turbo Pascal 6.0, gjorde att koden krympte från ungefär 2300 rader till ungefär 1900
rader.
Ett stort problem med koden var att den var väldigt beroende av så kallade ”goto-satser”.
Dessa satser kan användas för att kontrollera i vilken ordning programmet arbetar, ge-
nom att välja att programmet ska ”hoppa” till en annan rad inom samma funktion när
programmet kommer till goto-satsen. Detta kan tyckas vara en smart lösning för att få
programmet att gå den väg man vill i sin kod, men avråds i de flesta situationer från att
användas eftersom det gör koden svår att läsa och sätta sig in i, och kan skapa problem
om man senare vill göra förändringar i koden. En mängd av dessa goto-satser elimine-
rades under projektets gång, genom att byta ut dem mot if-satser, while-loopar, eller
genom att omstrukturera koden, beroende på vad som passade bäst för varje situation.
Visa funktioner var dock uppbyggda på ett sådant sätt att de var helt beroende av dessa
goto-satser, och kunde därmed tyvärr inte elimineras inom spannet av detta projekt.
5.3 Inläsning av data från Excel-fil
En av de större modifieringarna av programmet var en funktion som möjliggör automa-
tisk inläsning av indata till programmet, så det inte är nödvändigt att alltid skriva in alla
indata manuellt. Detta visade sig vara svårare att lösa än förväntat, då det inte fanns
några användbara bibliotek för att läsa in data från celler i Excel-filer till variabler i C++.
Excel-filerna som data ska läsas in från innehåller en mängd olika data från Ringhals’
reaktorers prestandatester. Den ena filen innehåller data från Ringhals reaktor 3 och den
andra filen från reaktor 4. De två filerna är strukturerade så att varje vågrät rad motsva-
rar ett specifikt mätvärde (exempelvis varma eller kalla benets temperatur för en speci-
fik ånggenerator-loop), medan varje lodrät kolumn motsvarar ett specifikt datum som
prestandatestet är utfört på. I varje Excel-fil är det runt 20 rader med olika data som är
av intresse som indata till PASGO.
För att förenkla inläsningen av data sparas Excel-filen i csv-format. Detta är ett fil-
format som endast består av text, där cellvärden från Excel-filen separeras med semiko-
lon. Hur data sedan läses in till PASGO beskrivs i de kommande styckena. Själva struk-
34
turen för denna del av koden ses i Figur 13, för att underlätta förståelsen av denna be-
skrivning. Den tar endast med inläsningen av två av de runt 20 raderna som läses in.
Diverse siffror i koden är också ändrade, men det påverkar inte kodens struktur. Pro-
blemet löstes genom att låta PASGO läsa in en rad åt gången som en textsträng, det vill
säga en data-typ för text, med hjälp av kommandot ”getline”. Detta sker i en while-loop
som körs tills det inte längre finns fler rader i csv-filen. En räknarvariabel som uppdate-
ras i varje iteration håller reda på vilken rad man är på. Sedan används ytterligare en
while-loop som körs i varje iteration av den tidigare while-loopen tills det inte finns
några kommatecken kvar. I varje iteration läses text fram tills ett kommatecken hittas
och läggs till i slutet av en vektor som skapades i början av funktionen, med hjälp av
kommandot ”push_back”. Det gör att den inlästa raden delas upp i en mängd olika pa-
rametrar av typ string och läggs in i en vektor. På så sätt sparas texten från varje cell i en
rad i Excel-filen till ett element (teckensträng) i vektorn. En vektor är lik en array, fast
den är mer dynamisk. Den kan ändra storlek allt eftersom man lägger till data till den,
och passar därmed bra för våra ändamål.
När alla element från en rad har lagts in i vektorn fortsätter programmet till en mängd if-
satser. Dessa if-satser testar om radräknarens värde svarar mot någon av de rader som
har data som ska anges som indata till PASGO. Det finns en if-sats för varje rad i Excel-
filen som har relevanta data. När if-satsen för en sådan rad blir sann så läses data från
vektorn till en ny vektor där de sparas. Detta sker genom en for-loop som körs från den
första till den sista kolumnen där data för kalenderdatum finns. PASGO förstår vilken
den sista kolumnen med data är genom att subtrahera antalet element som finns på en
rad efter den sista kolumnen med data, från vektorns storlek. If-satser inuti for-loopen
gör att data inte kopieras till den nya vektorn för datum som man vet inte har fullstän-
diga data i Excel-filen. På detta sätt kopieras all data för en sorts mätvärde (exempelvis
matarvattentemperaturen) till en ny vektor.
Denna kod kommer även att fungera om data från nya prestandatester läggs till, ef-
tersom nya element läggs till i slutet av vektorn. Det viktiga då är att data från det nya
prestandatestet läggs till i kolumnen direkt till höger om det senaste datumet i den
gamla Excel-filen, och att den nya Excel-filen sparas som en csv-fil på samma plats och
med samma namn som den gamla filen. Efter att data från en rad har kopierats till en ny
vektor, eller efter att alla if-satser var falska eftersom det var en rad i Excel-filen med
35
mätvärden som inte används som indata till PASGO, så raderas alla element i den första
vektorn och räknarens värde ökas med ett. Detta gör att en ny rad från csv-filen kan
läsas in i vektorn och räknaren kan hålla reda på vilken rad i filen som behandlas för
tillfället. När alla rader har körts igenom är den yttersta while-loopen avslutad, och data
för alla kalenderdatum från ungefär 20 av raderna i Excel-filen finns nu sparade till lika
många vektorer. Det är värt att notera att motsvarande data för olika kalenderdatum
finns sparade i samma element i varje vektor, vilket kommer göra det enklare att hantera
dessa vektorer senare.
Figur 13 Kodexempel som visar strukturen för inläsning från Excel-fil till vektorer.
Alla dessa vektorer som innehåller värden på data är dock bara text i data-typen string.
För att kunna använda dessa vid beräkningar i PASGO måste de konverteras till data-
typen double (flyttal). Det enda undantaget är vektorn som innehåller kalenderdatum för
varje prestandatest, då dessa endast används för utskrift till resultatfilen och inte för
36
några beräkningar. Detta görs med en funktion som använder klassen ”istringstream”
som finns i C++. Koden för denna funktion kan ses i Figur 14. Klassen ”BadConversion”
används för att ge användaren en varning om konverteringen inte lyckades. Denna
funktion används tillsammans med en for-loop för att konvertera alla element i alla vek-
torer med relevanta data (förutom vektorn med datum) från string till double. Koden för
denna for-loop kan observeras i Figur 15. Även denna gång finns endast koden för ett par
av de runt 20 vektorerna med. For-loopen körs från det första elementet i varje vektor
till det sista. I varje iteration konverteras ett element för varje vektor, och läggs sedan
till i en ny vektor som är definierad i början av funktionen, med hjälp av komman-
dot ”push_back”. Alla vektorer är lika stora, vilket betyder att antalet iterationer i for-
loopen stämmer överens med alla vektorer. När for-loopen är avslutad finns runt 20 nya
vektorer med värden av datatypen double.
Figur 14 Kod som konverterar en parameter av typ string till en parameter av typ double.
Figur 15 Del av kod som använder funktionen i figur 14 för att konvertera alla numeriska element i alla vektorer från
string till double.
5.4 Möjlighet att ändra indata
I versionen av PASGO som är skriven i C++ har det lagts in möjligheten för användaren
att välja om denne vill ange indata manuellt, eller använda automatisk inläsning av in-
data från Excel-fil. En if-sats gör att PASGO kör Pr_Pr som vanligt om användaren väl-
jer att mata in data manuellt. Användaren väljer då även vilken option som ska köras.
Om automatisk inläsning av indata väljs, så körs den tidigare beskrivna funktionen som
läser in data från Excel-fil till vektorer för alla datum. Option 4 (beräkna αsmuts och
37
DPkorr) kommer sedan att väljas automatiskt. Sedan anropas en funktion som ger använ-
daren möjlighet att ändra vissa data om så önskas. Dessa data är matarvattenflödet,
varma benets temperatur och kalla benets temperatur. För matarvattenflödet finns endast
möjligheten att inte göra några förändringar, eller att göra kompenseringar för miss-
tänkta fel i prestandadatan i Excel-filen. Dessa kompenseringar är explicit kodade till
vissa värden för vissa specifika datum, och skiljer sig givetvis mellan koderna för reak-
tor 3 och 4. För varma och kalla benens temperaturer får användaren själv välja med hur
många grader som värdena i respektive vektorer ska ändras. Alla värden i den vektorn
ändras då med det gradantalet med hjälp av en for-loop. Denna funktion kan vara an-
vändbar om man vill testa alla data med en något annorlunda temperatur för det varma
och/eller det kalla benet. Detta kan också vara användbart om man misstänker att någon
av dessa temperaturer systematiskt uppmäts aningen fel.
5.5 Körning av PASGO med automatisk inläsning av indata
Om användaren väljer att PASGO ska använda automatisk inläsning av indata från Ex-
cel-fil, så kommer programmet att köra option 4 för att ta fram αsmuts och DPkorr för alla
datum i Excel-filen. Detta kommer dessutom att göras tre gånger för varje datum ef-
tersom Ringhals’ reaktor 3 och 4 har tre ånggeneratorer vardera kopplade till sig. Efter
att data har lästs in till vektorer från Excel-fil, och eventuella ändringar av indata har
gjorts, så startas en for-loop som kommer att genomlöpas lika många gånger som pro-
dukten av 3 och antalet kalenderdatum. I for-loopen finns dessutom två räknare. Den
ena håller reda på vilken ånggenerator för det aktuella datumet som beräkningar sker för,
och börjar på ett för att sedan uppdateras efter varje ånggeneratorn tills den har nått vär-
det tre, då den sätts tillbaka till ett igen. Den andra räknaren startar på noll, och uppdate-
ras sedan var tredje loop. Den håller reda på vilket datum i ordningen som beräkningar
sker för, och börjar på noll eftersom det är indexet för det första elementet i varje vektor.
Varje iteration börjar med att PASGOs variabler sätts lika med noll. Sedan läses data till
variabler från vektorer som innehåller data som är lika för alla ånggeneratorer för ett
visst datum. Räknaren för datum gör att rätt element kan anges från vektorn till varia-
beln. Vissa data, exempelvis ånggeneratortrycket, samt varma och kalla benens tempe-
raturer, skiljer sig mellan de tre ånggeneratorerna, och är därför uppdelade i tre olika
vektorer. Det finns tre if-satser, varav en blir sann för varje genomgång av for-loopen,
38
med hjälp av räknaren som håller reda på vilken ånggenerator som beräkningarna sker
för. När en if-sats blir sann så läses data in till variabler från de vektorer som motsvarar
den specifika if-satsens ånggenerator. Räknaren för datum gör att data läses från rätt
element i vektorerna på samma sätt som tidigare.
När indata har lästs in så anropas Pr_Pr för att göra en körning med indata från det aktu-
ella datumet och den aktuella ånggeneratorn. Pr_Pr körs på samma sätt som med manu-
ell inmatning av data, fast med två skillnader. Funktionen som hanterar användarens
inmatning av data är ändrad till att endast ange förutbestämda parametervärden för ång-
generatorn och liknande. Aktuell option och värden för indata har redan lästs till variab-
lerna så det behöver inte göras igen. Den andra skillnaden är att resultaten skrivs an-
norlunda till resultatfilen. I PASGO med manuell inmatning av data skrivs mer än 50
olika värden för både in- och utdata till resultatfilen. Detta kan vara bra när man bara
kör en körning, men eftersom PASGO körs hundratals gånger när automatisk inläsning
av indata görs så kan resultatfiler med så många värden bli opraktiska att läsa. Istället
skapas två resultatfiler som fokuserar på resultaten för αsmuts och DPkorr. Den första re-
sultatfilen innehåller värden för αsmuts och DPkorr för alla körningar, samt information om
datum, nummer på ånggenerator, eventuella korrigeringar av indata, och slutligen me-
delvärden för αsmuts och DPkorr för varje datum. Den andra resultatfilen är lite mer avska-
lad, och strukturerar värden på αsmuts och DPkorr för varje ånggenerator och medelvärden
på en rad för varje datum. På så sätt är alla resultat för en specifik storhet för alla kalen-
derdatum samlade i samma kolumn. Detta gör det enklare att kopiera data om man vill
göra diagram för att undersöka trender över lång tid. Två förkortade exempel på resul-
tatfiler kan ses i appendix C. Alla värden är i dessa resultatfiler är helt påhittade och
kommer inte från riktiga körningar med riktiga indata.
När Pr_Pr har körts en gång så uppdateras till slut räknarna innan en iteration av for-
loopen är avslutad. Sedan startar nästa iteration där alla variabler sätts lika med noll
igen, och nya värden från nästa element i vektorerna läses in till sina respektive variab-
ler. I varje iteration skrivs det ut till kommandotolken vilken iteration i for-loopen som
körs. Detta gör det enklare att felsöka om programmet kraschar, eller om lösningen för
en viss kombination av indata inte konvergerar. När alla ånggenerator-iterationer för
alla datum har körts, så skriver PASGO ut var resultatfilerna sparas, och pausar pro-
grammet tills användaren avslutar PASGO genom att klicka på enter-knappen.
39
5.6 Verifiering av den nya koden
Koden skriven i C++ verifierades allteftersom ändringar gjordes, genom att jämföra
resultatfiler från körningar av den nya koden med resultatfiler från körningar av origi-
nalprogrammet skrivet i Turbo Pascal 6.0, för att snabbt upptäcka nya fel. Den slutliga
versionen av koden verifierades sedan både för manuell inläsning av data, och för auto-
matisk inläsning av data.
För att verifiera att PASGO fungerar för manuell inläsning av data, gjordes körningar
för alla optioner (utom option 2 som ej används och som inte fungerar korrekt i origi-
nalversionen av PASGO) med koden för Ringhals 3 och 4, och med alla olika val av
indata för både originalversionen av PASGO i Turbo Pascal 6.0 och för den nya vers-
ionen i C++. Samma indata användes i både den gamla och den nya versionen av koden
för samma körningar. I resultatfilerna skrivs varje värde ut med upp till sex värdesiffror.
Alla utskrivna värden i resultatfilerna från dessa körningar var exakt lika. Detta tyder på
att den nya programkoden fungerar lika bra som originalkoden för manuell inläsning av
data.
För att testa om automatisk inläsning av indata fungerar korrekt så gjordes ett antal kör-
ningar av den nya koden med och utan korrigering av matarvattenflödet respektive
varma och kalla benens temperatur. Ett antal kalenderdatum valdes sedan ut slumpmäss-
igt, och jämfördes sen med resultaten från körningar gjorda med option 4 i den gamla
koden med motsvarande indata. Eftersom αsmuts och DPkorr är de enda utdata som skrivs
till resultatfilen vid körningar med automatisk inläsning av indata så var dessa de enda
resultaten som jämfördes. I de flesta fallen var resultaten från körningarna med den
gamla och den nya koden exakt lika för det utskrivna antalet värdesiffror. För ett par
enstaka körningar var den sista utskrivna värdesiffran avrundad annorlunda för de två
olika koderna, när den efterföljande värdesiffran var nära fem. Detta kan bero på att vid
automatisk inläsning av data används division för att ta fram ett fåtal parametrar, medan
för manuell inmatning av data angavs dessa parametrar med decimaltal. Om den sista
värdesiffran är väldigt nära att ändras så kan avrundningsfel som detta uppstå. En sådan
liten skillnad i resultaten spelar ingen roll för programmets ändamål.
40
5.7 Version med uppdaterade värmeöverföringskorrelationer
Slutligen skapades en andra version av programkoden för både reaktor 3 och 4. I denna
version har Dittus-Boelters korrelation, som finns med i originalversionen av PASGO
för beräkning av Nusselts tal för tuberna, bytts ut mot den modernare Gnielinskis korre-
lation, som kan ses i Ekvation 21. Denna version av koden testades: alla optioner, inklu-
sive den automatiska inläsningen av data kunde köras utan att krascha. För option 4
jämfördes resultaten för αsmuts och DPkorr från den första versionen av koden respektive
den nya versionen av koden. Det visade sig att resultaten för DPkorr var nästan exakt lika
för de båda versionerna, medan αsmuts antog högre värden för den nya versionen av ko-
den.
Om man observerar många körningar kan man dock se att båda versionerna visar
samma mönster för samma indata. I Figur 16 och Figur 17 kan man se en jämförelse av
αsmuts för körningar med de båda versionerna av programkoden. Sex körningar gjordes
för koderna för både reaktor 3 och reaktor 4. Alla körningar gjordes med olika exem-
pelvärden som indata och har ingen speciell relation till varandra. De visar dock ett ex-
empel på hur man kan observera trender för körningar gjorda vid olika tidpunkter. Det
ska noteras hur versionen som använder Gnielinskis korrelation har större absolutvärden,
men att de båda versionerna följer samma mönster, vilket betyder att programmet ska
kunna användas för att observera trender över tid. I Figur 18 och Figur 19 kan en jämfö-
relse av DPkorr för samma körningar med de båda versionerna observeras. Även denna
gång visas sex körningar för reaktor 3 och lika många för reaktor 4. Graferna är så lika i
det här fallen att de gömmer varandra.
Snarlika indata har använts för både reaktor 3 och 4, vilket är varför graferna för reaktor
3 liknar de för reaktor 4. De är dock inte exakt lika, och graferna bör därför inte använ-
das för att göra jämförelser mellan de två programkoderna.
41
Figur 16 Jämförelse av αsmuts för Dittus-Boelters korrelation och Gnielinskis korrelation, för sex körningar med
påhittade data. Programkoderna för reaktor 3 används.
Figur 17 Jämförelse av αsmuts för Dittus-Boelters korrelation och Gnielinskis korrelation, för sex körningar med
påhittade data. Programkoderna för reaktor 4 används.
42
Figur 18 Jämförelse av DPkorr för Dittus-Boelters korrelation och Gnielinskis korrelation, för sex körningar med
påhittade data. Programkoderna för reaktor 3 används.
Figur 19 Jämförelse av DPkorr för Dittus-Boelters korrelation och Gnielinskis korrelation, för sex körningar med
påhittade data. Programkoderna för reaktor 4 används.
43
6. Diskussion
I originalversionen av PASGO används Dittus-Boelters korrelation (se Ekvation 17)
med n = 0,4 för beräkningar av Nusselts tal vid både insidan och utsidan av tuberna.
Dock säger teorin om korrelationen att n = 0,4 endast ska användas vid uppvärmning,
det vill säga när tubväggens temperatur är större än fluidens temperatur. Vid nedkylning
däremot, det vill säga när tubväggens temperatur är mindre än fluidens temperatur, ska
istället n = 0,3 användas. Vid tubernas utsida är tubväggens temperatur större än den
omgivande fluidens temperatur, vilket betyder att n = 0,4 ska användas i korrelationen.
Vid tubernas insida är dock tubväggens temperatur klart kallare än fluiden i tuberna,
vilket betyder att n = 0,3 borde användas för dessa beräkningar istället för n = 0,4. Det
är oklart varför n = 0,3 inte har använts här i originalkoden, och jag antar att det är ett
misstag. Jämförelse mellan originalkoden och en version som ändrar värdet till n = 0,3
för detta fall ger dock endast små skillnader. Det har valts att inte göra några ändringar
till korrelationen för den version av den nya programkoden i C++ som använder Dittus-
Boelters korrelation. Programmets främsta användningsområde är för att beräkna αsmuts
många gånger över lång tid för att kunna se hur försmutsning av tuberna utvecklas med
tiden. Det är då trender för resultaten som är det viktiga och inte att beloppet för αsmuts
har exakt korrekt storlek. Av den anledningen behåller denna version av programkoden
exakt samma korrelationer som tidigare för att möjliggöra jämförelser av nya körningar
med äldre studier gjorda med den tidigare versionen av PASGO. Om man vill använda
PASGO för att göra beräkningar med mindre osäkerhet så är versionen av PASGO som
använder Gnielinskis korrelation att rekommendera istället.
Jämförelserna mellan versionen av PASGO som använder Dittus-Boelters korrelation
och versionen som använder Gnielinskis korrelation visade att Gnielinskis korrelation
resulterade i ett större värde på αsmuts. Detta kan ses i Figur 16 och Figur 17, där körningar
med exempeldata kördes för båda versionerna av PASGO. Det är svårt för mig person-
ligen att bekräfta att Gnielinskis korrelation är den korrelation som ger de mer korrekta
värdena på αsmuts, utan att ha en mycket större mängd av experimentella data att jämföra
de två korrelationerna med. Gnielinskis korrelation har dock experimentellt fastställts ge
mer korrekta värden. Versionen som använder Gnielinskis korrelation rekommenderas
därför att användas. Även beräkningsprogrammet TRACE, som bland annat kan använ-
das för att göra säkerhetsanalyser i både BWR och PWR, har tidigare bytt ut Dittus-
44
Boelters korrelation mot Gnielinskis korrelation. [17] Detta kan också ses som ett teck-
en på att Gnielinskis korrelation är den mer korrekta korrelationen att använda.
Som tidigare nämnt så är det viktigaste användningsområdet för programmet att beräkna
αsmuts för att se utvecklingen av tubernas försmutsning. Man observerar då trender, alltså
hur αsmuts förändras över tid. I Figur 16 och Figur 17 kan man se att trenderna för αsmuts är
snarlika för de båda versionerna av PASGO, även om själva beloppet skiljer sig. Detta
gör att versionen av PASGO som använder Dittus-Boelters korrelation fortfarande har
sina användningsområden, exempelvis om man vill göra jämförelser med tidigare stu-
dier gjorda med den gamla versionen av PASGO. Flödena i och utanför tuberna har
typiska Reynolds tal som är klart över 104 (turbulent strömning), vilket uppfyller villko-
ren för att Dittus-Boelters korrelation ska kunna användas. Dittus-Boelters korrelation
är alltså inte nödvändigtvis en dålig korrelation att använda i sammanhanget, även om
det mesta tyder på att Gnielinskis korrelation är bättre.
C++ valdes till det programspråk som PASGOs programkod skulle konverteras till. C++
är ett modernt programspråk som förutspås finnas kvar över en lång tid framöver. Det
finns tillgängligt som en del av Microsoft Visual Studio, som Ringhals ansåg vara ett
bra alternativ då det skulle underlätta integreringen i deras processövervakningssystem
PIS. I och med detta har C++ i Visual Studio varit ett bra val som programspråk för
projektet. Konverteringen från Turbo Pascal 6.0 har också gått relativt smärtfritt, även
om skapandet av en funktion som möjliggör automatisk inläsning av data från Excel-fil
var krångligare. I efterhand har diskussioner med andra anställda mynnat ut i att ett an-
nat bra alternativ skulle kunna ha varit C#. C# ska vara anpassat för att möjliggöra enkel
kommunikation med andra Microsoft-applikationer, såsom Excel och Word. Om C#
hade valts istället för C++ är det möjligt att skapandet av en funktion som läser in data
från en Excel-fil skulle kunna göras på ett enklare sätt, även om detta inte är bekräftat.
C# finns också tillgängligt i Visual Studio, så att det skulle vara enklare att integrera i
PIS gäller även för C#.
Konverteringen av koden till C++ får anses vara lyckad då de nya versionerna av PAS-
GO bedöms fungera bra. Den första versionen av koden för både R3 och för R4 ger re-
sultat som stämmer överens med den gamla koden på sex värdesiffror. Den nya vers-
ionen som använder Gnielinskis korrelation ger resultat som skiljer sig en del på vissa
45
ställen, men det är att förvänta sig när man gör beräkningar på ett annat sätt. Funktionen
som läser in data automatiskt från Excel-fil till PASGO fungerar även den bra, även om
koden inte är helt lättförstådd. Det var svårt att komma fram till ett enkelt och effektivt
sätt att hantera Excel-filer med C++, men det är möjligt att det finns enklare sätt att
skriva funktionen på än hur den ursprungligen skrevs. Att det nu finns möjlighet att göra
körningar för att ta fram αsmuts och DPkorr för alla tidigare prestandatester för en reaktor i
en och samma körning är också en användbar förbättring av PASGO, speciellt när man
studerar hur αsmuts utvecklas över lång tid. Manuell inmatning av data för alla dessa pre-
standatester innebar att man fick lägga ner dagar, om inte veckor, av arbete, samtidigt
som man riskerade att råka skriva fel någonstans. Sedan var man tvungen att lägga ner
lika mycket tid om man ville göra en förändring av en parameter, exempelvis varma
eller kalla benets temperatur. Nu kan man göra alla dessa körningar på bara några minu-
ter. Utöver ovanstående har diverse allmänna förbättringar har gjorts till programkoden
även om det fortfarande finns en hel del kvar att göra, som att exempelvis förbättra läs-
barheten genom att eliminera de resterande goto-satserna.
6.1 Slutsatser
Programkoden har konverterats från Turbo Pascal 6.0 till ett modernare programspråk
(C++), vilket gör att programmet nu kan köras utan problem på modernare operativsy-
stem som exempelvis Windows 7 och 10. Programmet har även gjorts mer användar-
vänligt genom att möjliggöra automatisk inläsning av data från Excel-fil. Detta minskar
tiden som läggs på att manuellt mata in data till programmet, och låter användaren göra
hundratals körningar på bara ett par minuter. Programkodens struktur har också förbätt-
rats på många ställen.
Värmeöverföringskorrelationerna som originalversionen av programmet använder har
jämförts med två modernare korrelationer. Jämförelser med experimentella data tyder
på att en av dessa, Gnielinskis korrelation, ger noggrannare resultat än den tidigare an-
vända Dittus-Boelters korrelation, även om det är svårt att fastställa med säkerhet. Av
den anledningen har två versioner av programkoderna för Ringhals 3 respektive Ring-
hals 4 skapats, en som använder Dittus-Boelters korrelation och en som använder Gni-
elinskis korrelation.
46
I och med detta dras slutsatserna att målen med examensarbetet, det vill säga att konver-
tera PASGOs programkod så att programmet går att använda på Windows 7 och 10, att
göra PASGO mer användarvänligt, samt att analysera och jämföra korrelationer för
värmeöverföring som kan användas i programmet, har uppfyllts.
47
7. Referenslista
[1] Energiläget 2017. [webbsida]. Eskilstuna: Energimyndigheten. [uppdaterad 2018-
02-19; läst 2018-11-21]. Tillgänglig via: http://www.energimyndigheten.se/aret-
2017/nast-hogsta-elproduktionen-nagonsin/
[2] Framtiden för R1 och R2. [webbsida]. Solna: Vattenfall AB. [uppdaterad 2018-07-
17; läst 2018-11-21]. Tillgänglig via: https://corporate.vattenfall.se/om-oss/var-
verksamhet/var-elproduktion/ringhals/produktion-och-driftlage/framtiden-for-r1-och-r2/
[3] Så fungerar kärnkraft. [webbsida]. Solna: Vattenfall AB. [uppdaterad: 2014-05-09;
läst 2018-11-21]. Tillgänglig via: https://corporate.vattenfall.se/om-energi/el-och-
varmeproduktion/karnkraft/sa-fungerar-karnkraft/
[4] Så fungerar en tryckvattenreaktor. [webbsida]. Katrineholm: Strålsäkerhetsmyndig-
heten. [uppdaterad 2017-07-25; läst 2018-11-21]. Tillgänglig via:
https://www.stralsakerhetsmyndigheten.se/omraden/karnkraft/sa-fungerar-ett-
karnkraftverk/sa-fungerar-en-tryckvattenreaktor/
[5] Turner C W. Fouling of Nuclear Steam Generators: Fundamental Studies, Operating
Experience and Remedial Measures Using Chemical Additives. AECL Nuclear Review.
Juni 2013;2(1):63-67.
[6] Lovett J T, Dow B L. Steam Generator Performance Degradation. EPRI, Palo Alto,
CA: 1991. NP-7524.
[7] Kreider M A, White G A, Varrin R D Jr. Steam Generator Thermal Performance
Degradation Case Studies, EPRI, Palo Alto, CA: 1998. TR-110018.
[8] Dominon Engineering. Steam Generator Thermal Performance Transients. Presenta-
tion at; 2014; EPRI SG Secondary Side Management Conference, Baltimore.
[9] Ekroth I, Granryd E. Tillämpad termodynamik. Stockholm: Institutionen för Meka-
nisk värmeteori och kylteknik, Kungl Tekniska Högskolan; 1990.
[10] Pavlenko V, Rosenqvist L, Kochukhov O. Fluid mechanics Compendium. 10. uppl.
Uppsala: Department of Physics and Astronomy Uppsala University; 2015.
[11] Incropera F P, De Witt D P. Fundamentals of Heat and Mass Transfer. 3. uppl.
New York: John Wiley & Sons Inc; 1990.
[12] Laminar vs Turbulent Flow. [webbsida]. Nuclear Power for Everybody. [läst 2018-
11-22]. Tillgänglig via: https://www.nuclear-power.net/nuclear-engineering/fluid-
dynamics/flow-regime/laminar-turbulent-flow/
48
[13] Tong L S, Weisman J. Thermal Analysis of Pressurized Water Reactors. 3. uppl.
New York: American Nuclear Society; 1996.
[14] Kreith F, Bohn M S. Principles of Heat Transfer. 4. uppl. New York: Harper-
Collins Publishers; 1986.
[15] ÅG-system Ringhals 3/4. [företagsinternt utbildningsmaterial]. Kärnkraftssäkerhet och Utbildning AB; 2005.
[16] Steam Generator. [webbsida]. Nuclear Power for Everybody. [last 2018-11-22]. Tillgänglig via: https://www.nuclear-power.net/steam-generator/
[17] TRACE V5.0 Theory Manual Field Equations, Solution Methods, and Physical Models. Washington DC: U.S. Nuclear Regulatory Commission; 2017.
49
Appendix A
Tabell 1 Experimentella värden på Nusselts och Reynolds' tal, för luft med Prandtls tal lika med 0,71. Dessa värden
används i diagrammen i Figur 8 och Figur 9.
Nusselts tal (Nu) Reynolds’ tal (Re)
2,5 242
2,83 272
2,47 303
2,85 340
3,16 418
3,04 560
3,91 850
3,24 882
4,0 1235
4,5 1700
5,53 1940
6,05 2400
8,07 2750
11,55 3135
12,98 4000
24,1 5550
20,58 7100
29,2 7950
34,27 11600
47,4 15500
57,28 18350
58,9 23500
84,55 33100
88,75 41800
106,5 49500
188,7 82900
50
Appendix B
Flödesschema för opt 4
Globala variabler definieras (huvudprogrammet)
↓ Skapar/väljer en fil som resultaten ska skrivas till (”Ass_files”)
↓ Globala variabler sätts lika med noll (”Init_var_To_Zero”)
↓ Ångtabelldata läses in från dat-filer till AX-vektorerna (”Fdat”)
↓ Indata matas in, såsom Th, Tc, matarvattenflöde, ÅG-tryck, ångflöde med mera. ÅG-
specifika indata matas in (mestadels geometriska data för ÅGn). Indata skrivs till resul-tatfilen. (”Pr_Input”)
↓ Diverse flöden för sekundärkretsen beräknas, samt primärflödet. Beräknar också diverse
värden vid fallspalten, inklusive fallspalts-DP (friktion och elevation). (”Start”) ↓
Beräknar entalpin för varma och kalla delen av sekundärsidan med hjälp av temperatu-rerna som beräknades i ”Start”. Beräknar också entalpin för varma och kalla benet på
primärsidan. (”HLoop”) ↓
Beräknar diverse värden för varma och kalla benen på primärsidan och för varma och kalla delen av risern på sekundärsidan, såsom viskositeter, värmeledningsförmågor,
volymiteter, Reynolds tal, Prandtls tal etc. (”HLoop”) ↓
Beräknar effekten för värmeöverföringen mellan primärkretsen och sekundärkretsen genom tuberna, samt yteffekten. (”Pr_Ka”)
↓ Beräknar nya entalpier och temperaturer för sekundärsidan. Beräknar DP för hela höjd-elementet i ÅG. Beräknar nya entalpier och temperaturer för primärsidan. Beräknar och summerar elevations- och friktions-DP för tuberna för primärsidan för alla höjdelement. Beräknar nya tryck för primärsidan. Summerar effekten för alla höjdelement. Summerar
DP för risern över alla höjdelement. (”HLoop”) Loopen till höger körs lika många gånger som antalet höjdelement: Ni=45 gånger
↓ Beräknar ånghalten vid riser-utlopp (”HLoop”)
↓ Om temperaturskillnaden mellan det varma och kalla benen på primärsidan är större än
0,001: Beräknar Alfa-smuts (”Iter”) ↓
Beräknar DP för separatorerna. Summerar det totala DP för hela sekundärsidan (riser, separatorer och fallspalt). (”Pr_Pr”)
↓
51
Loopen ovan avslutas och programmet fortsätter nedan när temperaturskillnaden (ab-solutbeloppet) mellan varma och kalla benen för det sista höjdelementet på primärsidan är mindre än 0,001 ºC och när det totala DP för hela sekundärsidan (absolutbeloppet) är
mindre än 10 Pa. ↓
Beräknar pumptryck och tryckfall för hela primärsidan. Beräknar DP-korr. (”Pr_Prfl”) ↓
Beräknar ångflödet till turbinen och till mellanöverhettaren, samt med hur många pro-cent som turbinkonstanten behöver ändras. (”Pr_Tmch”)
↓ Skriver resultaten till resultatfilen. (”Prnt2”)
↓ Om användaren väljer detμ Skriver extra körningsdata till resultatfilen. (”Prnt3”)
52
Appendix C
Exempel på resultatfil 1:
ALFAS (kW/m2K) DP-CORR (dimensionslös)
92-11-06 Korrigeringar för Mavaflöde: 0.0000 kg/s Thot: 0.0000 C Tcold: 0.0000 C
Loop 1: 30.0000 1.0000
Loop 2: 31.0000 1.1111
Loop 3: 29.0000 0.8889
Medel: 30.0000 1.0000
95-12-24 Korrigeringar för Mavaflöde: 0.0000 kg/s Thot: 0.0000 C Tcold: 0.0000 C
Loop 1: 35.1250 0.8888
Loop 2: 32.5555 0.7777
Loop 3: 33.1543 0.6666
Medel: 33.5432 0.7878
01-01-01 Korrigeringar för Mavaflöde: 0.0000 kg/s Thot: 0.0000 C Tcold: 0.0000 C
Loop 1: 25.7891 0.9999
Loop 2: 26.3456 0.9191
Loop 3: 26.2345 1.1010
Medel: 26.0123 0.9876
02-02-02 Korrigeringar för Mavaflöde: 0.0000 kg/s Thot: 0.0000 C Tcold: 0.0000 C
Loop 1: 32.2222 0.7770
Loop 2: 31.9187 0.7990
Loop 3: 31.3457 0.8124
Medel: 31.8765 0.8001
12-04-30 Korrigeringar för Mavaflöde: 0.0000 kg/s Thot: 0.0000 C Tcold: 0.0000 C
Loop 1: 38.1234 0.8945
Loop 2: 39.4321 0.9104
Loop 3: 40.1137 0.8729
Medel: 39.5531 0.8899
18-11-16 Korrigeringar för Mavaflöde: 0.0000 kg/s Thot: 0.0000 C Tcold: 0.0000 C
Loop 1: 33.4512 0.8781
Loop 2: 33.9100 0.8978
Loop 3: 35.6319 0.7632
Medel: 34.2105 0.8367
Exempel på resultatfil 2:
ALFAS (kW/m2K) DP-CORR (dimensionslös)
Loop 1 Loop 2 Loop 3 Medel Loop 1 Loop 2 Loop 3 Medel
92-11-06 30.0000 31.0000 29.0000 30.0000 1.0000 1.1111 0.8889 1.0000
95-12-24 35.1250 32.5555 33.1543 33.5432 0.8888 0.7777 0.6666 0.7878
01-01-01 25.7891 26.3456 26.2345 26.0123 0.9999 0.9191 1.1010 0.9876
02-02-02 32.2222 31.9187 31.3457 31.8765 0.7770 0.7990 0.8124 0.8001
12-04-30 38.1234 39.4321 40.1137 39.5531 0.8945 0.9104 0.8729 0.8899
18-11-16 33.4512 33.9100 35.6319 34.2105 0.8781 0.8978 0.7632 0.8367