Hope you are doing great. I am performing lithiation in various nanostructures and using fix gcmc for that. The input file for the related simulation is as attached below.

Earlier, my simulations were crashing due to bond check error. After going through the maillist for related issues, I compiled the lammps using Kokkos package and ran the simulation by giving the following command

mpirun lmp_kokkos_mpi_only< -k on -sf kk -pk kokkos neigh half newton on comm no >

The issue related to bond check was resolved but it resulted into super slow simulation. On 180 core cluster, it took 23 hours to insert about 200 Li atoms in the structure. I am very new to GCMC simulations and will really appreciate tips/suggestions to speed up the process? I tried raising the number of inserted atoms but the effect was marinal.


Gurjot Dhaliwal

------------------------ INITIALIZATION ----------------------------

units real

boundary p p p

atom_style charge

newton on # Speedup

----------------------- ATOM DEFINITION ----------------------------

variable radius equal 20

Nanowire with center at (65,65) and radius equal to v_radius

length equal to 103 A^o

read_data dataFile.Si


region liAtomRandom cylinder x 65 65 21 0.55 102.1 units box side in

region liAtomCount cylinder x 65 65 v_radius INF INF units box side in

------------------------ FORCE FIELDS ------------------------------

pair_style reax/c NULL safezone 1.8 mincap 500

pair_coeff * * ffield.reax.lisialo Si Li

------------------------- SETTINGS ---------------------------------

mass 1 28.0844

mass 2 6.94

group type1 type 1

group type2 type 2

group electrode type 1

#variable liCount equal count(type4,liAtomCount)

neighbor 5 bin

neigh_modify delay 1 one 3000

compute_modify thermo_temp dynamic yes

compute tt all temp

compute_modify tt dynamic/dof yes #extra 0

shell mkdir Lith300

shell cd Lith300

#reset_timestep 0

timestep 1 # Timestep is one femtosecond.

#---------------Energy Equilibriation--------------------------

#fix 1 all nve

#fix 2 all temp/rescale 1 10 10 1.0 0.5

fix 45 all qeq/reax 1 0.0 10.0 1.0e-6 reax/c

compute charge1 type1 property/atom q

compute q1 type1 reduce ave c_charge1

compute charge2 type2 property/atom q

compute q2 type2 reduce ave c_charge2

compute charge5 all property/atom q

compute vorID electrode voronoi/atom only_group

compute electrodeVol electrode reduce sum c_vorID[1]

compute myPress all stress/atom NULL

compute potEnergy all pe/atom

dump 1 all cfg 5000 D4T300KC5A.*.cfg mass type xs ys zs id type c_potEnergy c_myPress[1] c_myPress[2] c_myPress[3] c_myPress[4] c_myPress[5] c_myPress[6]

dump_modify 1 element Si Li sort id

dump 2 type2 cfg 5000 LiAtoms.*.cfg mass type xs ys zs type c_potEnergy c_myPress[1] c_myPress[2] c_myPress[3] c_myPress[4] c_myPress[5] c_myPress[6] id

#dump_modify 2 element Li sort id

dump 3 type1 cfg 5000 SiAtoms.*.cfg mass type xs ys zs id type c_potEnergy c_myPress[1] c_myPress[2] c_myPress[3] c_myPress[4] c_myPress[5] c_myPress[6]

#dump_modify 3 element Al sort id

run 100

#unfix 1

#unfix 2

#-----------------Pressure Equilibriation-----------------------

restart 5000 D4T300C5A.restart

group liatoms type 2

fix flith all gcmc 500 1000 1000 2 29494 300.0 -2.14 0.01 region liAtomRandom group liatoms

fix 2 all nvt temp 300 300 80 #aniso 0.0 10.0 2000 drag 0.3

fix_modify 2 temp tt

#group liatoms type 4

variable liCount equal count(liatoms,liAtomCount)

thermo 500 # This one outputs data every 500 timesteps to the outfile.

thermo_style custom step temp etotal press pxx pyy pzz lx ly lz vol v_liCount c_q1 c_q2 c_electrodeVol f_flith[1] f_flith[2] f_flith[3] f_flith[4] f_flith[5] f_flith[6] #xlo xhi ylo yhi zlo zhi

thermo_modify lost warn

run 1000000

unfix 2

There are three things to consider:

  • how well does your simulation scale without fix gcmc? or in other words: do you make efficient use of your resources or do you have load balancing issues? is the system large enough to actually support scaling to 180 MPI ranks?
  • ReaxFF calculations are among the most time consuming models available in LAMMPS. when significant changes happen (e.g. through inserting particles), then the charge equilibration may take much longer than usual to converge (or may have problems to converge).
  • when inserting atoms into a dense system randomly, you are likely to have lots of failed attempts and thus lots of re-evaluations of the system energy (which is expensive as noted before).