In this exercise you will perform a MC simulation for different coverages of “sumanene” mlecules adsorbed on a Ag(111) substrate hypothesizing different possible values for the nearest neighbor energy in the molecule-molecule interaction
In an experiment performed at Empa, sumanene molecules were adsorbed on a Ag(111) surface. It was found that at very low coverage (0.02) 30% of the molecules were weakly bound into dimers. [ http://dx.doi.org/10.1021/ja504126z J. Am. Chem. Soc. 2014, 136, 13666−13671]
While in execution, the code will show you snapshots of the positions of the molecules on the lattice on the left panel.
In the central panel average values for the number of isolated molecules, the number of dimers and the number of clusters is plotted. On the right panel the average energy of the system is plotted. Intermediate average values are also written in a output file data_de_T.out where de and T are the input values of the dimer energy and of the Temperature also a final snapshot of the graphic panels is saved as png image
python monte_carlo.py
with parameters:
coverage 0.02 number of cycles 200 binding energy in eV 0.0 Temperature in K 200
Estimate the dimer binding energy as DE=kT * ln(n0/nexp) where k is Boltzmann's constant T is the simulation (and experiment) temperature n0 is the concentration of dimers in the case of zero interaction nexp is the concentration of dimers found in the experiment
#### outer loop of the siulation for i in range(nouter):
and then identify the inner loop where the Monte Carlo moves happen:
#### inner loop of 1000 steps
and
#### DECIDE whether to accept or not the move
What do you think it would happen if you replace the condition
if np.random.random()<np.exp(-beta*deltae)
with the condition
if enew<eold
def allconnected(m,id,nx,ny)
which finds out all teh molecules that are connected to a given one
def neighbors(a,id,nx,ny)
which finds out all the molecules that are 1st neighbors to a given one.