User Tools

Site Tools


exercises:2017_ethz_mmm:mc_and_kmc_2

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
exercises:2017_ethz_mmm:mc_and_kmc_2 [2017/03/09 12:21] dpasseroneexercises:2017_ethz_mmm:mc_and_kmc_2 [2020/08/21 10:15] (current) – external edit 127.0.0.1
Line 2: Line 2:
 =====  ===== 
  
-The hexaiodobenzene molecule shown in the image, when deposited on a noble metal substrate such as+The  molecule shown in the image (hexaiodo-substituted 
 +macrocycle cyclohexa-m-phenylene (CHP) ), when deposited on a noble metal substrate such as
 Cu(111) , Ag(111) or Au(111), at room temperature looses the I atoms and starts diffusing. Cu(111) , Ag(111) or Au(111), at room temperature looses the I atoms and starts diffusing.
 +
 +
 +{{:exercises:2017_ethz_mmm:hexaiodobenzene.jpg?400|}}
 +
 The relative probability of diffusion and of binding to a neighboring molecule The relative probability of diffusion and of binding to a neighboring molecule
 determine the shape of the network that will be obtained. determine the shape of the network that will be obtained.
 The experiments performed at Empa [ [[http://dx.doi.org/10.1021/ja107947z]] J. AM. CHEM. SOC. 2010, 132, 16669–16676 ] shows that on a Cu substrate dendrites will form The experiments performed at Empa [ [[http://dx.doi.org/10.1021/ja107947z]] J. AM. CHEM. SOC. 2010, 132, 16669–16676 ] shows that on a Cu substrate dendrites will form
 while on a Au substrate 2D networks will form. while on a Au substrate 2D networks will form.
 +
 +{{:exercises:2017_ethz_mmm:dendrites.jpg?400|}}
 +
 <note tip> <note tip>
 The python program KMC.py will allow you to simulate the diffusion and binding of molecules The python program KMC.py will allow you to simulate the diffusion and binding of molecules
Line 14: Line 22:
  
 During the execution the program shows snapshots of the positions of the molecules. During the execution the program shows snapshots of the positions of the molecules.
 +
 +{{:exercises:2017_ethz_mmm:final_0.1_300_0.1_0.1.png?400|}}
 +
 Molecules free to diffuse will be represented via blue dots. Molecules free to diffuse will be represented via blue dots.
 Molecules that irreversibly formed a bond with a neighboring molecule will be represented by red dots. Molecules that irreversibly formed a bond with a neighboring molecule will be represented by red dots.
 At the end of the execution a snapshot of the final configuration of the system is saved an image file. At the end of the execution a snapshot of the final configuration of the system is saved an image file.
 The program asks you for some input: The program asks you for some input:
-<code> 
  
-</code> +<code> 
 coverage coverage
 update graph each steps update graph each steps
Line 26: Line 36:
 diffusion barrier diffusion barrier
 binding barrier binding barrier
 +</code>
 +
 +</note>
 +<note warning>
 +**TASK 1**
 +execute the program with the following parameters:
 +<code>
 +coverage 0.1
 +update graph each steps 500
 +number of steps 100000
 +temperature in K 300
 +diffusion barrier 0.1
 +binding barrier 0.1
 +</code>
 +Observe how events occur.
 +Observe how time evolves.
 +Did the job perform all the 100000 steps? Why?
 +Observe the patterns obtained.
 +</note>
 +
 +<note warning>
 +**TASK 2**
 +execute the program with the following parameters:
 +<code>
 +coverage 0.1
 +update graph each steps 500
 +number of steps 100000
 +temperature in K 300
 +diffusion barrier 0.3
 +binding barrier 0.4
 +</code>
 +Do you notice differences in the way events occur?
 +How is evolving time compared to the previous case?
 +How does the final geometry differ form the previous case?
 +</note>
 +<note tip>
 +Now have a look at the python code.
 +The MAIN section
 +<code>
 +#### MAIN KMC LOOP
 +t=0
 +
 +#### at the beginning we have to check possible events for all molecules
 +tobeupdated=[iu for iu in range(len(molecules))]
 +possible_events=[]
 +for i in range(nsteps):
 +    #### check possible events for selected set of molecules
 +    possible_events=possible_events+events(molecules,tobeupdated,nx,ny)
 +
 +    if possible_events==[]:
 +       print "no more events possible"
 +       break
 +    #### compute total rate (can be imporved)
 +    R=total_rate(possible_events,rates)
 +
 +    #### decide which event to apply 
 +    selected_event=find_event(R,rates,possible_events)
 +
 +    #### apply the event end update partially the list of events
 +    possible_events,tobeupdated=apply_event(molecules,selected_event,possible_events)
 +
 +    #### update time
 +    rho2=np.random.random()
 +    dt=-np.log(rho2)/R
 +    t=t+dt
 +</code>
 +is very simple and reflects the basic steps of the KMC approach.
 +On the contrary, the function needed to create the list of events is quite complex:
 +<code>
 +def events(m,selection,nx,ny):
 +    allevents=[]
 +    set=[]
 +    #### list of first neighbors (relative position)
 +    set.append([[0,0,1,0],[1,0,0,0],[0,1,1,0],[-1,1,1,0],[-1,0,0,0],[-1,0,1,0]])
 +    set.append([[1,-1,-1,0],[1,0,0,0],[1,0,-1,0],[0,0,-1,0],[-1,0,0,0],[0,-1,-1,0]])
 +
 +    for i in selection:
 +        le=[]
 +        #### consider only molecules that are not binded
 +.
 +.
 +.
 +</code>
 +</note>
 +<note warning>
 +**TASK 3**
 +Have a look on the section of the code that create the list of events,
 +comment on which are the critical points in setting up a KMC simulation
 +to describe a real process.
 +
 +**TASK 4**
 +At each step of the simulaiton the list of possible events is created (or, betetr, updated)
 +an event is chosen randomly and is then actuated.
 +Would it be possible to execute simultaneously more events at each KMC step?
 </note> </note>
exercises/2017_ethz_mmm/mc_and_kmc_2.1489062113.txt.gz · Last modified: 2020/08/21 10:15 (external edit)