User Tools

Site Tools


probe_particle_model

This is an old revision of the document!


Introduction

Probe particle model code is supposed to simulate AFM ( and to some extent STM and inelastic-STM) images obtained with tip modified by an atom or small molecule (such as Xe, CO, CH4, H2). In all cases the actual particle (atom or molecule) is replaced by a spherical model particle and classical potential (Lenard-Jones) is used for description of Pauli repulsion and Van der Waals attraction.

New code is written in C/Python and can operate in framework of Lennard-Jones forces as well as electrostatic forces, if necessary.

Older Fortran Version

New Version

The documentation is for “Master” branch, that can be downloaded from http://github.com/ProkopHapala/ProbeParticleModel/ or by running:

git clone http://github.com/ProkopHapala/ProbeParticleModel/

in your terminal.

It should be working for developers “dev” branch, too.

It can be downloaded from http://github.com/ProkopHapala/ProbeParticleModel/tree/dev or simply from terminal by running this commands:

git clone http://github.com/ProkopHapala/ProbeParticleModel/
cd ProbeParticleModel
git checkout dev

Software requirements

python-2.7; python-2.7-numpy(-1.8); gcc(-4.8); python-2.7-matplotlib(-1.3) - for plotting of figures;

Metacentrum
module add python27-modules-intel
module add scipy-0.17.1-py2.7.10

And don't forget to add:

import matplotlib as mpl;  mpl.use('Agg');

on the 3rd line of plot_results.py, if it is not allready in the script and if you want to use it on a cluster. This makes it run without Xserver (e.g. on supercomputer) # see http://stackoverflow.com/questions/4931376/generating-matplotlib-graphs-without-a-running-x-server

Hartree potential creation

Inputs

Geometry

The geometry of the sample can be read from *.bas or *.xyz files, which has to have xyz extension! Here we show part of the geometry file from example attached to the model:

71

C       0.165   0.165   0.165   -0.0132352941
C       2.2987  1.39372 0.16643 -0.0132352941
C       4.4293  2.62743 0.16468 -0.0132352941
C       6.56208 3.85683 0.16431 -0.0132352941
C       8.69719 5.08888 0.16545 -0.0132352941
...

Which is in format:

Number of atoms optional line Symbol/or/Z-of-element x y z charge-optional

The Lennard-Jones potential needed for calculations can be created by running:

python PATH_TO_YOUR_PROBE_PARTICLE_MODEL/generateLJFF.py -i YOUR_INPUT_FILE.xyz

If charges are also in the input file add “-q” flag to create electrostatic field.

Optionally, the geometry can be also read from *.xsf or *.cube file, too. The command for creation of L-J force field then looks like:

python PATH_TO_YOUR_PROBE_PARTICLE_MODEL/generateLJFF.py -i YOUR_INPUT_FILE.xsf

or

python PATH_TO_YOUR_PROBE_PARTICLE_MODEL/generateLJFF.py -i YOUR_INPUT_FILE.cube
Hartree potential

If an electrostatic Hartree potential is obtained from some DFT calculations, it can be read *.xsf or *.cube files. The electrostatic force field is created by running:

python PATH_TO_YOUR_PROBE_PARTICLE_MODEL/generateLJFF.py -i YOUR_INPUT_FILE.xsf

If default parameters are used, than you have monopole represented by an Gaussian cloud of charge with its FWHM of 0.7 Ǎ. The monopole can be changed to non-tilting dipoles or quadrupoles by adding flag: -t type, where type ∈ {s,px,py,pz,dx2,dy2,dz2,dxy,dxz,dyz}; s stands for monopole (default), p for dipoles, d for quadrupoles. The FWHM of the Gaussian cloud can be changed by adding flag: -s FWHM.

params.ini

This files contains all important information about the scan and informations for creation of important forcefields. Here we show an example of it:

probeType       8                               # atom type of ProbeParticle (to choose L-J potential ),e.g. 8 for CO, 54 for Xe  
charge          0.0                             # effective charge of probe particle [e]
stiffness       0.20 0.20 20.00                 # [N/m] harmonic spring potential (x,y,R) components, x,y is bending stiffnes, R particle-tip bond-length stiffnes,
r0Probe         0.0 0.0  4.00                   # [Å] equilibirum position of probe particle (x,y,R) components, R is bond length, x,y introduce tip asymmetry
PBC             True                            # Periodic boundary conditions ? [ True/False ]
gridN           240 240 200                     # Grid division around each cell axis; Not necessary - if it is not here a 0.1 division is applied
gridA   23.10994667   0.000000      0.000000    # lattice vector of the cell; If geometry is read from .xsf or .cube
gridB   11.55497333  20.01380089    0.000000    # !!!! If geometry is read from *.xyz, but electrostatics from .xsf or .cube than gridN and gridA/B/C has
gridC    0.000000     0.000000    20.000000     # to be in agreement with the harteee potential. Also the shift vector in the cube file has to be 0.0 0.0 0.0 !!!! 
scanMin     00.0   00.0    10.0                 # start of scanning (x,y,z) (z should be something like: the highest atom of the sample + R + 2.5)
scanMax     30.0   22.0    15.0                 # end of scanning (x,y,z)
scanStep    0.1   0.1    0.10                   # steps of scan (dx, dy, dz)
Amplitude       1.0                             # [Å] oscillation amplitude for conversion Fz->df

Simulating AFM

With having L-J and electrostatic forces made by generating scripts, you can try to run an AFM scan via:

python PATH_TO_YOUR_PROBE_PARTICLE_MODEL/relaxed_scan.py

which run the scan with charge Q and lateral stiffness K written in params.ini. The result - Fz force acting on the tip – is saved in Q?.??K?.?? directory as an OutFz.xsf file. The df results for constant height scans can be plotted by:

python PATH_TO_YOUR_PROBE_PARTICLE_MODEL/plot_results.py  --df

that plot results for oscillation written in params.ini. The results - df_???.png maps for each tip height - are in directory: Q?.??K?.??/Amp?.??

optionally WSxM files for each height can be written by putting flag - -WSxM behind the plotting command. Outputs are df_???.xyz files with WSxM head and x y df data. If - -save_df flag is applied the df data are stored in df.xsf file. Flag - -atoms used simultaneously with - -df puts positions of atoms of the sample saved in input_plot.xyz into df_???.png. The flag - -bonds ads into the maps also lines connecting close-by atoms.

If a flag - -pos is applied for both commands (scanning & plotting) than xy positions of the relaxing Probe Particle (PP) are shown in xy_???.png as a red dots, while the gray scale on the background maps represent z position of the PP (brighter - higher).

Test

Examples of df simulation is already in the downloaded/cloned repository in folder examples/. You should try to run these examples before going to your own stuff, in order to see that the code is working on your machine.

Scans with different charge (Q), lateral stiffness (K) or oscillation amplitude (A)

python PATH_TO_YOUR_PROBE_PARTICLE_MODEL/relaxed_scan.py --krange min max n  --qrange min max n
python PATH_TO_YOUR_PROBE_PARTICLE_MODEL/plot_results.py --df --arange min max n
probe_particle_model.1483026971.txt.gz · Last modified: 2016/12/29 16:56 (external edit)