Cell Manipulation and c2x

On the basis that examples might be easier to follow than a description, herewith a slightly indirect way of turning 2-atom cubic Si into something suitable for a (111) surface calculation.

We start with a two atom cubic Si cell:

%BLOCK LATTICE_CART
2.73  2.73 0.00
2.73  0.00 2.73
0.00  2.73 2.73
%ENDBLOCK  LATTICE_CART

%block POSITIONS_FRAC
Si 0.0     0.0     0.0
Si 0.25    0.25    0.25
%endblock POSITIONS_FRAC

As this is awkward, we immediately transform into the conventional 8 atom cubic cell:

c2x -x='(1,1,-1)(1,-1,1)(-1,1,1)' --cell si2.cell si8.cell

yielding

%block LATTICE_CART
ang
5.460000 0.000000 0.000000
0.000000 5.460000 0.000000
0.000000 0.000000 5.460000
%endblock LATTICE_CART

%block POSITIONS_FRAC
 Si 0.000000 0.000000 0.000000
 Si 0.500000 0.500000 0.000000
 Si 0.250000 0.250000 0.250000
 Si 0.750000 0.750000 0.250000
 Si 0.500000 0.000000 0.500000
 Si 0.000000 0.500000 0.500000
 Si 0.750000 0.250000 0.750000
 Si 0.250000 0.750000 0.750000
%endblock POSITIONS_FRAC

For a (111) surface, it will be easier to use the six-atom hexagonal cell. I could not spot that one from the original two atom cell, but now I can see that I want c to be (111) and a and b to be orthogonal to c, of equal length, to be lattice vectors, but not necessarily orthogonal to each other, so (0.5,-0.5,0) and (0.5,0,-0.5) look reasonable.

c2x -x='(.5,-.5,0)(.5,0,-.5)(1,1,1)' -vv --cell si8.cell si6.cell

resulting in

%block LATTICE_CART
ang
2.730000 -2.730000 0.000000
2.730000 0.000000 -2.730000
5.460000 5.460000 5.460000
%endblock LATTICE_CART

%block POSITIONS_FRAC
 Si 0.000000 0.000000 0.000000
 Si 0.000000 0.000000 0.250000
 Si 0.666667 0.666667 0.333333
 Si 0.666667 0.666667 0.583333
 Si 0.333333 0.333333 0.666667
 Si 0.333333 0.333333 0.916667
%endblock POSITIONS_FRAC

It would be nicer if the c axis were actually in the z direction of the cartesian set, and a the x direction, and one can use two rotations to achieve this:

c2x -T='(1,1,1)(0,0,1)' -vv --cell si6.cell si6r.cell
c2x -T='(1,-1,0)(1,0,0)' -vv --cell si6r.cell si6rr.cell

However, the lazy may discover that

c2x -a --cell si6.cell si6rr.cell

also results in

%block LATTICE_CART
ang
3.860803 -0.000000 0.000000
1.930402 3.343553 0.000000
0.000000 0.000000 9.456997
%endblock LATTICE_CART

%block POSITIONS_FRAC
 Si 0.000000 0.000000 0.000000
 Si 0.000000 0.000000 0.250000
 Si 0.666667 0.666667 0.333333
 Si 0.666667 0.666667 0.583333
 Si 0.333333 0.333333 0.666667
 Si 0.333333 0.333333 0.916667
%endblock POSITIONS_FRAC

To make a surface, one can simply stack a lot of these into a supercell: perhaps four:

c2x -x='(1,0,0)(0,1,0)(0,0,4)' --cell si6rr.cell si24rr.cell

(c2x 2.30 onwards also supports the syntax -x=1x1x4 for trivial tilings.)

The output, which now has 24 atoms, has them ordered by c coordinate, so one can easily take one's favourite editor and remove a few layers. I deleted c<=0.25 and c>0.75 to leave just 12 atoms and a rather generous amount of vacuum. To check this looks sane one can convert to pdb (or xsf) and then look at it with one's favourite viewer.

c2x --xsf si12rr.cell surface.xsf
Si (111) in XCrysden

Here four of the above unit cells are shown tiled.

If one wishes to remove (or add) vacuum, simply convert into a cell file using absolute coordinates for the atoms (--cell_abs), and then edit the length of the c axis by hand, whilst ensuring that it still encloses all the atoms.

However, from c2x 2.30 onwards the above is much easier. The single command

c2x -x=1x1x2 -Xc=30 --cell si6rr.cell surface.cell

will give a 12 atom cell with about 10A of vacuum. A separate page describes such vacuum adjustments.