# Tutorial - Transfer-matrix simulation Langmuir adsorption model with interaction

In this tutorial we provide an example of applying the transfer-matrix method to the Langmuir adsorption model with interaction between nearest neighbors. SUrface Science MOdeling and Simulation Toolkit (SuSMoST) is a set of computer programs and libraries that are used for modeling. As a result of the program, we get adsorption isotherm \(\theta(\mu)\).

Please have a look at the following script `here`

and read below what the script does.

## Libraries

In this block we include libraries. Here numpy is standard library. `susmost`

is a general library that contains modules required for setting structure of model and applying the Transfer-matrix method.

```
import numpy as np
from susmost import make_single_point_zmatrix, make_square_plane_cell, \
normal_lattice_task, transferm, nearest_int, SiteStateType, make_tensor, solve_TM
```

## Constants

Here we define the constants.

```
INF_E = 1E6
k_B = 8.3144598E-3
a = 1.0
r_cut_off= 8.0 + .0001
```

In the table below, we show the constants and their descriptions.

Constant |
Description |
---|---|

INF_E |
Prohibitive energy level |

k_B |
Gas constant, kJ/(mol*K) |

a |
Lattice constant |

r_cut_off |
Constant required to calculate the transfer-matrix |

Note

If `k_B`

is measured in kJ/K, then `k_B`

is the Boltzmann constant .

## Parameters

Here we define the parameters.

```
N = 8
T = 200.0
mol_int = 2.5
```

In the table below, we show the parameters and their descriptions.

Parameter |
Description |
---|---|

N |
Width of the semi-infinite system (infinite in one direction and finite in perpendicular one) |

T |
Temperature, K |

mol_int |
Interaction energy, kJ/mol |

Here we set the lattice geometry that models the solid surface.

```
cell,atoms = make_square_plane_cell(a)
interaction = lambda cc1,cc2: nearest_int(cc1,cc2,mol_int)
```

In this models we use a square lattice with lattice parameter `a`

(make_square_plane_cell(a) and etc.). The lattice constant `a`

specifies the location of the nodes.
`interaction`

define an interaction between neighbor sites.

## Initial data

In this block we initialize input data.
Here `mus`

- array of chemical potential differences in the gas and adsorption layer \(\mu_g - \mu_a \approx-RTlnp\), `covs`

- array of coverages, \(\beta=1/(k_B T)\).

```
beta = 1./(k_B*T)
mus = []
covs = []
```

## Calculation of coverages

Set interval in what we change the pressure in the gas phase. `mono_state`

and `empty_state`

specifies the shape of the nodes (`make_single_point_zmatrix()`

), sets for each node the energy of adsorption ( monomer - `mu`

, empty - `0`

), assigns the mark to all the possible surface states (monomer - atom `N`

, empty - `H`

), sets the properties of each node (monomer - `coverage=1.`

, empty - `coverage=0.`

).

The lattice model description is stored in `lt`

as objects of the class `LatticeTask`

.

Set `W`

as a tensor of interaction that can be used to solve eigenvalue problem [1] (read more: interface round a face [2] ), `avg_cov`

- the average cover corresponding to each ring and `tm_sol`

as solution of transfer-matrix.

In result we’ll get an array of the calculated coverages by transfer-matrix method `covs`

and the chemical potential `mus`

.

```
for mu in np.arange(-30., 20.+0.0001, 2.0 ):
mono_state = SiteStateType('mono', make_single_point_zmatrix(), mu, ['N'], coverage=1.)
empty_state = SiteStateType('Empty',make_single_point_zmatrix(), 0.0, ['H'], coverage=0.)
lt = normal_lattice_task([mono_state, empty_state], cell, atoms, interaction, r_cut_off, INF_E)
W = make_tensor(lt, beta)
avg_cov = transferm.average_props(lt.states, N, 'coverage', beta)
tm_sol = transferm.solve_TM(W, N, symmetric=True)
cov = sum(tm_sol.probs*np.array(avg_cov))
covs.append(cov)
mus.append(mu)
print ("mu ==", mu, "theta == ", cov)
```

## Examples

Let’s look at some examples of using the application by varying input data, such as:

energy of interaction

`mol_int`

;step of adsorption energy

`mu`

;temperature

`T`

.

Note

We considered examples for the width of the lattice `N=6`

. In case of necessary it can be changed too.

### Example 1.

Assume we have next initial data:

Data |
---|

T = 100 |

mu = (-50,50,1) |

here `step_mu=1`

.

Let change the value of interaction energy `mol_int`

. As result we get the following adsorption isotherms (fig. 1)

It is seen from fig. 1 that in case of attraction we get the two-dimensional condensation and in the case of repulsion we get two phase transitions with forming of a chess and dense phases. If `mol_int = 0`

, then we get classical Langmuir model.

### Example 2.

Assume we have next initial data:

Data |
---|

T = 100 |

mol_int = 4 |

mu = (-10,10) |

Let change the step of adsorption energy `mu`

. As result we get the following adsorption isotherms (Fig. 2)

It is seen from fig. 2 that by changing the step of adsorption energy `mu`

we can obtain adsorption isotherms with a certain accuracy.

### Example 3.

Assume we have next initial data:

Data |
---|

mu = (-50,50,1) |

mol_int = 4 |

Let change values of temperature `T`

. As result we get the following adsorption isotherms (Fig. 3)

It is seen from fig. 3 that with increasing temperature the region of existence of the phases are reduced to their disappearance.