Set occupations in yaml format

Asked by Olivier Malenfant-Thuot

Hi.
I'm trying to set occupation levels manually in the input.yaml file, ideally in a spin polarized system.
I do not find any new informations about how to do it.

In the old format, it would be something like:

4 1
1 2
2 1
3 1
4 1
5 1

for a nitrogen atom alone (with 2 core electrons).

Thank you very much

Question information

Language:
English Edit question
Status:
Solved
For:
BigDFT Edit question
Assignee:
No assignee Edit question
Solved by:
Luigi Genovese
Solved:
Last query:
Last reply:
Revision history for this message
Luigi Genovese (luigi-genovese) said :
#1

Dear Olivier,

the input.occ file syntax should be still active and working. See the test of the C atom in the tests/DFT/cubic/C directory of the bigdft directory.

Otherwise, you may put these lines in the input.yaml

 occupation:
   K point 1:
     Orbital 2 : 2/3
     Orbital 3 : 2/3
     Orbital 4 : 2/3

which I think are self-explanatory.

However, these occupation are important for particular purposes and in principle there should be no need to use them.
In particular for your case as you want to treat a spin-polarized system you might want to deal with traditional occupation filling, but with the inclusion of information for the input guess wavefunction. This shoudl correspond to the ig_occupation keyword of the yaml input file, which came from the input.occup file in the old format.
See the following page for details:

http://bigdft.org/Wiki/index.php?title=Input.occup

Do not hesitate

Many thanks

Luigi

Revision history for this message
Olivier Malenfant-Thuot (oliviermt) said :
#2

Hi Luigi, thank you for the quick and precise answer.

It still didn't solve entirely my problem though.

Without your method I get this in the output (still for the isolated nitrogen atom):

   Atomic Input Orbital Generation:
   - {Atom Type: N, Electronic configuration: {
 s: [ 1.00, 1.00],
 p: [ 2/3, 2/3, 2/3, 1/3, 1/3, 1/3]}}

And with it, I get:

   Atomic Input Orbital Generation:
   - {Atom Type: N, Electronic configuration: {
 (s): [ 1.00, 1.00],
 p: [ 1.00, 1.00, 1.00, 0.00, 0.00, 0.00]}}

which is perfectly what I want.

But after the Input Guess Overlap Matrices are calculated and diagonalized, in both cases, it comes back to:

    #Eigenvalues and New Occupation Numbers
   Orbitals: [
 {e: -6.898215192636E-01, f: 1.0000, s: 1}, {e: -6.357830401437E-01, f: 1.0000, s: -1}, # 00001
 {e: -2.673313592728E-01, f: 1.0000, s: 1}, {e: -2.130941012303E-01, f: 1.0000, s: -1}, # 00002
 {e: -2.673313592728E-01, f: 1.0000, s: 1}, {e: -2.130941012303E-01, f: 0.0000, s: -1}, # 00003
 {e: -2.673299650038E-01, f: 0.0000, s: 1}, {e: -2.130926989709E-01, f: 0.0000, s: -1}] # 00004

which is clearly not the ground-state.

I don't know if it is something easy to fix or circumvent, but it would be very kind of you to help me again.

Olivier

Revision history for this message
Olivier Malenfant-Thuot (oliviermt) said :
#3

Here is my input file if it can help you reproduce the problem:

 dft:
   hgrids: 0.31
   rmult: [5.0, 8.0]
   ixc: 11
   nspin: 2
   mpol: 1
   output_wf: 1
   gnrm_cv: 5.0e-5
 ig_occupation:
   N:
     (2s): 2
     2p:
       up: 3
       down: 0

Revision history for this message
Best Luigi Genovese (luigi-genovese) said :
#4

Hi Olivier,

the reason of your problem is the mpol value you fixed.

with mpol=1 you are forcing the system to have a polarization of 1, therefore this is the reason why the occupation numbers are fixed as you showed.

The solution is to put mpol=3 (which BTW corresponds to the polarisation you provided at the IG).
Alternatively, for a system in which you do not know the polarization, you might use a mixing procedure to ensure that mpol=3 is indeed the GS.

Let me know

Many thanks

Luigi

Revision history for this message
Olivier Malenfant-Thuot (oliviermt) said :
#5

Thanks Luigi Genovese, that solved my question.

Revision history for this message
Olivier Malenfant-Thuot (oliviermt) said :
#6

Thank you.
I was pretty sure I did something stupid and there it was.
Have a good day!
Olivier