Skip to content

Commit

Permalink
Update documentation
Browse files Browse the repository at this point in the history
  • Loading branch information
rwexler committed Sep 23, 2024
1 parent dd3fb35 commit dc42ffd
Show file tree
Hide file tree
Showing 39 changed files with 1,272 additions and 18 deletions.
2 changes: 1 addition & 1 deletion .buildinfo
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Sphinx build info version 1
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
config: 414da2286f51c76efc78fdfe54bb1228
config: 18f1ae076fd0dbe6d99222420c69fe6e
tags: 645f666f9bcd5a90fca523b33c5a78b7
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added _images/microstate_macrostate.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
246 changes: 246 additions & 0 deletions _sources/lecture-10-stat-thermo.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,246 @@
---
jupytext:
text_representation:
extension: .md
format_name: myst
format_version: 0.13
jupytext_version: 1.16.4
kernelspec:
display_name: comp-prob-solv
language: python
name: python3
---

# Lecture 10: Statistical Thermodynamics

## Learning Objectives

By the end of this lecture, you should be able to

1. Define the microstate and macrostate of a system.
2. Apply the Boltzmann distribution to calculate the probability of a system being in a given microstate.
3. Explain the role of the partition function in calculating the thermodynamic properties of a system.

## Introduction to Statistical Thermodynamics

In the previous lecture, we discussed the laws of thermodynamics, which describe the behavior of macroscopic systems in terms of energy, work, and heat. In this lecture, we will take a different approach to understanding thermodynamics by considering the behavior of individual particles that make up a system. This approach is known as **statistical thermodynamics** or **statistical mechanics**. Statistical thermodynamics provides a microscopic view of thermodynamic systems by considering the statistical distribution of particles in different energy states. By understanding the behavior of individual particles, we can derive macroscopic thermodynamic properties such as temperature, pressure, and entropy.

## Microstates and Macrostates

In statistical thermodynamics, we distinguish between two important concepts: **microstates** and **macrostates**.

![Difference between microstates and macrostates](microstate_macrostate.png)

As shown above, a **microstate** refers to the specific configuration of a system at the microscopic level, including the positions and velocities of individual particles. For example, in a gas, a microstate would specify the position (center of each arrow) and velocity (direction of each arrow) of each gas molecule. A **macrostate**, on the other hand, refers to the overall properties of the system that can be observed and measured macroscopically, such as temperature, pressure, and volume. The macrostate of a system is determined by the collection of microstates that are consistent with the macroscopic properties of the system.

## Boltzmann Distribution

````{margin}
```{note}
A **heat bath** is a large reservoir of particles at a constant temperature $T$ that can exchange energy with the system under consideration.
```
````

For a closed system of fixed volume $V$, in thermal equilibrium with a heat bath at temperature $T$, the probability of finding the system in a particular microstate $i$ with energy $E_i$ is given by the **Boltzmann distribution**

$$
P_i = \frac{e^{-E_i/k_{\rm B}T}}{Z}
$$

where $k_{\rm B}$ is the Boltzmann constant, $T$ is the temperature of the heat bath, and $Z$ is the partition function defined as

$$
Z = \sum_i e^{-E_i/k_{\rm B}T}
$$

The partition function $Z$ is a normalization constant that ensures that the probabilities $P_i$ sum to 1 over all microstates of the system.

### Example: Two-State System

Consider a simple two-state system with energies $E_1 = 0$ and $E_2 = \epsilon$. The partition function for this system is given by

$$
Z = e^{-0/k_{\rm B}T} + e^{-\epsilon/k_{\rm B}T} = 1 + e^{-\epsilon/k_{\rm B}T}
$$

The probability of the system being in the ground state ($E_1 = 0$) is

$$
P_1 = \frac{e^{-0/k_{\rm B}T}}{Z} = \frac{1}{1 + e^{-\epsilon/k_{\rm B}T}}
$$

and the probability of the system being in the excited state ($E_2 = \epsilon$) is

$$
P_2 = \frac{e^{-\epsilon/k_{\rm B}T}}{Z} = \frac{e^{-\epsilon/k_{\rm B}T}}{1 + e^{-\epsilon/k_{\rm B}T}}
$$

```{code-cell} ipython3
import numpy as np
import matplotlib.pyplot as plt
from scipy.constants import k, eV
# Constants
k_B = k / eV # Boltzmann constant in eV/K
epsilon = 0.01 # Energy difference in eV
# Temperature range (in Kelvin)
T = np.linspace(1, 500, 500)
# Partition function Z
Z = 1 + np.exp(-epsilon / (k_B * T))
# Probabilities of ground state (P1) and excited state (P2)
P1 = 1 / Z
P2 = np.exp(-epsilon / (k_B * T)) / Z
# Plotting
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))
# Plotting probabilities
ax1.plot(T, P1, label='Ground state probability ($P_1$)')
ax1.plot(T, P2, label='Excited state probability ($P_2$)')
ax1.set_xlabel('Temperature (K)')
ax1.set_ylabel('Probability')
ax1.set_title('Probabilities of Ground and Excited States')
ax1.legend()
ax1.grid(True)
# Plotting partition function
ax2.plot(T, Z, label='Partition function ($Z$)', color='purple', linestyle='--')
ax2.annotate('One available microstate', xy=(30, 1), xytext=(100, 1.01),
arrowprops=dict(facecolor='black', arrowstyle='->'))
ax2.set_xlabel('Temperature (K)')
ax2.set_ylabel('Partition Function ($Z$)')
ax2.set_title('Partition Function')
ax2.legend()
ax2.grid(True)
plt.tight_layout()
plt.show()
```

The plot above shows the probabilities of the ground state ($P_1$) and excited state ($P_2$) as a function of temperature, as well as the partition function $Z$. As the temperature increases, the probability of the system being in the excited state increases, while the probability of the system being in the ground state decreases. The partition function $Z$ is a measure of the total number of microstates available to the system. As the temperature increases, the partition function also increases, indicating that the system has more available microstates at higher temperatures.

```{admonition} Critical Thinking
- What happens to the probabilities $P_1$ and $P_2$ at 100 K if $\epsilon$ is increased?
- How many microstates should be available to the system at very high temperatures?
```

## Thermodynamic Properties from the Partition Function

The partition function $Z$ contains all the information needed to calculate the thermodynamic properties of a system.

### Average Energy and Internal Energy

For example, the average energy $\langle E \rangle$ of the system is given by

$$
\langle E \rangle = -\frac{\partial}{\partial \beta} \ln Z
$$

where $\beta = 1/(k_{\rm B}T)$. The microstate-averaged energy $\langle E \rangle$ is a measure of the internal energy of the system in a given macrostate.

```{code-cell} ipython3
# Average energy
E_avg = -np.gradient(np.log(Z), 1 / (k_B * T))
# Plotting average energy
plt.figure(figsize=(6, 4))
plt.plot(T, E_avg, color='green')
plt.annotate('Ground state energy', xy=(30, 0), xytext=(100, 0.0001),
arrowprops=dict(facecolor='black', arrowstyle='->'))
plt.xlabel('Temperature (K)')
plt.ylabel('Average Energy ($\\langle E \\rangle$) (eV)')
plt.title('Average Energy of Two-State System')
plt.grid(True)
plt.show()
```

```{admonition} Critical Thinking
What is the average energy of the two-state system at very high temperatures?
```

### Heat Capacity at Constant Volume

The average energy $\langle E \rangle$ can be used to calculate other thermodynamic properties such as the heat capacity $C_V$ of the system. The heat capacity is defined as

$$
C_V = \frac{\partial \langle E \rangle}{\partial T}
$$

and provides information about how the internal energy of the system changes with temperature.

```{code-cell} ipython3
# Heat capacity
C_V = np.gradient(E_avg, T)
# Plotting heat capacity
plt.figure(figsize=(6, 4))
plt.plot(T, C_V, color='blue')
plt.xlabel('Temperature (K)')
plt.ylabel('Heat Capacity ($C_V$) (eV/K)')
plt.title('Heat Capacity of Two-State System')
plt.grid(True)
plt.show()
```

The plot above shows the heat capacity $C_V$ of the two-state system as a function of temperature. The heat capacity is zero at low temperatures, peaks at intermediate temperatures, and approaches zero at high temperatures. The peak in the heat capacity corresponds to the temperature at which the system undergoes an order-disorder transition between the ground and excited states.

```{admonition} Critical Thinking
What happens to the peak in the heat capacity if the energy difference $\epsilon$ between the ground and excited states is increased?
```

## Free Energy and Entropy

The partition function $Z$ can also be used to calculate the **free energy** $F$ of the system, which is defined as

$$
A = -k_{\rm B}T \ln Z
$$

The free energy $F$ is a measure of the energy available to do work in the system. The **entropy** $S$ of the system can be calculated from the free energy as

$$
S = -\left(\frac{\partial A}{\partial T}\right)_V
$$

The entropy $S$ is a measure of the disorder or randomness of the system and provides information about the number of microstates available to the system.

```{code-cell} ipython3
# Free energy
A = -k_B * T * np.log(Z)
# Entropy
S = -np.gradient(A, T)
# Plotting free energy and entropy
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))
# Plotting free energy
ax1.plot(T, A, color='red')
ax1.set_xlabel('Temperature (K)')
ax1.set_ylabel('Free Energy ($A$) (eV)')
ax1.set_title('Free Energy of Two-State System')
ax1.grid(True)
# Plotting entropy
ax2.plot(T, S, color='orange')
ax2.set_xlabel('Temperature (K)')
ax2.set_ylabel(r'Entropy ($S$) (eV/K)')
ax2.set_title('Entropy of Two-State System')
ax2.grid(True)
plt.tight_layout()
plt.show()
```

The plots above show the free energy $A$ and entropy $S$ of the two-state system as a function of temperature. The free energy decreases with increasing temperature, while the entropy increases with temperature.

```{admonition} Critical Thinking
At very high temperatures, the probability of the system being in either the ground or excited state approaches 1/2. For conditions where all microstates are equally probable, the entropy of the system can be calculated as $S = k_{\rm B} \ln \Omega$, where $\Omega$ is the total number of microstates available to the system. How does the entropy calculated from the partition function compare to the entropy calculated from the total number of microstates at high temperatures?
```

## Summary

In this lecture, we introduced the concept of statistical thermodynamics, which provides a microscopic view of thermodynamic systems by considering the statistical distribution of particles in different energy states. We discussed the distinction between microstates and macrostates and introduced the Boltzmann distribution, which describes the probability of a system being in a given microstate. We also introduced the partition function, which is used to calculate the thermodynamic properties of a system, such as the average energy, heat capacity, free energy, and entropy. By understanding the behavior of individual particles in a system, we can derive macroscopic thermodynamic properties and gain insights into the behavior of complex systems.
1 change: 1 addition & 0 deletions genindex.html
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,7 @@
<li class="toctree-l1"><a class="reference internal" href="lecture-07-regression.html">Lecture 7: Orders of Reaction and Linear Regression Analysis</a></li>
<li class="toctree-l1"><a class="reference internal" href="lecture-08-calibration.html">Lecture 8: Calibration Data, Confidence Intervals, and Correlation Analysis</a></li>
<li class="toctree-l1"><a class="reference internal" href="lecture-09-thermo.html">Lecture 9: Classical Thermodynamics</a></li>
<li class="toctree-l1"><a class="reference internal" href="lecture-10-stat-thermo.html">Lecture 10: Statistical Thermodynamics</a></li>
</ul>

</div>
Expand Down
2 changes: 2 additions & 0 deletions intro.html
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,7 @@
<li class="toctree-l1"><a class="reference internal" href="lecture-07-regression.html">Lecture 7: Orders of Reaction and Linear Regression Analysis</a></li>
<li class="toctree-l1"><a class="reference internal" href="lecture-08-calibration.html">Lecture 8: Calibration Data, Confidence Intervals, and Correlation Analysis</a></li>
<li class="toctree-l1"><a class="reference internal" href="lecture-09-thermo.html">Lecture 9: Classical Thermodynamics</a></li>
<li class="toctree-l1"><a class="reference internal" href="lecture-10-stat-thermo.html">Lecture 10: Statistical Thermodynamics</a></li>
</ul>

</div>
Expand Down Expand Up @@ -403,6 +404,7 @@ <h1>Welcome to Computational Problem Solving in the Chemical Sciences<a class="h
<li class="toctree-l1"><a class="reference internal" href="lecture-07-regression.html">Lecture 7: Orders of Reaction and Linear Regression Analysis</a></li>
<li class="toctree-l1"><a class="reference internal" href="lecture-08-calibration.html">Lecture 8: Calibration Data, Confidence Intervals, and Correlation Analysis</a></li>
<li class="toctree-l1"><a class="reference internal" href="lecture-09-thermo.html">Lecture 9: Classical Thermodynamics</a></li>
<li class="toctree-l1"><a class="reference internal" href="lecture-10-stat-thermo.html">Lecture 10: Statistical Thermodynamics</a></li>
</ul>
</div>
</section>
Expand Down
1 change: 1 addition & 0 deletions lecture-01-introduction.html
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,7 @@
<li class="toctree-l1"><a class="reference internal" href="lecture-06-linalg.html">Lecture 6: Balancing Chemical Equations and Systems of Linear Algebraic Equations</a></li>
<li class="toctree-l1"><a class="reference internal" href="lecture-07-regression.html">Lecture 7: Orders of Reaction and Linear Regression Analysis</a></li>
<li class="toctree-l1"><a class="reference internal" href="lecture-08-calibration.html">Lecture 8: Calibration Data, Confidence Intervals, and Correlation Analysis</a></li>
<li class="toctree-l1"><a class="reference internal" href="lecture-09-thermo.html">Lecture 9: Classical Thermodynamics</a></li>
</ul>

</div>
Expand Down
31 changes: 16 additions & 15 deletions lecture-02-packages.html
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,7 @@
<li class="toctree-l1"><a class="reference internal" href="lecture-06-linalg.html">Lecture 6: Balancing Chemical Equations and Systems of Linear Algebraic Equations</a></li>
<li class="toctree-l1"><a class="reference internal" href="lecture-07-regression.html">Lecture 7: Orders of Reaction and Linear Regression Analysis</a></li>
<li class="toctree-l1"><a class="reference internal" href="lecture-08-calibration.html">Lecture 8: Calibration Data, Confidence Intervals, and Correlation Analysis</a></li>
<li class="toctree-l1"><a class="reference internal" href="lecture-09-thermo.html">Lecture 9: Classical Thermodynamics</a></li>
</ul>

</div>
Expand Down Expand Up @@ -654,9 +655,9 @@ <h4>Generating Arrays with Specific Properties<a class="headerlink" href="#gener
[[1. 1. 1.]
[1. 1. 1.]
[1. 1. 1.]]
[[0.44493476 0.25430905 0.30255225]
[0.4602659 0.98636626 0.68262291]
[0.12600315 0.59045283 0.69418496]]
[[0.38848765 0.43260088 0.63391829]
[0.23067359 0.38986037 0.5963908 ]
[0.26953356 0.58445442 0.19464139]]
</pre></div>
</div>
</div>
Expand Down Expand Up @@ -737,7 +738,7 @@ <h4>Scatter Plots<a class="headerlink" href="#scatter-plots" title="Link to this
</div>
</div>
<div class="cell_output docutils container">
<img alt="_images/01cc8655e143eb45e456a262fbd1bd17844a8d6952e4e7f411abeb042c913bd7.png" src="_images/01cc8655e143eb45e456a262fbd1bd17844a8d6952e4e7f411abeb042c913bd7.png" />
<img alt="_images/138b8b8d4e10f7ccdac5245bbc0dd6b3fec2e46359d846f34824be0df31e360e.png" src="_images/138b8b8d4e10f7ccdac5245bbc0dd6b3fec2e46359d846f34824be0df31e360e.png" />
</div>
</div>
</section>
Expand Down Expand Up @@ -782,7 +783,7 @@ <h4>Histograms<a class="headerlink" href="#histograms" title="Link to this headi
</div>
</div>
<div class="cell_output docutils container">
<img alt="_images/ef4891a7709722b57bc7836fe7c900f1c283f8eaa6aeea6ffc7f0c09b3733af3.png" src="_images/ef4891a7709722b57bc7836fe7c900f1c283f8eaa6aeea6ffc7f0c09b3733af3.png" />
<img alt="_images/4007ec9fb18d496333b5a8119742e4f21b44f0412a20460196306c2af8f75708.png" src="_images/4007ec9fb18d496333b5a8119742e4f21b44f0412a20460196306c2af8f75708.png" />
</div>
</div>
</section>
Expand Down Expand Up @@ -865,11 +866,11 @@ <h3>4.2 Series: The 1D Data Structure<a class="headerlink" href="#series-the-1d-
</div>
</div>
<div class="cell_output docutils container">
<div class="output stream highlight-myst-ansi notranslate"><div class="highlight"><pre><span></span>0 -1.263956
1 0.123840
2 -0.426663
3 -1.153987
4 -1.245944
<div class="output stream highlight-myst-ansi notranslate"><div class="highlight"><pre><span></span>0 0.302182
1 -1.338002
2 0.673317
3 0.049586
4 -1.656155
dtype: float64
</pre></div>
</div>
Expand Down Expand Up @@ -901,11 +902,11 @@ <h3>4.3 DataFrame: The 2D Data Structure<a class="headerlink" href="#dataframe-t
</div>
<div class="cell_output docutils container">
<div class="output stream highlight-myst-ansi notranslate"><div class="highlight"><pre><span></span> A B
0 0.956443 0.397667
1 0.388541 0.658352
2 -0.165889 0.794821
3 -1.576889 0.428120
4 -1.086293 0.555330
0 2.192456 0.405787
1 0.826182 0.320524
2 -0.038889 0.840733
3 -0.066214 0.089069
4 -1.534060 0.328712
</pre></div>
</div>
</div>
Expand Down
1 change: 1 addition & 0 deletions lecture-03-control.html
Original file line number Diff line number Diff line change
Expand Up @@ -189,6 +189,7 @@
<li class="toctree-l1"><a class="reference internal" href="lecture-06-linalg.html">Lecture 6: Balancing Chemical Equations and Systems of Linear Algebraic Equations</a></li>
<li class="toctree-l1"><a class="reference internal" href="lecture-07-regression.html">Lecture 7: Orders of Reaction and Linear Regression Analysis</a></li>
<li class="toctree-l1"><a class="reference internal" href="lecture-08-calibration.html">Lecture 8: Calibration Data, Confidence Intervals, and Correlation Analysis</a></li>
<li class="toctree-l1"><a class="reference internal" href="lecture-09-thermo.html">Lecture 9: Classical Thermodynamics</a></li>
</ul>

</div>
Expand Down
3 changes: 2 additions & 1 deletion lecture-04-optimization.html
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,7 @@
<li class="toctree-l1"><a class="reference internal" href="lecture-06-linalg.html">Lecture 6: Balancing Chemical Equations and Systems of Linear Algebraic Equations</a></li>
<li class="toctree-l1"><a class="reference internal" href="lecture-07-regression.html">Lecture 7: Orders of Reaction and Linear Regression Analysis</a></li>
<li class="toctree-l1"><a class="reference internal" href="lecture-08-calibration.html">Lecture 8: Calibration Data, Confidence Intervals, and Correlation Analysis</a></li>
<li class="toctree-l1"><a class="reference internal" href="lecture-09-thermo.html">Lecture 9: Classical Thermodynamics</a></li>
</ul>

</div>
Expand Down Expand Up @@ -737,7 +738,7 @@ <h3>Step 2: Minimizing the Equilibrium Equation<a class="headerlink" href="#step
<div class="output stream highlight-myst-ansi notranslate"><div class="highlight"><pre><span></span>25%
</pre></div>
</div>
<div class="output stderr highlight-myst-ansi notranslate"><div class="highlight"><pre><span></span>/var/folders/n9/q030dl3x6qgfqffys4wc7d4c0000gn/T/ipykernel_44743/1733916972.py:1: OptimizeWarning: Initial guess is not within the specified bounds
<div class="output stderr highlight-myst-ansi notranslate"><div class="highlight"><pre><span></span>/var/folders/m3/5t_cnxn96vs1f6z07zkwy_k80000gn/T/ipykernel_26479/1733916972.py:1: OptimizeWarning: Initial guess is not within the specified bounds
result = minimize(
</pre></div>
</div>
Expand Down
1 change: 1 addition & 0 deletions lecture-05-integration.html
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,7 @@
<li class="toctree-l1"><a class="reference internal" href="lecture-06-linalg.html">Lecture 6: Balancing Chemical Equations and Systems of Linear Algebraic Equations</a></li>
<li class="toctree-l1"><a class="reference internal" href="lecture-07-regression.html">Lecture 7: Orders of Reaction and Linear Regression Analysis</a></li>
<li class="toctree-l1"><a class="reference internal" href="lecture-08-calibration.html">Lecture 8: Calibration Data, Confidence Intervals, and Correlation Analysis</a></li>
<li class="toctree-l1"><a class="reference internal" href="lecture-09-thermo.html">Lecture 9: Classical Thermodynamics</a></li>
</ul>

</div>
Expand Down
Loading

0 comments on commit dc42ffd

Please sign in to comment.