[lammps-users] Minimization Problem

LAMMPS users,
I am having a curious problem using the LAMMPS cg minimizer. I have had unexpected results during the indentation of a Gold thin film that I have been investigating. The minimizer, given a block of pure Gold and using the eam potential is allowed to relax in a large vacuum. Upon completion of relaxation (which takes only 400 steps for 77k atoms), the magnitude of the residual force calculated by LAMMPS is ~10e-7. Upon inspecting the resulting atomic configuration however, I find that a region triangular in cross-section comprising one edge is warped.

I have attached the input file used.

Thanks in advance for any help.

Chris O'Brien

# 3d minimization
dimension 3
boundary p p p
units metal

atom_style atomic
neigh_modify delay 5

# create geometry
lattice fcc 4.08 orient z 1 1 1 orient x 1 1 -2 orient y -2 2 0 origin 0 0 0

#Create simulation domain
region simblock block 0 210.0 0 210.0 0 210.0 units box

#Create region of Au material
region AuBlock block 40.8 163.2 40.8 163.2 40.8 130.56 units box

#Declare simulation box to occupy simulation domain
create_box 1 simblock

#Declare Au atoms to occupy region set aside for Au block
create_atoms 1 region AuBlock

# EAM potentials
pair_style eam
pair_coeff * * Au_u3.eam

thermo 0
thermo_modify norm no
#dump dumpforce all custom 200000 conv.csp tag type x y z fx fy fz
restart 200000 conv.restart
min_style cg
minimize 1.0e-16 200000 200000

It's possible that's a local minimum that was found. Can you
tell why the minimizer stopped, i.e. what criterion was met?

You might try a different min_style or use min_modify to try
a different linestyle option.


I actually store the CSP parameter in the 'Occupancy' field of the PDB file format. I don't know what's supposed to go there anyway.
Regarding my aforementioned LAMMPS input and PDB converter scripts, they are designed to work with each other by taking the 'occupancy' field of the generated PDB and into the 'user' field of VMD.

My PDB files appear as follows: (spacing is critical and there are no blank lines)
ATOM 1 Au grp 1 43.731 158.465 129.407 34.80 0.00
ATOM 2 Au grp 1 43.793 162.298 128.848 43.92 0.00
ATOM 3 Au grp 1 43.926 152.956 129.261 33.97 0.00
ATOM 4 Au grp 1 43.836 155.727 129.306 33.75 0.00
ATOM 1 Au grp 1 43.731 158.465 129.407 34.80 0.00
ATOM 2 Au grp 1 43.793 162.298 128.848 43.92 0.00
ATOM 3 Au grp 1 43.926 152.956 129.261 33.97 0.00
ATOM 4 Au grp 1 43.836 155.727 129.306 33.75 0.00
Each END separates a frame in your output trajectory.

Let me know if this clarifies anything.


I must apologize for my lack of clarity in the original question about minimization. I have also ran some test to clarify my own understanding of the problem.

Myself and my advisor think that the problem is not in the minimization algorithm but in LAMMPS's implementation of boundary conditions, notably with FCC lattices. I initially ran into the problem of a distorted triangular region in the corner of my Au block using 'boundary p p s' or 'boundary p p p' with a large vacuums surrounding the Au block. The minimization worked beautifully, and I found that the magnitude of the total force vector was around 10^-7. The limiting condition however, was that the energy converged (to what appears to be zero within machine precision).

In order to remove the distorted corner, I tested the minimizer with a small (10x10x10) block of Au atoms filling the entire simulation domain, using the EAM potential , and with all periodic boundary conditions. The problem with the distorted corner became a problem with the whole box. I set <111> to be in the z-direction and used the xyz dimensions of the lattice unit for this orientation which LAMMPS provided to make sure my simulation box was of the correct size to contain an integral number of unit cells.

My specific question is: How does LAMMPS handle periodic boundary conditions? How does LAMMPS deal with overlapping atoms on each edge of a periodic box? Where in the code does it perform the periodic boundary condition calculations?

Thanks in advance,

This is helpful - I'll see if I can add an option to the PDB
tool in Pizza.py to fill in this field w/ a column from the dump