Charge corrections

Contents

Charge corrections#

When simulating a charged defect in a periodic system, we introduce unphysical long-range Coulomb interactions between the images. A correction method aims at obtaining the correct energies with already small supercell sizes in order to reduce the computational cost.

defermi currently supports two corrections methods:

Freysoldt#

DOI: https://doi.org/10.1002/pssb.201046289

The Freysoldt (FNV) approach expresses electrostatic interactions in terms of the unscreened charge density and the electrostatic potential. The defect potential is expressed as a sum of a long-range and a short-range part. The long-range contribution is associated to macroscopic screening, which is set to decay as 1/εr. The long-range electrostatic energy correction is thus determined by the summation of the Fourier transform of the long-range potential in real space over the reciprocal lattice vectors. Quantum effects are accounted for in the short-range part associated to microscopic screening. This is obtained by subtracting the long-range part to the electrostatic potential difference between defect and pure structures, obtained from the DFT calculations.

Currently only VASP output files are supported. Use the get_freysoldt_correction_from_locpot function to compute the correction and generate the plots. This function is a wrapper for the get_freysoldt_correction function in the pymatgen-analysis-defects library.

[2]:
from defermi.corrections.freysoldt import get_freysoldt_correction_from_locpot

defect_path_locpot = '../defermi/tests/test_files/SiO2-defects/Defects/vacancies/Vac_O/q2/1-PBE-SCF/LOCPOT'
bulk_path_locpot = '../defermi/tests/test_files/SiO2-defects/Bulk-2x2x2-supercell/LOCPOT'

corr, ax = get_freysoldt_correction_from_locpot(
                                        charge=2,
                                        dielectric_constant=3.9,
                                        defect_path_locpot=defect_path_locpot,
                                        bulk_path_locpot=bulk_path_locpot,
                                        get_plot=True)
../_images/advanced_charge_corrections_2_0.png

If get_correction_data=True, pymatgen’s CorrectionResult object is returned, which contains addition information regarding the potentials. Set get_correction_data=False to return only the final correction float.

[3]:
corr
[3]:
CorrectionResult(correction_energy=np.float64(1.7725067354055881), metadata={'plot_data': {0: {'pot_plot_data': {'Vr': [np.float64(-0.48678911089369287), np.float64(-0.4844166943764408), np.float64(-0.4774076358612981), np.float64(-0.4660735203843385), np.float64(-0.4508929267087604), np.float64(-0.43245860748372617), np.float64(-0.4114178154382888), np.float64(-0.38841552683784814), np.float64(-0.3640483340118092), np.float64(-0.3388334533176788), np.float64(-0.31319368944445025), np.float64(-0.28745624542078235), np.float64(-0.2618615124300531), np.float64(-0.2365774965479303), np.float64(-0.21171606352061592), np.float64(-0.18734825982317685), np.float64(-0.1635171638718689), np.float64(-0.14024773122376746), np.float64(-0.117553782380266), np.float64(-0.09544263786510716), np.float64(-0.07391800789731513), np.float64(-0.052981692363234766), np.float64(-0.03263452726110928), np.float64(-0.012876884458928891), np.float64(0.006291077594532344), np.float64(0.024869294216772142), np.float64(0.04285774010586744), np.float64(0.06025640577651251), np.float64(0.0770652878204272), np.float64(0.09328438506364947), np.float64(0.10891369711851909), np.float64(0.1239532238623018), np.float64(0.1384029652577383), np.float64(0.15226292129398245), np.float64(0.16553309196800628), np.float64(0.1782134772789991), np.float64(0.19030407722675274), np.float64(0.20180489181121594), np.float64(0.21271592103237663), np.float64(0.22303716489023212), np.float64(0.2327686233847816), np.float64(0.24191029651602516), np.float64(0.25046218428396266), np.float64(0.2584242866885942), np.float64(0.2657966037299195), np.float64(0.2725791354079389), np.float64(0.27877188172265227), np.float64(0.2843748426740597), np.float64(0.28938801826216093), np.float64(0.29381140848695625), np.float64(0.29764501334844545), np.float64(0.30088883284662865), np.float64(0.30354286698150573), np.float64(0.3056071157530769), np.float64(0.3070815791613421), np.float64(0.3079662572063011), np.float64(0.30826114988795406), np.float64(0.30796625720630105), np.float64(0.30708157916134193), np.float64(0.3056071157530769), np.float64(0.3035428669815058), np.float64(0.30088883284662854), np.float64(0.29764501334844545), np.float64(0.29381140848695625), np.float64(0.28938801826216093), np.float64(0.28437484267405966), np.float64(0.2787718817226523), np.float64(0.272579135407939), np.float64(0.2657966037299195), np.float64(0.25842428668859413), np.float64(0.2504621842839628), np.float64(0.24191029651602522), np.float64(0.2327686233847816), np.float64(0.22303716489023206), np.float64(0.21271592103237663), np.float64(0.20180489181121597), np.float64(0.1903040772267528), np.float64(0.17821347727899906), np.float64(0.16553309196800628), np.float64(0.15226292129398247), np.float64(0.1384029652577383), np.float64(0.12395322386230177), np.float64(0.10891369711851911), np.float64(0.09328438506364953), np.float64(0.07706528782042721), np.float64(0.06025640577651248), np.float64(0.04285774010586747), np.float64(0.024869294216772097), np.float64(0.006291077594532329), np.float64(-0.012876884458928971), np.float64(-0.03263452726110923), np.float64(-0.05298169236323484), np.float64(-0.0739180078973151), np.float64(-0.09544263786510715), np.float64(-0.117553782380266), np.float64(-0.14024773122376755), np.float64(-0.1635171638718689), np.float64(-0.18734825982317677), np.float64(-0.21171606352061592), np.float64(-0.2365774965479303), np.float64(-0.26186151243005307), np.float64(-0.28745624542078224), np.float64(-0.3131936894444503), np.float64(-0.3388334533176788), np.float64(-0.3640483340118092), np.float64(-0.38841552683784814), np.float64(-0.4114178154382887), np.float64(-0.4324586074837263), np.float64(-0.4508929267087604), np.float64(-0.4660735203843385), np.float64(-0.4774076358612981), np.float64(-0.4844166943764409)], 'x': [0.0, 0.08776725131857337, 0.17553450263714673, 0.2633017539557201, 0.35106900527429347, 0.43883625659286685, 0.5266035079114402, 0.6143707592300136, 0.7021380105485869, 0.7899052618671604, 0.8776725131857337, 0.9654397645043071, 1.0532070158228803, 1.1409742671414538, 1.2287415184600272, 1.3165087697786007, 1.4042760210971739, 1.4920432724157473, 1.5798105237343207, 1.6675777750528942, 1.7553450263714674, 1.8431122776900408, 1.9308795290086143, 2.0186467803271877, 2.1064140316457607, 2.1941812829643346, 2.2819485342829076, 2.369715785601481, 2.4574830369200544, 2.545250288238628, 2.6330175395572013, 2.7207847908757747, 2.8085520421943477, 2.896319293512921, 2.9840865448314946, 3.071853796150068, 3.1596210474686415, 3.247388298787215, 3.3351555501057883, 3.4229228014243613, 3.5106900527429348, 3.598457304061508, 3.6862245553800816, 3.773991806698655, 3.8617590580172285, 3.949526309335802, 4.037293560654375, 4.125060811972949, 4.212828063291521, 4.300595314610096, 4.388362565928669, 4.476129817247242, 4.563897068565815, 4.6516643198843886, 4.739431571202962, 4.827198822521535, 4.914966073840109, 5.002733325158682, 5.090500576477256, 5.178267827795829, 5.266035079114403, 5.353802330432975, 5.4415695817515495, 5.529336833070122, 5.6171040843886955, 5.70487133570727, 5.792638587025842, 5.880405838344416, 5.968173089662989, 6.055940340981563, 6.143707592300136, 6.2314748436187095, 6.319242094937283, 6.407009346255856, 6.49477659757443, 6.582543848893002, 6.670311100211577, 6.75807835153015, 6.845845602848723, 6.933612854167297, 7.0213801054858695, 7.109147356804443, 7.196914608123016, 7.28468185944159, 7.372449110760163, 7.460216362078737, 7.54798361339731, 7.635750864715884, 7.723518116034457, 7.81128536735303, 7.899052618671604, 7.9868198699901765, 8.07458712130875, 8.162354372627323, 8.250121623945898, 8.33788887526447, 8.425656126583043, 8.513423377901617, 8.601190629220191, 8.688957880538764, 8.776725131857338, 8.86449238317591, 8.952259634494483, 9.040026885813058, 9.12779413713163, 9.215561388450205, 9.303328639768777, 9.391095891087351, 9.478863142405924, 9.566630393724498, 9.65439764504307, 9.742164896361645], 'dft_diff': array([ 0.66633005,  0.62982531,  0.56778137,  0.47793488,  0.36571899,
        0.2405427 ,  0.12162904,  0.02579476, -0.03741304, -0.07520363,
       -0.10301683, -0.12385146, -0.13648871, -0.14431868, -0.14722234,
       -0.14683972, -0.14305424, -0.13689753, -0.12835232, -0.11806561,
       -0.10594326, -0.09381932, -0.08143863, -0.0703649 , -0.05937628,
       -0.04905958, -0.03793027, -0.02731429, -0.01723666, -0.00782846,
        0.00258692,  0.01284771,  0.02242221,  0.03076846,  0.04022345,
        0.04862543,  0.05570803,  0.06403238,  0.07526112,  0.08126615,
        0.09203293,  0.09975471,  0.09607931,  0.10213754,  0.10894576,
        0.11313803,  0.11732094,  0.12119099,  0.12399686,  0.12664351,
        0.12827891,  0.12919002,  0.12927592,  0.12966046,  0.12970443,
        0.12927353,  0.12814053,  0.12733833,  0.12652905,  0.12592241,
        0.12473051,  0.12366473,  0.12201654,  0.12020785,  0.11760552,
        0.11514432,  0.11210087,  0.10900949,  0.1051188 ,  0.10103996,
        0.09632989,  0.09193829,  0.08716598,  0.08254777,  0.07743229,
        0.07285787,  0.06799305,  0.06245872,  0.05690963,  0.05086577,
        0.04461923,  0.03819407,  0.03188796,  0.02541822,  0.01778836,
        0.00990201,  0.00165236, -0.006156  , -0.01591137, -0.02551323,
       -0.03526733, -0.04436763, -0.0563042 , -0.06510262, -0.07068726,
       -0.06983489, -0.07491237, -0.07717355, -0.06983063, -0.06193399,
       -0.04712036, -0.02608055,  0.00580229,  0.06005829,  0.14670306,
        0.25740299,  0.37666611,  0.48525685,  0.57306383,  0.63381916,
        0.66857159,  0.67865586]), 'short_range': array([ 1.15311916,  1.11424201,  1.045189  ,  0.9440084 ,  0.81661191,
        0.67300131,  0.53304685,  0.41421028,  0.3266353 ,  0.26362983,
        0.21017686,  0.16360479,  0.1253728 ,  0.09225881,  0.06449372,
        0.04050854,  0.02046292,  0.0033502 , -0.01079854, -0.02262298,
       -0.03202525, -0.04083763, -0.0488041 , -0.05748802, -0.06566735,
       -0.07392888, -0.08078801, -0.0875707 , -0.09430195, -0.10111284,
       -0.10632678, -0.11110552, -0.11598076, -0.12149446, -0.12530964,
       -0.12958805, -0.13459605, -0.13777251, -0.1374548 , -0.14177102,
       -0.14073569, -0.14215559, -0.15438287, -0.15628675, -0.15685085,
       -0.1594411 , -0.16145094, -0.16318385, -0.16539116, -0.1671679 ,
       -0.16936611, -0.17169882, -0.17426695, -0.17594666, -0.17737715,
       -0.17869273, -0.18012062, -0.18062793, -0.18055252, -0.1796847 ,
       -0.17881235, -0.1772241 , -0.17562847, -0.17360356, -0.17178249,
       -0.16923052, -0.16667101, -0.16356964, -0.1606778 , -0.15738433,
       -0.15413229, -0.149972  , -0.14560264, -0.1404894 , -0.13528363,
       -0.12894702, -0.12231103, -0.11575475, -0.10862346, -0.10139715,
       -0.09378373, -0.08575915, -0.07702574, -0.06786617, -0.05927693,
       -0.05035439, -0.04120538, -0.03102529, -0.02220245, -0.01263634,
       -0.0026328 ,  0.00861406,  0.01761381,  0.03034002,  0.04686652,
        0.07041285,  0.0886048 ,  0.11017471,  0.14188543,  0.17464351,
        0.21474115,  0.2613757 ,  0.31899598,  0.39889174,  0.51075139,
        0.64581852,  0.78808392,  0.91771546,  1.02395676,  1.09989268,
        1.14597923,  1.16307256]), 'shift': np.float64(-0.17772768440875789), 'check': [51, 62]}, 'pot_corr_uncertainty_md': {'stats': {'nobs': 11, 'minmax': (np.float64(-0.1806279282287892), np.float64(-0.17169881541916793)), 'mean': np.float64(-0.17772768440875789), 'variance': np.float64(7.992747159947843e-06), 'skewness': np.float64(0.9101502792448121), 'kurtosis': np.float64(-0.14368859021036062)}, 'potcorr': np.float64(-0.17772768440875789)}}, 1: {'pot_plot_data': {'Vr': [np.float64(-0.48678911089369303), np.float64(-0.484416694376441), np.float64(-0.47740763586129825), np.float64(-0.4660735203843387), np.float64(-0.45089292670876074), np.float64(-0.4324586074837264), np.float64(-0.41141781543828887), np.float64(-0.38841552683784836), np.float64(-0.3640483340118093), np.float64(-0.33883345331767883), np.float64(-0.3131936894444504), np.float64(-0.2874562454207824), np.float64(-0.26186151243005323), np.float64(-0.2365774965479304), np.float64(-0.211716063520616), np.float64(-0.18734825982317693), np.float64(-0.16351716387186893), np.float64(-0.14024773122376752), np.float64(-0.11755378238026601), np.float64(-0.09544263786510718), np.float64(-0.07391800789731512), np.float64(-0.0529816923632348), np.float64(-0.03263452726110925), np.float64(-0.012876884458928956), np.float64(0.006291077594532344), np.float64(0.024869294216772142), np.float64(0.0428577401058674), np.float64(0.06025640577651245), np.float64(0.07706528782042726), np.float64(0.09328438506364956), np.float64(0.10891369711851921), np.float64(0.1239532238623019), np.float64(0.13840296525773835), np.float64(0.15226292129398253), np.float64(0.1655330919680063), np.float64(0.17821347727899917), np.float64(0.1903040772267528), np.float64(0.20180489181121597), np.float64(0.21271592103237674), np.float64(0.22303716489023226), np.float64(0.23276862338478171), np.float64(0.24191029651602522), np.float64(0.2504621842839627), np.float64(0.25842428668859424), np.float64(0.26579660372991964), np.float64(0.272579135407939), np.float64(0.27877188172265244), np.float64(0.2843748426740598), np.float64(0.28938801826216104), np.float64(0.29381140848695636), np.float64(0.2976450133484455), np.float64(0.30088883284662865), np.float64(0.3035428669815058), np.float64(0.30560711575307703), np.float64(0.3070815791613421), np.float64(0.3079662572063013), np.float64(0.30826114988795417), np.float64(0.30796625720630105), np.float64(0.307081579161342), np.float64(0.30560711575307703), np.float64(0.3035428669815058), np.float64(0.30088883284662865), np.float64(0.29764501334844556), np.float64(0.29381140848695636), np.float64(0.28938801826216104), np.float64(0.28437484267405977), np.float64(0.2787718817226524), np.float64(0.272579135407939), np.float64(0.2657966037299196), np.float64(0.25842428668859424), np.float64(0.25046218428396283), np.float64(0.24191029651602525), np.float64(0.23276862338478177), np.float64(0.22303716489023212), np.float64(0.21271592103237674), np.float64(0.20180489181121608), np.float64(0.1903040772267528), np.float64(0.1782134772789991), np.float64(0.16553309196800636), np.float64(0.1522629212939826), np.float64(0.13840296525773835), np.float64(0.12395322386230184), np.float64(0.10891369711851916), np.float64(0.09328438506364957), np.float64(0.07706528782042725), np.float64(0.060256405776512464), np.float64(0.04285774010586747), np.float64(0.024869294216772128), np.float64(0.006291077594532344), np.float64(-0.012876884458928971), np.float64(-0.0326345272611092), np.float64(-0.0529816923632348), np.float64(-0.07391800789731517), np.float64(-0.09544263786510718), np.float64(-0.11755378238026604), np.float64(-0.14024773122376757), np.float64(-0.16351716387186893), np.float64(-0.18734825982317688), np.float64(-0.21171606352061592), np.float64(-0.2365774965479304), np.float64(-0.2618615124300532), np.float64(-0.2874562454207824), np.float64(-0.3131936894444504), np.float64(-0.33883345331767895), np.float64(-0.3640483340118093), np.float64(-0.38841552683784825), np.float64(-0.41141781543828887), np.float64(-0.4324586074837264), np.float64(-0.45089292670876063), np.float64(-0.4660735203843387), np.float64(-0.47740763586129825), np.float64(-0.484416694376441)], 'x': [0.0, 0.08776725131857337, 0.17553450263714673, 0.2633017539557201, 0.35106900527429347, 0.43883625659286685, 0.5266035079114402, 0.6143707592300136, 0.7021380105485869, 0.7899052618671604, 0.8776725131857337, 0.9654397645043071, 1.0532070158228803, 1.1409742671414538, 1.2287415184600272, 1.3165087697786007, 1.4042760210971739, 1.4920432724157473, 1.5798105237343207, 1.6675777750528942, 1.7553450263714674, 1.8431122776900408, 1.9308795290086143, 2.0186467803271877, 2.1064140316457607, 2.1941812829643346, 2.2819485342829076, 2.369715785601481, 2.4574830369200544, 2.545250288238628, 2.6330175395572013, 2.7207847908757747, 2.8085520421943477, 2.896319293512921, 2.9840865448314946, 3.071853796150068, 3.1596210474686415, 3.247388298787215, 3.3351555501057883, 3.4229228014243613, 3.5106900527429348, 3.598457304061508, 3.6862245553800816, 3.773991806698655, 3.8617590580172285, 3.949526309335802, 4.037293560654375, 4.125060811972949, 4.212828063291521, 4.300595314610096, 4.388362565928669, 4.476129817247242, 4.563897068565815, 4.6516643198843886, 4.739431571202962, 4.827198822521535, 4.914966073840109, 5.002733325158682, 5.090500576477256, 5.178267827795829, 5.266035079114403, 5.353802330432975, 5.4415695817515495, 5.529336833070122, 5.6171040843886955, 5.70487133570727, 5.792638587025842, 5.880405838344416, 5.968173089662989, 6.055940340981563, 6.143707592300136, 6.2314748436187095, 6.319242094937283, 6.407009346255856, 6.49477659757443, 6.582543848893002, 6.670311100211577, 6.75807835153015, 6.845845602848723, 6.933612854167297, 7.0213801054858695, 7.109147356804443, 7.196914608123016, 7.28468185944159, 7.372449110760163, 7.460216362078737, 7.54798361339731, 7.635750864715884, 7.723518116034457, 7.81128536735303, 7.899052618671604, 7.9868198699901765, 8.07458712130875, 8.162354372627323, 8.250121623945898, 8.33788887526447, 8.425656126583043, 8.513423377901617, 8.601190629220191, 8.688957880538764, 8.776725131857338, 8.86449238317591, 8.952259634494483, 9.040026885813058, 9.12779413713163, 9.215561388450205, 9.303328639768777, 9.391095891087351, 9.478863142405924, 9.566630393724498, 9.65439764504307, 9.742164896361645], 'dft_diff': array([ 0.55767228,  0.51904251,  0.45701816,  0.3683968 ,  0.25907366,
        0.13794417,  0.02308784, -0.0698924 , -0.12974783, -0.1642518 ,
       -0.18746476, -0.20436431, -0.21202061, -0.21527958, -0.21297863,
       -0.20891676, -0.20031495, -0.19109378, -0.17729287, -0.16384569,
       -0.1482868 , -0.13415543, -0.11709871, -0.10078308, -0.08276479,
       -0.0672694 , -0.05033257, -0.03619202, -0.0206622 , -0.00596788,
        0.01182454,  0.02165696,  0.03941996,  0.0538409 ,  0.05168237,
        0.0653252 ,  0.07617954,  0.08606432,  0.09483215,  0.10421716,
        0.11033342,  0.11768419,  0.12392546,  0.13044558,  0.13429607,
        0.13846255,  0.14187318,  0.14646932,  0.14975001,  0.15331151,
        0.15569569,  0.15927007,  0.1619051 ,  0.16489226,  0.16637153,
        0.16816285,  0.16917156,  0.17112391,  0.17201164,  0.17317273,
        0.17331806,  0.17412222,  0.17371859,  0.17395099,  0.1731255 ,
        0.17267231,  0.17112919,  0.170188  ,  0.16791603,  0.16580894,
        0.16307411,  0.16054192,  0.15700156,  0.15391115,  0.14994775,
        0.14613249,  0.14029909,  0.13446163,  0.12660812,  0.11980247,
        0.11058196,  0.1018356 ,  0.09076764,  0.08021142,  0.06511213,
        0.04866343,  0.02521234,  0.02056854,  0.02443354,  0.0006386 ,
       -0.0285603 , -0.03425367, -0.03083956, -0.03913871, -0.04979773,
       -0.06074079, -0.06785069, -0.07300791, -0.07213549, -0.06877408,
       -0.05852647, -0.0432959 , -0.01990322,  0.02287805,  0.09795057,
        0.19677701,  0.30649289,  0.40736385,  0.48822557,  0.54182699,
        0.57018305,  0.57396246]), 'short_range': array([ 1.04446139,  1.00345921,  0.9344258 ,  0.83447032,  0.70996659,
        0.57040277,  0.43450565,  0.31852313,  0.23430051,  0.17458165,
        0.12572893,  0.08309193,  0.04984091,  0.02129792, -0.00126257,
       -0.0215685 , -0.03679779, -0.05084605, -0.05973909, -0.06840305,
       -0.07436879, -0.08117374, -0.08446418, -0.0879062 , -0.08905586,
       -0.0921387 , -0.09319031, -0.09644843, -0.09772749, -0.09925226,
       -0.09708915, -0.10229626, -0.09898301, -0.09842202, -0.11385072,
       -0.11288828, -0.11412454, -0.11574058, -0.11788377, -0.11882001,
       -0.1224352 , -0.12422611, -0.12653672, -0.12797871, -0.13150054,
       -0.13411658, -0.13689871, -0.13790553, -0.13963801, -0.1404999 ,
       -0.14194933, -0.14161876, -0.14163777, -0.14071486, -0.14071005,
       -0.1398034 , -0.13908959, -0.13684234, -0.13506994, -0.13243439,
       -0.1302248 , -0.12676661, -0.12392642, -0.11986042, -0.11626252,
       -0.11170253, -0.10764269, -0.10239114, -0.09788057, -0.09261535,
       -0.08738808, -0.08136838, -0.07576706, -0.06912601, -0.06276817,
       -0.0556724 , -0.05000499, -0.04375184, -0.03892497, -0.03246045,
       -0.02782101, -0.02211763, -0.01814606, -0.01307296, -0.01195316,
       -0.01159298, -0.0176454 , -0.00430075,  0.01814246,  0.01351549,
        0.00407423,  0.01872802,  0.04307845,  0.05630393,  0.06775606,
        0.07950694,  0.09566647,  0.11434035,  0.13958057,  0.16780342,
        0.20333504,  0.24416035,  0.29329047,  0.3617115 ,  0.46199891,
        0.58519254,  0.7179107 ,  0.83982246,  0.9391185 ,  1.00790051,
        1.04759069,  1.05837915]), 'shift': np.float64(-0.13681022870604725), 'check': [51, 62]}, 'pot_corr_uncertainty_md': {'stats': {'nobs': 11, 'minmax': (np.float64(-0.1416377711175446), np.float64(-0.1267666101481178)), 'mean': np.float64(-0.13681022870604725), 'variance': np.float64(2.574561919584985e-05), 'skewness': np.float64(0.8081682819224428), 'kurtosis': np.float64(-0.663216779945198)}, 'potcorr': np.float64(-0.13681022870604725)}}, 2: {'pot_plot_data': {'Vr': [np.float64(-0.8382759399139681), np.float64(-0.8344043729641683), np.float64(-0.8230031255572401), np.float64(-0.8046808524393726), np.float64(-0.7803540122696649), np.float64(-0.7511243483170991), np.float64(-0.7181480008330221), np.float64(-0.6825211758954137), np.float64(-0.645199129733392), np.float64(-0.6069543469827123), np.float64(-0.5683700230957367), np.float64(-0.5298588532514938), np.float64(-0.49169534165257706), np.float64(-0.4540514588366575), np.float64(-0.4170288307366399), np.float64(-0.380684173612198), np.float64(-0.34504740743188667), np.float64(-0.31013346299965067), np.float64(-0.2759493926320397), np.float64(-0.24249835074631376), np.float64(-0.20978167400495862), np.float64(-0.1777998991777395), np.float64(-0.146553230600174), np.float64(-0.1160417420281747), np.float64(-0.08626545871047961), np.float64(-0.057224388845934684), np.float64(-0.02891853496038114), np.float64(-0.0013478977921671965), np.float64(0.02548752245388729), np.float64(0.05158772572385799), np.float64(0.07695271200426906), np.float64(0.10158248129192413), np.float64(0.1254770335861031), np.float64(0.14863636888665213), np.float64(0.1710604871935401), np.float64(0.19274938850676085), np.float64(0.21370307282631323), np.float64(0.23392154015219727), np.float64(0.25340479048441283), np.float64(0.2721528238229597), np.float64(0.29016564016783825), np.float64(0.3074432395190483), np.float64(0.32398562187658964), np.float64(0.3397927872404627), np.float64(0.354864735610667), np.float64(0.3692014669872029), np.float64(0.3828029813700704), np.float64(0.3956692787592693), np.float64(0.4078003591547997), np.float64(0.4191962225566618), np.float64(0.42985686896485503), np.float64(0.43978229837938), np.float64(0.4489725108002362), np.float64(0.4574275062274242), np.float64(0.46514728466094346), np.float64(0.4721318461007943), np.float64(0.4783811905469765), np.float64(0.4838953179994905), np.float64(0.48867422845833575), np.float64(0.4927179219235126), np.float64(0.49602639839502094), np.float64(0.4985996578728607), np.float64(0.5004377003570318), np.float64(0.5015405258475346), np.float64(0.5019081343443689), np.float64(0.5015405258475347), np.float64(0.5004377003570318), np.float64(0.4985996578728608), np.float64(0.4960263983950208), np.float64(0.4927179219235126), np.float64(0.48867422845833564), np.float64(0.48389531799949026), np.float64(0.4783811905469765), np.float64(0.4721318461007944), np.float64(0.4651472846609434), np.float64(0.45742750622742406), np.float64(0.4489725108002362), np.float64(0.4397822983793799), np.float64(0.4298568689648549), np.float64(0.4191962225566615), np.float64(0.4078003591547997), np.float64(0.3956692787592694), np.float64(0.38280298137007046), np.float64(0.369201466987203), np.float64(0.3548647356106671), np.float64(0.3397927872404627), np.float64(0.3239856218765897), np.float64(0.3074432395190483), np.float64(0.2901656401678383), np.float64(0.2721528238229598), np.float64(0.2534047904844128), np.float64(0.23392154015219735), np.float64(0.21370307282631335), np.float64(0.1927493885067608), np.float64(0.17106048719354017), np.float64(0.14863636888665221), np.float64(0.1254770335861031), np.float64(0.1015824812919241), np.float64(0.07695271200426908), np.float64(0.051587725723857995), np.float64(0.02548752245388737), np.float64(-0.001347897792167228), np.float64(-0.02891853496038117), np.float64(-0.05722438884593455), np.float64(-0.08626545871047958), np.float64(-0.1160417420281747), np.float64(-0.14655323060017397), np.float64(-0.17779989917773936), np.float64(-0.20978167400495862), np.float64(-0.2424983507463137), np.float64(-0.2759493926320397), np.float64(-0.3101334629996505), np.float64(-0.34504740743188667), np.float64(-0.38068417361219814), np.float64(-0.41702883073664), np.float64(-0.4540514588366576), np.float64(-0.49169534165257706), np.float64(-0.5298588532514938), np.float64(-0.5683700230957369), np.float64(-0.6069543469827122), np.float64(-0.645199129733392), np.float64(-0.682521175895414), np.float64(-0.7181480008330222), np.float64(-0.7511243483170991), np.float64(-0.780354012269665), np.float64(-0.8046808524393725), np.float64(-0.8230031255572401), np.float64(-0.8344043729641681)], 'x': [0.0, 0.084864078125, 0.16972815625, 0.254592234375, 0.3394563125, 0.42432039062500004, 0.50918446875, 0.5940485468750001, 0.678912625, 0.763776703125, 0.8486407812500001, 0.933504859375, 1.0183689375, 1.103233015625, 1.1880970937500002, 1.272961171875, 1.35782525, 1.4426893281250002, 1.52755340625, 1.612417484375, 1.6972815625000002, 1.782145640625, 1.86700971875, 1.9518737968750002, 2.036737875, 2.1216019531250003, 2.20646603125, 2.291330109375, 2.3761941875000003, 2.461058265625, 2.54592234375, 2.6307864218750003, 2.7156505, 2.800514578125, 2.8853786562500003, 2.970242734375, 3.0551068125, 3.1399708906250003, 3.22483496875, 3.309699046875, 3.3945631250000003, 3.479427203125, 3.56429128125, 3.6491553593750004, 3.7340194375, 3.818883515625, 3.9037475937500004, 3.988611671875, 4.07347575, 4.158339828125, 4.243203906250001, 4.328067984375, 4.4129320625, 4.497796140625001, 4.58266021875, 4.667524296875, 4.752388375000001, 4.837252453125, 4.92211653125, 5.006980609375001, 5.0918446875, 5.176708765625, 5.261572843750001, 5.346436921875, 5.431301, 5.516165078125001, 5.60102915625, 5.685893234375, 5.770757312500001, 5.855621390625, 5.94048546875, 6.025349546875001, 6.110213625, 6.195077703125, 6.279941781250001, 6.364805859375, 6.4496699375, 6.534534015625001, 6.61939809375, 6.704262171875, 6.789126250000001, 6.873990328125, 6.95885440625, 7.043718484375001, 7.1285825625, 7.213446640625, 7.298310718750001, 7.383174796875, 7.468038875, 7.552902953125001, 7.63776703125, 7.722631109375, 7.807495187500001, 7.892359265625, 7.97722334375, 8.062087421875, 8.1469515, 8.231815578125001, 8.31667965625, 8.401543734375, 8.486407812500001, 8.571271890625, 8.65613596875, 8.741000046875001, 8.825864125, 8.910728203125, 8.995592281250001, 9.080456359375, 9.1653204375, 9.250184515625001, 9.33504859375, 9.419912671875, 9.504776750000001, 9.589640828125, 9.67450490625, 9.759368984375001, 9.8442330625, 9.929097140625, 10.013961218750001, 10.098825296875, 10.183689375, 10.268553453125001, 10.35341753125, 10.438281609375, 10.523145687500001, 10.608009765625, 10.69287384375, 10.777737921875001], 'dft_diff': array([ 0.72939424,  0.67310138,  0.57533337,  0.43807158,  0.27052753,
        0.09551881, -0.05584036, -0.15765689, -0.21329707, -0.24818511,
       -0.27046155, -0.27920155, -0.28030455, -0.27452413, -0.26476114,
       -0.25090374, -0.23566078, -0.21927531, -0.20308598, -0.18658868,
       -0.17046205, -0.15380163, -0.1380438 , -0.12356968, -0.1114185 ,
       -0.09799866, -0.08358376, -0.06906468, -0.05482421, -0.04017318,
       -0.02576098, -0.01131246,  0.00275876,  0.01703011,  0.0309766 ,
        0.04448993,  0.0571648 ,  0.06956244,  0.08123724,  0.09204274,
        0.10155703,  0.11082374,  0.12019046,  0.12917391,  0.13762446,
        0.14410553,  0.15023946,  0.15661721,  0.16372356,  0.17085536,
        0.17834881,  0.18560446,  0.19263787,  0.19916586,  0.20539878,
        0.21097589,  0.21610983,  0.2204114 ,  0.22429771,  0.22749926,
        0.23033029,  0.23226623,  0.23381293,  0.23514185,  0.23687539,
        0.23825344,  0.23909234,  0.23894755,  0.23793225,  0.2367082 ,
        0.23603053,  0.23520907,  0.2344169 ,  0.23301123,  0.23122901,
        0.22833581,  0.22489221,  0.22055121,  0.2159104 ,  0.2102221 ,
        0.20386288,  0.19643599,  0.1890415 ,  0.18116832,  0.17344787,
        0.16539686,  0.15803658,  0.15093423,  0.14398414,  0.1352059 ,
        0.12527812,  0.11438749,  0.10358998,  0.09189496,  0.08003302,
        0.06685394,  0.05330238,  0.03814695,  0.02292914,  0.00641351,
       -0.01023464, -0.02818467, -0.04574036, -0.06409426, -0.08250551,
       -0.10231485, -0.12158156, -0.14074054, -0.15875272, -0.17328946,
       -0.18222933, -0.18739561, -0.18962921, -0.19077296, -0.1893597 ,
       -0.18251679, -0.17001688, -0.1486261 , -0.1176221 , -0.07557653,
       -0.00324208,  0.11807924,  0.27369049,  0.43722437,  0.57717318,
        0.67756291,  0.73263375,  0.74913555]), 'short_range': array([ 1.56767018,  1.50750575,  1.3983365 ,  1.24275243,  1.05088154,
        0.84664315,  0.66230764,  0.52486428,  0.43190206,  0.35876924,
        0.29790848,  0.25065731,  0.21139079,  0.17952733,  0.1522677 ,
        0.12978044,  0.10938663,  0.09085815,  0.07286341,  0.05590967,
        0.03931962,  0.02399827,  0.00850943, -0.00752794, -0.02515305,
       -0.04077427, -0.05466523, -0.06771678, -0.08031174, -0.0917609 ,
       -0.10271369, -0.11289494, -0.12271827, -0.13160625, -0.14008388,
       -0.14825945, -0.15653828, -0.1643591 , -0.17216755, -0.18011008,
       -0.18860861, -0.19661949, -0.20379516, -0.21061887, -0.21724028,
       -0.22509594, -0.23256352, -0.23905207, -0.2440768 , -0.24834087,
       -0.25150806, -0.25417784, -0.25633465, -0.25826164, -0.25974851,
       -0.26115596, -0.26227136, -0.26348392, -0.26437652, -0.26521866,
       -0.26569611, -0.26633342, -0.26662477, -0.26639868, -0.26503274,
       -0.26328709, -0.26134536, -0.25965211, -0.25809415, -0.25600972,
       -0.2526437 , -0.24868625, -0.24396429, -0.23912061, -0.23391827,
       -0.22909169, -0.2240803 , -0.21923109, -0.21394647, -0.20897412,
       -0.20393748, -0.19923329, -0.19376148, -0.18803314, -0.18141686,
       -0.17439593, -0.16594905, -0.15650901, -0.1461815 , -0.13694692,
       -0.12812667, -0.11953405, -0.11011309, -0.10085443, -0.09102747,
       -0.08178243, -0.07217466, -0.06343553, -0.05402357, -0.04517422,
       -0.03572216, -0.02683677, -0.01682182, -0.00686987,  0.00375995,
        0.0137269 ,  0.02497167,  0.03705936,  0.05102895,  0.06920889,
        0.09372007,  0.12273785,  0.1554182 ,  0.18991121,  0.22766913,
        0.27153466,  0.32167846,  0.38123275,  0.45074793,  0.53137781,
        0.64195705,  0.80060042,  0.99183849,  1.18834872,  1.35752719,
        1.48224376,  1.55563688,  1.58353992]), 'shift': np.float64(-0.26306298377681264), 'check': [59, 70]}, 'pot_corr_uncertainty_md': {'stats': {'nobs': 11, 'minmax': (np.float64(-0.2666247715572282), np.float64(-0.25600972156710367)), 'mean': np.float64(-0.26306298377681264), 'variance': np.float64(1.3904151463953328e-05), 'skewness': np.float64(0.7385828525109095), 'kurtosis': np.float64(-0.887685213920502)}, 'potcorr': np.float64(-0.26306298377681264)}}}, 'electrostatic': np.float64(2.157574), 'alignments': {0: np.float64(-0.17772768440875789), 1: np.float64(-0.13681022870604725), 2: np.float64(-0.26306298377681264)}, 'mean_alignments': np.float64(-0.1925336322972059), 'potential': np.float64(-0.3850672645944118)})
[ ]:
get_freysoldt_correction_from_locpot(
                                charge=2,
                                dielectric_constant=3.9,
                                defect_path_locpot=defect_path_locpot,
                                bulk_path_locpot=bulk_path_locpot,
                                get_plot=False,
                                get_correction_data=False)
np.float64(1.7725067354055881)

Kumagai#

DOI: https://doi.org/10.1103/PhysRevB.89.195205

Kumagai et al have extended the FNV approach (eFNV scheme), advantages are:

  • Corrections can be computed even when atomic positions are relaxed

  • Dielectric tensor is used instead of dielectric constant

This method employs the atomic site potential for determining the potential offset between the defect-induced potential and point charge potential, as opposed to the planar-averaged potential. It describes a point charge model with a dielectric tensor for evaluating long-range Coulomb interactions, which accounts for anisotropy.

defermi uses the pymatgen-analysis-defects library, which in turns uses the pydefect library, to compute the corrections. The workflow is easiest when importing data from a VASP calculation, but corrections can be computed also with DFT data from other codes, as long as the site potential data is available. To compute corrections directly from VASP directories, use the get_kumagai_correction function:

[9]:
from defermi.corrections.kumagai import get_kumagai_correction, get_kumagai_correction_from_structures

defect_path = '../defermi/tests/test_files/SiO2-defects/Defects/vacancies/Vac_O/q2/1-PBE-SCF'
bulk_path = '../defermi/tests/test_files/SiO2-defects/Bulk-2x2x2-supercell'

corr, ax = get_kumagai_correction(
                                defect_path=defect_path,
                                bulk_path=bulk_path,
                                charge=2,
                                dielectric_tensor=3.9,  # we can also pass a constant or a 3x1 array - it is converted to a diagonal tensor
                                get_plot=True)
../_images/advanced_charge_corrections_7_0.png

If you have simulation results from another DFT code, you can connect the site potentials to the Structure object by setting the the properties attribute for each Site object.

[14]:
from defermi.corrections.kumagai import _get_structure_with_pot_pmg

structure = _get_structure_with_pot_pmg(defect_path)

for site in structure:
    print(site.properties) # set it manually for each site if you don't use VASP
{'potential': 86.386}
{'potential': 88.0658}
{'potential': 86.341}
{'potential': 86.3869}
{'potential': 86.3199}
{'potential': 86.7722}
{'potential': 86.3022}
{'potential': 86.3953}
{'potential': 88.0549}
{'potential': 86.3426}
{'potential': 86.3719}
{'potential': 86.2891}
{'potential': 86.7971}
{'potential': 86.3447}
{'potential': 86.434}
{'potential': 86.3876}
{'potential': 86.4281}
{'potential': 86.6581}
{'potential': 86.7154}
{'potential': 86.7306}
{'potential': 86.6499}
{'potential': 86.3644}
{'potential': 86.3323}
{'potential': 86.3659}
{'potential': 72.3537}
{'potential': 72.3643}
{'potential': 72.2952}
{'potential': 72.7778}
{'potential': 72.305}
{'potential': 72.4127}
{'potential': 72.3356}
{'potential': 72.4565}
{'potential': 73.6553}
{'potential': 72.3061}
{'potential': 72.4426}
{'potential': 72.2938}
{'potential': 72.5022}
{'potential': 72.3627}
{'potential': 72.4511}
{'potential': 73.6431}
{'potential': 72.5027}
{'potential': 72.4048}
{'potential': 72.3903}
{'potential': 72.4328}
{'potential': 72.3914}
{'potential': 72.4888}
{'potential': 72.3581}
{'potential': 72.539}
{'potential': 73.5017}
{'potential': 72.4747}
{'potential': 72.448}
{'potential': 72.4935}
{'potential': 72.4396}
{'potential': 72.3432}
{'potential': 72.379}
{'potential': 72.5514}
{'potential': 72.494}
{'potential': 72.5575}
{'potential': 72.6337}
{'potential': 73.3672}
{'potential': 72.3141}
{'potential': 72.3696}
{'potential': 72.2878}
{'potential': 73.6959}
{'potential': 72.3201}
{'potential': 72.3685}
{'potential': 72.4122}
{'potential': 73.5228}
{'potential': 72.3047}
{'potential': 72.4443}
{'potential': 72.3118}