c2x and Symmetry
Since version 2 of check2xsf it has been possible to link it with the excellent spglib symmetry finding code, and thus gain access to the functionality of this library. This is the same symmetry finder which is used by Castep.
Spglib is a useful package for finding crystallographic symmetry, including the primitive cell, individual symmetry operations, and the international space group symbol.
C2x provides access to the following operations from spglib:
refine call spg_refine_cell() primitive call spg_find_primitive() standardise call spg_standardize_cell(no_idealize=1) int call spg_get_dataset() and report international symbol schoen call spg_get_schoenflies() symmetry call spg_get_dataset() and keep symmetry ops list call spg_get_dataset() and list symmetry ops point call spg_get_dataset() followed by spg_get_pointgroup()
These are requested by preceding them with two hyphens on the c2x command line. Multiple operations may be specified. The order in which they will be applied is the order in which they are listed above, not the order on the command line.
There is also one useful compound option, --snap
. The
operations which snap to symmetry are:
primitive: convert to a snapped version of the standard primitive cell
standardise: convert to a snapped version of the standard cell
snap: convert to a snapped version of the standard primitive cell, and then expand back to a snapped version of the original cell
The intention is that --snap
snaps atoms and axes to
be consistent with the symmetry found by SPGlib (not any symmetry
operations given in the input), but without transforming the cell to
a standardised representation.
Examples
$ c2x --int --list SiC_4H.cell Tol=0.0001 International symmetry is P6_3mc Tol=0.0001 12 symmetry operations found. Identity 6_3 axis along ( 0.000, 0.000, 1.000) through (0.333333,0.333333,0.000000) 3 axis along ( 0.000, 0.000, 1.000) through (0,0,0) 2_1 axis along ( 0.000, 0.000, 1.000) through (0.333333,0.333333,0.000000) 3 axis along ( 0.000, 0.000, 1.000) through (0,0,0) 6_3 axis along ( 0.000, 0.000, 1.000) through (0.333333,0.333333,0.000000) glide plane ( 2.000,-1.000, 0.000) offset (0.333334,0.833333,0) glide (0,0,0.5) mirror plane ( 1.000, 0.000, 0.000) offset (0,0,0) glide plane ( 1.000, 1.000, 0.000) offset (0.333333,0.333333,0) glide (0,0,0.5) mirror plane ( 0.000,-1.000, 0.000) offset (0,0,0) glide plane ( 1.000,-2.000, 0.000) offset (0.833333,0.333334,0) glide (0,0,0.5) mirror plane ( 1.000,-1.000, 0.000) offset (0,0,0)
(Versions prior to 2.40b report mirror and glide planes as -2 axes.)
Note that a single six-fold axis will appear five times, representing the five different rotations, two of which will be listed as three-fold, and one as two-fold.
It is also possible to give a range of precisions to use when searching for symmetry operations.
$ c2x --int --list -e=1e-6-1e-4 SiC_4H.cell Tol=1e-06 International symmetry is Cmc2_1 Tol=1e-06 4 symmetry operations found. Tol=8e-06 International symmetry is P6_3mc Tol=8e-06 12 symmetry operations found.
This output shows that at a tolerance of 8e-6 the six-fold axis is detected, whereas the other elements continue to exist at tighter tolerances. Prior to version 2.31 tolerances are tested at factor of two intervals between the lowest and highest given as a range. From 2.31 bisection is used to attempt to find a more exact transition point.
Finally a demonstration of --snap
being used to convert
a low-precision input cell to a higher precision.
$ cat SiC_4H.cell %block LATTICE_CART ang 3.0827000 0.0000000 0.0000000 1.5413500 2.6696965 0.0000000 0.0000000 0.0000000 10.0680000 %endblock LATTICE_CART %block POSITIONS_FRAC Si 0.000000000 0.000000000 0.000000000 Si 0.333333330 0.333333330 0.250000000 Si 0.666666670 0.666666670 0.500000000 Si 0.333333330 0.333333330 0.750000000 C 0.333333330 0.333333330 0.062500000 C 0.666666670 0.666666670 0.312500000 C 0.333333330 0.333333330 0.562500000 C 0.000000000 0.000000000 0.812500000 %endblock POSITIONS_FRAC $ c2x -15 --snap --cell SiC_4H.cell | cat %block LATTICE_CART ang 3.082699989394402 -0.000000006123144 0.000000000000000 1.541350000000000 2.669696500000000 0.000000000000000 -0.000000000000001 0.000000000000001 10.068000000000000 %endblock LATTICE_CART %block POSITIONS_FRAC Si 0.000000000000000 0.000000000000000 0.000000000000000 Si 0.333333333333333 0.333333333333333 0.250000000000000 Si 0.666666666666667 0.666666666666667 0.500000000000000 Si 0.333333333333333 0.333333333333333 0.750000000000000 C 0.333333333333333 0.333333333333333 0.062500000000000 C 0.666666666666667 0.666666666666667 0.312500000000000 C 0.333333333333333 0.333333333333333 0.562500000000000 C 0.000000000000000 0.000000000000000 0.812500000000000