Interface this package with tight-binding/density-functional theory (TB/DFT) codes to facilitate related research. #23
Replies: 24 comments 3 replies
-
Beta Was this translation helpful? Give feedback.
-
If so, I think it's better to name it
Do you mean: as long as the As you pointed out in the above paper, currently, the Some additional remarks and questions:
So, I'm still no sure if
Furthermore, I also noticed the following description here:
It formed an impression on me that the |
Beta Was this translation helpful? Give feedback.
-
In principle,
Yes, you are right.
Yes, vasp2trace have to be modified accordingly before it can be used by orther DFT/TB codes. However, I think maybe it's more direct to write a XXX2trace ab initio for other DFT/TB codes, because different DFT codes use different format to store their Bloch wavefunctions and symmetry operations. What vasp2trace does includes mainly three things:
Yes, they have partnership with the BCS developers and can obtain the original data of BCS.
For compiled language such as fortran, it's easy to make a .a static lib file. However it seems impossible to do this for mathematica, at least I don't know how to do. However, OTOH, SpaceGroupIrep originally is a database and toolset and can be considered as a lib in mathematica language.
There is no fixed workflow to use SpaceGroupIrep because it is a database and toolset and different people may have different purposes to use it. For example, one can use it to assit studing the representation theory of space group, especially using the BC book. One can use the multiplication of SG elements to analyze SG symmetries. One can easily obtain little group or k-star at any k for any SG. One can check the LGIR table of any k in any SG. One can calculate the direct product of full SGIR's. One can get the correspondence between BCS and BC conventions. And one can determine the LGIR via As for determining the LGIR, the general workflow is:
Or
As for solving eBR, this function is not yet realized at present. However, it's definitely possible to do this based on SpaceGroupIrep.
Yes, it's a great web user interface.
Yes, I noticed this.
In my opinion, vasp2trace may be modified substantially to work for orther DFT codes. As mentioned above, different DFT codes use different formats to store their Bloch wavefunction and symmetry operations. If one is not clear about the underlying codes relating to wavefunctions of a DFT program, it's not easy to do the modification. |
Beta Was this translation helpful? Give feedback.
-
Thank you for pointing this out. There is already a Python package which provides a general calculation process to generate the
In your paper, the concept of k-star is neither defined nor described in detail. This may not have any difficulty for those who are familiar with crystallographic group theory, but it should be a concept that needs to be understood first for beginners. So, I add the relevant stuff below for learners' reference based on the explanation in Group Theory Application to the Physics of Condensed Matter by Mildred S. Dresselhaus, Gene Dresselhaus, Ado Jorio: OTOH, I also noticed the paper Wave vector substar group in reciprocal lattice space and its representation, which defined the wave vector substar group as follows: I'm not sure if you've had proper research and consideration in this regard. Another similar concept: Laue groups or Laue class correspond to some specific centrosymmetric crystallographic types of point groups and their subgroups.
We must admit that the level of scientists and technical teams behind BCS is world-class.
While great, it's not necessarily the best choice for all scenarios at any time, which is why the famous ICSD supplies several access options to customers:
Basically, in the steps described above, what
In fact, there is another excellent job in this field, i.e, the Python based
Unlike Currently, it has interfaced with
|
Beta Was this translation helpful? Give feedback.
-
Let's consider the following case: Use any primitive cell to do a non-VASP, for example, quantum espresso calculation. In this case, can I use
$ ase info --formats |egrep -i 'vasp|espresso'
espresso-in [rw/single, ext=pwi]: Quantum espresso in file
espresso-out [r/multi, ext=out|pwo]: Quantum espresso out file
vasp [rw/single, ext=poscar, glob=*POSCAR*|*CONTCAR*]: VASP POSCAR/CONTCAR
vasp-out [r/multi, glob=*OUTCAR*]: VASP OUTCAR file
vasp-xdatcar [rw/multi, glob=*XDATCAR*]: VASP XDATCAR file
vasp-xml [r/multi, glob=*vasp*.xml]: VASP vasprun.xml file
Then use
Regards, |
Beta Was this translation helpful? Give feedback.
-
In principle you are right. |
Beta Was this translation helpful? Give feedback.
-
This is exactly the aim of the OTOH, Check Topological Mat. routine of Bilbao Crystallographic Server works based on vasp2trace or irvsp: So, we can conclude that the generated trace.txt by Note: The source code of vasp2trace, described on Check Topological Mat., corresponds to See here for a related discussion. |
Beta Was this translation helpful? Give feedback.
-
I don't think it can be concluded arbitrarily that the Especiall, the |
Beta Was this translation helpful? Give feedback.
-
I checked the (self-explanatory) One is defined in bandstructure.py as follows: def write_trace(
self,
degen_thresh=1e-8,
kpnames=None,
symmetries=None,
):
"""
Generate `trace.txt` file to upload to the program `CheckTopologicalMat`
in `BCS <https://www.cryst.ehu.es/cgi-bin/cryst/programs/topological.pl>`_ .
Parameters
----------
degen_thresh : float, default=1e-8
Threshold energy used to decide whether wave-functions are
degenerate in energy.
kpnames : list, default=None
Labels of maximal k-points at which irreps of bands must be computed.
If it is not specified, only traces will be printed, not irreps.
symmetries : list, default=None
Index of symmetry operations whose description will be printed.
"""
f = open("trace.txt", "w")
f.write(
(
" {0} \n"
+ " {1} \n" # Number of bands below the Fermi level # Spin-orbit coupling. No: 0, Yes: 1
).format(self.getNbands(), 1 if self.spinor else 0)
)
f.write(
self.spacegroup.write_trace()
)
# Number of maximal k-vectors in the space group. In the next files
# introduce the components of the maximal k-vectors))
f.write(" {0} \n".format(len(self.kpoints)))
for KP in self.kpoints:
f.write(
" ".join(
"{0:10.6f}".format(x)
for x in self.spacegroup.refUC.dot(KP.K)
)
+ "\n"
)
for KP in self.kpoints:
f.write(
KP.write_trace(degen_thresh, symmetries=symmetries, efermi=self.efermi)
) The other is defined in kpoint.py as follows: def write_trace(self, degen_thresh=1e-8, symmetries=None, efermi=0.0):
"""
Write in `trace.txt` the block corresponding to a single k-point.
Parameters
----------
degen_thresh : float, default=1e-8
Threshold energy used to decide whether wave-functions are
degenerate in energy.
symmetries : list, default=None
Index of symmetry operations whose traces will be printed.
efermi : float, default=0.0
Fermi-energy. Used as origin for energy-levels.
Returns
-------
res : str
Block to write in `trace.txt` with description of traces in a
single k-point.
"""
if symmetries is None:
sym = {s.ind: s for s in self.symmetries}
else:
sym = {s.ind: s for s in self.symmetries if s.ind in symmetries}
res = (
"{0} \n"
+ " {1} \n" # Number of symmetry operations of the little co-group of the 1st maximal k-vec. In the next line the position of each element of the point group in the list above.
# For each band introduce a row with the followind data: (1) 1+number of bands below, (2) dimension (degeneracy) of the band,
# (3) energy and eigenvalues (real part, imaginary part) for each symmetry operation of the little group (listed above).
).format(len(sym.keys()), " ".join(str(x) for x in sym))
char = np.vstack([self.symmetries[sym[i]] for i in sorted(sym)])
borders = np.hstack(
[
[0],
np.where(self.Energy[1:] - self.Energy[:-1] > degen_thresh)[0] + 1,
[self.Nband],
]
)
char = np.array(
[char[:, start:end].sum(axis=1) for start, end in zip(borders, borders[1:])]
)
E = np.array(
[self.Energy[start:end].mean() for start, end in zip(borders, borders[1:])]
)
dim = np.array([end - start for start, end in zip(borders, borders[1:])])
IB = np.cumsum(np.hstack(([0], dim[:-1]))) + 1
res += (
"\n".join(
(" {ib:8d} {d:8d} {E:8.4f} ").format(E=e - efermi, d=d, ib=ib)
+ " ".join("{0:10.6f} {1:10.6f} ".format(c.real, c.imag) for c in ch)
for e, d, ib, ch in zip(E, dim, IB, char)
)
+ "\n"
)
return res The second function is called by the first to write in As you can see, the above two functions are defined exactly according to the (self-explanatory) Regards, |
Beta Was this translation helpful? Give feedback.
-
The format of An example: the P point of SG 48. The POSCAR file is
And the KPOINTS file for band calculation is
As can be seen, the four kpoints are acutally equivalent to each other and they should give the same LGIRs. However, the At present, I have no time to dig into the code of |
Beta Was this translation helpful? Give feedback.
-
Thank you for your detailed explanations. It seems really a tricky thing. |
Beta Was this translation helpful? Give feedback.
-
You get it! I don't know what extra things
|
Beta Was this translation helpful? Give feedback.
-
Can you provide more details? Especially the following:
|
Beta Was this translation helpful? Give feedback.
-
5.4.1
INCAR
KOPOINTS
INCAR for band
tr=readVasp2trace["trace.txt"];
trconv=convTraceToBC[48, tr, IdentityMatrix[3], -{1/4,1/4,1/4}];
rep=getBandRep[48,"",trconv];
rep["rep"][[1]]//TableForm[#,TableDepth->2]&
rep["rep"][[2]]//TableForm[#,TableDepth->2]&
rep["rep"][[3]]//TableForm[#,TableDepth->2]&
rep["rep"][[4]]//TableForm[#,TableDepth->2]& |
Beta Was this translation helpful? Give feedback.
-
In #5 (comment), you mentioned the following point:
In essence, this is also a basis choice problem. More precisely, the calculated results must be post-processed and analyzed based on the same basis choice. In principle, as long as we can determine these matrices used by different DFT codes, we can establish the corresponding relationship between their results. Nevertheless, all DFT codes have their own freedom and preferences in this regard, which undoubtedly makes this work more difficult. This is very similar to the correspondence between the BCS and BC conventions represented in |
Beta Was this translation helpful? Give feedback.
-
You are right. One have to understand clearly both sides, and then can the relationship between them be treated correctly. |
Beta Was this translation helpful? Give feedback.
-
It seems that refUC : array, default=None
3x3 array describing the transformation of vectors defining the
unit cell to the standard setting.
shiftUC : array
Translation taking the origin of the unit cell used in the DFT
calculation to that of the standard setting.
spinor : bool
`True` if wave functions are spinors, `False` if they are scalars. It
will be read from DFT files. See the following explanation in its paper for some additional clues: More intriguingly, it can also calculate these parameters automatically, as shown in the last screenshot above. |
Beta Was this translation helpful? Give feedback.
-
It also use |
Beta Was this translation helpful? Give feedback.
-
This is also the technical pathway implemented in |
Beta Was this translation helpful? Give feedback.
-
In #5 (comment), I commented the follows:
What's the relationship between the Eq. (6) in irrep's paper above and your Eq. (19) written as follows? It looks like they're all doing a similar conversion with |
Beta Was this translation helpful? Give feedback.
-
My Eq.(19) has the identical meanings with those defined in spglib, see here And the Eq(6) you mentioned only corresponds to the Eq(6) of spglib with a transpose. |
Beta Was this translation helpful? Give feedback.
-
In |
Beta Was this translation helpful? Give feedback.
-
Yes, I got it wrong. |
Beta Was this translation helpful? Give feedback.
-
Hi everyone! I'm just letting you know that if you're interested in this thread, you may also want to check out this related question on Matter Modeling Stack Exchange!. |
Beta Was this translation helpful? Give feedback.
-
Nowadays, it's well known that tight-binding/density-functional theory (TB/DFT) are very import tools/methods in various research fields of Nano Materials Science. Till now, there are many mature TB/DFT codes and relevant tools, such as
kwant/VASP/CASTEP/QE/ABINIT/SIESTA/ELK/Wien2k/wannier90
and so on. OTOH, I've noticed that there are tools which also work based on group theory and interface with TB/DFT codes, such as irvsp and WannSymm. So, I'm not sure if it's possible to interface this package with tight-binding/density-functional theory (TB/DFT) codes to facilitate related research.Regards,
HZ
Beta Was this translation helpful? Give feedback.
All reactions