Create surface by using non-conventional surface vectors

Dear Pymatgen users and developers,

I would like to ask how to create a Pt(111) :math:\sqrt{3}\times\sqrt{3} surface in pymatgen, which parameters is needed?

If you have a slab, just use structure.make_supercell().


structure = structure.make_supercell([[2, 1, 0], [1, -1, 0], [0, 0, 1]])
# in this case the surface vector will change, and then you can create surfaces in any shape you want (as long as you know how to write the matrix)

I am not familiar with Pymatgen but I think we just need to change the orientations to [111] [1-10] [11-2] to make an fcc Pt(111) surface.

Hi ddinhta,

Thanks for the reply.

Could you elaborate on which function you use? I usually use SlabGenerator for creating slabs, and to my knowledge it doesn’t have a parameter which you can define the orientations.


Atomsk ( is my favorite way to play with crystalline structures. In your case, just simply type : “atomsk --create fcc 3.92 Pt orient [111] [1-10] [11-2] -duplicate 10 10 10 Pt.cfg” to get a structure of 4000 atoms, cfg format. You can change number of atoms or output format for your application.

Dear ddinhta,

Thanks! Atomsk looks really nice. I’ll try it out.