Groups keyboard shortcuts have been updated
Dismiss
See shortcuts

Questions regarding pseudopotential and basis set generation.

41 views
Skip to first unread message

Michael LaCount

unread,
May 6, 2025, 11:10:06 PMMay 6
to cp2k
I have been working on generating a 3 valence electron Gallium pseudopotential and basis (for r2SCAN). Acknowledging that pseudizing the d-electrons is questionable, it may become necessary for what I am trying to do.

I was tempted to email Jürg Hutter directly, but am posting it here in case it is of use to future users.

With regards to the ATOM code, I tried a few variations in optimizing the pseudopotential based on the PBE pseudopotential, SCAN pseudopotential and SCAN but with an additional local contraction term. I understand that the optimization is 90% trial and error with the POWELL settings (STEP_SIZE, STEP_SIZE_SCALING, MAX_INIT, and MAX_FUN). What is not clear to me though is how to evaluate whether I have made a good or bad pseudopotential. From my runs I have 3 candidates:

PBE:
Final value of function                                    0.1530340305
 Reference configuration          1               Method number                1
    L    N    Occupation      Eigenvalue [eV]           dE [eV]          dCharge
    0    1          2.00        -9.2192459546 VA   0.000325[ 0]     0.008127[26]
    0    2          0.00         0.8396512255 U1  -0.007898[ 8]     0.001720[ X]
    0    3          0.00         6.5350291666 U2  -0.076920[ 0]     0.008006[ 0]
    1    1          1.00        -2.5060816724 VA   0.000353[ 0]     0.006282[15]
    1    2          0.00         2.3918661427 U1  -0.001140[ X]     0.001833[ X]
    1    3          0.00         9.2353950765 U2  -0.055747[ 0]     0.006591[ 0]
    2    1          0.00         2.2546328512 U1   0.003031[ 0]     0.004738[ 0]
    2    2          0.00         6.4400471697 U2  -0.069520[ 0]     0.011434[ 0]
    3    1          0.00         4.2413610819 U1   0.014969[50]    -0.000072[ X]
    s-states N=    1                   Wavefunction at r=0:         0.005050[ 0]
    s-states N=    2                   Wavefunction at r=0:         0.016265[ 0]
    s-states N=    3                   Wavefunction at r=0:         0.032084[ 0]

 Number of target values reached:                                       4 of  15

SCAN:
Final value of function                                  587.1874144433
 Reference configuration          1               Method number                1
    L    N    Occupation      Eigenvalue [eV]           dE [eV]          dCharge
    0    1          2.00        -9.2169294346 VA   0.002641[ 2]     0.006948[ 0]
    0    2          0.00         0.8283557076 U1  -0.019194[ 0]     0.002138[ X]
    0    3          0.00         6.5240034385 U2  -0.087945[ 0]     0.008142[ 0]
    1    1          1.00        -2.4873044888 VA   0.019130[98]     0.000623[ 0]
    1    2          0.00         2.3990344827 U1   0.006028[ 0]     0.001717[ X]
    1    3          0.00         9.2663576926 U2  -0.024784[ X]     0.006565[ 0]
    2    1          0.00         2.2541499839 U1   0.002548[ X]     0.001125[ X]
    2    2          0.00         6.4898896260 U2  -0.019678[ X]     0.004534[ 0]
    3    1          0.00         4.2330247834 U1   0.006633[ 0]    -0.000068[ X]
    s-states N=    1                   Wavefunction at r=0:         0.010116[ 0]
    s-states N=    2                   Wavefunction at r=0:         0.018885[ 0]
    s-states N=    3                   Wavefunction at r=0:         0.036626[ 0]

 Number of target values reached:                                       7 of  15

and SCAN (2nd local contraction):
Final value of function                                    2.2705690182
 Reference configuration          1               Method number                1
    L    N    Occupation      Eigenvalue [eV]           dE [eV]          dCharge
    0    1          2.00        -9.2192585449 VA   0.000312[ 0]     0.007863[49]
    0    2          0.00         0.8401648110 U1  -0.007385[ 3]     0.001685[ X]
    0    3          0.00         6.5372420030 U2  -0.074707[ 0]     0.007822[ 0]
    1    1          1.00        -2.5061070718 VA   0.000328[ 0]     0.006045[28]
    1    2          0.00         2.3923327908 U1  -0.000674[ X]     0.001777[ X]
    1    3          0.00         9.2375753924 U2  -0.053566[ 0]     0.006499[ 0]
    2    1          0.00         2.2546302822 U1   0.003028[ 0]     0.004673[ 0]
    2    2          0.00         6.4410410581 U2  -0.068526[ 0]     0.011278[ 0]
    3    1          0.00         4.2412241163 U1   0.014832[20]    -0.000072[ X]
    s-states N=    1                   Wavefunction at r=0:         0.003682[ 0]
    s-states N=    2                   Wavefunction at r=0:         0.015481[ 0]
    s-states N=    3                   Wavefunction at r=0:         0.030640[ 0]

 Number of target values reached:                                       4 of  15

Some of these might be improved with more iterations, but I am unsure how I should evaluate each of the pseudopotentials against the others. Is it better to have a lower "Final value of function", or to have a greater number of target values reached. Is there a rule of thumb for knowing when I have reached a reasonable PP?

Next, I have a small question about the generation of MOLOPT style basis sets. I have gone through Jürg Hutter's github and get 90% of the workflow for that. I just don't quite understand the uncontracted basis set generation. I can use the ATOM code to generate an uncontracted 'complete' basis set, but the results seem very dependent on the initial guess. Is there a general rule for how many basis functions I should use and/or the range of the exponential terms? Other than taking more time, can I just make an overkill basis (something like 12 functions per orbital type with value ranging from 100 to .01) set for the purposes of making the final basis?

Jürg Hutter

unread,
May 7, 2025, 11:04:38 AMMay 7
to cp...@googlegroups.com
Hi

final evaluation of PP can only be done on your target systems.

During PP optimization I would go for low functional values with a special look at the
values for the orbital energies (valence orbitals, semicore orbitals, virtual orbitals, in that order).
You can find those values for all the PP in the POTENTIAL_UZH file as a reference.

In this specific case I would aim for near perfect values for all orbital energies (VA and U1).
U1 for s will be hardest to get down. dCharge values will be hard to get and will probably
dominate the function value in the end.

For the reference basis in the MOLOPT procedure I would go for an optimized Geometrical basis.
You can get those easily with the atom code (don't use a confinement potential). Play with the number
of primitives until you get a 'converged' energy.

regards
JH

________________________________________
From: cp...@googlegroups.com <cp...@googlegroups.com> on behalf of Michael LaCount <lacou...@gmail.com>
Sent: Tuesday, May 6, 2025 11:04 PM
To: cp2k
Subject: [CP2K:21447] Questions regarding pseudopotential and basis set generation.
--
You received this message because you are subscribed to the Google Groups "cp2k" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cp2k+uns...@googlegroups.com<mailto:cp2k+uns...@googlegroups.com>.
To view this discussion visit https://groups.google.com/d/msgid/cp2k/0ade320f-1a54-439a-8c59-12c0d916f1c6n%40googlegroups.com<https://groups.google.com/d/msgid/cp2k/0ade320f-1a54-439a-8c59-12c0d916f1c6n%40googlegroups.com?utm_medium=email&utm_source=footer>.

Michael LaCount

unread,
May 27, 2025, 11:26:36 PMMay 27
to cp2k
I've done some more work and have made a pseudopotential and basis for Ga-q3 for PBE and r2SCAN (r2SCAN basis is still in progress). The PBE as far as I can tell looks good, however I'd welcome a second opinion:

 Reference configuration          1               Method number                1
    L    N    Occupation      Eigenvalue [eV]           dE [eV]          dCharge
    0    1          2.00        -8.9070605411 VA   0.000151[ X]    -0.000937[ 3]
    0    2          0.00         0.2814465422 U1  -0.000229[ X]     0.000607[ X]
    0    3          0.00         5.9015708838 U2  -0.014841[ X]     0.003233[ 0]
    1    1          1.00        -2.5412387531 VA   0.000300[ X]    -0.000789[ 2]
    1    2          0.00         1.9032645357 U1   0.000696[ X]     0.000142[ X]
    1    3          0.00         8.3552326430 U2  -0.008647[ X]     0.002687[ 0]
    2    1          0.00         1.7060736638 U1  -0.000850[ X]     0.000903[ X]
    2    2          0.00         5.8730820280 U2  -0.021470[ X]     0.006085[ 0]
    3    1          0.00         3.7199308846 U1   0.001920[ X]    -0.000056[ X]
    s-states N=    1                   Wavefunction at r=0:        -0.005687[ 0]
    s-states N=    2                   Wavefunction at r=0:         0.011672[ 0]
    s-states N=    3                   Wavefunction at r=0:         0.024741[ 0]

 Number of target values reached:                                      13 of  15

After creating a basis set I did a small test. My target system is c-GaN, so I did a geometry optimization using Ga-q13 and my new Ga-q3 for a GaN molecule, I also did an energy calculation of Ga, N, Ga3+ and N3-. Combined I looked at the equilibrium bond length, ionization energy of Ga -> Ga3+, and the energy to break the bond (creating either atoms or ions).
Using TZV2P sized basis sets I get:
 q13 q3
Bond-length  1.707428637 1.682732901
Ga-ionization  1.804359228 1.766611429
Bond-Strength (to ions) -2.544873412 -2.505056579
Bond-Strength (to atoms) -0.047600299 -0.045531265

Using DZVP sized basis sets I get similar results. Setting aside the actual numbers I get, the results seem reasonably in agreement considering I pseudized the d-electrons (I'm aware that this is a large approximation so I shouldn't expect perfect agreement).

The r2SCAN I'm less happy with, I tried adding an extra coefficient to the potential for both the local and d nonlocal terms (1 3 2 2 total coefficients i.e. the 2nd column in the pseudopotential). I've tried everything I can think of to further optimize the function but can't get it to improve further. Maybe more coefficients could improve it further, but I'm not sure which to increase.

 Reference configuration          1               Method number                1
    L    N    Occupation      Eigenvalue [eV]           dE [eV]          dCharge
    0    1          2.00        -9.2192607955 VA   0.000310[ 0]     0.007449[62]
    0    2          0.00         0.8410517459 U1  -0.006498[ 2]     0.001620[ X]
    0    3          0.00         6.5410088683 U2  -0.070940[ 0]     0.007503[ 0]
    1    1          1.00        -2.5061195817 VA   0.000315[ 0]     0.005716[36]
    1    2          0.00         2.3929875226 U1  -0.000019[ X]     0.001701[ X]
    1    3          0.00         9.2406249709 U2  -0.050517[ 0]     0.006367[ 0]
    2    1          0.00         2.2546026016 U1   0.003000[ X]     0.002766[ 0]
    2    2          0.00         6.4924159716 U2  -0.017151[ X]    -0.004616[ 0]
    s-states N=    1                   Wavefunction at r=0:         0.000646[ 0]
    s-states N=    2                   Wavefunction at r=0:         0.013822[ 0]
    s-states N=    3                   Wavefunction at r=0:         0.027648[ 0]

 Number of target values reached:                                       5 of  13

After I make a matching basis I plan to do the same tests with this PP, but I think it may be insufficiently accurate. Any further ideas on how to improve this would be welcomed.

On Wednesday, May 7, 2025 at 8:04:38 AM UTC-7 Jürg Hutter wrote:
Hi

final evaluation of PP can only be done on your target systems.

During PP optimization I would go for low functional values with a special look at the
values for the orbital energies (valence orbitals, semicore orbitals, virtual orbitals, in that order).
You can find those values for all the PP in the POTENTIAL_UZH file as a reference.

In this specific case I would aim for near perfect values for all orbital energies (VA and U1).
U1 for s will be hardest to get down. dCharge values will be hard to get and will probably
dominate the function value in the end.

For the reference basis in the MOLOPT procedure I would go for an optimized Geometrical basis.
You can get those easily with the atom code (don't use a confinement potential). Play with the number
of primitives until you get a 'converged' energy.

regards
JH

________________________________________
From: cp...@googlegroups.com <cp...@googlegroups.com> on behalf of Michael LaCount
Reply all
Reply to author
Forward
0 new messages