# Likevektskonsentrasjoner (Eksamen høst 2020, oppgave 33(c))
Fosgen (COCl$_2$) er en svært giftig gass som ble brukt som stridsgass under første verdenskrig. I dag er fosgen
et viktig utgangskjemikalie som kan brukes til å fremstille polykarbonat som bl.a. brukes til å lage "uknuselige"
butikkvinduer.

Fosgen dekomponerer etter følgende reaksjonslignin:

$$\text{COCl}_2(\text{g}) + \rightleftharpoons \text{CO} (\text{g}) + \text{Cl}_2 (\text{g}),$$

der likevektskonstanten ved 1100 K er $K_{p} = 1.6 \times 10^{2}.$

**Hvis rent fosgen med et initielt trykk på 1.0 atm dekomponerer ved 1100 K, hva blir trykket av de ulike gassene ved likevekt?**

Vi skal løse denne oppgaven ved å bruke Python. For å kunne regne symbolsk skal vi bruke et bibliotek som heter [SymPy](https://www.sympy.org/):


```python
import sympy as sym  # Importer SymPy
```


```python
# Definer størrelsene vi kjenner
START_COCl2 = 1.0
KP = 1.6e2
```

Over har vi listet opp hva vi kjenner. La oss også liste opp alle de ukjente trykkene som vi skal bestemme:
- $P_{\text{COCl}_2}$
- $P_{\text{CO}}$
- $P_{\text{Cl}_{2}}$

Vi har altså tre ukjente. La oss definere de som størrelser (spesifikt som [SymPy-symboler](https://docs.sympy.org/latest/tutorial/intro.html#a-more-interesting-example)) slik at vi kan regne med de (dette blir litt som når vi introduserer $x$ osv. for ukjente størrelser i ligninger vi skriver for hånd):


```python
# Vi definerer de ukjente størrelsene:
p_COCl2, p_CO, p_Cl2 = sym.symbols('p_COCl2 p_CO p_Cl2')
```

Vi har nå definert konsentrasjonene. Disse er foreløpig ukjente. For å bestemme de, så trenger vi noen ligninger som relaterer de til hverandre. Mulige slike ligninger er:
- likevektskonstanten
- massebalanser


```python
# La oss begynne med likevektskonstanten:
ligning1 = sym.Eq((p_CO * p_Cl2)/p_COCl2, KP)
```

Vi kan be SymPy skrive ut hva denne ligningen er, for å sjekke at den ser ut som vi hadde tenkt:


```python
ligning1
```

Her har vi tre grunnstoffer i forbindelsene som er involvert i reaksjonen, C, O og Cl. Vi kan derfor lage tre molbalanser for disse grunnstoffene. Her bruker vi prinsippet om at grunnstoffer ikke forsvinner i kjemiske reaksjoner. Dvs. hvis vi vet at vi har $n$ mol av grunnstoff $X$ før likevekt innstilles, så må vi fortsatt ha $n$ mol av grunnstoffet $X$ når likevekten er innstilt.

Vi lager tre molbalanser:
- En for karbon:
  $$n_{\text{COCl}_2,{\text{start}}} = n_{\text{COCl}_2,{\text{likevekt}}} + n_{\text{CO},{\text{likevekt}}}$$

- En for oksygen:
  $$n_{\text{COCl}_2,{\text{start}}} = n_{\text{COCl}_2,{\text{likevekt}}} + n_{\text{CO},{\text{likevekt}}}$$

- En for klor:
  $$2 n_{\text{COCl}_2,{\text{start}}} = 2 n_{\text{COCl}_2,{\text{likevekt}}} + 2n_{\text{Cl}_2,{\text{likevekt}}}$$

Her ser vi at ligningen for karbon og oksygen er identisk. Det betyr at de tre molbalansene i virkeligheten bare gir
to uavhengige ligninger (f.eks. den for karbon og den for klor).

Over skrev vi molbalanser, men her bruker vi trykk. Vi kan regne om ved å bruke ideell gasslov: $P = \frac{nRT}{v}$. Her blir dette bare en felles faktor som vi ganger ligningene over med. Med andre ord, vi skal skrive de direkte med trykk. La oss gjøre det:


```python
ligning2 = sym.Eq(START_COCl2,  p_COCl2 + p_CO)  # for karbon
ligning3 = sym.Eq(START_COCl2, p_COCl2 + p_Cl2)  # for oksygen/klor
```


```python
# Skriv ut for dobbeltsjekk:
ligning2
```


```python
ligning3
```

Vi har nå tre ligninger og vi har tre ukjente. Dette kan vi (eller i dette tilfellet, SymPy) løse:


```python
løsninger = sym.solve([ligning1, ligning2, ligning3], [p_COCl2, p_CO, p_Cl2], dict=True)
```


```python
løsninger
```

En av løsningene SymPy fant gir negative trykk. Dette er en ugyldig løsning og vi beholder bare den som har kun positive løsninger:


```python
# Vis gyldige løsninger:
gyldige = []
for løsning in løsninger:
    if all(i > 0 for i in løsning.values()):
        gyldige.append(løsning)
        print('Gyldig løsning:')
        print(f'- P(COCl2) = {løsning.get(p_COCl2):.3g} atm')
        print(f'- P(CO) = {løsning.get(p_CO):.3g} atm')
        print(f'- P(Cl2) = {løsning.get(p_Cl2):.3g} atm')
```

Her kan vi sammenlikne med løsningsforslaget:
- $P_{\text{COCl}_2} = 0.006$ atm,
- $P_{\text{CO}} = 0.994$ atm,
- $P_{\text{Cl}_{2}} = 0.994$ atm,

38e05506e91106314740556661273cd3bcce8668
ipynb
Jupyter Notebook
jupyter/likevekt/likevekt2020eksamen.ipynb
andersle/kj1000
9d68e9810c5541ebbe2e4559df8d066a85780129
CC-BY-4.0
jupyter/likevekt/likevekt2020eksamen.ipynb
andersle/kj1000
9d68e9810c5541ebbe2e4559df8d066a85780129
CC-BY-4.0
2021-06-21T15:04:15.000Z
2021-11-10T10:58:07.000Z
jupyter/likevekt/likevekt2020eksamen.ipynb
andersle/kj1000
9d68e9810c5541ebbe2e4559df8d066a85780129
CC-BY-4.0
Qwen/Qwen-72B
1. YES
2. YES