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.


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


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.




Prohibitive energy level


Gas constant, kJ/(mol*K)


Lattice constant


Constant required to calculate the transfer-matrix


If k_B is measured in kJ/K, then k_B is the Boltzmann constant .


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.




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


Temperature, K


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))
        print ("mu ==", mu, "theta == ", cov)


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.


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:


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)

Fig. 1. Adsorption isotherms for different interaction energy.

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:


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)

Fig. 2. Adsorption isotherms for mu = (-10,10) with different step.

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:


mu = (-50,50,1)

mol_int = 4

Let change values of temperature T. As result we get the following adsorption isotherms (Fig. 3)

Fig. 3. Adsorption isotherms for different values of temperature.

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


Nishino T. Density Matrix Renormalization Group Method For 2D Classical Models, Journal of the Physical Society of Japan, Vol. 64, No. 10, 1995, pp. 3598-3601


R.J. Baxter Exactly Solved Models in Statistical Mechanics, Academic Press, London, 1989, p. 363