Norges teknisk naturvitenskapelige universitet MTKJ Side 1 av 5 Ansvarlig: Tore Haug-Warberg (haugwarb at nt dot ntnu dot no) Bokmål PROSESSTEKNIKK (TKP4120) Tema: "Van der Waals tilstandslikning" (ca. 4 timer) Forkunnskaper: funksjoner, listebehandling, hasttabeller, enhetstesting, p_ig, p_vdw, pptable, **kwargs Etter å ha fullført denne oppgaven skal du ha kvantitativ kunnskap om van der Waals tilstandslikning og dens karakteristiske p(t, V, N)-oppførsel. Oppgave 1 Tilstandsbegrepet er uten tvil det mest sentrale begrepet du vil møte i hele studiet. Eller skal vi si et av de mest sentrale begrepene fordi den eksakte betydningen av tilstand vil skifte mening fra det ene fagfeltet til det andre. I prosesskjemien er det som oftest den termodynamiske tilstanden vi sikter til, mens det i kjemien kan være for eksempel oksidasjonstilstanden til grunnstoffene i et molekyl. Den termodynamiske tilstanden er på sin side definert ut ifra systemets eksperimentelle oppførsel. For et kjemisk system med kjent sammensetning og kjent fase(konfigurasjon) vil tilstanden være entydig bestemt når energien og volumet også er bestemt. Dette er ingen matematisk tilnærmelse, men et eksperimentelt faktum. Men, vi kan ikke håndtere alle systemer med en eksperimentell tilnærming. Det ville kreve uendelig mye laboratorietid og ressurser. For å komme videre tyr vi derfor til modeller. Disse kan være enkle, eller komplekse. En av de enkleste modellene som vi kan bruke for å beskrive oppførselen til en virkelig gass (inklusivt kondensasjon til væske) er van
Side 2 av 5 der Waals (1873) tilstandslikning. For et system med kun én kjemisk komponent kan likningen skrives som der v ˆ= V/N eller V m fra læreboka. p VdW = NRT ( N ) 2 V Nb a V ˆ= RT v b a v 2 Merk: det er temperatur som inngår som fri variabel i likningen ovenfor ikke energi. Det at temperaturen er likeverdig med energi krever en lengre utledning som du skal bli spart for i dette kurset, men sammenhengen vil bli belyst senere i studiet. Parametrene a og b kan enten oppfattes som empiriske størrelser, eller som fundamentale konstanter knyttet til det kritiske punktet til stoffet hvor det ikke lenger er forskjell på damp og væske. I det sistnevnte tilfellet gjelder: a = 27 64 (RT c) 2 p c (1) b = 3 8 RT c p c (2) Her står T c og p c for henholdsvis kritisk temperatur og kritisk trykk til stoffet. Det er også vanlig å definere kritisk kompressibilitet til stoffet som en teoretisk, universell, men ikke målbar, stoffkonstant: z VdW c ˆ= p cv c RT c = 3 8, (3) I den forrige oppgaven lot vi a og b være empiriske konstanter uten teoretisk forankring. I denne oppgaven skal vi snu på flisa og bestemme a og b fra T c og p c. a) Du har allerede (i en tidligere øving) programmert tilstandslikningen til van der Waals som Python-funksjonen p_vdw lagret i filen p_vdw.py. Her skal vi finpusse funksjonen ytterligere. Gjøre den profesjonell! Funksjonens (nye) signatur er vist nedenfor. 1 25 # ----------------------------------------------------------------------------- 26 # Program constants. 27 # ----------------------------------------------------------------------------- 28 29 RGAS = 8.314472 # Ref: P. J. Mohr and B. N. Taylor, Rev. Mod. Phys, 77, 2005 30 TC = 356.36213134916596 31 PC = 3703703.703703703 32 A = 1.0 # values consistent with tc = 356.36213134916596 K 33 B = 1.0e-4 #... and pc = 3703703.703703703 Pa 34 35 # ----------------------------------------------------------------------------- 1 Variabelnavnene skrives med små bokstaver, det vil si t, v, n, a, b, tc, pc,... Store bokstaver er forbeholdt programkonstanter som for eksempel RGAS, A, B,... Hensikten med programkonstantene er å gi brukeren en mulighet til å kalle funksjonen uten å angi annet enn p_vdw(t, v, n).
36 # Functions. Side 3 av 5 37 # ----------------------------------------------------------------------------- 38 39 def p_vdw(t, v, n=1.0, **kwargs): Det siste argumentet i kallet til funksjonen er en hashtabell kalt **kwargs. Med denne kan du overføre et ubestemt antall parametre til funksjonen. For eksempel a og b, eller T c og p c, eller kanskje også R. Dersom **kwargs er i bruk (altså ikke tom) skal p_vdw være programmert slik at tc og pc gis prioritet over a og b dersom noen skulle finne på å spesifisere alle fire størrelsene samtidig. Når du har fått funksjonen til å virke etter hensikten er det på tide å programmere enhetstestene (jo flere, jo bedre): 83 # ----------------------------------------------------------------------------- 84 # Unit testing. 85 # ----------------------------------------------------------------------------- 86 87 if name == main : 88 import random 89 90 r = random.random() 91 92 # Test implementation of universal gas constant and a, b parameters: 93 print(p_vdw(123.0, 456.0, 890.0) == \ 94 p_vdw(123.0, 456.0, 890.0, **{ rgas : RGAS})) 95 96 print(p_vdw(123.0, 456.0, 890.0)!= \ 97 p_vdw(123.0, 456.0, 890.0, **{ rgas : r})) 98 99 print(p_vdw(123.0, 456.0, 890.0)!= \ 100 p_vdw(123.0, 456.0, 890.0, **{ rgas : 8.3143})) b) Importer funksjonen p_vdw i en ny modul p_vdw_pptable.py som har til oppgave å generere en tabell over kompressibilitet z og redusert trykk p r ˆ= p/p c som funksjon av volum: 1 % Who : You 2 % What : Reduced pressure and compressibility factor from VdW EOS. 3 % Where : Dept. Chem. Eng, NTNU 4 % Why : TKP4120 Exercise 3 5 % When : Now 6 % ----------------------------------------------------------------- 7 % Volume, Reduced pressure, Compressibility, Reduced pressure,... 8 % V, p_r(t_r=0.9), z(t_r=0.9), p_r(t_r=1),... 9 % m^{3}, -, -, -,... 10 % ----------------------------------------------------------------------------- 11 0.00011, 49.6859504132, 7.59090909091, 57.6859504132,... 12... Datafilen kaller du for pptable.txt. Verdiområdene for tilstandsvariablene er angitt her:
Side 4 av 5 29 #------------------------------------------------------------------------------ 30 import pptable # module for generating formatted output 31 import p_vdw # van der Waals equation of state 32 #------------------------------------------------------------------------------ 33 34 # Variables. The temperature is increased nonlinearly. The volume is increased 35 # in a logarithmic fashion from 1.1*b to 1000001*b. 36 n = 1.0 # [mol] 37 t = [ ti*p_vdw.tc for ti in [ 0.9, 1.0, 1.1, 1.2, 1.3, 1.5, 1.8, 3.0 ] ] # [-] 38 v = [ p_vdw.b*(1.0+10**(float(i)/10.0)) for i in range(-10, 61) ] # [m3] 39 40 # Parameters. 41 nv = len(v) # number of volumes (rows) [-] 42 nt = len(t) # number of temperatures (columns) [-] 43 44 # Initialize list-of-list of pressures and compressibilities. 45 p = [ [ None ]*nt for _ in range(nv) ] 46 z = [ [ None ]*nt for _ in range(nv) ] c) Bruk tabell pptable.txt fra forrige deloppgave til å lage denne grafiske fremstillingen av kompressibilitet z som funksjon av trykk p r : 1.4 1.2 Compressibility factor [-] 1 0.8 0.6 0.4 0.2 T r = 0.9 T r = 1.0 T r = 1.1 T r = 1.2 T r = 1.3 T r = 1.5 T r = 1.8 T r = 3.0 0 0 2 4 6 8 10 Reduced pressure [-] Hva skjer med grafen idet T r > 1 går til T r < 1? Hvilken fysikalsk tolkning kan du tillegge T r = 1? Hva er akseavskjæringen med y-aksen for isotermene? Hvilket fortegn har stigningstallet inn mot akseavskjæringen?
Side 5 av 5