Re: [Spglib-users] symmetrizing positions/cell vectors without altering cell?
Brought to you by:
atztogo
From: Noam B. <noa...@nr...> - 2017-09-25 12:40:14
|
> On Sep 22, 2017, at 9:08 PM, Atsushi Togo <atz...@gm...> wrote: > > Hi, > > Do you want the following? > > https://atztogo.github.io/spglib/api.html#spg-standardize-cell > with to_primitive=0 and no_idealize=1 Hi Togo - thanks for the quick response. Since I’m using the python interface, which I don’t think has direct access to that routine, I’m not sure, but I don’t think so, at least if I’m reading the documentation correctly. From what I can tell, that _will_ transform to the conventional crystallographic cell (e.g. a diamond structure fcc + 2 atom basis to simple cubic + 8 atom basis), and that’s exactly what I don’t want. I’ll try to test it today. > > Or if you want detailed control, you may use the dataset obtained by > spg_get_dataset with additional some operations by yourself. > https://atztogo.github.io/spglib/api.html#spg-get-dataset-and-spg-get-dataset-with-hall-number <https://atztogo.github.io/spglib/api.html#spg-get-dataset-and-spg-get-dataset-with-hall-number> So I have tried an approach using the actual symmetry operations, but wasn’t able to figure out how to use them to symmetrize positions. I tried putting atoms at the mean of the positions after transformation by each operation, but that didn’t work. Then I dug into the source, to see how the symmetrization works, and looked at the Grosse-Kunstleve and Adams paper that’s referred to. However, that algorithm didn’t make sense to me. As far as I can tell, for each atom it loops over transformations, then checks to see if each operation maps an atom to a periodic image of itself to within some precision. If so, it adds the rotation matrix and translation vector to a running total, to it can compute mean rotation and mean translation, which are then used to generate the symmetrize positions. However, I don’t understand why that’s the right thing to do, and it doesn’t seem to be working for me. For my 2 atom diamond structure example, If a particular symmetry operation transforms atom 0 into atom 1, for example, the transformed atom 0 position is _not_ off by a lattice vector from the original atom 0 position, so that operation does not figure into the symmetrization at all. It therefore does nothing. Let me put together an example based on the underlying C library, to take the python interface out of the process, and I’ll post a followup. thanks, Noam |