############################################################################################################################# READ ME: Dette dokumentet er et forklaringsdokument som er laget for å gjøre det lettere å forstå koden den ligger i mappe sammen med. All koden er pythonkode. Først står det litt om organiseringen og hovedfunksjonene til pythonmodulene (pythonfilene). Deretter er det en mer dyptgående foklaring av modulene, i tillegg til funksjonene som følger med. Til slutt blir de litt mindre kompliserte funksjonene i tillegg til tekstfilene forklart. ############################################################################################################################# Koden brukt til å løse oppgaven er organisert som følger: - All kode brukt for å beregne ulike resultater ligger på samme mappenivå som denne tekstfilen. - De utregnede verdiene blir lagret av koden i .txt-filer. Disse ligger i undermappa "Datafiles" - Koden brukt for å plotte grafene som er lagt inn i oppgaven ligger i undermappa "Plots" ############################################################################################################################# Bruksanvisning for kode som tar seg av beregninger: - Kjør samlefila main.py. - Den vil stille spørsmålet: "Vil du lagre data i filer?". Dersom du ønsker det, skriv inn "ja" og trykk . Hvis ikke, trykk uten å skrive noe. (Alt annet enn "ja" er ekvivalent med å svare "nei") - Deretter vil den stille spørsmålet: "Vil du printe data til skjermen?". Besvar spørsmålet på samme måte som det forrige. - Avhengig av svarene dine, vil du kunne lese dataen som output på skjermen, eller åpne filene i mappen "Datafiles" og lese uavrundede verdier der. ############################################################################################################################# Innholdsfortegnelse med kort forklaring av modulene i hovedmappen: - compression.py: Kode brukt til å beregne verdiene for kompresjon av strøm 9 ut av prosessen. - constants8.py: Konstanter brukt til beregninger underveis i koden. Gitt på forhånd sammen med oppgaven. - DataPrintToScreen.py: Inneholder funksjoner som printer ut resultatene av all den andre koden til skjerm - DataToFile.py: Inneholder funksjoner som lagrer resultatene av all den andre koden i .txt-filer under mappen "Datafiles" - EnergyBalance.py: Inneholder funksjoner brukt til å løse energibalansene over V-1, V-2, V-3 og V-4. - enthalpy.py: Inneholder funksjoner brukt til å beregne varmekapasiteten og entalpiene til de ulike strømmene. - main.py: Hovedkjøringsfil. Samler all den andre koden brukt til beregninger, og gir output til skjerm eller lagrer i filer. - MassBalance.py: Inneholder kode brukt til å lage massesimulator for å beregne vektfraksjoner og massen av strømmene. - WtFrac.py: Inneholder funksjoner brukt til å beregne enkelte vektfraksjoner som delvis ble gitt på forhånd av oppgaven. ############################################################################################################################# Forklaring av modulene og funksjoner de inneholder: ----------------------------------------------------------------------------------------------------------------------------- compression.py: Funskjoner brukt til å beregne verdiene for kompresjon av strøm 9 ut av prosessen. Kan brukes for ideelle gasstrømmer. Alle temperaturene oppgis i kelvin, og alt trykk i bar T_after_compression(): - Tar inn temperatur og trykk før kompresjon, trykk etter og varmekapasiteten til gassen som skal komprimeres - Finner temperatur ut av kompresjonen ved hjelp av likning (3.6.5) - Returnerer uttemperaturen T2 heat_exchange(): - Tar inn temperatur før og etter varmeveksling, og varmekapasiteten til gassen - Bruker likning (3.6.6) til å finne nødvendig varmeoverføring Q - Returnerer varmeoverføringen Q shaftwork_compression(): - Tar inn temperatur før kompresjon, trykk før og etter, og varmekapasiteten til gassen - Bruker likning (3.6.4) til å finne akselarbeidet Ws av kompresjonen - Returnerer akselarbeidet Ws one_step_compression(): - Tar inn temperatur inn og ut, og trykk inn og ut av kompresjon kombinert med kjøling. I tillegg til varmekapasiteten på gassen. - Kaller på T_after_compression(), heat_exchange() og shaftwork_compression() - Returnerer [Ws, Q, T2] ([Akselarbeidet, Varmeoverføringen, temperaturen til strømmen mellom kompressor og kjøler)] three_step_compression(): - Tar inn det samme som one_step_compression() men flere verdier ettersom det er flere steg - Bruker samme fremgangsmåte som one_step_compression() for å finne [Ws, Q, T2] for hvert steg - Summerer sammen verdiene for Ws og Q til WsTotal og QTotal - Returnerer [Ws, Q, Tb, Td, Tf] ([Totalt akselarbeid, Total varmeoverføring, + mellomtemperaturene for alle tre steg i kompresjonen.]) ----------------------------------------------------------------------------------------------------------------------------- constants8.py: Inneholder ingen funksjoner, kun konstanter gitt i oppgaven som brukes til beregning i de andre funksjonene. ----------------------------------------------------------------------------------------------------------------------------- DataPrintToScreen.py: Inneholder funksjoner som printer ut resultatene av de andre modulene på skjermen. MassesAndFractionsToScreen(): - Printer ut massestrømmene og vektfraksjonene på skjermen - Tar inn matrisen med masserstrømmer og vektfraksjoner EnthalpiesToScreen(): - Printer ut både de spesifikke og de abolutte entalpiene på skjermen - Tar inn liste med de spesifikke entalpiene og liste med de absolutte entalpiene til strømmene EnergybalanceToScreen(): - Printer ut resultatene av funksjonene i EnergyBalance.py på skjermen. - Tar inn liste med resultatene funksjonene i Energybalance.py på formen: [T7, A, m10, QV-3, QV-4] CompressionsToScreen(): - Printer ut resultatet av funksjonene i compression.py på skjermen - Tar inn liste med resultatene fra one_step_compression(), liste med resultatene fra three_step_compression() og massen av strøm 9 (= massen CO2) ----------------------------------------------------------------------------------------------------------------------------- DataToFile.py: Inneholder funksjoner som lagrer resultatene av de andre modulene i tekstfiler (.txt-filer) i mappen "DataFiles". MassesDataToFile() - Lagrer massestrømmene og vektfraksjonene i ResultsMassesimulator.txt - Tar inn matrisen med masserstrømmer og vektfraksjoner EnthalpiesDataToFile() - Lagrer de spesifikke entalpiene i ResultsSpecificEnthalpies.txt - Lagrer de abolutte entalpiene i ResultsAbsoluteEnthalpies.txt - Tar inn liste med de spesifikke entalpiene og liste med de absolutte entalpiene til strømmene EnergybalanceDataToFile() - Lagrer resultatene av funksjonene i EnergyBalance.py i ResultsEnergybalances.txt - Tar inn liste med resultatene funksjonene i Energybalance.py på formen: [T7, A, m10, QV-3, QV-4] CompressionsDataToFile() - Lagrer resultatet av funksjonene i compression.py i ResultsCompressions.txt - Tar inn liste med resultatene fra one_step_compression(), liste med resultatene fra three_step_compression() og massen av strøm 9 (= massen CO2) - Gjør om de generelle tallene for Q og Ws ----------------------------------------------------------------------------------------------------------------------------- EnergyBalance.py: Inneholder funksjoner brukt til å løse energibalansene over V-1, V-2, V-3 og V-4. HeatExchangeV1(): - Tar inn liste med absolutte entalpier - Finner T7 numerisk ved hjelp av scipy.optimize.root() og FindT7() - Finner deretter A ved hjelp av Find_delta_lm() med T7 som parameter - Likning (3.5.3) fra rapporten brukes for å finne A - Returnerer T7, A Find_deltaT_lm(): - Tar inn temperaturen ut av varmeveksleren på varm side - Finner deltaT_lm ved hjelp av likning (3.5.4) fra rapporten - Returnerer deltaT_lm FindT7(): - Setter opp en likning som senere løses i HeatExchangeV1() - Henter masser, massefraksjoner, og entalpier fra de andre modulene - Bruker disse til å finne H7 og h7 - Setter opp en likning for T7 ved hjelp av likning (3.3.4) og likning (3.3.8) fra rapporten. CoolerV2(): - Tar inn liste med absolutte entalpier - Finner m10 ved likning (3.5.6) og (3.5.8) ved hjelp av cp_integral() fra enthalpy.py - Returnerer m10 CoolerV3(): - Tar inn matrise med massestrømmer og massefraksjoner - Finner fordampningsentalpien på vektbasis ved hjelp av likning (3.2.4) og likning (3.2.5) - Finner varmeoverføringen Qv-3 ved likning (3.4.4) - Returnerer Qv-3 BoilerV4(): - Tar inn liste med absolutte entalpier og matrise med massestrømmer og massefraksjoner - Kaller på funksjonen CoolerV3() for å finne Qv-3 - Løser finner Qv-4 ved bruk av likning (3.4.7) - Returnerer Qv-4 ----------------------------------------------------------------------------------------------------------------------------- enthalpy.py: Inneholder funksjoner brukt til å beregne varmekapasiteten og entalpiene til de ulike strømmene. cp_H2O(): - Tar inn temperatur i kelvin - Finner varmekapasiteten til H2O ved temperaturen som er oppgitt i kelvin ved hjelp av likning (9) i oppgaven i seksjon A.5 ved bruk av verdier i constants8.py - Returnerer varmekapasiteten til H2O cp_MEA(): - Tar inn temperatur i kelvin - Finner varmekapasiteten til MEA ved temperaturen som er oppgitt i kelvin ved hjelp av likning (9) i oppgaven i seksjon A.5 ved bruk av verdier i constants8.py - Returnerer varmekapasiteten til MEA cp_CO2(): - Tar inn temperatur i kelvin - Finner varmekapasiteten til CO2 ved temperaturen som er oppgitt i kelvin ved hjelp av likning (9) i oppgaven i seksjon A.5 ved bruk av verdier i constants8.py - Returnerer varmekapasiteten til CO2 cp_MEA_solvent(): - Tar inn temperatur i kelvin - Finner varmekapasiteten til MEA-løsning med absorbert CO2 ved temperaturen som er oppgitt i kelvin ved hjelp av likning (10) i oppgaven i seksjon A.5 ved bruk av verdier i constants8.py. Kaller på cp_H2O(), cp_MEA() og cp_CO2() underveis - Returnerer varmekapasiteten til MEA-løsning med absourbert CO2 cp_integral(): - Tar inn en temperatur etter oppvarming, et uttrykk for varmekapasiteten og eventuelt temperatur før oppvarming - Løser integraler av uttrykk av varmekapasitet ved å bruke scipy.integrate sin funksjon quad. (Praktisk så finner funksjonen entalpiendringen ved oppvarming av et stoff med cp gitt av innparameteren.) - Returnerer svaret på integralet (Entalpiendringen ved oppvarming) enthalpies(): - Tar inn matrise med massestrømmer og tilhørende massefraksjoner - Skiller gasstrømmene fra væskestrømmene. Og kaller på enthalpyGases() og enthalpyMEAsol() for å finne de spesifikke entalpiene av strømmene. - Finner den absolutte entalpien til strøm 7 ved hjelp av energibalansene over V-1 (Likningene (3.5.1) og (3.5.2)) fra rapporten - Finner så den spesifikke entalpien til strøm 7 ved bruk av likning (3.3.8) i rapporten. - Returnerer en liste med de spesifikke entalpiene av strømmene enthalpyGases(): - Tar inn liste over massestrøm og vektfraksjoner, og temperaturen til en gasstrøm. - Ved bruk av likningene (3.3.4), (3.3.5) og (3.3.6) i rapporten til å finne den spesifikke entalpien av gasstrømmen - Returnerer den spesifikke entalpien av gasstrømmen enthalpyMEAsol(): - Tar inn liste over massestrøm og vektfraksjoner, og temperaturen til en væskestrøm av MEA-løsning med abs. CO2 - Bruker likning for beregning av entalpien av MEA-løsning fra oppgaven i A.6 til å finne den spesifikke entalpien av strømmen. Kaller på cp_integral() med cp_MEA_sol() og cp_CO2() under beregningen for å finne entalpiendringen ved oppvarming - Returnerer den spesifikke entalpien av væskestrømmen ----------------------------------------------------------------------------------------------------------------------------- main.py: Samlefunksjon for all koden. Brukes for å hente ut resultatene på lesbar måte. - Henter ut resultatet av massesimulatoren i MassBalance.py - Lager en liste over totalmassene av de ulike strømmene - Henter ut resultatet av entalpiberegningene i enthalpy.py - Lager en liste over absolutte entalpier ved å bruke likning (3.3.8) fra rapporten - Henter ut resultatene av kompresjonene fra koden i compression.py - Lager liste over resultatene av energibalansene i EnergyBalance.py - Spør brukeren om de ønsker å få dataene på skjermen og/eller lagret i fil. - Avhengig av svar; printer data til skjerm ved hjelp av funksjonene fra DataPrintToScreen.py og/eller lagrer data i tekstfiler i mappen "DataFiles" ved hjelp av funksjonene i DataToFile.py ----------------------------------------------------------------------------------------------------------------------------- MassBalance.py: Løser massebalansene satt opp i avsnitt (3.3.1) av rapporten numerisk ved hjelp av scipy.optimize.root() - Koden definerer først kjente variable ved bruk av antakelser, kjente verdier og funksjonene i WtFrac.py() Begrunnelse: Koden definerer først kjente variable utenfor funksjonene, dette er for å slippe å definere dem inni hver enkelt funksjon senere. Hvis noen av funksjonene i denne koden skal brukes i andre pythonfiler, må hele Massesimulator.py importeres ved f.eks. å bruke "from Massesimulator import *" SolveMassSimulator(): - Setter opp likningssett over systemet basert på massebalansene (1)-(20) som ble satt opp i avsnitt (3.3.1) i rapporten. MassSimulator(): - Definerer en liste med gjetninger og løser likningssettet satt opp i SolveMassSimulator() numerisk ved bruk av scipy.optimize.root(). - Returnerer en matrise av massestrømmene og tilhørende massefraksjoner for strøm 1-9 ----------------------------------------------------------------------------------------------------------------------------- WtFrac.py: Funksjoner som beregner vektfraksjoner. WtFracCO2(): - Basert på likning (6) i oppgaven - Tar inn loadingen av CO2 i MEA-løsningen - Returnerer vektfraksjonen av CO2 i MEA-løsningen MolarToWtFrac(): - Basert på likning (3.2.2) og (3.2.3) i rapporten - Tar inn liste med molfraksjoner i en strøm på formen: [CO2, H2O, N2, O2, MEA] - Returnerer liste med vektfraksjoner i samme rekkefølge ----------------------------------------------------------------------------------------------------------------------------- ############################################################################################################################# Forklaring av plotfunksjonene i mappen "Plots": - Alle funksjonene bruker den samme hovedfunksjonen for plotting: likning (4) fra oppgaven. - Forskjellen mellom dem er at de har ulike parametre satt konstant i formelen - Verdier for beregning av K_H og K_2 ligger i avsnitt A.2 og A.3 i oppgaven - Formel for beregning av K_H basert på konstanter ligger under avsnitt A.2 i oppgaven plot_loading_partial_pressure.py - Plotter loading av CO2 i MEA-løsningen som en funksjon av partialtrykket av CO2. plot_partial_pressure_loading.py - Plotter partialtrykket av CO2 som en funksjon av loadingen av CO2 i MEA-løsningen. plot_partial_pressure_temperature.py - Plotter partialtrykket av CO2 som en funksjon av temperaturen i kelvin. ############################################################################################################################# Forklaring av tekstfilene (.txt-filene) i mappen "DataFiles": - ResultsAbsoluteEnthalpies.txt Inneholder de beregnede absolutte entalpiene, H, for strømmene 1-9. - ResultsCompressions.txt Inneholder beregnet akselarbeid Ws, varmeoverføring Q og mellomtemperaturer under kompresjon for strøm 9, og for mer generelle tilfeller. Dette gjelder både kompresjon i ett og i tre steg. - ResultsEnergybalances.txt Inneholder dataen som skulle beregnes ved hjelp av energibalanser i del 3 av oppgaven: (V-1: T7 og A), (V-2: m10), (V-3: Q) og (V-4: Q) - ResultsMassesimulator.txt Inneholder resultatet av massesimulatoren: massefraksjoner og massestrømmen av strømmene 1-9 - ResultsSpecificEnthalpies.txt Inneholder de beregnede spesifikke entalpiene, h, for strømmene 1-9 #############################################################################################################################