from QATK.Analysis import *
from QATK.Calculators.DFT import *
from QATK.Core import *

from NL.Analysis.GridValuesBuilders import buildGridValuesFromScalarField
from NL.Analysis.GridValuesBuilders import hartreeDifferencePotentialFromDensity

# Set up lattice
vector_a = [7.680028171823331, 7.680028171823331, 0.0]*Angstrom
vector_b = [-7.680028171823331, 7.680028171823331, 0.0]*Angstrom
vector_c = [0.0, 0.0, 91.45462630919732]*Angstrom
lattice = UnitCell(vector_a, vector_b, vector_c)

# Define elements
elements = [Silicon, Silicon, Silicon, Silicon, Silicon, Silicon, Silicon,
            Silicon, Silicon, Silicon, Silicon, Silicon, Silicon, Silicon,
            Silicon, Silicon, Silicon, Silicon, Silicon, Silicon, Silicon,
            Silicon, Silicon, Silicon, Silicon, Silicon, Silicon, Silicon,
            Silicon, Silicon, Silicon, Silicon, Silicon, Silicon, Silicon,
            Silicon, Silicon, Silicon, Silicon, Silicon, Silicon, Silicon,
            Silicon, Silicon, Silicon, Silicon, Silicon, Silicon, Silicon,
            Silicon, Silicon, Silicon, Silicon, Silicon, Silicon, Silicon,
            Silicon, Silicon, Silicon, Silicon, Silicon, Silicon, Silicon,
            Silicon, Silicon, Silicon, Silicon, Silicon, Silicon, Silicon,
            Silicon, Silicon, Silicon, Silicon, Silicon, Silicon, Silicon,
            Silicon, Silicon, Silicon, Silicon, Silicon, Silicon, Silicon,
            Silicon, Silicon, Silicon, Silicon, Silicon, Silicon, Silicon,
            Silicon, Silicon, Silicon, Silicon, Silicon, Silicon, Silicon,
            Silicon, Silicon, Silicon, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen,
            Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Silicon, Silicon, Silicon,
            Silicon, Silicon, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen,
            Oxygen, Oxygen, Oxygen, Oxygen, Silicon, Silicon, Silicon, Silicon,
            Silicon, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen,
            Oxygen, Oxygen, Oxygen, Silicon, Silicon, Silicon, Silicon,
            Silicon, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen,
            Oxygen, Oxygen, Oxygen, Silicon, Silicon, Silicon, Silicon,
            Silicon, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen,
            Oxygen, Oxygen, Oxygen, Silicon, Silicon, Silicon, Silicon,
            Silicon, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen,
            Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen,
            Hafnium, Hafnium, Hafnium, Hafnium, Hafnium, Hafnium, Hafnium,
            Hafnium, Hafnium, Hafnium, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen,
            Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen,
            Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Hafnium,
            Hafnium, Hafnium, Hafnium, Hafnium, Hafnium, Hafnium, Hafnium,
            Hafnium, Hafnium, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen,
            Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen,
            Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Hafnium, Hafnium,
            Hafnium, Hafnium, Hafnium, Hafnium, Hafnium, Hafnium, Hafnium,
            Aluminium, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen,
            Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Oxygen,
            Oxygen, Oxygen, Oxygen, Oxygen, Oxygen, Hafnium, Hafnium, Hafnium,
            Hafnium, Hafnium, Hafnium, Hafnium, Hafnium, Hafnium, Hafnium,
            Nitrogen, Nitrogen, Nitrogen, Nitrogen, Nitrogen, Nitrogen,
            Nitrogen, Nitrogen, Nitrogen, Nitrogen, Nitrogen, Nitrogen,
            Nitrogen, Nitrogen, Nitrogen, Titanium, Titanium, Titanium,
            Titanium, Titanium, Titanium, Titanium, Titanium, Titanium,
            Titanium, Titanium, Titanium, Titanium, Titanium, Titanium,
            Nitrogen, Nitrogen, Nitrogen, Nitrogen, Nitrogen, Nitrogen,
            Nitrogen, Nitrogen, Nitrogen, Nitrogen, Nitrogen, Nitrogen,
            Nitrogen, Nitrogen, Nitrogen, Titanium, Titanium, Titanium,
            Titanium, Titanium, Titanium, Titanium, Titanium, Titanium,
            Titanium, Titanium, Titanium, Titanium, Titanium, Titanium,
            Nitrogen, Nitrogen, Nitrogen, Nitrogen, Nitrogen, Nitrogen,
            Nitrogen, Nitrogen, Nitrogen, Nitrogen, Nitrogen, Nitrogen,
            Nitrogen, Nitrogen, Nitrogen, Titanium, Titanium, Titanium,
            Titanium, Titanium, Titanium, Titanium, Titanium, Titanium,
            Titanium, Titanium, Titanium, Titanium, Titanium, Titanium,
            Nitrogen, Nitrogen, Nitrogen, Nitrogen, Nitrogen, Nitrogen,
            Nitrogen, Nitrogen, Nitrogen, Nitrogen, Nitrogen, Nitrogen,
            Nitrogen, Nitrogen, Nitrogen, Titanium, Titanium, Titanium,
            Titanium, Titanium, Titanium, Titanium, Titanium, Titanium,
            Titanium, Titanium, Titanium, Titanium, Titanium, Titanium,
            Nitrogen, Nitrogen, Nitrogen, Nitrogen, Nitrogen, Nitrogen,
            Nitrogen, Nitrogen, Nitrogen, Nitrogen, Nitrogen, Nitrogen,
            Nitrogen, Nitrogen, Nitrogen, Titanium, Titanium, Titanium,
            Titanium, Titanium, Titanium, Titanium, Titanium, Titanium,
            Titanium, Titanium, Titanium, Titanium, Titanium, Titanium,
            Nitrogen, Nitrogen, Nitrogen, Nitrogen, Nitrogen, Nitrogen,
            Nitrogen, Nitrogen, Nitrogen, Nitrogen, Nitrogen, Nitrogen,
            Nitrogen, Nitrogen, Nitrogen, Titanium, Titanium, Titanium,
            Titanium, Titanium, Titanium, Titanium, Titanium, Titanium,
            Titanium, Titanium, Titanium, Titanium, Titanium, Titanium,
            Hydrogen, Hydrogen, Hydrogen, Hydrogen, Hydrogen, Hydrogen,
            Hydrogen, Hydrogen, Hydrogen, Hydrogen, Hydrogen, Hydrogen,
            Hydrogen, Hydrogen, Hydrogen, Hydrogen, Hydrogen, Hydrogen]

# Define coordinates
fractional_coordinates = [[ 0.157416201137,  0.233139390072,  0.217463665366],
                          [ 0.65744974645 ,  0.233030314621,  0.217464574257],
                          [ 0.407411655839,  0.483015967871,  0.217467182983],
                          [ 0.907409827425,  0.483065021559,  0.217465940075],
                          [ 0.157335483139,  0.733021955229,  0.217465352096],
                          [ 0.657357220529,  0.733041732229,  0.217465882381],
                          [ 0.407401923513,  0.982970020988,  0.217465548019],
                          [ 0.907396226095,  0.98311246367 ,  0.217463599966],
                          [ 0.29742362462 ,  0.123103351272,  0.231887133396],
                          [ 0.797474728396,  0.123186614014,  0.23190127635 ],
                          [ 0.04749844958 ,  0.37322968055 ,  0.231898854162],
                          [ 0.547428481421,  0.373063224953,  0.231895287493],
                          [ 0.297309495793,  0.623010899254,  0.231897090712],
                          [ 0.79735543623 ,  0.623092122264,  0.231896012009],
                          [ 0.047365269658,  0.873113274127,  0.231890878411],
                          [ 0.547312871253,  0.8730008127  ,  0.23190507112 ],
                          [ 0.422593047793,  0.248490768104,  0.247184910988],
                          [ 0.922656493819,  0.248768248441,  0.247193282382],
                          [ 0.172576792335,  0.49856126257 ,  0.24721458407 ],
                          [ 0.672557431026,  0.498512409336,  0.247191564279],
                          [ 0.422466766811,  0.748320626816,  0.247194956381],
                          [ 0.92253976702 ,  0.748583339955,  0.247182943293],
                          [ 0.172570250547,  0.998551547134,  0.247175769176],
                          [ 0.672574566905,  0.998546324405,  0.247175697507],
                          [ 0.048279606931,  0.124382375975,  0.262231174419],
                          [ 0.548059389638,  0.124030007673,  0.262231753062],
                          [ 0.298146265267,  0.373980841688,  0.2622511602  ],
                          [ 0.798215140674,  0.37445943383 ,  0.262267402646],
                          [ 0.047967313333,  0.624287659645,  0.262251524618],
                          [ 0.547859225036,  0.623739835206,  0.262263775882],
                          [ 0.297815169309,  0.873869738287,  0.262232238708],
                          [ 0.798086379682,  0.874238109547,  0.262229661996],
                          [ 0.17336284588 ,  0.249536190816,  0.277309388207],
                          [ 0.673051063742,  0.249584503209,  0.277269100841],
                          [ 0.423131402777,  0.498805584519,  0.277339419   ],
                          [ 0.923019852329,  0.500244548112,  0.277335085017],
                          [ 0.17280210494 ,  0.749536889798,  0.277313931913],
                          [ 0.673096022617,  0.749468761004,  0.277253290065],
                          [ 0.423080881852,  0.999129415852,  0.277249056896],
                          [ 0.923100810174,  0.999952608969,  0.277255317197],
                          [ 0.298974153579,  0.124732774199,  0.292353127575],
                          [ 0.798923210967,  0.125845058937,  0.2923207771  ],
                          [ 0.049369334669,  0.376132572372,  0.292336360008],
                          [ 0.54857328507 ,  0.374191104363,  0.292428982192],
                          [ 0.298386305396,  0.624749518783,  0.29234105155 ],
                          [ 0.799053169354,  0.626666190505,  0.292412492357],
                          [ 0.04880192229 ,  0.876183383132,  0.292359055602],
                          [ 0.548806398465,  0.874993965036,  0.292305429957],
                          [ 0.424695531986,  0.24799112339 ,  0.307547679275],
                          [ 0.924555484344,  0.251507995701,  0.307321940634],
                          [ 0.173919181928,  0.500931731221,  0.307530519563],
                          [ 0.67383161144 ,  0.501023007369,  0.307310362273],
                          [ 0.42333735321 ,  0.750404994513,  0.307316659097],
                          [ 0.923028451131,  0.753849650744,  0.307527963709],
                          [ 0.174020344805,  1.00094212272 ,  0.307484044291],
                          [ 0.673900365691,  1.000838120874,  0.307337878108],
                          [ 0.049290838586,  0.12717010251 ,  0.322492818702],
                          [ 0.549204496828,  0.121876546962,  0.322731384463],
                          [ 0.299521529576,  0.373877567556,  0.322431054257],
                          [ 0.800738944911,  0.377921357774,  0.32227709711 ],
                          [ 0.050024990159,  0.630166437912,  0.322404135945],
                          [ 0.548891748451,  0.626314561217,  0.322300117245],
                          [ 0.300496298181,  0.876741363859,  0.322498665158],
                          [ 0.800226994407,  0.881702619652,  0.322730382137],
                          [ 0.175572502994,  0.248640782673,  0.337602402331],
                          [ 0.680181306546,  0.246675198331,  0.337041094866],
                          [ 0.426602542657,  0.497891451412,  0.337222326067],
                          [ 0.922537803533,  0.507615923634,  0.33721726737 ],
                          [ 0.17363755822 ,  0.756407371428,  0.337578123513],
                          [ 0.669251381614,  0.75814584988 ,  0.337124579217],
                          [ 0.425742097634,  0.995646760973,  0.33821250231 ],
                          [ 0.924113911594,  1.008592764225,  0.338152777428],
                          [ 0.297106528613,  0.119451407647,  0.352986700829],
                          [ 0.802211052331,  0.135673471961,  0.353760431536],
                          [ 0.049155376983,  0.379088045908,  0.351747466351],
                          [ 0.55334845268 ,  0.366072051632,  0.351669785582],
                          [ 0.300402985866,  0.627419931865,  0.3517721268  ],
                          [ 0.797292640648,  0.640454232593,  0.351786714827],
                          [ 0.052713028952,  0.885722900908,  0.353018886646],
                          [ 0.547849875963,  0.869351323501,  0.353931787362],
                          [ 0.430045027837,  0.238887641723,  0.367267063325],
                          [ 0.925438023647,  0.274119123346,  0.368687270236],
                          [ 0.174072539947,  0.503983528429,  0.366417256796],
                          [ 0.67462593832 ,  0.503570138563,  0.365420862926],
                          [ 0.422057438657,  0.732579804185,  0.368916508817],
                          [ 0.920370022191,  0.767539461547,  0.36756105669 ],
                          [ 0.174497959207,  1.002889254584,  0.369497420393],
                          [ 0.676470644287,  1.00241549566 ,  0.36828437503 ],
                          [ 0.068940773221,  0.163999286881,  0.383477092792],
                          [ 0.528268171261,  0.09301897587 ,  0.383362391569],
                          [ 0.333938951459,  0.40229347879 ,  0.379631842638],
                          [ 0.841295458733,  0.456459980502,  0.381635021809],
                          [ 0.015436235555,  0.604396577364,  0.380145973437],
                          [ 0.507079526009,  0.548760492576,  0.381658075943],
                          [ 0.276125304189,  0.842877336124,  0.383868633443],
                          [ 0.824323874487,  0.914619918828,  0.383819466396],
                          [ 0.218024026948,  0.290469370434,  0.396656206459],
                          [ 0.674241648659,  0.499844691505,  0.398331441059],
                          [ 0.126561947029,  0.714835824412,  0.397820110063],
                          [ 0.439653010665,  0.926156829383,  0.397645786557],
                          [ 0.915002959889,  0.079319344049,  0.398500569386],
                          [ 0.31494447486 ,  0.197661318105,  0.404970423664],
                          [ 0.822848208537,  0.188930477884,  0.404917091536],
                          [ 0.16269507008 ,  0.379846974371,  0.409646667891],
                          [ 0.673280096917,  0.378626826992,  0.409266828105],
                          [ 0.192410797685,  0.622628457429,  0.409791648245],
                          [ 0.677377690183,  0.622162857954,  0.409052211251],
                          [ 0.02368401902 ,  0.792705540426,  0.4074749559  ],
                          [ 0.53344958006 ,  0.813485564369,  0.40288131488 ],
                          [ 0.384796196327,  0.977620350897,  0.413326868789],
                          [ 0.983934611884,  1.026259699178,  0.413294398547],
                          [ 0.773173158979,  0.286735203808,  0.417161561257],
                          [ 0.181204526378,  0.500447815343,  0.420061137149],
                          [ 0.582814315802,  0.724342275474,  0.416011545207],
                          [ 0.00451328268 ,  0.891401041113,  0.420691295214],
                          [ 0.354919231175,  0.116485794186,  0.419042887635],
                          [ 0.476983986593,  0.176451092468,  0.42601329479 ],
                          [ 0.707022053419,  0.220814808805,  0.430914973168],
                          [ 0.886681432243,  0.364285942409,  0.424063264967],
                          [ 0.065093793665,  0.506469275018,  0.431266300522],
                          [ 0.305119175757,  0.491028059971,  0.42999850917 ],
                          [ 0.466105780583,  0.66047229749 ,  0.424051858688],
                          [ 0.659186784092,  0.799240222755,  0.428284909072],
                          [ 0.887389257105,  0.861678656276,  0.430843154633],
                          [ 0.126151482098,  0.893773538251,  0.430934633324],
                          [ 0.246832515386,  0.108443545948,  0.431184250006],
                          [ 0.579162116269,  0.182641853631,  0.43884599157 ],
                          [ 0.974524438402,  0.399428101744,  0.437863312433],
                          [ 0.399226621499,  0.589589924358,  0.437533356565],
                          [ 0.775212301099,  0.796102258116,  0.439452453078],
                          [ 0.193560527988,  0.995990258827,  0.441198645651],
                          [ 0.049493542497,  0.279902789226,  0.443744541189],
                          [ 0.531932595137,  0.276378009246,  0.451337838358],
                          [ 0.499532743963,  0.514113569755,  0.447155873319],
                          [ 0.903021153328,  0.452522616383,  0.452196428928],
                          [ 0.326613796378,  0.684065903455,  0.448315560286],
                          [ 0.817148765511,  0.659338395113,  0.444461732823],
                          [ 0.305972687282,  0.92658236648 ,  0.449386686919],
                          [ 0.73756601769 ,  0.86404589246 ,  0.45455231909 ],
                          [ 0.09797856853 ,  0.056709259122,  0.452813892599],
                          [ 0.603518710868,  0.051151090188,  0.446687112661],
                          [ 0.088680293102,  0.200170553982,  0.458126734836],
                          [ 0.510237250916,  0.406300804394,  0.459486617643],
                          [ 0.883273182509,  0.591797161829,  0.458351567999],
                          [ 0.314999629199,  0.801594576681,  0.459231681856],
                          [ 0.687325399169,  0.996733056224,  0.459939195837],
                          [ 0.992997972485,  0.212090691415,  0.471653392224],
                          [ 0.222011829722,  0.244124984892,  0.464334468541],
                          [ 0.391345353508,  0.404607590821,  0.470224809226],
                          [ 0.629921604724,  0.432142729222,  0.469537628137],
                          [ 0.801711244858,  0.595147661409,  0.473262148939],
                          [ 1.013332202138,  0.654176214224,  0.463169779571],
                          [ 0.196988176003,  0.792399734079,  0.469995181611],
                          [ 0.437581011512,  0.816523349685,  0.469365013584],
                          [ 0.605979998428,  0.98689646538 ,  0.474781505957],
                          [ 0.806778711703,  1.079449686237,  0.463931454756],
                          [ 0.277182863112,  0.329691976449,  0.477412380571],
                          [ 0.683643781383,  0.53238539522 ,  0.480951726385],
                          [ 0.073930015299,  0.730618447912,  0.476809879892],
                          [ 0.483449239154,  0.921067104795,  0.480961931228],
                          [ 0.871616139768,  0.14422863182 ,  0.478023477051],
                          [ 0.320840510813,  0.246867480756,  0.491516853467],
                          [ 0.777409025316,  0.245654770669,  0.484380525618],
                          [ 0.174088186055,  0.425186718505,  0.483248974661],
                          [ 0.719660209885,  0.459986671372,  0.496300139591],
                          [ 0.110526967133,  0.646429567446,  0.491041109085],
                          [ 0.581449422038,  0.635359509121,  0.484800359323],
                          [ 0.977615743111,  0.833646970992,  0.482727023255],
                          [ 0.518668716376,  0.851758385992,  0.496514162504],
                          [ 0.375410572696,  1.019768777598,  0.484057952807],
                          [ 0.907674490681,  0.051138095258,  0.491474375678],
                          [ 0.711040410339,  0.306918624404,  0.498295018767],
                          [ 0.10756266476 ,  0.501486789583,  0.496289770455],
                          [ 0.511320735068,  0.699110748266,  0.498436261064],
                          [ 0.908729516501,  0.904139668736,  0.496104448537],
                          [ 0.308601979458,  0.101896668855,  0.496628809202],
                          [ 0.573772397372,  0.261281231367,  0.501154725688],
                          [-0.027414578546,  0.455172348358,  0.500429920059],
                          [ 0.373426015371,  0.654557788165,  0.500917909081],
                          [ 0.774517190718,  0.855495876042,  0.500411904666],
                          [ 0.170646830032,  1.060062805823,  0.500004283174],
                          [ 0.796437321172,  0.291432987741,  0.513278804874],
                          [ 0.189483985635,  0.497987313898,  0.511905269879],
                          [ 0.595363216409,  0.686865249386,  0.5135526192  ],
                          [-0.008509052327,  0.899113248379,  0.511656061518],
                          [ 0.388117951452,  0.095515934299,  0.512365201069],
                          [ 0.069301612209,  0.25097138948 ,  0.516600350206],
                          [ 0.460238160416,  0.447369913382,  0.517570878382],
                          [ 0.871695348993,  0.653090894551,  0.516634557108],
                          [ 0.264122033206,  0.847384294593,  0.516818433675],
                          [ 0.665064372831,  1.050015177127,  0.516904885906],
                          [ 0.467995286344,  0.269211343015,  0.519363985117],
                          [ 0.867618396379,  0.475291105526,  0.518604879069],
                          [ 0.268562592122,  0.669340983477,  0.519166447737],
                          [ 0.66676885666 ,  0.871698881084,  0.518508921579],
                          [ 0.069069108469,  1.073394936067,  0.518559895112],
                          [ 0.755656453096,  0.163660274203,  0.529468566238],
                          [ 0.154671277542,  0.369115258347,  0.528904002335],
                          [ 0.553723049767,  0.56083048537 ,  0.529878935958],
                          [ 0.955205693175,  0.772717873755,  0.528788082929],
                          [ 0.353668998157,  0.964031039052,  0.52899127204 ],
                          [ 0.313499517225,  0.278907563354,  0.533063648039],
                          [ 0.715694912879,  0.476950221066,  0.53305397631 ],
                          [ 0.114935328181,  0.681764827996,  0.532830623991],
                          [ 0.512993242319,  0.876941175552,  0.532812040811],
                          [ 0.917364624519,  0.076821050143,  0.532915062993],
                          [ 0.595354124164,  0.25819787312 ,  0.534728406576],
                          [-0.004955961854,  0.461013112643,  0.534207297535],
                          [ 0.391473089579,  0.655776040951,  0.535058813784],
                          [ 0.793313384152,  0.858950442896,  0.534305396778],
                          [ 0.192303616639,  0.056000477359,  0.534327250666],
                          [ 0.821437177059,  0.280373170181,  0.5476643548  ],
                          [ 0.22019544564 ,  0.485594538748,  0.547468671738],
                          [ 0.616639816391,  0.684579585781,  0.54723942474 ],
                          [ 0.020804999675,  0.883223272828,  0.548259105262],
                          [ 0.417342409695,  0.084872121582,  0.546791941073],
                          [ 0.101906411342,  0.261665849843,  0.547612704713],
                          [ 0.502303656849,  0.46041163483 ,  0.548977147596],
                          [ 0.902922987241,  0.664634720799,  0.54763224719 ],
                          [ 0.300277829029,  0.86408050446 ,  0.548742616796],
                          [ 0.701631629008,  0.06024880599 ,  0.548225767485],
                          [ 0.258368871845,  0.170672322408,  0.55235300836 ],
                          [ 0.663658427199,  0.369513389956,  0.552991517223],
                          [ 0.063720292382,  0.578786735697,  0.552253836633],
                          [ 0.457139721672,  0.769695115841,  0.552799160269],
                          [ 0.863975555207,  0.976481857894,  0.553073054177],
                          [ 0.963531563482,  0.269489942473,  0.561897007534],
                          [ 0.357229199414,  0.471879339205,  0.562390583926],
                          [ 0.759199851803,  0.680488118702,  0.560966323815],
                          [ 0.158530880543,  0.878034824877,  0.562932266071],
                          [ 0.554629706652,  0.07087465492 ,  0.561334664374],
                          [ 0.933330445097,  0.09272358382 ,  0.568160808404],
                          [ 0.326566135392,  0.290388821099,  0.567516497136],
                          [ 0.740070527457,  0.499725544963,  0.566014630907],
                          [ 0.138766275652,  0.694805602091,  0.567795684697],
                          [ 0.537279387516,  0.890297309313,  0.566464836715],
                          [ 0.577587506718,  0.250399819187,  0.56680020319 ],
                          [ 0.994056483742,  0.45381758437 ,  0.566569634977],
                          [ 0.391533340466,  0.65176171741 ,  0.568906638782],
                          [ 0.787774960255,  0.857014287967,  0.567280050727],
                          [ 0.183417307848,  0.05754717159 ,  0.567897105685],
                          [ 0.429835595796,  0.078760556381,  0.580704385311],
                          [ 0.83434949151 ,  0.304248811513,  0.578904054892],
                          [ 0.228853123347,  0.499556286099,  0.58057851725 ],
                          [ 0.63228278375 ,  0.699207853745,  0.579745489977],
                          [ 0.037865537692,  0.89969805994 ,  0.581809147983],
                          [ 0.087303170552,  0.24903717628 ,  0.580597070096],
                          [ 0.476564930189,  0.441065358603,  0.580544129742],
                          [ 0.894032543262,  0.662560009018,  0.579602350112],
                          [ 0.291526734399,  0.852743972281,  0.581839472442],
                          [ 0.685619249994,  0.0524642759  ,  0.579414581879],
                          [ 0.449944730612,  0.256762174228,  0.585856165564],
                          [ 0.869961972691,  0.482727666317,  0.584187363087],
                          [ 0.256545306426,  0.677037873426,  0.586664287662],
                          [ 0.65671947208 ,  0.876708803454,  0.585528773289],
                          [ 0.078170611338,  0.074973749943,  0.588524832591],
                          [ 0.760622716894,  0.179366631028,  0.591927174685],
                          [ 0.16268051916 ,  0.372714199421,  0.594450374827],
                          [ 0.554191076027,  0.571666055168,  0.592453859484],
                          [ 0.948497977218,  0.77937074456 ,  0.595492440563],
                          [ 0.366749239304,  0.962036358326,  0.593649200568],
                          [ 0.923725273897,  0.12668698415 ,  0.601620230668],
                          [ 0.331560829589,  0.318734958863,  0.602723320123],
                          [ 0.721167766484,  0.505297871241,  0.596033955828],
                          [ 0.120753853064,  0.710733247699,  0.603206090887],
                          [ 0.522942253389,  0.910556592826,  0.600465032512],
                          [ 0.607630497357,  0.266956771175,  0.596330077819],
                          [ 0.991586638933,  0.431911543055,  0.600914671672],
                          [ 0.388960971256,  0.627378929758,  0.602705604652],
                          [ 0.797270645036,  0.876797219257,  0.600462521373],
                          [ 0.23699994533 ,  0.056665216964,  0.600524512768],
                          [ 0.458085443919,  0.146357490188,  0.611348421369],
                          [ 0.785381670397,  0.320409385635,  0.611944410225],
                          [ 0.199474354023,  0.493562144316,  0.611711346507],
                          [ 0.615067339836,  0.675894527352,  0.611378360047],
                          [ 1.014560669969,  0.917176861026,  0.610841136029],
                          [ 0.696837113187,  0.080986527359,  0.61166086294 ],
                          [ 0.118767321087,  0.235371112338,  0.610169370783],
                          [ 0.547539679412,  0.444436487989,  0.612712018553],
                          [ 0.88635779352 ,  0.635136240016,  0.610449098685],
                          [ 0.332299964008,  0.86784027312 ,  0.612253412201],
                          [ 0.282826790823,  0.174986558854,  0.619870088076],
                          [ 0.608903972333,  0.267089650574,  0.619838334357],
                          [ 0.042391672407,  0.568875338071,  0.61966912129 ],
                          [ 0.455764798311,  0.7344049115  ,  0.621686408567],
                          [ 0.858380470304,  0.000458297483,  0.618759465691],
                          [ 0.529222149745,  0.000490700397,  0.622145048668],
                          [ 0.95538251636 ,  0.284976801065,  0.619351313321],
                          [ 0.368339577038,  0.462067859171,  0.621737106743],
                          [ 0.722499310802,  0.536498571125,  0.618970726334],
                          [ 0.163148028941,  0.844126027428,  0.6218342853  ],
                          [ 0.107481194608, -0.036041277234,  0.638340259372],
                          [ 0.366211890062,  0.041837659312,  0.636225647513],
                          [ 0.625153584097,  0.114522470285,  0.637093784292],
                          [ 0.905651188694,  0.156043837513,  0.635089221108],
                          [ 0.170658586639,  0.232128812567,  0.638171799817],
                          [ 0.423594650097,  0.307877608081,  0.634714158973],
                          [ 0.694226643634,  0.380564596039,  0.636868710003],
                          [ 0.974526636639,  0.433013914409,  0.634818249663],
                          [ 0.235776482885,  0.503067099803,  0.638835883965],
                          [ 0.484735011755,  0.579089395502,  0.636034828095],
                          [ 0.767025225661,  0.633806736393,  0.638091506213],
                          [ 0.052501120752,  0.705242945267,  0.635956442855],
                          [ 0.299427391533,  0.769360524715,  0.637939028238],
                          [ 0.56072970266 ,  0.84460438902 ,  0.635989446734],
                          [ 0.832894490789,  0.902749643622,  0.637624358217],
                          [ 0.950049971273,  0.013617481703,  0.649905051914],
                          [ 0.212128599919,  0.078995992477,  0.650033587217],
                          [ 0.474047767561,  0.156758969183,  0.649973146804],
                          [ 0.743821340258,  0.215930902461,  0.649543430407],
                          [ 0.017166189112,  0.27704477427 ,  0.650237125624],
                          [ 0.275381855337,  0.348449366118,  0.650184489876],
                          [ 0.54271908854 ,  0.422516330623,  0.649575462339],
                          [ 0.811228987433,  0.480684796972,  0.649921453989],
                          [ 0.082843081324,  0.544802152565,  0.650711292486],
                          [ 0.341206320503,  0.619591952465,  0.650494586787],
                          [ 0.611865257447,  0.686221068482,  0.649380901445],
                          [ 0.879341281651,  0.74832245824 ,  0.648249654688],
                          [ 0.145784796537,  0.81186212527 ,  0.651818658969],
                          [ 0.408244223298,  0.887327543771,  0.650345087934],
                          [ 0.679261184867, -0.051133010525,  0.649823881284],
                          [ 0.522741860636, -0.003504770092,  0.663256019394],
                          [ 0.790311239576,  0.061099760755,  0.66304358054 ],
                          [ 0.057385634035,  0.124403325991,  0.663553963641],
                          [ 0.323587418078,  0.193868121749,  0.663691538461],
                          [ 0.589527478423,  0.263197941662,  0.662968633302],
                          [ 0.857440280364,  0.32530563881 ,  0.663009895688],
                          [ 0.123376099688,  0.390752935498,  0.663689515212],
                          [ 0.390589703339,  0.460422320556,  0.663599986374],
                          [ 0.65581168573 ,  0.528020119022,  0.663038059521],
                          [ 0.924000605149,  0.592676972307,  0.663204046532],
                          [ 0.189744733593,  0.657799010505,  0.664215960658],
                          [ 0.457200199386,  0.728732877167,  0.6634731378  ],
                          [ 0.72428217964 ,  0.793621069696,  0.662867894666],
                          [ 0.988347136216,  0.857220294831,  0.663552777232],
                          [ 0.257629143627, -0.073158680554,  0.664075262442],
                          [ 0.10119413386 , -0.028616261979,  0.6771232944  ],
                          [ 0.368824075692,  0.038650393604,  0.676954230845],
                          [ 0.634726317905,  0.105157914507,  0.676502569169],
                          [ 0.900385020291,  0.171251436454,  0.676541922354],
                          [ 0.168345966754,  0.236998486727,  0.676901195633],
                          [ 0.435835499862,  0.305696084977,  0.676807863387],
                          [ 0.701497659707,  0.371225864644,  0.676424237004],
                          [ 0.967525451257,  0.435803296686,  0.676739604289],
                          [ 0.234840238056,  0.503572844112,  0.677099028224],
                          [ 0.502672519045,  0.572127500069,  0.676719489457],
                          [ 0.768473754714,  0.638480265689,  0.676298346566],
                          [ 0.032864333159,  0.702783135208,  0.67699733974 ],
                          [ 0.302331239775,  0.770937513452,  0.67730528486 ],
                          [ 0.568232050711,  0.838675954109,  0.676677456753],
                          [ 0.834872105003,  0.903843723094,  0.676440713662],
                          [ 0.945314407038,  0.015351655687,  0.690268288256],
                          [ 0.212779638442,  0.082183502473,  0.690503880816],
                          [ 0.480043251394,  0.149569021639,  0.69029030906 ],
                          [ 0.745817320918,  0.215795761509,  0.690133514582],
                          [ 0.012337243391,  0.281491067537,  0.690322134037],
                          [ 0.279860654384,  0.348363344514,  0.690439851204],
                          [ 0.546752494143,  0.416172133066,  0.690202028043],
                          [ 0.812322063568,  0.48236600804 ,  0.690122066754],
                          [ 0.078745070576,  0.547775750332,  0.690441510296],
                          [ 0.346797891706,  0.615018522656,  0.690478801564],
                          [ 0.613435755883,  0.682761684014,  0.690152842151],
                          [ 0.878412399892,  0.748748006498,  0.69023051626 ],
                          [ 0.14550976778 ,  0.815140252856,  0.69053753644 ],
                          [ 0.41361954965 ,  0.882687711304,  0.690424439054],
                          [ 0.679647245527, -0.050606316096,  0.690137568189],
                          [ 0.524596754868, -0.006418515687,  0.70361118893 ],
                          [ 0.790702461881,  0.059944265119,  0.703509599606],
                          [ 0.056829420857,  0.126662541083,  0.703695977794],
                          [ 0.324269589601,  0.193520776006,  0.703716881667],
                          [ 0.59117740976 ,  0.260135898106,  0.703550035603],
                          [ 0.857000284532,  0.32647470905 ,  0.703566280639],
                          [ 0.123675572736,  0.392997667399,  0.703733826191],
                          [ 0.391203584408,  0.460133848305,  0.703693286215],
                          [ 0.657818188792,  0.526703950675,  0.7035033051  ],
                          [ 0.923433399046,  0.592933502463,  0.703613022431],
                          [ 0.190424674956,  0.659793902241,  0.703807963024],
                          [ 0.458050501093,  0.726748685141,  0.703687776186],
                          [ 0.724254534109,  0.793321898704,  0.70350011228 ],
                          [ 0.990116698903,  0.859756809179,  0.703685733866],
                          [ 0.257432605893, -0.073190431131,  0.703806038529],
                          [ 0.10175491897 , -0.029106284787,  0.717156864653],
                          [ 0.369012077534,  0.037722076815,  0.717163948458],
                          [ 0.635564885526,  0.10448336769 ,  0.717071774044],
                          [ 0.90168581624 ,  0.170943499322,  0.71708852518 ],
                          [ 0.168614122329,  0.237462174705,  0.717156988769],
                          [ 0.43570884018 ,  0.304330100833,  0.717134363065],
                          [ 0.702051791674,  0.371094492909,  0.717061859052],
                          [ 0.968344244254,  0.437440516917,  0.717105765   ],
                          [ 0.235411775146,  0.504058319393,  0.717165567453],
                          [ 0.502424371382,  0.571010899307,  0.717114790272],
                          [ 0.768509514555,  0.63769304778 ,  0.717063764977],
                          [ 0.034965662192,  0.704118040912,  0.717145494133],
                          [ 0.302198963563,  0.770892511065,  0.71717849624 ],
                          [ 0.5690163932  ,  0.837815098652,  0.717098392251],
                          [ 0.835046883972,  0.904404316063,  0.717078713791],
                          [ 0.946546734976,  0.015381170051,  0.730373422513],
                          [ 0.213343056282,  0.082146206173,  0.730418276304],
                          [ 0.480300344234,  0.148866552714,  0.730371683912],
                          [ 0.746802744141,  0.215396350722,  0.730335255245],
                          [ 0.013217465372,  0.282027803437,  0.73038793071 ],
                          [ 0.280123119654,  0.348780951282,  0.730409951274],
                          [ 0.546992277973,  0.41549265863 ,  0.730353061551],
                          [ 0.81337449106 ,  0.482020912399,  0.730344889839],
                          [ 0.079889388861,  0.548650462661,  0.730401816131],
                          [ 0.346848799549,  0.615438223612,  0.730407522964],
                          [ 0.613631965804,  0.682092451815,  0.730345659657],
                          [ 0.879928278625,  0.748668062959,  0.73036173145 ],
                          [ 0.146616981879,  0.815388730004,  0.730420414159],
                          [ 0.413620896426,  0.882163819985,  0.730397692208],
                          [ 0.6802109818  , -0.051216832741,  0.730334012636],
                          [ 0.524689685101, -0.007037798244,  0.743870170469],
                          [ 0.791163077395,  0.059597365685,  0.743858584097],
                          [ 0.057790432545,  0.126193479335,  0.743877231104],
                          [ 0.324640514257,  0.192899339042,  0.743884458904],
                          [ 0.591325894027,  0.259631108799,  0.743863787254],
                          [ 0.857808664688,  0.326237526273,  0.743861317431],
                          [ 0.124502113036,  0.392839138516,  0.743881707243],
                          [ 0.391340227843,  0.459560505942,  0.743880329656],
                          [ 0.657945192394,  0.526276559154,  0.743860581299],
                          [ 0.924447233717,  0.592864086203,  0.743864962631],
                          [ 0.191192314602,  0.659485009773,  0.743885410676],
                          [ 0.458022190379,  0.726234133561,  0.74387610169 ],
                          [ 0.724545065101,  0.792935191272,  0.743858809738],
                          [ 0.99109415618 ,  0.859517608764,  0.74387069857 ],
                          [ 0.257921179011, -0.073794321788,  0.743886278989],
                          [ 0.102015528804, -0.029966759761,  0.757461685415],
                          [ 0.36873847241 ,  0.036750544991,  0.757463559827],
                          [ 0.635433406918,  0.103406322068,  0.757445990312],
                          [ 0.902047135367,  0.170039049122,  0.757449243245],
                          [ 0.168697889728,  0.236729957868,  0.757466728193],
                          [ 0.435431054051,  0.303421700913,  0.7574596793  ],
                          [ 0.702088235067,  0.370062017591,  0.757443629708],
                          [ 0.968691222121,  0.436704389592,  0.757454420809],
                          [ 0.235368627824,  0.503386824527,  0.757468341217],
                          [ 0.502094525705,  0.570071739183,  0.757455977216],
                          [ 0.768738347474,  0.636695097968,  0.757446121315],
                          [ 0.035342345317,  0.703346780268,  0.757458494856],
                          [ 0.302049952243,  0.7700605606  ,  0.757467084405],
                          [ 0.568775692022,  0.836727457967,  0.757451249733],
                          [ 0.835385839797,  0.903361044703,  0.757445523446],
                          [ 0.946975174673,  0.014893187503,  0.77094191234 ],
                          [ 0.213665317015,  0.081554803874,  0.770951703486],
                          [ 0.480380484627,  0.148253698782,  0.770946358216],
                          [ 0.747014039953,  0.214923297704,  0.770937964461],
                          [ 0.013639918123,  0.281559863402,  0.770945743067],
                          [ 0.280354496184,  0.348228064692,  0.77095280483 ],
                          [ 0.547047806978,  0.414919016475,  0.770944121681],
                          [ 0.813660735289,  0.48156802048 ,  0.770940068332],
                          [ 0.080305954392,  0.548210629473,  0.770949570721],
                          [ 0.347022186101,  0.61489147713 ,  0.77095189443 ],
                          [ 0.613698197008,  0.681577076552,  0.770941655238],
                          [ 0.880312755135,  0.748226145323,  0.770941036306],
                          [ 0.146975976801,  0.814873931633,  0.770951155476],
                          [ 0.413698283609,  0.881570280369,  0.770949535756],
                          [ 0.68035619887 , -0.051745586882,  0.770938545378],
                          [ 0.525268885705, -0.006927364759,  0.78271752647 ],
                          [ 0.791887122726,  0.059736569565,  0.782712682145],
                          [ 0.058532745522,  0.126373280037,  0.78272007609 ],
                          [ 0.325257970119,  0.193053493691,  0.782723803372],
                          [ 0.591938014372,  0.259744781933,  0.782716355862],
                          [ 0.858542316548,  0.326390779783,  0.782715052198],
                          [ 0.125207122812,  0.393032858635,  0.782723450604],
                          [ 0.391932799355,  0.459717933462,  0.782723947994],
                          [ 0.658584376591,  0.526404791913,  0.78271585873 ],
                          [ 0.925192926718,  0.593047274445,  0.782717854445],
                          [ 0.191881003689,  0.659698159881,  0.782724763246],
                          [ 0.458594534342,  0.726391135974,  0.782720831439],
                          [ 0.725232363883,  0.793070829681,  0.782713332808],
                          [ 0.991853630929,  0.85971309212 ,  0.78271806631 ],
                          [ 0.258561619456, -0.073624083996,  0.782723876924],
                          [ 0.065264605309,  0.141070553221,  0.212944128279],
                          [ 0.206864897803,  0.282566719295,  0.203369505204],
                          [ 0.565397404584,  0.140876302993,  0.212942829339],
                          [ 0.70698865029 ,  0.282407956171,  0.203372741492],
                          [ 0.315420623234,  0.390801283485,  0.212947916578],
                          [ 0.456908030727,  0.532410537808,  0.203373219535],
                          [ 0.815428881647,  0.390821028756,  0.212947714308],
                          [ 0.956818956   ,  0.532488125978,  0.203369902596],
                          [ 0.065223960846,  0.640894688812,  0.212953295968],
                          [ 0.206771278356,  0.782412017648,  0.203368268471],
                          [ 0.565346634071,  0.640926495509,  0.212921701185],
                          [ 0.706997429584,  0.782548262322,  0.20338555077 ],
                          [ 0.315382638208,  0.890800528742,  0.212936790949],
                          [ 0.457039550898,  1.03235398064 ,  0.203379063387],
                          [ 0.81530793103 ,  0.890999572072,  0.212941993365],
                          [ 0.956929072245,  1.032507410638,  0.203372234036],
                          [ 0.590243184008,  0.167832539916,  0.394891648253],
                          [ 0.762192383077,  0.839607827083,  0.395317169908]]

# Set up configuration
bulk_configuration = BulkConfiguration(
    bravais_lattice=lattice,
    elements=elements,
    fractional_coordinates=fractional_coordinates
)

# %% Set LCAOCalculator

# %% LCAOCalculator

# ----------------------------------------
# Exchange-Correlation
# ----------------------------------------
exchange_correlation = GGAHalf.PBE

boundary_conditions = [
    [PeriodicBoundaryCondition(), PeriodicBoundaryCondition()],
    [PeriodicBoundaryCondition(), PeriodicBoundaryCondition()],
    [NeumannBoundaryCondition(), DirichletBoundaryCondition()],
]

poisson_solver = FastFourier2DSolver(
    boundary_conditions=boundary_conditions
)

k_point_sampling = KpointDensity(
    density_a=4.0 * Angstrom, density_b=4.0 * Angstrom, density_c=4.0 * Angstrom
)

numerical_accuracy_parameters = NumericalAccuracyParameters(
    k_point_sampling=k_point_sampling,
    density_mesh_cutoff=125 * Hartree,
)

model = PretrainedGridValuesModels.density_HKMG_PBEHalf_PD_Medium_Y2026

grid_values_predictor = RangeSeparatedDensityPredictor(
    model=model,
)

algorithm_parameters = AlgorithmParameters(grid_values_predictor=grid_values_predictor)

calculator = LCAOCalculator(
    exchange_correlation=exchange_correlation,
    numerical_accuracy_parameters=numerical_accuracy_parameters,
    checkpoint_handler=NoCheckpointHandler,
    poisson_solver=poisson_solver,
    algorithm_parameters=algorithm_parameters,
    iteration_control_parameters=NonSelfconsistent,
)

# %% Set Calculator

bulk_configuration.setCalculator(calculator)

bulk_configuration.update()

nlsave('HkMG-Al-substitution_results.hdf5', bulk_configuration)

kpoints = KpointDensity(density_a=7.0 * Angstrom, density_b=7.0 * Angstrom)

pdos = ProjectedDensityOfStates(
    configuration=bulk_configuration,
    kpoints=kpoints,
    projections=ProjectOnSites,
    energies=numpy.linspace(-10.0, 10.0, 1001) * eV,
)

nlsave('HkMG-Al-substitution_results.hdf5', pdos)

edd_sf = grid_values_predictor.predictElectronDifferenceDensity(bulk_configuration, calculator)
edd = buildGridValuesFromScalarField(ElectronDifferenceDensity, edd_sf, bulk_configuration)
hdp = hartreeDifferencePotentialFromDensity(edd)

nlsave('HkMG-Al-substitution_results.hdf5', hdp)
