How to convert hexagonal cell into tetragonal cell

Hi. I am trying to generate a tetragonal Mg cell. Mg (0001) has a hexagonal structure. Does anyone know how to convert hexagonal cell into tetragonal cell? I would appreciate any kind of help.

Best,
Hyuna Kwon

Welcome Hyuna,

Could you be more specific with the question?

Mg does have a hexagonal structure (P6_3/mmc), and as such it cannot be converted into a tetragonal cell, since these are incompatible with each other and have different symmetries. The (0001) numbers refer to a specific plane inside a crystal, but are not sufficient to identify a specific polymorph.

There is a trigonal polymorph of Mg (R\overline{3}m, mp-1094122) which can be put into either a hexagonal or rhombohedral setting if that’s what you mean? But this structure is an unusual polymorph of Mg and not very common. You can see different polymorphs of Mg on the Materials Project.

If you are asking how to convert a non-cubic crystal into a supercell that is almost cubic, pymatgen can help with that via a CubicSupercellTransformation in pymatgen.transformations.advanced_transformations, this will give a large 288-atom supercell with parameters:

Lattice
    abc : 19.22116644 16.63908408 20.5067632
 angles : 90.0 90.0 90.0
 volume : 6558.526416710932
      A : 19.22116644 8.881784197001252e-16 0.0
      B : 0.0 16.63908408 0.0
      C : 0.0 0.0 20.5067632

Best,

Matt

Hi Hyuna,

You could also consider using Auguste: https://github.com/pmla/auguste

This will allow you to find the tetragonal cell of Mg from the hexagonal structure which results in the minimum strain (i.e., requires the least distortion).

The code has just been released so unfortunately I can’t give you any advice on how to use it.

Best,
Alex

1 Like

Hi @mkhorton

I have a P6/mmm structure:

struct = Structure.from_spacegroup('P6/mmm',
                                  Lattice.hexagonal(2.46,15),
                                  ['C'],
                                  [[1/3,2/3,1/2]])
CubicSupercellTransformation.apply_transformation(struct)

but got the error
TypeError: apply_transformation() missing 1 required positional argument: 'structure'

what type of structure is it looking for ?

Ok I see that it works like this:

tfms = CubicSupercellTransformation().apply_transformation(struct)

1 Like