Re: [Wannier] k-gradient implementation
Hi Junfeng, Thank you for the useful information! Indeed I looked into the kmesh.f90 file and they have a defined the internal_maxloc function for this purpose of getting repeatable ordering. I have now implemented the shell-search-approach in my own time-dependent code and it works very well. I can confirm that is much more accurate (spherically symmetric) than the 6-point approach to calculate the gradient. I implemented the gradient with both second accuracy and third order accuracy (in this case the A in Aw=q is a 21xN_s matrix instead of 6xN_s matrix), and I can see improvements in the resulting observables. Thanks again Junfeng, Nicola, and Jonathan for all your help! Best regards, Lun Louisiana State University On 11/7/23 4:38 AM, Junfeng Qiao wrote: Hi Lun, I did some experimentations with bvectors some while ago, as far as I understand, in principle, the bvectors can be independent of k-points. However, W90 sorts the bvecotors such that they are ordered according to some rules: this removes some arbitrariness so that the bvectors thus the MMN file can be generated in a deterministic way, i.e., you could run wannier90.x multiple times and there won't be collision between the current bvectors and the ones in MMN file. The rules are somewhat difficult to explain in plain sentence, the best resource should be the src/kmesh.F90 file. In short, (at each kpoint) the bvectors are first sorted by their norm in ascending order, then by the index of the supercell used to generate a large mesh for searching bvectors, then the index of the kpoints. You could also manually write a nnkp file with fixed bvector ordering at each kpoint, then use that nnkp to compute MMN file, then restart Wannierization with such bvector order. As long as bvector orderings during the whole process are consistent, there will be no issue. Best, Junfeng THEOS, EPFL On 6 Nov 2023, at 6:42 PM, Lun Yue wrote: Dear Nicola and Jonathan, Thank you for the expedient reply! This has been very helpful! I have a followup question: in the output ".bvec" file, is there any particular reason why the set of b-vectors are written out for each k-point? Are there situations where the set of b-vectors differs from k-point to k-point? Best regards, Lun Louisiana State University On 11/4/23 6:04 AM, Jonathan Yates wrote: Dear Yue, In support of Nicola’s comments: a long time I did some comparisons of the B1 approach from MV97, and the simpler 6 neighbour approach. I didn’t look at the resulting MLWF - rather I looked at the form of the position operator they lead to. Indeed, for the same k-point mesh the B1 approach gives a more accurate position operator - and also a more symmetric representation. See http://www.tcm.phy.cam.ac.uk/~jry20/wannier/pos_op.html Jonathan — Prof. Jonathan Yates Professor of Materials Modelling, Dept of Materials, University of Oxford Tutor for Materials Science, St Edmund Hall, Oxford. On 4 Nov 2023, at 02:55, Nicola Marzari wrote: Dear Yue, admittedly both are easy - but think e.g. at a fcc lattice - its reciprocal lattice is bcc, 8 neighbours, and calculating the gradient using those 8 b_k vectors will be more accurate, at a given sampling, than just using 3. nicola On 03/11/2023 23:55, Lun Yue wrote: Dear all, I have a question regarding the implementation of the k-gradient. 1) In Wannier90, it is implemented by constructing the weights such that the completeness relation is fully satisfied [Eq. (B1), PRB 56, 12847 (1997)]. 2) Another approach would be to calculate the numerical derivatives along the reciprocal lattice vectors (which is easy as the quantities are given in a Monkhorst-Pack grid), and then transform to the Cartesian coordinates using the metric tensor and the reciprocal lattice vectors. I am wondering why approach 1) was implemented over approach 2) in Wannier90. The second approach seems to be easier, or does approach 2) fail in some cases? Best regards, Lun Yue Louisiana State University ___ Wannier mailing list Wannier@lists.quantum-espresso.org https://lists.quantum-espresso.org/mailman/listinfo/wannier -- -- Prof Nicola Marzari, Chair of Theory and Simulation of Materials, EPFL Director, National Centre for Competence in Research NCCR MARVEL, SNSF Head, Laboratory for Materials Simulations, Paul Scherrer Institut Contact info and websites at http://theossrv1.epfl.ch/Main/Contact ___ Wannier mailing list Wannier@lists.quantum-espresso.org https://lists.quantum-espresso.org/mailman/listinfo/wannier ___ Wannier mailing list Wannier@lists.quantum-espresso.org https://lists.quantum-espresso.org/mailman/listinfo/wannier ___ Wannier mailing list Wannier@lists.quantum-espresso.org
Re: [Wannier] k-gradient implementation
Hi Lun, I did some experimentations with bvectors some while ago, as far as I understand, in principle, the bvectors can be independent of k-points. However, W90 sorts the bvecotors such that they are ordered according to some rules: this removes some arbitrariness so that the bvectors thus the MMN file can be generated in a deterministic way, i.e., you could run wannier90.x multiple times and there won't be collision between the current bvectors and the ones in MMN file. The rules are somewhat difficult to explain in plain sentence, the best resource should be the src/kmesh.F90 file. In short, (at each kpoint) the bvectors are first sorted by their norm in ascending order, then by the index of the supercell used to generate a large mesh for searching bvectors, then the index of the kpoints. You could also manually write a nnkp file with fixed bvector ordering at each kpoint, then use that nnkp to compute MMN file, then restart Wannierization with such bvector order. As long as bvector orderings during the whole process are consistent, there will be no issue. Best, Junfeng THEOS, EPFL > On 6 Nov 2023, at 6:42 PM, Lun Yue wrote: > > Dear Nicola and Jonathan, > > Thank you for the expedient reply! This has been very helpful! > > I have a followup question: in the output ".bvec" file, is there any > particular reason why the set of b-vectors are written out for each k-point? > Are there situations where the set of b-vectors differs from k-point to > k-point? > > Best regards, > > Lun > > Louisiana State University > > > On 11/4/23 6:04 AM, Jonathan Yates wrote: >> Dear Yue, >> >> In support of Nicola’s comments: a long time I did some comparisons of the >> B1 approach from MV97, and the simpler 6 neighbour approach. I didn’t look >> at the resulting MLWF - rather I looked at the form of the position operator >> they lead to. Indeed, for the same k-point mesh the B1 approach gives a more >> accurate position operator - and also a more symmetric representation. See >> http://www.tcm.phy.cam.ac.uk/~jry20/wannier/pos_op.html >> >> Jonathan >> — >> Prof. Jonathan Yates >> Professor of Materials Modelling, Dept of Materials, University of Oxford >> Tutor for Materials Science, St Edmund Hall, Oxford. >> >>> On 4 Nov 2023, at 02:55, Nicola Marzari wrote: >>> >>> >>> Dear Yue, >>> >>> admittedly both are easy - but think e.g. at a fcc lattice - its reciprocal >>> lattice is bcc, 8 neighbours, and calculating the gradient using those 8 >>> b_k vectors will be more accurate, at a given sampling, than just using 3. >>> >>> nicola >>> >>> >>> >>> On 03/11/2023 23:55, Lun Yue wrote: Dear all, I have a question regarding the implementation of the k-gradient. 1) In Wannier90, it is implemented by constructing the weights such that the completeness relation is fully satisfied [Eq. (B1), PRB 56, 12847 (1997)]. 2) Another approach would be to calculate the numerical derivatives along the reciprocal lattice vectors (which is easy as the quantities are given in a Monkhorst-Pack grid), and then transform to the Cartesian coordinates using the metric tensor and the reciprocal lattice vectors. I am wondering why approach 1) was implemented over approach 2) in Wannier90. The second approach seems to be easier, or does approach 2) fail in some cases? Best regards, Lun Yue Louisiana State University ___ Wannier mailing list Wannier@lists.quantum-espresso.org https://lists.quantum-espresso.org/mailman/listinfo/wannier >>> -- >>> -- >>> Prof Nicola Marzari, Chair of Theory and Simulation of Materials, EPFL >>> Director, National Centre for Competence in Research NCCR MARVEL, SNSF >>> Head, Laboratory for Materials Simulations, Paul Scherrer Institut >>> Contact info and websites at http://theossrv1.epfl.ch/Main/Contact >>> >>> ___ >>> Wannier mailing list >>> Wannier@lists.quantum-espresso.org >>> https://lists.quantum-espresso.org/mailman/listinfo/wannier > ___ > Wannier mailing list > Wannier@lists.quantum-espresso.org > https://lists.quantum-espresso.org/mailman/listinfo/wannier ___ Wannier mailing list Wannier@lists.quantum-espresso.org https://lists.quantum-espresso.org/mailman/listinfo/wannier
Re: [Wannier] k-gradient implementation
Dear Nicola and Jonathan, Thank you for the expedient reply! This has been very helpful! I have a followup question: in the output ".bvec" file, is there any particular reason why the set of b-vectors are written out for each k-point? Are there situations where the set of b-vectors differs from k-point to k-point? Best regards, Lun Louisiana State University On 11/4/23 6:04 AM, Jonathan Yates wrote: Dear Yue, In support of Nicola’s comments: a long time I did some comparisons of the B1 approach from MV97, and the simpler 6 neighbour approach. I didn’t look at the resulting MLWF - rather I looked at the form of the position operator they lead to. Indeed, for the same k-point mesh the B1 approach gives a more accurate position operator - and also a more symmetric representation. See http://www.tcm.phy.cam.ac.uk/~jry20/wannier/pos_op.html Jonathan — Prof. Jonathan Yates Professor of Materials Modelling, Dept of Materials, University of Oxford Tutor for Materials Science, St Edmund Hall, Oxford. On 4 Nov 2023, at 02:55, Nicola Marzari wrote: Dear Yue, admittedly both are easy - but think e.g. at a fcc lattice - its reciprocal lattice is bcc, 8 neighbours, and calculating the gradient using those 8 b_k vectors will be more accurate, at a given sampling, than just using 3. nicola On 03/11/2023 23:55, Lun Yue wrote: Dear all, I have a question regarding the implementation of the k-gradient. 1) In Wannier90, it is implemented by constructing the weights such that the completeness relation is fully satisfied [Eq. (B1), PRB 56, 12847 (1997)]. 2) Another approach would be to calculate the numerical derivatives along the reciprocal lattice vectors (which is easy as the quantities are given in a Monkhorst-Pack grid), and then transform to the Cartesian coordinates using the metric tensor and the reciprocal lattice vectors. I am wondering why approach 1) was implemented over approach 2) in Wannier90. The second approach seems to be easier, or does approach 2) fail in some cases? Best regards, Lun Yue Louisiana State University ___ Wannier mailing list Wannier@lists.quantum-espresso.org https://lists.quantum-espresso.org/mailman/listinfo/wannier -- -- Prof Nicola Marzari, Chair of Theory and Simulation of Materials, EPFL Director, National Centre for Competence in Research NCCR MARVEL, SNSF Head, Laboratory for Materials Simulations, Paul Scherrer Institut Contact info and websites at http://theossrv1.epfl.ch/Main/Contact ___ Wannier mailing list Wannier@lists.quantum-espresso.org https://lists.quantum-espresso.org/mailman/listinfo/wannier ___ Wannier mailing list Wannier@lists.quantum-espresso.org https://lists.quantum-espresso.org/mailman/listinfo/wannier
Re: [Wannier] k-gradient implementation
Dear Yue, In support of Nicola’s comments: a long time I did some comparisons of the B1 approach from MV97, and the simpler 6 neighbour approach. I didn’t look at the resulting MLWF - rather I looked at the form of the position operator they lead to. Indeed, for the same k-point mesh the B1 approach gives a more accurate position operator - and also a more symmetric representation. See http://www.tcm.phy.cam.ac.uk/~jry20/wannier/pos_op.html Jonathan — Prof. Jonathan Yates Professor of Materials Modelling, Dept of Materials, University of Oxford Tutor for Materials Science, St Edmund Hall, Oxford. > On 4 Nov 2023, at 02:55, Nicola Marzari wrote: > > > Dear Yue, > > admittedly both are easy - but think e.g. at a fcc lattice - its reciprocal > lattice is bcc, 8 neighbours, and calculating the gradient using those 8 b_k > vectors will be more accurate, at a given sampling, than just using 3. > > nicola > > > > On 03/11/2023 23:55, Lun Yue wrote: >> Dear all, >> I have a question regarding the implementation of the k-gradient. >> 1) In Wannier90, it is implemented by constructing the weights such that the >> completeness relation is fully satisfied [Eq. (B1), PRB 56, 12847 (1997)]. >> 2) Another approach would be to calculate the numerical derivatives along >> the reciprocal lattice vectors (which is easy as the quantities are given in >> a Monkhorst-Pack grid), and then transform to the Cartesian coordinates >> using the metric tensor and the reciprocal lattice vectors. >> I am wondering why approach 1) was implemented over approach 2) in >> Wannier90. The second approach seems to be easier, or does approach 2) fail >> in some cases? >> Best regards, >> Lun Yue >> Louisiana State University >> ___ >> Wannier mailing list >> Wannier@lists.quantum-espresso.org >> https://lists.quantum-espresso.org/mailman/listinfo/wannier > > -- > -- > Prof Nicola Marzari, Chair of Theory and Simulation of Materials, EPFL > Director, National Centre for Competence in Research NCCR MARVEL, SNSF > Head, Laboratory for Materials Simulations, Paul Scherrer Institut > Contact info and websites at http://theossrv1.epfl.ch/Main/Contact > > ___ > Wannier mailing list > Wannier@lists.quantum-espresso.org > https://lists.quantum-espresso.org/mailman/listinfo/wannier ___ Wannier mailing list Wannier@lists.quantum-espresso.org https://lists.quantum-espresso.org/mailman/listinfo/wannier
Re: [Wannier] k-gradient implementation
Dear Yue, admittedly both are easy - but think e.g. at a fcc lattice - its reciprocal lattice is bcc, 8 neighbours, and calculating the gradient using those 8 b_k vectors will be more accurate, at a given sampling, than just using 3. nicola On 03/11/2023 23:55, Lun Yue wrote: Dear all, I have a question regarding the implementation of the k-gradient. 1) In Wannier90, it is implemented by constructing the weights such that the completeness relation is fully satisfied [Eq. (B1), PRB 56, 12847 (1997)]. 2) Another approach would be to calculate the numerical derivatives along the reciprocal lattice vectors (which is easy as the quantities are given in a Monkhorst-Pack grid), and then transform to the Cartesian coordinates using the metric tensor and the reciprocal lattice vectors. I am wondering why approach 1) was implemented over approach 2) in Wannier90. The second approach seems to be easier, or does approach 2) fail in some cases? Best regards, Lun Yue Louisiana State University ___ Wannier mailing list Wannier@lists.quantum-espresso.org https://lists.quantum-espresso.org/mailman/listinfo/wannier -- -- Prof Nicola Marzari, Chair of Theory and Simulation of Materials, EPFL Director, National Centre for Competence in Research NCCR MARVEL, SNSF Head, Laboratory for Materials Simulations, Paul Scherrer Institut Contact info and websites at http://theossrv1.epfl.ch/Main/Contact ___ Wannier mailing list Wannier@lists.quantum-espresso.org https://lists.quantum-espresso.org/mailman/listinfo/wannier
[Wannier] k-gradient implementation
Dear all, I have a question regarding the implementation of the k-gradient. 1) In Wannier90, it is implemented by constructing the weights such that the completeness relation is fully satisfied [Eq. (B1), PRB 56, 12847 (1997)]. 2) Another approach would be to calculate the numerical derivatives along the reciprocal lattice vectors (which is easy as the quantities are given in a Monkhorst-Pack grid), and then transform to the Cartesian coordinates using the metric tensor and the reciprocal lattice vectors. I am wondering why approach 1) was implemented over approach 2) in Wannier90. The second approach seems to be easier, or does approach 2) fail in some cases? Best regards, Lun Yue Louisiana State University ___ Wannier mailing list Wannier@lists.quantum-espresso.org https://lists.quantum-espresso.org/mailman/listinfo/wannier