msg-byu / enumlib

Derivative structure enumeration library
MIT License
59 stars 34 forks source link

Problem in enumerating fixed concentration and fixed size structures #119

Closed sgodse16 closed 1 year ago

sgodse16 commented 1 year ago

I am trying to enumerate possible all possible structures for Li1.2Mn0.4Ni0.4O2. Starting with a unit cell of LiMnO2 which contains 12 atoms (Li3Mn3O6), I am trying to create the required composition by creating a 3x3x1 supercell and then replacing some Mn atoms with Li and Ni to get Li1.2Mn0.4Ni0.4O2 composition (trying to get Li32Mn11Ni11O54 which is close to the desired composition). I am using a fixed_cells.in file to restrict the supercell size, but I am not getting any enumerations.

Here's my enumerate.in file - Li1.2Ni0.4Mn0.4O2_Layered bulk 3.022235 0.0 0.0 -1.511117 2.617332 0.0 0.0 0.0 14.650154 4 12 0.0 0.0 7.325077 0 1.511117 0.872444 12.208462 0 0.0 1.744888 2.441692 0 0.0 0.0 0.0 0/1/2 1.511117 0.872444 4.883385 0/1/2 0.0 1.744888 9.766769 0/1/2 0.0 0.0 3.773587 3 0.0 0.0 10.876567 3 1.511117 0.872444 8.656971 3 1.511117 0.872444 1.109798 3 0.0 1.744888 13.540356 3 0.0 1.744888 5.993183 3 9 9 1.0000000E-06 # Epsilon (finite precision parameter) full 32 32 108 11 11 108 11 11 108 54 54 108

And the fixed_cells.in file: 3x3x1 supercell 3 0 0 -1.5 2.598076 0.0 0 0 1

In the struct_enum.out, I am getting the following ouput-

Li1.2Ni0.4 bulk 3.0222350 0.0000000 0.0000000 # a1 parent lattice vector -1.5111170 2.6173320 0.0000000 # a2 parent lattice vector 0.0000000 0.0000000 14.650154 # a3 parent lattice vector 12 # Number of points in the multilattice 0.0000000 0.0000000 7.3250770 # d01 d-vector, labels: 0 1.5111170 0.87244400 12.208462 # d02 d-vector, labels: 0 0.0000000 1.7448880 2.4416920 # d03 d-vector, labels: 0 0.0000000 0.0000000 0.0000000 # d04 d-vector, labels: 0/1/2 1.5111170 0.87244400 4.8833850 # d05 d-vector, labels: 0/1/2 0.0000000 1.7448880 9.7667690 # d06 d-vector, labels: 0/1/2 0.0000000 0.0000000 3.7735870 # d07 d-vector, labels: 3 0.0000000 0.0000000 10.876567 # d08 d-vector, labels: 3 1.5111170 0.87244400 8.6569710 # d09 d-vector, labels: 3 1.5111170 0.87244400 1.1097980 # d10 d-vector, labels: 3 0.0000000 1.7448880 13.540356 # d11 d-vector, labels: 3 0.0000000 1.7448880 5.9931830 # d12 d-vector, labels: 3 4-nary case 9 9 # Starting and ending cell sizes for search 0.10000000E-05 # Epsilon (finite precision parameter) Concentration check: T Including only structures of which the concentration of each atom is in the range: Type 1: 32/ 108 -- 32/ 108 Type 2: 11/ 108 -- 11/ 108 Type 3: 11/ 108 -- 11/ 108 Type 4: 54/ 108 -- 54/ 108 full list of labelings (including incomplete labelings) is used Equivalency list: 1 2 3 4 5 6 7 8 9 10 11 12 start #tot HNF Hdegn labdegn Totdegn #size idx pg SNF HNF Left transform labeling

Enumlib is not able to create any structures, which is weird as I can just manually create the required composition by replacing Mn atoms in 3x3x1 supercell. However I want to create all possible structures which is not possible manually.

Any help is appreciated!

glwhart commented 1 year ago

Try:

9.066705 0.0 0.0
-4.533351 7.851996 0.0
0.0 0.0 14.650154

If you want a 3x3x1 fixed cell, you need to multiply the first and second vectors of the parent lattice by 3.

sgodse16 commented 1 year ago

Tried this, still no enumerations.

glwhart commented 1 year ago

I think there are just way too many enumerations. I tried a smaller problem. Here's a similar concentration range but much smaller supercell (size 3 and 6---and not restricting to a fixed cell yet):

(base) ➜  input git:(main) ✗ ../../src/enum.x struct_enum.in.sgodse16
---------------------------------------------------------------------------------------------
Calculating derivative structures for index n= 1 to  6
Including only structures of which the concentration of each atom is in the range:
Type: 1: 10/36--10/36
Type: 2: 4/36--4/36
Type: 3: 4/36--4/36
Type: 4: 18/36--18/36
Volume       CPU        #HNFs  #SNFs    #reduced    % dups      volTot      RunTot
   3         0.0110       13     1         6        0.5385         176         176
   6        68.0240       91     1        24        0.7363     1183554     1183730
---------------------------------------------------------------------------------------------

The jump in the number of structures from size 3 to 6 is huge. Imagine how big it would be going from 6 to 9.

Here's another case, fixed 2x2x1 cell. Works fine, but probably doesn't get you to the concentration you want.

(base) ➜  input git:(main) ✗ ../../src/enum.x struct_enum.in.sgodse16 
---------------------------------------------------------------------------------------------
Generating permutations for fixed cells. index n= 4 to  4
Be aware: non-primitive structures (super-periodic configurations) are included
in the final list in this mode.
---------------------------------------------------------------------------------------------
Calculating derivative structures for index n= 4 to  4
Including only structures of which the concentration of each atom is in the range:
Type: 1: 7/24--7/24
Type: 2: 2/24--2/24
Type: 3: 3/24--3/24
Type: 4: 12/24--12/24
Volume       CPU        #HNFs  #SNFs    #reduced    % dups      volTot      RunTot
   4         0.0324        1     1         1        0.0000         132         132
---------------------------------------------------------------------------------------------
glwhart commented 1 year ago

The 2x2x1 might be too small for your needs, but the 3x3x1 is too big to enumerate. I tried another compact fixed cell that was 5x bigger than the primitive and I got this. (I'm guessing this is already way more structures than you want to calculate in DFT.)

(base) ➜  input git:(main) ✗ ../../src/enum.x struct_enum.in.sgodse16 
---------------------------------------------------------------------------------------------
Generating permutations for fixed cells. index n= 4 to  9
Be aware: non-primitive structures (super-periodic configurations) are included
in the final list in this mode.
---------------------------------------------------------------------------------------------
Calculating derivative structures for index n= 4 to  9
Including only structures of which the concentration of each atom is in the range:
Type: 1: 12/60--18/60
Type: 2: 6/60-- 9/60
Type: 3: 6/60-- 9/60
Type: 4: 30/60--30/60
Volume       CPU        #HNFs  #SNFs    #reduced    % dups      volTot      RunTot
   5         1.6772        1     1         1        0.0000       16280       16280
---------------------------------------------------------------------------------------------

I made my fixed cell by picking cell vectors s1 = 3*a1+2*a2, s2 = 2*a1+3*a2

glwhart commented 1 year ago

Closing this. If you have further questions, feel free to open it again.